crittografia / decrittografia con più chiavi


110

È possibile crittografare i dati, in modo che possano essere decrittografati con diverse chiavi diverse?

Esempio:

Ho crittografato i dati con key1, ma voglio essere in grado di decrittografare con le chiavi 2, 3 e 4.

È possibile?

Risposte:


170

GnuPG esegue la crittografia multi-chiave di serie.

Il seguente comando crittograferà doc.txtutilizzando la chiave pubblica per Alice e la chiave pubblica per Bob. Alice può decrittografare utilizzando la sua chiave privata. Bob può anche decrittografare utilizzando la sua chiave privata.

gpg --encrypt --recipient alice@example.com \
    --recipient bob@example.com doc.txt

Questa funzione è descritta in dettaglio nella sezione della guida per l'utente intitolata " Crittografia e decrittografia di documenti "


Idem. Sarebbe bello sapere come farlo, ma non riesco a trovare una pagina di manuale nascosta.
MarkusQ

@ Mitch, ho pubblicato una risposta che potrebbe avere la nostra risposta! (Si prega di testare e lodare se è così / no - MOLTO apprezzato!)
pythonlarry

@ MarkusQ, vedi il mio link a Mitch, sopra. Prova / grazie se puoi! :-)
pythonlarry

Quindi questo si traduce in 1 file crittografato che può essere letto utilizzando una chiave privata, non 1 file per chiave?
user8675309

7
@ user8675309, Sì. I dati vengono crittografati da una chiave simmetrica comune. Solo la chiave simmetrica viene crittografata dalla chiave pubblica di ciascun destinatario. Non sta crittografando di nuovo tutti i dati per ciascun destinatario.
wisbucky

55

si è possibile

Sì, è possibile la crittografia per più destinatari. Inoltre sembra logico quando pensi che potresti voler leggere ciò che hai inviato a qualcuno e per farlo devi essere nell'elenco dei destinatari.

Riga di comando

Ecco come farlo tramite la gpgriga di comando (come descritto nella risposta di David Segonds ):

gpg --encrypt \
  --recipient alice@example.com \
  --recipient bob@example.com \
clear-message.txt

Client GUI

La tua GUI deve fornire un modo per crittografare per più persone

Meccanismo

C'è una domanda sulla sicurezza delle informazioni , dimensioni del file GPG con più destinatari? , che spiegano il meccanismo di crittografia :

GPG crittografa il file una volta con una chiave simmetrica, quindi inserisce un'intestazione che identifica la coppia di chiavi di destinazione e una versione crittografata della chiave simmetrica.

[...] Se crittografata per più destinatari, questa intestazione viene inserita più volte fornendo una versione crittografata in modo univoco della stessa chiave simmetrica per ciascun destinatario .


4
un ringraziamento speciale per le ultime due frasi: hanno reso tutto perfettamente chiaro ora!
radistao

31

I client GnuPG e PGP in generale di solito crittografano i dati effettivi con una chiave simmetrica chiamata "chiave di sessione". La chiave di sessione viene quindi crittografata con ciascuna "chiave del destinatario" (ovvero quelle specificate con -r / - destinatario). Questo a volte è indicato come cifrario ibrido . In questo momento, credo che GnuPG utilizzi per impostazione predefinita una chiave di sessione a 256 bit e AES per crittografare i dati in chiaro in quella chiave di sessione AES-256 e le chiavi del destinatario sono RSA / DSA / ECDSA / ecc. chiave asimmetrica in questo caso.

Uno dei motivi per farlo in questo modo è che gli algoritmi crittografici simmetrici come AES sono generalmente molto più veloci di quelli asimmetrici come RSA. GnuPG quindi deve solo crittografare ~ 256 bit (la chiave di sessione) con RSA e può usare AES per crittografare i dati (grandi quanto vuoi che siano!) Con quella chiave di sessione. Le macchine Intel hanno anche un'istruzione incorporata, AES-NI , per eseguire alcuni passaggi dell'algoritmo nell'hardware, il che rende GnuPG estremamente scattante nella crittografia / decrittografia dei dati.

Un altro motivo per farlo in questo modo è che consente ai documenti crittografati con PGP di essere crittografati a più parti senza dover raddoppiare le dimensioni del documento. Si noti che quando si specificano più destinatari per un documento crittografato (ad esempio gpg -ea -r Alice -r Bob -o ciphertext.asc), il documento crittografato che viene archiviato (ciphertext.asc) non è due volte più grande come se lo avessi appena crittografato per Alice.

Vedi anche il --show-session-keyparametro nella pagina man di gpg per poter decifrare solo la chiave di sessione, ad esempio per consentire a una terza parte di decrittografare un documento che ti è stato criptato senza dovergli trasferire la tua chiave privata oi dati in chiaro.


1
Grazie per la spiegazione sul documento crittografato che non è n volte più grande dove n è il numero di firmatari.
theeartofbeing

4

Si è possibile. Per cominciare, la "crittografia multipartitica" di Google.

AFAIK, però, non ci sono drop 'em in e li usano per questo.

- MarkusQ

PS Per uno schizzo di come potrebbe essere fatto, considera questo. Il messaggio crittografato è costituito da:

  • il payload, crittografato con un pad monouso
  • l'unico time pad, crittografato con key1
  • l'unico time pad, crittografato con key2
  • ...
  • l'unico time pad, crittografato con keyN

Il destinatario che detiene la chiave I decrittografa la propria copia del pad con la chiave, quindi decrittografa il payload.

Tuttavia, questa è solo una prova che potrebbe essere fatto e farebbe schifo come implementazione effettiva. Se possibile, dovresti evitare di eseguire il rollio della tua crittografia. Se non capisci perché, dovresti assolutamente evitare di eseguire il rollio della tua crittografia.

-----Modificare ------------

Se mi sbaglio e gli strumenti Gnu lo fanno, usali. Ma non riesco a trovare alcuna informazione su come farlo.


1
Ciò che potrebbe far schifo in questo è che una volta che conosci l'unico time pad, hai un testo normale noto, insieme ai valori crittografati per altre chiavi. Usando queste informazioni, potresti rendere più facile scoprire quali sono le altre chiavi.
Kibbee

2
Googling "crittografia multiparty" non si rivela molto. Probabilmente avrai più fortuna con la "crittografia della trasmissione" che comprende anche questo caso.
staktrace

1
@ Kibbee: le chiavi non sono segrete, sono pubbliche. Quindi rendere più facile scoprire cosa sono non importa. (Questi schemi vengono utilizzati solo con chiavi che possono essere utilizzate solo per crittografare, non per decrittografare.)
David Schwartz

5
Sono abbastanza sicuro che le implementazioni effettive non utilizzino un blocco unico condiviso (che dovrebbe essere grande quanto il testo normale e il testo crittografato, raddoppiando così la dimensione del messaggio), ma in realtà utilizzano una chiave di crittografia simmetrica condivisa (che di solito è molto più piccolo del messaggio).
Joachim Sauer

-16

RSA a più chiavi (più di due) è forse così - beh, non sono un matematico, quindi questo algoritmo non è necessariamente sicuro, voglio solo dare un'idea con esso.

m = p * q * r; p, q, r sono grandi numeri primi

fi (m) = (p-1) (q-1) (r-1)

d == (e1 * e2 * e3 * ... * ei) ^ (- 1) (mod fi (m)); e1 ... ei sono numeri arbitrari, d è calcolato per soddisfare l'equazione

y1 == x ^ e1 (mod m)

y2 == y1 ^ e2 (mod m)

y3 == y2 ^ e3 (mod m)

...

x == yi ^ d (mod m)

Questo algoritmo potrebbe essere utilizzato ad esempio per aumentare la velocità di The Onion Router.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.