Wie funktioniert diese Seite?

Auf dieser Seite können Sie Passwörter über einen Link teilen.
Die Passwörter werden im Link und nicht auf dem Server gespeichert.
Ein Link zum Teilen von Passwörtern kann nur einmalig verwendet werden.

Kurzbeschreibung dieses Dienstes.

Dieser Secret-Sharing-Dienst basiert auf AES- und RSA-Verschlüsselung. Beim Erstellen eines neuen Secret-Sharing-Links wird ein zufälliger Schlüssel generiert, mit dem das Geheimnis per AES verschlüsselt wird. Der Schlüssel selbst wird dann per RSA verschlüsselt. Das Ergebnis der Verschlüsselung wird URL-sicher Base64-kodiert und mit der URL dieser Website vorangestellt. Beim Aufruf des Secret-Sharing-Links wird die URL-sicher Base64-kodierte Nachricht entschlüsselt und das Ergebnis der Entschlüsselung auf der Website angezeigt. Zusätzlich wird der Fingerabdruck der verschlüsselten Nachricht in einer Datenbank gespeichert, um eine Mehrfachanzeige zu verhindern.

Holen Sie sich den richtigen öffentlichen Schlüssel.

Zunächst müssen Sie den richtigen öffentlichen Schlüssel abrufen, um Ihr Geheimnis zu verschlüsseln:

wget -O "./secrets.pub" "https://secret.dohle.com/pub?plain"

Verschlüsseln Sie das Geheimnis, das Sie teilen möchten.

Um einen geheimen Freigabelink zu erstellen, müssen Sie bestimmte Schritte ausführen, die hier beschrieben werden:

  1. Benötigtes Schlüsselmaterial ableiten
  2. Geheimnis über AES-256-CTR verschlüsseln
  3. Schlüsselmaterial über RSA verschlüsseln
  4. MAC der Daten über HMAC-SHA-256 berechnen
  5. Base64-Kodierung des Ergebnisses
  6. Zeilenumbrüche entfernen
  7. URL-sichere Base64-Kodierung anwenden:
    • Gleichungszeichen entfernen
    • "+" durch "-" ersetzen
    • "/" durch "_" ersetzen
  8. URL zur Freigabe des Geheimnisses voranstellen

Shell-Beispiel.

Alle diese Schritte können mit einem einzigen Shell-Befehl ausgeführt werden:

MESSAGE="message to encrypt" &&
RSAKEYFILE="./secrets.pub" &&
URLPREFIX="https://secret.dohle.com/" &&
RSAKEYCOUNT="0001" &&
VERSION="01" &&
NONCE=$(printf "%016x0000000000000000" "$(date +%s)") &&
KEY=$(openssl rand -hex 32) &&
ENCKEY=$(echo -n "enc" | openssl dgst -sha256 -mac "HMAC" -macopt "hexkey:$KEY" -binary | xxd -p | tr -d "\n") &&
MACKEY=$(echo -n "mac" | openssl dgst -sha256 -mac "HMAC" -macopt "hexkey:$KEY" -binary | xxd -p | tr -d "\n") &&
RSAKEY=$(echo -n "$KEY" | xxd -r -p | openssl rsautl -encrypt -oaep -pubin -inkey "$RSAKEYFILE" -keyform PEM | xxd -p | tr -d "\n") &&
RSAKEYID=$(openssl rsa -pubin -in "$RSAKEYFILE" -pubout -outform DER 2>/dev/null | openssl dgst -sha256 -binary | xxd -p | tr -d "\n") &&
RSAKEYLENGTH=$(echo -n "$RSAKEY" | xxd -r -p | wc -c) &&
RSAKEYLENGTH=$(printf "%04x" "$RSAKEYLENGTH") &&
ENCMESSAGE=$(echo -n "$MESSAGE" | openssl enc -aes-256-ctr -K "$ENCKEY" -iv "$NONCE" -nopad | xxd -p | tr -d "\n") &&
MACMESSAGE="$VERSION$RSAKEYCOUNT$RSAKEYID$RSAKEYLENGTH$RSAKEY$NONCE$ENCMESSAGE" &&
MAC=$(echo -n "$MACMESSAGE" | xxd -r -p | openssl dgst -sha256 -mac "HMAC" -macopt "hexkey:$MACKEY" -binary | xxd -p | tr -d "\n") &&
FULLMESSAGE="$MACMESSAGE$MAC" &&
OUTPUT=$(echo -n "$FULLMESSAGE" | xxd -r -p | openssl base64 | tr "+" "-" | tr "/" "_" | tr "\n" "/" | tr -d "=") &&
OUTPUT="$URLPREFIX$OUTPUT" &&
echo "$OUTPUT"

Oder...

...benutzen Sie das bereitgestellte Formular

Kurzbeschreibung der Kennwortschutzfunktion.

Wenn Sie die Kennwortschutzfunktion verwenden, wird das Geheimnis lokal in Ihrem Browser mit AES-256-CTR verschlüsselt. Der Verschlüsselungsschlüssel wird aus dem eingegebenen Kennwort und einem dynamisch generierten Salt mit dem PBKDF2-SHA-256-Algorithmus abgeleitet. Die Kennwortschutzfunktion wird mit clientseitigem JavaScript implementiert. Bitte beachten Sie, dass ein kompromittierter Server Ihnen möglicherweise JavaScript-Code bereitstellt, der den Zweck der lokalen Verschlüsselung zunichte macht. Wenn Sie dem Server, der den Dienst zum Teilen von Geheimnissen bereitstellt, nicht vertrauen, verschlüsseln Sie Ihr Geheimnis mit einer lokal installierten Anwendung, bevor Sie es teilen.

Shell-Beispiel.

Mit dem folgenden Shell-Befehl können Sie eine Nachricht verschlüsseln und so die Kompatibilität mit der browserbasierten Verschlüsselung herstellen. Sie benötigen hierfür das Zusatztool nettle-pbkdf2:

MESSAGE="message to encrypt" &&
PASSWORD="password" &&
VERSION="00" &&
NONCE=$(printf "%016x0000000000000000" "$(date +%s)") &&
SALT=$(openssl rand -hex 32) &&
KEY=$(echo -n "$PASSWORD" | nettle-pbkdf2 -i 512000 -l 32 --raw --hex-salt "$SALT" | xxd -p | tr -d "\n") &&
ENCKEY=$(echo -n "enc" | openssl dgst -sha256 -mac "HMAC" -macopt "hexkey:$KEY" -binary | xxd -p | tr -d "\n") &&
MACKEY=$(echo -n "mac" | openssl dgst -sha256 -mac "HMAC" -macopt "hexkey:$KEY" -binary | xxd -p | tr -d "\n") &&
ENCMESSAGE=$(echo -n "$MESSAGE" | openssl enc -aes-256-ctr -K "$ENCKEY" -iv "$NONCE" -nopad | xxd -p | tr -d "\n") &&
MACMESSAGE="$VERSION$SALT$NONCE$ENCMESSAGE" &&
MAC=$(echo -n "$MACMESSAGE" | xxd -r -p | openssl dgst -sha256 -mac "HMAC" -macopt "hexkey:$MACKEY" -binary | xxd -p | tr -d "\n") &&
FULLMESSAGE="$MACMESSAGE$MAC" &&
OUTPUT=$(echo -n "$FULLMESSAGE" | xxd -r -p | openssl base64 | tr -d "\n") &&
echo "$OUTPUT"

Den Quelltext und die Autoren finden Sie auf Github.