Kode

Slik lagrer Kode kodene dine

Hvor Kode holder på 2FA-nøklene dine, hvordan de synkroniseres, og hvordan du får dem ut igjen.

Bare i nøkkelringen din

Hver konto – også den hemmelige nøkkelen kodene lages av – lagres som ett element i nøkkelringen på iPhonen, tilgjengelig etter første opplåsing. Nøkkelen lagres aldri i appens database, i innstillinger, i loggfiler, i analyse eller i krasjrapporter.

iCloud-nøkkelring

Med synkronisering på (standard) er elementet merket som synkroniserbart, så iCloud-nøkkelring tar det med til de andre Apple-enhetene dine og til en ny iPhone. iCloud-nøkkelring er ende-til-ende-kryptert. Slår du av synkronisering, lagres nøklene bare på denne iPhonen («bare denne enheten») og blir ikke med til en annen telefon.

Ingen server

Kode kobler seg aldri til nettet. Kodene regnes ut etter TOTP-standarden (RFC 6238) med HMAC-SHA1/256/512 – de samme kodene som i Google Authenticator.

Lås

Face ID eller kode når appen åpnes, og igjen etter ett minutt i bakgrunnen. Når appen ikke er aktiv, dekker en låseskjerm alt, så appveksleren aldri viser en kode. En kopiert kode forsvinner fra utklippstavlen på iPhonen etter 60 sekunder. Den kan limes inn på Macen via Universelle utklipp, der den blir liggende til du kopierer noe annet.

Filformatet for sikkerhetskopien

Den krypterte sikkerhetskopien er en JSON-fil. Nøkkelen avledes fra passordet ditt med PBKDF2-HMAC-SHA256 (600 000 runder, 16 byte salt), og innholdet krypteres med AES-256-GCM. ciphertext er den krypterte teksten etterfulgt av den 16 byte lange GCM-taggen. Alle binære felt er Base64.

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

Dekryptert er innholdet en liste over kontoer. Hver konto har også en ferdig otpauth://-adresse som de fleste apper 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"
    }
  ]
}

Slik dekrypterer du filen uten 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"])