Chiavi SSH: perché id_rsa è più grande di id_rsa.pub?


8

La mia chiave privata ( ~/.ssh/id_rsa) è un file a 1766 byte, ma la mia chiave pubblica ( ~/.ssh/id_rsa.pub) è lunga solo 396 byte. Perché la grande differenza? È perché la chiave privata è crittografata utilizzando AES? Il testo cifrato AES di solito non ha la stessa lunghezza del testo in chiaro?

Risposte:


17

La tua chiave privata contiene più informazioni rispetto alla tua chiave pubblica. Mentre la chiave pubblica trasmette solo l'esponente di crittografia (e) e il modulo (n), la chiave privata comprende inoltre un esponente di decrittazione (d) e i due fattori primi (p e q) del modulo. La chiave privata ha essenzialmente una chiave pubblica al suo interno.

[Crittografia: testo cifrato = messaggio ^ e (mod n); Decrittazione: messaggio = testo cifrato ^ d (mod n)]

Per vedere tutti i dati nel file della chiave privata:

$ openssl rsa -in id_rsa -text -noout

Modifica: il file della chiave privata apparentemente non ha l'esponente di crittografia, ma ha esponenti d_1 e d_2, dove d_1 = d (mod p-1) e d_2 = d (mod q-1). Questi sono usati per accelerare la decodifica: puoi dividere la tua esponenziazione di decrittazione in chiamate di esponenziale parallele più piccole, che finiscono per essere più veloci di un grande m = c ^ d (mod n) per big re big n.


2

Sfortunatamente non hai specificato in quale formato sono archiviate le chiavi. Suppongo che ti riferisci alla codifica della chiave OpenSSH. In questo formato le chiavi sono memorizzate in blocchi di dati con codifica base64. A seconda della codifica durante la crittografia, di solito è presente una sorta di riempimento durante la crittografia dei dati. Quindi i dati risultanti sono un multiplo della dimensione del blocco di crittografia.

Le chiavi OpenSSH possono anche includere una sorta di commenti e proprietà aggiuntive inserite tra i marcatori ---- BEGIN SSH2 [PUBLIC|PRIVATE] KEY ----e -----END RSA [PUBLIC|PRIVATE] KEY-----. Vedi RFC4716 .

Inoltre per la chiave pubblica vengono salvati il ​​modulo e l'esponente pubblico mentre per la chiave privata viene salvato l'esponente privato. Vedi la generazione di chiavi RSA su Wikipedia per i dettagli sulla base matematica. Ci sono molti posti sul web che descrivono la connessione matematica tra questi tasti. Non sono sicuro se hai bisogno di una copia di queste spiegazioni qui.

Teoricamente è possibile calcolare la chiave privata dalle informazioni della chiave pubblica, ma farlo matematicamente è molto più difficile che viceversa. Considera solo la chiave privata come "sorgente" che include tutte le variabili e la chiave pubblica come risultato del calcolo. È facile eseguire ripetutamente il calcolo se si conoscono tutte le variabili ma conoscendo solo il risultato è difficile ottenere tutte le variabili di origine. Questo è anche il motivo per cui è sufficiente salvare la chiave privata in un luogo sicuro. Puoi sempre utilizzare la chiave privata per ricalcolare la chiave pubblica. Ma non viceversa - bene, teoricamente puoi farlo, ma a seconda della lunghezza della chiave questo potrebbe richiedere molti anni;).


Il calcolo della chiave privata dalla chiave pubblica richiede una fattorizzazione rapida ed efficiente, la cui mancanza è ciò su cui si basa la sicurezza della crittografia della chiave pubblica (almeno RSA).
Andrew,

Questo è corretto. Trova un algoritmo di fattorizzazione veloce e fondamentalmente rompi la sicurezza della crittografia RSA. In alternativa, si potrebbe optare per l'ECC (Elliptic Curve Cryptography), che si basa sul concetto di difficoltà nel camminare logaritmi discreti. Tuttavia, se qualcuno trova una soluzione efficace a questo problema ...
SkyBeam
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.