Perché una chiave RSA (256 bit) ha più di 256 bit di caratteri ASCII?

1

Ad esempio, ho generato una coppia di chiavi a 256 bit. La chiave privata (quando salvata in un file da puttygen) è: AAAAIGZcM73lV3Uk / psErZAYA0F + 4xK78FtFoVi2fdypv92tAAAAEQDdOhyFJ6iV FSKDgjpj8 + bRAAAAEQC2nAZD6DurGlj + DlPuB7tNAAAAEQCbHQFLFNR / URs4eu0o ZfPE

Questo è 132 caratteri ASCII. Supponendo solo 6 bit per carattere (se il set di caratteri utilizzato è solo 64 caratteri, ciò renderebbe 132 * 6 = 792 bit, che è molto più dei 256 bit che dovrebbero essere nella chiave.

Quindi perché i personaggi extra? Grazie.

    
posta perpetual 28.01.2015 - 02:07
fonte

1 risposta

3

Il formato PuTTY per un BLOB di chiave privata RSA SSH2 è dlen||d||plen||p||qlen||q||ulen||iqmp . I valori dlen , plen , qlen e ulen sono la lunghezza in byte di d , p , q e iqmp , rispettivamente; la lunghezza è espressa come int , quindi ciascuno dei quattro marcatori di lunghezza stessa richiede 4 byte. I quattro elementi chiave memorizzati sono rispettivamente la chiave di decodifica d , i fattori primi p e q , e il valore di q^(-1) mod p - gli ultimi 3 non sono tecnicamente necessari, ma velocizzano significativamente le operazioni RSA.

Nella tua chiave, d è 256 bit (32 byte), p e q sono ciascuno 17 byte e iqmp è anche 17 byte. Le lunghezze di 17 byte di p , q e iqmp sono artefatti del metodo di arrotondamento un po 'dispari utilizzato; per calcolare bitlen(p)/8 arrotondato al byte più vicino, la fonte PuTTY calcola (bitlen(p)+8)/8 . Se p è esattamente lungo 128 bit, quindi (128+8)/8=17 è il valore di plen , anche se p si adatta perfettamente a 16 byte. Allo stesso modo per q e iqmp - i valori sono tutti esattamente 128 bit esattamente, ma l'arrotondamento dispari li trasforma in valori di 17 byte. Non c'è nessuna conseguenza di sicurezza, comunque, per quanto ne so; avrebbe avuto più senso aggiungere 7 bit e la divisione intera per 8, ma l'hanno fatto nel modo in cui sono stati creati e non possono cambiarlo ora.

In ogni caso, sono i componenti del blob: 4 byte per dlen , 32 per d , 4 per plen , 17 per p , 4 per qlen , 17 per q , 4 per ulen , 17 per iqmp . Aggiungili, ottieni 99 byte o 792 bit. Per comodità, questo è quindi codificato con Base64, che utilizza un sottoinsieme di 64 caratteri che sono particolarmente "sicuri" - "sicuri" qui che significa che possono essere elaborati utilizzando sistemi progettati per elaborare il testo (in particolare e-mail) senza problemi importanti - - nessun problema con caratteri speciali, nessun problema con programmi che supportano solo caratteri ASCII e non conservano l'ottavo bit del byte, ecc. Ecco come il messaggio va da 792 bit a 132 caratteri.

    
risposta data 28.01.2015 - 03:55
fonte

Leggi altre domande sui tag