Python'da AES-GCM ile Şifreleme ve Şifre Çözme
Uygun nonce yönetimiyle kimlik doğrulamalı şifrelemeyi uygulayın.
Python'da AES-GCM ile Şifreleme ve Şifre Çözme, CoddyKit'te ücretsiz bir Cryptology Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Cryptology Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Cryptology Academy kursu toplamda 4 dersten oluşur.
AES-GCM Neden Kullanılır?
AES-GCM, İlişkili Verili Kimlik Doğrulamalı Şifreleme (AEAD) şemasıdır. Gizlilik (AES-CTR) ile bütünlük ve özgünlük (GHASH MAC) özelliklerini tek geçişte sağlar — modern şifrelemenin standardıdır.
GCM Bileşenleri: CTR + GHASH
AES-GCM = Sayaç kipinde AES (şifreleme) + GHASH polinom MAC'i (kimlik doğrulama). 128 bitlik kimlik doğrulama etiketi, hem şifreli metni hem de isteğe bağlı Ek Kimlik Doğrulanmış Veriyi (AAD) kapsar.
Tek Kullanımlık Değer Gereksinimleri
96 bitlik tek kullanımlık değer, aynı key ile asla yeniden kullanılmamalıdır. Tek kullanımlık değerin yeniden kullanılması GCM'yi tamamen bozar — saldırgan kimlik doğrulama anahtarını ele geçirir ve sahte şifreli metinler oluşturabilir. Rastgele tek kullanımlık değerler veya anahtar döndürmeyle birlikte bir sayaç kullanın.
Python'da AES-GCM ile Şifreleme
Hazmat katmanını kullanarak:
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())Python'da AES-GCM ile Şifre Çözme
Şifre çözme işlemi etiketi otomatik olarak doğrular; başarısızlık durumunda InvalidTag oluşturur:
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!")Tek Kullanımlık Değeri ve Şifreli Metni Saklama
Saklamadan önce tek kullanımlık değeri şifreli metnin başına ekleyin. Şifre çözme sırasında bayt 12'den bölün:
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)Ek Kimlik Doğrulanmış Veri (AAD)
AAD kimliği doğrulanır, ancak şifrelenmez. Şifreli metni bağlama bağlamak için kullanın: kullanıcı kimliği, kayıt kimliği, API sürümü. Bu, saldırganın geçerli bir şifreli metni farklı bir bağlama taşımasını önler.
Düşük Düzeyli Şifreleme API'sini Kullanma
Akış halinde veya yerinde şifreleme için doğrudan GCM kipiyle Şifreleme API'sini kullanın:
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())Tek Kullanımlık Değer Hatalarına Dayanıklılık: AES-GCM-SIV
AES-GCM-SIV (RFC 8452), tek kullanımlık değerlerin yanlış kullanılmasına dayanıklıdır: tek kullanımlık değerin yeniden kullanılması iki açık metnin aynı olduğunu ortaya çıkarır, ancak kimlik doğrulamayı BOZMAZ. Tek kullanımlık değerlerin benzersizliğini garanti etmek zorsa bunu tercih edin.
Şifrelemeden Önce Anahtar Türetme
Ham bir parolayı asla AES anahtarı olarak kullanmayın. Argon2 veya HKDF ile bir anahtar türetin:
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())Performansla İlgili Hususlar
AES-NI donanım hızlandırması, AES-GCM'yi son derece hızlı hale getirir (modern işlemcilerde yaklaşık 1-4 GB/sn). Python cryptography, AES-NI'dan yararlanan OpenSSL'i kullanır. 100 MB'tan büyük dosyalar için düşük düzeyli Şifreleme API'siyle parçalı akış kullanın.
Bilgi Kontrolü
AES-GCM'de aynı key ile aynı tek kullanımlık değer iki kez kullanılırsa ne olur?
Ders Özeti
AES-GCM, kimlik doğrulamalı şifrelemeyi tek geçişte sağlar. Her şifreleme işlemi için yeni, 96 bitlik rastgele bir tek kullanımlık değer kullanın. Saklamak için tek kullanımlık değeri şifreli metnin başına ekleyin. AAD, şifreli metni bağlama bağlar. AES-GCM-SIV, tek kullanımlık değerlerin yanlış kullanımına dayanır. Anahtarları HKDF ile türetin; ham parolaları asla kullanmayın.
Sıkça Sorulan Sorular
“Python'da AES-GCM ile Şifreleme ve Şifre Çözme” dersi ücretsiz mi?
Evet — “Python'da AES-GCM ile Şifreleme ve Şifre Çözme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Cryptology Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Cryptology Academy kursu toplamda 4 dersten oluşur.
“Python'da AES-GCM ile Şifreleme ve Şifre Çözme” dersinde ne öğreneceğim?
Uygun nonce yönetimiyle kimlik doğrulamalı şifrelemeyi uygulayın. Cryptology Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Cryptology Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Cryptology Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Python'da AES-GCM ile Şifreleme ve Şifre Çözme” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Cryptology Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Cryptology Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Python kriptografi Kütüphanesine Genel Bakış
- Python'da AES-GCM ile Şifreleme ve Şifre Çözme
- Python'da RSA ve ECDSA Anahtar Çiftleri
- Yaygın Python Kripto Hataları ve Güvenli Kalıplar