Een technisch overzicht voor security-reviewers. Alles hier is te controleren aan de broncode — ook de minder flatteuze punten, die we benoemen in plaats van weglaten.
Er is geen backend. De extensie is een Manifest V3-Chrome-extensie die TOTP-/HOTP-codes lokaal genereert met OTPAuth. We draaien geen servers, houden geen accounts bij en hebben geen kanaal waarlangs gebruikersgegevens ons zouden kunnen bereiken.
Omdat er geen server is, is er ook geen sleutelmateriaal aan serverzijde, geen key escrow en geen herstelpad dat wij beheren. Vergeet een gebruiker het wachtwoord en raakt de herstelcode kwijt, dan kunnen we niets doen — dat is opzet.
Wachtwoordbeveiliging is optioneel en staat standaard uit. Met de beveiliging aan:
Gegevens worden nooit rechtstreeks versleuteld met een van het wachtwoord afgeleide sleutel. Een willekeurige hoofdsleutel versleutelt de records; de PBKDF2-uitvoer verpakt alleen die hoofdsleutel. Daar volgen twee dingen uit, en beide doen ertoe:
Met wachtwoordbeveiliging aan wordt het hele accountrecord versleuteld, op de identificator en de vingerafdruk na — inclusief de servicenaam, zodat een gestolen profiel niet verraadt bij welke diensten iemand accounts heeft. Bij het inschakelen versleutelt de extensie de records, controleert ze door te ontsleutelen en te vergelijken en verwijdert pas daarna elke kopie in leesbare vorm: lokale browseropslag, sync en alle zeven roulerende back-upmomentopnamen.
Ronduit gezegd, omdat het meeweegt in uw beoordeling:
Kortom: dit beschermt gegevens in rust. Het verdedigt geen apparaat dat tijdens gebruik al in handen van een aanvaller is — dat kan het ook niet.
Het manifest declareert vijf permissies en geen host-permissies:
Er zijn Er zijn geen content scripts, geen tabs-, cookies- of webRequest-permissies, en geen web-accessible resources. Niets van ons bestaat in een pagina totdat je daar om een code vraagt; wat dan draait wordt geïnjecteerd voor dat ene tabblad en die ene aanroep, onder de toestemming die je eigen klik geeft, en laat niets achter.
QR-scannen met de camera draait op een extensiepagina in een tabblad, niet in de popup — een popup wordt vernietigd zodra hij focus verliest, en dat is precies wat een permissieverzoek doet. Hiervoor is geen permissie in het manifest nodig: het gebruikt het standaard cameraverzoek van de browser, verleend per extensie-origin en intrekbaar in de site-instellingen, en het verschijnt pas als de gebruiker de scanner opent. Video wordt lokaal gedecodeerd en nooit verzonden of opgeslagen.
De klokcontrole is het enige verzoek dat de extensie uit zichzelf doet; al het andere hieronder gebeurt doordat de gebruiker ergens op klikte. Manifest V3 verbiedt externe code, en niets hiervan draagt accounts, geheime sleutels of gegenereerde codes mee. De volledige lijst:
| Host | Wanneer | Bevat gebruikersgegevens? |
|---|---|---|
| time.akamai.com timeapi.io cloudflare.com | Controle op klokafwijking, gecachet; is geen enkele bron bereikbaar, dan meldt Instellingen dat. Bij een afwijkende klok werkt TOTP niet meer. | Nee |
| authenticator.sh | Welkomstpagina bij installatie; feedbackpagina bij verwijderen; hulp- en supportpagina's wanneer ze vanuit de pop-up worden geopend. | Nee (gewone webserverlogs) |
| chromewebstore.google.com | Storepagina, alleen bij een klik in een tabblad geopend: het beoordelingsformulier vanuit de beoordelingsvraag, onze wachtwoordmanager vanuit de cross-promotiebanner. | Nee (voor Google is het een bezoek aan een storepagina zoals elk ander) |
| authenticator.featurebase.app | Openbaar ideeënbord, in een tabblad geopend via de link om een functie te vragen in de supportbalk. | Alleen wat de gebruiker er zelf plaatst. Dienst van derden, met eigen voorwaarden. |
Er worden geen lettertypen, scripts, stylesheets of afbeeldingen van hosts van derden geladen. Alles wat nodig is om de interface te tonen zit in het pakket.
U hoeft niets van het bovenstaande op ons woord aan te nemen. De extensie is open source en elke release is reproduceerbaar:
.crx uit de Chrome Web Store en pak hem uitnpm ci && npm run build op Node 20 LTSdist/ met het uitgepakte pakketBij elke GitHub-release publiceren we een SHA-256 van elk bestand in de geproduceerde dist/, als SHA256SUMS-v<version>.txt en in sha256sum-formaat, zodat stap 4 neerkomt op één keer sha256sum -c draaien. Verschillen zouden beperkt moeten blijven tot de bestandsvolgorde binnen archieven en witruimte in geminificeerde uitvoer tussen Node-patchversies.
De runtime-afhankelijkheden zijn bewust beperkt — OTPAuth, React, jsQR, Zustand, Framer Motion en Lucide — vastgezet door een ingecheckt lockfile. Een CycloneDX-SBOM is op verzoek beschikbaar.
Bekijk de broncodeWe zijn een kleine onafhankelijke leverancier. Is een van de volgende punten een harde eis in uw proces, dan kunt u dat beter nu weten dan drie weken later in de beoordeling:
Wat we er wel tegenover zetten: volledige transparantie van de broncode, een verifieerbare build, een minimaal permissieoppervlak en geen serverinfrastructuur die uw gegevens überhaupt zou kunnen bewaren.
Kwetsbaarheidsmeldingen en security-vragen: security@authenticator.sh. Ons openbaarmakingsbeleid, de scope, reactietijden en safe-harbourvoorwaarden staan op de pagina beveiligingsbeleid; wat er wordt opgeslagen en wat het apparaat verlaat, staat in het privacybeleid.
We vullen graag een schriftelijke leveranciersvragenlijst in of lopen de code door met een securityteam.
Voor alles wat geen security-kwestie is — installatie, accountherstel, factuurvragen bij een uitrol — zie support. Stuur daar alstublieft geen kwetsbaarheidsmeldingen naartoe; die mailbox wordt niet als vertrouwelijk behandeld.