FlowingDev

Enkripsi AES, dijelaskan: Gembok digital favorit dunia

Pelajari cara kerja enkripsi simetris AES yang menggunakan satu kunci berbasis kata sandi untuk mengubah teks yang dapat dibaca menjadi ciphertext acak dan sebaliknya, mengamankan data modern.

Coba tool-nya: Alat Enkripsi

Dalam satu kalimat

Enkripsi AES berbasis kata sandi adalah cara standar untuk mengacak dan mengembalikan data menggunakan satu kunci rahasia yang dibuat dari kata sandi pilihanmu.

Masalah yang dipecahkan

Sejak manusia mulai bisa menulis, kita juga ingin menulis hal-hal yang tidak bisa dibaca orang lain. Dari jenderal Romawi yang menggeser huruf dalam pesan (sandi Caesar) hingga mata-mata yang menggunakan one-time pads di Perang Dingin, tujuannya selalu sama: kerahasiaan. Jika pesan jatuh ke tangan yang salah, isinya harus jadi omong kosong.

Di era digital, masalah ini ada di mana-mana. Datamu lalu-lalang di Wi-Fi publik yang nggak jelas keamanannya, nongkrong di server milik perusahaan raksasa, dan dicadangkan ke hard drive yang mungkin berakhir di tempat sampah. Bagaimana kamu memastikan pesan pribadimu, daftar kunci API-mu, atau resep kue rahasiamu tetap rahasia?

Sandi-sandi kuno gampang dibobol, apalagi dengan komputer yang bisa mencoba miliaran kombinasi per detik. Kita butuh sesuatu yang lebih baik. Jauh lebih baik. Masuklah Advanced Encryption Standard, atau AES.

Pada akhir 1990-an, National Institute of Standards and Technology (NIST) A.S. mengadakan kompetisi publik untuk mencari pengganti Data Encryption Standard (DES) yang sudah menua. Mereka tidak mencari algoritma rahasia yang dimasak di ruang bawah tanah pemerintah; mereka menginginkan sandi yang transparan, publik, dan telah diuji secara brutal yang bisa dipercaya oleh seluruh dunia. Setelah bertahun-tahun adu jotos kriptografi, sebuah algoritma dari Belgia bernama "Rijndael" (gabungan dari nama penemunya, Rijmen dan Daemen) dinobatkan sebagai pemenang pada tahun 2001.

Algoritma itu cepat, efisien, dan yang terpenting, telah bertahan dari gempuran global yang mencoba membobolnya. Jadilah AES, standar yang kita gunakan hari ini untuk mengunci segalanya, mulai dari situs web aman (HTTPS) hingga hard drive terenkripsi dan file sensitif. AES memecahkan masalah kuno menjaga rahasia dengan ketelitian matematika modern.

Cara kerjanya di balik layar

AES terlihat seperti sihir: kamu menggumamkan frasa rahasia, dan teksmu berubah menjadi berantakan tak terbaca. Gumamkan lagi, dan teks itu kembali. Tapi di balik layar, itu hanyalah serangkaian langkah matematis yang cerdas dan dapat diulang.

Simetris vs. Asimetris

Pertama, sebuah konsep kunci. Enkripsi ada dua rasa utama. AES bersifat simetris, artinya kunci yang sama digunakan untuk mengunci (enkripsi) dan membuka (dekripsi) data. Ini seperti kunci rumahmu—kunci itu mengunci pintu, dan kunci yang sama persis membukanya. Cara ini cepat dan efisien.

Rasa lainnya adalah kriptografi asimetris (atau kunci-publik). Ini menggunakan dua kunci yang berbeda: kunci publik untuk mengunci data dan kunci privat untuk membukanya. Ini seperti kotak surat: siapa pun bisa memasukkan surat (menggunakan slot publik), tetapi hanya kamu yang punya kunci privat untuk membukanya dan membaca surat. Cara ini bagus saat kamu tidak bisa berbagi kunci rahasia dengan aman sebelumnya, tetapi jauh lebih lambat daripada enkripsi simetris.

Enkripsi berbasis kata sandi menggunakan model simetris karena kamu dan siapa pun yang perlu mendekripsi data akan berbagi kata sandi yang sama.

Dari Kata Sandi ke Kunci: KDF

Ini detail pentingnya: kata sandimu, "P@ssw0rdSuperRahasia123", bukanlah kunci enkripsinya. Kata sandi yang mudah diingat manusia tidak cukup acak atau panjang untuk menjadi kunci kriptografi yang aman.

Sebagai gantinya, kata sandimu dimasukkan ke dalam Key Derivation Function (KDF). Anggap saja KDF sebagai algoritma khusus yang dirancang untuk mengubah kata sandi menjadi kunci kriptografi yang kuat dengan ukuran tetap. KDF modern seperti PBKDF2 (Password-Based Key Derivation Function 2) atau Argon2 melakukan tiga hal penting:

  1. Menambahkan Salt: Salt adalah sepotong data acak yang dibuat untuk setiap enkripsi baru. Salt dicampur dengan kata sandimu sebelum diproses. Ini berarti bahkan jika dua pengguna memiliki kata sandi yang sama, kunci enkripsi yang dihasilkan akan sangat berbeda. Hal ini saja sudah cukup untuk mengalahkan serangan "rainbow table", di mana peretas menggunakan tabel pra-komputasi dari kata sandi umum dan hash yang dihasilkannya. Salt disimpan bersama data terenkripsi; salt bukanlah rahasia, hanya bahan unik.
  2. Meregangkan Kunci: KDF menjalankan kata sandi dan salt melalui algoritma hashing (seperti SHA-256) bukan sekali, tetapi ribuan, atau bahkan jutaan kali. Ini disebut "iterasi" atau "work factor". Ini membuat prosesnya sengaja lambat. Bagimu, menunggu beberapa ratus milidetik bukanlah masalah besar. Bagi penyerang yang mencoba melakukan brute-force pada kata sandimu, ini adalah mimpi buruk, membuatnya sangat mahal secara komputasi untuk mencoba miliaran tebakan.
  3. Menghasilkan Kunci: Setelah semua kerja keras itu, KDF mengeluarkan kunci dengan panjang yang diinginkan (misalnya, 256 bit) yang terlihat seperti derau acak murni. Inilah kunci sebenarnya yang digunakan oleh AES.
Kata Sandi Kamu + Salt Acak + Banyak Iterasi -> Kunci Enkripsi yang Kuat
("hunter2"      + "a3f9d..." + 100.000 putaran) -> Kunci AES 256-bit

Sandi AES Sendiri: State dan Putaran (Rounds)

Sekarang acara utamanya. AES beroperasi pada blok data berukuran tetap—selalu 128 bit (16 byte) sekaligus. Pesan plaintext-mu dipotong-potong menjadi blok-blok 16-byte ini. Setiap blok dimuat ke dalam kisi 4x4 byte yang disebut matriks state.

State ini kemudian melewati serangkaian transformasi identik yang disebut putaran (rounds). Jumlah putaran tergantung pada ukuran kunci:

  • AES-128: 10 putaran
  • AES-192: 12 putaran
  • AES-256: 14 putaran

Setiap putaran (kecuali yang terakhir) terdiri dari empat langkah:

  1. SubBytes: Setiap byte dalam matriks state ditukar dengan yang lain menggunakan tabel pencarian standar ("Rijndael S-box"). Ini adalah langkah non-linear utama yang menciptakan kebingungan.
  2. ShiftRows: Byte di setiap baris matriks digeser secara siklis. Baris pertama tidak digeser, baris kedua digeser satu, ketiga dua, dan keempat tiga. Ini mengacak-acak data.
  3. MixColumns: Operasi matematika dilakukan pada setiap kolom, mencampur byte-byte menjadi satu. Ini memberikan difusi, menyebarkan pengaruh satu byte plaintext ke seluruh blok.
  4. AddRoundKey: Sebagian dari kunci enkripsi utama ("kunci putaran" khusus untuk putaran ini) di-XOR-kan dengan state. Di sinilah kunci rahasia benar-benar dicampur ke dalam datamu.

Urutan SubBytes -> ShiftRows -> MixColumns -> AddRoundKey ini diulang-ulang. Setiap putaran semakin mengacak data hingga, setelah putaran terakhir, matriks state menjadi blok ciphertext yang benar-benar kacau. Untuk mendekripsi, kamu hanya perlu menjalankan langkah-langkahnya secara terbalik dengan kunci yang sama.

Merangkai Semuanya: Mode Sandi dan Padding

AES hanya tahu cara mengenkripsi satu blok 16-byte. Bagaimana dengan pesanmu yang 500-byte? Di sinilah mode operasi berperan. Mode operasi adalah resep untuk menggunakan block cipher untuk mengenkripsi aliran data dengan panjang berapa pun.

Mode lama seperti CBC (Cipher Block Chaining) memiliki beberapa kelemahan keamanan. Mode modern yang direkomendasikan adalah GCM (Galois/Counter Mode). GCM adalah mode "enkripsi terotentikasi", yang merupakan cara keren untuk mengatakan bahwa ia memberikan dua hal sekaligus:

  • Kerahasiaan: Ia mengenkripsi datamu sehingga tidak ada yang bisa membacanya.
  • Keaslian: Ia menghasilkan "tag autentikasi" pendek. Jika satu bit ciphertext dibalik atau dirusak selama transmisi, tag tidak akan cocok saat kamu mendekripsi, dan proses akan gagal. Ini memberitahumu tidak hanya bahwa datanya rahasia, tetapi juga bahwa data itu tidak diutak-atik.

Kisah di dunia nyata

Rahasia Klien Seorang Freelancer

Seorang desainer UX, Anya, perlu mengirim mockup untuk produk baru yang belum diumumkan kepada kliennya. File mockup tersebut berisi informasi strategis dan merek yang sensitif. Mengirimnya lewat email terasa berisiko—email terkenal tidak aman. Menyiapkan portal transfer file yang aman terlalu berlebihan untuk pengiriman sekali saja. Sebagai gantinya, Anya mengenkripsi file ZIP yang berisi karyanya menggunakan kata sandi. Dia kemudian menelepon klien dan memberitahukan kata sandinya lewat telepon. Sekarang dia bisa dengan aman mengirimkan file terenkripsi itu lewat email, karena tahu hanya klien yang bisa membukanya.

Pelajaran: Enkripsi berbasis kata sandi adalah alat yang fantastis untuk berbagi file sensitif secara ad-hoc dan aman antara dua orang tanpa infrastruktur yang rumit.

File Konfigurasi Seorang Developer

Ben sedang membangun aplikasi web yang terhubung ke database dan menggunakan API pembayaran pihak ketiga. Kata sandi database dan kunci API disimpan dalam file config.json. Dia perlu melakukan commit kodenya ke repositori Git bersama, tetapi melakukan commit file konfigurasi dengan rahasia dalam bentuk teks biasa akan menjadi pelanggaran keamanan yang fatal. Jadi, dia mengenkripsi config.json untuk membuat config.json.enc. Kata sandi untuk dekripsi tidak disimpan dalam kode. Di lingkungan pengembangan, dia hanya akan mendekripsi file secara lokal. Di produksi, kata sandi diteruskan dengan aman ke aplikasi sebagai variabel lingkungan, yang digunakan aplikasi untuk mendekripsi konfigurasi saat startup.

Pelajaran: Mengenkripsi file konfigurasi memungkinkanmu menyimpan "rahasia saat tidak aktif" dengan aman bersama kodemu, memisahkan data rahasia dari kunci rahasia yang dibutuhkan untuk membukanya.

Catatan Jurnalis di Cloud

Maria, seorang jurnalis investigatif, sedang mengerjakan sebuah berita sensitif. Dia menyimpan catatan wawancara dan risetnya di folder yang disinkronkan ke layanan penyimpanan cloud populer. Meskipun dia mempercayai keamanan layanan tersebut, dia khawatir tentang potensi ancaman: pegawai nakal di perusahaan cloud, surat panggilan dari pemerintah, atau pelanggaran data besar-besaran. Untuk melindungi sumbernya, dia mengenkripsi setiap dokumen dengan kata sandi yang kuat dan unik sebelum menyimpannya ke folder yang disinkronkan. Sekarang, bahkan jika seluruh akun cloud-nya dibobol, catatannya hanya akan menjadi omong kosong yang tidak bisa dibaca.

Pelajaran: Enkripsi memberikan lapisan keamanan pribadi "zero-trust", memastikan datamu tetap pribadi bahkan ketika disimpan di sistem yang tidak kamu kontrol.

Kesalahan dan jebakan umum

  • Menggunakan kata sandi yang lemah. AES-256 secara praktis tidak bisa dipecahkan dengan brute force. Tetapi KDF yang menghasilkan kunci dari kata sandimu rentan jika kata sandinya adalah "12345" atau "password". Keamanan seluruh sistem runtuh bergantung pada kekuatan kata sandimu. Gunakan passphrase yang panjang, acak, dan unik.
  • Lupa kata sandi. Dengan enkripsi berbasis kata sandi, tidak ada tautan "Lupa kata sandi?". Kata sandi adalah kuncinya. Jika kamu kehilangannya, data itu hilang selamanya. Bukan hanya terkunci; kuncinya telah menguap. Simpan kata sandimu dengan aman di manajer kata sandi.
  • Membuat kripto sendiri. Ini adalah dosa utama dalam keamanan perangkat lunak. Kamu mungkin tahu apa itu AES, GCM, dan PBKDF2, tetapi menggabungkannya secara aman penuh dengan jebakan. Apakah kamu menggunakan generator angka acak yang aman secara kriptografis untuk salt? Apakah tag autentikasimu ditangani dengan benar? Selalu gunakan pustaka kriptografi yang dihormati dan telah ditinjau sejawat untuk bahasa pemrogramananmu. Jangan buat gemboknya sendiri; beli dari ahli kunci profesional.
  • Menggunakan kembali salt atau IV. Salt (untuk KDF) dan IV/nonce (untuk mode sandi) harus acak dan unik untuk setiap operasi enkripsi dengan kunci yang sama. Menggunakannya kembali dapat secara fatal merusak keamanan sandi. Pustaka yang baik menangani ini untukmu, tetapi ini adalah jebakan yang perlu diwaspadai.

Mengapa ini harus kamu perhatikan

Jika kamu seorang developer, kamu pasti akan berurusan dengan rahasia. Itu tak terhindarkan. Baik itu connection string database, kunci API, informasi pribadi pengguna, atau hanya file log yang sensitif, kamu akan memiliki data yang tidak boleh terekspos.

AES berbasis kata sandi adalah alat andalanmu untuk memastikan kerahasiaan data saat tidak aktif. Ini adalah solusi standar yang telah teruji dalam pertempuran untuk:

  • Mengenkripsi rahasia aplikasi dalam basis kodemu.
  • Mengamankan cadangan sebelum mengirimnya ke penyimpanan cloud.
  • Melindungi bidang data sensitif dalam database (misalnya, mengenkripsi Nomor KTP sebelum menyimpannya).
  • Menciptakan cara yang sederhana dan aman bagi pengguna untuk mengirimimu file sensitif.

Ini adalah blok bangunan fundamental untuk menjaga rahasia tetap rahasia di dunia di mana data disalin, dibagikan, dan disimpan di lebih banyak tempat daripada yang bisa kita hitung.

Pelajari lebih dalam

Teori beres. Saatnya praktik — 100% di browser kamu.

Coba tool-nya: Alat Enkripsi