Məzmuna keç
Educora
Universitet25 dəq59 / 59

Kriptoqrafiya və informasiya təhlükəsizliyi

Simmetrik və asimmetrik şifrələməni, heş funksiyalarını, rəqəmsal imzaları, kiçik ədədlərlə RSA və Diffie–Hellman nümunələrini, geniş yayılmış hücumları və onlardan müdafiəni öyrən.

Özünü yoxla
Bu dərsdə öyrənəcəksən
  • 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ə

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

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

Nümunə 1: Diffie–Hellman kiçik ədədlərlə

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ər
Açar fəndi: 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, 2⁴⁵ = (2¹¹)⁴ · 2 ≡ 2 ✓.
Hər ikisi eyni açarı aldı, amma 2 ədədi şəbəkədə heç vaxt görünmədi.
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 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.

Nümunə 2: oyuncaq RSA

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ər
n = 3 · 11 = 33, φ = 2 · 10 = 20. ƏBOB(3, 20) = 1 ✓.
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.
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))
▸ 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
Python-da 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.

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')
▸ 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
Bir hərfin böyük-kiçik olması və ya bir «!» heşi tamamilə dəyişir (burada 64 onaltılıq rəqəmin ilk 16-sı göstərilib). Aşağıda saniyədə 10¹⁰ yoxlama edən hücumçu üçün hesab: 8 kiçik hərfli parol 21 saniyəyə, 94 simvoldan 12 təsadüfi simvollu parol isə ≈ 4,76 · 10¹³ saniyəyə — təxminən 1,5 milyon ilə tapılır.
H = L · log₂ N
burada:
  • 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ücumMahiyyətiMüdafiə
Fişinqsaxta sayt və ya məktub parolu ələ keçiririkifaktorlu autentifikasiya, ünvanı yoxlamaq, passkey
SQL injeksiyasıgiriş mətni sorğunun bir hissəsinə çevrilirparametrli sorğular, ORM
XSSbaş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şdirilirTLS, 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 ediroflayn ehtiyat nüsxələr, yeniləmələr, minimal hüquqlar
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';
▸ Gözlənilən nəticə
leaked_rows
12
SQL injeksiyası nümunə bazada: dırnaq sorğunu «qırır» və 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.

1 / 10
RSA-da p = 5, q = 11, e = 3. Gizli açar d nəyə bərabərdir?