İçeriğe geç
Educora
Üniversite25 dk59 / 59

Kriptografi ve bilgi güvenliği

Simetrik ve asimetrik şifrelemeyi, özet (hash) fonksiyonlarını, dijital imzaları, küçük sayılarla RSA ve Diffie–Hellman örneklerini, yaygın saldırıları ve savunmaları öğren.

Kendini test et
Bu derste öğreneceklerin
  • 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

C = E(K, M), M = D(K, C)
burada:
  • 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.

A = gᵃ mod p, B = gᵇ mod p, s = Bᵃ mod p = Aᵇ mod p = gᵃᵇ mod p
burada:
  • 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.

Örnek 1: küçük sayılarla Diffie–Hellman

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
Anahtar hile: 5² = 25 ≡ 2 (mod 23).
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.
n = p · q, φ(n) = (p − 1)(q − 1), e · d ≡ 1 (mod φ(n)), c = mᵉ mod n, m = cᵈ mod n
burada:
  • 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.

Örnek 2: oyuncak RSA

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
n = 3 · 11 = 33, φ = 2 · 10 = 20. EBOB(3, 20) = 1 ✓.
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.
Python
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
Python'da 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.

Python
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
Tek bir harfin büyük/küçük olması ya da bir “!” hash'i tamamen değiştirir (64 on altılık basamağın ilk 16'sı gösterilmiştir). Aşağıda saniyede 10¹⁰ deneme yapan bir saldırgan için hesap var: 8 küçük harfli parola 21 saniyede, 94 simgeden 12 rastgele karakterli parola ise ≈ 4,76 · 10¹³ saniyede, yani yaklaşık 1,5 milyon yılda bulunur.
H = L · log₂ N
burada:
  • 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 olurSavunma
Oltalama (phishing)sahte bir site ya da e-posta parolayı ele geçiririki aşamalı doğrulama, adresi denetlemek, geçiş anahtarları
SQL enjeksiyonugirdi metni sorgunun bir parçası olurparametreli sorgular, ORM
XSSbaş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ştirilirTLS, sertifika denetimi
Parola tahminikaba 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
SQL
-- 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
Örnek veri tabanında SQL enjeksiyonu: tırnak metnin dışına “kaçar” ve 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.

1 / 10
RSA'da p = 5, q = 11, e = 3. Özel anahtar d kaçtır?