¿Cuál es el formato de una clave pública RSA?

3

Tengo esta clave pública RSA de la que quiero obtener Módulo y exponente , pero no puedo obtener el formato en el que está codificada. ¿Alguien puede decirnos cómo decodificarlo?

-----BEGIN PUBLIC KEY-----
MIIBBgKBgDI/ranPo8MDfguQfSzqg7mtNlUJLLBK7tlVALyk42agbLTSFcZbs9Yw
t3nSe9yNzZB9ZVrL3O9GXkEb6xvj3dqrog+wWOeFCqNV7BuJNYYC/ef4vlnUFQdw
yswbd7d198qjWBZ7MiZRXxX8qKRln+osTvsDYOMZk93k0cGZgyuJAoGAHkgFohgA
nH93kDPjN4sHaT9WsmZ4ailbMtcnWuLizTRJ2sdGjNrpuwT1R+x1nlYHOeDUSOu6
De0kQJX+HZuQCoha6THsdgcV297krN22FwsDZ1PItXLIr5oC7zcNQaDyAJOIv6BC
ufHQ0IR+L9b9esniMbF8yV0d7EVAaBJiyRk=
-----END PUBLIC KEY-----
    
pregunta ping0Fdeath 26.02.2016 - 19:55
fuente

1 respuesta

6
$ cat > foo.txt
-----BEGIN PUBLIC KEY-----
MIIBBgKBgDI/ranPo8MDfguQfSzqg7mtNlUJLLBK7tlVALyk42agbLTSFcZbs9Yw
t3nSe9yNzZB9ZVrL3O9GXkEb6xvj3dqrog+wWOeFCqNV7BuJNYYC/ef4vlnUFQdw
yswbd7d198qjWBZ7MiZRXxX8qKRln+osTvsDYOMZk93k0cGZgyuJAoGAHkgFohgA
nH93kDPjN4sHaT9WsmZ4ailbMtcnWuLizTRJ2sdGjNrpuwT1R+x1nlYHOeDUSOu6
De0kQJX+HZuQCoha6THsdgcV297krN22FwsDZ1PItXLIr5oC7zcNQaDyAJOIv6BC
ufHQ0IR+L9b9esniMbF8yV0d7EVAaBJiyRk=
-----END PUBLIC KEY-----
$ openssl asn1parse -i -in foo.txt 
    0:d=0  hl=4 l= 262 cons: SEQUENCE          
    4:d=1  hl=3 l= 128 prim:  INTEGER           :323FADA9CFA3C3037E0B907D2CEA83B9AD3655092CB04AEED95500BCA4E366A06CB4D215C65BB3D630B779D27BDC8DCD907D655ACBDCEF465E411BEB1BE3DDDAABA20FB058E7850AA355EC1B89358602FDE7F8BE59D4150770CACC1B77B775F7CAA358167B3226515F15FCA8A4659FEA2C4EFB0360E31993DDE4D1C199832B89
  135:d=1  hl=3 l= 128 prim:  INTEGER           :1E4805A218009C7F779033E3378B07693F56B266786A295B32D7275AE2E2CD3449DAC7468CDAE9BB04F547EC759E560739E0D448EBBA0DED244095FE1D9B900A885AE931EC760715DBDEE4ACDDB6170B036753C8B572C8AF9A02EF370D41A0F2009388BFA042B9F1D0D0847E2FD6FD7AC9E231B17CC95D1DEC4540681262C919

Ahí tienes. Utilicé estos comandos en un sistema Linux bastante regular.

Tenga en cuenta que su archivo es raro. Una clave pública RSA consiste en dos enteros, el módulo ( n ) y el exponente público ( e ). Normalmente se codifica como una estructura ASN.1 que es un SEQUENCE de dos valores INTEGER . Se supone que esa estructura está codificada en DER y que la secuencia resultante de bytes se convierte en el contenido de un BIT STRING en otra estructura ASN.1 externa que también contiene un identificador explícito para el tipo de clave (es decir, una indicación de que La clave es realmente de tipo RSA). En su caso, falta esa estructura externa, por lo que formalmente no hay ninguna indicación, ni en la estructura ASN.1 codificada, ni en el encabezado PEM ("BEGIN PUBLIC KEY"), que la clave es una clave RSA.

Como clave RSA, también parece un poco extraño. El primer entero, supuestamente el módulo, tiene una longitud de 1022 bits, lo cual no es muy común (los desarrolladores y los criptógrafos aman los poderes de 2, por lo que no aceptarán un entero de 1022 bits si existe alguna posibilidad de que puedan obtener un 1024 -bit integer). El segundo entero, el exponente público, es bastante grande (1021 bits); RSA lo apoya formalmente, pero es muy raro: los exponentes públicos pueden ser muy cortos sin afectar la seguridad, y esto hace que las operaciones de clave pública sean mucho más rápidas, por lo que no hay una razón real para usar un exponente grande. Algunas implementaciones generalizadas (Windows CryptoAPI ...) ni siquiera admiten exponentes públicos mayores de 32 bits.

Si lo que tienes es realmente una clave pública de RSA, entonces es probable que alguien esté tirando de tu pierna, o esté haciendo cosas poco comunes y probablemente débiles.

    
respondido por el Thomas Pornin 26.02.2016 - 21:10
fuente

Lea otras preguntas en las etiquetas