- Obiective ale unității
- Antecedentele
- Definiții
- Timeline
- Kinds of Ciphers
- Criptografie cu cheie secretă
- Caesar Cipher
- Substituție monoalfabetică
- Substituție omofonică
- Simplu Vigenère
- Vigenère cu cheie automată
- Cifre moderne cu cheie automată
- One Time Pad
- Playfair
- Four-square
- Simple Block Transposition
- Transpunere pe coloane
- Rail Fence
- Combinarea substituției și transpoziției
- Bifid
- Trifid
- Enigma
- Metode criptografice moderne
- DES
- IDEA
- RC4
- RC6
- Blowfish
- Twofish
- AES
- Schimb de chei
- Criptografie cu cheie publică
- Cripto-sistemul RSA
- Hashing criptografic
- Codurile de autentificare a mesajelor
- Digital Signatures
- RSA pentru semnături digitale
- DSA
- Criptanaliza
- Exemple de programare
- Exemple de JavaScript
- Exemple Python
- Exemple Java
Obiective ale unității
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.
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.
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.
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.
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.
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)$.
THEN ATTACK FROM THE EAST
⇒ TH EN AT XT AC KF RO MT HE XE AS TX
⇒ UT HW GO FO DB TV YK ZK NH NA DX OF
⇒ UTHWGOFODBTVYKZKNHNADXOF
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
THEN ATTACK FROM THE EAST
⇒ TH EN AT TA CK FR OM TH EE AS TX
⇒ NI 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)$.
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$.
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
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
.