Neues Storage-Backend fuer die Passport-Dateien

39 views
Skip to first unread message

Olaf Willuhn

unread,
Feb 5, 2019, 11:14:39 AM2/5/19
to hbci4java
Hallo zusammen,

falls ihr die Commits im Repository verfolgt, habt ihr vielleicht schon mitgekriegt - ich habe jetzt ein neues Storage-System eingebaut. Das Laden und Speichern der Daten aus den Passport-Dateien ist jetzt zum einen nicht mehr direkt im Passport implementiert sondern in der neuen Klasse "PassportStorage". Diese kapselt das ganze Lesen und Schreiben der Daten. Somit sind auch komplett eigene Verfahren zur Speicherung der Passport-Dateien moeglich - zum Beispiel direkt in einer Datenbank. PassportStorage ist "pluggable" und kann per ServiceLoader (https://docs.oracle.com/javase/7/docs/api/java/util/ServiceLoader.html) um Support fuer weitere Dateiformate ergaenzt werden. Ebenso ist damit die Ver- und Entschluesselung der Datei nicht mehr in jedem Passport separat implementiert sondern einmal an zentraler Stelle. Bei der Gelegenheit habe ich gleich ein neues und versioniertes Dateiformat "AESFormat" fuer die Passport-Dateien eingefuehrt, welches eine aktuelle Verschluesselung per AES verwendet (ACHTUNG: Java 8 oder niedriger hat noch keinen Support fuer AES-256. Dort muss entweder ein Security-Provider verwendet werden, der das unterstuetzt (z.Bsp. BouncyCastle) oder die JCE Unlimited Strength Juristiction Policy Files muessen installiert werden - siehe https://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html - ansonsten macht HBCI4Java ein Fallback auf das alte "LegacyFormat", welches das identische Verhalten von vorher implementiert).

Migration auf das neue Format:
Insofern auf dem Rechner das AESFormat verfuegbar ist (also wenn Java 9 oder hoeher erwendet wird oder die JCE-Unlimited Strength Extensions installiert sind oder wenn ein eigener Security-Provider wie BouncyCastle verwendet wird), dann findet beim naechsten Schreiben der Passport-Datei eine automatische Konvertierung auf das neue AESFormat statt. Bei PIN/TAN- und DDV-Passports ist das unkritisch, weil die Passport-Dateien ja bei Bedarf einfach gelöscht werden können und HBCI4Java die UPD/BPD-Daten automatisch neu von der Bank abruft. Bei HBCI4Java-Schluesseldateien aber fuehrt das zu einer Aenderung das Dateiformats, die bewirkt, dass die Schluesseldatei anschliessend nicht mehr mit aelteren HBCI4Java-Versionen gelesen werden kann! Dafür ist das neue Format aber sicherer und zukunftfähig (weil mit Datei-Header zur Format-Erkennung versehen, versioniert und mit einem zeitgemaesseren Verschluesselungsalgorithmus geschuetzt). Wenn ihr nicht wollt, dass die HCBI4Java-Schlüsseldateien automatisch konvertiert werden, dann setzt bei der Initialisierung von HBCI4Java folgenden Parameter:

HBCIUtils.setParam("passport.format.HBCIPassportRDHNew", "LegacyFormat");

Damit werden DDV- und PIN/TAN-Passports automatisch in das neue Format konvertiert, Schluesseldateien aber erstmal noch nicht. Wenn ihr die Konvertierung der Schluesseldateien durchfuehren wollt, dann lasst den Parameter entweder weg oder verwendet stattdessen:

HBCIUtils.setParam("passport.format.HBCIPassportRDHNew", "AESFormat");

Erstellt von der Schluesseldatei aber vorher eine Sicherheitskopie.


Reply all
Reply to author
Forward
0 new messages