AES (Advanced Encryption Standard) — adalah algoritma enkripsi blok simetris yang diadopsi pada tahun 2001 oleh Institut Standar dan Teknologi Nasional AS (NIST) sebagai standar resmi. AES menggantikan DES yang usang dan sejak itu telah menjadi algoritma enkripsi paling luas di dunia, digunakan dari sistem perbankan hingga aplikasi seluler. Menurut data NIST (2023), AES memberikan ketahanan setara dengan 2^256 operasi untuk kunci sepanjang 256 bit, membuatnya kebal terhadap serangan brute force modern. NIST FIPS 197, 2023
Poin Utama
AES (Advanced Encryption Standard) — adalah cipher blok simetris yang dikembangkan oleh kriptografer Belgia Joan Daemen dan Vincent Rijmen dengan nama Rijndael. Pada tahun 2001, NIST memilih Rijndael sebagai pemenang kompetisi standar enkripsi baru AS setelah lima tahun pengujian dan analisis terbuka. AES bekerja dengan blok data berukuran tetap (128 bit) dan mendukung tiga panjang kunci: 128, 192, dan 256 bit. Jumlah putaran transformasi tergantung pada panjang kunci: 10 putaran untuk kunci 128-bit, 12 untuk 192-bit, dan 14 untuk kunci 256-bit. Setiap putaran mencakup empat operasi: SubBytes (penggantian byte non-linear melalui S-box), ShiftRows (pergeseran siklik baris), MixColumns (pencampuran kolom), dan AddRoundKey (penerapan kunci putaran).
Pengembangan AES dimulai pada tahun 1997 ketika NIST mengumumkan kompetisi untuk menggantikan DES, yang kunci 56-bitnya telah dipecahkan dalam 22 jam pada tahun 1998 oleh perangkat khusus Deep Crack. Kompetisi ini diikuti oleh 15 algoritma dari berbagai negara, termasuk Serpent (Inggris Raya), Twofish (AS), dan RC6 (AS). Hingga final tahun 1999, tersisa 5 kandidat. Rijndael menang berkat kombinasi kecepatan tinggi di semua platform (dari mikrokontroler 8-bit hingga server 64-bit), ketahanan terhadap kriptanalisis, dan implementasi yang ringkas di perangkat keras. Sejak tahun 2006, AES digunakan untuk mengenkripsi data dengan tingkat SECRET dan TOP SECRET di sistem pemerintahan AS. Saat ini, AES tertanam di semua protokol utama: TLS 1.2/1.3, IPsec, SSH, Wi-Fi WPA2/WPA3, dan Bluetooth BR/EDR.
AES memproses data dalam blok 128 bit (16 byte), yang diatur dalam matriks 4x4 byte yang disebut state. Setiap putaran enkripsi menjalankan serangkaian transformasi deterministik yang bersama-sama menciptakan efek „avalanche”: perubahan satu bit data masukan mengubah sekitar 50% bit data keluaran. Efek semacam itu membuat AES tahan terhadap kriptanalisis diferensial dan linier — metode utama untuk memecahkan cipher blok.
Proses dimulai dengan AddRoundKey — penerapan kunci awal ke state melalui operasi XOR. Kemudian putaran dijalankan: SubBytes mengganti setiap byte state dengan nilai dari S-box (tabel penggantian). ShiftRows menggeser baris kedua secara siklik sebesar 1 posisi, baris ketiga sebesar 2, baris keempat sebesar 3 — ini memastikan pencampuran antar kolom. MixColumns mengalikan setiap kolom state dengan matriks tetap di bidang Galois GF(2^8), menciptakan ketergantungan setiap byte keluaran pada keempat byte masukan kolom. AddRoundKey menerapkan kunci putaran berikutnya, yang diperoleh dari kunci awal melalui prosedur Key Expansion. Putaran terakhir berbeda dengan tidak adanya operasi MixColumns. Dekripsi menggunakan operasi kebalikan InvSubBytes, InvShiftRows, InvMixColumns, dan AddRoundKey dalam urutan terbalik. Untuk pengembang seluler, pemahaman tentang struktur internal AES tidak diperlukan — cukup mengetahui cara memanggil API bawaan platform dengan parameter yang benar.
Karakteristik kunci AES yang memastikan ketahanan kriptografinya adalah efek avalanche (avalanche effect). Perubahan satu bit dalam teks biasa atau kunci menyebabkan perubahan sekitar 50% bit dari ciphertext, membuat AES sangat tahan terhadap kriptanalisis diferensial dan linier. Kombinasi operasi SubBytes (non-linearitas melalui S-box) dan MixColumns (difusi melalui perkalian di bidang Galois) menciptakan kompleksitas matematis di mana bahkan mengetahui sebagian ciphertext tidak memungkinkan pemulihan kunci lebih cepat dari pencarian lengkap. Menurut analisis NIST (2018), serangan terbaik yang diketahui terhadap AES-128 — biclique attack — mengurangi panjang efektif kunci hanya sebesar 2 bit (menjadi 126,2 bit), yang tidak memberikan keuntungan praktis bagi penyerang. Untuk AES-256, tidak ada satu pun serangan yang praktis dapat dilakukan yang melampaui pencarian lengkap.
AES mendukung tiga ukuran kunci, yang masing-masing sesuai dengan tingkat ketahanan kriptografi tertentu. Pemilihan ukuran kunci memengaruhi keamanan, kinerja, dan persyaratan sumber daya perangkat.
| Ukuran kunci | Jumlah putaran | Tingkat keamanan | Penggunaan |
|---|---|---|---|
| AES-128 | 10 | 128 bit | Aplikasi komersial, TLS |
| AES-192 | 12 | 192 bit | Sistem pemerintahan (SECRET) |
| AES-256 | 14 | 256 bit | TOP SECRET, sektor keuangan |
Aturan praktis: di aplikasi seluler, gunakan AES-256 secara default. Perbedaan kinerja antara AES-128 dan AES-256 pada perangkat modern dengan dukungan AES-NI tidak lebih dari 10–15%, tetapi tingkat keamanan menjadi dua kali lipat. Menurut analisis kuantum (Grassl et al., 2016), diperlukan 2^77 operasi kuantum melalui algoritma Grover untuk memecahkan AES-128, dan untuk AES-256 — 2^149, yang membuat AES-256 tahan terhadap serangan kuantum selama 20–30 tahun ke depan. Bahkan AES-128 memberikan perlindungan yang cukup untuk sebagian besar skenario komersial: untuk pencarian lengkap kunci 128-bit diperlukan lebih banyak energi daripada yang ada di alam semesta menurut perkiraan Bruce Schneier. Namun, standar keamanan (GDPR, HIPAA, PCI DSS) sering secara eksplisit mensyaratkan AES-256, oleh karena itu dalam proyek produksi disarankan untuk menggunakan panjang kunci maksimum.
AES sebagai cipher blok mengenkripsi blok berukuran tetap (128 bit). Untuk mengenkripsi data dengan panjang sembarang, digunakan mode operasi (modes of operation). Pemilihan mode sangat memengaruhi keamanan: mode yang salah dapat meniadakan ketahanan AES.
Untuk proyek seluler, gunakan AES-256-GCM dengan nonce sepanjang 12 byte. GCM memecahkan dua masalah sekaligus: enkripsi data dan verifikasi keaslian, yang mencegah serangan padding oracle dan chosen ciphertext. Android Keystore dan iOS CryptoKit mendukung AES-GCM secara bawaan tanpa perlu mengimplementasikan primitif kriptografi tambahan. Saat bekerja dengan GCM, penting untuk tidak pernah mengulangi nonce dengan kunci yang sama — ini sepenuhnya menghancurkan keamanan enkripsi. Hasilkan nonce acak baru untuk setiap enkripsi dan simpan bersama dengan ciphertext.
Mari kita lihat contoh implementasi aman AES-256-GCM di Android menggunakan Jetpack Security. Kode di bawah mendemonstrasikan siklus lengkap: pembuatan kunci AES-256 melalui MasterKey, enkripsi dan dekripsi string dengan data terautentikasi tambahan (AAD).
import androidx.security.crypto.MasterKey
import androidx.security.crypto.EncryptedSharedPreferences
val masterKey = MasterKey.Builder(context)
.setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
.build()
val securePrefs = EncryptedSharedPreferences.create(
context,
"secure_prefs",
masterKey,
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
)
fun storeSecureData(key: String, value: String) {
securePrefs.edit().putString(key, value).apply()
}
fun readSecureData(key: String): String? {
return securePrefs.getString(key, null)
}
Fitur kunci dari solusi ini adalah penggunaan AES-256-GCM pada dua tingkat: untuk enkripsi pasangan kunci-nilai (PrefValueEncryptionScheme) dan untuk melindungi nama kunci itu sendiri (PrefKeyEncryptionScheme menggunakan AES-256-SIV, yang tahan terhadap pengulangan nonce). MasterKey dihasilkan menggunakan algoritma AES-256-GCM dan disimpan di Android Keystore, yang dilindungi perangkat keras pada perangkat dengan Trusted Execution Environment. Pada perangkat tanpa dukungan perangkat keras (TEE), kunci dienkripsi melalui Bouncy Castle, yang masih lebih aman daripada penyimpanan di SharedPreferences.
Untuk enkripsi langsung volume data besar (misalnya, gambar atau file), gunakan AES-256-GCM melalui EncryptedFile dari AndroidX Security. Untuk mengekspor kunci (misalnya, untuk cadangan), gunakan enkripsi tambahan dengan kata sandi pengguna melalui PBKDF2 dengan 100000+ iterasi.
Di iOS, bekerja dengan AES diatur melalui framework CryptoKit (Swift 5.0+). Kunci AES-256 dibuat melalui SymmetricKey(size: .bits256) dan disimpan di Secure Enclave — kriptoprocessor perangkat keras yang terisolasi dari CPU utama dan sistem operasi. CryptoKit menyediakan dua implementasi AES: AES.GCM (direkomendasikan) dan AES.CBC (untuk kompatibilitas mundur dengan format usang). Enkripsi dilakukan melalui metode seal(), yang menerima data, kunci, dan nonce (12 byte), dan mengembalikan AES.GCM.SealedBox — struktur yang berisi ciphertext dan tag autentikasi. Dekripsi — melalui open(). Apple sangat tidak merekomendasikan penggunaan CommonCrypto secara langsung: CryptoKit secara otomatis memilih parameter optimal, melindungi dari serangan side-channel, dan menggunakan akselerasi perangkat keras AES-NI pada prosesor Apple Silicon. Pada perangkat dengan Secure Enclave, kunci tidak pernah meninggalkan modul perangkat keras, yang membuat pencuriannya tidak mungkin bahkan jika aplikasi sepenuhnya dikompromikan. Untuk serialisasi kunci, digunakan metode withUnsafeBytes dengan penyimpanan berikutnya di Keychain melalui SecItemAdd dengan atribut kSecAttrAccessible = kSecAttrAccessibleWhenUnlockedThisDeviceOnly.
Pertanyaan yang Sering Diajukan
AES adalah algoritma yang mengubah data yang dapat dibaca menjadi kumpulan byte yang tidak dapat dibaca menggunakan kunci rahasia. Kunci yang sama diperlukan untuk mengembalikan data ke bentuk aslinya. AES sangat andal sehingga digunakan untuk mengenkripsi dokumen rahasia pemerintah AS.
AES-128 menggunakan kunci sepanjang 128 bit dan menjalankan 10 putaran enkripsi. AES-256 menggunakan kunci 256-bit dan 14 putaran, membuatnya 2^128 kali lebih sulit dipecahkan. Untuk aplikasi seluler, AES-256 direkomendasikan karena perbedaan kinerja yang minimal.
AES-256-GCM — mode paling aman dan direkomendasikan. GCM menyediakan enkripsi terautentikasi (enkripsi + pemeriksaan integritas). Mode ECB dilarang, CBC memerlukan MAC terpisah. GCM adalah standar de facto untuk aplikasi seluler.
Secara teoritis AES dapat dipecahkan melalui pencarian lengkap, tetapi untuk AES-256 diperlukan 2^256 percobaan — lebih banyak dari atom di alam semesta yang dapat diamati. Serangan praktis terhadap AES-256 tidak ada. Serangan side-channel (Spectre, Meltdown) tidak memecahkan AES, tetapi mencuri kunci dari memori, oleh karena itu penyimpanan kunci perangkat keras sangat penting.
Gunakan pustaka AndroidX Security: MasterKey.Builder dengan KeyScheme.AES256_GCM membuat kunci yang dilindungi di Android Keystore, dan EncryptedSharedPreferences secara otomatis mengenkripsi semua data melalui AES-256-GCM. Tidak perlu kriptografi manual — API aman secara default, tanpa risiko kesalahan pengembang.
Kesimpulan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga