VP-Stunden massenweise, automatisch und rechtssicher, digital signieren

digitale Unterschrift
bash
VP-Stunden
Author

Johannes Titz

Published

April 18, 2022

Momentan haben wir an unserem Institut ein kleines Problem mit der Ausstellung von Versuchspersonen-Stunden für Studierende. (Wer es nicht weiß: Psychologie-Studierende müssen im Laufe ihres Studiums an etlichen Versuchen teilnehmen und bekommen dafür so genannte Versuchspersonen-Stunden oder VP-Stunden.) Früher lief dies alles über ein Papier-Formular, was durch Corona endlich unmöglich gemacht wurde. Gerade befinden wir uns in einer Übergangsphase, die semi-digital ist. Besser als im Gesundheitsamt – wir schicken kein Fax – aber auch nicht viel besser; die Formulare werden digital ausgefüllt und per Mail verschickt. Die Mitarbeiter müssen also jede VP-Stunde einzeln unterschreiben. Und im Normalfall ist diese Unterschrift nicht mal rechtsgültig, da kein S/MIME benutzt wird. Das geht doch besser! Über das Tool jsignpdf kann man mit einer digitalen Signatur automatisiert Hunderte von VP-Stunden in Nullkommanichts unterschreiben. Wie das geht, erfährst Du hier.

Zunächst brauchst Du natürlich eine digitale Signatur und das Tool jsignpdf (http://jsignpdf.sourceforge.net/). Die Signatur gibt’s an der TU Chemnitz kostenfrei übers URZ (https://www.tu-chemnitz.de/urz/security/ca/pindex.html). Die Ausstellung geht schnell und ist auf der URZ-Seite gut dokumentiert. Die Installation von jsignpdf sollte keine größeren Probleme bereiten, es gibt auch eine Windows-Version. Bei mir unter Arch und mit yay:

yay -S jsignpdf

Jetzt können wir einen Probe-Signatur für unser Dokument erstellen. Besser als das URZ kann ich es nicht erklären, also einfach den Schritten hier folgen: https://www.tu-chemnitz.de/urz/security/ca/pdfsig.html#sign

Schritt 5 ist essentiell, denn dort wird die Position der Unterschrift im Dokument festgelegt (Bereich in Pixeln). Ein Bild der Unterschrift ist nicht zwingend notwendig, denn ausgedruckt ist das Dokument sowieso nichts Wert und die digitale Signatur wird ja schon auf Gültigkeit geprüft.

Klappt die Signatur für das Dokument, sind wir schon fast fertig. Denn jsignpdf ist clever und speichert alle gewählten Parameter in einer Konfigurationsdatei. Bei mir auf Arch zu finden unter der Dot-File .JSignPDF. Am besten speichert man diese Datei nochmal separat, dann kann man sie anpassen und muss sie beim Wechsel von Dokumenten nicht neu erstellen.

Benutzt man nun jsignpdf über die Kommandozeile, kann man die Konfiguration .JSignPDF (oder eine andere) direkt verwenden. Haben wir also z. B. einen Ordner (hier batch) mit vielen VP-Stunden, so können wir einfach alle diese Dokumente von jsignpdf unterschreiben lassen (hier über die bash):

read -s mypassword                                                              
jsignpdf --load-properties --keystore-password $mypassword batch/*.pdf -d batch_out
unset mypassword

Da meine Signatur verschlüsselt ist (Deine sicher auch!), lese ich zunächst über read -s das Passwort ein. Nach Ausführung von jsignpdf wird dieses wieder gelöscht.

--load-properties gibt an, dass die .JSignPDF benutzt werden soll, hat man eine andere Datei so verwendet man --load-properties-file <file>

-d ist der Ordner, in dem die signierten Dokumente gespeichert werden sollen. In meinem Fall befinden sich die unsignierten Dokumente unter batch und werden nach dem Signieren unter batch_out gespeichert.

Das Signieren dauert jeweils einen kurzen Moment, ungefähr 0.5-1s pro Unterschrift. Das liegt daran, dass ziemlich viel Information in die Datei integriert werden muss. Es geht aber trotzdem recht flott, gerade im Vergleich mit der manuellen Methode.

Das Ergebnis in einem PDF-Viewer (hier Okular) sieht dann so aus:

Das Dokument ist gültig und wurde nicht manipuliert. Aber wer garantiert, dass die Unterschrift wirklich von mir ist? Das sieht man hier:

Das DFN hat meine Identität (über Personalausweis) geprüft und garantiert, dass die Signatur mir gehört. Wenn nun nicht jemand meine Signatur geklaut hat, ohne dass ich das gemerkt habe, ist das alles ziemlich sicher, sogar sicherer als eine offline-Signatur!

Ändert man das Dokument nachträglich, wird dies von Okular angezeigt:

Eine Manipulation fliegt also direkt auf.

Die Dokumente müssen natürlich noch an die Studis geschickt werden, aber das übernimmt dann einfach eine studentische Hilfskraft.

Ein Nachteil ist noch, dass die Unterschrift immer an die gleiche Stelle gesetzt wird. Das genutzte Formular erlaubt es eigentlich mehrere VP-Stunden einzutragen. Man könnte das Skript noch erweitern und prüfen an welcher Stelle das erste leere Feld kommt und entsprechend dort die Unterschrift setzen. Da das Vorgehen nur eine Zwischenlösung ist, lohnt sich aber hier der Aufwand wohl eher nicht. Eine digitale Lösung ohne Unterschriften kommt bald. Bis es so weit ist, ist die Nutzung von jsignpdf über die Kommandozeile eine effiziente Lösung für mich und vielleicht noch für ein paar andere. Und natürlich lässt sie sich auf alle möglichen Dokumente leicht übertragen.