RSA chiave pubblica e lunghezze della chiave privata

24

Ho riscontrato un problema nella comprensione della dimensione di una chiave pubblica RSA e della sua coppia di chiavi private.

Ho visto diverse dimensioni della chiave per l'algoritmo RSA (512, 1024, ... per esempio), ma questa è la lunghezza della chiave pubblica o la lunghezza della chiave privata o sono entrambe uguali in lunghezza?

L'ho già cercato, ma:

  1. In questo domanda si dice che sia le chiavi private che quelle pubbliche per l'algoritmo RSA hanno uguale lunghezza. Ma:
  2. Nella domanda si dice che hanno lunghezze diverse!

Entrambe le risposte sono accettate. Sono uguali o non di lunghezza?

Inoltre la mia applet Java Card che genera coppie di chiavi RSA, restituisce sempre la chiave pubblica e la chiave privata di uguale lunghezza. Gli strumenti online per la generazione di coppie di chiavi RSA hanno una lunghezza diversa!

Esempi:

Strumento online 1 :

Strumento online 2 :

    
posta TheGoodUser 27.05.2015 - 10:08
fonte

2 risposte

21

> 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 :)

    
risposta data 27.05.2015 - 14:00
fonte
11

Una chiave pubblica RSA consiste in diversi (grandi) valori interi e una chiave privata RSA consiste anche in alcuni valori interi. Sebbene i contenuti differiscano, una chiave pubblica RSA e la corrispondente chiave privata RSA condividono una struttura matematica comune e, in particolare, entrambi includono un valore specifico chiamato modulo . La chiave pubblica e privata di una data coppia necessariamente funziona con lo stesso valore del modulo, altrimenti RSA non funziona (ciò che viene crittografato con una chiave pubblica deve essere decodificato con la chiave privata corrispondente ).

Tradizionalmente , la "lunghezza" di una chiave RSA è la lunghezza, in bit, del modulo. Quando una chiave RSA ha una lunghezza "2048", significa che il valore del modulo è compreso tra 2 2047 e 2 2048 . Poiché la chiave pubblica e privata di una data coppia condivide lo stesso modulo, hanno anche, per definizione, la stessa "lunghezza".

Tuttavia, sia la chiave pubblica che quella privata contengono altri valori, oltre al modulo. Pertanto, quando si codifica una chiave pubblica o privata in byte (in modo che possano essere memorizzati in un file), per il modulo occorrono più di un byte. Un modulo a 2048 bit può teoricamente adattarsi a esattamente 256 byte (dal 256 * 8 = 2048) ma sono necessari più byte per codificare gli altri valori.

Inoltre, una chiave pubblica RSA consiste nel modulo e un altro valore chiamato "esponente pubblico", che in genere è piuttosto breve. Quindi, una chiave pubblica avrà bisogno di relativamente pochi byte aggiuntivi per la codifica; il modulo è il più grande pezzo nella chiave pubblica. Non è così per la chiave privata, che include il modulo e l'esponente pubblico (come la chiave pubblica) ma anche "l'esponente privato" (un numero grosso grosso come il modulo) e altri cinque valori la cui dimensione è circa la metà di quello del modulo. La conseguenza è che una chiave privata codificata dovrebbe essere circa cinque volte più grande (se contata in byte) della corrispondente chiave pubblica codificata.

Queste sono solo considerazioni di codifica; la "lunghezza della chiave RSA" (come in "una chiave da 2048 bit") si riferisce al valore numerico del modulo, non alla lunghezza codificata dell'intero armamentario di fattori e di esponenti ridotti e coefficienti CRT.

    
risposta data 27.05.2015 - 15:58
fonte

Leggi altre domande sui tag