Back to IF5161 Keamanan Data dan Perangkat Lunak

Rekayasa Kriptografi Terapan

Questions/Cues

  • Primitif kripto apa yang tersedia dan tujuan masing-masing?
  • Mengapa AEAD wajib untuk desain baru?
  • Bagaimana mengelola nonce, IV, dan randomness?
  • Seperti apa siklus hidup manajemen kunci?
  • Bagaimana TLS 1.3 dan PKI menerapkan kripto dalam praktik?
  • Library apa yang sebaiknya dipakai?

Reference Points

  • IF5161 — W07 Crypto and Data Security, “Applied Cryptographic Engineering” (Foundation: The Cryptographic Toolbox s.d. “Current Practice: Prefer Vetted, High-Level Libraries”)

Toolbox Kriptografi

PrimitifTujuanKunciContoh
Symmetric cipherConfidentialityShared secretAES, ChaCha20
AEADConfidentiality + integrityShared secretAES-GCM, ChaCha20-Poly1305
HashSidik jariTanpa kunciSHA-256, SHA-3
MACIntegrity + authenticityShared secretHMAC-SHA-256
KDF / password hashTurunkan kunci, perlambat tebakanSalt (+ secret)HKDF, Argon2id, scrypt
KEMKey establishmentPublic/privateX25519, ML-KEM
Asymmetric encryptionConfidentialityPublic/privateRSA-OAEP
SignatureAuthenticity, non-repudiationPublic/privateEd25519, ECDSA, ML-DSA

AEAD: Mengapa Enkripsi Terautentikasi

Enkripsi biasa (CBC, CTR) menyembunyikan data tetapi tidak mendeteksi perubahan. AEAD menghasilkan ciphertext + authentication tag; dekripsi gagal bila ada yang berubah. AAD (associated data, mis. header/ID) diautentikasi tetapi tidak dienkripsi. Aturan: jangan pakai mode tanpa autentikasi pada desain baru.

flowchart LR
    P["Plaintext"] --> E["AEAD Encrypt<br/>(key, nonce, AAD)"]
    E --> C["Ciphertext + Tag"]
    C --> D["AEAD Decrypt<br/>(key, nonce, AAD)"]
    D -->|"tag valid"| P2["Plaintext"]
    D -->|"berubah"| X["Error: ditolak"]

Nonce, IV, dan Randomness

Nonce = angka dipakai sekali per kunci; IV = nilai awal, sering harus tak terduga. AES-GCM memakai nonce 96-bit; nonce acak aman hanya sampai batas jumlah pesan per kunci sehingga perlu rotasi kunci atau counter. Pilih library yang membangkitkan nonce atau konstruksi misuse-resistant. Keacakan wajib dari CSPRNG OS: os.urandom, secrets, /dev/urandom.

Manajemen Kunci

Sebagian besar insiden nyata adalah kegagalan manajemen kunci, bukan kegagalan cipher. Siklus hidup: generate → distribusi/penyimpanan → penggunaan → rotasi → revokasi → penghancuran, dengan kontrol akses, pemisahan tugas, dan audit.

TLS 1.3 dan PKI

TLS 1.3 sebagai kripto terapan: ephemeral key exchange memberi forward secrecy, sertifikat memberi autentikasi, dan AEAD melindungi record. Validasi sertifikat memeriksa rantai kepercayaan, hostname, dan masa berlaku; verify=False melompati ketiganya.

Library yang Divetting

LibraryBahasaAlasan
libsodium / PyNaClC, Python, banyakDefault aman, sulit disalahgunakan, nonce ditangani
Google TinkJava, Go, PythonAPI tahan misuse, key management built-in
cryptographyPythonLapisan recipes (Fernet, AESGCM) + low-level
OpenSSLCLengkap tetapi tajam; dipakai di balik layar

Aturan: jangan implementasikan primitif; jangan merangkai primitif bila ada recipe.

Summary

Pilih primitif sesuai tujuan: AEAD untuk confidentiality+integrity, MAC/hash untuk integritas, KDF (Argon2id) untuk password, KEM/signature untuk kunci publik. Nonce harus unik, keacakan dari CSPRNG OS, dan manajemen kunci lebih menentukan daripada cipher. TLS 1.3 dan PKI menerapkan semuanya; gunakan library tingkat tinggi (libsodium, Tink, cryptography) dan jangan merangkai sendiri.