Estratto del documento

Cristiano Teodoro

cristianoteodoro@virgilio.it

Generazione della chiave privata

La nell’algoritmo crittografico RSA a chiave pubblica

Chiave privata: 215848789810065513208302874205921122935334449334942657295536075214506868195979917314395792274

353168956274124986211114596913065463429612455215420383072827555777122991700187967008591109257601820645413373

921927977000310981480265384701404949044705674957052534439113216316015300413232895718188959262368760601426187

Sommario: scopo di questo articolo è quello di descrivere la realizzazione della chiave privata nell’algoritmo RSA a chiave pubblica con l’utilizzo delle congruenze lineari. In effetti l’uso delle congruenze lineari viene impiegato non solo nel suddetto algoritmo ma anche in diversi altri metodi crittografici, come ad esempio nell’algoritmo DSA e nell’algoritmo di El Gamal per la generazione e la verifica della firma digitale.

Si inizierà pertanto con l’illustrare un algoritmo per la risoluzione della congruenza lineare Ax ≡ C (mod B) o dell’equazione lineare diofantea Ax − By = C dove A, B e C sono numeri interi qualsiasi positivi o negativi.

Come caso particolare si prenderà in considerazione la congruenza del tipo Ax ≡ 1 (mod B) per il calcolo della chiave privata. Dopo una breve premessa viene descritto lo sviluppo di un numero razionale in frazione continua arrivando al calcolo del MCD di due numeri.

Si passa quindi ad introdurre l’algoritmo riguardante la risoluzione di questo tipo di equazioni o congruenze attraverso i seguenti passi: calcolo delle ridotte; condizioni di risolvibilità dell’equazione Ax − By = ±1 e quindi delle equazione più generale Ax − By = C; risoluzione delle equazione.

Viene data poi una concisa panoramica dell’impiego negli algoritmi crittografi citati di questo tipo di congruenza, illustrando poi in dettaglio una sua applicazione riguardante il calcolo della chiave privata nell’algoritmo RSA.

Per avere dei risultati concreti si sono realizzati due programma in linguaggio Qbasic. Il primo (Allegato 1) riguarda sia soluzioni della congruenza lineare generica con valori numerici di A, B e C qualsiasi, ma ciascuno in valore assoluto < 105 sia il calcolo della chiave privata nell’algoritmo RSA sempre con valori numerici < 105 per ogni primo impiegato, in quanto ci si limita nei calcoli di questo programma all’uso della doppia precisione.

I risultati ottenibili per la generazione della chiave privata sono quindi da ritenersi di significato unicamente dimostrativo.

Il secondo programma (Allegato 2), è dedicato espressamente per l’RSA al calcolo di chiavi private, costituite anche da centinaia di cifre decimali.

Con l’impiego pertanto di quest’ultimo programma, in cui si utilizza una aritmetica a precisione multipla, si possono ottenere valori di chiavi private riguardanti un loro effettivo e reale impiego nel campo della crittografia.

Abstract

The aim of this paper is to illustrate the private key implementation in the RSA public key cryptographic method by using linear congruence.

Indeed their employment is used not only in the aforesaid algorithm, but also in other important cryptographic systems, such as the DSA and the ElGamal, regarding the Digital Signature generation and verification.

So we start explaining an algorithm for solution of the linear congruence Ax ≡ C (mod B) or linear diophantine equation Ax − By = C where A, B, C are whole positive or negative numbers.

After a concise introduction we explain the continued fraction expansion of rational number, attaining the GCD of two number.

Then we illustrate the algorithm for the solution of the linear congruences by the next steps: the convergents computation; the equation resolvability conditions; the Ax − By = ±1 and solutions.

We give also a short survey of the linear congruences employed in the mentioned cryptographic methods and then we explain the particular computation regarding the private key of the RSA algorithm.

We have implemented two programs in Qbasic language. The former (Allegato 1) considers either the linear congruences solution with A, B, C, each < 105 or the private key computation in the RSA algorithm with every prime numerical value < 105.

The private key values in this case are only demonstrative values.

The second program (Allegato 2) considers expressly the private keys computation, composed by several tens or some hundreds of digit.

So this program permits, by using a multiple-precision arithmetic, the achievement of numeric value for private keys, that can be of actual utilization in the cryptographic field.

1. Premessa

Per illustrare la realizzazione della chiave privata nell’algoritmo RSA risulta necessario illustrare innanzitutto un algoritmo dedicato alla risoluzione delle equazioni lineari diofantee Ax − By = C dove A, B e C sono numeri interi qualsiasi positivi o negativi.

Risolvere queste equazioni significa trovare per le incognite x e y dei valori numerici interi che la soddisfano.

Ma perché la risoluzione di questo tipo di equazione può interessare il campo della crittografia?

Basterà per ora accennare che in diversi importanti algoritmi crittografici a chiave pubblica quali l’algoritmo RSA e l’algoritmo DSA (Digital Signature Algorithm) si deve risolvere l’equazione Ax − By = 1 o l’equivalente congruenza lineare Ax ≡ 1 (mod B) con A e B interi positivi per il calcolo di alcune grandezze o parametri riguardanti sia la generazione della chiave privata nell’algoritmo RSA, sia la generazione e la verifica della Firma Digitale nell’algoritmo DSA.

Si rimanda nel seguito a maggiori dettagli sull’impiego dell’equazione in questo campo.

Sotto il titolo è riportato un esempio di valore numerico di chiave privata relativo all’algoritmo RSA, valore che può considerarsi di effettivo e reale utilizzo.

Questa nota inizierà illustrando la risoluzione delle equazioni lineari diofantee Ax − By = C.

2. Sviluppo di un numero razionale in frazione continua

Per poter risolvere l’equazione lineare in questione occorre venire a conoscenza di alcuni argomenti essenziali riguardanti lo sviluppo di un numero razionale in frazione continua, che sono qui di seguito illustrati.

Per i vari tipi di notazioni e simboli utilizzati come pure per la validità delle formule e delle relazioni impiegate si fa riferimento a [Old].

Ogni numero razionale è una frazione della forma A/B con A e B interi e B ≠ 0.

Si dimostra [Old] che ogni frazione, cioè ogni numero razionale lo si può esprimere nella forma seguente:

A/B = a1 + 1/(a2 + 1/(a3 + .......... + 1/(an−1 + 1/an))) (1)

con un numero limitato di termini (da a1 ad an) dove il termine a1 può essere sia un intero positivo che negativo o nullo e gli altri valori sono degli interi positivi.

I vari ai si ricavano eseguendo le seguenti divisioni successive:

A = a1B + r1 con a1 e r1 rispettivamente quoziente e resto della divisione di A per B e quindi 0 ≤ r1 < B.

B = a2r1 + r2 con r2 resto della divisione di B per r1 e quindi 0 < r2 < r1.

r1 = a3r2 + r3 con r3 resto della divisione di r1 per r2 e quindi 0 < r3 < r2.

…………………………………………………………………………………

rn−3 = an−1rn−2 + rn−1 con resto della divisione di rn−3 per rn−2 e quindi 0 < rn−1 < rn−2.

rn−2 = anrn−1 + rn con rn = 0.

I resti r1, r2, r3, ……, rn−1 sono di valore decrescente e costituiscono una successione finita di termini il cui ultimo termine è sempre di valore 0 [Old].

Sarà pertanto finita anche la successione dei termini che prendono il nome di quozienti parziali.

La formula (1) si pone per convenzione sotto la seguente forma più pratica e concisa:

A/B = [a1, a2, a3, a4, .........., an−1, an] (1b)

Esempio

Facciamo un semplice esempio. Sia da sviluppare in frazione continua il numero razionale A/B = 1327/271 ed i seguenti valori:

Eseguendo le divisioni successive come si è sopra indicato si ottengono per i diversi i:

a1 = 4, r1 = 243

a2 = 1, r2 = 28

a3 = 8, r3 = 19

a4 = 1, r4 = 9

a5 = 2, r5 = 1

a6 = 9, r6 = 0

pertanto si ha: A/B = 1327/271 = [4, 1, 8, 1, 2, 9] (1c).

Se si volesse invece sviluppare in frazione continua 1327/271 = [0, 4, 1, 8, 1, 2, 9] che si differenzia dalla (1c) per un quoziente parziale in più: il primo quoziente che risulta di valore 0.

Questo procedimento delle divisioni successive sopra illustrato viene notoriamente utilizzato con efficacia per il calcolo del Massimo Comun Divisore di due numeri A e B che sarà indicato nel seguito nella seguente maniera: (A,B).

È questo infatti il ben noto algoritmo Euclideo (Euclidean algorithm) per il calcolo del Massimo Comun Divisore fra due numeri.

In effetti considerati due numeri interi A e B si può dimostrare [Old] che il più piccolo resto non nullo della successione r1, r2, r3, …….. è il loro (A,B).

3. Equazioni e congruenze lineari

3.1 Calcolo delle ridotte

Tenendo presente lo sviluppo di A/B consideriamo ora la seguente successione di grandezze che prendono il nome di ridotte:

c1 = [a1]; c2 = [a1,a2]; c3 = [a1,a2,a3]; c4 = [a1,a2,a3,a4];……………………………

…………… cn−1 = [a1,a2,a3,a4………….an−1]; cn = [a1,a2,a3,a4,…..an−1, an] = A/B.

Esplicitando i due primi termini si ha:

c1 = a1 = p1/q1 dove si è posto p1 = a1 e q1 = 1.

c2 = a1 + 1/a2 = (a1a2 + 1)/a2 = p2/q2 avendo posto p2 = a2p1 + p0 e q2 = a2q1 + q0.

Per la successiva ridotta c3 dopo opportuni passaggi e manipolazioni si perviene alle seguente espressione:

c3 = a1 + 1/(a2 + 1/a3) = (a3p2 + p1)/(a3q2 + q1) = p3/q3 con p3 = a3p2 + p1 e q3 = a3q2 + q1.

Analogamente per c4 e c5, dopo opportuni passaggi e manipolazioni, si potrà pervenire anche qui rispettivamente ai seguenti risultati:

c4 = p4/q4 avendo posto p4 = a4p3 + p2 e q4 = a4q3 + q2.

c5 = p5/q5 avendo posto p5 = a5p4 + p3 e q5 = a5q4 + q3.

E così via per tutti le altre ridotte sino a quella in corrispondenza della quale il valore del resto risulta di valore nullo (rn = 0):

cn = pn/qn = (anpn−1 + pn−2)/(anqn−1 + qn−2) = A/B (2).

In generale si dimostra per induzione [Old] che i numeratori pi e qi delle ridotte relative alla frazione continua [a1, a2, a3, a4,........., an−1, an] soddisfano le uguaglianze:

pi = aipi−1 + pi−2 (5)

qi = aiqi−1 + qi−2 (6)

per i = 3, 4, 5,………n con i valori iniziali p1 = a1; q1 = 1; p2 = a2a1 + 1; q2 = a2 (7).

Da quanto illustrato si vede pertanto che si può impostare un algoritmo di tipo iterativo, ad esempio con il loop riportato nel riquadro, una volta posti N = A; D = B e le condizioni iniziali:

i = 2; p1 = a1; q1 = 1; p2 = a1a2 + 1; q2 = a2.

Inizio loop: i = i + 1

r = N − aiD

ai = [N/D]

pi = aipi−1 + pi−2

qi = aiqi−1 + qi−2

Se ri = 0 esci dal loop.

N = D

D = ri

pi−2 = pi−1

pi−1 = pi

qi−2 = qi−1

qi−1 = qi

Torna a inizio loop.

i = n: REM = 0

M.C.D.(A,B) = rn−1

Algoritmo per il calcolo dei valori pi e qi fino alla iterazione i = n in corrispondenza della quale si ha resto rn = 0.

4. Risoluzione della equazione Ax − By = C

4.1 Condizioni di risolvibilità

Si vogliono trovare per x e y i valori interi soddisfacenti la suddetta equazione.

L’equazione può essere scritta così: Ax = By + C, mettendo con ciò in evidenza che y e C rappresentano rispettivamente il quoziente ed il resto della divisione di Ax per B.

Tale equazione si può esprimere anche come congruenza assumendo in tal caso la seguente forma:

Ax ≡ C (mod B) (3b)

e si enuncia dicendo che Ax è congruo a C modulo B.

Quando si trattano congruenze il valore del modulo B è da considerarsi di valore positivo.

Questa espressione può essere anche messa sotto la seguente forma: x = A−1C (mod B).

Per C = 1 si ha x = A−1 (mod B); in questo caso x viene chiamato inverso moltiplicativo di A.

Portando C nel primo membro di (3b) si ha Ax − C ≡ 0 (mod B): si dice allora che Ax − C è congruo a 0 modulo B.

La prima cosa da appurare è vedere se la (3a) o la (3b) ammettono soluzioni.

L’equazione e quindi la corrispondente congruenza sono risolvibili solo se sussiste la seguente condizione [Old]:

C è divisibile per (A,B).

Questa condizione equivale ad una qualsiasi di queste due condizioni:

  • A e B sono primi tra loro.
  • A e B non sono primi tra loro, ma un loro divisore comune è anche divisore di C.

4.2 Risoluzione della equazione Ax − By = 1

Rivolgiamo ora l’attenzione all’equazione Ax − By = 1 dove A e B possono essere degli interi sia positivi che negativi.

Innanzitutto perché l’equazione sia risolvibile tenendo presenti le condizioni dette sopra, occorre che A e B siano primi tra loro e che quindi sia (A,B) = 1 per A e B dello stesso segno e (A,B) = −1 per A e B di segno opposto.

Per i valori generici di pi e di qi si dimostra sempre per induzione (vedi [Old]) che sussiste la seguente relazione:

piqi−1 − pi−1qi = (−1)i.

Applicando l’algoritmo iterativo che è esposto nel riquadro, si esce dal ciclo alla iterazione per cui si ha resto ri = 0; in quest’ultima iterazione che chiameremo iterazione n-esima si sono acquisiti i valori di pn−1, qn−1, pn, qn e per cui vale la relazione pnqn−1 − pn−1qn = (−1)n.

Ma dalla (2) si osserva che A = pn e B = qn, per cui si perviene alla seguente relazione:

pnqn−1 − qnpn−1 = A qn−1 − B pn−1 = (−1)n (5).

Se n è pari si ottiene A qn−1 − B pn−1 = 1. Si può allora vedere immediatamente dal confronto con la (4) che i valori qn−1 e pn−1 sono i valori interi rispettivamente di x e di y che soddisfano l’equazione.

Tuttavia, per tenere conto che A e B possono essere sia positivi che negativi e quindi anche di segno opposto, gli effettivi valori soddisfacenti l’equazione sono dati dalle seguenti formule: x = qn−1/(A,B) e y = pn−1/(A,B) con (A,B) = 1 se A e B sono dello stesso segno e (A,B) = −1 se A e B sono di segno opposto.

Si può mostrare [Old] poi che anche valori di x del tipo x0 + B ⋅ k e i corrispondenti valori di y del tipo y0 + A ⋅ k dove k è un intero positivo o negativo qualsiasi soddisfano anch’essi l’equazione (4).

Anteprima
Vedrai una selezione di 6 pagine su 23
La generazione della chiave privata nell'algoritmo RSA Pag. 1 La generazione della chiave privata nell'algoritmo RSA Pag. 2
Anteprima di 6 pagg. su 23.
Scarica il documento per vederlo tutto.
La generazione della chiave privata nell'algoritmo RSA Pag. 6
Anteprima di 6 pagg. su 23.
Scarica il documento per vederlo tutto.
La generazione della chiave privata nell'algoritmo RSA Pag. 11
Anteprima di 6 pagg. su 23.
Scarica il documento per vederlo tutto.
La generazione della chiave privata nell'algoritmo RSA Pag. 16
Anteprima di 6 pagg. su 23.
Scarica il documento per vederlo tutto.
La generazione della chiave privata nell'algoritmo RSA Pag. 21
1 su 23
Sintesi

Metodo per ottenere la chiave privata nell’algoritmo RSA

Nel documento viene descritto il metodo per ottenere la chiave privata nell’algoritmo RSA a chiave pubblica con l’utilizzo delle congruenze lineari, in quanto queste ultime vengono impiegate, oltre che nel suddetto algoritmo, anche in diversi altri metodi crittografici, come ad esempio nell’algoritmo DSA e nell’algoritmo di El Gamal per la generazione e la verifica della firma digitale. Dopo una introduzione al concetto di frazione continua, a quello di congruenza lineare e di equazioni alle congruenze, si passa ad illustrare un algoritmo per la risoluzione della congruenza lineare Ax ≡ C (mod B) o dell’equazione lineare diofantea A ⋅ x − B ⋅ y = C dove A, B e C sono numeri interi qualsiasi positivi o negativi. Come caso particolare si prende in considerazione la congruenza del tipo Ax≡1 (mod B) per il calcolo della chiave privata.

Dopo una breve premessa viene descritto lo sviluppo di un numero razionale in frazione continua arrivando al calcolo del MCD di due numeri. Si passa quindi ad introdurre l’algoritmo riguardante la risoluzione di questo tipo di equazioni o congruenze attraverso i seguenti passi: calcolo delle ridotte; condizioni di risolvibilità dell’equazione; risoluzione dell’equazione A⋅ x − B ⋅ y = ±1 e quindi dell’equazione più generale A ⋅ x − B ⋅ y = C.

Viene data poi una concisa panoramica dell’impiego negli algoritmi crittografici citati di questo tipo di congruenza, illustrando poi in dettaglio una sua applicazione riguardante il calcolo della chiave privata nell’algoritmo RSA.

Al termine del documento, negli allegati 1 e 2 vengono presentati due programmi in linguaggio QBasic relativi il primo alla risoluzione di congruenze lineari, il secondo al calcolo della chiave privata nell’algoritmo RSA.

D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi