Sekuvo
Français

Enveloppe → QR

Cette page transforme une enveloppe Sekuvo déjà chiffrée en cadres QR que ton téléphone peut scanner. Elle n'effectue aucun chiffrement et ne demande jamais de secret : tu produis l'enveloppe sur ta propre machine, et seul du texte chiffré est collé ici.

Le chemin le plus prudent reste l'aktar.html téléchargé, ouvert depuis ton propre disque. Cette page existe pour le cas où tu chiffres dans ton propre terminal et n'as besoin que de l'affichage QR.

1 · Produis l'enveloppe sur ta propre machine

Le script ci-dessous construit exactement l'enveloppe que l'application ouvre (PBKDF2-HMAC-SHA256 · 310 000 tours + AES-256-GCM). Enregistre-le sous zarf-uret.py et lis-le avant de l'exécuter — une trentaine de lignes. Génère le mot de passe au lieu de l'inventer ; la première commande s'en charge.

# macOS / Linux
# generate a password (letters+digits, ~119 bits):
python3 -c "import secrets,string; print(''.join(secrets.choice(string.ascii_letters+string.digits) for _ in range(20)))"

pip3 install cryptography
python3 zarf-uret.py "Server SSH" > zarf.json   # paste the secret, then Ctrl-D
pbcopy < zarf.json                              # macOS; Linux: xclip -sel clip < zarf.json
# Windows (PowerShell)
# generate a password (letters+digits, ~119 bits):
python -c "import secrets,string; print(''.join(secrets.choice(string.ascii_letters+string.digits) for _ in range(20)))"

pip install cryptography
python zarf-uret.py "Server SSH" > zarf.json    # paste the secret, then Ctrl-Z + Enter
Get-Content zarf.json | Set-Clipboard
#!/usr/bin/env python3
# zarf-uret.py - reads the secret from stdin, writes a Sekuvo envelope to stdout.
# Usage: python3 zarf-uret.py "Title" > zarf.json   (paste the secret, then Ctrl-D)
# Requires: pip install cryptography
import sys, os, json, time, base64, hashlib, getpass
from cryptography.hazmat.primitives.ciphers.aead import AESGCM

title = sys.argv[1] if len(sys.argv) > 1 else "Transfer"
secret = sys.stdin.read()
# The app refuses entries above 256 KB; say so here instead of after the scan.
assert len(secret.encode()) <= 256 * 1024, "secret is over 256 KB, the app will not import it"
password = getpass.getpass("Envelope password (ASCII, generated): ")
assert password.isascii() and len(password) >= 8, "ASCII and at least 8 characters"

now = int(time.time() * 1000)
payload = json.dumps({"entries": [{
    "type": "NOTE", "title": title,
    "createdAt": now, "updatedAt": now, "quick": False,
    "data": {"notes": secret},
}]}, ensure_ascii=False)

salt = os.urandom(16)
key = hashlib.pbkdf2_hmac("sha256", password.encode(), salt, 310_000, 32)
iv = os.urandom(12)
blob = iv + AESGCM(key).encrypt(iv, payload.encode(), None)
print(json.dumps({
    "app": "vault", "version": 1,
    "kdf": {"algo": "PBKDF2WithHmacSHA256", "iterations": 310_000,
            "salt": base64.b64encode(salt).decode()},
    "cipher": "AES-256-GCM",
    "data": base64.b64encode(blob).decode(),
}))

Colle le secret dans l'entrée du script plutôt que de le taper sur la ligne de commande — il n'atterrira ainsi jamais dans l'historique de ton shell.

2 · Colle l'enveloppe

3 · Sur le téléphone

Sekuvo → + → Importer via QR → scanne les cadres → saisis le même mot de passe → Ajouter à l'existant.

← Retour à sekuvo.com