mlock

mlock liest und schreibt verschlüsselte miniLock-Dateien.

Übersicht

mlock ist eine schnelle Implementierung der miniLock-Spezifikation. Trotz des Namens (und im Gegensatz zum Original) kann mlock auch mit großen Dateien umgehen.

Eine kurze Zusammenfassung der miniLock-Eigenschaften (Quelle: https://minilock.io):
" Enter your miniLock passphrase on any computer, and you'll get access to your miniLock ID. No key storage or management - just a single passphrase to access your miniLock identity anywhere. miniLock uses modern cryptographic primitives to accomplish this securely. "

Eine MiniLock-ID ist ein kurzer Public-Key der von einer geheimen Passphrase und einer E-Mail Adresse abgeleitet wurde. Diese ID kann auf Webseiten, in Mailsignaturen, auf Twitter oder sonstwo veröffentlicht werden, damit jedermann in der Lage ist Inhalte für diese ID zu verschlüsseln. Nur ein Empfänger mit der richtigen Passphrase/Mail-Kombination zur Erzeugung dieser ID kann die Daten wieder entschlüsseln.

Eine MiniLock-ID sieht wie folgt aus: jrcY8VJWKihbiLsDnaMaNSoL2fZSTiRmEeJcKGBYxnb83

Da diese IDs sehr bequem zu handhaben sind, ist kein aufwändiger Schlüsseltausch mit Keyservern oder manuellen Dateikopien notwendig.

Beim Verschlüsseln kann eine Liste von miniLock-IDs angegeben werden, um mehreren Empfängern zu ermöglichen die Daten zu entschlüsseln. Es muss also nicht eine separate Datei für jeden Empfänger erzeugt werden. MiniLock-Dateien enthalten keine sichtbaren Hinweise auf Ihre Empfänger.

Wie funktioniert's?

A möchte etwas für B verschlüsseln. B gibt seine Mail-Adresse und Passphrase in mlock ein, um seine MiniLock-ID zu erhalten. Diese ID sendet er an A.
A verschlüsselt die Datei und gibt die MiniLock-ID von B als Empfänger-ID an. A sendet nun die verschlüsselte Datei an B, der sie mit seiner Passphrase/Mail-Kombination entschlüsseln kann.
Wichtig hierbei ist, dass die Passphrase geheim bleibt - es werden nur die MiniLock-IDs (=public keys) ausgetauscht.

Die grafische Benutzeroberfläche

Nach dem Start des Programms werden eine Mail-Adresse und ein Passwort abgefragt. Aus diesen Informationen wird ein Schlüsselpaar gebildet (privater und öffentlicher Schlüssel).
Statt der Mail-Adresse kann auch ein anderer Wert angegeben werden, dies sollte man jedoch nur tun wenn man das miniLock Chrome-Plugin nicht nutzen möchte.
Damit die verschlüsselte Datei wirksam geschützt ist, muss eine Passphrase, die weniger als 40 Zeichen lang ist, aus mehreren zufällig gewählten Wörtern bestehen.



mlock GUI 1

Hier können auch Unicode-Zeichen eingegeben werden:



mlock GUI 2

Das Mail-Icon zeigt die Gültigkeit der Mail-Adresse an:

Icon 1 das Format der Mail-Adresse ist gültig
Icon 1 das Format der Mail-Adresse ist nicht gültig


Das Ampel-Icon neben dem Passwort zeigt folgende Information an:
Icon 1 die Passphrase ist zu kurz oder enthält zuwenig durch Leerzeichen getrennte Wörter
Icon 1 die Passphrase wird wahrscheinlich vom Original MiniLock-Plugin für Chrome abgewiesen
Icon 1 die Passphrase ist ausreichend sicher
Nach dem Klick auf "Meine miniLock-ID erzeugen" wird die eigene ID am unteren Fensterrand angezeigt. Sie kann dort auch kopiert werden.

Nun wird zum Ein- und Ausgabedialog gewechselt:



mlock GUI 3

Hier wird das Ausgabeverzeichnis ausgewählt und anschließend die Datei zur Ver- bzw. Entschlüsselung (sollte das Programm mit einer Datei als Argument aufgerufen worden sein, so wird dessen Pfad bereits in der Statusleiste angezeigt).
Man kann auch eine Datei auf das Programmfenster ziehen.

Wenn eine miniLock-Datei ausgewählt wurde, wird diese automatisch entschlüsselt.
Jede andere Datei wird im nächsten Dialog verschlüsselt:



mlock GUI 4

In der oberen Liste können bis zu 50 miniLock-IDs der Datei-Empfänger angegeben werden.
Mit "Liste einlesen" wird eine Textdatei importiert, die pro Zeile eine MiniLock-ID enthält. Hinter den IDs können in der Datei die dazugehörigen Namen wie folgt eingetragen werden:

y5qBLmncv36r98tFMw5YVoc9SHkfLDg8Wz7zf9yrPYPh2 / Andre Simon
8SmHNEEZiK1RgWoN9xryJb8opBky9Kh7txhmgb1RLrUrW ; Customer XYZ
sVXHR7smwqXkSbphn8gdH3Ah6a1nvbYtuXPpxG6qKT321 - Schmidt
ULgpTbP7isNNV6kgDbNVtQo5YRuUhc4N5AAEEbne9bjJi | Jane
Die Information hinter den Trennern wird nach dem Laden als Tooltip angezeigt.
Der Button "Empfänger löschen" entfernt die Empfänger-IDs aus der Liste.
Die Option "Meine ID auslassen" entfernt die eigene miniLock-ID aus der Empfängerliste.
Mit "Zufallsnamen erzeugen" wird die verschlüsselte Datei unter einem zufällig gewählten Namen gespeichert.

Nach dem Klick auf "Datei verschlüsseln" wird die miniLock-Datei im vorher angegebenen Zielverzeichnis abgelegt.

Die Kommandozeilenversion

Neben der grafischen Oberfläche gibt es auch eine Kommandozeilenversion von mlock.

USAGE: mlock [OPTION]...
mlock reads and writes encrypted miniLock files (https://minilock.io/)

Available options:

  -E, --encrypt <file>  Encrypt the given file (see -r)
  -D, --decrypt <file>  Decrypt the given miniLock file
  -o, --output <file>   Override the target file name (assumes -D or -E)
  -m, --mail <string>   User mail address (salt)
  -r, --rcpt <string>   Recipient's miniLock ID (may be repeated up to 50x, assumes -E)
  -R, --random-name     Generate random output filename; write to current working directory (assumes -E)
  -x, --exclude-me      Exlude own miniLock ID from recipient list (assumes -E)
  -p, --pinentry        Use pinentry for passphrase input
  -q, --quiet           Do not print progress information
  -h, --help            Print this help screen
  -v, --version         Print version information

If neither -E nor -D is given, mlock exits after showing your miniLock ID.

Beispiele der Kommandozeilenversion

Verschlüsselung

mlock --encrypt libsodium-1.0.0.tar.gz --mail sendersalt@holygrail.com --rcpt EX9k9VmGzjg7mUBFN9mzc7nkcvhmD6fGZTq3nefEajjxX
Please enter your secret passphrase:
Unlocking...
Your miniLock-ID: aUwncs2D48MqB8VFta7RRJ5bjL9PfsmtWF3zYVb3zFLLW
Encrypting file libsodium-1.0.0.tar.gz...
Calculating file hash...
Task completed.

Die verschlüsselte Datei ist libsodium-1.0.0.tar.gz.minilock
Diese Datei kann vom Empänger EX9k9VmGzjg7mUBFN9mzc7nkcvhmD6fGZTq3nefEajjxX entschlüsselt werden.

Entschlüsselung

mlock --decrypt libsodium-1.0.0.tar.gz.minilock --mail receiver@test.org
Please enter your secret passphrase:
Unlocking...
Your miniLock-ID: EX9k9VmGzjg7mUBFN9mzc7nkcvhmD6fGZTq3nefEajjxX
Decrypting file libsodium-1.0.0.tar.gz.minilock...
Calculating file hash...
Writing to file libsodium-1.0.0.tar.gz...
Task completed.

Verwendete Crypto-Funktionen

Die MiniLock-ID wird wie folgt erzeugt:

secret := scrypt(blake2(passphrase), mail, 131072, 1)
id := base58( crypto_scalarmult_base(secret) + blake2(secret) )

Der JSON-Dateiheader der MiniLock-Dateien enthält die MiniLock-ID des Senders, die IDs der Empfänger sowie Schlüssel (zufällig erzeugt) und Hashwert der verschlüsselten Eingabedatei.

Diese Informationen werden separat mit jeder angegebenen Empfänger-ID als Public-Key mittels crypto_box_easy verschlüsselt (Schlüsseltausch: Curve25519; Verfahren: XSalsa20 stream cipher; Authentifizierung: Poly1305 MAC).

Die Eingabedatei wird mit crypto_secretbox_easy verschlüsselt (Verfahren: XSalsa20 stream cipher; Authentifizierung: Poly1305 MAC).

Mehr Infos zu den kryptographischen Eigenschaften und dem Dateiformat: https://minilock.io.