Enkripsi & Dekripsi AES-256 (CryptoJS)

Mode Operasi AES

🔐 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.
📌 Penjelasan AES, Mode Operasi & Istilah Terkait

🔒 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.
AES-128:
  • 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.
AES-192:
  • Kompromi antara kecepatan dan kekuatan, tapi kurang populer karena dukungan tidak seluas AES-128/256.
  • Kadang digunakan di institusi tertentu untuk alasan kebijakan.
AES-256:
  • 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 Operasi AES – mana lebih aman?
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 Base64 diperlukan 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

Popular posts from this blog

Analisis Potensi Rebound Saham (compose view): Kode Python & colab.research.google.com

Proyek Scraping Python

Adaptasi Integrasi Fitur Vault HTML CSS JS ke Python