Enkripsi & Dekripsi AES-GCM dalam Python
Implementasikan enkripsi terautentikasi dengan pengelolaan nonce yang tepat.
Enkripsi & Dekripsi AES-GCM dalam Python adalah pelajaran Cryptology 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 Cryptology Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Cryptology Academy mencakup 4 pelajaran total.
Mengapa Menggunakan AES-GCM?
AES-GCM adalah skema Enkripsi Terautentikasi dengan Data Terkait (AEAD). Skema ini menyediakan kerahasiaan (AES-CTR) serta integritas dan keaslian (MAC GHASH) dalam satu proses — standar untuk enkripsi modern.
Komponen GCM: CTR + GHASH
AES-GCM = AES dalam mode Counter (enkripsi) + MAC polinomial GHASH (autentikasi). Tag autentikasi 128-bit mencakup ciphertext dan Data Terautentikasi Tambahan (AAD) opsional.
Persyaratan Nonce
Nonce 96-bit tidak boleh pernah digunakan ulang dengan kunci yang sama. Penggunaan ulang nonce sepenuhnya merusak GCM — penyerang dapat memulihkan kunci autentikasi dan memalsukan ciphertext. Gunakan nonce acak atau pencacah dengan rotasi kunci.
Mengenkripsi dengan AES-GCM di Python
Menggunakan lapisan hazmat:
import os
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
# Generate a 256-bit key
key = AESGCM.generate_key(bit_length=256)
aesgcm = AESGCM(key)
# Fresh 96-bit nonce per encryption
nonce = os.urandom(12)
plaintext = b"sensitive payload"
aad = b"user_id=42" # authenticated but not encrypted
ciphertext = aesgcm.encrypt(nonce, plaintext, aad)
print("Nonce:", nonce.hex())
print("Ciphertext+tag:", ciphertext.hex())Mendekripsi dengan AES-GCM di Python
Dekripsi memverifikasi tag secara otomatis; memunculkan InvalidTag saat gagal:
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
from cryptography.exceptions import InvalidTag
# key, nonce, ciphertext, aad from previous step
try:
recovered = aesgcm.decrypt(nonce, ciphertext, aad)
print("Decrypted:", recovered)
except InvalidTag:
print("Authentication failed — ciphertext tampered!")Menyimpan Nonce + Ciphertext
Tambahkan nonce di depan ciphertext sebelum penyimpanan. Saat dekripsi, pisahkan pada byte ke-12:
def encrypt_blob(key: bytes, data: bytes, aad: bytes = b"") -> bytes:
aesgcm = AESGCM(key)
nonce = os.urandom(12)
ct = aesgcm.encrypt(nonce, data, aad or None)
return nonce + ct # prepend nonce
def decrypt_blob(key: bytes, blob: bytes, aad: bytes = b"") -> bytes:
aesgcm = AESGCM(key)
nonce, ct = blob[:12], blob[12:]
return aesgcm.decrypt(nonce, ct, aad or None)Data Terautentikasi Tambahan (AAD)
AAD diautentikasi, tetapi tidak dienkripsi. Gunakan AAD untuk mengikat ciphertext ke konteks: ID pengguna, ID rekaman, versi API. Hal ini mencegah penyerang memindahkan ciphertext yang valid ke konteks lain.
Menggunakan API Cipher Tingkat Rendah
Untuk enkripsi streaming atau di tempat, gunakan API Cipher dengan mode GCM secara langsung:
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
key = os.urandom(32)
nonce = os.urandom(12)
cipher = Cipher(algorithms.AES(key), modes.GCM(nonce))
encryptor = cipher.encryptor()
encryptor.authenticate_additional_data(b"aad-value")
ct = encryptor.update(b"hello world") + encryptor.finalize()
tag = encryptor.tag
print("Tag:", tag.hex())Resistansi terhadap Penyalahgunaan Nonce: AES-GCM-SIV
AES-GCM-SIV (RFC 8452) tahan terhadap penyalahgunaan nonce: penggunaan ulang nonce membocorkan bahwa dua plaintext identik, tetapi TIDAK merusak keaslian. Utamakan AES-GCM-SIV jika keunikan nonce sulit dijamin.
Derivasi Kunci Sebelum Enkripsi
Jangan pernah menggunakan kata sandi mentah sebagai kunci AES. Turunkan kunci dengan Argon2 atau HKDF:
from cryptography.hazmat.primitives.kdf.hkdf import HKDF
from cryptography.hazmat.primitives import hashes
import os
master_secret = b"shared_secret_from_ECDH"
salt = os.urandom(16)
kdf = HKDF(algorithm=hashes.SHA256(), length=32, salt=salt, info=b"aes-gcm-key")
aes_key = kdf.derive(master_secret)
print("Derived AES key:", aes_key.hex())Pertimbangan Kinerja
Akselerasi perangkat keras AES-NI membuat AES-GCM sangat cepat (~1-4 GB/dtk pada CPU modern). Python cryptography menggunakan OpenSSL yang memanfaatkan AES-NI. Untuk berkas berukuran >100 MB, gunakan streaming berbasis potongan dengan API Cipher tingkat rendah.
Pemeriksaan Pengetahuan
Apa yang terjadi jika nonce yang sama digunakan dua kali dengan AES-GCM di bawah kunci yang sama?
Ringkasan Pelajaran
AES-GCM menyediakan enkripsi terautentikasi dalam satu proses. Gunakan nonce acak 96-bit yang baru untuk setiap enkripsi. Tambahkan nonce di depan ciphertext untuk penyimpanan. AAD mengikat ciphertext ke konteks. AES-GCM-SIV tahan terhadap penyalahgunaan nonce. Turunkan kunci dengan HKDF, jangan pernah menggunakan kata sandi mentah.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Enkripsi & Dekripsi AES-GCM dalam Python” gratis?
Ya — teks lengkap “Enkripsi & Dekripsi AES-GCM dalam Python” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Cryptology Academy, upgrade ke CoddyKit PRO. Kursus Cryptology Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Enkripsi & Dekripsi AES-GCM dalam Python”?
Implementasikan enkripsi terautentikasi dengan pengelolaan nonce yang tepat. Kamu berlatih Cryptology 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 Cryptology Academy?
Tidak diperlukan pengalaman sebelumnya. Cryptology 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 & Dekripsi AES-GCM dalam Python” 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 Cryptology Academy ini?
Ya. Setiap pelajaran Cryptology 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
- Ikhtisar Pustaka Kriptografi Python
- Enkripsi & Dekripsi AES-GCM dalam Python
- Pasangan Kunci RSA & ECDSA dalam Python
- Kesalahan Umum Kripto Python & Pola Aman