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"])