RSA

Schlüsselerzeugung

Wir wählen mit Hilfe eines Primzahltest verschieden Primzahlen pA,qAp_A,q_A und berechnen

NA=pAqA.N_A=p_Aq_A.

Dabei sollten pAp_A und qAq_A so gewählt werden (groß), sodass man die Primfaktorzerlegung von NAN_A praktisch nicht berechnen kann.

Außerdem wählen wir eine Zahl eA>1e_A>1 mit

ggT(eA,(pA1)(qA1))=1ggT(e_A, (p_A-1)(q_A-1))=1

und berechnen zum Beispiel mit Hilfe des erweiterten euklidischen Algorithmus ein dAd_A mit

eAdA1mod(pA1)(qA1).e_Ad_A\equiv 1 \bmod (p_A-1)(q_A-1).

Also Inverses von eAe_A.

Der Public Key ist das Tupel (NA,eA)(N_A, e_A), wobei (NA,dA)(N_A, d_A) der Private Key ist.

Verschlüsselung

Wir besorgen uns einen öffentlichen Schlüssel (NA,eA)(N_A, e_A) und wandeln unseren Klartext in eine Zahlenfolge a1,a_1,\dots mit aiNA1a_i\leq N_A-1 um.

Dann berechnen wir mit der Square-And-Multiply-Methode den Chiffretext mit

bi=aieAmodNA.b_i=a_i^{e_A}\bmod N_A.

Entschlüsselung

Wir erhalten eine Zahlenfolge b1,b_1,\dots und berechnen mit unserem privaten Schlüssel (Na,dA)(N_a, d_A) mit der Square-And-Multiply-Methode den Klartext mit

ai=bidAmodNA.a_i=b_i^{d_A}\bmod N_A.

Die Zahlenfolge muss dann nur noch in Text umgewandelt werden.

Anwendung

Das BSI empfiehlt eine Schlüssellänge NAN_A von 3000 Bits.

Es ist bis heute kein Verfahren bekannt um

xebmodNx^e \equiv b \bmod N

bei Kentniss von NN und ee für bb zu lösen, wenn man die Faktorisierung von NN nicht kennt.

Ansonsten kann man mit dem euklidischen Algorithmus ein dd mit

ed1mod(p1)(q1)e d \equiv 1 \bmod (p-1)(q-1)

berechnen (Modulo Invertierbarkeit). Dabei ist

bdmodNb^d\bmod N

eine Lösung der Gleichung. Auch den privaten Schlüssel kann man ohne Faktorisierung nicht berechnen.