Monthly Archives: September 2013

HowTo: GnuPG mit unbegrenztem Signing-Key und ablaufendem Encryption-Key

Sperrig, die Überschrift, also worum geht’s? Ich zitiere mal aus dem GnuPG-Handbuch:

Wenn Sie ein neues Schlüsselpaar erzeugen, werden standardmäßig ein DSA-Hauptschlüssel zum Unterschreiben und ein ElGamal-Unterschlüssel zum Entschlüsseln erzeugt. Dies ist von Vorteil, weil die Aufgaben der beiden Schlüssel verschieden sind und es sinnvoll sein könnte, den beiden Schlüsseln verschiedene Verfallsdaten zu geben. Der DSA-Hauptschlüssel wird benutzt, um digitale Unterschriften zu leisten, und er bestätigt Ihre Identität dadurch, daß andere ihn signiert haben. Der ElGamal-Unterschlüssel wird nur benutzt, um an Sie geschickte verschlüsselte Daten zu entschlüsseln. Typischerweise sollte eine digitale Signatur eine lange oder unbegrenzte Gültigkeitsdauer haben; Sie wollen ja auch die Unterschriften auf Ihrem Schlüssel, die Sie mühsam zusammengetragen haben, nicht verlieren. Andererseits sollte der ElGamal-Unterschlüssel in gewissen Zeitabständen gewechselt werden, um Ihre Datensicherheit zu erhöhen, da ein Angreifer, wenn der ElGamal-Unterschlüssel geknackt ist, alle Dokumente lesen kann, die für diesen Schlüssel verschlüsselt worden sind oder es noch werden.

Darauf folgt noch ein kurzer Hinweis, dass das etwas umständlich ist, aber wie genau man das anstellt, ist quasi als Hausaufgabe überlassen und deswegen1 zeige ich das jetzt hier.

Zunächst erstellt man sich einen Schlüssel ohne Ablaufdatum, der Wizard packt sonst auf beide Unterschlüssel ein Ablaufdatum und das wollen wir ja eigentlich nicht:

gpg --gen-key

Heutzutage ist das kein DSA/ElGamal-Paar, sondern beides sind RSA-Schlüssel, aber Details kann man in einem beliebigen HowTo zur Schlüsselerstellung nachlesen. In meinem Fall hab ich zu Testzwecken das hier erhalten:

pub   4096R/8C5DE4C1 2013-09-27
  Schl.-Fingerabdruck = 1EDD 0AF2 9CA3 A110 A30F  D404 3C63 79A9 8C5D E4C1
uid                  Alice (Testschlüssel) 
sub   4096R/79C6C593 2013-09-27

Als nächstes bearbeite ich diesen Schlüssel:

gpg --edit-key 0x8C5DE4C1

Hier gibt es jetzt eine Reihe von Befehlen, die man sich mit help anzeigen lassen kann. Zunächst ist list ganz hilfreich. Die Ausgabe davon:

gpg> list

pub  4096R/8C5DE4C1  erzeugt: 2013-09-27  verfällt: niemals     Aufruf: SC  
                     Vertrauen: uneingeschränkt Gültigkeit: uneingeschränkt
sub  4096R/79C6C593  erzeugt: 2013-09-27  verfällt: niemals     Aufruf: E   
[ uneing.] (1). Alice (Testschlüssel) 

Den Unterschlüsseln ist ein »sub« vorangestellt, allerdings nicht nummeriert. Man wählt nun den Encryption-Key aus mit key 1 oder wenn man bereits mehrere Unterschlüssel hat, muss man durchzählen, die sind freundlicherweise geordnet. GnuPG markiert den soeben ausgewählten Unterschlüssel mit einem Sternchen:

gpg> key 1

pub  4096R/8C5DE4C1  erzeugt: 2013-09-27  verfällt: niemals     Aufruf: SC  
                     Vertrauen: uneingeschränkt Gültigkeit: uneingeschränkt
sub* 4096R/79C6C593  erzeugt: 2013-09-27  verfällt: niemals     Aufruf: E   
[ uneing.] (1). Alice (Testschlüssel) 

Der nächste Befehl ist expire. Zuvor kann man sich mit list nochmal überzeugen, dass auch nur der Unterschlüssel ausgewählt ist. GnuPG ist an der Stelle aber so freundlich bei der Nachfrage nochmal klar zu stellen, dass man nur das Ablaufdatum des Unterschlüssels ändert. Sieht dann so aus:

gpg> expire
Ändern des Verfallsdatums des Unterschlüssels.
Bitte wählen Sie, wie lange der Schlüssel gültig bleiben soll.
         0 = Schlüssel verfällt nie
        = Schlüssel verfällt nach n Tagen
      w = Schlüssel verfällt nach n Wochen
      m = Schlüssel verfällt nach n Monaten
      y = Schlüssel verfällt nach n Jahren
Wie lange bleibt der Schlüssel gültig? (0) 2
Key verfällt am So 29 Sep 2013 12:47:52 CEST
Ist dies richtig? (j/N) j

Sie benötigen eine Passphrase, um den geheimen Schlüssel zu entsperren.
Benutzer: "Alice (Testschlüssel) "
4096-Bit RSA Schlüssel, ID 8C5DE4C1, erzeugt 2013-09-27

                              
pub  4096R/8C5DE4C1  erzeugt: 2013-09-27  verfällt: niemals     Aufruf: SC  
                     Vertrauen: uneingeschränkt Gültigkeit: uneingeschränkt
sub* 4096R/79C6C593  erzeugt: 2013-09-27  verfällt: 2013-09-29  Aufruf: E   
[ uneing.] (1). Alice (Testschlüssel) 

Hier sieht man jetzt, dass der Key, dem das »pub« vorangestellt ist und bei dem es sich um den Signing-Key (SC) handelt, immernoch kein Verfallsdatum hat, der Encryption-Key (E) hingegen schon.

Bis hier hin wäre das das Vorgehen, wenn man sich einen neuen Schlüssel erstellt oder bereits einen hat, der bisher kein Ablaufdatum hat. Hat man seinen Schlüssel bereits auf einen Keyserver geladen, empfehle ich nicht am Ablaufdatum rumzufummeln. Solche Änderungen kommen womöglich nie beim Gegenüber an. Dann lieber neuen Schlüssel machen.

Was nun, wenn der Encryption-Key droht abzulaufen? Man fügt mit addkey einen neuen hinzu. GnuPG fragt dann nach allerlei Details, u.a. wie lange der neue Unterschlüssel gültig sein soll. Bei der Frage, was für ein Unterschlüssel es werden soll, wählt man einen für »nur verschlüsseln« und dort sinnvollerweise die Variante RSA mit der vorgebenen oder einer größeren Schlüssellänge:

gpg> addkey
Schlüssel ist geschützt.

Sie benötigen eine Passphrase, um den geheimen Schlüssel zu entsperren.
Benutzer: "Alice (Testschlüssel) "
4096-Bit RSA Schlüssel, ID 8C5DE4C1, erzeugt 2013-09-27

Bitte wählen Sie, welche Art von Schlüssel Sie möchten:
   (3) DSA (nur unterschreiben/beglaubigen)
   (4) RSA (nur signieren/beglaubigen)
   (5) Elgamal (nur verschlüsseln)
   (6) RSA (nur verschlüsseln)
Ihre Auswahl? 6
RSA-Schlüssel können zwischen 1024 und 4096 Bit lang sein.
Welche Schlüssellänge wünschen Sie? (2048) 
Die verlangte Schlüssellänge beträgt 2048 Bit
Bitte wählen Sie, wie lange der Schlüssel gültig bleiben soll.
         0 = Schlüssel verfällt nie
        = Schlüssel verfällt nach n Tagen
      w = Schlüssel verfällt nach n Wochen
      m = Schlüssel verfällt nach n Monaten
      y = Schlüssel verfällt nach n Jahren
Wie lange bleibt der Schlüssel gültig? (0) 1m
Key verfällt am So 27 Okt 2013 11:57:50 CET
Ist dies richtig? (j/N) j
Wirklich erzeugen? (j/N) j
Wir müssen eine ganze Menge Zufallswerte erzeugen.  Sie können dies
unterstützen, indem Sie z.B. in einem anderen Fenster/Konsole irgendetwas
tippen, die Maus verwenden oder irgendwelche anderen Programme benutzen.
.............+++++
..........+++++

pub  4096R/8C5DE4C1  erzeugt: 2013-09-27  verfällt: niemals     Aufruf: SC  
                     Vertrauen: uneingeschränkt Gültigkeit: uneingeschränkt
sub* 4096R/79C6C593  erzeugt: 2013-09-27  verfällt: 2013-09-29  Aufruf: E   
sub  2048R/C82D05DE  erzeugt: 2013-09-27  verfällt: 2013-10-27  Aufruf: E   
[ uneing.] (1). Alice (Testschlüssel) 

Hier hab ich jetzt gleichzeitig zwei gültige Encryption-Keys, aber das diente ja nur zum Zeigen und Ihr werdet den Key auch auf keinem Keyserver finden.

Mit save verlässt man den Editiermodus und dann lädt man den mit neuem Encryption-Key versehenen Schlüssel wie gewohnt auf den Keyserver hoch.

Übrigens habe ich meinem eigenen PGP-Schlüssel mit dieser Methode auch gerade einen frischen Encryption-Key spendiert. Falls sich Euer Mailprogramm beschwert, dass Ihr mir keine verschlüsselten Mails mehr schicken könnt, ladet Euch mal meinen aktuellen Public-Key! ;-)

  1. und weil ich Frank Lanitz das mal auf einer Keysigningparty bei den Chemnitzer Linux-Tagen versprochen hatte, ach und wegen der im Netz39 bevorstehenden Keysigningparty, na und natürlich, weil der Encryption-Key bei mir bald abläuft … []

Sessionname in Statuszeile von GNU screen

Grml ist das Live-Linux meiner Wahl für allerlei Zwecke. Das coole ist die Config, die dort für Zsh, Vim und GNU screen mitgeliefert wird und da ich wenig Lust hab, mir sowas selbst zusammenzubasteln und ich ebenso gern ein vertrautes Nutzerinterface habe, nutze ich die Configs auch auf anderen Rechnern, indem ich dort einmal grml-config.sh ausführe und dann nur noch kleine Anpassungen machen muss.

Screen benutze ich ausgiebig und meistens mit mehreren sessions und ab und zu kommt man da mal durcheinander. Deswegen habe ich die .screenrc jetzt doch mal ein bisschen angepasst und statt

  caption always "%{+b rk}$USER@%{wk}%H | %{yk}(load: %l)  %-21=%{wk}%D %d.%m.%Y %0c"

steht da jetzt bei mir

  caption always "%{+b rk}$USER@%{wk}%H | %S | %{yk}(load: %l)  %-21=%{wk}%D %d.%m.%Y %0c"

und dank des zusätzlichen Parameters %S hab ich die aktuelle Session direkt im Blick. :-)

HowTo: KMail wechselt Online/Offline je nach Netzwerkverbindung

Einige Probleme lassen sich schnell lösen. Zum Beispiel, dass KMail versucht, E-Mails abzuholen, selbst wenn es keine Netzwerkverbindung gibt.

Über den DBus lässt sich jede KDE-Anwendung fernsteuern, sofern die entsprechenden Interfaces angeboten werden. Mit dem Aufruf von

qdbus org.kde.kmail /KMail

erhält man eine Übersicht der Methoden, die KMail anbietet. Darunter sind auch stopNetworkJobs und startNetworkJobs – genau das, was wir brauchen.

Über die Toolbox des Network Managers, speziell nm-tools, ist es möglich, den Netzwerkstatus zu ermitteln. Jetzt fehlt nur noch ein kleines Script, das je nach Vorhandensein einer Netzwerkverbindung KMail in den Online- bzw. Offline-Modus versetzt.

#!/bin/bash

if [ `nm-tool|grep State|cut -f2 -d' '` == "connected" ]; then
       #Whatever you want to do if the network is online
       echo "Starting KMail network jobs"
       qdbus org.kde.kmail /KMail org.kde.kmail.kmail.resumeNetworkJobs       
else
       #Whatever you want to do if the network is offline - note, this and the else above are optional
       echo "Stopping KMail network jobs"
       qdbus org.kde.kmail /KMail org.kde.kmail.kmail.stopNetworkJobs
fi

Diese Script wird in der Ereignisverwaltung des Network Managers beim Ereignis “Schnittstellenstatus geändert” eingetragen und setzt nun den KMail-Status abhängig von der Verfügbarkeit einer Netzwerkverbindung.

Die Lösung ist sehr einfach, behebt aber die Fehlermeldungen und ist ein Ausgangspunkt für weitere Verbesserungen.

Nachtrag: Schöner wäre es, wenn KMail die Jobs beenden würde, bevor die Verbindung abbricht. Wer spontan einen Ansatzpunkt hat, bitte ab in die Kommentare damit.

Nachtrag2: Eigentlich brauchen wir eine Internetverbindung, d.h. streng genommen müsste ein Internet-Zugriff ausgeführt und dann abhängig vom Erfolg der KMail-Status gesetzt werden.

HowTo: FreeBSD als HVM-DomU in Xen auf Debian Wheezy

Zu Hause und im Netz39 e.V. läuft je ein Server mit Debian Wheezy auf amd64 und als Virtualisierungssystem wird Xen benutzt. Linux-Gäste werden paravirtualisiert und das läuft schon seit Jahren fluffig. Für bestimmte Zwecke muss es aber auch mal ein anderes System sein und das ist im Hackerspace ein aktuelles FreeBSD 9.1 und zu Hause ein Debian GNU/kFreeBSD, also kein Debian GNU/Linux, sondern eben das Debian mit dem ganzen GNU Userland und einem FreeBSD-Kernel. In beiden Fällen ist auch die VM die 64-Bit-Variante und die Hardwarevirtualisierung der jeweiligen Prozessoren soll genutzt werden. Was fehlt: die initiale Config für die VM und da hab ich gesucht, recherchiert und probiert und präsentiere jetzt, was bei mir funktioniert hat. Zu Hause sieht’s so aus:

vcpus = 2
memory = 1024
name = 'kleopatra'
builder = 'hvm'
kernel = 'hvmloader'
disk =  [
                'phy:/dev/mapper/heaven-kleopatra,hda,w',
                'file:/home/alex/debian-7.1.0-kfreebsd-amd64-netinst.iso,hdc:cdrom,r',
        ]
boot = 'dc'
vif = [ 'mac=00:16:3E:XX:XX:XX,bridge=xenbr0' ]
vfb = [ 'type=vnc' ]
on_poweroff = 'destroy'
on_reboot = 'restart'
on_crash = 'restart'

Und im Space:

vcpus       = 1
memory      = 512
name        = 'hydrogen'
builder     = 'hvm'
kernel      = 'hvmloader'
disk        = [
            'phy:/dev/mapper/vgmarx-wasserstoff,hda,w',
            'file:/media/images/FreeBSD-9.1-RELEASE-amd64-disc1.iso,hdc:cdrom,r',
          ]   
boot        = 'dc'
vif     = [ 'mac=00:16:3E:XX:XX:XX,bridge=xenbr0' ]
vfb     = [ 'type=vnc' ]
on_poweroff = 'destroy'
on_reboot   = 'restart'
on_crash    = 'restart'

In beiden Fällen hatte ich zuvor Xen nach der Anleitung im Debian-Wiki aufgesetzt. Die XX in den Mac-Adressen sind durch zufällige Werte zwischen 00h und FFh zu ersetzen. Die Erzeugung von Zufallszahlen und die Umrechnung ins Hexadezimalsystem überlasse ich als Hausaufgabe.

Nach dem Start der DomU macht man einen SSH-Tunnel auf für den VNC-Port und verbindet sich mit seinem bevorzugten VNC-Client1 auf localhost:

ssh -L 5900:localhost:5900 yourxenhost

Nach der Installation in der Config die Bootreihenfolge anpassen bzw. das CD-Image rausnehmen, fertig.

  1. unter KDE benutze ich krdc, auch wenn ich den Namen grauslig finde []