Wie verwalte ich GPG-Schlüssel auf mehreren Systemen?

103

Ich bin neu in der Verwendung von GnuPG und versuche zu verstehen, wie man es am besten benutzt. Ich habe die kurze, leicht verständliche Erklärung von GPG / PGP für nichttechnische Leute gelesen. Die meisten Anleitungen erläutern PGP jedoch aus der Perspektive eines einzelnen Computers.

Ich möchte GnuPG auf drei Computern verwenden: einem Linux-PC, einem Linux-Laptop und einem Android-Telefon.

Der grundlegende Anwendungsfall ist das Verschlüsseln / Entschlüsseln von E-Mails, die von einem IMAP-Dienst verwaltet werden. Daher benötigen alle Geräte denselben privaten Schlüssel für die Entschlüsselung.

Ich denke, meine Wahlmöglichkeiten sind:

  1. Kopieren Sie einfach alle meine Schlüssel in den Schlüsselbund auf jedem Gerät und verlassen Sie sich zum Schutz hauptsächlich auf das Kennwort des privaten Schlüssels.

  2. Erstellen Sie einen Hauptschlüssel (mit --gen-key), um meine Identität darzustellen, und erstellen Sie dann einen separaten Einwegschlüssel (erneut mit --gen-key) zum Ver- / Entschlüsseln von E-Mails, der mit dem Hauptschlüssel signiert ist. Ersteres befindet sich nur auf meinem PC, letzteres wird auf jedes Gerät verteilt. Solange meine mobilen Geräte nicht gefährdet sind, bleibt der Einwegschlüssel gültig.

Ich mag übermäßig paranoid sein und das komplizierter machen, als es sein muss, aber bitte, humor mich. Ich glaube daran, nicht alle Eier in einen Korb zu legen.

Der Hauptschlüssel soll meine digitale Identität sein. Es wird viel Mühe darauf verwendet, Vertrauen in Bezug auf diese Identität aufzubauen, und ich möchte lieber die Unannehmlichkeiten meiner Paranoia in Kauf nehmen, als meinen Schlüssel aus Unachtsamkeit zu verlieren und Vertrauen in Bezug auf einen neuen Hauptschlüssel aufbauen zu müssen (vielleicht ist dies nicht so schlimm wie ich) denke, aber ich bin neu in diesem) .

Es ist wahrscheinlicher, dass ich meinen Laptop oder mein Telefon verliere als meinen PC. Wenn Verlust == Kompromiss ist, dann verliere ich lieber ein verfügbares Schlüsselpaar (das ich widerrufen kann) als mein Hauptschlüsselpaar. Ich kann einem neuen Einwegschlüssel immer das Vertrauen meines Hauptschlüssels schenken.

Entschuldigung für die wirklich lange Frage. :-)

TL; DR

Ist ein ausreichender Schutz Passwort für meine Speicherung Master privaten Schlüssel über mehrere Geräte hinweg?

Ist mein Plan für Option 2 durchführbar? Habe ich etwas falsch gemacht oder kann es verbessert werden?

Wenn Option 2 eine schlechte Idee ist, was sind dann die Best Practices, wenn GnuPG für einen einzelnen Benutzer auf mehreren Geräten verwendet wird?

Justin C
quelle

Antworten:

59

Nun, das ist ein bisschen peinlich. Ich habe über einen Zeitraum von einer Woche Stunden damit verbracht, dieses Problem zu lösen, und die Antwort scheint bei Unterschlüsseln zu liegen - ein Thema, das im GnuPG-Handbuch und in den häufig gestellten Fragen nicht behandelt wird.

Während ich nachforschte, was Unterschlüssel sind und warum sie anstelle von --gen-key verwendet werden könnten, stieß ich auf dieses Juwel: http://wiki.debian.org/subkeys .

In Debians Wiki wird erklärt, wie Option 2 (siehe OP) unter Verwendung eines Hauptschlüssels mit Unterschlüsseln implementiert wird , und wie der Hauptschlüssel von einem beliebigen System entfernt wird, nachdem er auf einem Sicherungsmedium (z. B. einem Flash-Laufwerk) gespeichert wurde. Die Unterschlüssel können dann auf jedem Gerät auf meine Schlüsselringe verteilt werden.

Vorteile:

  1. Verlässt sich nicht hauptsächlich auf ein Passwort, um den Hauptschlüssel zu schützen,

  2. Wenn ein System kompromittiert ist, ist der Hauptschlüssel nicht sofort verfügbar (es sei denn, ich lasse törichterweise mein Flash-Laufwerk eingesteckt oder verbinde es mit einem kompromittierten System).

  3. Dies ist eine Praxis, die vom Debian-Entwicklungsteam implementiert wurde.

  4. Verwendet die Unterschlüsselfunktion von GnuPG. Was scheint ein bisschen organisierter zu sein, als ein paar lose Schlüssel am Schlüsselbund zu haben, ja?

Relevanter Teil aus dem Debian Subkey Wiki

  1. Erstellen Sie Backups Ihrer vorhandenen GnuPG-Dateien ($ HOME / .gnupg). Bewahre sie gut auf. Wenn während der folgenden Schritte etwas schief geht, benötigen Sie dies möglicherweise, um an einen bekannten guten Ort zurückzukehren. (Hinweis: umask 077 führt zu eingeschränkten Berechtigungen für die Sicherung.)

    • umask 077; tar -cf $HOME/gnupg-backup.tar -C $HOME .gnupg
  2. Erstellen Sie einen neuen Unterschlüssel zum Signieren.

    • Finden Sie Ihre Schlüssel-ID: gpg --list-keys yourname
    • gpg --edit-key YOURMASTERKEYID
    • An der gpg>Eingabeaufforderung:addkey
    • Hier werden Sie nach Ihrer Passphrase gefragt. Geben Sie sie ein.
    • Wählen Sie den Schlüsseltyp "RSA (nur Vorzeichen)".
    • Es wäre ratsam, eine Bit-Schlüsselgröße von 4096 (oder 2048) zu wählen.
    • Wählen Sie ein Ablaufdatum (Sie können Ihre Unterschlüssel häufiger als die Hauptschlüssel drehen oder sie für die Dauer des Hauptschlüssels ohne Ablaufdatum aufbewahren).
    • GnuPG erstellt (irgendwann) einen Schlüssel, aber Sie müssen möglicherweise warten, bis er genügend Entropie enthält.
    • Speichern Sie den Schlüssel: save
  3. Sie können dies wiederholen und bei Bedarf auch einen Unterschlüssel "RSA (Encrypt Only)" erstellen.

  4. Kopieren $HOME/.gnupgSie nun auf Ihre USB-Sticks.

  5. Hier kommt der schwierige Teil. Sie müssen den privaten Hauptschlüssel entfernen, und GnuPG bietet leider keine bequeme Möglichkeit, dies zu tun. Wir müssen den Unterschlüssel exportieren, den privaten Schlüssel entfernen und den Unterschlüssel wieder importieren.

    • Exportieren Sie die Unterschlüssel: gpg --export-secret-subkeys YOURMASTERKEYID >secret-subkeys(zu entscheiden , welche Unterschlüssel zu exportieren, geben Sie den Unterschlüssel - IDs jeweils mit einem Ausrufezeichen gefolgt: gpg --export-secret-subkeys SUBKEYID! [SUBKEYID! ..])
    • Entfernen Sie Ihren geheimen Hauptschlüssel: gpg --delete-secret-key YOURMASTERKEYID
    • Importieren Sie die Unterschlüssel zurück: gpg --import secret-subkeys
    • Stellen Sie sicher , dass gpg -Keine sec#statt nur secfür Ihren privaten Schlüssel. Das heißt, der geheime Schlüssel ist nicht wirklich da. (Siehe auch das Vorhandensein eines Dummy-OpenPGP-Pakets in der Ausgabe von gpg --export-secret-key YOURMASTERKEYID | gpg --list-packets).
    • Optional kann das Passwort die Unterschlüssel zu schützen ändern: gpg --edit-key YOURMASTERKEYID passwd. (Beachten Sie, dass das private Schlüsselmaterial auf der Sicherung, einschließlich des privaten Hauptschlüssels, durch die alte Passphrase geschützt bleibt.)

Ihr Computer ist jetzt für den normalen Gebrauch bereit.

Wenn Sie die Hauptschlüssel verwenden müssen, hängen Sie das verschlüsselte USB-Laufwerk ein und legen Sie die Umgebungsvariable GNUPGHOME fest:

export GNUPGHOME=/media/something
gpg -K

Oder verwenden Sie das Befehlszeilenargument --home:

gpg --home=/media/something -K

Der letztere Befehl sollte nun Ihren privaten Schlüssel mit secund nicht mit auflisten sec#.

Mehrere Unterschlüssel pro Computer im Vergleich zu einem einzelnen Unterschlüssel für alle Computer

Auszug aus dem Debian-Unterschlüssel-Wiki. Ursprünglich in Kommentaren vermerkt. [Paraphrasierung] und Betonung meiner.

Man könnte versucht sein, einen Unterschlüssel pro Computer zu haben, so dass Sie nur den möglicherweise gefährdeten Unterschlüssel dieses Computers austauschen müssen. Im Fall eines einzelnen Unterschlüssels, der auf allen Computern verwendet wird, muss er auf allen Computern ausgetauscht werden [wenn dieser einzelne Unterschlüssel kompromittiert wird oder vermutet wird].

Dies funktioniert jedoch nur zum Signieren von Unterschlüsseln . Wenn Sie mehrere Verschlüsselungsunterschlüssel haben, wird gpg nur für den neuesten Verschlüsselungsunterschlüssel und nicht für alle bekannten und nicht gesperrten Verschlüsselungsunterschlüssel verwendet.

Justin C
quelle
5
Gute Fragen und Antworten, aber bei AFAIK gibt es immer noch ein Problem mit diesem Setup ... Es eignet sich hervorragend zum Signieren, aber nicht zum Verschlüsseln, wenn Sie nicht den gleichen Verschlüsselungsschlüssel für Ihre verschiedenen Geräte verwenden möchten, da Sie von jemandem zum Empfänger eines verschlüsselten Codes gemacht werden message, gpg verwendet standardmäßig den zuletzt generierten nicht widerrufenen enc-Schlüssel. Es ist nicht möglich, die Absender zu zwingen, einen bestimmten enc-Unterschlüssel zu verwenden, der von der UID abhängt (privat oder beruflich usw.).
KurzedMetal
2
Vielleicht ist das ein Problem. Meine größte Sorge ist der Verlust des Vertrauensnetzes, das ich um meinen Hauptschlüssel (der nur signiert) aufbaue. Natürlich muss der Verschlüsselungsunterschlüssel auf allen Geräten vorhanden sein, die ich zum Lesen verschlüsselter Nachrichten verwende. Wenn mein Verschlüsselungsschlüssel jemals kompromittiert wird, ist nur ich am Wiederherstellungsprozess beteiligt. im gegensatz dazu, meinen master signing key zu verlieren und mein web of trust bitten / überzeugen zu müssen, den neuen key zu signieren. Ich hatte nicht vor, den Verschlüsselungsunterschlüssel in meinem Tresor zu verschieben.
Justin C
9

Als jemand, der auch keine Single Points of Failure mag (einschließlich Hauptschlüssel und insbesondere Passwörter), ist dies die Art und Weise, wie ich es tun würde. Damit können Geräte über ein Web of Trust betrieben werden, ohne dass eine dezentrale Identität erforderlich ist.

Ich weiß nicht, ob es dafür bereits ein System gibt, aber ich denke, es könnte wahrscheinlich zusammen mit einem Cron-Job und ein paar Zeilen Bash gescrobbelt werden.

In diesem System gibt es zwei Klassen von Schlüsselpaaren: Geräte-Schlüsselpaare und Zeitrahmen-Schlüsselpaare . Auf jedem Gerät wird ein Geräte-Schlüsselpaar für den Benutzer generiert, das für die gesamte Lebensdauer auf diesem Gerät verbleibt . Ein Zeitrahmen-Schlüsselpaar wird von einem zentralen Server in regelmäßigen Abständen generiert (monatlich, täglich, stündlich - je nachdem, wie paranoid Sie sein möchten). Der öffentliche Schlüssel wird öffentlich bekannt gegeben (der Server selbst verfügt über ein eigenes Geräte-Schlüsselpaar zum Signieren), und der private Schlüssel wird verschlüsselt mit dem öffentlichen Schlüssel jedes Geräts verteilt, das Zugriff auf diesen Schlüssel haben soll. (Diese Verteilung sollte so privat wie möglich sein, z. B. wenn Geräte direkt mit dem Server verbunden sind.)

Zum Signieren von Nachrichten verwenden Sie den Geräteschlüssel des Geräts, von dem Sie die Nachricht senden. Wenn jemand Ihnen eine Nachricht senden möchte, kann er diese mit Ihrem aktuellen öffentlichen Zeitrahmenschlüssel signieren. (Sie sollten über ein automatisiertes System verfügen, um mit den Ansagen Schritt zu halten.) Sie können ihre Nachricht dann von jedem Gerät aus lesen.

Zum Lesen älterer verschlüsselter Nachrichten werden ältere Zeitrahmen-Schlüsselpaare auf jedem Gerät gemäß einer geeigneten Strategie gesichert (einschließlich des Zeitrahmen-Schlüsselpaar-Generierungsservers, falls Sie dies wünschen - wiederum abhängig von Ihrem Grad an Paranoia), auf dem Sie einen anderen Satz haben von passwortgeschützten Schlüsselpaaren, die die älteren Schlüssel schützen (mit so vielen Passwörtern im Laufe der Zeit, wie Sie sich gerne merken).

Wenn ein Gerät gestohlen oder auf andere Weise kompromittiert wird, können Sie ein anderes Ihrer öffentlich vertrauenswürdigen Geräte verwenden, um eine öffentlich signierte Nachricht zu erstellen, in der Ihre Identität überprüft wird (z. B. durch die Feststellung, dass Sie an einem öffentlichen Treffen teilnehmen und / oder von einem vertrauenswürdigen Freund persönlich verifizieren lassen) und den gefährdeten Geräteschlüssel und alle Zeitrahmenschlüssel, auf die er Zugriff hatte, widerrufen. Wenn Sie den Schlüssel widerrufen, entfernen Sie das gestohlene Gerät auch aus der Liste der vertrauenswürdigen Geräte des Servers (mit einem Kennwort und Ihrem vertrauenswürdigen Geräteschlüssel).

Die Richtlinie für das Vertrauen in neu angekündigte Geräteschlüssel sollte etwa den aktuellen Vertrauensrichtlinien entsprechen. Ich glaube, dass eine angemessene Richtlinie darin besteht, dem generierenden Server, einem mobilen Gerät und einem großen und schweren Gerät zu vertrauen, da es schwer zu stehlen / zu infiltrieren ist Das Telefon eines Benutzers, ein Desktop-PC und VPS in einem gemeinsamen Überfall, bevor der Benutzer es bemerkt.

Wenn Ihr Server kompromittiert ist, widerrufen Sie ihn einfach mit dem gleichen Verfahren, das für jedes andere kompromittierte Gerät beschrieben wurde (möglicherweise mit einer strengeren Richtlinie, die der zum Hinzufügen eines neuen Geräts ähnelt), und verwenden Sie einen neu gesicherten oder insgesamt neuen Server (mit einem) neues Geräte-Schlüsselpaar).

Stuart P. Bentley
quelle
Der Widerrufsbereich ist ein wenig trübe wie geschrieben - ein Widerruf eines Geräts sollte mit einer Ansage von einem anderen Gerät möglich sein (um nicht zu scheitern, wenn jemand Ihren Laptop stiehlt und Ihr Telefon den Server nicht direkt kontaktieren kann), aber nicht möglich zu von einem Dieb durchgeführt werden (Geräte sollten daher einen kennwortgeschützten Schlüssel für den Widerruf haben). Bei widersprüchlichen Berichten sollten alle Schlüssel vorübergehend nicht vertrauenswürdig sein, bis eine manuelle Überprüfung durch einen Dritten durchgeführt werden kann.
Stuart P. Bentley
In der Tat kann es ratsam sein, über einen anderen Mechanismus zum Widerrufen von Schlüsseln zu verfügen, der ein starkes öffentliches Kennwort verwendet, das regelmäßig manuell aktualisiert (ersetzt) ​​wird. Auf diese Weise können Sie den Schlüssel widerrufen, ohne von einem Gerät abhängig zu sein (z. B. von Ihnen) nur mit deinem Handy raus und jemand stiehlt es), solange du das Passwort geheim hältst.
Stuart P. Bentley