- Simetrik ve asimetrik şifrelemeyi karşılaştırmak ve anahtar dağıtım sorununu açıklamak
- Küçük sayılarla RSA anahtarları kurmak, şifrelemek, şifre çözmek ve imzalamak
- Hash özelliklerini ve parolaların doğru saklanmasını açıklamak
- Başlıca saldırıları tanımak ve onlara karşı savunma seçmek
Leyla banka uygulamasında ödeme yaptığında veriler onlarca yabancı cihazdan geçer; ama hiçbiri tutarı okuyamaz ya da değiştiremez, banka da isteğin gerçekten Leyla'dan geldiğinden emindir. Bunu kriptografi sağlar. Dört amaca hizmet eder: gizlilik (başkaları okuyamaz), bütünlük (değişiklik fark edilir), kimlik doğrulama (gönderenin kim olduğu bilinir) ve inkâr edilemezlik (gönderen sonradan “ben göndermedim” diyemez).
Simetrik şifreleme
- M, Cdüz metin ve şifreli metin
- Kiki tarafta da bulunan aynı gizli anahtar
- E, Dşifreleme ve şifre çözme algoritmaları (örneğin AES)
Kerckhoffs ilkesi: algoritma herkesçe bilinebilir; güvenlik yalnızca anahtarın gizliliğine dayanmalıdır.
Günümüzün standardı AES'tir (128, 192 ya da 256 bitlik anahtar): çok hızlıdır ve işlemcilerde donanım desteği vardır. 128 bitlik bir anahtarın 2¹²⁸ ≈ 3,4 · 10³⁸ olasılığı vardır; hepsini denemek pratikte imkânsızdır. Asıl sorun başkadır: anahtar nasıl paylaşılır? n kişinin her çifti için ayrı bir anahtar gerekir: n(n − 1)/2 anahtar, 1000 kullanıcı için 499.500. Üstelik anahtar ilk kez güvensiz bir kanaldan gönderilemez.
Asimetrik kriptografi: Diffie–Hellman ve RSA
Asimetrik kriptografide her kullanıcının iki anahtarı vardır: herkese verilen açık anahtar ve kimseye gösterilmeyen özel anahtar. Açık anahtarla şifrelenen yalnızca özel anahtarla açılabilir. Bu, “bir yönde kolay, geri dönüşü zor” matematiksel işlemlere dayanır: iki büyük asal sayıyı çarpmak kolaydır ama çarpımı çarpanlarına ayırmak çok zordur; gᵃ mod p'yi hesaplamak kolaydır ama a'yı geri bulmak (ayrık logaritma) zordur.
- p, gherkesçe bilinen asal sayı ve taban
- a, btarafların gizli sayıları
- sortak gizli anahtar — ağ üzerinden hiç gönderilmez
Diffie–Hellman anahtar değişimi: dinleyen kişi p, g, A ve B'yi görür ama s'yi bulmak için ayrık logaritma problemini çözmesi gerekir.
p = 23, g = 5. Aysel'in gizli sayısı a = 6, Murad'ınki b = 15. Açık sayıları ve ortak anahtarı bul.
Çözümü gösterÇözümü gizle
A = 5⁶ = (5²)³ ≡ 2³ = 8.
B = 5¹⁵ = 5¹² · 5³; 5¹² = (5⁶)² ≡ 64 ≡ 18; 5³ = 125 ≡ 10; 18 · 10 = 180 ≡ 19.
Aysel: s = 19⁶; 19 ≡ −4, (−4)⁶ = 4096 = 23 · 178 + 2 → s = 2.
Murad: s = 8¹⁵ = 2⁴⁵; 2¹¹ = 2048 = 23 · 89 + 1 ≡ 1, yani 2⁴⁵ = (2¹¹)⁴ · 2 ≡ 2 ✓.
İkisi de aynı anahtarı buldu, ama 2 sayısı ağda hiç görünmedi.
- p, qiki büyük gizli asal sayı (uygulamada her biri ≈ 1024 bit)
- (n, e)açık anahtar
- dözel anahtar: e'nin φ(n) modülüne göre tersi
- m, cmesaj (0 ≤ m < n) ve şifreli metin
RSA (Rivest, Shamir, Adleman, 1977). d'yi bulmak için φ(n), onun için de n'nin çarpanları gerekir; güvenlik çarpanlara ayırmanın zorluğuna dayanır.
p = 3, q = 11, e = 3. Anahtarları kur, m = 4 mesajını şifrele ve çöz, sonra imzala ve imzayı doğrula.
Çözümü gösterÇözümü gizle
d: 3d ≡ 1 (mod 20) → d = 7 (3 · 7 = 21 = 20 + 1). Açık anahtar (33, 3), özel anahtar 7.
Şifreleme: c = 4³ = 64 mod 33 = 31.
Şifre çözme: 31⁷ mod 33; 31 ≡ −2 → (−2)⁷ = −128; 128 = 3 · 33 + 29 → −128 ≡ −29 ≡ 4 ✓.
İmza (özel anahtarla): s = 4⁷ = 16.384 = 33 · 496 + 16 → s = 16.
Doğrulama (açık anahtarla): 16³ = 4096 = 33 · 124 + 4 → 4 = m ✓; imza geçerlidir.
p, g = 23, 5
a, b = 6, 15
A, B = pow(g, a, p), pow(g, b, p)
print('DH public:', A, B, '| shared:', pow(B, a, p), pow(A, b, p))
p, q, e = 3, 11, 3
n, phi = p * q, (p - 1) * (q - 1)
d = pow(e, -1, phi)
m = 4
c = pow(m, e, n)
print('RSA n =', n, 'phi =', phi, 'd =', d)
print('encrypt', m, '->', c, '| decrypt ->', pow(c, d, n))
s = pow(m, d, n)
print('signature', s, '| verify ->', pow(s, e, n))▸ Beklenen çıktı
DH public: 8 19 | shared: 2 2 RSA n = 33 phi = 20 d = 7 encrypt 4 -> 31 | decrypt -> 4 signature 16 | verify -> 4
pow(x, k, n) hızlı modüler üs almadır (art arda kare alarak, O(log k) çarpma); pow(e, -1, phi) ise genişletilmiş Öklid algoritmasıyla modüler tersi bulur. İki örnek de elle yaptığımız hesapları doğrular.Hash fonksiyonları ve dijital imzalar
Kriptografik hash (örneğin SHA-256), her uzunluktaki veriyi sabit uzunlukta (256 bit) bir “parmak izine” dönüştürür. Gereksinimler: her seferinde aynı sonuç; hash'ten veri geri elde edilemez (tek yönlülük); aynı hash'e sahip iki farklı girdi bulmak pratikte imkânsızdır (çakışma direnci); tek bitlik bir değişiklik hash'in yaklaşık yarı bitini değiştirir (çığ etkisi). Hash şifreleme değildir: anahtarı yoktur ve geri çevrilemez.
import hashlib, math
for text in ['Educora', 'educora', 'Educora!']:
print(text, hashlib.sha256(text.encode()).hexdigest()[:16])
rate = 10 ** 10
for name, n, length in [('8 lowercase', 26, 8), ('12 mixed', 94, 12)]:
bits = length * math.log2(n)
seconds = n ** length / rate
print(name, '|', round(bits, 1), 'bits |', f'{seconds:.3g}', 'seconds')▸ Beklenen çıktı
Educora b3dbb4d80128c71a educora 48ecb7c2aeec01dc Educora! 836636e98b18e97a 8 lowercase | 37.6 bits | 20.9 seconds 12 mixed | 78.7 bits | 4.76e+13 seconds
- Hrastgele bir parolanın entropisi, bit
- Lparola uzunluğu
- Nalfabe boyutu (26 küçük harf, 94 yazdırılabilir karakter)
Her ek bit kaba kuvvet denemesini iki katına çıkarır. Formül yalnızca gerçekten rastgele parolalar için geçerlidir: “Baku2026!” gibi parolalar sözlük saldırılarıyla çabucak bulunur.
Parolalar asla düz metin olarak ya da yalın SHA-256 ile saklanmamalıdır: sunucu her kullanıcıya rastgele bir tuz (salt) verir ve parolayı bilerek yavaş bir fonksiyonla hash'ler: Argon2, bcrypt, scrypt ya da PBKDF2. Tuz, aynı parolaların aynı hash'i vermesini ve önceden hesaplanmış tablolarla saldırıyı engeller; yavaşlık ise milyarlarca hızlı denemeye engel olur. Dijital imza şöyle çalışır: gönderen, mesajın hash'ini kendi özel anahtarıyla imzalar; herkes onu gönderenin açık anahtarıyla doğrular. Açık anahtarın kime ait olduğunu bir sertifika, yani güvenilir bir merkezin (CA) imzaladığı belge doğrular.
Saldırılar ve savunmalar
| Saldırı | Ne olur | Savunma |
|---|---|---|
| Oltalama (phishing) | sahte bir site ya da e-posta parolayı ele geçirir | iki aşamalı doğrulama, adresi denetlemek, geçiş anahtarları |
| SQL enjeksiyonu | girdi metni sorgunun bir parçası olur | parametreli sorgular, ORM |
| XSS | başkasının sayfasına betik enjekte edilir | çıktıyı kaçışlama, Content-Security-Policy |
| Ortadaki adam (MITM) | trafik gizlice okunur ya da değiştirilir | TLS, sertifika denetimi |
| Parola tahmini | kaba kuvvet ve sözlük saldırıları | uzun rastgele parolalar, deneme sınırlama, tuzlu yavaş hash |
| Fidye yazılımı | dosyaları şifreleyip ödeme ister | çevrim dışı yedekler, güncellemeler, en az yetki |
-- the program glues user input into the query:
-- WHERE email = '<input>'
-- the attacker types: x' OR '1'='1
SELECT COUNT(*) AS leaked_rows
FROM students
WHERE email = 'x' OR '1'='1';▸ Beklenen çıktı
leaked_rows 12
OR '1'='1' koşulu hep doğru olduğu için 12 öğrencinin tamamı sızar. Parametreli bir sorguda (WHERE email = ?) aynı girdi düz metin olarak karşılaştırılır ve 0 satır döner.Önemli noktalar
- Simetrik şifreleme (AES) hızlıdır ama anahtar dağıtım sorunu vardır: n kişiye n(n − 1)/2 anahtar gerekir.
- Diffie–Hellman ortak anahtarı göndermeden oluşturur: s = gᵃᵇ mod p.
- RSA: n = pq, ed ≡ 1 (mod φ), c = mᵉ mod n, m = cᵈ mod n; imza s = mᵈ, doğrulama sᵉ = m.
- Hash tek yönlüdür ve çakışmaya dayanıklıdır; parolalar tuz ve yavaş hash ile (Argon2, bcrypt) saklanır.
- Parametreli sorgular SQL enjeksiyonunu, TLS ortadaki adam saldırısını durdurur; kriptografiyi kendin yazma.
Kendini test et
10 soru. Her doğru cevap XP kazandırır.