Enkripsi AES untuk Pengembang Kapan Anda Membutuhkannya dan Cara Kerjanya
Jika Anda menyimpan data sensitif — data PII pengguna, kunci API, catatan keuangan — enkripsi AES adalah alat yang harus Anda gunakan. Ini adalah standar industri untuk enkripsi simetris saat data diam: cepat, telah diuji secara luas, dan didukung secara native dalam setiap bahasa utama.
Tetapi jika AES digunakan dengan salah, lebih buruk daripada tidak berguna. Mode ECB mengungkap pola. Penggunaan IV yang sama dengan GCM menghancurkan jaminan keamanannya secara total. Dan menyimpan kunci Anda di dekat teks terenkripsi menghancurkan seluruh tujuan.
Berikut ini adalah apa yang sebenarnya Anda butuhkan untuk menggunakan AES dengan benar di produksi.
Apa Itu AES?
AES (Advanced Encryption Standard) adalah cipher blok simetris. Simetris berarti kunci yang sama digunakan untuk enkripsi dan dekripsi. Cipher blok berarti ia bekerja pada bagian data tetap berukuran 128 bit.
AES menggantikan DES pada tahun 2001, dan saat ini ia ada di mana-mana: TLS, enkripsi disk, manajemen kata sandi, enkripsi bidang database. Berbeda dengan enkripsi asimetris (RSA, ECDH), AES cukup cepat untuk mengenkripsi jumlah besar data secara real-time. Kompromi: kedua pihak perlu kunci yang sama, sehingga distribusi kunci menjadi masalah Anda.
AES-128 vs AES-256: Ukuran Kunci yang Mana?
AES tersedia dalam tiga ukuran kunci: 128, 192, dan 256 bit. Dalam praktiknya Anda akan memilih antara 128 dan 256.
| AES-128 | AES-256 | |
|---|---|---|
| Panjang kunci | 128 bit | 256 bit |
| Ronde | 10 | 14 |
| Pertunjukan | Cepat | ~40% lebih lambat |
| Keamanan | Kuat — tidak ada serangan praktis yang dikenal | Lebih kuat — terlindungi terhadap komputer kuantum di masa depan |
| Putusan | Cukup untuk kebanyakan aplikasi | Gunakan untuk data yang sangat sensitif atau penyimpanan jangka panjang |
AES-128 belum dibobol. Tidak ada serangan praktis yang ditemukan. Namun, jika Anda mengenkripsi data yang harus tetap aman selama 20 tahun ke depan — atau jika model ancaman Anda mencakup komputer kuantum — AES-256 menambah margin yang bermakna. Untuk kebanyakan aplikasi saat ini dalam enkripsi bidang database, AES-128 cukup. Jika ragu, gunakan AES-256; penurunan kinerja ini tidak signifikan untuk beban kerja biasa.
Mode Operasi: Mengapa GCM, Bukan ECB
AES saja hanya mengenkripsi satu blok 128 bit. Untuk data nyata Anda membutuhkan mode operasi yang menangani beberapa blok dan mengatur urutannya secara benar. Pilihan ini sangat penting.
| Mode | Diperiksa | IV Diperlukan | Putusan |
|---|---|---|---|
| ECB | TIDAK | TIDAK | Jangan gunakan — plaintext yang sama menghasilkan ciphertext yang sama, mengungkap pola |
| CBC | TIDAK | Ya | Kurang terkini — tidak ada autentikasi, rentan terhadap serangan padding oracle |
| GCM | Ya (AEAD) | Ya (nonce) | Gunakan ini — mengenkripsi dan mengautentikasi dalam satu langkah |
Gunakan GCM. GCM (Galois/Counter Mode) adalah cipher AEAD — Enkripsi dengan Autentikasi dan Data Terkait. Ia melakukan dua hal sekaligus:
- Mengenkripsi data sehingga tidak dapat dibaca tanpa kunci
- Menghasilkan tag autentikasi sehingga perubahan apa pun dapat dideteksi secara langsung
Tanpa autentikasi, serangan dapat mengubah bit pada ciphertext dan Anda akan mendekripsi sampah tanpa menyadari hal itu. Dengan GCM, dekripsi gagal secara jelas jika ciphertext telah diubah — sebelum sebarang plaintext dikembalikan.
IV/Nonce: Acak, Tidak Diperulang
GCM membutuhkan vector inisialisasi (IV), juga disebut nonce — "nomor yang digunakan sekali." IV tidak perlu rahasia, tetapi harus:
- Acak — dihasilkan dengan RNG yang aman secara kriptografi
- Unik — tidak pernah digunakan ulang dengan kunci yang sama
Penggunaan IV yang sama dengan kunci yang sama dalam GCM adalah kritis. Serangan yang melihat dua ciphertext yang dienkripsi dengan kunci dan IV yang sama dapat menggabungkan keduanya dan memulihkan kedua plaintext. Ini bukan teori — telah terjadi di sistem produksi.
Gunakan IV acak 96 bit (12 byte) per operasi enkripsi. Karena Anda membutuhkannya untuk dekripsi, simpan bersama ciphertext — format konvensional adalah IV yang diprefix ke ciphertext.
Kode yang Dikerjakan: AES-256-GCM
Berikut ini adalah potongan kode yang siap digunakan di produksi. Kedua kode menyimpan IV dan tag autentikasi bersama ciphertext sehingga dekripsi dapat dilakukan secara mandiri.
Bahasa pemrograman Node.js
const crypto = require('crypto');
const ALGORITHM = 'aes-256-gcm';
const KEY_LENGTH = 32; // 256 bits
const IV_LENGTH = 12; // 96 bits — recommended for GCM
const TAG_LENGTH = 16; // 128-bit auth tag
function encrypt(plaintext, key) {
const iv = crypto.randomBytes(IV_LENGTH);
const cipher = crypto.createCipheriv(ALGORITHM, key, iv);
const encrypted = Buffer.concat([
cipher.update(plaintext, 'utf8'),
cipher.final(),
]);
const tag = cipher.getAuthTag();
// Layout: [iv (12)] + [tag (16)] + [ciphertext]
return Buffer.concat([iv, tag, encrypted]).toString('base64');
}
function decrypt(ciphertextB64, key) {
const data = Buffer.from(ciphertextB64, 'base64');
const iv = data.subarray(0, IV_LENGTH);
const tag = data.subarray(IV_LENGTH, IV_LENGTH + TAG_LENGTH);
const encrypted = data.subarray(IV_LENGTH + TAG_LENGTH);
const decipher = crypto.createDecipheriv(ALGORITHM, key, iv);
decipher.setAuthTag(tag);
return Buffer.concat([decipher.update(encrypted), decipher.final()]).toString('utf8');
}
// Usage
const key = crypto.randomBytes(KEY_LENGTH); // store this securely
const ciphertext = encrypt('sensitive data here', key);
const plaintext = decrypt(ciphertext, key);
Ular piton
import os, base64
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
IV_LENGTH = 12 # 96 bits
def encrypt(plaintext: str, key: bytes) -> str:
iv = os.urandom(IV_LENGTH)
aesgcm = AESGCM(key)
# encrypt() appends the 16-byte auth tag automatically
ciphertext = aesgcm.encrypt(iv, plaintext.encode(), None)
return base64.b64encode(iv + ciphertext).decode()
def decrypt(ciphertext_b64: str, key: bytes) -> str:
data = base64.b64decode(ciphertext_b64)
iv = data[:IV_LENGTH]
ciphertext = data[IV_LENGTH:]
aesgcm = AESGCM(key)
return aesgcm.decrypt(iv, ciphertext, None).decode()
# Usage
key = AESGCM.generate_key(bit_length=256) # store this securely
ciphertext = encrypt('sensitive data here', key)
plaintext = decrypt(ciphertext, key)
Instalasi ketergantungan: pip install cryptography
Anda dapat menguji enkripsi dan dekripsi AES secara interaktif — tanpa setup apa pun — menggunakan IO Tools Alat Enkripsi/De-kripsi AES.
Manajemen Kunci: Bagian yang Sulit
Keamanan enkripsi Anda hanya sekuat manajemen kunci Anda. Kesalahan paling umum:
- Kunci disimpan dalam database yang sama dengan data terenkripsi — jika penyerang mendapatkan dump database, mereka mendapatkan keduanya.
- Kunci disimpan dalam kontrol sumber kode — bahkan jika diabaikan oleh git
.env, rotasi menjadi sulit dan sejarah tetap ada. - Kunci muncul di log — log aplikasi dikirim ke aggregator. Kunci tidak boleh muncul di tempat tersebut.
Di mana sebenarnya menyimpan kunci enkripsi:
- AWS KMS / Google Cloud KMS / Azure Key Vault — penyimpanan kunci yang dikelola dengan audit trail dan rotasi otomatis
- HashiCorp Vault — dihosting sendiri, cocok untuk lingkungan multi-cloud
- Variabel lingkungan — dapat diterima untuk beban kerja rendah sensitivitas dengan permukaan paparan terbatas
Untuk enkripsi bidang database, pola enkripsi envelope adalah pola standar: buat kunci enkripsi data (DEK) per catatan atau kolom, lalu enkripsi DEK dengan kunci utama yang disimpan di KMS. Database hanya mengandung DEK yang terenkripsi dan ciphertext — kunci utama tidak pernah menyentuh database.
Kapan Anda Menggunakan AES — dan Kapan Tidak
AES adalah alat yang tepat untuk:
- Mengenkripsi bidang di database — nomor SSN, nomor kartu, catatan kesehatan
- Mengenkripsi file saat diam sebelum disimpan di cloud
- Pembagian rahasia antar layanan yang berbagi kunci yang telah ditetapkan sebelumnya
AES bukan alat yang tepat ketika:
- Anda mengirimkan data melalui jaringan — gunakan TLS. Jangan membuat lapisan transportasi sendiri.
- Anda membutuhkan enkripsi asimetris — jika pengirim dan penerima tidak bisa berbagi kunci secara awal, gunakan RSA atau ECDH untuk pertukaran kunci.
- Anda menyimpan kata sandi — gunakan bcrypt, scrypt, atau Argon2. Kata sandi yang terenkripsi bisa didekripsi; kata sandi yang di-hash secara tepat tidak bisa didekripsi.
- Solusi yang dikelola cocok — AWS Secrets Manager, Vault, dan sejenisnya mengelola rotasi, kontrol akses, dan log audit secara otomatis. Lebih baik memilih itu daripada AES manual jika solusi tersebut mencakup kebutuhan Anda.
Kesalahan paling umum yang dibuat oleh pengembang adalah menganggap AES sebagai solusi keamanan lengkap. Ini adalah primitif — sebuah blok bangunan. Pasangkan dengan mode autentikasi (GCM), IV unik per operasi, dan manajemen kunci yang tepat, maka ini sangat efektif. Lepaskan salah satu dari elemen ini dan Anda telah membuat sesuatu yang tampak aman tetapi sebenarnya tidak.
Instal Ekstensi Kami
Tambahkan alat IO ke browser favorit Anda untuk akses instan dan pencarian lebih cepat
恵 Papan Skor Telah Tiba!
Papan Skor adalah cara yang menyenangkan untuk melacak permainan Anda, semua data disimpan di browser Anda. Lebih banyak fitur akan segera hadir!
Alat Wajib Coba
Lihat semua Pendatang baru
Lihat semuaMemperbarui: Kita alat terbaru ditambahkan pada 16 Mei 2026
