= OpenHBCI =

HBCI ist ein Datenübertragungsstandard, der von deutschen Banken
entwickelt wurde, um HomeBanking-Bankgeschäfte erledigen zu können.
Er hat sich in Deutschland weitgehend etabliert. Unter Linux gibt
es eine Implemetierung namens OpenHBCI
(http://openhbci.sourceforge.net). Diese unterstützt leider nicht
alle Verschlüsselungs- und Authentifizierungsverfahren. ''Näheres
dazu gibts auf der Website. In der Praxis sind die beiden
unterstützten Verfahren mit DDV-Karten und RDH-Dateien (Disketten)
jedoch wohl recht weit verbreitet. Also keine Angst!''

== Funktionsweise ==

Im Prinzip funktioniert die Authentifizierung per HBCI ungefähr so:
Die Bank schickt dem Kunden einen sog. "INI-Brief". In diesem steht
eine Kundennummer und ein Hash mit mehreren Hex-Zahlen. Der Kunde
nimmt nun sein Banking-Programm, trägt dort die Kundennummer, BLZ
und den Namen des Banken-HBCI-Servers ein. Dieses Programm besorgt
sich nun übers Netz den öffentlichen Schlüssel der Bank. Dieser
sollte anhand des Hashs aus dem INI-Brief der Bank verglichen
werden (Stimmt er überein, hat kein Hacker den Bank-Server
übernommen.). Danach erzeugt das Programm einen eigenen (geheimen)
Schlüssel für den Kunden und sendet diesen der Bank. Daraufhin wird
ein INI-Brief für den Kunden erzeugt und ausgedruckt. Den
unterschreibt der Kunde (sozusagen "rechtsgültig") und schickt ihn
der Bank. In diesem steht ein Hashwert, den die Bank nun mit dem
Schlüssel vergleicht, den sie übers Netz bekommen hat. Stimmt er
überein, ist die Authentifizierung abgeschlossen. Der
Bankmitarbeiter kann den HBCI-Zugang für das Konto freigeben.

Nun kann man alle gängigen Abfragen und Transaktionen online
durchführen. Der private Schlüssel ist immer nochmal mit einer PIN
geschützt, so daß der Kunde bei jedem Zugriff auf den geheimen
Schlüssel dies nochmals mit der PIN bestätigen muss.

=== Chipkarte / ChipkartenLeser ===

Bisher war nur die Rede von einem "privaten" Schlüssel des Kunden.
Dieser besteht aus einer RSH-verschlüsselten Datei, die man am
besten auf eine Diskette schreibt, die man herausnehmen und
wegschliessen kann. Damit ist der Kontozugang durch die Diskette
und die PIN geschützt.

Allerdings kann eine Diskette natürlich immer dann vom "Feind"
gelesen werden, wenn man sie in den Rechner steckt (und ohne dies
ist sie ziemlich wertlos). Ausserdem kann natürlich auch jemand
theoretisch meine Tastatureingaben "mitschneiden" und so an meine
PIN gelangen. Wer seinen Linux-Rechner immer 100%ig unter Kontrolle
hat, braucht da natürlich keine Angst zu haben. Alle anderen (d.h.
jeder, der seinen Rechner ab und zu ans Internet anschliesst...)
können die Sicherheit auch durch einen Chipkarte (mit
ChipkartenLeser) erhöhen.

Hier liegt der private Schlüssel auf der Karte. Die Karte
verschlüsselt selbständig die Daten - ohne daß der Schlüssel in den
Computer gelangt. Dazu benötigt die Karte lediglich die PIN. Bei
sog. "Klasse-1-Lesern" (also allen normalen handelsüblichen
billig-Lesern) kommt diese PIN vom Homebanking-Programm, das den
User jeweils auffordert, diese einzugeben. Bei sog.
"Klasse-2-Lesern" ist am Leser eine Tastatur angebracht, in die die
PIN eingegeben wird. Hier hat ein Hacker, selbst wenn er den
Rechner komplett übernommen hat, gar keine Chance mehr, den
Schlüssel oder die PIN abzugreifen.

Die Erst-Authentifizierung läuft im Prinzip identisch zur
Schlüssel-Datei ab. Es ist lediglich so, daß der private Schlüssel
direkt in der Chipkarte verschwindet und damit nie mehr an die
Öffentlichkeit gelangt (bzw. überhaupt erst in der Karte erzeugt
wird, das weiss ich auch nicht so genau). Ansonsten ist das
Verfahren das Gleiche. Für Linux heisst das allerdings, daß noch
einige Hardware-Treiber und Bibliotheken mehr vorhanden sein müssen
(und ein ChipkartenLeser). Aber wir lassen uns doch nicht von ein
paar Debian-Paketen erschrecken, oder?!?

== Installation unter Debian ==

Zuerstmal sollte der ChipkartenLeser installiert sein und mit dem
Tool "hbcicard" sollte die Karte erkannt werden. Falls man nicht
mit Chipkarte, sondern mit Schlüsseldatei arbeiten will, kann man
das natürlich auch weglassen. Dann die benötigten Debian-Pakete
installieren:

  apt-get install aqmoney libopenhbci libopenhbci-plugin-ddvcard

aqmoney ist ein Kommandozeilen-HomeBanking-Programm, das von den
OpenHBCI-Entwicklern benutzt wird, um die Bibliothek zu testen. Ich
installiere es hier als "kleinsten gemeinsamen Nenner" mit.
Ausserdem benutzen meine Beispiele unten dieses Programm. Wer ein
anderes Programm benutzt: '''Es kann nur einfacher werden!'''
Insbesondere für GNUCash kann ich sagen, daß die entsprechenden
Dialoge wirklich einfach zu bedienen sind. Trotzdem kann es nicht
schaden, hier zu sehen, wie es "unter der Haube" funktioniert. :-)
(Sind wir hier die LUG oder die LUG???)

== Initialisierung eines Kontos mit Schlüsseldatei ==

Als meinen ersten Gehversuch habe ich eine Kennung mit
Schlüsseldatei bei der [http://www.volksbank-krefeld.de Volksbank
Krefeld] erzeugt. Die zuständigen Herren in der Beratung zum
"electronic Banking" waren recht freundlich aber (leider, aber zu
erwarten) nicht sehr hilfreich, nachdem ich das Wort ''Linux''
benutzt hatte. Dennoch haben sie Fragen zum Verfahren sehr
kompetent beantwortet und haben mir auch sofort mitgeteilt, daß
eine Verschlüsselung per RDH-Datei kein Problem darstellt. Das ist
doch schonmal kundenfreundlich. Gut! Also bin ich nach einigem
Lesen (der [http://aqmoney.sf.net Website] und der manpage) und
herumprobieren auf folgenden Ablauf mit aqmoney gekommen.

Dazu sei (für nicht-Profis) übrigens nochmals gesagt, daß alle
diese Schritte auch mit dem HomeBanking-Programm
[http://www.gnucash.org GNUCash] in einer hübschen graphischen
Umgebung möglich sind, die einem die komplizierten Schritte
ziemlich vereinfacht. Der einzige kurze Knackpunkt war der Name des
Bankservers. Wenn Ihr Euren INI-Brief bei der Bank bestellt,
solltet Ihr ggf. direkt danach fragen... ''(Ich vermute, daß
gängige Windows-Homebanking-Programme in der meist enthaltenen
BLZ-Datenbank diese Serveradressen eingebaut haben)''

Um eine Authentifizierung zu bekommen, sind folgende Schritte
nötig:

* Anruf oder Besuch bei der Bank, damit man einen INI-Brief
zugeschickt bekommt

* Öffnen dieses INI-Briefs und sammeln der nötigen Informationen
: hier sind die Bankleitzahl, die Benutzerkennung und der Hashwert
wichtig. Dazu benötigt man noch den Server des Kreditinstituts
''(der bei der Volksbank Krefeld nicht dabei stand, aber nach
einigem Raten "hbci.gad.de" ist. "GAD" ist das Rechenzentrum der
Volksbanken und dürfte bei allen anderen Volksbanken auch gehen.)''
Im Zweifel die Bank löchern.

* Erzeugen eines neuen Benutzers für aqmoney mit einer neuen
Schlüssel-Datei
: <tt>aqmoney --command="createuser" --institute=32060362
--user=1234567890123456789 --medium=/floppy/tbayen.medium
--mediumtype=file --server="hbci.gad.de"</tt>

* Setzen der Permissions, damit die Schlüsseldatei nicht von
anderen Usern gelesen werden kann
: <tt>chmod go-rwx /floppy/tbayen.medium</tt>

* Holen des öffentlichen Instituts-Schlüssels
: <tt>aqmoney getkeys --institute=32060362
--user=1234567890123456789</tt>

* Versenden des eigenen öffentlichen Schlüssels
: <tt>aqmoney sendkeys --institute=32060362
--user=1234567890123456789</tt>

* Ausgabe des INI-Briefs der Bank zum Vergleich mit dem
(unterschriebenen) Original der Bank in Papierform
: <tt>aqmoney iniletter --institute=32060362
--user=1234567890123456789 --key=institute</tt>

* Ausdruck des eigenen INI-Briefs in Papierform (zum Versand an die
Bank)
: <tt>aqmoney iniletter --institute=32060362
--user=1234567890123456789 --key=user
--outfile="iniletter.txt"</tt>
: <tt>lpr iniletter.txt</tt>

-- ThomasBayen