Freitags-Bastelprojekt: der Kryptoscanner

Schon eine ganze Weile hat mich geärgert, dass manchmal noch Dokumente an mich per Post an die Adresse meiner Eltern gesendet werden. Das ist an sich nicht schlimm, ich komme da ja ab und zu hin, um diese abzuholen. Problematisch wird es immer dann, wenn es um Rechnungen o. Ä. geht, die binnen zwei Wochen bezahlt werden müssen.

Der bisherige Modus war dann: Meine werte Frau Mutter öffnet den Brief, scannt ihn auf Arbeit ein und sendet ihn mir per Mail. Schön und gut, hat aber zwei Nachteile:

  1. Eine Rechnung mit meinen persönlichen Daten landet auf einem Arbeitsrechner meiner Mutter, wo sie nix verloren hat.
  2. Die Rechnung wird unverschlüsselt über's Internet an mich versendet.

Der zweite Punkt ist fast gruseliger, da meine Mutter bei einer Krankenkasse arbeitet. Die Vorstellung, dass dort tagein, tagaus Kundendaten per unverschlüsselter Mail kommuniziert werden, ist schrecklich. Naja. Für mich hat das jetzt erstmal ein Ende: ich habe mir einen Kryptoscanner gebaut.

Der macht folgendes, wenn man ihn an den Strom ansteckt:

  1. Ein kleiner SOC-Computer im Scanner startet.
  2. Nach dem Hochfahren des SOC wird ein Programm gestartet, welches in einer Schleife das Folgende tut:
  3. Ein Bild wird vom Scanner eingelesen,
  4. das Bild wird als JPG komprimiert (ich brauche in der Regel keine hohe Qualität, ich bekomme die Rechnung ja später im Original) und
  5. das Bild wird per verschlüsselter Email an mich gesendet.

Aber jetzt mal langsam. Wie genau geht das?

Die Hardware

Die Hardware besteht aus zwei Komponenten:

  1. einem Raspberry Pi Zero W
  2. einem Canon CanoScan Lide 25, in welchen der Pi eingebaut wurde.

Dazu wurde zunächst der Scanner geöffnet. Das geht, indem man vorsichtig die seitlich aufgeklebten Leisten nach oben abzieht (Bild 2), dann die schmalere Leiste mit den Papierformaten entnimmt und zum Schluss die Glasplatte anhebt.

Mit etwas Gefummel ließ sich dann die eingebaute USB-Buchse aus ihrer Verankerung lösen. Die Buchse ist über eine kleine Platine mit dem Flachbandkabel zur Scan-Einheit verbunden. Auf dieser Platine habe ich dann die Datenleitungen (aber nicht die Stromversorgung) unterbrochen (Habe leider vergessen ein Bild zu machen. Es gibt ein Schema).

Von einem Freund mit viel Fingerspitzengefühl und einem speziellen Heißluftgebläse habe ich mir vom Raspi die beiden Mikro-USB-Buchsen entfernen lassen. Da, wo vorher die linke USB-Buchse war, wurde ein vieradriges Flachbandkabel auf Daten- und Strom-Pins gelötet (Bild 3, danke Hannes!). An der gelösten USB-Buchse des Scanners wurde dann das andere Ende des Flachbandkabels so verbunden, dass die Stromversorgungs-Leitungen zum Raspi an der Stromversorgung der Scanner-Einheit anliegen. Die Datenleitung vom Raspi wurde mit der vorher gekappten Datenleitung zur Scaneinheit verbunden. Dann musste der Raspi nur noch so in den Scanner geklebt werden, dass die Scan-Einheit darüber hinwegfahren kann.

Das geht gerade so, weil am linken Rand der Scan-Einheit ein bisschen Platz für das Überfahren der USB-Buchse ist.

Die Software

Auf dem Raspberry läuft das sehr schlanke Raspbian Lite ohne grafische Oberfläche. Darin wurden folgende Komponenten zusätzlich installiert:

Auf die Grundkonfiguration von Postfix möchte ich hier nicht eingehen; das kann man im Internet nachlesen.

Zur Verschlüsselung ruft der Postfix-Daemon bei jeder Mail das GPG-Mailgate auf, welches die Email chiffriert. Auch die Installation von GPG-Mailgate ist anderenorts beschrieben. Wenn das alles eingerichtet ist, kann man den Mailversand mit
$> echo "Test" | mail -s "Test" empfaenger@example.com testen (natürlich die eigene Mailadresse einsetzen!) Nachdem auch das funktioniert, kann man folgendes Script erstellen:

#!/bin/bash

# wait for network connection
while [ $(ip a|grep 192|wc -l) -lt 1 ]; do sleep 1; done

function wait_for(){
        while [ $(pidof $0) ]; do
                echo waiting for $0 to complete
                sleep 1
        done
}

function encrypt_and_send(){
        JPG=$(date +%Y-%m-%d_%T).jpg
        DIR=$(date +%Y/%m/%d)
        convert $1 $JPG
        echo "Gescanntes Bild im Anhang" | mail -s "Scan $JPG" --attach=$JPG mailaddress@example.com
        mkdir -p $DIR
        mv $JPG $DIR

}

# repeated scanning
TMP=""
while true; do
        if [ ! "$TMP" = "" ]; then
                wait_for convert
                wait_for mail
                encrypt_and_send $TMP &
        fi

        TMP=$(mktemp -u).pnm
        scanimage -x 209 -y 297 --mode Gray --resolution 100 > $TMP
done

Bei mir heißt das Script scan-and-send. Natürlich muss eine valide Mailadresse benutzt werden. Dieses Script habe ich dann als Cronjob verankert. D.h.
PROMPT> crontab -e und dann die Zeile
@reboot /home/srichter/scan-and-send einfügen (Homeverzeichnis anpassen!) Und das war auch schon alles!

Viel Spaß beim Nachbauen!

Add new comment

Restricted HTML

  • Allowed HTML tags: <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • Lines and paragraphs break automatically.
  • Web page addresses and email addresses turn into links automatically.