Diffie-Hellman
sistemul se bazează pe ideea că doi interlocutori pot genera împreună o cheie partajată fără un intrus, care ascultă comunicațiile, fiind capabil să o obțină.
două numere publice sunt alese pentru aceasta și, fiecare interlocutor, un număr secret. Folosind o formulă matematică, care include exponențierea, fiecare interlocutor face o serie de operațiuni cu cele două numere publice și numărul lor secret. Apoi interlocutorii schimbă rezultatele în mod public. În teorie, inversarea acestei funcții este la fel de dificilă ca și calcularea unui logaritm discret (un sextilion ori mai scump decât exponențierea folosită pentru transformarea numerelor). De aceea se spune că acest număr este rezultatul aplicării unei funcții unidirecționale numărului secret.
apoi ambii interlocutori folosesc separat o formulă matematică care combină cele două numere transformate cu numărul lor secret și, în final, cei doi ajung la același număr de rezultat, care va fi cheia partajată.
descriere Detaliatămodificare
pentru două părți Alice și Bob, care încearcă să stabilească o cheie secretă, și un adversar Mallory, versiunea de bază este după cum urmează:
- setează un văr p {\displaystyle p}
și un generator g z p z z p {\displaystyle G\in \mathbf {Z} _{p}^{*}}
(). Acestea sunt publice, cunoscute nu numai părților Alice și Bob, ci și adversarului Mallory.
- Alice alege un z p-1 de la zero {\displaystyle a \ in \ mathbf {Z} _ {p-1}}
la întâmplare, calculează A = g un mod p {\displaystyle A = G^{a}\; {\bmod {\;}} p}
, și trimite un {\displaystyle A}
Bob
- Bob alege b z p-1 {\displaystyle b \ in \ mathbf {Z} _ {p-1}}
aleatoare calculează b = g b mod p {\displaystyle B=g^{b}\;{\bmod {\;}}p}
, și trimite b {\displaystyle B}
Alice
rețineți că atât a, cât și B pot fi calculate cu valoarea k = g b mod p {\displaystyle k=g^{A\cdot b}\;{\bmod {\;}}p}
. En efecto, lo podemos demostrar usando las propiedades del grupo Z p ∗ {\displaystyle \mathbf {Z} _{p}^{*}}
: Para Alice: B a mod p = ( g b mod p ) a mod p = ( ( g b mod p ) ( g b mod p ) ⋯ ( g b mod p ) ⏞ a ) mod p = g b ⋅ a mod p = g a ⋅ b mod p = K {\displaystyle B^{a}\;\;{\bmod {\;}}\;p=(g^{b}\;{\bmod {\;}}p)^{a}\;{\bmod {\;}}p=(\overbrace {(g^{b}\;{\bmod {\;}}p)(g^{b}\;{\bmod {\;}}p)\cdots (g^{b}\;{\bmod {\;}}p)} ^{a})\;{\bmod {\;}}p=g^{b\cdot a}\;{\bmod {\;}}p=g^{a\cdot b}\;{\bmod {\;}}p=K}
Para Bob: A b mod p = ( g a mod p ) b mod p = ( ( g a mod p ) ( g a mod p ) ⋯ ( g a mod p ) ⏞ b ) mod p = g a ⋅ b mod p = K {\displaystyle A^{b}\;{\bmod {\;}}p=(g^{a}\;{\bmod {\;}}p)^{b}\;{\bmod {\;}}p=(\overbrace {(g^{a}\;{\bmod {\;}}p)(g^{a}\;{\bmod {\;}}p)\cdots (g^{a}\;{\bmod {\;}}p)} ^{b})\;{\bmod {\;}}p=g^{a\cdot b}\;{\bmod {\;}}p=K}
deoarece ambele părți pot calcula un k {\displaystyle k}
, atunci îl putem folosi ca o cheie partajată.
attacksEdit
attacksEdit pasiv
un adversar Mallory, care posedă p, g, A și B, ar putea calcula secretul comun dacă ar avea și una dintre valorile private (a sau b). Ia un a sau b de la A sau B funcția de mers înapoi ( a=l O g d i s c p(a ) {\displaystyle a = \operatorname {log\;disc} _{p} (a)}
și b=l O g d i s c p ( b) {\displaystyle b = \operatorname {log\; disc} _{p}(B)}
) este problema logaritmului discret în z p {\displaystyle \ mathbf {Z} _ {p}^{*}}
, o problemă care se crede greu de rezolvat computațional ori de câte ori p este un număr prim mai mare de 200 sau mai multe cifre, și care nu îndeplinesc anumite caracteristici debilitante.
atacuri Activeedit
protocolul este sensibil la atacurile active ale omului în mijloc. Dacă comunicarea este interceptată de o terță parte, aceasta poate fi transmisă ca expeditor cu care se confruntă destinatarul și invers, deoarece nu este disponibil niciun mecanism pentru a valida identitatea participanților la comunicare. Astfel,” omul din mijloc ” ar putea conveni asupra unei chei cu fiecare participant și să transmită datele între ele, ascultând conversația în ambele direcții. Odată stabilită comunicarea simetrică, atacatorul trebuie să continue interceptarea și modificarea traficului în mijloc, astfel încât să nu observe. Rețineți că pentru ca atacul să fie operațional, atacatorul trebuie să cunoască metoda de criptare simetrică care va fi utilizată. Bazându-se pe ascunderea algoritmului de criptare simetrică nu respectă principiile Kerckhoffs (eficacitatea sistemului nu ar trebui să depindă de designul său rămas secret).
pentru a evita acest tip de atac, se utilizează de obicei una sau mai multe dintre următoarele tehnici:
- Controlul Timpului.
- autentificarea prealabilă a părților. De exemplu, utilizați în autentificarea Protocolului de strat subiacent. Am putea stabili mai întâi o conexiune TLS și să aplicăm algoritmul Diffie-Hellman pe acel strat.
- autentificarea conținutului. De exemplu, am putea folosi MAC peste conținutul mesajelor.
- criptarea cheilor publice cu un algoritm de chei publice (asimetric), evitând problema omului în mijloc și, la rândul său, verificând dacă cheia publică este alta decât 0 și 1.
- folosind o terță parte (Carol) cu care Alice sau Bob întrețin un canal securizat. Această terță parte poate detecta omul din mijloc
dacă Alice sau Bob sunt ascultați/modificați, pur și simplu provocându-i pe amândoi la un test care implică în testul menționat cheia publică a otro.Si Mallory denaturează comunicarea Alice-Bob și, de asemenea, Alice-Carol, el nu poate denatura canalul securizat Bob-Carol și va fi detectat.Și dacă el denaturează Alice-Bob și Bob-Carol, el nu poate denatura Alice-Carol (prin definiție trebuie să existe un canal sigur între două dintre cele trei, chiar dacă celelalte două canale sunt denaturate de Mallory). Aceasta înseamnă că metoda Diffie-Hellman poate crea rețele multi-nod 100% sigure, pornind de la doar două noduri securizate anterior. Această metodă este, de asemenea, utilizată pentru a testa canalele suspectate a fi nesigure.
EjemploEditar
|
|
|
exemplu cu implementarea criptăriiedit
necesitatea acestui exemplu este: Bob trebuie să trimită un text cifrat către Alice, dar fără a partaja cheia de criptare. Cum o face?
- Alice alege un număr secret a=6, numărul prim p=23 și baza g=5. Apoi trimite cheia publică a lui Bob Alice( ga mod p), p și g:
- 56 mod 23 = 8.
- 23
- 5
- Bob alege un număr secret b = 15, apoi Bob calculează cheia comună de criptare (ga mod p)b mod p
- 815 mod 23 = 2.
- Bob criptează, cu un cifru simetric, cum ar fi AES, textul clar folosind cheia de criptare generată.
- text criptat = cifru simetric (Plaintext, 2)
- Bob îi trimite lui Alice textul criptat și cheia publică a lui Bob (gb mod p)
- 515 mod 23 = 19.
- text criptat
- Alice calculează (gb mod p) La mod p
- 196 mod 23 = 2.
- Alice folosește acea cheie de criptare generată pentru a decripta datele trimise de Bob
- Cleartext = Decryptor simetric (text criptat, 2 )
valori mult mai mari ale a, b și p ar fi necesare pentru a face acest exemplu sigur. Deoarece este foarte simplu să testați toate valorile posibile ale gab mod 23 (vor exista, cel mult, 22 de valori, chiar dacă a și b sunt numere mari).
evident, nevoia lui Alice de a trimite lui Bob informațiile criptate este, de asemenea, acoperită de implementare.
Leave a Reply