Sprache: Deutsch

tools / rsa

rsa/

Mit einem öffentlichen RSA-Schlüssel verschlüsseln und mit dem privaten entschlüsseln, oder mit dem privaten verschlüsseln und mit dem öffentlichen entschlüsseln. Padding, Schlüsselformat, Ein- und Ausgabeformat und Zeichensatz sind frei wählbar, deine Schlüssel verlassen den Browser nie.

Klartext

Schlüssel

Chiffretext

Verlauf

Nach jeder erfolgreichen Ver- oder Entschlüsselung wird automatisch ein Eintrag gespeichert. Die letzten 20 bleiben erhalten, ausschließlich im Browser dieses Geräts. Schlüssel werden nie gespeichert, entschlüsselter Klartext aber schon – leere den Verlauf daher, wenn du an einem öffentlichen Computer fertig bist.

AES, DES und RSA: Was sie sind und worin sie sich unterscheiden

AES und DES sind symmetrische Verfahren: Zum Ver- und Entschlüsseln dient derselbe Schlüssel, so wie ein Schlüssel eine Tür sowohl auf- als auch abschließt. Sie sind schnell und eignen sich für große Datenmengen; schwierig ist nur, den Schlüssel sicher zur Gegenseite zu bringen.

DES ist ein alter Standard aus den 1970er-Jahren mit nur 56 Bit effektiver Schlüssellänge. Mit spezieller Hardware oder Rechner-Clustern lässt er sich heute per Brute-Force knacken und taugt deshalb nur noch zur Anbindung von Altsystemen, die ihn weiter verwenden. AES hat DES als Standard abgelöst. Es nutzt Schlüssel mit 128, 192 oder 256 Bit, ist derzeit praktisch nicht angreifbar und die erste Wahl zum Verschlüsseln von Daten.

RSA ist asymmetrisch: Es gibt ein Schlüsselpaar. Den öffentlichen Schlüssel kann man an jeden weitergeben, er dient zum Verschlüsseln; den privaten Schlüssel behältst du für dich, mit ihm wird entschlüsselt – wie bei einem Briefkasten, in den jeder Briefe einwerfen kann, den aber nur du aufschließen kannst. Man muss vorab keinen gemeinsamen Schlüssel vereinbaren, dafür ist RSA langsam und kann pro Durchgang nur einige hundert Byte verschlüsseln. In der Praxis kombiniert man beides: RSA verschlüsselt einen zufällig erzeugten AES-Schlüssel für die Gegenseite, und AES verschlüsselt die eigentlichen Daten.

Wie viele Daten kann RSA auf einmal verschlüsseln?

RSA kann immer nur einen kleinen Datenblock verschlüsseln; die Grenze hängt von Schlüssellänge und Padding ab. Bei PKCS1Padding sind es höchstens die Schlüssellänge in Byte minus 11, bei einem 2048-Bit-Schlüssel also 245 Byte. Bei OAEP sind es die Schlüssellänge in Byte minus das Doppelte der Hash-Länge minus 2, bei einem 2048-Bit-Schlüssel mit SHA-256 also 190 Byte. Längere Daten verschlüsselt man üblicherweise mit AES und verschlüsselt dann den AES-Schlüssel mit RSA.

Zuordnung zu Java-Cipher-Namen

Die Namen der Paddings entsprechen denen der Java-Klasse Cipher: Für RSA/ECB/PKCS1Padding wähle PKCS1Padding; für RSA/ECB/OAEPWithSHA-256AndMGF1Padding wähle die dritte Option, denn Java verwendet für MGF1 standardmäßig SHA-1; wenn du mit OAEPParameterSpec eigene Hashes festlegst, wähle OAEPPadding und stelle OAEP-Hash und MGF1-Hash getrennt ein. Auch die Zeichensätze folgen den Regeln von Java, zum Beispiel wird UTF-16 Big-Endian mit vorangestelltem FE FF kodiert.

Warum ist der Chiffretext jedes Mal anders?

Beim Verschlüsseln mit dem öffentlichen Schlüssel fügen sowohl PKCS1Padding als auch OAEP dem Padding Zufallsbytes hinzu; derselbe Text ergibt also jedes Mal einen anderen Chiffretext, und jeder davon lässt sich mit dem privaten Schlüssel entschlüsseln. Das ist normal. Die Verschlüsselung mit dem privaten Schlüssel nutzt ein festes Padding, ihr Ergebnis ist daher immer gleich. OAEP funktioniert nur für Verschlüsselung mit dem öffentlichen und Entschlüsselung mit dem privaten Schlüssel.

Unterstützte Schlüsselformate

PEM-Schlüssel können BEGIN PUBLIC KEY, BEGIN RSA PUBLIC KEY, BEGIN PRIVATE KEY oder BEGIN RSA PRIVATE KEY sein, du kannst auch nur den Base64-Teil dazwischen einfügen. Ein Hex-Schlüssel ist derselbe Inhalt in hexadezimaler Schreibweise. Passwortgeschützte private Schlüssel müssen zuerst entschlüsselt werden. Ist als Schlüsseltyp „Öffentlicher Schlüssel“ gewählt, kannst du auch einen privaten Schlüssel einfügen; verwendet wird dann dessen öffentlicher Teil.

Häufige Fragen

Was tun, wenn die Entschlüsselung mit „Der Schlüssel passt nicht, Schlüsseltyp oder Padding sind falsch“ fehlschlägt?

Prüfe der Reihe nach drei Dinge. Erstens: Gehört der Schlüssel zum öffentlichen Schlüssel, mit dem verschlüsselt wurde? Inhalte, die mit einem öffentlichen Schlüssel verschlüsselt wurden, lassen sich nur mit dem dazu passenden privaten Schlüssel öffnen. Zweitens muss als Schlüsseltyp „Privater Schlüssel“ gewählt sein. Drittens muss das Padding mit der verschlüsselnden Seite übereinstimmen; bei OAEPPadding müssen außerdem OAEP-Hash und MGF1-Hash gleich sein. Prüfe zuletzt das Eingabeformat, denn auch vertauschtes hex und base64 lässt die Entschlüsselung scheitern.

Was tun, wenn das Schlüsselformat abgelehnt wird oder die Meldung erscheint, dass CERTIFICATE nicht unterstützt wird?

Prüfe zuerst, ob „Schlüsselformat“ zu dem passt, was du eingefügt hast: Wähle pem für Text, der mit -----BEGIN beginnt, und hex für eine lange Hexadezimalzeichenfolge; bei falscher Wahl erscheint meist ein Hinweis, auf welches Format du umstellen sollst. Das PEM muss einen öffentlichen oder privaten RSA-Schlüssel enthalten, ein Zertifikat (BEGIN CERTIFICATE) lässt sich nicht direkt verwenden; den öffentlichen Schlüssel kannst du vorher mit openssl x509 -in cert.pem -pubkey -noout herausziehen. Werden Zertifikat und Schlüssel zusammen eingefügt, wird der Schlüsselblock automatisch herausgesucht.

Mein privater Schlüssel hat ein Passwort, und es heißt, ich solle ihn zuerst entschlüsseln. Was tun?

Passwortgeschützte private Schlüssel (BEGIN ENCRYPTED PRIVATE KEY oder eine Zeile Proc-Type: 4,ENCRYPTED im PEM-Header) werden nicht unterstützt. Entferne das Passwort zuerst auf deinem eigenen Rechner und füge den Schlüssel dann ein, zum Beispiel mit openssl rsa -in Originaldatei -out NeueDatei und Eingabe des Passworts, wenn danach gefragt wird. Die entstandene Datei ist ein ungeschützter privater Schlüssel, geh danach sorgfältig damit um.

Es heißt, der Inhalt überschreite das Limit. Wie viele chinesische Zeichen kann ich verschlüsseln?

Das Limit zählt Bytes, nicht Zeichen. Ein 2048-Bit-Schlüssel mit PKCS1Padding erlaubt höchstens 245 Byte, und ein chinesisches Zeichen belegt in UTF-8 3 Byte, das sind etwa 81 Zeichen; mit dem Zeichensatz GBK belegt ein Zeichen 2 Byte, also etwa 122. Beim Verschlüsseln zeigt das Schlüsselfeld nach dem Einfügen eines Schlüssels neben seiner Überschrift „max. N Byte pro Verschlüsselung“ für den aktuellen Schlüssel und das aktuelle Padding. Wird das Limit überschritten, erscheint ein Fehler; der Inhalt wird nicht automatisch in Blöcke aufgeteilt.

Wie entschlüssele ich Daten, die im Browser mit JSEncrypt oder Web Crypto verschlüsselt wurden?

JSEncrypt verwendet PKCS1Padding und gibt Base64 aus; wähle hier also PKCS1Padding und als Eingabeformat base64. RSA-OAEP in der Web Crypto API des Browsers nutzt für OAEP und MGF1 denselben Hash; wähle hier daher OAEPPadding und stelle OAEP-Hash und MGF1-Hash auf denselben Wert, zum Beispiel beide SHA256. Setze in beiden Fällen den Schlüsseltyp auf „Privater Schlüssel“.

Was bedeutet „länger als der Schlüssel“ oder „außerhalb des Wertebereichs dieses Schlüssels“?

Ein RSA-Chiffretext ist so lang wie der Schlüssel in Byte: 256 Byte bei einem 2048-Bit-Schlüssel, in Hex 512 Zeichen, nie länger. Beim Entschlüsseln zeigt das Schlüsselfeld neben seiner Überschrift „Chiffretext: N Byte“ an; vergleiche das mit der Byte-Anzahl neben dem Eingabefeld. Ein Chiffretext, der länger ist als der Schlüssel, bedeutet meist ein falsches Eingabeformat oder zu viel kopierten Inhalt; ein Wert außerhalb des Bereichs heißt, dass der Chiffretext nicht mit dem zu diesem Schlüssel gehörenden öffentlichen Schlüssel verschlüsselt wurde – nimm dann den richtigen Schlüssel.

Kann ich Verschlüsseln mit dem privaten und Entschlüsseln mit dem öffentlichen Schlüssel zum Signieren und Prüfen von Signaturen nutzen?

Nicht direkt. Die Verschlüsselung mit dem privaten Schlüssel wendet den privaten Schlüssel hier nur mit PKCS1Padding auf deine Eingabe an und bildet keinen Hash, während eine Signatur wie SHA256withRSA die Daten zuerst hasht und den Hash dann in eine feste Struktur (DigestInfo) einpackt. Entschlüsselst du hier eine Standardsignatur mit dem öffentlichen Schlüssel, erhältst du daher diese Struktur und nicht den Originaltext. Zum Signieren oder Prüfen verwende eine Bibliothek oder ein Tool, das Algorithmen wie SHA256withRSA unterstützt.

Was speichert der Verlauf, und wird er hochgeladen?

Er liegt nur im localStorage des Browsers auf diesem Gerät und wird nie hochgeladen; der Seitencode stellt keinerlei Netzwerkanfragen. Nach jeder erfolgreichen Ver- oder Entschlüsselung kommt ein Eintrag dazu, höchstens 20 werden behalten, und Einträge, deren Eingabe oder Ergebnis über 20.000 Zeichen lang ist, werden nicht aufgezeichnet. Ein Eintrag enthält die Parameter, Eingabe und Ergebnis sowie einen aus dem Schlüssel berechneten 8-stelligen Fingerabdruck (die ersten 8 Hexzeichen des SHA-256 des Moduls, hinter dem # in jedem Eintrag; daran erkennt man, ob es derselbe Schlüssel ist), aber nie den Schlüssel selbst. Nach einem Klick auf „Übernehmen“ musst du den Schlüssel also erneut einfügen. Entschlüsselter Klartext wird gespeichert; an einem öffentlichen Computer klickst du nach der Nutzung daher auf „Verlauf leeren“.