Qual è il formato di una chiave pubblica RSA?

3

Ho questa chiave pubblica RSA da cui voglio ottenere la parte Modulus e esponente ma non in grado di ottenere il formato in cui è codificata. Qualcuno può dirmi come decodificarlo?

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

1 risposta

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

Ecco qua. Ho usato questi comandi su un sistema Linux abbastanza regolare.

Nota che il tuo file è strano. Una chiave pubblica RSA consiste in due numeri interi, il modulo ( n ) e l'esponente pubblico ( e ). Normalmente è codificato come una struttura ASN.1 che è un SEQUENCE di due valori INTEGER . Si suppone che tale struttura sia codificata in DER e la risultante sequenza di byte diventi il contenuto di un BIT STRING in un'altra struttura esterna ASN.1 che contiene anche un identificatore esplicito per il tipo di chiave (cioè un'indicazione che il la chiave è davvero di tipo RSA). Nel tuo caso, quella struttura esterna è mancante, quindi non c'è formalmente alcuna indicazione, né nella struttura ASN.1 codificata, né nell'intestazione PEM ("BEGIN PUBLIC KEY"), che la chiave è una chiave RSA.

Come chiave RSA, sembra anche un po 'strano. Il primo intero, presumibilmente il modulo, ha una lunghezza di 1022 bit, che non è molto comune (gli sviluppatori e i crittografi amano davvero i poteri di 2, quindi non accetteranno un intero di 1022 bit se c'è qualche possibilità che possano fare un 1024 -bit intero). Il secondo numero intero, l'esponente pubblico, è abbastanza grande (1021 bit); questo è formalmente supportato da RSA, ma molto raro: gli esponenti pubblici possono essere molto brevi senza alcun effetto negativo sulla sicurezza, e questo rende le operazioni chiave pubbliche molto più veloci, quindi non c'è una vera ragione per usare un esponente di grandi dimensioni. Alcune implementazioni diffuse (Windows CryptoAPI ...) non supportano nemmeno esponenti pubblici più grandi di 32 bit.

Se quello che hai in realtà è una chiave pubblica RSA, è probabile che qualcuno stia tirando la gamba o stia facendo cose inusuali e probabilmente deboli.

    
risposta data 26.02.2016 - 21:10
fonte

Leggi altre domande sui tag