C Asymmetrische Verschlüsselung

Die asymmetrische Verschlüsselung benutzt zur Verschlüsselung ein anderes Passwort als zur Entschlüsselung, wobei beide Passwörter durch eine (komplizierte) mathematische Berechnung miteinander verbunden sind. Eine Berechnung des Entschlüsselungs-Passwortes aus dem Verschlüsselungs-Passwort ist nicht möglich. Der Riesenvorteil dieses Verfahrens ist, das nach der Verschlüsselung nur der Inhaber des Entschlüsselungs-Passwortes an die Daten herankommt.

Ein anderer Name für diese Verschlüsselungssysteme ist die „Private-/Public-Key-Kryptographie“, d.h. es wird stets ein Schlüssel-Paar erzeugt und das besteht aus einem privaten („private“) und einem öffentlichen („public“) Schlüssel. Für die spätere Arbeit mit diesen Schlüsseln ist es wichtig, das die Verschlüsselung stets mit dem öffentlichen Schlüssel durchgeführt wird und für die spätere Entschlüsselung der private Schlüssel genutzt wird.

Die „privat-public-Key“ Kryptographie ist ganz eng mit drei Namen verbunden: Ronald L. Rivest, Adi Shamir und Leonard M. Adleman, welche 1977 das sogenannte RSA-Verfahren erfunden haben, welches bis heute verwendet wird.

Aktuell werden derzeit diese 3 asymmetrischen Verschlüsselungsmodelle eingesetzt:

a) RSA-Kryptographie: das Schlüsselpaar wird auf Basis von 2 großen Primzahlen erzeugt und es wird die Tatsache genutzt, das die Multiplikation von 2 Zahlen (relativ) einfach berechenbar ist, die umgekehrte Rechenoperation, die sogenannte Faktorisierung, aber sehr viel schwieriger ist. Ein Beispiel findet Ihr in C01 RSA-Verschlüsselung mit einem String.

b) Diskreter Logarithmus Kryptographie: auch bei diesem Verfahren wird ein Schlüsselpaar auf Basis von großen Primzahlen erzeugt, allerdings wird eine Logarithmus-Routine benutzt. Auch hier ist die Rückwärtsrechnung, d.h. die Suche nach den beiden Primzahlen, nur sehr schwer durchführbar. Für eine Ver- bzw. Entschlüsselung ist derzeit nur ein Algorithmus verfügbar (die sogenannte El Gamal Verschlüsselung). Das passende Beispiel ist unter C04 El Gamal-Verschlüsselung mit einem String zu finden.

c) Elliptische Kurven Kryptographie: Dieses Verfahren wurde Mitte der 1980er Jahre von Victor S. Miller und Neal Koblitz unabhängig voneinander entworfen. Auch bei diesem Verfahren ist es „recht einfach“, einen Punkt auf der Kurve zu bestimmen, umgekehrt aber sehr schwierig von einem Punkt auf die gesamte Kurve zu schließen. Bei der realen Implementierung werdet Ihr aber feststellen, das es eine Vielzahl von nutzbaren Kurven gibt und die richtige Auswahl schwierig ist. Die „EC“-Kryptographie ist sehr beliebt beim Einsatz auf Chipkarten, da die Schlüssellänge deutlich kleiner ist als bei den beiden anderen asymmetrischen Verschlüsselungsverfahren. Das Beispiel ist unter C05 ECIES-Verschlüsselung mit einem String beschrieben.

Die drei Modelle kommen in abgewandelter Form auch bei der elektronischen Unterschrift („digital signature“) sowie beim Schlüsselaustausch zum Einsatz.

Zwei große Nachteile aller drei Verfahren sollen aber nicht unterschlagen werden: zum Einen dauert die Ver- und Entschlüsselung deutlich länger als die symmetrischen Verfahren und zum Anderen ist die Länge des Klartextes begrenzt (z.B. auf 53 Bytes Klartext bei einem 512 Bit RSA-Schlüsselpaar).

Aus diesem Grund wird die asymmetrische Verschlüsselung gerne in Verbindung mit symmetrischen Verfahren genutzt und es entstehen „hybride  Verschlüsselungssysteme„, bei denen der Klartext mit einem symmetrischen Verfahren verschlüsselt wird, der dafür notwendige Schlüssel mittels asymmetrischer Verfahren gesichert wird.

Solltet Ihr Euch unsicher sein, welche Schlüssellängen bei Euch zum Einsatz kommen sollen, hilft Euch u.a. das deutsche Bundesamt für Sicherheit in der Informationstechnik (BSI) weiter. Aktuell findet Ihr unter dem Link https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Publikationen/TechnischeRichtlinien/TR02102/BSI-TR-02102.html eine PDF-Datei, welche Euch wertvolle Hinweise zu dieser Fragstellung gibt.

Alle Quellcodes zur asymmetrischen Verschlüsselung findet Ihr zum Download in meinem Github-Repository, welches Ihr über diesen Link erreicht: https://github.com/java-crypto/C-Asymmetrische-Verschluesselung. Dort findet Ihr auch die Versionen für Java 11.

Letzte Aktualisierung: 18.01.2019