Hallo allerseits. In diesem Artikel möchte ich meine Erfahrungen beim Einrichten und Verwenden eines Kennwortverwalters für Linux mitteilen. Dies zeichnet sich nicht nur durch seine Einfachheit aus, sondern auch durch die Verwendung der bereits im System vorhandenen Tools und die Möglichkeit, ausschließlich von der Konsole aus zu arbeiten. Insbesondere sind Probleme im Zusammenhang mit der Erstellung und Speicherung des geheimen gpg-Schlüssels sowie der Einstellung der Zusammenarbeit zwischen pass, gpg, git, github und dem Browser betroffen. Alles ist unter Linux, Windows und Android.
Was ist das und wie funktioniert es?
Technisch gesehen ist pass eine sehr einfache Bindung über GnuPG und git, die in bash geschrieben sind. Jedes Kennwort (und zugehörige Informationen, z. B. die Anmeldung) werden in einer verschlüsselten Datei gespeichert. Die Suche nach dem gewünschten Passwort erfolgt über den Dateinamen, Verschlüsselung - mit GnuPG, Synchronisation zwischen Geräten - mit git.
Zusätzlich zum ursprünglichen Pass gibt es zwei weitere beliebte Projekte, die mit dem Pass kompatibel sind und unter Windows ausgeführt werden:
- QtPass . Eine GUI-Anwendung, die, wie Sie vielleicht vermuten, in Qt geschrieben wurde.
- Gopass . Eine in go geschriebene Kommandozeilenanwendung. Unter Windows benutze ich es. Meiner Meinung nach fügten die Entwickler dort jedoch zu viele zusätzliche Funktionen hinzu, ohne auf ihre Intuitivität zu verzichten.
Entwickler des Passes ist Jason Donenfeld, der auch Autor von WireGuard (VPN-Implementierungen basierend auf modernen Kryptografiestandards, "Kunstwerk im Vergleich zu OpenVPN und IPSec" nach Linus Torvalds, der voraussichtlich im Linux 5.6-Kernel erscheinen wird).
Geheime Schlüsselerstellung
GnuPG - ein System zur Verschlüsselung und elektronischen Signatur. Trotz der Mängel (zum Beispiel ein Artikel , der gpg kritisiert) ist es seit mehr als 20 Jahren der De-facto-Standard. Selbst der Artikel über den Link findet es schwierig, ein alternatives Tool zum Verschlüsseln von Dateien zu benennen.
Der Vorgang zum Erstellen eines geheimen Schlüssels in der Konsole wird beispielsweise unter habr beschrieben . Warum nicht in der GUI? Im KDE-Projekt erstellten sie ein Frontend für die GPG mit dem Namen Kleopatra . Linux-Benutzer finden es in den Repositories und in gpg4win ist Kleopatra sofort einsatzbereit.
Wählen Sie im Menü File
- New Key Pair
- Create a personal OpenPGP key pair
.
Geben Sie den Namen und die E-Mail-Adresse ein. Sie müssen sich keine Sorgen machen, dass Sie sie in Zukunft ändern werden. Mit GPG können Sie dem Schlüssel nach Belieben eine neue UID hinzufügen und vorhandene löschen. Wenn Sie Ihre Git-Commits mit dem erstellten Schlüssel signieren möchten und die entsprechenden Kontrollkästchen "Bestätigt" aktivieren möchten, müssen Sie in Ihrem Github-Konto eine echte E-Mail-Adresse mit dem Status "Bestätigt" angeben.
Klicken Sie anschließend auf Advanced Settings
, um die Schlüsseleinstellungen zu konfigurieren.
ECDSA/EdDSA
Abschnitt Key Material
ECDSA/EdDSA
+ ECDH
. Ich bevorzuge es, nicht den klassischen RSA-Algorithmus zu verwenden, sondern auf der Grundlage der elliptischen Kurven ed25519 / cv25519. Ihr Hauptvorteil gegenüber RSA aus Sicht des Endbenutzers ist die geringere Schlüsselgröße bei gleicher kryptografischer Stärke. Es wird argumentiert, dass der 256-Bit-Schlüssel ed25519 ungefähr so stark ist wie der 3072-Bit-RSA-Schlüssel. Der einzige Vorteil des letzteren ist seine hohe Verbreitung, insbesondere in Hardwaresystemen.
Sie können auch die Kurvenfamilien Brainpool und NIST aus dem Menü auswählen. Letztere stehen jedoch im Verdacht, eine NSA-Hintertür zu haben, und erstere haben auch geringfügige Beschwerden. Daher sind ed25519 und cv25519, die vom berühmten Kryptographen Daniel Bernstein vorgeschlagen wurden, die beste Wahl.
Interessant: Im aktiv beworbenen Authentifizierungsstandard FIDO U2F (an dessen Entwicklung Google aktiv beteiligt war) werden NIST-Kurven verwendet. Beispielsweise wird auch Android Keystore unterstützt, es gibt jedoch keine Unterstützung für ed25519. Warum ist das passiert?
Als Ergebnis werden 2 Unterschlüssel für elliptische Kurven erstellt. Eine für Signaturen, die andere für die Verschlüsselung, was wir brauchen. GPG erlaubt nicht, dass ein Unterschlüssel für beide verwendet wird, obwohl dies algorithmisch möglich ist (es gibt entsprechende Funktionen zum Beispiel in der libsodium
Bibliothek).
Wenn Sie diesen Schlüssel für die Arbeit mit Git verwenden möchten, Certificate Usage
Abschnitt Certificate Usage
die Elemente Signing
und Authentication
.
Im nächsten Schritt wird vorgeschlagen, ein Passwort einzugeben, mit dem der Schlüssel geschützt wird. Da der Schlüssel zum Verschlüsseln aller Daten im Speicher verwendet wird, handelt es sich bei diesem Kennwort um ein Master-Kennwort. Es lohnt sich, sich seiner Wahl mit besonderer Pedanterie zu nähern.
Master-Passwort-Generierung
Natürlich können Sie immer eine zufällige Zeichenfolge aus einer ausreichenden Anzahl (z. B. 20) Zeichen generieren. Es ist jedoch fast unmöglich, sich zu erinnern, und es ist schwierig, ohne Fehler einzugeben, insbesondere auf einem Smartphone. Aus diesem Grund empfiehlt die EFF, in Ihrem Leitfaden stattdessen Passphrasen zu verwenden.
Die Methode funktioniert folgendermaßen: Nehmen Sie ein ausreichend großes Wörterbuch (EFF bietet mehrere Wörterbücher an, zum Beispiel dieses ) und wählen Sie mindestens 6 zufällige Wörter aus. Sie können wählen, wie Sie möchten, auch ohne einen Computer überhaupt mit einem Würfel oder einer Münze. Diese Methode wird als Diceware bezeichnet . Ich habe Würfel und Münzen noch nicht erreicht, daher verwende ich nur das in GNU coreutils shuf
Dienstprogramm shuf
:
$ shuf --random-source=/dev/random -n 6 ./eff_large_wordlist.txt 51345 rendering 24564 edging 65652 vivacious 31343 footprint 55261 snore 24436 earache
Wir speichern diese Passphrase an einem sicheren Ort außerhalb des Computers.
Als Ergebnis wird ein geheimer Schlüssel erstellt. Wenn Sie in der Konsole arbeiten, müssen Sie häufig den Fingerabdruck der Konsole angeben. Es lohnt sich, diese Nummer aufzuschreiben.
Jetzt können Sie die Integration von gpg und git konfigurieren.
Integration von Gpg, Git und Github
Genau genommen ist dieser Artikel optional. Der Passwort-Speicherpass ist nur ein Verzeichnis mit verschlüsselten Dateien, das heißt, er kann nach Belieben synchronisiert werden. Google Drive, Yandex.Disk usw. usw. Wenn Sie git nicht verwenden möchten, empfehle ich Ihnen, auf Syncthing zu achten. Dies ist ein Open-Source-Programm, das ein Minimum an Einstellungen erfordert und Dateien direkt zwischen Geräten überträgt, ohne sie auf Servern von Drittanbietern zu speichern.
Als Git-Hosting stört sich niemand daran, seinen eigenen Server durch den Einsatz von Gitea zu erhöhen. Dies bedeutet jedoch die Kosten für den Support und garantiert nicht unbedingt eine hohe Sicherheit und Zuverlässigkeit. Aus diesem Grund habe ich, ohne die Verwendung von Microsoft-Produkten zu verachten, einfach ein privates Repository auf Github erstellt.
Der Standard-Authentifizierungsmechanismus in Git ist durch SSH. Es versteht sich normalerweise, dass hierfür ein spezieller SSH-Schlüssel erforderlich ist. Es ist jedoch möglich, den im vorherigen Schritt erstellten gpg-Schlüssel zu verwenden, ohne unnötige Entitäten zu generieren. Damit der gpg-Schlüssel (genauer gesagt der Unterschlüssel) von ssh verwendet werden kann, müssen zwei Bedingungen erfüllt sein:
- Es muss das Flag
A
- Authenticate gesetzt sein. - Der Schlüsselgriff muss in die
~/.gnupg/sshcontrol
.
Das erste Element wurde bereits abgeschlossen, und Sie können mit dem Befehl keygrip abrufen
gpg --list-secret-keys --with-keygrip 0609C9DFEF1AA2B38DEDBADCC0544B5554068AC7
In der gpg-Ausgabe interessieren wir uns für den Schlüsselgriff des Unterschlüssels 05B6641E23D720E87EE6A26020BAB214B842F2B7
( 05B6641E23D720E87EE6A26020BAB214B842F2B7
).
Jetzt können Sie den öffentlichen Schlüssel auf github hochladen. Wechseln Sie zum Abschnitt SSH and GPG keys
im Profil und wählen Sie New SSH key
. In der Konsole tippen wir
$ gpg --export-ssh-key 0609C9DFEF1AA2B38DEDBADCC0544B5554068AC7 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPfj81nennAoujvw1fLzGx9iED34zk5oDMYKuUcBq5wv openpgp:0x54068AC7
und kopieren Sie den resultierenden öffentlichen SSH-Schlüssel.
Git kann Commits mit gpg signieren, und github unterstützt dies. Ich halte dies für ein nützliches Sicherheitsmerkmal. Exportieren Sie den gpg-Befehl für den öffentlichen Schlüssel
$ gpg --export --armor 0609C9DFEF1AA2B38DEDBADCC0544B5554068AC7 -----BEGIN PGP PUBLIC KEY BLOCK----- mDMEXcrHrBYJKwYBBAHaRw8BAQdA9+PzWd6ecCi6O/DV8vMbH2IQPfjOTmgMxgq5 RwGrnC+0G0hlbGxvIEhhYnIgPGZha2VAZW1haWwuY29tPoiQBBMWCAA4BQsJCAcC BhUKCQgLAgQWAgMBAh4BAheAFiEEBgnJ3+8aorON7brcwFRLVVQGiscFAl3WO2wC GyMACgkQwFRLVVQGiscg5AEAkh0a6OQS2CPiXq9bWB+wULHUGT6NYZhwZ3eUQCfH Zq0A/iFBJQkAZIFdqH84ksFbvv6K/LQy72NRJzK0tho6qFwHuDgEXcrHrBIKKwYB BAGXVQEFAQEHQEs6UVOtj5yMGxvRcMU577miH/Bh5kZWMJKHxsDBcXV4AwEIB4h4 BBgWCAAgFiEEBgnJ3+8aorON7brcwFRLVVQGiscFAl3Kx6wCGwwACgkQwFRLVVQG isea8wD/X5JSJW0PMu/KucytUZZo8obHa86/TUwH/8+xQ3+djuEBALugbQRmCIr5 /JYO7x5PNA0QYqhh7LIZ9nKYp0mhqpcO =dc89 -----END PGP PUBLIC KEY BLOCK-----
und kopieren Sie, was mit dem New GPG key
passiert ist.
Weitere Aktionen sind spezifisch für Ihr Betriebssystem.
Integration von GPG und Git (Linux)
Der von git verwendete OpenSSH-Client kann Schlüssel auf zwei Arten empfangen: aus dem ~/.ssh
und über den vom ssh-agent
Daemon erstellten Socket. Letzterer kann gpg-agent
, den wir verwenden werden. In die Datei ~/.gnupg/gpg-agent.conf
muss die Zeile enable-ssh-support
.
Starten Sie den gpg-agent mit dem Befehl neu
gpg-connect-agent reloadagent /bye
Danach wird ein Socket bei erstellt
${XDG_RUNTIME_DIR}/gnupg/S.gpg-agent.ssh
Dieser Pfad (abhängig von der Distribution) muss in die Umgebungsvariable $SSH_AUTH_SOCK
werden und wird von ssh übernommen. Wir geben den Befehl in die Konsole ein
ssh -T git@github.com
Wenn alles geklappt hat, wird nach Eingabe des Master-Passworts eine Meldung über die erfolgreiche Authentifizierung angezeigt.
Integration von gpg und git (Windows)
In jüngerer Zeit hat Microsoft OpenSSH zur Anzahl der für die Installation verfügbaren Windows-Komponenten hinzugefügt und auch die Unterstützung für Sockets wie AF_UNIX
, beispielsweise dasselbe SSH_AUTH_SOCK
. Win32-OpenSSH kann jedoch nicht mit gpg4win interagieren, da weiterhin nur Named Pipes verwendet werden.
Daher muss der immergrüne Kitt installiert werden. Wir schreiben in die Datei
~/AppData/Roaming/gnupg/gpg-agent.conf
enable-putty-support
und starte gpg-agent neu. Danach wird er so tun, als wäre er ein Festzug - der Dämon der Schlüssel. Die sshcontrol
Datei muss sich im selben Ordner befinden.
Damit der Git-Client Putty verwenden kann, müssen Sie die Umgebungsvariable GIT_SSH
mit dem Pfad zu plink.exe
. Zum Beispiel habe ich das
C:\ProgramData\chocolatey\bin\PLINK.EXE
Übrigens über git. Der normalerweise installierte git for windows
Client enthält eine Menge Unnötiges (zumindest nicht, damit Gopass funktioniert), zum Beispiel eine eigene Implementierung von OpenSSH. Die Entwickler stellen jedoch leichtere Versionen her, die auf Github heruntergeladen werden können . Zum Beispiel gibt es 2-mal kleineres MinGit und riskante Leute können MinGit-busybox ausprobieren. Die busybox-Version entstand aufgrund des Wunsches der Entwickler, einen Git-Client mit der Win32-API ohne Ebenen wie MSYS2 zu erstellen. Allerdings enthält mingit-busybox nach eigenen Angaben immer noch viele Bugs. Mehr über diese Bemühungen können Sie im Ticket nachlesen.
Stellen Sie sicher, dass gpg-agent ausgeführt wird ( gpg-connect-agent /bye
) und überprüfen Sie die Verbindung zu github:
plink git@github.com
Git-Setup
Nichts ungewöhnliches hier. Ich denke, die Befehle können ohne Kommentar gegeben werden:
git config --global user.name "Hello Habr" git config --global user.email fake@email.com git config --global user.signingKey 0609C9DFEF1AA2B38DEDBADCC0544B5554068AC7 git config --global gpg.program /usr/bin/gpg git config --global commit.gpgSign true
Das Element gpg.program
benötigt, wenn sich gpg nicht im PATH
.
Geheime Schlüsselsicherung
Der geheime Schlüssel sollte genauso sicher gespeichert werden wie die Passphrase, dh außerhalb des Computers. Sie können einfach eine lange Folge von Zahlen drucken, diese aber erkennen oder über die Tastatur eingeben - dies ist nichts für schwache Nerven. Daher ziehe ich es vor, einen QR-Code zu generieren, der mit jedem Smartphone einfach zu scannen ist. qrencode
gibt es ein spezielles qrencode
Programm. Ein QR-Code-Bild wird wie folgt generiert:
gpg --export-secret-key 0609C9DFEF1AA2B38DEDBADCC0544B5554068AC7 | qrencode --8bit --output secret-key.qr.png
Je weniger unnötige Informationen im Backup sind, desto besser. Hier ist eine sehr kleine Schlüsselgröße ed25519. Danke an Daniel Bernstein!
Es gibt ein spezielles Paperkey- Dienstprogramm, mit dem Sie die Datenmenge auf das Limit reduzieren können. Der Preis für die Reduzierung ist, dass der geheime Schlüssel aus einem solchen Backup nur wiederhergestellt werden kann, wenn es einen öffentlichen gibt. Das GPG-Ökosystem verfügt über spezielle Server zum Speichern öffentlicher Schlüssel, die Sie nicht nur im Artikel https://eax.me/gpg/ nachlesen können.
Ein Paperkey-Backup wird wie folgt erstellt:
gpg --export-key 0609C9DFEF1AA2B38DEDBADCC0544B5554068AC7 > pubkey.asc gpg --export-secret-key 0609C9DFEF1AA2B38DEDBADCC0544B5554068AC7 | paperkey --output-type raw | qrencode --8bit --output secret-key.qr.png
Die zweite Regel der Sicherung: Die Sicherung existiert erst, wenn die Fähigkeit zur Wiederherstellung von Daten bestätigt wurde. Deshalb führen wir einen Stresstest durch. Löschen Sie den geheimen Schlüssel mit dem Befehl
gpg --delete-secret-key 0609C9DFEF1AA2B38DEDBADCC0544B5554068AC7
Dann scannen wir den QR-Code und importieren den Schlüssel zurück in das GPG. Als QR-Code-Scanner für Android mag ich BinaryEye , ein kostenloses Programm mit einer benutzerfreundlichen Oberfläche. Im Bild unten - Sicherung des geheimen Schlüssels aus diesem Artikel.
paperkey --pubring pubkey.asc --secrets from_qr.asc > secretkey.asc gpg --import ./secretkey.asc
Ich hoffe, Sie werden diesen Schlüssel nirgendwo verwenden. Es wird nur zu Illustrationszwecken erstellt.
Wenn alles funktioniert, können Sie weitermachen.
Mit (go) pass
Jetzt, da wir einen sicher gespeicherten und sicheren privaten Schlüssel haben und die Integration mit git funktionieren, können wir den Pass selbst verwenden. Ich bevorzuge Gopass, da diese alternative Bindung unter Windows funktioniert.
Initialisieren Sie die Passwortspeicherung mit dem Befehl
gopass init
und wählen Sie den gewünschten geheimen Schlüssel aus der Liste aus.
Die Arbeit mit git geschieht auf die gleiche Weise wie bei einem regulären Repository, nur die Befehlszeile muss einen (go)pass
hinzufügen. Wir initialisieren das Repository und fügen dort den gewünschten Ursprung hinzu:
gopass git init gopass git remote add origin git@github.com:xxx/taisho-secrets.git
Die Adresse finden Sie auf der Repository-Seite von Github, indem Sie auf die Schaltfläche Klonen Clone or download
klicken.
Gopass hat einen bestimmten Befehl
gopass sync
Durchführen sowohl des git pull
als auch des git push
, d. h. der vollständigen Synchronisation.
Der Standardspeicher wird im Ordner ~/.password-store
Sie können jedoch auch Ihren eigenen Pfad angeben.
Um mit Passwörtern zu arbeiten, unterstützt die Konsole die Befehle ls, cp, mv, search, create usw. Sie können die vollständige Liste gopass --help
, indem gopass --help
. Ich persönlich verwende jedoch nicht die Konsole, sondern das Browser-Plugin in 95% der gopass --help
.
Browser-Integration
Das Browser-Plugin heißt gopass bridge und befindet sich im Chrome- und Firefox-Store (siehe Link).
Um das Plugin mit gopass selbst zu verbinden, benötigen Sie ein Hilfsskript und ein Manifest für natives Messaging. Sie werden vom Team erstellt.
gopass jsonapi configure
Dadurch können wir einen Browser und den Speicherort des Skripts auswählen.
Überprüfen Sie, wie alles funktioniert. Erstelle ein neues Passwort:
gopass new habr
Wir beantworten alle Fragen und sparen. GPG fordert Sie auf, ein Hauptkennwort für die Arbeit mit dem privaten Schlüssel einzugeben.
Jetzt öffnen wir das Menü des Plugins mit einem charakteristischen blauen Gopher und wenn alles gut gegangen ist, können wir dort unser Passwort finden.
TOTP-Tasten
Persönlich verwende ich FreeOTP , Sie können jedoch mit diesen Schlüsseln mit pass arbeiten. Benutzer des ursprünglichen Passes müssen die pass-otp-Erweiterung installieren, und in gopass und APS (siehe unten) sind die erforderlichen Funktionen sofort verfügbar.
Um dem Passwortspeicher mit pass-otp einen TOTP-Schlüssel hinzuzufügen, erhalten wir die URL (beginnend mit otpauth://
) und geben den Befehl ein
pass otp insert totp-secret
Ob die resultierende Authentifizierung als Zwei-Faktor bezeichnet werden kann, ist ein strittiger Punkt. KeePassXC-Entwickler empfehlen, TOTP-Schlüssel in einer separaten Datenbank zu speichern, die durch ein anderes Kennwort geschützt ist. Im Vorbeigehen kann dies auch gemacht werden.
Android-Integration
Die Implementierung von GnuPG für Android heißt OpenKeychain . Um es zu konfigurieren, gehen Sie einfach zum Menü "Schlüsselverwaltung" und importieren Sie den zuvor erstellten geheimen Schlüssel. Der einzige Nachteil von OpenKeychain für mich persönlich ist, dass es keine Fingerabdrucksperre gibt.
Die Pass-Implementierung für Android heißt Android-Password-Store oder einfach APS.
Installieren Sie APS und führen Sie es aus. Rufen Sie vor dem Synchronisieren des Passwortspeichers das Menü "Einstellungen" auf. Dort benötigen wir folgende Gegenstände:
git
. Die resultierende URL sollte mit der auf der Repository-Seite von github angegebenen übereinstimmen. Art der Autorisierung - OpenKeychain
.Git utils
. Geben Sie in diesem Abschnitt den Benutzernamen und die E-Mail-Adresse des GPG-Schlüssels an.OpenPGP
. Wählen Sie OpenKeychain
.
Diese zuletzt aufgetauchte Funktion umfasst das Ausfüllen von Kennwörtern in Anwendungen unter Android 8.0+.
Hinweis für Benutzer von Huawei-Smartphones und für alle anderen: OpenKeychain, APS, BinaryEye, FreeOTP sowie Syncthing, Telegram, Tachiyomi, KDE Connect und vieles mehr sind in F-Droid verfügbar. Google Play-Nutzer sollten dies zu schätzen wissen: ein Softwarekatalog, der keine Anzeigen, Rootkits oder einfach nur Junk-Software aus dem berühmten Tonsky-Artikel enthält .
Vor der automatischen Vervollständigung in APS habe ich keepass2android verwendet . Es ist aus dem ursprünglichen Grund nicht in F-Droid enthalten: Es ist in Xamarin geschrieben, aber F-Droid-Betreuer können dieses Framework seit 9 Monaten nicht mehr auf ihrem Build-Server installieren. Jemand macht etwas.
Jetzt können Sie klonen. Wählen Sie auf dem Hauptbildschirm "Vom Server klonen", geben Sie den gewünschten Speicherort für das Repository an und überprüfen Sie die Git-Einstellungen.
Wenn ein Versuch, mit git zu arbeiten, zu einem Fehler führt (dies war wahrscheinlich in früheren Versionen von APS der jgit
eine veraltete Version der jgit
Bibliothek aus dem Eclipse-Projekt verwendet wurde), gibt es immer noch Syncthing.
Fazit
Natürlich ist pass nicht so einfach zu konfigurieren. Für diesen Preis können Sie jedoch darauf vertrauen, dass die von uns verwendeten Tools (sowie Leute wie Linus Torvalds oder Edward Snowden) nicht an einem Punkt veraltet sind, das Datenformat nicht ändern und nicht ohne Support sein werden. In diesem Fall wird durch die einfache modulare Architektur von pass die Erstellung alternativer Clients und Erweiterungen gefördert.
Wenn Sie sich gegen die Verwendung von pass entscheiden, hoffe ich, dass einige der im Artikel genannten Programme für sich allein von Nutzen sind.