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.