feat(collab): herstelsleutel voor de apparaatsidentiteit (#978 Blok B) #1079

Merged
brenno merged 6 commits from feat/collab-recovery-key-978 into main 2026-08-01 14:10:18 +00:00
Owner

#978 Fase 2, Blok B — herstelsleutel voor de apparaatsidentiteit

Tweede van drie blokken. De samenwerkingsidentiteit van een apparaat (twee 32-byte seeds in de keychain) wordt draagbaar: exporteer hem als leesbare herstelsleutel en zet dezelfde identiteit op een ander apparaat terug — zodat je vingerafdruk (verificatie) en straks je herkomst-ondertekensleutel (Blok C) meegaan.

Wat erin zit

  • Codec (collab_recovery_key.dart, pure Dart, géén dependency): Crockford-Base32 + CRC-16 tegen typefouten, versiebyte, getypeerde fouten (format/checksum/version). encode/decode + een test vector-achtige round-trip-suite.
  • Store (collab_device_store.dart): recoveryKey() exporteert, importRecoveryKey() herstelt de identiteit op een nieuw apparaat (zelfde identiteitssleutels, gebonden aan het nieuwe device-id), readDeviceSeeds() leest zonder een nieuwe identiteit te munten.
  • UI (Instellingen → Realtime samenwerken → Identiteit & herstelsleutel): tonen (met bewaar-waarschuwing + kopiëren) en herstellen (met heldere fout bij typefout/format/versie). Verschijnt zodra het account is ingevuld.
  • Accountverwijder-sweep: bij het wissen van het Matrix-account worden de collab-secrets (device-seeds én trust-pins) mee geveegd — het door de bewaker bij Blok A gesignaleerde gaatje, nu voor beide gesloten.
  • 31 talen, docs (SOURCE_MAP/USER_GUIDE/CHANGELOG).

Poort & scans

make check groen (in een geïsoleerde worktree, gerebaset op verse origin/main); make check-secrets + make sast schoon. Geen dependency-wijziging (geen SBOM).

Bewaker

Bewaker-blik: akkoord — pure Dart, geen partij/afhankelijkheid, alles lokaal, .md/uitwisselbaarheid onaangeroerd, belofte eerlijk begrensd en versiebestendig, sweep juist.

Bekende bevinding (kleine follow-up)

Bewaker (klein): herstellen overschrijft een bestaande identiteit zonder bevestiging — stil verlies als die niet geback-upt was. Volgt als aparte kleine PR (een overschrijf-bevestiging).

Vervolg

Blok C (herkomstbewijs) heeft een afgetoetst ontwerp (docs/design/PROVENANCE_SIGNATURE.md).

## #978 Fase 2, Blok B — herstelsleutel voor de apparaatsidentiteit Tweede van drie blokken. De samenwerkingsidentiteit van een apparaat (twee 32-byte seeds in de keychain) wordt **draagbaar**: exporteer hem als leesbare herstelsleutel en zet dezelfde identiteit op een ander apparaat terug — zodat je vingerafdruk (verificatie) en straks je herkomst-ondertekensleutel (Blok C) meegaan. ### Wat erin zit - **Codec** (`collab_recovery_key.dart`, pure Dart, géén dependency): Crockford-Base32 + CRC-16 tegen typefouten, versiebyte, getypeerde fouten (format/checksum/version). `encode/decode` + een test vector-achtige round-trip-suite. - **Store** (`collab_device_store.dart`): `recoveryKey()` exporteert, `importRecoveryKey()` herstelt de identiteit op een nieuw apparaat (zelfde identiteitssleutels, gebonden aan het nieuwe device-id), `readDeviceSeeds()` leest zonder een nieuwe identiteit te munten. - **UI** (Instellingen → Realtime samenwerken → *Identiteit & herstelsleutel*): tonen (met bewaar-waarschuwing + kopiëren) en herstellen (met heldere fout bij typefout/format/versie). Verschijnt zodra het account is ingevuld. - **Accountverwijder-sweep**: bij het wissen van het Matrix-account worden de collab-secrets (device-seeds én trust-pins) mee geveegd — het door de bewaker bij Blok A gesignaleerde gaatje, nu voor beide gesloten. - 31 talen, docs (SOURCE_MAP/USER_GUIDE/CHANGELOG). ### Poort & scans `make check` groen (in een geïsoleerde worktree, gerebaset op verse `origin/main`); `make check-secrets` + `make sast` schoon. Geen dependency-wijziging (geen SBOM). ### Bewaker Bewaker-blik: **akkoord** — pure Dart, geen partij/afhankelijkheid, alles lokaal, `.md`/uitwisselbaarheid onaangeroerd, belofte eerlijk begrensd en versiebestendig, sweep juist. ### Bekende bevinding (kleine follow-up) Bewaker (klein): *herstellen overschrijft een bestaande identiteit zonder bevestiging* — stil verlies als die niet geback-upt was. Volgt als aparte kleine PR (een overschrijf-bevestiging). ### Vervolg Blok C (herkomstbewijs) heeft een afgetoetst ontwerp (`docs/design/PROVENANCE_SIGNATURE.md`).
brenno force-pushed feat/collab-recovery-key-978 from 60dc0f9491
Some checks failed
scans / scans (pull_request) Has been cancelled
to f5b62ccac3
All checks were successful
scans / scans (pull_request) Successful in 3m29s
2026-08-01 14:10:06 +00:00
Compare
brenno merged commit e9e4f89e77 into main 2026-08-01 14:10:18 +00:00
Sign in to join this conversation.
No description provided.