2009-11-21 12 views
53

Alle chiavi private RSA può essere assegnata una "passphrase" che, a quanto ho capito, è intesa a fornire una certa sicurezza secondaria nel caso in cui qualcuno decida di utilizzare il file della chiave privata.Come funziona la passphrase della chiave privata RSA?

Come viene implementato il livello di protezione passphrase?

+4

RSA in sé non fa nulla del genere. Sembra che tu stia parlando di un particolare programma che usa RSA - in tal caso sarebbe estremamente utile se tu dovessi dirci di quale programma stai parlando (ad esempio PGP o GPG). –

+1

Interessante - per lo più sono curioso della passphrase richiesta eseguendo "ssh-keygen -t rsa" su sistemi unix-y. – qfinder

+0

Questa domanda sembra essere fuori tema perché non riguarda la programmazione. Vedi [Quali argomenti posso chiedere qui] (http://stackoverflow.com/help/on-topic) nel Centro assistenza. Forse [Information Security Stack Exchange] (http://security.stackexchange.com/) sarebbe un posto migliore per chiedere. – jww

risposta

42

ssh-keygen utilizza OpenSSL per generare chiavi RSA e memorizzarlo in formato PEM. La crittografia di cui stai parlando è specifica per PEM. Se guardate il file chiave,

-----BEGIN RSA PRIVATE KEY----- 
Proc-Type: 4,ENCRYPTED 
DEK-Info: DES-EDE3-CBC,5B01E932988DC66B 

EPESt4ZVIrxnQXxxWWVa7cCR+vgNZ/4vTu4mdq6pjaW7jMZoB8HV+mA745mQkQw7 
i+YtdVs/JqOeyGiw/3McxYYKZTlhyh7MvfIr1n8ZdZmcjQz+oFqMxChFU3r8BGgA 

header "DEK-Info" ha tutte le informazioni necessarie per decifrare la chiave fino a quando si conosce la passphrase. "DES-EDE3-CBC" significa Triple DES (in modalità EDE). CBC è la modalità di concatenazione. Il numero esadecimale è il vettore iniziale necessario per CBC.

PEM è un formato molto vecchio, quindi supporta solo DES/TripleDES. AES e Blowfish sono stati aggiunti in seguito ma non supportati da tutte le implementazioni. My ssh (OpenSSH 5.2) supporta solo DES e TripleDES.

+0

C'è qualche classe JRE che sa come leggere questo formato? – Phaedrus

+0

@Phaedrus vedere https://github.com/bcgit/bc-java/blob/c0d5ac5e62a6531f640bdfb4897a9fe95a0c9fdb/pkix/src/test/java/org/bouncycastle/openssl/test/ParserTest.java#L412 –

+3

Questa risposta sembra mancare su come tradurre la password per la chiave di decodifica accettata dal cifrario. –

27

La passphrase è solo una chiave utilizzata per crittografare il file che contiene la chiave RSA, utilizzando un codice simmetrico (in genere DES o 3DES). Per utilizzare la chiave per la crittografia a chiave pubblica, è necessario prima decrittografare il file utilizzando la chiave di decrittografia. ssh lo fa automaticamente chiedendo la passphrase.

Se qualcuno ha ottenuto una sospensione del file della chiave, non sarebbe in grado di utilizzarlo a meno che non conoscesse la passphrase utilizzata per crittografare il file.

+0

Grazie mille per la risposta! Paio di domande successive: la parte passphrase dello standard RSA o qualcos'altro (come da commentatore sopra)? Il programma ssh-keygen usa DES o 3DES/come lo direi? Quale anno scolastico? Perché non AES? – qfinder

8

Le chiavi private memorizzate su file system generici (al contrario di token hardware anti-manomissione, per scopi speciali) potrebbero essere facilmente rubate se non protette. Le autorizzazioni del file system possono sembrare sufficienti, ma spesso possono essere ignorate, soprattutto se un utente malintenzionato ha accesso fisico alla macchina.

Un potente codice simmetrico, con una buona password, aiuta a prevenire questo. Una buona chiave privata RSA è troppo lunga per essere ricordata (per me, comunque), ma chiavi simmetriche molto più piccole possono fornire lo stesso livello di sicurezza. Una chiave simmetrica relativamente breve memorizzata nel cervello di una persona viene utilizzata per proteggere una grande chiave privata memorizzata su disco.

+0

Definitivamente ha senso - ulteriori dettagli su come, esattamente, è implementato? (Quale simmetrico esattamente, se questo è standard per tutti gli impls, ecc.) – qfinder

Problemi correlati