Enkripsi & Dekripsi AES-256 (CryptoJS)
🔐 Mode Operasi AES
✅ Apa Itu AES-256?
AES (Advanced Encryption Standard) adalah algoritma kriptografi simetris yang digunakan secara luas untuk mengamankan data. AES-256 artinya menggunakan kunci sepanjang 256-bit, menjadikannya sangat kuat secara teori.
🔐 Apa yang Lebih Ekstra Aman?
Keamanan bukan hanya dari algoritma, tetapi juga tergantung pada:
- Cara menyimpan dan mengelola kunci
- Penggunaan salt dan IV (Initialization Vector)
- Mode operasi (CBC, GCM, ECB, dsb.)
- Proteksi dari serangan side-channel
🔢 Pilihan Ukuran Kunci AES
Terdapat tiga ukuran kunci standar yang diakui oleh NIST (National Institute of Standards and Technology), masing-masing dengan tingkat keamanan berbeda:
| Ukuran Kunci | Nama Umum | Keamanan | Catatan |
|---|---|---|---|
| 128-bit | AES-128 | Cukup Aman | Cepat dan efisien; masih aman untuk kebanyakan aplikasi umum. |
| 192-bit | AES-192 | Lebih Aman | Jarang digunakan; jarang didukung penuh oleh semua library. |
| 256-bit | AES-256 | Ekstra Aman | Kuat secara kriptografi, tapi sedikit lebih lambat dibanding 128-bit. |
🔒 Algoritma AES dan Panjang Kunci
- AES-128, AES-192, dan AES-256 hanya berbeda pada panjang kunci.
- AES-128 cocok untuk aplikasi umum yang tidak menangani data sangat sensitif — lebih ringan dan cepat diproses.
- Untuk aplikasi web atau mobile, AES-128-CBC atau AES-128-GCM sudah cukup dan efisien.
- AES-256 memberikan tingkat keamanan lebih tinggi karena panjang kuncinya — lebih tahan terhadap serangan brute-force.
- CryptoJS mendukung AES-128, AES-192, dan AES-256 menggunakan API yang sama; hanya panjang kunci yang membedakan.
- Untuk data sensitif atau kebutuhan kepatuhan (HIPAA, GDPR, ISO 27001), AES-256-GCM sangat disarankan.
- Selalu gunakan IV (Initialization Vector) yang acak dan unik setiap kali melakukan enkripsi, terutama pada mode GCM/CTR, terlepas dari ukuran kunci.
- Pastikan ada mekanisme autentikasi dan integritas, terutama saat menggunakan mode CBC atau CTR.
- Sangat cepat dan efisien, cocok untuk perangkat dengan keterbatasan sumber daya (misalnya IoT).
- Masih sangat sulit ditembus oleh serangan brute force, bahkan dengan teknologi saat ini.
- Kompromi antara kecepatan dan kekuatan, tapi kurang populer karena dukungan tidak seluas AES-128/256.
- Kadang digunakan di institusi tertentu untuk alasan kebijakan.
- Tingkat keamanan tertinggi dalam standar AES.
- Direkomendasikan untuk data sensitif tingkat tinggi, seperti data medis, finansial, atau pemerintah.
- Disarankan jika kamu ingin masa pakai panjang (long-term encryption) atau antisipasi terhadap kemajuan teknologi (misalnya quantum computing).
📦 CryptoJS yang Mendukung Macam-Macam AES:
CryptoJS adalah pustaka JavaScript open-source untuk melakukan kriptografi di sisi klien (browser). Ini menyediakan berbagai algoritma kriptografi seperti AES, SHA-1, SHA-256, MD5, HMAC, dan lainnya.
Mode Operasi (mode block cipher):
- CBC (Cipher Block Chaining) → umum dan aman jika digunakan dengan IV.
- ECB (Electronic Codebook) → tidak direkomendasikan karena mudah dianalisis pola.
- CFB, OFB, dan CTR → alternatif tergantung kebutuhan.
Padding Schemes:
- Pkcs7 → default di CryptoJS.
| Mode | Keterangan | Kelebihan | Kekurangan |
|---|---|---|---|
| CBC (Cipher Block Chaining) | Umum, butuh IV acak dan autentikasi tambahan | No replay, tersebar | Rentan padding oracle jika tak di-handle aman |
| CFB, OFB, CTR | Block cipher jadi stream; CTR sangat populer | Mendukung random akses, paralel | CTR/GCM butuh IV unik; GCM juga menyediakan integritas |
| GCM | Authenticated Encryption with Associated Data (AEAD) | IV + integritas + efisien | IV harus unik hanya sekali; reuse menyebabkan leak |
Kesimpulan: GCM > CTR > CBC > CFB/OFB dari segi keamanan dan modernitas, asalkan diimplementasi dengan benar.
⚠️ Proteksi vs Side‑Channel Attacks
Side‑channel mengeksploitasi bocornya data lewat waktu eksekusi, daya, atau sinyal elektromagnetik – di luar output algoritma.
- Algoritma constant-time (hindari timing variabel)
- Masking dan blinding untuk mengacak data internal
- Tambahkan noise listrik/sinyal EM, dan isolasi hardware
✅ Rangkuman Implementasi & Keamanan AES
- 📱 Frontend (browser, mobile):
- Gunakan AES-256-CBC dengan IV acak untuk tiap enkripsi.
- Encoding hasil enkripsi ke Base64 agar aman ditransmisikan via URL/API/HTML.
- Jangan lupakan pengamanan IV – kirim bersama ciphertext atau embed secara jelas.
- Hindari menyimpan kunci di JavaScript; gunakan teknik seperti token atau session key dari server.
- 🖥️ Backend (server, API):
- Node.js: gunakan AES-GCM karena mendukung autentikasi dan integritas secara bawaan.
- PHP: CBC masih bisa digunakan, tapi harus ditambahkan MAC/HMAC untuk menjamin integritas.
- Pastikan IV unik untuk setiap pesan; reuse IV pada GCM/CTR bisa fatal (bocor plaintext/kunci).
- Gunakan library kriptografi resmi (misalnya: OpenSSL, libsodium, crypto built-in) untuk menghindari kesalahan implementasi.
- 🔐 Mode Operasi Terbaik:
- GCM: pilihan utama, modern, aman, efisien, dan mendukung AEAD (authenticated encryption).
- CTR: aman jika IV unik; perlu tambahan MAC/HMAC untuk integritas.
- CBC: bisa digunakan dengan kode moderat, tapi rentan padding oracle jika integritas tidak dijaga.
- CFB/OFB: relatif usang, hindari untuk sistem baru.
- ⚠️ Pertimbangan Side-Channel (khususnya hardware):
- Side-channel seperti timing attacks, power analysis, atau EM leak harus diperhitungkan di sistem embedded dan IoT.
- Gunakan teknik mitigasi seperti:
- Constant-time algorithm (hindari perbedaan waktu karena isi data)
- Masking/blinding untuk menyamarkan proses internal
- Shielding elektromagnetik atau random noise pada sinyal
- Untuk aplikasi backend biasa (web server, API), cukup gunakan library resmi + infrastruktur hardware yang aman.
Catatan tambahan:
- GCM sangat efisien di CPU modern dan memberikan confidentiality + integrity dalam satu langkah.
- Encoding seperti
Base64diperlukan agar hasil enkripsi dapat ditransmisikan aman lewat protokol teks (HTTP, JSON, HTML).
🔁 Mode Operasi (Cipher Mode / Mode of Operation)
Apa itu:
Mode operasi adalah cara algoritma kriptografi blok (seperti AES) mengolah data yang lebih panjang dari satu blok. Karena AES bekerja pada blok tetap (misalnya 128-bit), mode operasi menentukan bagaimana tiap blok diproses dan dikaitkan satu sama lain.
| Mode | Nama Lengkap | Karakteristik & Kelebihan |
|---|---|---|
| ECB | Electronic Code Book | Sederhana, tapi tidak aman untuk data besar karena pola tetap terlihat |
| CBC | Cipher Block Chaining | Populer dan lebih aman dari ECB; membutuhkan IV; cocok untuk file atau data batch |
| CFB | Cipher Feedback | Dapat digunakan seperti stream cipher; cocok untuk transmisi data byte-per-byte |
| OFB | Output Feedback | Mirip CFB tetapi bebas dari propagasi kesalahan antar blok |
| CTR | Counter Mode | Mendukung enkripsi paralel, efisien dan cepat; ideal untuk komunikasi atau streaming |
📘 Istilah Umum
| Istilah | Penjelasan Singkat | Contoh |
|---|---|---|
| CryptoJS | Pustaka JavaScript untuk kriptografi | CryptoJS.AES.encrypt("data", "key") |
| Mode Operasi | Cara cipher blok memproses dan mengaitkan blok data | ECB, CBC, CFB, OFB, CTR |
| IV (Initialization Vector) | Nilai awal acak yang digunakan dalam mode seperti CBC atau GCM | CryptoJS.lib.WordArray.random(16) |
| GCM | Mode operasi yang menyediakan enkripsi sekaligus autentikasi (AEAD) | AES-256-GCM |
| Cipher | Algoritma enkripsi/dekripsi | AES, DES, RSA |
GCM (Galois/Counter Mode)
Apa itu
GCM (Galois/Counter Mode) adalah mode operasi cipher blok untuk algoritma seperti AES, yang menyediakan:
- Enkripsi data (confidentiality)
- Autentikasi data (integrity) dalam satu operasi (authenticated encryption)
Jadi GCM bukan cuma mengenkripsi, tapi juga memastikan data tidak diubah saat transit (misalnya saat dikirim melalui internet).
Keunggulan AES-GCM
| Fitur | Penjelasan |
|---|---|
| Cepat | Bisa dienkripsi secara paralel (berbasis CTR/Counter mode) |
| Aman | Memberi autentikasi data (tag 128-bit) |
| Populer | Dipakai dalam protokol HTTPS, TLS, dan VPN |
Perbedaan GCM vs Mode Lain
| Mode | Autentikasi | Paralel | Umum digunakan |
|---|---|---|---|
| CBC | ❌ Tidak | ❌ Tidak | Ya |
| CTR | ❌ Tidak | ✅ Ya | Ya |
| GCM | ✅ Ya (dengan tag) | ✅ Ya | Sangat sering (TLS, HTTPS) |
Catatan: AES-GCM di JavaScript didukung melalui Web Crypto API. CryptoJS tidak mendukung GCM, jadi gunakan Web Crypto API untuk implementasi modern.
Hasil Enkripsi GCM
Hasil enkripsi dengan GCM meliputi:
- Ciphertext (data terenkripsi)
- IV (Initialization Vector)
- Auth Tag (biasanya di-embed di ciphertext atau disimpan terpisah)
Auth Tag digunakan untuk memvalidasi keaslian data. Jangan pernah menggunakan IV yang sama untuk dua enkripsi dengan kunci yang sama dalam GCM — hal ini dapat membocorkan data.
Kesimpulan
AES-GCM sangat direkomendasikan untuk aplikasi modern seperti komunikasi aman, API, HTTPS, dan berbagai sistem keamanan data lainnya.
Comments
Post a Comment