Tidak suka iklan? Pergi Bebas Iklan Hari ini

Enkripsi AES untuk Pengembang Kapan Anda Membutuhkannya dan Cara Kerjanya

Diterbitkan pada
Enkripsi AES untuk Pengembang: Kapan Anda Membutuhkannya dan Cara Kerjanya 1
IKLAN · HAPUS?

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-128AES-256
Panjang kunci128 bit256 bit
Ronde1014
PertunjukanCepat~40% lebih lambat
KeamananKuat — tidak ada serangan praktis yang dikenalLebih kuat — terlindungi terhadap komputer kuantum di masa depan
PutusanCukup untuk kebanyakan aplikasiGunakan 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.

ModeDiperiksaIV DiperlukanPutusan
ECBTIDAKTIDAKJangan gunakan — plaintext yang sama menghasilkan ciphertext yang sama, mengungkap pola
CBCTIDAKYaKurang terkini — tidak ada autentikasi, rentan terhadap serangan padding oracle
GCMYa (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:

  1. Mengenkripsi data sehingga tidak dapat dibaca tanpa kunci
  2. 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.

Ingin bebas iklan? Bebas Iklan Hari Ini

Instal Ekstensi Kami

Tambahkan alat IO ke browser favorit Anda untuk akses instan dan pencarian lebih cepat

Ke Ekstensi Chrome Ke Ekstensi Tepi Ke Ekstensi Firefox Ke Ekstensi Opera

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!

IKLAN · HAPUS?
IKLAN · HAPUS?
IKLAN · HAPUS?

Pojok Berita dengan Sorotan Teknologi

Terlibat

Bantu kami untuk terus menyediakan alat gratis yang berharga

Belikan aku kopi
IKLAN · HAPUS?