Contoh Fix 5: pwhash.argon2id.str(pw.encode()) untuk menyimpan, pwhash.argon2id.verify(stored, pw.encode()) untuk memverifikasi (bungkus try/except dan kembalikan False bila gagal).
AEAD dengan nonce unik per pesan dan kebijakan rotasi kunci.
Library tingkat tinggi (libsodium, Tink), tetap ditambal.
Kunci di KMS/HSM/secrets manager, pemisahan tugas, audit penggunaan.
Password dengan Argon2id/scrypt/bcrypt, tidak pernah enkripsi reversibel.
Validasi sertifikat, TLS 1.3, pindai dengan testssl.sh di CI.
Crypto agility: algoritma dan kunci harus dapat diganti.
Anti-Pattern Engineering
Algoritma atau “obfuscation” buatan sendiri; merangkai protokol sendiri dari primitif (enkripsi tapi lupa autentikasi); enkripsi tanpa autentikasi; kunci disimpan di samping data yang dilindunginya; validasi sertifikat dimatikan “hanya untuk testing”; primitif usang dipertahankan demi kenyamanan (MD5, SHA-1, RC4, 3DES, RSA-1024).
Summary
Perbaiki penggunaan, bukan algoritma: AEAD menggantikan ECB/CBC mentah, nonce dikelola library, kunci dari KMS/secrets manager (dan dirotasi bila bocor), token dari CSPRNG, password dengan Argon2id, sertifikat divalidasi dan MAC dibandingkan constant-time. Tambahkan crypto agility serta scanner di CI untuk mencegah regresi.
Additional Information
Memverifikasi Perbaikan
Setelah memperbaiki, jalankan ulang Semgrep p/cryptography, Bandit, dan gitleaks (seperti pada Deteksi Crypto Misuse dan Padding Oracle) serta tambahkan test negatif: modifikasi 1 byte ciphertext harus gagal didekripsi; dua enkripsi plaintext sama harus menghasilkan ciphertext berbeda.
Proyek Eksplorasi Mandiri
Refactor file sampel berisi lima bug menjadi versi aman dan tulis test negatif untuk tiap perbaikan.
Ukur waktu hash Argon2id pada mesin Anda dan setel parameter ke target 100 ms.