> Ho visto diverse dimensioni della chiave per l'algoritmo RSA (512, 1024, ... [bit] per esempio) ma, è questa la lunghezza della chiave pubblica o la lunghezza della chiave privata o entrambe sono uguali in lunghezza?
È la lunghezza del modulo utilizzato per calcolare la coppia di chiavi RSA. La chiave pubblica è composta da modulo e esponente pubblico, mentre la chiave privata è composta da modulo ed esponente privato.
> ma gli strumenti online per la generazione di coppie di chiavi RSA hanno output di lunghezze diverse!
La prima immagine mostra la chiave pubblica e privata in formato PEM, codificata in Base64 (e non modulo ed esponenti della chiave, che invece sono mostrati nella seconda immagine).
Il contenuto della chiave privata RSA è il seguente:
-----BEGIN RSA PRIVATE KEY-----
RSAPrivateKey ::= SEQUENCE {
version Version,
modulus INTEGER, -- n
publicExponent INTEGER, -- e
privateExponent INTEGER, -- d
prime1 INTEGER, -- p
prime2 INTEGER, -- q
exponent1 INTEGER, -- d mod (p-1)
exponent2 INTEGER, -- d mod (q-1)
coefficient INTEGER, -- (inverse of q) mod p
otherPrimeInfos OtherPrimeInfos OPTIONAL
}
-----END RSA PRIVATE KEY-----
mentre una chiave pubblica RSA contiene solo i seguenti dati:
-----BEGIN RSA PUBLIC KEY-----
RSAPublicKey ::= SEQUENCE {
modulus INTEGER, -- n
publicExponent INTEGER -- e
}
-----END RSA PUBLIC KEY-----
e questo spiega perché il blocco della chiave privata è più grande.
Ora, perché la chiave privata contiene così tanti dati? Dopotutto, sono necessari solo il modulo n e l'esponente privato d . Il motivo per cui tutte le altre cose sono precalcolate e incluse nel blocco della chiave privata è quello di accelerare la decrittografia usando il Algoritmo del resto cinese . (Complimenti a @dbernard per averlo indicato nei commenti.)
Si noti che un formato più standard per chiavi pubbliche non RSA è
-----BEGIN PUBLIC KEY-----
PublicKeyInfo ::= SEQUENCE {
algorithm AlgorithmIdentifier,
PublicKey BIT STRING
}
AlgorithmIdentifier ::= SEQUENCE {
algorithm OBJECT IDENTIFIER,
parameters ANY DEFINED BY algorithm OPTIONAL
}
-----END PUBLIC KEY-----
Ulteriori informazioni qui .
BTW, dal momento che hai appena postato uno screenshot della chiave privata, spero strongmente che sia stato solo per i test :)