BouncyCastle: RSA-Verschlüsselung unter Android

Die Mathematik von RSA übernimmt unter Android die Systembibliothek BouncyCastle. Bei der Implementierung stolperte ich über einige wenig intuitive Interfaces.

Artikel verschenken
In Pocket speichern vorlesen Druckansicht 2 Kommentare lesen
RSA-Verschlüsselung unter Android

(Bild: Albert Hulm)

Lesezeit: 7 Min.
Inhaltsverzeichnis

Asymmetrische Verschlüsselung wie RSA finde ich unglaublich praktisch und mathematisch faszinierend. Beispielsweise kann meine App in Millisekunden ein neues Schlüsselpaar erzeugen und den öffentlichen Schlüssel bedenkenlos durchs Internet verschicken. Mit diesem Schlüssel kann irgendein anderer Rechner, zum Beispiel der Server meines bereits erwähnten Cloud-Datenbank-Projekts "Pinyto", zweifelsfrei überprüfen, dass eine Nachricht von meiner App kommen muss und kein Hacker sie manipuliert hat.

Umgekehrt besitzt mein Server auch ein Schlüsselpaar, und mit dem Schlüssel sorgt meine App dafür, dass die Antwort-Nachricht nur von meinem Server gelesen werden kann. Dieses Prinzip nutzt die Authentifizierung bei Pinyto, meinem Beispiel für diesen Artikel.

Pina programmiert

Im Prinzip ist RSA ganz einfach: Schlüssel entstehen aus sehr großen Primzahlen (N=p·q beim öffentlichen Schlüssel und d beim Privaten) und einem Exponenten e (auch eine Primzahl). e muss nicht besonders groß sein, weshalb eigentlich immer 65537 gewählt wird. Mit diesen Werten kann man ziemlich schnell einen symmetrischen Schlüssel oder den Hash einer Nachricht potenzieren und das Ergebnis Modulo N rechnen. Um herauszufinden, wie das Ergebnis entstand, müsste man allerdings eine Primfaktorzerlegung für Zahlen mit 4096 Bit (N und d) berechnen, was auch mit Großrechnern Jahrzehnte dauert. In der Praxis heißt das, dass man Schlüssel in Form zweier dieser langen Zahlen speichern muss, plus das kleine e.

Das war die Leseprobe unseres heise-Plus-Artikels "BouncyCastle: RSA-Verschlüsselung unter Android". Mit einem heise-Plus-Abo können sie den ganzen Artikel lesen und anhören.