Class HBCIPassportPinTan

  • All Implemented Interfaces:
    java.io.Serializable, HBCIPassport, HBCIPassportInternal
    Direct Known Subclasses:
    HBCIPassportPinTanMemory

    public class HBCIPassportPinTan
    extends AbstractPinTanPassport

    Passport-Klasse für HBCI mit PIN/TAN. Dieses Sicherheitsverfahren wird erst in FinTS 3.0 spezifiziert, von einigen Banken aber schon mit früheren HBCI-Versionen angeboten.

    Bei diesem Verfahren werden die Nachrichten auf HBCI-Ebene nicht mit kryptografischen Verfahren signiert oder verschlüsselt. Als "Signatur" werden statt dessen TANs zusammen mit einer PIN verwendet. Die PIN wird dabei in jeder HBCI-Nachricht als Teil der "Signatur" eingefügt, doch nicht alle Nachrichten benötigen eine TAN. Eine TAN wird nur bei der Übermittlung bestimmter Geschäftsvorfälle benötigt. Welche GV das konkret sind, ermittelt HBCI4Java automatisch aus den BPD. Für jeden GV, der eine TAN benötigt, wird diese via Callback abgefragt und in die Nachricht eingefügt.

    Die Verschlüsselung der Nachrichten bei der Übertragung erfolgt auf einer höheren Transportschicht. Die Nachrichten werden nämlich nicht direkt via TCP/IP übertragen, sondern in das HTTP-Protokoll eingebettet. Die Verschlüsselung der übertragenen Daten erfolgt dabei auf HTTP-Ebene (via SSL = HTTPS).

    Wie auch bei HBCIPassportRDH wird eine "Schlüsseldatei" verwendet. In dieser werden allerdings keine kryptografischen Schlüssel abgelegt, sondern lediglich die Zugangsdaten für den HBCI-Server (Hostadresse, Nutzerkennung, usw.) sowie einige zusätzliche Daten (BPD, UPD, zuletzt benutzte HBCI-Version). Diese Datei wird vor dem Abspeichern verschlüsselt. Vor dem Erzeugen bzw. erstmaligen Einlesen wird via Callback nach einem Passwort gefragt, aus welchem der Schlüssel für die Verschlüsselung der Datei berechnet wird

    See Also:
    Serialized Form
    • Constructor Detail

      • HBCIPassportPinTan

        public HBCIPassportPinTan​(java.lang.Object init,
                                  int dummy)
      • HBCIPassportPinTan

        public HBCIPassportPinTan​(java.lang.Object initObject)
    • Method Detail

      • getFileName

        public java.lang.String getFileName()
        Gibt den Dateinamen der Schlüsseldatei zurück.
        Returns:
        Dateiname der Schlüsseldatei
      • setFileName

        public void setFileName​(java.lang.String filename)
        Speichert den Dateinamen der Passport-Datei.
        Parameters:
        filename -
      • create

        protected void create()
        Erzeugt die Passport-Datei wenn noetig. In eine extra Funktion ausgelagert, damit es von abgeleiteten Klassen ueberschrieben werden kann.
      • read

        protected void read()
        Liest die Daten aus der Passport-Datei ein. In eine extra Funktion ausgelagert, damit es von abgeleiteten Klassen ueberschrieben werden kann. Zum Beispiel, um eine andere Art der Persistierung zu implementieren.
      • saveChanges

        public void saveChanges()
        Description copied from interface: HBCIPassport
        Speichern der Änderungen an den Passport-Daten. Diese Methode sollte eigentlich niemals manuell aus einer Anwendung heraus aufgerufen werden, sondern wird vom HBCI-Kernel benutzt. Das manuelle Aufrufen von saveChanges ist nur dann sinnvoll, wenn irgendwelche Passport-Daten manuell verändert werden (HBCIPassport.setHost(String), HBCIPassport.clearBPD() usw.) und diese Änderungen explizit gespeichert werden sollen.
        See Also:
        HBCIPassport.saveChanges()
      • verify

        public boolean verify​(byte[] data,
                              byte[] sig)
      • encrypt

        public byte[][] encrypt​(byte[] plainMsg)
      • decrypt

        public byte[] decrypt​(byte[] cryptedKey,
                              byte[] cryptedMsg)
      • close

        public void close()
        Description copied from interface: HBCIPassport

        Schließen eines Passport-Objektes. Diese Methode wird normalerweise nicht manuell aufgerufen, da das bereits von HBCIHandler.close() erledigt wird. Wurde jedoch ein Passport-Objekt erzeugt, und das anschließende Erzeugen eines HBCIHandler-Objektes schlägt fehlt, dann ist das Passport immer noch geöffnet und sollte mit dieser Methode geschlossen werden, falls es nicht weiterbenutzt werden soll.

        Am Ende eines Programmes sollte also in jedem Fall entweder ein erfolgreiches HBCIHandler.close() oder wenigstens ein HBCIPassport.close() für jedes erzeugte Passport-Objekt stehen. Das ist vor allem für Passport-Varianten wichtig, die auf einer Chipkarte basieren, da mit dieser Methode die entsprechenden Ressourcen wieder freigegeben werden.

        Specified by:
        close in interface HBCIPassport
        Overrides:
        close in class AbstractHBCIPassport