0Pricing
Security+ Academy · Pelajaran

Enkripsi Terautentikasi: AES-GCM dan ChaCha20-Poly1305

Pahami cara sandi AEAD menyediakan kerahasiaan dan integritas secara bersamaan, serta alasan penyalahgunaan nonce dalam AES-GCM dapat menyebabkan pemulihan kunci yang sangat fatal.

Enkripsi Terautentikasi: AES-GCM dan ChaCha20-Poly1305 adalah pelajaran Security+ Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Security+ Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Security+ Academy mencakup 4 pelajaran total.

Apa Itu Enkripsi Terautentikasi?

Authenticated Encryption (AE) mengatasi masalah mendasar: enkripsi tradisional hanya menyediakan kerahasiaan — menjaga Data tetap rahasia — tetapi tidak memverifikasi apakah teks tersandi telah diubah. Penyerang dapat membalik bit dalam teks tersandi, dan penerima akan mendekripsi Data yang rusak tanpa mengetahui bahwa Data tersebut telah diubah. Authenticated Encryption with Associated Data (AEAD) secara bersamaan menambahkan jaminan integritas dan keaslian, sehingga menghasilkan teks tersandi terenkripsi serta tag autentikasi yang mendeteksi setiap perubahan.

AES-GCM: Mode Penghitung dan GMAC

AES-GCM (Galois/Counter Mode) menggabungkan dua komponen: AES-CTR (Counter Mode) untuk enkripsi dan GMAC (Galois Message Authentication Code) untuk integritas. AES-CTR menghasilkan aliran kunci dengan mengenkripsi nilai penghitung lalu melakukan XOR terhadap teks biasa — hal ini membuat enkripsi dapat diparalelkan, berbeda dari mode CBC. GMAC menghitung tag autentikasi atas teks tersandi dan Data terkait apa pun. Tag yang dihasilkan (128 bit) dikirim bersama teks tersandi; perubahan satu bit saja akan membuat tag tidak valid.

# AES-256-GCM encryption with openssl
openssl enc -aes-256-gcm -in plaintext.txt -out encrypted.bin \
  -K $(openssl rand -hex 32) \
  -iv $(openssl rand -hex 12)

Nonce: Kritis dan Rentan

AES-GCM memerlukan nonce (angka yang digunakan sekali), biasanya berukuran 96 bit (12 byte). Nonce harus unik untuk setiap operasi enkripsi dengan kunci yang sama — nonce tidak perlu dirahasiakan, tetapi tidak boleh pernah digunakan ulang. Penggunaan ulang nonce dalam AES-GCM sangat fatal: jika dua pesan dienkripsi dengan kunci dan nonce yang sama, penyerang dapat melakukan XOR pada teks tersandi untuk menghilangkan aliran kunci, sehingga berpotensi memulihkan kedua teks asli. Kerentanan ini kadang disebut 'penyalahgunaan nonce' dan telah menyebabkan serangan pemulihan kunci di dunia nyata.

Penjelasan Serangan Penyalahgunaan Nonce

Ketika nonce AES-GCM digunakan ulang, penyerang dapat menghitung C1 XOR C2 = P1 XOR P2 (hasil XOR dari kedua teks asli), karena aliran kunci yang sama digunakan untuk keduanya. Selain itu, penggunaan ulang nonce memungkinkan pemulihan kunci autentikasi H, yang berarti penyerang dapat memalsukan tag autentikasi yang valid untuk pesan apa pun — sehingga kerahasiaan dan integritas benar-benar rusak. Sistem seperti Sony PS3 pernah mengalami serangan yang persis seperti ini. Pertahanannya adalah nonce acak (yang dihasilkan dengan CSPRNG) atau penghitung deterministik yang tidak pernah diatur ulang.

ChaCha20-Poly1305: Alternatif Sandi Aliran

ChaCha20-Poly1305 adalah sandi AEAD lain yang diwajibkan dalam TLS 1.3. ChaCha20 adalah sandi aliran yang dirancang oleh Daniel Bernstein dan menghasilkan aliran kunci menggunakan operasi tambah-putar-XOR (ARX) — tanpa tabel pencarian, sepenuhnya berjalan dalam waktu konstan, dan sangat cepat pada CPU tanpa akselerasi perangkat keras AES. Poly1305 adalah MAC sekali pakai (kode autentikasi pesan) yang menghitung tag autentikasi atas teks tersandi. Secara bersama-sama, keduanya memberikan keamanan yang setara dengan AES-GCM, tetapi jauh lebih cepat pada perangkat seluler dan IoT.

Mengapa ChaCha20-Poly1305 untuk Perangkat Seluler?

Prosesor desktop/server x86 dan ARM64 modern menyertakan instruksi perangkat keras AES-NI yang membuat AES-GCM sangat cepat. Namun, banyak prosesor seluler dan IoT tidak memiliki AES-NI, sehingga AES-GCM berbasis perangkat lunak relatif lambat. ChaCha20-Poly1305 dirancang agar cepat dijalankan melalui perangkat lunak dengan operasi aritmetika sederhana, sehingga perangkat seluler memperoleh kinerja yang sebanding tanpa akselerasi perangkat keras. Google menambahkan ChaCha20-Poly1305 ke TLS sebagai alternatif khususnya untuk perangkat Android, dan kini algoritma ini menjadi rangkaian sandi utama dalam TLS 1.3.

Data Terkait: Melindungi Header

'AD' dalam AEAD adalah singkatan dari Associated Data — metadata teks biasa yang diautentikasi tetapi tidak dienkripsi. Dengan demikian, Anda dapat mengautentikasi data yang harus tetap dapat dibaca (seperti header paket atau bidang jenis rekaman) sekaligus melindunginya dari perubahan tanpa izin. Dalam TLS 1.3, byte header rekaman disertakan sebagai data terkait dalam perhitungan AEAD. Jika penyerang mengubah header (misalnya, mengubah panjang rekaman), verifikasi tag autentikasi gagal dan koneksi dihentikan.

AEAD vs Enkripsi-Lalu-MAC

Sebelum AEAD menjadi standar, para kriptografer merekomendasikan Encrypt-then-MAC (EtM): mengenkripsi teks biasa, lalu menghitung MAC atas teks tersandi. Cara ini aman, tetapi memerlukan dua operasi terpisah dengan dua kunci terpisah. Skema AEAD seperti AES-GCM menggabungkan kedua operasi dengan satu kunci, sehingga mengurangi kerumitan implementasi dan menghilangkan seluruh kelas serangan oracle padding yang dahulu banyak menyerang MAC-then-Encrypt (MtE) — urutan yang digunakan pada versi TLS lama (CBC + HMAC). TLS 1.3 yang menggunakan AEAD sepenuhnya menghindari masalah-masalah ini.

AES-128-GCM vs AES-256-GCM

AES-128-GCM dan AES-256-GCM sama-sama disetujui oleh NIST dan dianggap aman terhadap komputer klasik. AES-128 menawarkan keamanan 128 bit dengan kinerja sedikit lebih cepat; AES-256 menawarkan keamanan 256 bit, sehingga memberikan margin perlindungan yang lebih besar terhadap analisis kriptografi dan ancaman kuantum di masa mendatang. Untuk sebagian besar aplikasi saat ini, AES-128-GCM sudah memadai, tetapi sistem pemerintah yang menangani informasi rahasia (NSA Suite B) memerlukan AES-256. TLS 1.3 menyediakan keduanya, dan server dapat memprioritaskannya berdasarkan kebijakan keamanan.

Proses Verifikasi Tag Autentikasi

Saat mendekripsi teks tersandi AEAD, penerima harus memverifikasi tag autentikasi sebelum melakukan dekripsi. Prosesnya adalah: hitung ulang tag yang diharapkan dari teks tersandi, kunci, dan nonce yang diterima; bandingkan dengan tag yang diterima menggunakan fungsi perbandingan waktu konstan; hanya jika keduanya cocok, lanjutkan dengan dekripsi. Perbandingan waktu konstan sangat penting — jika perbandingan berhenti segera setelah menemukan byte pertama yang berbeda, penyerang dapat melancarkan serangan saluran samping berbasis waktu untuk memalsukan tag yang valid byte demi byte. Pustaka AEAD apa pun yang menggunakan perbandingan berhenti lebih awal rentan terhadap serangan ini.

Penerapan AEAD di Dunia Nyata

Algoritma AEAD digunakan secara luas dalam keamanan modern: TLS 1.3 menggunakan AES-GCM dan ChaCha20-Poly1305 untuk semua enkripsi rekaman; WireGuard VPN hanya menggunakan ChaCha20-Poly1305; Signal Protocol menggunakannya untuk enkripsi pesan; protokol QUIC (yang menjadi dasar HTTP/3) menggunakan AES-GCM. Saat Anda melihat rangkaian sandi seperti TLS_AES_256_GCM_SHA384, SHA384 merujuk pada fungsi hash HKDF untuk derivasi kunci, bukan mekanisme integritas — tag GCM menangani integritas.

Pemeriksaan Singkat

Uji pemahaman Anda tentang konsep CompTIA Security+ (SY0-701) dari pelajaran ini.

Rangkuman Pelajaran

Dalam pelajaran ini, Anda mempelajari bahwa algoritma AEAD memberikan kerahasiaan dan integritas secara bersamaan melalui tag autentikasi yang mendeteksi setiap perubahan pada teks tersandi, penggunaan ulang nonce AES-GCM sangat fatal — karena memungkinkan pemulihan aliran kunci dan pemalsuan kunci autentikasi — sehingga nonce harus unik untuk setiap enkripsi, dan ChaCha20-Poly1305 merupakan alternatif AES-GCM yang efisien dari segi kinerja untuk perangkat yang tidak memiliki akselerasi AES perangkat keras. Selanjutnya, kita akan membahas fungsi derivasi kunci untuk mengamankan kata sandi.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Enkripsi Terautentikasi: AES-GCM dan ChaCha20-Poly1305” gratis?

Ya — teks lengkap “Enkripsi Terautentikasi: AES-GCM dan ChaCha20-Poly1305” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Security+ Academy, upgrade ke CoddyKit PRO. Kursus Security+ Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Enkripsi Terautentikasi: AES-GCM dan ChaCha20-Poly1305”?

Pahami cara sandi AEAD menyediakan kerahasiaan dan integritas secara bersamaan, serta alasan penyalahgunaan nonce dalam AES-GCM dapat menyebabkan pemulihan kunci yang sangat fatal. Kamu berlatih Security+ Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Security+ Academy?

Tidak diperlukan pengalaman sebelumnya. Security+ Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Enkripsi Terautentikasi: AES-GCM dan ChaCha20-Poly1305” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Security+ Academy ini?

Ya. Setiap pelajaran Security+ Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Jabat Tangan TLS 1.3 dan Penyambungan Kembali 0-RTT
  2. Enkripsi Terautentikasi: AES-GCM dan ChaCha20-Poly1305
  3. Fungsi Derivasi Kunci: PBKDF2, bcrypt, dan Argon2
  4. Kriptografi Pascakuantum: CRYSTALS-Kyber dan Dilithium
← Kembali ke Security+ Academy