Så sparar Kode dina koder
Var Kode sparar dina 2FA-nycklar, hur de synkas och hur du får ut dem igen.
Bara i din nyckelring
Varje konto, även den hemliga nyckeln som koderna skapas av, sparas som ett objekt i iPhonens nyckelring (Keychain), tillgängligt efter första upplåsningen. Nyckeln sparas aldrig i appens databas, i inställningar, i loggfiler, i analysdata eller i kraschrapporter.
iCloud-nyckelring
Med synkning på (standard) är objektet markerat som synkbart, så iCloud-nyckelringen tar med det till dina andra Apple-enheter och till en ny iPhone. iCloud-nyckelringen är totalsträckskrypterad. Stänger du av synkningen flyttas nycklarna till bara den här iPhonen (”endast den här enheten”) och följer inte med till en annan telefon.
Ingen server
Kode gör inga nätverksanrop. Koderna räknas ut enligt TOTP-standarden (RFC 6238) med HMAC-SHA1/256/512, och blir samma koder som i Google Authenticator.
Lås
Face ID eller lösenkod när appen öppnas, och igen efter en minut i bakgrunden. När appen inte är aktiv täcker en låsskärm allt, så appväxlaren visar aldrig en kod. En kopierad kod försvinner från iPhonens urklipp efter 60 sekunder. Den kan klistras in på din Mac via Universella urklipp, och där ligger den kvar tills du kopierar något annat.
Backupfilens format
Den krypterade backupen är en JSON-fil. Nyckeln tas fram ur ditt lösenord med PBKDF2-HMAC-SHA256 (600 000 rundor, 16 byte salt), och innehållet krypteras med AES-256-GCM. ciphertext är den krypterade texten följd av GCM-taggen på 16 byte. Alla binära fält är Base64.
{
"format": "kode-backup",
"version": 1,
"kdf": { "name": "PBKDF2-HMAC-SHA256", "iterations": 600000, "salt": "…" },
"cipher": { "name": "AES-256-GCM", "nonce": "…" },
"ciphertext": "…"
}
Dekrypterat är innehållet en lista med konton. Varje konto har också en färdig otpauth://-adress som de flesta appar kan importera.
{
"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å dekrypterar du filen utan Kode (Python med paketet 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"])