Criptologie

author
20 minutes, 19 seconds Read
Criptologie? Sună amuzant.

Obiective ale unității

Să înțelegem, destul de bine, ce înseamnă criptografia și criptanaliza și, mai ales, să știm ce poate și ce nu poate garanta.

Antecedentele

Alice și Bob pot fi oameni, dar și clienți și servere, calculatoare de tip peer, depozite de date, routere de rețea, etc. Mallory poate să falsifice unul dintre participanți, să adauge, să modifice sau să șteargă mesaje reale, să deturneze conexiunea, să facă un refuz de serviciu, să injecteze programe malware etc.

Obiective:

  • Confidențialitate: Recuperarea a $m$ ar trebui să o coste pe Eva mai mult decât valorează $m$.
  • Autentificare: Bob ar trebui să fie capabil să verifice că Alice a fost cea care a trimis $m$.
  • Integritate: Bob ar trebui să fie capabil să verifice că $m$ nu a fost falsificat.
  • Nerepudiere: Alice nu ar trebui să poată nega că a trimis $m$.

Cele mai bune criptosisteme presupun că Eve și Mallory cunosc $E$, $D$, $c$ și, dacă $k_e \neq k_d$, atunci și $k_e$. Cele mai multe criptosisteme nu se bazează pe faptul că algoritmii lor sunt ținuți secreți, deoarece:

  • Dacă algoritmul tău secret este compromis (cineva ar putea părăsi grupul tău), trebuie să îl schimbi, iar acest lucru este mult mai greu decât simpla schimbare a unei chei!
  • Algoritmii publici pot fi supuși la mii de experți care caută defecte, astfel încât ai un anumit grad de încredere în cei care rezistă la control.

Lectură suplimentară:Securitatea prin obscuritate,Principiul lui Kerchoff și această discuție.

Studiul criptologiei include proiectarea diferitelor cifre, metode de criptanaliză (atacuri), schimbul de chei, autentificarea cheilor, hașurarea criptografică, semnarea digitală și aspecte sociale (juridice, politice etc.). A se vedea pagina Wikipedia’s topics in cryptography.

NU FACEȚI ACESTE LUCRURI PE CONT PROPRIU ÎN APLICAȚII REALE

Sigur, este bine să vă jucați acasă, dar nu încercați NICIODATĂ să vă dezvoltați propria criptografie pentru ceva real. Lăsați asta pe seama profesioniștilor. Dacă devii tu însuți un profesionist, atunci, mmmmm, bine.
Acesta a fost un important anunț de interes public.

Definiții

Cuvinte de știut:

Criptografie Arta și știința de a realiza cifrări. Criptanaliză Arta și știința spargerii cifrului, adică extragerea lui $m$ având în vedere $c$, $E$, $D$ și, eventual, $k_e$. Criptologie Studiul criptografiei și al criptanalizei.

Exercițiu: Aflați informații despre steganografie. Prin ce se deosebește de criptografie?

Criptosistem O anumită suită de algoritmi și protocoale pentru criptare, decriptare și generare de chei. Exemple: Criptosistemul Cramer-Shoup, criptosistemul Rabin, criptosistemul Benaloh, criptosistemul RSA. Sistem criptografic Orice sistem care utilizează criptografia. Cifru Un algoritm utilizat într-un criptosistem.

Exercițiu: Prin ce se deosebește un „cod” de un „cifru”? Sunt codurile mai sigure decât cifrurile? De ce nu sunt folosite la fel de des?

Confuzie Proprietatea de a avea o relație între textul în clar, textul cifrat și cheie atât de complicată încât să fie inutilă pentru criptanalist. Difuzarea Proprietatea de a avea modele statistice din textul în clar răspândite pe scară largă în textul cifrat.

Timeline

Dacă vă place istoria….

  • Articolul Wikipedia’s History of Cryptography
  • Wikipedia’s Timeline
  • Carl Ellison’s Timeline

Kinds of Ciphers

Iată câteva categorii utile de cifruri. Rețineți că un anumit cifru poate aparține la mai multe dintre aceste categorii.

  • Clasic: O cifrare suficient de ușoară pentru a fi realizată manual, de obicei bazată pe caractere. Se mai numește și manual.
  • Modern: Cam orice cifru care nu este clasic.
  • Substituție: Fiecare caracter din textul în clar este înlocuit cu unul sau mai multe caractere pentru a obține textul cifrat.
  • Transpunere: Caracterele din textul în clar sunt rearanjate pentru a forma textul cifrat.
  • Monoalfabetic: Un cifru de substituție în care un caracter din textul în clar este întotdeauna înlocuit cu același caracter.
  • Polialfabetic: Un cifru de substituție care utilizează, în esență, mai multe corespondențe de substituție monoalfabetice.
  • Omofonic: O substituție în care un caracter poate fi pus în corespondență cu unul dintr-un set de caractere.
  • Poligrafic: O substituție de blocuri de caractere pentru blocuri de caractere.
  • Periodică: Un cifru polialfabetic în care schema de înlocuire se repetă.
  • Neperiodică: Se explică de la sine dacă înțelegeți periodică.
  • Bloc: Criptarea are loc nu pe caractere, ci pe blocuri de caractere.
  • Flux: Un cifru care operează pe un flux de date de lungime necunoscută, de obicei încorporând feedback.
  • Cheie secretă: Un cifru în care $k_e$ și $k_d$ sunt identice sau pot fi derivate în mod trivial unul din celălalt; necesită ca părțile să se întâlnească în secret pentru a schimba cheile pe care le vor folosi. Se mai numește și simetric.
  • Cheie publică: O schemă în care cheia de criptare a fiecăruia este cunoscută public, dar cheia de decriptare a fiecăruia este ținută secretă. Se mai numește și asimetrică.

Criptografie cu cheie secretă

Criptografiile cu cheie secretă (cunoscută și ca cheie simetrică) sunt mult mai rapide decât cele cu cheie publică, dar gestionarea cheilor poate fi o problemă uriașă.

  • Dacă $n$ persoane dintr-un grup trebuie să comunice,acestea au nevoie de $\frac{n(n-1)}{2}$ chei.
  • Celele trebuie distribuite în siguranță (în secret).
  • Celele trebuie păstrate în siguranță.
  • Celele trebuie schimbate frecvent, ceea ce alimentează durerea de cap a distribuției.

NOTĂ

În exemplele bazate pe caractere de mai jos, vom presupune (fără nicio pierdere de generalitate) un alfabet cu 26 de simboluri (A..Z).

Caesar Cipher

Un cifru complet patetic și nesigur după standardele moderne. Cheia de criptare $k_e$ este un număr întreg mic și $k_d = k_e$. Pentru criptare, se adaugă $k_e$ la fiecare caracter al textului în clar; pentru decriptare, se scade.

Exemplu: Pentru k=5, ATTACKATDAWN devine FYYFHPFYIFBS

Trivial de spart: trebuie doar să ghiciți $k_e$.

Substituție monoalfabetică

În loc să adăugați pur și simplu un decalaj fix la fiecare caracter, puteți precalcula o tabelă de substituție prin generarea unei permutări aleatorii a alfabetului dumneavoastră. De exemplu:

 ABCDEFGHIJKLMNOPQRSTUVWXYZ MQHPSVJYCURFTBILAKWNGZDOEX

Acum ATTACKATDAWN este acum MNNMHRMNPMDB.

Nu puteți sparge acest lucru ghicind cheia (există $n!$ chei posibile), dar analiza de frecvență poate sparge orice cifru de substituție monoalfabetică, cu condiția ca mesajul să fie suficient de lung.

Pentru tehnicile a căror cheie este o permutare, o modalitate de a face cheia mai ușor de reținut este de a alege o frază, așezați literele sale unice, apoi completați literele lipsă în ordine. De exemplu, PREMATURE OPTIMIZATION IS THE ROOT OF ALL EVIL produce această cartografiere de substituție:

 PREMATUOIZNSHFLVBCDGJKQWXY

Substituție omofonică

Care literă din textul în clar se asociază cu unul sau mai multe simboluri din textul cifrat. Numărul de ținte ar trebui să fie proporțional cu frecvența sa (pentru a învinge analiza de frecvență). Exemplu:

 A 12 15 36 50 56 70 81 95 B 51 84 C 16 44 65 D 04 06 48 82 E 01 17 19 34 47 49 58 60 67 77 85 90 F 13 27 G 09 28 H 26 42 53 59 68 71 I 35 73 76 86 91 96 J 18 K 07 L 29 40 54 87 M 25 30 N 21 61 62 69 74 94 O 02 03 08 10 57 75 93 P 41 98 Q 97 R 32 38 43 45 80 83 S 14 22 39 79 89 99 T 00 20 23 33 46 52 72 78 88 U 11 64 66 V 37 W 63 92 X 31 Y 24 55 Z 05

Pentru criptare, se alege la întâmplare dintre posibilități. Exemplu, o criptare posibilă a lui ATTACKATDAWN este

 56 78 20 95 65 07 12 72 06 50 92 61

Simplu Vigenère

Cifrul cunoscut sub numele de cifrul Vigenère cu deplasare simplă nu a fost inventat deloc de Vigenère… se pare că a fost descris pentru prima dată de Giovan Battista Bellaso. Cheia este un șir de caractere pe care îl adăugați la textul în clar prin adiție modulară, ca în acest exemplu (A=0, B=1, C=2, …, Z=25):

 Plaintext: TAKEACOPYOFYOURPOLICYTONORMAWILCOXONTHETHIRDFLOOR Key: QUARKQUARKQUARKQUARKQUARKQUARKQUARKQUARKQUARKQUAR Ciphertext: JUKVKSIPPYVSOLBFILZMONOEYHGANSBWOOYDNHVDXCRUPBIOI

Pentru a genera manual textul cifrat se poate folosi o roată de cod sau o tabula recta.

Acest sistem nu este sigur deoarece cheia se repetă. Dacă lungimea cheii poate fi determinată, criptanalistul poate face mai multe analize de frecvență (una pentru fiecare valoare de deplasare din cheie). Metodele de determinare a lungimii cheii sunt metoda Kaisiski și testul Friedman.

Pentru datele binare (adică o secvență de biți) adunarea modulară în baza 2 este doar un simplu xor. Exemplu:

 Plaintext: 0110000101010000111101001010101010010000001111101 Key: 0000011100000111000001110000011100000111000001110 Ciphertext: 0110011001010111111100111010110110010111001110011

Vigenère cu cheie automată

Vigenère a creat de fapt un cifru cu cheie automată care este mai puternic deoarece cheia nu se repetă niciodată. În schimb, „cheia” este formată din fraza-cheie urmată de textul în clar, astfel:

 Plaintext: TAKEACOPYOFYOURPOLICYTONORMAWILCOXONTHETHIRDFLOOR Key: QUARKTAKEACOPYOFYOURPOLICYTONORMAWILCOXONTHETHIRD Ciphertext: JUKVKVOZCOHMDSFUMZCTNHZVQPFOJWCOOTWYVVBHUBYHYSWFU

Acesta a folosit textul în clar ca parte a cheii. Ați putea folosi și textul cifrat. Vedeți cum?

Cifre moderne cu cheie automată

Încă mai puteți sparge criptele Vigenère cu cheie automată prin analiză lingvistică, deoarece cheia conține text și, prin urmare, este probabil să aibă litere cu frecvență ridicată. Cifrele autokey moderne generează valorile de schimbare cu un generator de numere aleatoare. Cheia alimentează generatorul.

Exercițiu: Implementați un cifru cu cheie automată în limbajul de programare ales de dumneavoastră.

One Time Pad

Dacă cheia:

  • este la fel de lungă sau mai lungă decât mesajul codificat
  • este generată cu adevărat la întâmplare
  • este folosită o singură dată și numai o singură dată

Atunci aveți un cifru cu siguranță dovedită numit one time pad. Algoritmul dvs. propriu-zis poate folosi substituția polialfabetică sau chiar simpla xorare a mesajului cu cheia, atâta timp cât îndepliniți cele trei criterii de mai sus.

Numărul unic nu poate fi niciodată spart. Este o schemă de criptare perfectă, din punct de vedere matematic, oricum.

Exercițiu: Atunci, de ce nu sunt utilizate în mod obișnuit plăcuțele cu o singură dată, având în vedere că sunt cele mai sigure coduri posibile?

Playfair

Este un exemplu de cifru de substituție poligrafic.Înlocuiește perechi de caractere. Cheia este o permutare a lui {A..I,K..Z},de exemplu:

 Z C B M L G D A Q E T U O K H F S X V N P I Y R W

Pentru a cripta, scrieți textul în clar (fără spații sau punctuație), introducând un X între literele duble și la sfârșit, dacă este necesar, pentru ca textul să aibă o lungime egală.Apoi, pentru fiecare pereche de litere:

  • Să fie $(a,b)$ rândul și coloana primului caracterși $(c,d)$ rândul și coloana celui de-al doilea.
  • Dacă $a \neq c$ și $b \neq d$ atunci returnează $(a,d)(b,c)$.
  • Dacă $a = c$ atunci se returnează $(a,(b+1) \bmod 5)(c,(d+1) \bmod 5)$.
  • Dacă $b = d$ atunci se returnează $((a+1) \bmod 5,b)((c+1) \bmod 5,d)$.
Exemplu: THEN ATTACK FROM THE EASTTH EN AT XT AC KF RO MT HE XE AS TXUT HW GO FO DB TV YK ZK NH NA DX OFUTHWGOFODBTVYKZKNHNADXOF

Decriptarea execută regulile în sens invers. Cifrarea Playfair este destul de nesigură.

Four-square

Criptează digrame ca și Playfair, dar puțin mai puternic, deoarece permite litere duble și nu produce digrame de cifru inversate pentru digrame de text cifrat inversate. Exemplu

 a b c d e G I V E M f g h i k L B R T Y l m n o p O D A H C q r s t u F K N P Q v w x y z S U W X Z P R E M A a b c d e T U O I Z f g h i k N S H F L l m n o p V B C D G q r s t u K Q W X Y v w x y z
Exemplu: THEN ATTACK FROM THE EASTTH EN AT TA CK FR OM TH EE AS TXNI VL EV FM MO BV DF NI MA VV NX

Ok, deci puțin mai puternic decât Playfair, dar ce dacă? Computerele pot sparge aceste lucruri în câteva secunde, sau poate minute (având în vedere suficient text cifrat).

Simple Block Transposition

Cel mai simplu cifru de transpoziție împarte mesajul în blocuri de dimensiune n, apoi amestecă fiecare bloc în funcție de o permutare a $(1..n)$.

Exemplu: Pentru cheia $(4,1,6,3,2,5)$ mesajul GETTHATHEALTHINSPECTOR devine TGATEHATTEHLSHENIPRCOT.

Transpunere pe coloane

Scrieți mesajul rând cu rând într-o grilă, apoi citiți-l pe coloane. Total nesigur. Cheia este doar numărul de rânduri. Ghiciți-o.

Rail Fence

Rail Fence nu este mai bun decât ultimul, doar mai amuzant. Cheia este numărul de șine pe care scrieți textul în clar în sus și în jos, generând textul cifrat prin citirea câte unei șine la un moment dat.

Exemplu: Pentru a codifica "fill out and file a WS2475 form" pe 4 șine:

 f t l 4 m i u a i e 2 7 r l o n f a s 5 o l d w f

se citește apoi textul cifrat "ftl4miuaie27rlonfas5oldwf". Acest lucru este trivial de spart. Trebuie doar să ghiciți $k$.

Combinarea substituției și transpoziției

Transpoziția singură este foarte slabă; substituția este slabă; combinarea lor este mai bună. Puteți amesteca o mulțime de cifre de substituție clasice cu diverse transpoziții sau puteți folosi unele cifre de combinație speciale, cum ar fi bifid. De asemenea, majoritatea mașinilor rotorice celebre și a cifrelor moderne folosesc această combinație; de fapt, ele aplică aceste transformări de mai multe ori.

Bifid

Acesta înlocuiește literele cu coordonatele lor într-o grilă și face o transpoziție columnară pe coordonate. Exemplu:

 Z C B M L G D A Q E T U O K H F S X V N P I Y R W

Scrieți coordonatele (rând, coloană) sub fiecare literă din textul în clar (de ex, „A” se află la rândul 1, coloana 2; „T” se află la rândul 2, coloana 0, etc.):

 ATTACKATDAWN 122102121143 200213201244

Apoi se citește pe rânduri, se grupează câte două și se caută literele din textul cifrat:

 122102121143200213201244 A U B A D R T B Q T A W

Trifid

Ca Bifid, dar pe un cub. Exemplu:

 Z C B M L F V N P G D A Q E X I R W T U O K H S Y . J

Pentru a cripta, scrieți mai întâi coordonatele:

 ATTACKATDAWN 000001000022 122102121110 200210201221
 000001000022122102121110200210201221 Z C Z O S F H Q V I N .

Enigma

Enigma a fost faimoasa mașină germană cu rotor din al doilea război mondial (de fapt, o familie de mașini). majoritatea versiunilor implementau un cifru de substituție polialfabetică cu o perioadă de 16900 plus o placă de conectare pentru bruiaj (transpoziție). Cheia era formată din ordinea rotoarelor, poziția de pornire a fiecărei rotoare, setările inelelor și setările plugboard-ului (aproximativ 1,6 × 1020 posibilități). Exista o nouă cheie în fiecare zi (mai mult sau mai puțin), prepublicată în cărțile de coduri.

Alianții au reușit să o spargă datorită unor slăbiciuni în concepția sa…

  • Nici o literă nu se putea cripta singură
  • Auto-reciprocitatea însemna că existau mai puține posibilități de configurare a codului de bruiaj

…dar, mai important, multe slăbiciuni în modul în care a fost folosit…

  • Era foarte ușor să găsești culisele. Cele mai multe mesaje începeau cu un buletin meteo.
  • La început, cheile mesajelor apăreau de două ori la rând.

…și prin obținerea de caiete de coduri de pe navele capturate.

Puteți citi despre cum a fost spartă Enigma de la NSA,și de laWikipedia.

Metode criptografice moderne

Acum că avem teoria informației a lui Shannon, calculatoare foarte puternice și secole de teorie și practică în spate, majoritatea tehnicilor moderne:

  • operă pe șiruri de biți, nu pe șiruri de caractere
  • au grijă să mascheze complet modelele și redundanțele din textul clar
  • folosesc chei aleatorii (care pot fi, de asemenea, reutilizate)
  • se asigură că modificări foarte mici în textul clar afectează o mare parte din textul cifrat (și invers). Acest lucru se numește efectul de avalanșă.

În plus, este bine dacă cifrarea este:

  • eficientă
  • tolerantă la erori

Majoritatea cifrelor sunt fie cifre în bloc, fie cifre de flux. Cifrele bloc necesită padding și pot funcționa în diferite moduri (vezi cartea lui Schnier sau articolul din Wikipedia.)

  • ECB – Electronic Codebook
  • CBC – Cipher Block Chaining
  • CFB – Cipher Feedback
  • OFB – Output Feedback
  • CBC – Cipher Block Chaining
  • CFB – Cipher Feedback
  • .

  • CTR – Counter
  • BC – Cipher Block Chaining
  • PCBC – Propagating Cipher Block Chaining
  • CBCC – Cipher Block Chaining with Checksum
  • CBCC – Cipher Block Chaining with Checksum

DES

În Wikipedia

IDEA

În Wikipedia

RC4

În Wikipedia

RC6

În Wikipedia

.

Blowfish

În Wikipedia

Twofish

În Wikipedia

AES

În Wikipedia

AES este noul standard, înlocuind DES. A fost câștigătorul concursului (în 2001), unde a fost prezentat sub numele de Rijndael, învingându-i peRC6, Serpent, MARS și Twofish.

Schimb de chei

Diffie și Hellman (câștigătorii Premiului Turing 2015) și prietenul lorMerkle au arătat în 1976 că este posibil ca două persoane să schimbe o cheie secretă fără a fi nevoie să se întâlnească efectiv în secret:

  • Alice alege un prim $n$ și îl trimite în clar lui Bob
  • Alice alege un primitiveroot mod $n$ (cum se găsește),numit $g$, și îl trimite în clar lui Bob
  • Alice alege un număr întreg secret $a$, și îi trimite $g^a \bmod n$ în clar lui Bob
  • Bob alege un întreg secret $b$ și îi trimite $g^b \bmod n$ în clar lui Alice
  • Alice calculează ($g^b \bmod n)^a \bmod n$și Bob calculează ($g^a \bmod n)^b \bmod n$. Aceasta este cheia!(Este $g^{ab} \bmod n$)

Acest lucru este probabil sigur, cu condiția ca $n$ să fie foarte mare și $\frac{n-1}{2}$ să fie, de asemenea, prim, deoarece, deși Eve cunoaște $g$, $n$, $g^a \bmod n$ și $g^b \bmod n$, nu se cunoaște o modalitate eficientă de a obține $a$ sau $b$ din acestea.Aceasta este problema logaritmului discret, îți amintești?

Exemplu cu $n$ mic:

  • Alice alege $n=208799$ și $g=13$ și le trimite lui Bob
  • Alice alege $a=152335$ și Bob alege $b=98113$
  • Alice îi trimite lui Bob $13^{152335} \bmod 208799 = 73033$
  • Bob îi trimite lui Alice $13^{98133} \bmod 208799 = 147540$
  • Alice calculează $147540^{152335} \bmod 208799 = 8435$
  • Bob calculează $73033^{98133} \bmod 208799 = 8435$
  • Cheia secretă este $8435$.

Nu faceți acest lucru cu valori mici ale lui $n$.

În general, dacă nu obțineți un fel de certificare, nu încercați să securizați sisteme din lumea reală pe cont propriu. Dar, bineînțeles, deocamdată dați-i drumul și învățațialgoritmii și exersați codarea.

Criptografie cu cheie publică

Criptogramele cu cheie publică rezolvă coșmarul gestionării cheilor din criptarea cu cheie secretă, cu prețul vitezei. Într-un grup de $n$ persoane este nevoie doar de $n$ chei publice și $n$ chei private.

Cripto-sistemul RSA

Diffie-Hellman nu face criptare; doar schimbă o cheie.RSA poate cripta și decripta. Iată cum. Fiecare persoană

  • Generează două numere prime mari, $p$ și $q$.
  • Alege o valoare $e$ relativ primă față de $(p-1)(q-1)$.
  • Publică cheia sa publică $(N,e)$ unde $N = pq$.
  • Calculează $d$ = inversul modular al lui $e$ față de $(p-1)(q-1)$, păstrând-o secretă.
  • Distruge $p$ și $q$.

Acum verificați acest lucru:

  • Pentru ca Alice să trimită un mesaj $m$ lui Bob, ea trimite $c = m^e \bmod N$.
  • Bob decodifică acest lucru cu ușurință deoarece $m = c^d \bmod N$.
Exercițiu: Cercetați matematica din spatele RSA. De ce funcționează, în detaliu? Răspunsul dumneavoastră se va folosi de teoremele care stau la baza funcției totiențiale a lui Euler; asigurați-vă că arătați cum se reduce la $(p-1)(q-1)$ când $pq$ este prim, printre altele.
Exercițiu: Diffie-Hellman (DH) este uneori considerat o parte a criptografiei cu cheie publică, chiar dacă se ocupă cu schimbul de chei și nu este în sine un algoritm de criptare. Atunci, de ce o consideră unii oameni ca fiind cu cheie publică? (Răspunsul la această întrebare necesită unele cercetări.)

Un exemplu trivial:

AVERTISMENT!
Acest exemplu este doar pentru ilustrare. Nu implementați niciodată propriul algoritm criptografic. De asemenea, asigurați-vă că ați înțeles cât de îngrozitoare este criptografia cu cheie publică cu chei atât de mici. Cheile reale ar trebui să aibă mii de biți.

Să folosim o cheie de 16 biți (NU FACEȚI ASTA IRL). Generați două numere prime aleatoare pe 8 biți:

$p = 163\\q = 173$

Generați un număr prim pe 16 biți pentru exponentul de codare:

$e = 64013$

Acum:

$n = pq = 28199 \\d = \mathsf{modInverse}(e, (p-1)(q-1)) = 6797$

Să codificăm șirul ¿Dónde está ud.?. Iată-l în UTF-8:

c2 bf 44 c3 b3 6e 64 65 20 65 73 74 c3 a1 20 75 64 2e 3f

În zecimal:

194 191 68 195 179 110 100 101 32 101 115 116 195 161 32 117 100 46 63

Acum să aplicăm funcția de codificare la fiecare::

$194^{64013} \bmod 28199 = 15626$
$191^{64013} \bmod 28199 = 19945$
$68^{64013} \bmod 28199 = 27982$
$\vdots$
$63^{64013} \bmod 28199 = 18384$

Textul cifrat este:

15626 19445 27982 22746 2679 7739 16824 23107 9054 23107 8378 16412 22746 5566 9054 881 16824 17864 18384

Pentru a descifra:

>$15626^{6797} \bmod 28199 = 194$
$19445^{6797} \bmod 28199 = 191$
$27982^{6797} \bmod 28199 = 68$
$\vdots$
$16824^{6797} \bmod 28199 = 63$

Avem înapoi mesajul original!

Apropo
Din moment ce criptarea simetrică este mult mai rapidă, puteți genera mai întâi o cheie secretă și să o transmiteți pe o linie securizată prin criptografie cu cheie publică. Acum, toate comunicațiile viitoare pot folosi cheia secretă.

Hashing criptografic

Un hash, cunoscut și sub numele de amprentă digitală, sumă de control, sumar de mesaj este un model de biți (de obicei în jur de 160 de biți sau cam așa ceva), generat dintr-un mesaj de o funcție de criptografichash. Pentru ca hash-ul să fie securizat sau criptografic, trebuie să fie imposibil din punct de vedere computațional să

  • găsiți un mesaj care se hash la o anumită valoare (onewayness)
  • găsiți două mesaje care se hash la aceeași valoare (collision-resistance)

Matematic, o funcție hash criptografică $H$ produce un hash dintr-un mesaj, $H(m) = c$, astfel încât $m$ nu poate fi determinat în mod eficient din $c$, și nu se poate găsi în mod eficient $m_1 \neq m_2$ astfel încât $H(m_1) = H(m_2)$,

De obicei, schimbarea unui singur bit din mesaj va face ca digestul să arate complet și total diferit.

$ cat willThis is my will.I leave 1000 dollars to Aliceand everything else to Bob.Signed, Eve.$ md5sum willc18feb890752c9e680c99d1e909fd761 will$ sed "s/1/9/g" will > Will$ cat WillThis is my will.I leave 9000 dollars to Aliceand everything else to Bob.Signed, Eve.$ md5sum Will85570bc2d0458b1f98f484261dee7d4d Will

Un hash securizat oferă o modalitate de a determina dacă un mesaj a fost falsificat.

Vezi Ghidul ilustrat al hașurilor criptografice al lui Steve Friedl.

Codurile de autentificare a mesajelor

Celea sunt similare cu hașurile criptografice, cu excepția faptului că folosesc o cheie secretă, în timp ce hașurile folosesc doar mesajul în sine.

$MAC(m, k) = c$

Pentru mai multe informații:

  • MACs vs.MACs. Hashes la StackOverflow
  • Digital Signatures la Wikpedia
  • MACs la Wikipedia

Digital Signatures

Cum poate Bob să fie sigur că mesajul a venit de la Alice și nu de la altcineva?Prin semnarea lui Alice; iată cum. În practică, de obicei se semnează un hash, nu întregul mesaj.

RSA pentru semnături digitale

Pentru ca Alice să trimită un mesaj lui Bob,

  • Alice criptează m cu cheia ei privată
  • Alice criptează cu cheia publică a lui Bob
  • Bob decriptează cu cheia sa privată
  • Bob decriptează cu cheia publică a lui Alice

$m = A(B'(B(B(A'(m)))$

DSA

La Wikipedia

Criptanaliza

Acesta este un subiect vast și nu va fi abordat aici. În schimb, iată o listă de tehnici.

  • Analiză de frecvență
  • Atac în clar cunoscut
  • Atac în text cifrat cunoscut
  • Atac în clar ales
  • Atac în text cifrat ales
  • Atac în clar ales cheie de atac
  • Criptoanaliză liniară
  • Criptoanaliză diferențială
  • Furt
  • Mită
  • Șantaj
  • Șantaj
Exercițiu: Studiați singuri criptanaliza sau găsiți un curs online amuzant.

Exemple de programare

Heh, nu vă vom arăta cum să vă faceți singuri criptografia. Ne vom uita la unele biblioteci existente.

Transmiteți date printr-o rețea IP?
Utilizați TLS.
Continuați să citiți, totuși, dacă doriți să folosiți unele biblioteci criptografice distractive.

Exemple de JavaScript

Referință: Node crypto.

Exemple Python

Referință: Biblioteci criptografice Python -Python hashlib -Python secrets

Exemple Java

.

Similar Posts

Lasă un răspuns

Adresa ta de email nu va fi publicată.