- Simmetrik və asimmetrik şifrələməni müqayisə etmək və açar paylama problemini izah etmək
- Kiçik ədədlərlə RSA açarlarını qurmaq, şifrələmək, deşifrələmək və imzalamaq
- Heşin xassələrini və parolların düzgün saxlanmasını izah etmək
- Əsas hücumları tanımaq və onlara qarşı müdafiə seçmək
Leyla bank tətbiqində ödəniş edəndə məlumat onlarla yad qurğudan keçir, amma heç biri məbləği oxuya və ya dəyişə bilmir, bank isə sorğunun məhz Leyladan gəldiyinə əmindir. Bunu kriptoqrafiya təmin edir. O, dörd məqsədə xidmət edir: məxfilik (başqaları oxuya bilməz), bütövlük (dəyişiklik aşkar olunur), autentiklik (göndərənin kim olduğu bəllidir) və inkarolunmazlıq (göndərən sonradan «mən göndərməmişəm» deyə bilməz).
Simmetrik şifrələmə
- M, Caçıq mətn və şifrələnmiş mətn
- Khər iki tərəfdə olan eyni gizli açar
- E, Dşifrələmə və deşifrələmə alqoritmləri (məs., AES)
Kerkhoffs prinsipi: alqoritm hamıya məlum ola bilər, təhlükəsizlik yalnız açarın gizliliyinə əsaslanmalıdır.
Müasir standart AES-dir (128, 192 və ya 256 bitlik açar): o, çox sürətlidir və prosessorlarda aparat dəstəyi var. 128 bitlik açarın 2¹²⁸ ≈ 3,4 · 10³⁸ variantı var — hamısını yoxlamaq praktik olaraq mümkün deyil. Problem başqadır: açarı necə paylaşmaq? n nəfərin hər cütü üçün ayrıca açar lazımdır — n(n − 1)/2 açar, 1000 istifadəçi üçün 499 500. Üstəlik açarı ilk dəfə etibarsız kanalla göndərmək olmaz.
Asimmetrik şifrələmə: Diffie–Hellman və RSA
Asimmetrik kriptoqrafiyada hər istifadəçinin iki açarı var: hamıya verilən açıq açar və heç kimə göstərilməyən gizli açar. Açıq açarla şifrələnəni yalnız gizli açar aça bilər. Bu, «bir istiqamətdə asan, geri çətin» riyazi əməliyyatlara əsaslanır: iki böyük sadə ədədi vurmaq asandır, hasili vuruqlara ayırmaq isə çox çətindir; gᵃ mod p hesablamaq asandır, a-nı geri tapmaq (diskret loqarifm) çətindir.
- p, ghamıya məlum sadə ədəd və əsas
- a, btərəflərin gizli ədədləri
- sortaq gizli açar — şəbəkə ilə heç vaxt ötürülmür
Diffie–Hellman açar mübadiləsi: dinləyici p, g, A, B-ni görür, amma s-i hesablamaq üçün diskret loqarifmi tapmalıdır.
p = 23, g = 5. Ayselin gizli ədədi a = 6, Muradınkı b = 15. Açıq ədədləri və ortaq açarı tap.
Həllini göstərHəllini gizlət
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, 2⁴⁵ = (2¹¹)⁴ · 2 ≡ 2 ✓.
Hər ikisi eyni açarı aldı, amma 2 ədədi şəbəkədə heç vaxt görünmədi.
- p, qiki böyük gizli sadə ədəd (real həyatda hər biri ≈ 1024 bit)
- (n, e)açıq açar
- dgizli açar: e-nin φ(n) moduluna görə tərsi
- m, cmesaj (0 ≤ m < n) və şifr
RSA (Rivest, Shamir, Adleman, 1977). d-ni tapmaq üçün φ(n), onun üçün isə n-in vuruqları lazımdır — təhlükəsizlik faktorizasiyanın çətinliyinə əsaslanır.
p = 3, q = 11, e = 3. Açarları qur, m = 4 mesajını şifrələ və deşifrələ, sonra onu imzala və imzanı yoxla.
Həllini göstərHəllini gizlət
d: 3d ≡ 1 (mod 20) → d = 7 (3 · 7 = 21 = 20 + 1). Açıq açar (33, 3), gizli açar 7.
Şifrələmə: c = 4³ = 64 mod 33 = 31.
Deşifrələmə: 31⁷ mod 33; 31 ≡ −2 → (−2)⁷ = −128; 128 = 3 · 33 + 29 → −128 ≡ −29 ≡ 4 ✓.
İmza (gizli açarla): s = 4⁷ = 16 384 = 33 · 496 + 16 → s = 16.
Yoxlama (açıq açarla): 16³ = 4096 = 33 · 124 + 4 → 4 = m ✓ — imza düzgündür.
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))▸ Gözlənilən nəticə
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) sürətli modul üzrə qüvvətə yüksəltmədir (kvadrata yüksəltmə ilə, O(log k) vurma), pow(e, -1, phi) isə genişləndirilmiş Evklid alqoritmi ilə modul üzrə tərsi tapır. Hər iki nümunə əl ilə hesabımızı təsdiqləyir.Heş funksiyaları və rəqəmsal imzalar
Kriptoqrafik heş (məsələn, SHA-256) istənilən uzunluqlu məlumatdan sabit uzunluqlu (256 bit) «barmaq izi» düzəldir. Tələblər: hər dəfə eyni nəticə; heşdən məlumatı geri tapmaq mümkün deyil (birtərəflilik); eyni heşli iki fərqli məlumat tapmaq praktik olaraq mümkün deyil (toqquşmaya davamlılıq); bir bitlik dəyişiklik heşin təxminən yarı bitini dəyişir (uçqun effekti). Heş şifrələmə deyil: açarı yoxdur və geri açılmır.
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')▸ Gözlənilən nəticə
Educora b3dbb4d80128c71a educora 48ecb7c2aeec01dc Educora! 836636e98b18e97a 8 lowercase | 37.6 bits | 20.9 seconds 12 mixed | 78.7 bits | 4.76e+13 seconds
- Htəsadüfi parolun entropiyası, bit
- Lparolun uzunluğu
- Nəlifbanın ölçüsü (kiçik hərflər 26, bütün çap simvolları 94)
Hər əlavə bit kor-koranə axtarışı iki dəfə uzadır. Düstur yalnız həqiqətən təsadüfi parollar üçündür: «Baku2026!» kimi parollar lüğət hücumları ilə çox tez tapılır.
Parolları heç vaxt açıq mətn kimi və ya sadə SHA-256 ilə saxlamaq olmaz: server hər istifadəçiyə təsadüfi duz (salt) verir və parolu qəsdən yavaş funksiya ilə heşləyir — Argon2, bcrypt, scrypt və ya PBKDF2. Duz eyni parolların eyni heşə çevrilməsinə və hazır cədvəllərlə hücuma, yavaşlıq isə milyardlarla sürətli yoxlamaya mane olur. Rəqəmsal imza isə belə işləyir: göndərən mesajın heşini öz gizli açarı ilə imzalayır, hər kəs onu göndərənin açıq açarı ilə yoxlayır. Açıq açarın kimə məxsus olduğunu sertifikat — etibarlı mərkəzin (CA) imzaladığı sənəd təsdiqləyir.
Hücumlar və müdafiə
| Hücum | Mahiyyəti | Müdafiə |
|---|---|---|
| Fişinq | saxta sayt və ya məktub parolu ələ keçirir | ikifaktorlu autentifikasiya, ünvanı yoxlamaq, passkey |
| SQL injeksiyası | giriş mətni sorğunun bir hissəsinə çevrilir | parametrli sorğular, ORM |
| XSS | başqasının səhifəsinə skript yeridilir | çıxışın ekranlaşdırılması, Content-Security-Policy |
| Ortadakı adam (MITM) | trafik gizlicə oxunur və ya dəyişdirilir | TLS, sertifikatların yoxlanması |
| Parol seçmə | kor-koranə və lüğət hücumları | uzun təsadüfi parollar, cəhdlərin məhdudlaşdırılması, duzlu yavaş heş |
| Fidyə proqramı | faylları şifrələyib pul tələb edir | oflayn ehtiyat nüsxələr, yeniləmələr, minimal hüquqlar |
-- 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';▸ Gözlənilən nəticə
leaked_rows 12
OR '1'='1' şərti həmişə doğru olduğu üçün 12 tələbənin hamısı sızır. Parametrli sorğuda (WHERE email = ?) eyni giriş sadəcə mətn kimi müqayisə olunur və 0 sətir qaytarır.Əsas fikirlər
- Simmetrik şifrələmə (AES) sürətlidir, amma açar paylama problemi var: n nəfərə n(n − 1)/2 açar lazımdır.
- Diffie–Hellman ortaq açarı şəbəkədə göndərmədən yaradır: s = gᵃᵇ mod p.
- RSA: n = pq, ed ≡ 1 (mod φ), c = mᵉ mod n, m = cᵈ mod n; imza s = mᵈ, yoxlama sᵉ = m.
- Heş birtərəflidir və toqquşmaya davamlıdır; parollar duz və yavaş heşlə (Argon2, bcrypt) saxlanır.
- Parametrli sorğular SQL injeksiyasını, TLS isə «ortadakı adam» hücumunu dayandırır; kriptoqrafiyanı özün yazma.
Özünü yoxla
10 sual. Hər düzgün cavab XP qazandırır.