Yaygın Python Kripto Hataları ve Güvenli Kalıplar
Sabit kodlanmış anahtarlardan, ECB kipinden, sabit zamanlı olmayan karşılaştırmalardan ve diğer hatalardan kaçının.
Yaygın Python Kripto Hataları ve Güvenli Kalıplar, CoddyKit'te ücretsiz bir Cryptology Academy dersidir. Bu, 4 dersinin 4. 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.
En Tehlikeli Kriptografi Hataları
Kriptografiyi yanlış kullanmak kolaydır. Python'daki en yaygın tuzaklar şunlardır: kaynak koduna sabitlenmiş anahtarlar, ECB kipi, sabit zamanda yapılmayan karşılaştırmalar, zayıf rastgelelik, anahtarın veya tek kullanımlık değerin yeniden kullanılması ve kendi kriptografinizi yazmak.
Tuzak 1: Sabitlenmiş Anahtarlar
Anahtarları kaynak koduna asla gömmeyin. Anahtarlar git geçmişinde, günlüklerde ve hata iletilerinde yer alabilir. Ortam değişkenlerini veya bir KMS kullanın:
# WRONG
SECRET_KEY = b"my_secret_key_12" # visible in git!
# RIGHT
import os
SECRET_KEY = os.environb.get(b"SECRET_KEY") or os.urandom(32)
# Or load from KMS at startupTuzak 2: ECB Kipi
AES-ECB her bloğu bağımsız olarak şifreler; aynı açık metin blokları aynı şifreli metin bloklarını üretir. "ECB pengueni" saldırısı, görüntülerdeki ve yapılandırılmış verilerdeki örüntüleri ortaya çıkarır. Her zaman GCM veya rastgele IV içeren CBC kullanın.
# WRONG — never use ECB
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
cipher = Cipher(algorithms.AES(key), modes.ECB()) # insecure!
# RIGHT
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
aesgcm = AESGCM(key) # authenticated encryptionTuzak 3: Sabit Zamanda Yapılmayan MAC Karşılaştırması
MAC'leri karşılaştırmak için == kullanmak zamanlama bilgilerini sızdırır. Her zaman hmac.compare_digest kullanın:
import hmac
# WRONG — leaks timing
if received_mac == expected_mac:
pass
# RIGHT — constant-time
if hmac.compare_digest(received_mac, expected_mac):
passTuzak 4: Zayıf Rastgele Sayı Oluşturma
Kriptografik amaçlar için random modülünü asla kullanmayın — bu bir CSPRNG değildir. secrets veya os.urandom kullanın:
import random, secrets, os
# WRONG
key = bytes([random.randint(0, 255) for _ in range(32)]) # predictable!
# RIGHT
key = os.urandom(32) # OS CSPRNG
token = secrets.token_bytes(32) # secrets module wrapperTuzak 5: IV'nin veya Tek Kullanımlık Değerin Yeniden Kullanılması
CBC ile bir IV'yi veya GCM ile bir tek kullanımlık değeri yeniden kullanmak güvenliği bozar. Her şifreleme işlemi için yeni bir rastgele IV veya tek kullanımlık değer oluşturun ve bunu şifreli metnin yanında saklayın:
import os
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
key = AESGCM.generate_key(bit_length=256)
aesgcm = AESGCM(key)
# WRONG — fixed nonce
nonce = b"\x00" * 12 # reuse breaks GCM!
# RIGHT — fresh nonce every time
nonce = os.urandom(12)
ciphertext = aesgcm.encrypt(nonce, b"data", None)Tuzak 6: Güvenlik İçin MD5 veya SHA-1 Kullanmak
MD5 ve SHA-1, çakışma direnci bakımından kriptografik olarak kırılmıştır. Bunları sayısal imzalar, sertifika parmak izleri veya HMAC için asla kullanmayın. SHA-256 veya SHA-3-256 kullanın.
Tuzak 7: Kendi Kriptografinizi Yazmak
Kriptografik temel yapıtaşlarını sıfırdan uygulamak neredeyse her zaman fark edilmesi zor hatalara yol açar. cryptography, PyNaCl veya PyCA paketlerini kullanın. AES, RSA veya ECDSA'yı kendiniz asla uygulamayın.
Güvenli Örüntü: Yüksek Düzeyli Kriptografi İçin PyNaCl
PyNaCl, NaCl/libsodium kitaplığını sarmalar ve yanlış kullanılmasını zorlaştıran, belirli tercihlere sahip bir API sunar:
# pip install PyNaCl
import nacl.secret
import nacl.utils
key = nacl.utils.random(nacl.secret.SecretBox.KEY_SIZE)
box = nacl.secret.SecretBox(key)
encrypted = box.encrypt(b"my secret message")
decrypted = box.decrypt(encrypted)
print("Decrypted:", decrypted) # Uses XSalsa20-Poly1305Güvenli Örüntü: Argon2 ile Parola Özetleme
Parola özetleme için argon2-cffi kullanın — doğrudan SHA-256 veya bcrypt kullanmayın:
# pip install argon2-cffi
from argon2 import PasswordHasher
ph = PasswordHasher(time_cost=3, memory_cost=65536, parallelism=4)
hash_val = ph.hash("user_password")
print("Hash:", hash_val[:40], "...")
# Verify
try:
ph.verify(hash_val, "user_password")
print("Password correct")
except Exception:
print("Wrong password")Anahtarları Sıfırlama
Bellekte bir anahtarı kullandıktan sonra bellek dökümü saldırılarına açık süreyi azaltmak için anahtarı sıfırlayın. Python'un çöp toplayıcısı bunu zorlaştırır — ctypes veya bu işlemi otomatik olarak yöneten PyNaCl'ı kullanın.
Bilgi Kontrolü
Kriptografik MAC'leri karşılaştırırken == yerine hangi Python işlevi kullanılmalıdır?
Ders Özeti
Sabitlenmiş anahtarlardan, ECB kipinden, MAC karşılaştırmasında == kullanımından, random modülünden ve tek kullanımlık değerin yeniden kullanılmasından kaçının. Rastgelelik için os.urandom/secrets, şifreleme için AESGCM, doğrulama için hmac.compare_digest kullanın. PyNaCl ve argon2-cffi, simetrik kriptografi ve parolalar için güvenli yüksek düzeyli API'ler sağlar.
Sıkça Sorulan Sorular
“Yaygın Python Kripto Hataları ve Güvenli Kalıplar” dersi ücretsiz mi?
Evet — “Yaygın Python Kripto Hataları ve Güvenli Kalıplar” 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.
“Yaygın Python Kripto Hataları ve Güvenli Kalıplar” dersinde ne öğreneceğim?
Sabit kodlanmış anahtarlardan, ECB kipinden, sabit zamanlı olmayan karşılaştırmalardan ve diğer hatalardan kaçını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 4. dersidir.
“Yaygın Python Kripto Hataları ve Güvenli Kalıplar” 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