¿Por qué una clave RSA (256 bits) tiene más de 256 bits de caracteres ASCII?

1

Como ejemplo, generé un par de claves de 256 bits. La clave privada (cuando se guarda en un archivo mediante puttygen) es: AAAAIGZcM73lV3Uk / psErZAYA0F + 4xK78FtFoVi2fdypv92tAAAAEQDdOhyFJ6iV FSKDgjpj8 + bRAAAAEQC2nAZD6DurGlj + DlPuB7tNAAAAEQCbHQFLFNR / URs4eu0o ZfPE

Esto es 132 caracteres ascii. Suponiendo que solo hay 6 bits por carácter (si el conjunto de caracteres utilizado es de solo 64 caracteres, esto haría 132 * 6 = 792 bits, que es mucho más que los 256 bits que se supone que están en la clave.

Entonces, ¿por qué los caracteres extra? Gracias.

    
pregunta perpetual 28.01.2015 - 02:07
fuente

1 respuesta

3

El formato PuTTY para un blob de clave privada RSA SSH2 es dlen||d||plen||p||qlen||q||ulen||iqmp . Los valores dlen , plen , qlen y ulen son la longitud en bytes de d , p , q y iqmp , respectivamente; la longitud se expresa como int , por lo que cada uno de los cuatro marcadores de longitud ocupa 4 bytes. Los cuatro elementos clave almacenados son, respectivamente, la clave de descifrado d , los factores primos p y q , y el valor de q^(-1) mod p ; los últimos 3 no son técnicamente necesarios, pero aceleran significativamente las operaciones RSA.

En su clave, d es de 256 bits (32 bytes), p y q son cada uno de 17 bytes, y iqmp también es de 17 bytes. Las longitudes de 17 bytes de p , q y iqmp son artefactos del método de redondeo un tanto extraño utilizado; para calcular bitlen(p)/8 redondeado al byte más cercano, la fuente PuTTY calcula (bitlen(p)+8)/8 . Si p tiene exactamente una longitud de 128 bits, entonces (128+8)/8=17 es el valor de plen , aunque p se ajusta perfectamente a 16 bytes. Del mismo modo, para q y iqmp , los valores son en realidad exactamente 128 bits, pero el redondeo impar los convierte en valores de 17 bytes. No hay ninguna consecuencia de seguridad de ninguna manera, que yo sepa; habría tenido más sentido agregar 7 bits y la división de enteros entre 8, pero lo hicieron de la forma en que lo hicieron, y no pueden cambiarlo ahora.

De todos modos, esos son los componentes del blob: 4 bytes para dlen , 32 para d , 4 para plen , 17 para p , 4 para qlen , 17 para q , 4 para ulen , 17 para iqmp . Súmalos, obtienes 99 bytes, o 792 bits. Para mayor comodidad, esto se codifica con Base64, que utiliza un subconjunto de 64 caracteres que son particularmente "seguros": "seguro" aquí, lo que significa que pueden procesarse utilizando sistemas diseñados para procesar texto (en particular, correo electrónico) sin mayores problemas. - no hay problemas con los caracteres especiales, no hay problemas con los programas que solo admiten caracteres ASCII y no conservan el octavo bit del byte, etc. Así es como el mensaje pasa de 792 bits a 132 caracteres.

    
respondido por el cpast 28.01.2015 - 03:55
fuente

Lea otras preguntas en las etiquetas