È 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?
È 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:
GnuPG esegue la crittografia multi-chiave di serie.
Il seguente comando crittograferà doc.txt
utilizzando 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 "
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.
Ecco come farlo tramite la gpg
riga di comando (come descritto nella risposta di David Segonds ):
gpg --encrypt \
--recipient alice@example.com \
--recipient bob@example.com \
clear-message.txt
La tua GUI deve fornire un modo per crittografare per più persone
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 .
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-key
parametro 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.
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 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.
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.