2010-03-02 15 views
5

Diciamo che abbiamo Alice e Bob.Come funziona la crittografia asimmetrica a due vie?

Alice invia a Bob un messaggio che ha crittografato con la chiave pubblica di Bob. Bob è l'unica persona che può decodificarlo, usando la sua chiave privata. Ma come può essere certo che il messaggio provenga da Alice?

Supponiamo che risponda, crittografando il suo messaggio utilizzando la chiave pubblica di Alice. Solo Alice può decodificare il messaggio. Ma come può essere certa che sia stata inviata da Bob?

Alice avrebbe dovuto aggiungere qualche tipo di hash pubblico al suo messaggio così Bob può dire "Questo è sicuramente venuto da Alice?"

risposta

5

Bob ha anche la chiave pubblica di Alice e Alice ha firmato il messaggio con la sua chiave privata. Bob usa la chiave pubblica di Alice per verificare la firma.

Andare al contrario per Alice per assicurarsi che il messaggio provenisse da Bob.

Tutto quello che devi fare ora è assicurarti che Bob abbia la vera chiave pubblica di Alice e non uno iniettato da un uomo nel mezzo.

+0

Quindi è necessario verificare TUTTI i byte della chiave pubblica? C'è una parte specifica della chiave che puoi guardare per assicurarti che sia reale tra di voi? L'impronta digitale è sufficiente per combaciare? – tbarbe

+1

No, si utilizza la chiave pubblica per decrittografare l'hash del messaggio (la firma), quindi cancellare il messaggio come destinatario. Se gli hash corrispondono, allora sai che è stato inviato da Alice. http://en.wikipedia.org/wiki/Digital_signature – Nathan

+0

Ah sì ... md5 o SHA-1 - sì? Quindi, una volta che il certificato arriva alla destinazione, il modo per verificarlo è quello di confrontare md5 e SHA-1 .... i certs che ho - mostra entrambi questi ...e immagino che questo sia ciò che sto leggendo sul tema "paragonarli fuori dalla band" - cioè non farlo su un set insicuro? – tbarbe

-1

Poiché si presuppone che una chiave privata sia realmente "privata" --i.e., Alice e bob non lasciano le chiavi USB inserite nella loro macchina quando escono dal lavoro.

+0

Dove ho fatto questa ipotesi? – Amy

+0

"Tu" non l'hai fatto, intendevo il proverbiale "tu"; e sì, non si utilizza questo tipo di crittografia a meno che non esista un canale di fiducia tra Alice e Bob che l'autorità di certificazione è un'istanza indiretta di. Peh, non riesco a rimuovere il mio upvote alla tua domanda. –

+0

Non ho idea di cosa stai ricevendo. La domanda riguardava la verifica della fonte del messaggio. Rileggi l'ultima frase nella domanda e nota che la risposta non è stata risolta. Questo non ha nulla a che fare con il mantenere le chiavi al sicuro. La tua risposta al mio commento non ha risolto la domanda. Perché hai risposto? – Amy

9

Lo scenario che descrivi non fornisce effettivamente l'autenticità. Quindi sia Alice che Bob non possono essere sicuri che si stiano parlando. Lo scenario fornisce solo riservatezza e in quanto tale anche non segretezza.

Bob dovrebbe confermare manualmente con Alice che la chiave pubblica che pensa sia la chiave pubblica di Alice è davvero la sua (chiamandola e leggendola carica e confermando dalla sua voce che si tratta di Alice).

Questo problema viene in genere risolto con una terza parte attendibile (un'autorità di certificazione, ad esempio, come VeriSign) che emette certificati che attestano ad es. Alice è davvero il proprietario di questa particolare chiave pubblica. Questo è il modo in cui è risolto nei browser moderni e questo è il modo in cui funzionano tutte le sessioni SSL (con la tua banca di scelta). Un'autorità di certificazione firma il certificato dalla tua banca (affermando che la tua banca è effettivamente il proprietario della chiave pubblica contenuta nel certificato) e il tuo browser ha un certificato già integrato dall'autorità di certificazione (costruendo una catena di certificati che possono essere verificati).

Lo scenario che descrivi è vulnerabile a un cosiddetto attacco MITM (Man-in-the-middle) e non risolvibile puramente con crittografia a chiave pubblica.

1

Quello di cui si sta parlando assomiglia molto molto a un'altra implementazione di un Algoritmo di crittografia asimmetrico trovato nel framework .Net.

. Net utilizza due rami per la crittografia asimmetrica !!!

  1. RSA ** Papà Grand Mac utilizzato per tutti gli scopi asimmetrici.
  2. DSA ** più relativo all'utilizzo e alla creazione di firma digitale per verificare un autore.

Entrambi sono astratta

Entrambi sono molto simili tra loro su come funzionano e come uno sviluppatore li implementa ma sotto sotto ho letto che esistono due algoritmi molto diversi.

Si sta parlando l'opzione 2.

NET fornisce una classe chiamata DSACryptoServiceProvider che permette di contrassegnare i dati con un valore che viene comunemente indicato come firma.

Secondo un manuale scolastico ufficiale di MS, è più o meno come funziona.

>>> dati Hash Hash Alg >>> Valore >>>>>>>>> ASYMM' Alg >>>> Firma PVT.KEY mittente >>>

Qui di seguito mostra come Bob può controllare per vedere se Alice è davvero il mittente.

Dati >>> Hash Alg >>> Valore hash || Firma decifrati < < < PUB.KEY ASYMM' Alg < < < Firma < < < mittente ? ==?

Come si può vedere, Bob deve confrontare l'Hash generato e la Firma decrittografata per verificare che Alice sia il mittente. La classe DSACrypto 'ha 4 metodi che possono essere usati qui ma solo due sono efficaci dal punto di vista contestuale. A questo punto nel tempo, questo è tutto ciò che Bob può fare, se la sua chiave pubblica non è la chiave pubblica di Alice, in sostanza l'applicazione software dovrebbe impedire a Bob di continuare a procedere mentre Bob sta cercando di usare una chiave pubblica falsa quando cercando di comunicare con Alice. Questa è la relazione imposta e l'importanza sottolineata della chiave pubblica. La firma consente di verificare il proprietario delle chiavi pubbliche.

Ecco perché? ::

Se Bob ha la chiave pubblica di Alice, può utilizzare nuovamente lo stesso algoritmo per decrittografare i dati crittografati utilizzando i metodi .VerifyHash o VerifyData. Dovrebbe essere semplice ciò che fanno dato questo contesto. Questo è tutto fatto usando la chiave pubblica di Alice. Solo Alice può utilizzare i metodi SignHash e SignData poiché richiedono la chiave privata di Alice.

Come si può vedere sopra, un certo livello di funzionalità è incapsulato già nelle classi DSA e RSA CryptoServiceProvider. Si riduce a quanto bene li si implementa per verificare ogni volta che Alice è il mittente in quanto l'algoritmo DSA consente di certificare un mittente facendo corrispondere l'output generato. Una determinata firma e hash devono corrispondere, se lo fanno, in sostanza DSA ti ha concesso un certo livello di riservatezza tra Bob e Alice.

+0

Spero che abbia senso perché proviene da uno studente che sta tentando di superare l'esame 70-536. Come sopra è la seconda delle due risposte che ho postato qui sullo stack overflow relativo alla crittografia. – IbrarMumtaz

Problemi correlati