Kode

Sådan gemmer Kode dine koder

Hvor Kode gemmer dine 2FA-nøgler, hvordan de synkroniseres, og hvordan du får dem ud igen.

Kun i din nøglering

Hver konto – også den hemmelige nøgle, som koderne laves af – gemmes som ét element i iPhonens nøglering (Keychain), tilgængeligt efter første oplåsning. Nøglen gemmes aldrig i appens database, i indstillinger, i logfiler, i analyse eller i nedbrudsrapporter.

iCloud-nøglering

Med sync slået til (standard) er elementet markeret som synkroniserbart, så iCloud-nøgleringen tager det med til dine andre Apple-enheder og en ny iPhone. iCloud-nøgleringen er end-to-end-krypteret. Slår du sync fra, flyttes nøglerne til kun denne iPhone (“denne enhed”) og følger ikke med til en anden telefon.

Ingen server

Kode laver ingen netværkskald. Koderne udregnes efter TOTP-standarden (RFC 6238) med HMAC-SHA1/256/512 – de samme koder som Google Authenticator.

Lås

Face ID eller adgangskode, når appen åbnes, og igen efter et minut i baggrunden. Mens appen ikke er aktiv, dækker en låseskærm alt, så app-skifteren aldrig viser en kode. En kopieret kode udløber fra udklipsholderen efter 60 sekunder og deles ikke via Universal Clipboard.

Backup-filens format

Den krypterede backup er en JSON-fil. Nøglen udledes af din adgangskode med PBKDF2-HMAC-SHA256 (600.000 runder, 16 bytes salt), og indholdet krypteres med AES-256-GCM. ciphertext er den krypterede tekst efterfulgt af GCM-tagget på 16 bytes. Alle binære felter er Base64.

{
  "format": "kode-backup",
  "version": 1,
  "kdf": { "name": "PBKDF2-HMAC-SHA256", "iterations": 600000, "salt": "…" },
  "cipher": { "name": "AES-256-GCM", "nonce": "…" },
  "ciphertext": "…"
}

Dekrypteret er indholdet en liste af konti. Hver konto har også en færdig otpauth://-adresse, som de fleste apps kan importere.

{
  "created": "2026-09-24T09:41:00Z",
  "accounts": [
    {
      "issuer": "GitHub", "name": "anna", "secret": "JBSWY3DPEHPK3PXP",
      "algorithm": "SHA1", "digits": 6, "period": 30,
      "uri": "otpauth://totp/GitHub:anna?secret=JBSWY3DPEHPK3PXP&issuer=GitHub&algorithm=SHA1&digits=6&period=30"
    }
  ]
}

Sådan dekrypterer du filen uden Kode (Python med pakken cryptography):

import base64, getpass, hashlib, json, sys
from cryptography.hazmat.primitives.ciphers.aead import AESGCM

backup = json.load(open(sys.argv[1]))
b64 = base64.b64decode
key = hashlib.pbkdf2_hmac("sha256", getpass.getpass().encode(),
                          b64(backup["kdf"]["salt"]), backup["kdf"]["iterations"], 32)
plain = AESGCM(key).decrypt(b64(backup["cipher"]["nonce"]), b64(backup["ciphertext"]), None)
for account in json.loads(plain)["accounts"]:
    print(account["uri"])