Apache Cordova Kryptographie Plugin

erschienen in #IT-Sicherheit, Mobil & Cloud vom 21.07.2015

In diesem Projekt wurde ein Android Plugin für das Cross-Plattform Framework Apache Cordova implementiert. Dieses Plugin bietet kryptographische Funktionen über eine zur Web Crypto API identen Schnittstelle an. Schlüsselmaterial wird dabei im Schlüsselspeicher des mobilen Gerätes abgelegt. Da der Schlüsselspeicher bei vielen Android Geräten unter Verwendung eines Secure Element realisiert wurde, ergibt sich somit ein besserer Schutz für Schlüsselmaterial gegen Softwareangriffe.

Implementierung

Bei der Implementierung des Kryptographie Plugins wurde der Fokus auf Funktionen gelegt, die eine Ablage von Schlüsselmaterial erfordern. Die Berechnung von Hashwerten beispielsweise wurde nicht im Kryptographie Plugin umgesetzt, da dazu im Browser zur Verfügung stehende Funktionen verwendet werden können.

Um die Verwendung der kryptographischen Funktionen mit der Web Crypto API zu vereinheitlichen, wurde eine Provider Struktur eingeführt. Dabei kann die jeweilige Implementierung der Web Crypto API anhand eines Provider Namens instanziert werden. Dadurch können parallel sowohl Funktionen der im Browser implementierten Web Crypto API als auch des Kryptographie Plugins innerhalb einer Applikation verwendet werden. Aktuell werden zwei Provider unterstützt: cordova-iaik und w3c.

  • Die Instanzierung eines Cordova-Providers erfolgt durch folgenden Aufruf:
    var cordovaCryptoApi = window.getCryptoProviderByName("cordova-iaik");
  • bzw. für den W3C-Provider:
    var w3cCryptoApi = window.getCryptoProviderByName("w3c");.

Die Web Crypto API gibt das Format von CryptoKey Objekten vor, die als Keyhandle für das eigentliche Schlüsselmaterial dienen. Dieses CryptoKey Objekt wurde um das Feld Id erweitert. Der darin gesetzte Identifikator wird benötigt, um die in JavaScript zur Verfügung stehenden Keyhandle mit dem in der KeyChain abgelegten Schlüsselmaterial zu assoziieren. Die in cordova-crypto-plugin.zip beigelegte Datei README.txt beinhaltet nähere Informationen zur Verwendung des implementierten Providers.

Das Kryptographie Plugin steht aktuell nur für die Android Plattform zur Verfügung. Für die native Implementierung der kryptographischen Methoden wurden die vom IAIK angebotenen Kryptographie Bibliotheken IAIK-JCE und ECCelerate verwendet.

Zusätzlich wurde die Web Crypto API Schnittstelle um den Scrypt Algorithmus zur Ableitung kryptographischer Schlüssel aus einem Passwort erweitert. Dabei wird aktuell eine von BouncyCastle angebotene Implementierung des Scrypto Algorithmus verwendet.
Nachfolgende Tabelle, bietet eine Übersicht über die im Kryptographie Plugin implementierten Methoden.

Tabelle umgesetzter Krypto-Methoden

Lizenz

Dieses Projekt ist unter EUPL Version 1.1 lizenziert. Beim Cordova Kryptographie Plugin kommen die IAIK-Toolkits IAIK-Java Cryptography Extension und IAIK ECC zum Einsatz. Diese Komponenten sind im kommerziellen Umfeld kostenpflichtig, für Forschung und Ausbildung sind kostenlose Lizenzen verfügbar. Eine Evaluierungsversion der beiden Bibliotheken wurde im Ordner cordova-crypto-plugin/src/android/libs beigelegt.
Für die SCrypt Schlüsselableitungsfunktion wurde BouncyCastle verwendet. Die Java Bibliothek BouncyCastle ist unter der MIT Lizenz lizenziert und wurde im Ordner cordova-crypto-plugin/src/android/libs beigelegt.