Passa al contenuto principale

3. Tipi di chiave (Key Types)

Due tipi di chiave sono impiegati nelle primitive e negli schemi definiti in questo documento: chiave pubblica RSA (RSA Public Key) e chiave privata RSA (RSA Private Key). Insieme, una chiave pubblica RSA e una chiave privata RSA formano una coppia di chiavi RSA (RSA Key Pair).

Questa specifica supporta il cosiddetto RSA « multi-primo » (Multi-prime), dove il modulo può avere più di due fattori primi. Il vantaggio dell'RSA multi-primo è un costo computazionale inferiore per le primitive di decifratura e firma, a condizione che venga utilizzato il teorema del resto cinese (Chinese Remainder Theorem, CRT). Possono essere ottenute migliori prestazioni su piattaforme monoprocessore, ma in misura maggiore su piattaforme multiprocessore, dove le esponenziazioni modulari coinvolte possono essere eseguite in parallelo.

Per una discussione su come il multi-primo influenzi la sicurezza del crittosistema RSA, il lettore è rimandato a [SILVERMAN].

3.1. Chiave pubblica RSA (RSA Public Key)

Ai fini di questo documento, una chiave pubblica RSA è composta da due componenti:

n        modulo RSA (RSA Modulus), un intero positivo
e esponente pubblico RSA (RSA Public Exponent), un intero positivo

In una chiave pubblica RSA valida, il modulo RSA n è un prodotto di u numeri primi dispari distinti r_i, i = 1, 2, ..., u, dove u >= 2, e l'esponente pubblico RSA e è un intero compreso tra 3 e n - 1 che soddisfa GCD(e, λ(n)) = 1, dove λ(n) = LCM(r_1 - 1, ..., r_u - 1). Per convenzione, i primi due numeri primi r_1 e r_2 possono anche essere denotati rispettivamente come p e q.

Una sintassi raccomandata per lo scambio di chiavi pubbliche RSA tra implementazioni è data nell'appendice A.1.1; la rappresentazione interna di un'implementazione può differire.

3.2. Chiave privata RSA (RSA Private Key)

Ai fini di questo documento, una chiave privata RSA può avere una di due rappresentazioni.

Rappresentazione 1

La prima rappresentazione consiste nella coppia (n, d), dove i componenti hanno i seguenti significati:

n       modulo RSA (RSA Modulus), un intero positivo
d esponente privato RSA (RSA Private Exponent), un intero positivo

Rappresentazione 2

La seconda rappresentazione consiste in una quintupla (p, q, dP, dQ, qInv) e una sequenza (eventualmente vuota) di triple (r_i, d_i, t_i), i = 3, ..., u, una per ogni numero primo non presente nella quintupla, dove i componenti hanno i seguenti significati:

p      il primo fattore, un intero positivo
q il secondo fattore, un intero positivo
dP esponente CRT del primo fattore, un intero positivo
dQ esponente CRT del secondo fattore, un intero positivo
qInv il (primo) coefficiente CRT, un intero positivo
r_i l'i-esimo fattore, un intero positivo
d_i esponente CRT dell'i-esimo fattore, un intero positivo
t_i coefficiente CRT dell'i-esimo fattore, un intero positivo

Vincoli di validità

In una chiave privata RSA valida con la prima rappresentazione, il modulo RSA n è lo stesso della chiave pubblica RSA corrispondente ed è il prodotto di u numeri primi dispari distinti r_i, i = 1, 2, ..., u, dove u >= 2. L'esponente privato RSA d è un intero positivo minore di n che soddisfa:

e * d == 1 (mod λ(n))

dove e è l'esponente pubblico RSA corrispondente e λ(n) è definito come nella sezione 3.1.

In una chiave privata RSA valida con la seconda rappresentazione, i due fattori p e q sono i primi due fattori primi del modulo RSA n (cioè, r_1 e r_2); gli esponenti CRT dP e dQ sono interi positivi minori di p e q, rispettivamente, che soddisfano:

e * dP == 1 (mod (p-1))
e * dQ == 1 (mod (q-1))

e il coefficiente CRT qInv è un intero positivo minore di p che soddisfa:

q * qInv == 1 (mod p)

Se u > 2, la rappresentazione includerà una o più triple (r_i, d_i, t_i), i = 3, ..., u. I fattori r_i sono i fattori primi aggiuntivi del modulo RSA n. Ogni esponente CRT d_i (i = 3, ..., u) soddisfa:

e * d_i == 1 (mod (r_i - 1))

Ogni coefficiente CRT t_i (i = 3, ..., u) è un intero positivo minore di r_i che soddisfa:

R_i * t_i == 1 (mod r_i)

dove R_i = r_1 * r_2 * ... * r_(i-1).

Una sintassi raccomandata per lo scambio di chiavi private RSA tra implementazioni, che include componenti di entrambe le rappresentazioni, è data nell'appendice A.1.2; la rappresentazione interna di un'implementazione può differire.

Note

Nota 1: La definizione dei coefficienti CRT qui e le formule che li utilizzano nelle primitive nella sezione 5 seguono generalmente l'algoritmo di Garner [GARNER] (vedere anche l'algoritmo 14.71 in [HANDBOOK]). Tuttavia, per compatibilità con le rappresentazioni delle chiavi private RSA in PKCS #1 v2.0 e versioni precedenti, i ruoli di p e q sono invertiti rispetto al resto dei numeri primi. Pertanto, il primo coefficiente CRT, qInv, è definito come l'inverso di q mod p, piuttosto che come l'inverso di R_1 mod r_2, cioè, di p mod q.

Nota 2: Quisquater e Couvreur [FASTDEC] hanno osservato il vantaggio di applicare il CRT alle operazioni RSA.