2021.06

Verschlüsselung mit MyCoRe

Allgemeines

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 konfiguriert,
  • die Rechte ACLs hintergelegt,
  • mit der WebCli initialisiert werden.

Konfiguration

In den Properties muss für ein Cipher folgendes definiert werden:

  • Die ID des Ciphers (z.B. keyabstract).
  • Eine von MCRCipher abgeleitete Klasse, in der der verwendete Algorithmus implementiert wurde
  • Der Pfad zum KeyFile, in der der Schlüssel gespeichert wird.

  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.

ACL

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

Initialisierung

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.

Verschlüsseln mit Java

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);

Verschlüsseln mit XSLT

Um mit XSLT Werte zu verschlüsseln kann man den URI Resolver crypt verwenden.

CLI Komandos

show cipher configuration
Das Kommando listet alle Cipher Properties auf.
generate keyfile for cipher {0}
Erstellt einen Schlüssel und speichert ihn im Keyfile. Bricht ab, wenn schon ein Keyfile exsistiert.
overwrite keyfile for cipher {0}
Erstellt einen Schlüssel und überschreibt den Schlüssel im Keyfile.
encrypt {0} with cipher {1}
Verschlüsselt den Wert {0} mit dem Cipher {1} und gibt den Wert in der CLI aus.
encrypt {0} with cipher {1}
Entschlüsselt den Wert {0} mit dem Cipher {1} und gibt den Wert in der CLI aus.