MikroLock

MikroLock verbindet moderne Verschlüsselung mit einfacher Bedienung. Es basiert auf dem offenen miniLock Dateiformat (https://minilock.io/).

Übersicht

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

Hauptziel der Entwicklung ist ein unkomplizierter Austausch verschlüsselter Daten, z.B. durch E-Mail oder Cloud-Dienste. Die Verschlüsselung basiert auf modernen Public-Key Verfahren, jedoch ohne aufwändige Konfiguration und Einarbeitung. Das miniLock-Format kann durch die gleichnamige Chrome-Erweiterung auch dann eingesetzt werden, wenn keine Software wie MikroLock installiert werden darf (Firmen-Richtlinien o.ä.).

Dreh- und Angelpunkt der Verschlüsselung ist die Lock-ID, die durch Eingabe von Mail-Adresse und Passwort auf jedem PC berechnet werden kann. Diese Lock-ID ist ein kurzer Public-Key der auf Webseiten, in Mailsignaturen, auf Twitter oder sonstwo veröffentlicht wird, damit jedermann in der Lage ist Inhalte für diese ID zu verschlüsseln. Nur ein Empfänger mit der richtigen Passwort/Mail-Kombination zur Erzeugung dieser ID kann die Daten wieder entschlüsseln.

Eine Lock-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 Lock-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 sein Passwort in MikroLock ein, um seine Lock-ID zu erhalten. Diese ID sendet er an A.
A verschlüsselt die Datei und gibt die Lock-ID von B als Empfänger-ID an. A sendet nun die verschlüsselte Datei an B, der sie mit seiner Passwort/Mail-Kombination entschlüsseln kann.
Wichtig hierbei ist, dass das Passwort geheim bleibt - es werden nur die Lock-IDs (=public keys) ausgetauscht.

Die grafische Benutzeroberfläche

Nach dem Start des Programms werden eine Mail-Adresse und ein Passwort abgefragt.
Statt der Mail-Adresse ist auch ein beliebiger anderer Wert erlaubt (das miniLock Chrome-Plugin akzeptiert ausschließlich Mail-Adressen).
Aus diesen Informationen wird mit Hilfe einer zu wählenden Schlüsselableitungsfunktion (scrypt oder Argon2) ein Schlüsselpaar gebildet (privater und öffentlicher Schlüssel).
Wichtig: Zum Erzeugen einer bestimmten Lock-ID muss immer dieselbe Kombination von Mail-Adresse, Passwort und Funktion angegeben werden.
Damit die verschlüsselte Datei wirksam geschützt ist, muss ein Passwort mit weniger als 40 Zeichen Länge aus mehreren zufällig gewählten Wörtern bestehen.



MikroLock GUI 1

Hier können auch Unicode-Zeichen eingegeben werden:



MikroLock 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 das Passwort ist zu kurz (Mindestlänge: 20 Zeichen)
Icon 1 das Passwort muss aus mindestens fünf Wörtern bestehen. Es könnte vom Original MiniLock-Plugin für Chrome abgewiesen werden
Icon 1 das Passwort ist ausreichend sicher
Nach dem Klick auf "Meine Lock-ID erzeugen" wird die eigene ID am unteren Fensterrand angezeigt. Sie kann dort auch kopiert werden.

Nun wird zum Ein- und Ausgabedialog gewechselt:



MikroLock GUI 3

Hier wird das Ausgabeverzeichnis ausgewählt und anschließend die Datei zur Ver- bzw. Entschlüsselung angegeben (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:



MikroLock GUI 4

In der oberen Liste werden die Lock-IDs der Datei-Empfänger angegeben.
Mit "Liste einlesen" wird eine Textdatei importiert, die pro Zeile eine Lock-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 alle Empfänger-IDs.
Die Option "Meine ID auslassen" entfernt die eigene Lock-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 MikroLock.

USAGE: mikrolock [OPTION]...
mikrolock 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)
-k, --kdf <name>      Key derivation function to use (name: "scrypt" or "argon2")
                      scrypt is the default, argon2 is experimental
-m, --mail <string>   Mail address (salt for key derivation)
-r, --rcpt <string>   Recipient's Lock-ID (may be repeated, assumes -E)

-h, --help            Print this help screen
-l, --list <file>     Recipient list text file (contains one Lock-ID per line)
                      ID descriptions may be added using these delimiters: space or one of [,;/|-]
-p, --pinentry        Use pinentry program to ask for the passphrase
-q, --quiet           Do not print progress information
-R, --random-name     Generate random output filename; write to current working directory (assumes -E)
-v, --version         Print version information
-x, --exclude-me      Exlude own Lock-ID from recipient list (assumes -E)

If neither -E nor -D is given, mikrolock exits after showing your Lock-ID.

Anwendung der Kommandozeilenversion

Verschlüsselung

mikrolock --encrypt secret.data --mail sendersalt@holygrail.com --rcpt EX9k9VmGzjg7mUBFN9mzc7nkcvhmD6fGZTq3nefEajjxX
Please enter your secret passphrase:
Unlocking...
Your Lock-ID: aUwncs2D48MqB8VFta7RRJ5bjL9PfsmtWF3zYVb3zFLLW
Encrypting file secret.data...
Progress 100%
Calculating file hash...
Progress 100%
Destination file: secret.data.minilock

Die verschlüsselte Datei ist secret.data.minilock
Sie kann vom Empfänger EX9k9VmGzjg7mUBFN9mzc7nkcvhmD6fGZTq3nefEajjxX entschlüsselt werden.

Entschlüsselung

mikrolock --decrypt secret.data.minilock --mail receiver@test.org
Please enter your secret passphrase:
Unlocking...
Your Lock-ID: EX9k9VmGzjg7mUBFN9mzc7nkcvhmD6fGZTq3nefEajjxX
Decrypting file secret.data.minilock...
Calculating file hash...
Progress 100%
Writing to file secret.data...
Progress 100%
Destination file: secret.data

Kompatibilität mit der miniLock-Browsererweiterung

Das miniLock Dateiformat wurde mit der Chrome-Erweiterung miniLock eingeführt.
MiniLock-Dateien können mit beiden Programmen verarbeitet werden, allerdings unterscheiden sich die akzeptierten Eingaben zur Erzeugung der Lock-ID:

Sollten Sie MikroLock und miniLock im Wechsel nutzen wollen, prüfen Sie ob Salt und Passwort in beiden Programmen gültige Eingaben sind.

Verwendete Crypto-Funktionen

Die Lock-ID wird wie folgt erzeugt:

secret_key :=     scrypt(blake2(passphrase), mail, 131072, 1)
               OR argon2i (blake2(passphrase), generichash(mail),
                           OPSLIMIT_SENSITIVE, MEMLIMIT_SENSITIVE)
public_key := crypto_scalarmult_base(secret_key)
Lock-ID := base58( public_key + blake2(public_key) )

Zur Berechnung von secret_key kann vom Benutzer scrypt oder Argon2 gewählt werden. Die Parameter für scrypt wurden von miniLock übernommen, die für Argon2 entsprechen der Empfehlung für vertrauliche Daten.

Der JSON-Dateiheader der MiniLock-Dateien enthält die Lock-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.