Ich bin ein langjähriger Nutzer des Passwort-Managers 1Password. Obwohl die Firma vor einiger Zeit beschlossen hat, ein Abo-Modell einzuführen und in die Cloud umzuziehen, bin ich der Software treu geblieben. Allerdings habe ich ein sehr langes, komplexes und schwer zu merkendes Passwort als Master-Passwort für den Online-Zugang erstellt, um den Zugriff über die Cloud besser abzusichern.
Da ich mir dieses lange Passwort aber nicht merken kann und 1Password mich — insbesondere auf meinem alten iMac ohne TouchID — zur Eingabe zwingt, habe ich nach einer Lösung gesucht, die es mir ermöglicht, ein etwas leichter zu merkendes Passwort lokal für die App zu verwenden.
Der erster Ansatz
Mein erster Ansatz war, das Passwort verschlüsselt im Notizen-Programm auf dem Mac zu speichern. Bei Bedarf musste ich nur das Programm öffnen, die Notiz suchen und mit einem einfacheren Passwort entschlüsseln. Dann wurde das Passwort kopiert und in 1Password eingefügt.
Das funktionierte, war aber etwas umständlich und am Ende gab es auch noch ein Problem zu lösen, da das Passwort nicht automatisch aus dem Clipboard gelöscht wurde, aber dazu später mehr.
Auf meinem Linux-Rechner habe ich bereits eine Lösung mit einer verschlüsselten Datei und einem kleinen Skript für das Terminal verwendet, um eine Datei zu entschlüsseln, in der das Master-Passwort gespeichert ist. Dieses wird nach der Entschlüsselung per Skript in das Clipbard kopiert und kann dann in 1Password eingefügt werden, um das Programm zu öffnen. Die Skripte zum Verschlüsseln und Entschlüsseln wollte ich für den Kurzfehl wiederverwenden.
Schritt 1: Verschlüsselte Datei erstellen
Da das Verschlüsseln eines Textes durchaus ein Vorgang ist, den man öfter benutzen kann, habe ich zusammen mit ChatGPT ein Shell-Skript erstellt, das nach dem Text und einem Passwort fragt, den Text dann verschlüsselt und in einer Datei speichert, deren Pfad und Name beim Aufruf des Skripts angegeben wird.
Exkurs: Speichern und Ausführen von Shell-Skripten
Ich speichere alle meine persönlichen Shell-Skripte im Verzeichnis~/bin
oder in der langen Schreibweise<strong>/Users/MeinMacUser/bin</strong>
. In diesem Fall mit dem Namen<strong>verschluesselt</strong>
. Damit die Skripte bei der Eingabe im Terminal auch gefunden und ausgeführt werden, habe ich die Datei~/.zprofileum
die Zeileexport
<strong>PATH="/Users/MeinMacUser/bin:$PATH"</strong>
ergänzt. Außerdem muss das Skript als ausführbare Datei markiert werden, dazu wird im Terminal<strong>chmod +x ~/bin/verschluesseln</strong>
aufgerufen. Danach ist es am einfachsten, das Terminalfenster zu schließen und ein neues zu öffnen. Nun kann das Skript an beliebiger Stelle z.B. so aufgerufen werden:
<strong>verschluesseln ~/Dokumente/ganzgeheimpasswd.txt</strong>
Aber hier ist nun das Skript:
#!/bin/zsh # Überprüfung, ob ein Dateiname als Argument übergeben wurde if [ $# -eq 0 ]; then echo "Bitte geben Sie den Namen der Ausgabedatei als Argument an." exit 1 fi # Der Dateiname wird vom ersten Argument genommen output_file=$1 # Überprüfung, ob die Datei bereits existiert if [ -f "$output_file" ]; then # Die Datei existiert bereits, frage nach Bestätigung zum Überschreiben echo "Die Datei '$output_file' existiert bereits." read -p "Möchten Sie die Datei überschreiben? (j/n): " antwort if [[ $antwort != "j" ]]; then echo "Vorgang abgebrochen." exit 1 fi fi # Anzahl der Iterationen für PBKDF2 iterations=10000 # Abfrage des zu verschlüsselnden Strings echo "Bitte geben Sie den zu verschlüsselnden String ein:" read -r string # Abfrage des Passworts, ohne es auf dem Bildschirm anzuzeigen echo "Bitte geben Sie Ihr Passwort für die Verschlüsselung ein:" read -s password # Verschlüsselung des Strings und Speicherung in der Datei echo -n $string | openssl enc -aes-256-cbc -a -salt -pass pass:$password -pbkdf2 -iter $iterations -out $output_file # Optional: Bestätigungsnachricht echo "Der String wurde verschlüsselt in '$output_file' gespeichert."
Da ich kein Verschlüsselungsexperte bin, habe ich eine konkurrierende KI, nämlich Bard von Google, gefragt, was sie vom ChatGPT Skript hält. Die Antwort war sehr ausführlich und aufschlussreich, ich hoffe Bard hat sich das nicht halluziniert 😉
Bards Antwort
Die von Ihnen verwendete Verschlüsselung mitopenssl enc -aes-256-cbc -a -salt -pass pass:$password -pbkdf2 -iter $iterations -out $output_file
ist sehr sicher.Die einzelnen Parameter:
- -aes-256-cbc: Verwendet den Advanced Encryption Standard (AES) mit einer Schlüssellänge von 256 Bit im Cipher Block Chaining (CBC) Modus. Dies ist ein sehr sicherer Algorithmus, der von der National Security Agency (NSA) für die Verwendung in Top-Secret-Anwendungen zertifiziert wurde.
- -a: Aktiviert die Base64-Kodierung der Ausgabe. Dies ist nützlich, wenn die verschlüsselten Daten in einer Umgebung gespeichert werden müssen, die keine binären Daten unterstützt.
- -salt: Verwendet einen zufälligen Saltwert, um die Verschlüsselung zu stärken. Der Saltwert wird mit dem Passwort kombiniert, um einen eindeutigen Schlüssel für die Verschlüsselung zu generieren.
- -pass pass:$password: Gibt das Passwort für die Verschlüsselung an. Das Passwort sollte stark sein und aus mindestens 12 Zeichen bestehen, die eine Mischung aus Groß- und Kleinbuchstaben, Zahlen und Sonderzeichen enthalten.
- -pbkdf2: Verwendet den PBKDF2-Algorithmus (Password-Based Key Derivation Function 2) zur Passwort-Härtung. Dies erhöht die Sicherheit der Verschlüsselung, indem es den Aufwand für Angreifer erhöht, das Passwort zu erraten.
- -iter $iterations: Gibt die Anzahl der Iterationen für den PBKDF2-Algorithmus an. Höhere Iterationszahlen erhöhen die Sicherheit der Verschlüsselung, aber auch die Verarbeitungszeit.
- -out $output_file: Gibt die Datei an, in der die verschlüsselten Daten gespeichert werden sollen.
Zusammenfassend lässt sich sagen, dass die von Ihnen verwendete Verschlüsselung sehr sicher ist und den aktuellen Stand der Technik widerspiegelt.
Es ist jedoch wichtig zu beachten, dass die Sicherheit der Verschlüsselung immer von der Stärke des Passworts abhängt. Verwenden Sie daher immer ein starkes Passwort und bewahren Sie es sicher auf.
Schritt 2: Eingabe des Entschlüsselungskennworts
Die Datei mit dem verschlüsselten 1Password Master-Passwort ist nun erstellt und gespeichert. Nun werden noch ein paar Komponenten für den Kurzbefehl benötigt. Die erste Komponente fragt das Passwort für die Entschlüsselung ab. Da 1Password keine direkten Schnittstellen für AppleScript und Kurzbefehle bietet, musste ich einen anderen Weg wählen. Ich habe mich für AppleScript entschieden, da ich nur so eine maskierte Passworteingabe implementieren konnte.
.
Für den Ablauf gehe ich davon aus, dass 1Passwort im Vordergrund steht und das Passwortfeld den Eingabefokus hat. Wenn nun die Tastenkombination zum Ausführen des Shortcuts gedrückt wird, verhält sich 1Passwort aus meiner Sicht seltsam, denn der Eingabefokus bleibt im Eingabefeld von 1Passwort, obwohl sich das AppleScript-Fenster darüber befindet. Mein Workaround ist, dass das AppleScript zuerst den Finder in den Vordergrund bringt, dann den Dialog aufruft, wobei das Eingabefeld dann den Fokus hat und man sofort lostippen kann. Nach der Passworteingabe übergibt das AppleScript das Passwort für den nächsten Schritt.
Hier der AppleScript Code:
on run tell application "System Events" tell application process "Finder" to set frontmost to true end tell set theResponse to display dialog "Gib das Master-Passwort ein?" default answer "" buttons {"OK"} default button "OK" with hidden answer set theText to text returned of theResponse return theText end run
Schritt 3: Entschlüsseln des Master-Passwortes
Für die Entschlüsselung des Master-Passwortes verwende ich wieder ein Shell-Skript, welches das zuvor entschlüsselte Passwort als Parameter nimmt und in der Variablen passwor
d speichert. Damit das Passwort auch übernommen wird, muss in den Optionen der Aktion “Shell-Skript ausführen” die Option “Eingabe: AppleScript-Ergebnis” ausgewählt sein, leider wird das Ergebnis der Auswahl bei mir im Control nicht angezeigt, was aber „nur” ein Darstellungsfehler ist. Außerdem muss die Option “Eingabe übergeben: als Argumente” ausgewählt sein. Nur dann kann das vom vorherigen AppleScript ermittelte Passwort als Parameter $1 an das Script übergeben werden. Den Pfad zur verschlüsselten Datei habe ich in diesem Skript fest codiert, da der Kurzbefehl nur für diesen einen Zweck funktionieren soll.
Das Ergebnis, also das Master-Passwort von 1Password, wird mit dem Befehl <strong>echo "$result" | pbcopy</strong>
, in das Clipboard geschrieben und kann von dort im nächsten Schritt genutzt werden.
#!/bin/zsh password=$1 # Dateiname der verschlüsselten Datei encrypted_file="/Users/MeinMacUser/Documents/ganzgeheimespasswd.txt" # Anzahl der Iterationen für PBKDF2 iterations=10000 # Entschlüsselung der Datei mit dem eingegebenen oder übergebenen Passwort und sicherer Schlüsselableitung result=$(openssl enc -d -aes-256-cbc -a -in $encrypted_file -pass pass:$password -pbkdf2 -iter $iterations) # Übergabe des Passwortes an das Clipboard echo "$result" | pbcopy
Schritt 4: Master-Passwort an 1Password übergeben
Das Passwort in dem Clipboard muss nun im nächsten Schritt an 1Password übergeben werden. Dazu muss 1Password zunächst wieder in den Vordergrund gebracht werden, damit dann über ein Systemereignis das Passwort in das Eingabefeld von 1Password eingefügt werden kann. Wenn der entsprechende Befehl ausgeführt ist, öffnet sich 1Password und eigentlich wäre damit aller erledigt. Aber befindet sch das Master-Passwort immer noch im Clipboard und könnte somit überall mit ⌘V als Klartext eingesetzt werden. Um das zu verhindern, leere ich am Ende des Skriptes die Zwischenablage mit der Zeile <strong>set clipboard to ""</strong>
.
tell application "1Password" activate tell application "System Events" to keystroke (the clipboard as text) set the clipboard to "" end tell
In meiner Umgebung habe ich aber noch einen weitere Komponente hinzuzufügen, daher brauche ich hier noch einen weiteren Schritt.
Schritt 5: 1Password Master aus der Zwischenablage von Alfred.app löschen
Normalerweise wird ein Clipboard-Eintrag beim nächsten Kopieren gelöscht. Da ich aber Alfred.app als Clipboard-Manager verwende, wird das Master-Passwort in der History gespeichert und muss auch dort gelöscht werden. Ich kann hier nur den Weg für den Alfred Clipboard-Manager beschreiben, wenn jemand andere Lösungen für andere Clipboard-Manager hat, nehme ich diese gerne auf.
Alfred bietet zwar die Möglichkeit, bestimmte Anwendungen von der Clipboard History auszuschließen, aber das wollte ich nicht generell für das Terminal. Ich brauchte also eine andere Lösung.
Nach einer Suche im Alfred Forum fand ich den Hinweis, dass die Clipboard History in einer SQlight Datenbank <strong>/Users/MeinMacUser/Library/Application Support/Alfred/Databases/clipboard.alfdb</strong>
gespeichert wird. Nach einigen Interaktionen mit ChatGPT kann ich nun folgenden Terminal-Befehl verwenden, der den letzten Eintrag in dieser Datenbank löscht. Dieses kleine Skript bildet dann den Abschluss meines Kurzbefehls.
sqlite3 "/Users/MeinMacUser/Library/Application Support/Alfred/Databases/clipboard.alfdb" "DELETE FROM clipboard WHERE ROWID = (SELECT ROWID FROM clipboard ORDER BY ROWID DESC LIMIT 1);"
Exkurs: Alternative zum Löschen des letzten Eintrag
Falls man mal mehr Einträge löschen möchte, dann kann man das auch über die Zeit machen, da alle Einträge mit eine Zeitstempel versehen sind. Der Zeitstempel besteht sind die Sekunden, die seid dem 01.01.2001 00:00 Uhr vergangen sind, was etwas komisch ist, da unter normalen Umständen die Sekunden seid dem 01.01.1970 00:00 Uhr zur Berechnung herangezogen werden. So löscht der folgende Befehl alle Einträgem der letzten 5 Minuten:sqlite3 clipboard.alfdb "DELETE FROM clipboard WHERE ts > ((strftime('%s', 'now') - 978307200) - 300);"Zum Anschauen der SQlight Datenbanken empfehle ich das Tool: DB Browser for SQLite
Letzte Anmerkungen
Nun sind alle Komponenten für den Kurzbefehl vorgestellt. Als letztes habe ich mir noch ein Tasturkürzel für die Ausführung in den Kurzbefehlen Details definiert. Er kann aber auch über das Kurzbefehl-Menu oder anders gestartet werden, ganz nach Wunsch.
Problem mit den Kurzbefehl Sicherheitseinstellungen
Ein kleines Problem kann allerdings noch auftreten. Auf dem Mac, auf dem ich den Kurzbefehl erstellt habe, wurde ich beim ersten Start natürlich gefragt, ob der Kurzbefehl Zugriff auf AppleScript und die Shell haben darf. Was natürlich erlaubt werden muss.
Ein zweiter Mac verweigerte jedoch zunächst die Ausführung, da das Kurzbefehle-Programm angeblich(?) keine Rechte zum Ausführen von Tastaturbefehlen hatte. Normalerweise wird man beim ersten Ausführen eines Programms, das solche Rechte benötigt, gefragt, ob man dies zulassen möchte und gegebenenfalls sogar an die Stelle geleitet, wo man die Berechtigung geben kann. Auf dem Mac war das aber nicht der Fall, er weigerte sich einfach. Abhilfe habe ich nach längerem Ausprobieren schließlich dadurch geschaffen, dass ich im Kurzbefehl bei den Optionen die Datenschutz Einstellungen mindestens einmal zurückgesetzt habe, auch habe ich das Programm Kurzbefehle händisch in den Sicherheitseinstellungen von MacOS in den Optionen Eingabeüberwachung hinzugefügt.
1Password und AppleScript
Die Besonderheit von 1Password im Zusammenhang mit AppleScript und dem Eingabefokus habe ich weiter oben schon erwähnt. Eine weitere Besonderheit ist mir aufgefallen: 1Password lässt sich nicht wie andere Programme mit AppleScript starten.
tell application "1Password activate end tell
Das obige AppleScript bringt 1Password zwar in den Vordergrund, wenn es schön läuft, startet es aber nicht. Wenn mit dem Kurzbefehl auch 1Password gestartet werden soll, geht das aber mit der Kurzbefehl Aktion „App öffnen”, die am besten nach dem Script eingefügt wird, das das Master-Passwort entschlüsselt hat.
Und wie immer…
… kann die Kommentarfunktion für Kritik, Anregungen, Verbesserungen und auch Lob genutzt werden.
Schreibe einen Kommentar