Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#10

Re: RSA: Privaten Schlüssel schneller berechnen

  Alt 2. Jun 2006, 12:43
Das stimmt ja auch:

1 = U * A + V * B, umgestellt zu unseren Parametern

1 = (E^-1) * E + V * Phi(N)

1 = -83 * 229 + 66 * 288

e^-1 = d = -83

da wir aber im modularem Ring von Phi(N) == 288 arbeiten und das negative Vorzeichen von d = -83 nicht erwünscht ist rechnen wir noch

d = e^-1 mod Phi(N) was bei negativem d identisch ist zu
d = e^-1 + Phi(N) also

d = -83 mod 288 == -83 + 288 = 205

also

d = 205.

So, nun zeige mal den Funktionrumpf deiner erwetereten ggT() Funktion. Diese sollte 2 Eingabeparamater A,B haben und 3 Ausgabeparameter R,U,V.

R = eggt(out U,V, in A,B)

R = U * A + V * B umgestellt auf unsere Variablennamen wäre dies dann

1 = D * E + V * Phi(N) wobei

D = E^-1 ist also

1 = E^-1 * E + V * Phi(N)

und da E^-1 das multiplikative Inverse von E ist muß demzufolge

E^-1 * E = 1 sein. Somit ergibt sich für den Rest der Formel logischerweise

1 = 1 + V * Phi(N) und der formale Teil V * Phi(N) muß selber 0 ergeben damit der Rest der Formel stimmt, also

1 = 1 + 0

Verifizieren wir das

1 = D * E + V * Phi(N) -> 1 == -83 * 229 + 66 * 288 mod Phi(N)

66 * 288 == 19008 mod Phi(N) == 0 mod 288 und

-83 * 229 == -19007 mod Phi(N) == 205 mod 288

Das heist

1.) wir arbeiten in modularen Ringen und das bedeutet das wir JEDE Operation in einer solchen Formel (Kongruenzklasse) immer modulo Phi(N) rechnen müssen. Um den Unterschied zwischen normalen Formel und modularen Formeln hervorzuheben benutzt man das doppelte Gleichheitszeichen.
Beispiel:

1 == d * e mod Phi(N) bedeutet ausgeschrieben

1 mod Phi(N) = ((d mod Phi(N)) * (e mod Phi(N))) mod Phi(N)

und

d == e^-1 mod Phi(N) wäre

d mod Phi(N) = (e mod Phi(N))^-1 mod Phi(N).

2.) der erweiterte ggT() muß also als Rückgabewert immer 1 ergeben, was bedeutet das eine Inversion rechnerisch durchführbar ist. Sollte also 1 != D * E + v * Phi(N) rauskommen, der ggT() also NICHT 1 als Resultat liefern dann ist die Berechnung des modularen multiplikativen Inversen in dem gewählten Ring zum Modul Phi(N) nicht eindeutig. Das bedeutet E ist nicht teilerfremd zu Phi(N). Im Falle von RSA und der bekannten Faktorization von N in die zwei Primzahlen P,Q bedeutet dies das P oder/und Q keine richtigen Primzahlen sind. Liefert der erweiteret ggT() also nicht 1 so wissen wir das unsere Primzahlen P,Q falsch sind.


Fazit:

Du hast

1 == D * E mod Phi(N) in Worten also, D mal E ist kongruent zu 1 mod Phi(N). Das bedeutet D muß identisch zum modularen multiplikativen Inversen von E sein, als D == E^-1 mod Phi(N). Ergo:

1 == D * E mod Phi(N) ist identisch zu
1 == E^-1 * E mod Phi(N) und umgestellt ergibt das

D = E^-1 mod Phi(N).

Der private Decryption Exponent D ist einfach nur das Multiplkative Inverse im modularen Ring Z(N) vom public Encryption Exponenten E.

Da wir zur Berechnung von D die Faktorization von N in P,Q kennen müssen um Phi(N) berechen zu können entsteht eine "Trapdoor" Funktion (Hintertür Funktion). Denn ein Angreifer der aus N den privaten Decryption Exponenten berechnen will muß erstmal Phi(N) berechnen und dazu muß er N in P,Q faktorisieren.

Kennt man P,Q so kennt man Phi(N) und kann über den eggT() sehr einfach D berechnen aus E. Das geht sehr schnell.
Kennt man nur N so muß man N faktorisieren in P,Q was bei goßen P,Q (>= 512 Bit) eben praktisch unmöglich ist.

Eine Trapdoor Funktion ist also eine Funktion die mathematisch beweisbar mindestens 2 Wege bietet um ein Resulat zu berechnen. Der eine Weg, bei dem alle wichtigen Parameter bekannt sind, ist ein sehr leicht mathematisch zu berechnender Weg.
Der andere Weg bei dem bestimmte Parameter NICHT bekannt sind (hier P,Q und D und Phi(P*Q)) ist zwar auch mathemqtisch berechenbar, die dafür nötigen Algorithmen sind aber so komplex das sie mit berechenbar großen Parametern (P,Q) parktisch undurchführbar sind. (bzw. mann kan es versuchen wird aber mit heutiger Technik viele tausende Jahre benötigen).

Das Geheimnis vom RSA ist also diese Trapdoor Funktion und die gezielte Verteilung des RSA Schlüssels in ZWEI Teile: dem privaten Schlüsselteil und dem öffentlichen Schlüsselteil.

Wenn wir also beim RSA vom

öffentlichen Schlüssel E,N und vom
privaten Schlüssel D,N reden

so stimmt das eigentlich garnicht. Denn in beiden Fällen handelt es sich nur um EINEN Schlüssel aber in unterschiedlichen Formen !!

Denn in Wahrheit ist der

öffentliche Schlüssel E, P*Q
private Schlüssel E^-1, P*Q

der RSA Schüssel ist also E und P*Q denn wir können davon ZWEI unterschiedliche Formen ableiten

öffentliche Schlüsselform E und N
private Schlüsselform E^-1 und P*Q

Auf Grund das wir im öffenbtlichen Schlüssel nur E und N publizieren muß ein Angreifer sehr umständlich N faktorisieren in P * Q um dann Phi(P*Q) berechnen zu können und finaly aus E den pivaten Exponneten D = E^-1

Also poste mal den Funktionsrumpf deiner eggT() Funktion, damit ich beurteilen kann ob du die richtige Funktion benutzt.

Gruß Hagen
  Mit Zitat antworten Zitat