Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
public:gnupg:luks_gnupg_card_stretch [2017/08/21 11:17] – [Update der Initramdisk] jankow@datenkollektiv.netpublic:gnupg:luks_gnupg_card_stretch [2019/06/14 18:03] (aktuell) – [Cardreader ohne Pinpad] jankow@datenkollektiv.net
Zeile 110: Zeile 110:
 Die folgenden Skripte sind für Lesegeräte gedacht, die nicht vom internen ccid-Treiber des gnupg-Binaries unterstützt werden sondern einen laufenden pcsc Daemon benötigen. Falls der Kartenleser vom internen ccid unterstützt wird, können und müssen die entsprechenden Zeilen ausgelassen werden. Ob mit laufendem pcscd auch Kartenleser unterstützt werden, die diesen normalerweise nicht benötigen, habe ich noch nicht getestet. Die folgenden Skripte sind für Lesegeräte gedacht, die nicht vom internen ccid-Treiber des gnupg-Binaries unterstützt werden sondern einen laufenden pcsc Daemon benötigen. Falls der Kartenleser vom internen ccid unterstützt wird, können und müssen die entsprechenden Zeilen ausgelassen werden. Ob mit laufendem pcscd auch Kartenleser unterstützt werden, die diesen normalerweise nicht benötigen, habe ich noch nicht getestet.
 </WRAP> </WRAP>
 +
 +==== Cardreader ohne Pinpad ====
 +
 +Seit Stretch funktioniert der Hack nach meiner Erfahrung so (s.u. #Cardreader mit Pinpad) nicht mehr für Cardreader ohne Pinpad. Genau habe ich das noch nicht analysiert - aber es hat wohl was mit der Art, wie die gnupg2 Version die pinentry Funktion aufruft, zu tun.
 +
 +Hier gibt es eine funktionierende Anleitung:
 +  * https://wiki.majic.rs/Openpgp/protecting_luks_decryption_key_in_debian_jessie_us/
 +
 +Auf unser Szenario bezogen benötigen wir folgende Dateien (beide müssen ausführbar sein):
 +
 +<file bash /etc/initramfs-tools/hooks/cryptgnupg_sc>
 +#!/bin/sh
 +
 +set -e
 +
 +PREREQ="cryptroot"
 +
 +prereqs()
 +{
 +        echo "$PREREQ"
 +}
 +
 +case $1 in
 +prereqs)
 +        prereqs
 +        exit 0
 +        ;;
 +esac
 +
 +. /usr/share/initramfs-tools/hook-functions
 +
 +if [ ! -x ${DESTDIR}/lib/cryptsetup/scripts/decrypt_gnupg_sc ] ; then
 +    exit 0
 +fi
 +
 +
 +# Deploy the keyring.
 +cp -a /etc/keys/ "${DESTDIR}/etc/"
 +
 +# Deploy terminfo (required for pinentry-curses).
 +mkdir -p "${DESTDIR}/etc/terminfo/l/"
 +cp -a /lib/terminfo/l/linux "${DESTDIR}/etc/terminfo/l/linux"
 +
 +# Deploy GnuPG binaries and pinentry-curses.
 +copy_exec /usr/bin/gpg
 +copy_exec /usr/bin/gpg2
 +copy_exec /usr/bin/gpg-agent
 +copy_exec /usr/bin/pinentry-curses
 +
 +# some more libs for pcscd
 +copy_exec /usr/sbin/pcscd
 +copy_exec /usr/lib/pcsc/drivers/serial/libccidtwin.so
 +copy_exec /usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Linux/libccid.so
 +copy_exec /usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plist
 +copy_exec /etc/libccid_Info.plist
 +if uname -r | grep -q amd64; then
 +    copy_exec /usr/lib/x86_64-linux-gnu/libpcsclite.so.1.0.0
 +    copy_exec /lib/x86_64-linux-gnu/libgcc_s.so.1
 +else
 +    copy_exec /usr/lib/i386-linux-gnu/libpcsclite.so.1.0.0
 +    copy_exec /lib/i386-linux-gnu/libgcc_s.so.1
 +fi
 +
 +# we need some more stuff from gnupg2
 +copy_exec /usr/lib/gnupg/scdaemon
 +copy_exec /usr/bin/pinentry
 +
 +
 +echo "initramfs for luks decryption with gnupg-card done"
 +
 +exit 0
 +</file>
 +
 +  chmod 755 /etc/initramfs-tools/hooks/cryptgnupg_sc
 +
 +<file bash /lib/cryptsetup/scripts/decrypt_gnupg_sc>
 +#!/bin/sh
 +
 +# This is the safest way to ensure the GnuPG home directory is correctly set.
 +export GNUPGHOME=/etc/keys/
 +
 +# quick hack for starting pcscd
 +mkdir -p /var/run
 +pcscd &
 +
 +sleep 3
 +
 +
 +gpg2 --no-tty --decrypt /etc/keys/cryptkey.gpg
 +</file>
 +
 +  chmod 750 /lib/cryptsetup/scripts/decrypt_gnupg_sc 
  
 ==== Cardreader mit Pinpad ==== ==== Cardreader mit Pinpad ====
Zeile 119: Zeile 211:
 Am Anfang des Skripts wird eine kleine Abfrage gemacht, ob ein Kartenleser existiert. Wenn nicht, fragt das Skript nach der Passphrase. Diese Unterscheidung ist nötig, weil "askpass" immer auf eine Eingabebestätigung wartet. Am Anfang des Skripts wird eine kleine Abfrage gemacht, ob ein Kartenleser existiert. Wenn nicht, fragt das Skript nach der Passphrase. Diese Unterscheidung ist nötig, weil "askpass" immer auf eine Eingabebestätigung wartet.
  
-Wir können diesen Umstand ausnutzen, um auch Kartenleser ohne Pinpad zu nutzen. Wenn der Kartenleser erst eingesteckt wird, wenn das Skript sich schon in der Schleife mit "askpass" befindet, sollte es auch mit der Karte und der Eingabe der PIN über die Tastatur funktionieren.+<del>Wir können diesen Umstand ausnutzen, um auch Kartenleser ohne Pinpad zu nutzen. Wenn der Kartenleser erst eingesteckt wird, wenn das Skript sich schon in der Schleife mit "askpass" befindet, sollte es auch mit der Karte und der Eingabe der PIN über die Tastatur funktionieren.</del> Das funktioniert bei mir seit Debian Stretch nicht mehr (s.o.) 
  
 <file bash /lib/cryptsetup/scripts/decrypt_gnupg_sc> <file bash /lib/cryptsetup/scripts/decrypt_gnupg_sc>
Zeile 255: Zeile 347:
  
 exit 0 exit 0
-</file> 
 </file> </file>