Das mycore-base Modul bietet mit dem Package org.mycore.crypt Funktionalitäten zum Verschlüsseln von Werten. Ein sinnvolles Einsatzgebiet ist das Verschlüsseln von urheberechtlich geschützten Abstracts oder dem Impactfactor. Diese bleiben für Dritte nicht lesbar, wenn sie per Zufall öffentlich zugreifbar sind. Wenn z.B. ein Entwickler eine Transformation für ein neues Format für OAI entwickelt und dabei nicht beachtet, dass die geschützten Abstracts nicht übertragen werden dürfen, so erhält der OAI Harvester nur die verschlüsselten Werte.
Das zentrale Werkzeug ist abstrakte Klasse MCRCipher. Ein Cipher bietet Methoden um Strings und Byteblöcke zu ver- und entschlüsseln. Die konkrete Implementierung des Verschlüsselungalgorithmus erfolgt in einer von MCRCipher abgeleiteten Klasse. Initial steht AES durch die Klasse org.mycore.crypt.MCRAESCipher zu Verfügung.
Um einen Cipher nutzen zu können muss dieser
In den Properties muss für ein Cipher folgendes definiert werden:
MCR.Crypt.Cipher.keyabstract.class=org.mycore.crypt.MCRAESCipher
MCR.Crypt.Cipher.keyabstract.KeyFile=%Path_of_KeyFile%
Der Prozess des Java Webcontainers muss auf das KeyFile schreibend zugreifen dürfen und das Verzeichnis muss bereits exsistieren.
In den ACLs kann man für einen Cipher die Rechte crypt und decypt vergeben. Mit dem Recht crypt kann man den Cipher nutzen um Werte zu verschlüsseln mit decrypt um sie zu entschlüsseln.
keyabstract | crypt | editors |
keyabstract | decrypt | editors |
Bevor man den Cipher nutzen kann, muss erst der geheime Schlüssel erzeugt und in dem KeyFile gespeichert werden. Die geschieht mir dem Cli-Befehl
generate keyfile for cipher {0}
Dieser Schritt kann entfallen, wenn schon einen KeyFile von einer anderen MyCoRe Anwendung genutzt wird. Durch das Teilen von Schlüsseln in den KeyFiles ist es möglich verschlüsselte Daten eines anderen Repository zu verwenden.
Um in Java Werte zu verschlüsseln, muss man sich mit Hilfe MCRCipherManagers und der ID eine Instanz des Cipher holen. Anschließend kann man mir den Methoden
MCRCipher cipher = MCRCipherManager.getCipher("abstactkey");
String encyrptedValue = cipher.encrypt(value);
String decryptedValue = cipher.decrypt(encyrptedValue);
Um mit XSLT Werte zu verschlüsseln kann man den URI Resolver crypt verwenden.
show cipher configuration
generate keyfile for cipher {0}
overwrite keyfile for cipher {0}
encrypt {0} with cipher {1}
encrypt {0} with cipher {1}