Open-Source-Perle: GNU Crypto Project

Markus Stäuble

Die Probleme der jeweiligen Anwendungsdomäne sind zumeist schon genug und da wird ein Thema häufig in die Ecke gedrängt: die Sicherheit. Wenn es dann darum geht, dieses Problem zu adressieren, entsteht doch immer wieder die Frage mit welchen Mitteln die Umsetzung erfolgen soll. Das Selbermachen ist hier natürlich der denkbar schlechteste Ansatz, denn dann wären zunächst die mathematischen Probleme zu lösen. Somit ist der Wunsch nach einem offenen API, dem man auch vertrauen kann, sehr groß. Ein Kandidat hierfür ist das GNU Crypto Project.

Für offene Implementierungen ist die Projektseite von GNU immer wieder ein beliebter Anlaufpunkt. Auch bei der Suche nach einer passenden Bibliothek für Verschlüsselungsalgorithmen wird man hier fündig. Im Angebot ist hier das GNU Crypto Project (aktuelle stabile Version: 2.0.1). Ein kurzer Blick auf die reichhaltige Algorithmenliste (z.B. DES, 3DES, Rijndael, Blowfish, MD5, SHA-160, RSA) zeigt das breite Spektrum der Bibliothek.

Die Verwendung

In diesem Artikel kann sicherlich nicht die gesamte Funktionalität des Projekts dargestellt werden. Einen ersten Eindruck von der Bibliothek soll ein kleines Beispiel mit dem asymmetrischen Verfahren RSA geben.

//Schluessel erzeugen
RSAKeyPairGenerator generator = new RSAKeyPairGenerator();
HashMap map = new HashMap();
map.put(RSAKeyPairGenerator.MODULUS_LENGTH, new Integer(1024));
generator.setup(map);
KeyPair pair = generator.generate();
//Privater Schluessel
GnuRSAPrivateKey privateKey = (GnuRSAPrivateKey) pair.getPrivate();
//Oeffentlicher Schluessel
GnuRSAPublicKey publicKey = (GnuRSAPublicKey) pair.getPublic();	    
final String text = "hello world";

//Verschluesseln
BigInteger encrypted = RSA.encrypt(publicKey, new BigInteger(text.getBytes()));

//Entschluesseln
BigInteger decrypted = RSA.decrypt(privateKey, encrypted);
final String test = new String(decrypted.toByteArray());
System.out.println(test);
Lizenz

Eine Frage, die immer bei der Verwendung von Open Source gestellt werden muss, darf auch hier nicht fehlen, nämlich die Lizenzfrage. Das GNU Crypto Project wird unter der GPL mit der so genannten „library exception“; zur Verfügung gestellt. D.h., die Bibliothek kann auch im kommerziellen Umfeld verwendet werden.

Alles gut?

Nun die Frage kann vielleicht mit der Frage an die Erwartung beantwortet werden. Das GNU Crypto Project ist eben ein API, das einige Verschlüsselungsalgorithmen anbietet. Nicht mehr, aber auch nicht weniger. Wie bei jeder Bibliothek ist am Anfang etwas Einarbeitung notwendig, damit die Verwendung gut von der Hand geht. Da man, jedenfalls in der Anwendungsentwicklung, nicht täglich mit Sicherheit zu tun hat, ist die Schaffung von kleinen Helferklassen sicherlich ein bedenkenswerter Ansatz, um nicht jedes Mal von neuem mit dem Einarbeitungsaufwand konfrontiert zu sein. An manchen Stellen fehlt dann wirklich noch die Abstraktion von der Mathematik. Denn die direkte Hantierung mit java.math.BigInteger im Falle von RSA ist schon recht gewöhnungsbedürftig.

Falls man an einen Einsatz von GNU Crypto denkt, ist anzumerken, dass auf der Website des Projektes verkündet wird, dass das Projekt mit GNU Classpath zusammengeführt wurde. D.h., für Neuerungen rund um das GNU Crypto Project ist sicherlich dann auch diese Projektseite eine gute Anlaufstelle.

Zum Schluss bleibt das Fazit, dass das GNU Crypto Project vieles abnimmt und durch die Lizenzpolitik in kommerziellen Projekten verwendet werden kann. Somit ist es auf alle Fälle einen Blick wert, am besten verbunden mit einem Beispielprogramm.

    Geschrieben von
    Markus Stäuble
    Kommentare

    Schreibe einen Kommentar

    Deine E-Mail-Adresse wird nicht veröffentlicht.