RSA Standard: Difference between revisions

From
Jump to navigation Jump to search
Line 13: Line 13:
Das '''RSA'''-Verfahren ist nach seinen Entwicklern Ron '''R'''ivest, Adi '''S'''hamir und Leonard '''A'''dleman benannt. Es wurde
Das '''RSA'''-Verfahren ist nach seinen Entwicklern Ron '''R'''ivest, Adi '''S'''hamir und Leonard '''A'''dleman benannt. Es wurde
1977 erstmalig am MIT veröffentlicht und war eine der ersten größer angelegten Entwicklung im Bereich der asymmetrischen Kryptographie.
1977 erstmalig am MIT veröffentlicht und war eine der ersten größer angelegten Entwicklung im Bereich der asymmetrischen Kryptographie.
1983 wurde dem MIT das US Patent anerkannt. RSA ist bis heute weit verbreitet im Einsatz. Modernere Verfahren, die für spezielle Anwendungsbereiche konzipiert sind, ergänzen bzw. ersetzen RSA , z.B. [http://http://en.wikipedia.org/wiki/Elliptic_Curve_Cryptography Elliptic Curve DSA] (ECDSA) welches bei vergleichbarer Sicherheit erheblich weniger Ressourcen für Berechnung und Speicherung benötigt.
1983 wurde dem MIT das US Patent anerkannt. RSA ist bis heute weit verbreitet im Einsatz. Modernere Verfahren, die für spezielle Anwendungsbereiche konzipiert sind, ergänzen bzw. ersetzen RSA , z.B. [http://en.wikipedia.org/wiki/Elliptic_Curve_Cryptography Elliptic Curve DSA] (ECDSA) welches bei vergleichbarer Sicherheit erheblich weniger Ressourcen für Berechnung und Speicherung benötigt.



== Schlüsselerzeugung ==
== Schlüsselerzeugung ==

Revision as of 10:28, 24 July 2007

Allgemein

Der RSA-Standard gehört zur Gruppe der asymmetrischen Kryptographie-Verfahren, d.h. es gibt 2 #Schlüssel um einen Datensatz zu verschlüsseln bzw. einen chiffrierten Text zu entschlüsseln. Man unterscheidet hierbei den #öffentlichen Schüssel und den #privaten Schlüssel. Die Schlüssel sind mathematisch so konstruiert, das sie jeweils die Umkehroperation des anderen darstellen. Aus diesem Grund eignet sich das RSA-Verfahren sowohl für das Verschlüsseln von Daten als auch das digitale Signieren. RSA ist ein deterministisches Verfahren, d.h. gleiche Eingaben erzeugen stets gleiche Ausgaben. Aufgrund dieser Eigenschaft, zusammen mit Problemen bei sehr kurzen Nachrichten oder kleinen Exponenten, wird RSA in der Praxis durch weitere #Schemata ergänzt.

Geschichte

Das RSA-Verfahren ist nach seinen Entwicklern Ron Rivest, Adi Shamir und Leonard Adleman benannt. Es wurde 1977 erstmalig am MIT veröffentlicht und war eine der ersten größer angelegten Entwicklung im Bereich der asymmetrischen Kryptographie. 1983 wurde dem MIT das US Patent anerkannt. RSA ist bis heute weit verbreitet im Einsatz. Modernere Verfahren, die für spezielle Anwendungsbereiche konzipiert sind, ergänzen bzw. ersetzen RSA , z.B. Elliptic Curve DSA (ECDSA) welches bei vergleichbarer Sicherheit erheblich weniger Ressourcen für Berechnung und Speicherung benötigt.

Schlüsselerzeugung

Als Asymmetrisches Verfahren nutzt RSA ein Schlüsselpaar, bestehend aus einem öffentlich zugänglichen Schlüssel und dem dazu gehörigen geheimen privaten Schlüssel. Üblicherweise erzeugt ein Pseudo-Zufallsgenerator mindestens 2 sehr große Primzahlen, mit deren Hilfe dann die Schlüssel berechnet werden.

Der öffentliche Schlüssel besteht aus 2 Komponenten:

n RSA modulus, mit n element von N+ e RSA öffentlicher Exponent, mit e element von N+

n ist das Produkt von u verschiedenen geheim gehaltenen [Primzahlen] ri, so das gilt:

n=Prod(ri), ri =1,2..u für u>=2

e ist eine ganze Zahl im Bereich 3<=e<=n-1 und es muss gelten:

ggT(e,lambda(n))=1 mit lambda(n)=kgv(r1-1,..,ru-1)


In der einfachsten Ausführung werden nur 2 Primzahlen für die Bildung von n verwendet. r1 und r2 werden dann auch als p bzw. q bezeichnet. Heute übliche Schlüssellängen sind im Bereich von 1024-4096 bit.

Es gibt 2 gängige Darstellungen für den privaten Schlüssel. Die Erste besteht wieder aus 2 Komponenten:

n RSA modulus, mit n element von N+ d RSA privater Exponent, mit d element von N+

Der private Exponent d wird aus den zuvor gewählten geheimen Primzahlen berechnet, so das gilt:

e*d mod lambda(n)=1

Die zweite Darstellung verwendet ein Quintuple (p,q,dP,dQ,qInv) sowie eine Sequenz aus Triplets (ri,di,ti) i=3..u für jede weitere Primzahl. Weiterhin soll gelten:

e*dP mod (p-1)=1 e*di mod (ri-1)=1 e*dQ mod (q-1)=1 Ri*ti mod ri =1 mit Ri=r1*r2*ri-1 q*dInv mod p=1

Mit Hilfe des Chinesischen Restsatzes kann die Berechnung bei 3 oder mehr Primfaktoren optimiert werden.


Signieren & Verifizierung

Beim Signieren mit RSA nutzt der Absender seinen eigenen privaten RSA-Schlüssel K, um aus der Nachricht m eine Signatur s zu erzeugen. Zuerst wird die Nachricht m dabei in ein String aus ganzen Zahlen umgewandelt. Bei Signaturen wird meist noch zusätzlich ein Hashwert über die gesamte Nachricht gebildet, da eine Rekonstruktion der Nachricht nicht erforderlich ist. Es soll nur die Authentizität der Nachricht sicher gestellt sein. Für die Nachricht m muss in jedem Fall die Eigenschaft 0<=m<=n-1 erfüllt sein, sonst wäre eine Dechiffrierung mit dem öffentlichen Schlüssel nicht möglich.

Bei nur 2 Primfaktoren und dem Schlüssel K=(n,d) gilt:

s=m^d mod n

Für beliebig viele Primfaktoren und K = (p,q,dP,dQ,qInv)(ri,di,ti) i=3..u kann folgender Algorithmus verwendet werden:

  1. s1=m^dP mod p und s2=m^dQ mod q
  2. Wenn u>2, si=m^di mod ri
  3. h=(s1-s2)*qInv mod p
  4. s=s2+q*h
  5. Wenn u>2, R=r1 und for i=3..u do

R=R*ri-1 h=(si-s)ti mod ri s=s+R*h

Für die Verifizierung der Signatur nutzt der Empfänger den öffentlichen Schlüssel des Absenders K= (n,e). Es wird einfach die Umkehroperation auf die Signatur s ausgeführt, um die Nachricht m wieder herzustellen.

m = s^e mod n

Zur Veranschaulichung ist hier nochmal der ganze Ablauf für 2 Primfaktoren p und q dargestellt. <Bild>


Schemata für Signaturen

Durch die Einfachheit der grundlegenden mathematischen Operation ist RSA allein nur bedingt anwendbar. Zu klein gewählte Exponenten oder Nachrichtenlängen könnten die Modulo-Operation negieren. Die e^th Wurzel zu berechnen würde in dem Fall schon eine Lösung bedeuten. Auch ist das rein deterministische Verhalten ein möglicher Angriffspunkt. In der Praxis wird RSA deshalb mit weiteren Algorithmen, sgn. Signaturenschemata kombiniert. Diese erzeugen mit Hilfe von z.B. Hashfunktionen und Zufallselementen aus den Nachrichten Zeichenketten passender Größe, welche dann mit RSA signiert werden können.

Ein rein deterministischen Ansatz stellt das EMSA-PKCS1-v1_5 Schema dar. Er eignet sich für sehr große Nachrichten, je nach gewählter Hashfunktion z.B. SHA-1: 2^64-1 bits. Die Signatur wird nicht direkt aus der zu signierenden Nachricht M erzeugt. Es wird erst eine Encoded Message EM generiert (siehe Abbildung), welcher die ursprüngliche Nachricht nur noch als Hashwert enthält. <bild> DER steht für Distinguished Encoding Rules, ein je nach Implementierung festgelegtes Informationsset, welches die verwendete Hashfunktion und andere Informationen enthält. Um die Nachricht verifizieren zu können, wird neben dem obligatorischen öffentlichen Schlüssel auch die Nachricht selbst benötigt, da hier keine Nachrichtenrekonstruktion möglich ist. Zuerst wird aus der Signatur die EM berechnet. Mit Hilfe der bekannten Nachricht M und der bekannten Hashfunktion wird eine neuer Encoded Message EM´ erzeugt und anschließend mit EM verglichen. Bei gültiger Signatur sollten beide gleich sein.

Das EMSA_PSS Schema nutzt eine Zufallskomponente bei der Erstellung der EM für zusätzliche Sicherheit. Erst wird wieder ein Hashwert aus der Nachricht M erzeugt. Kombiniert mit einem Zufallswert (salt) wird ein zweites Mal ein Hashwert H berechnet, welcher dann den ersten Teil des EM bildet. Der Zufallswert selbst wird mit Hilfe einer sgn. Mask Generation Function MGF und dem zweiten Hashwert H verschlüsselt.(Abbildung) <Bild>

Bei der Verifikation wird zuerst mit Hilfe der rekonstruierten EM der Zufallswert (salt) zurück gerechnet. Anschließend wird wie beim Signieren ein Hashwert H´ berechnet und mit H verglichen. Auch hier ist für die Verifikation die unverschlüsselte Nachricht nötig.


Sicherheit von RSA

Die Sicherheit von RSA basiert auf 2 mathematischen Problemen. Zum einen ist das die Faktorisierung, also das zerlegen sehr großer Zahlen in ihre Primfaktoren. Zum anderen besteht das Problem, die e^th Wurzel modulo n zu finden. Bis jetzt ist kein Algorithmus bekannt, der diese Probleme in polynomialer Zeit lösen könnte. 2005 gelang es, eine 663bit große Zahl in ihre Primfaktoren zu zerlegen. Hierfür war jedoch ein erheblicher Aufwand und Zeit nötig, der in keiner Relation zu den gängigen Zeiten steht, die ein bestimmter RSA-Schlüssel gültig ist. Auch wenn die Entwicklung immer schnellerer Rechner abzusehen ist, dürfte die Faktorisierung auch weiterhin ein Problem sein. Nicht zuletzt besteht immer die Möglichkeit, die Schlüssellängen weiter zu erhöhen, so das eine Lösung für den Dauer der geplanten Verwendung eines bestimmten Schlüssels auszuschließen ist. Was neue Algorithmen oder technische Entwicklungen (z.b. Quantencomputing) betrifft, bestehen hier mittel- und langfristig gewisse Risiken.

Allerdings haben diverse Angriffe in der Vergangenheit gezeigt, das eine Dechiffrierung auch ohne Wissen der Primfaktoren möglich ist. RSA zeigt eine gewisse Verwundbarkeit gegenüber Chosen ciphertext attacks. Dabei werden gefälschte chiffrierte Nachrichten generiert . Durch Analyse der entschlüsselten Fälschungen wird versucht, Informationen über den verwendeten Schlüssel zu gewinnen.

Quellen

PKCS#1 v2.1 RSA Cryptography Standard

Wikipedia:RSA