Tijdsleutel: mijn TOTP-authenticator voor de Mac Ik gebruik Tijdsleutel dagelijks voor verificatiecodes op mijn Mac, meestal vanuit de menubalk. Ook Codex is gekoppeld: ik bepaal welke sleutels een agent mag gebruiken en kan die toegang weer intrekken. Over dit artikel Ik gebruik Tijdsleutel dagelijks vanuit de menubalk. De screenshots tonen mijn eigen gebruik met een voorbeeldaccount. Versie 1.3.3, build 8, is beschikbaar als testrelease voor Apple Silicon vanaf macOS 13. Codex is in mijn eigen werkomgeving gekoppeld via de CLI. Ik kan sleutels voor agents activeren en deactiveren en werk tijdens ontwikkeling met een tijdvenster. Ik heb een eigen PostgreSQL-database gekoppeld voor back-ups. De gebruiksstatus is bevestigd op 18 oktober 2026. Ik wilde niet steeds mijn telefoon pakken als ik tijdens het werk een verificatiecode nodig had. Daarom bouwde ik Tijdsleutel, een afzonderlijke TOTP-app voor mijn Mac. Inmiddels gebruik ik de app dagelijks, vooral vanuit de menubalk.6 Mijn dagelijkse versie is 1.3.3, build 8. Die staat ook [als testrelease voor Apple Silicon en macOS 13 of nieuwer](#download) bij dit artikel. De screenshots hieronder zijn uit mijn eigen gebruik, met een voorbeeldaccount.6 De koppeling met Codex is niet meer alleen een ontwerp. Ik heb die via de CLI opgenomen in mijn Second Brain-werkwijze en gebruik haar van begin tot eind. De code en het beheer houd ik zelf in handen.6 Waarom ik een eigen app wilde Apple Wachtwoorden kan al verificatiecodes tonen en in ondersteunde situaties invullen. Ik gebruik Tijdsleutel vanuit mijn voorkeur voor een afzonderlijk venster voor deze handeling.2 Ik wil het account snel herkennen en zien hoeveel tijd er in het huidige codevenster over is. Zoeken en duidelijke labels zijn daarvoor belangrijker dan extra informatie op het scherm. Dat eigen beheer is voor mij een belangrijk deel van het project. Als ik een functie wil toevoegen of de app in een andere werkwijze wil opnemen, heb ik de code beschikbaar. Ik hoef daarvoor niet te wachten op de plannen van een andere ontwikkelaar.6 Verificatiecodes vanuit de menubalk Meestal open ik het compacte menubalkvenster. Ik zoek op de accountnaam, zie de bijbehorende code met afteller en ga verder met waar ik mee bezig was. Het volledige appvenster gebruik ik voor overzicht en beheer. Voor mij werkt dit sneller dan steeds mijn telefoon erbij pakken.6 De afteller toont het lokale codevenster. De ontvangende dienst bepaalt welke code zij accepteert.3 Hoe een tijdcode wordt berekend TOTP betekent *Time-Based One-Time Password*. De code volgt uit een gedeeld geheim en een tijdteller. Met hetzelfde geheim en hetzelfde tijdvak krijg je dezelfde uitkomst. RFC 6238 gebruikt dertig seconden als standaard tijdstap; de dienst en authenticator moeten dezelfde parameters hanteren.3 https://www.dewind.me/articles/tijdsleutel/#lab-totp-vector-title Het voorbeeld gebruikt drie openbare SHA-1-testvectoren uit de RFC, met acht cijfers. Kies een tijdstip om de referentie-uitkomst te bekijken. Dit demonstreert het protocol en is geen testresultaat van Tijdsleutel.3 Het geheim geeft toegang tot latere codes. Daarom wil ik het buiten de notities en zoekindex van mijn Second Brain houden. De tijdelijke code en de sleutel waaruit zij volgt zijn verschillende gegevens. Codex gebruiken binnen een tijdvenster Tijdens ontwikkeling wil ik soms dat Codex door kan werken in een headless browser. Bijvoorbeeld wanneer een dienst geen bruikbare API heeft. In Tijdsleutel activeer ik daarvoor de benodigde sleutels voor de agent, binnen een tijdvenster. Ik kan die rechten vanuit de app ook weer intrekken.6 De koppeling met Codex is in mijn eigen omgeving van begin tot eind in gebruik. Mijn uitgangspunt blijft dat ik bepaal welke toegang ik geef. Dat is iets anders dan een agent onbeperkt toegang geven omdat hij een taak moet afmaken.6 Het schema laat mijn uitgangspunten voor die afbakening zien. De dagelijkse koppeling staat daar niet los van: ik wil zelf kunnen bepalen wat ik toesta, voor wie en voor hoe lang. Eigen back-ups en de grenzen van TOTP Een eigen database voor back-ups Ik heb Tijdsleutel verbonden met mijn eigen database. Voor back-ups kan een gebruiker een eigen PostgreSQL-instantie kiezen, bijvoorbeeld bij Supabase. Ik wilde die keuze bij de gebruiker houden, zodat een eigen database bij de eigen werkomgeving kan aansluiten.6 De sleutelbeheerder en de verbinding met Codex gebruik ik dagelijks. Ik kan sleutels activeren en deactiveren voor een agent en de rechten weer intrekken. Daardoor kan ik de koppeling onderdeel maken van mijn ontwikkelwerk zonder haar steeds opnieuw op te bouwen.6 Tijdteller en afteller T = floor((Unix time - T0) / X) TOTP = HOTP(K, T) RFC test example: T0 = 0, X = 30 Unix time = 59 -> T = 1 HMAC-SHA-1, 8 digits -> 94287082 De berekening gebruikt Unix-tijd. Een afteller op het scherm moet na sluimeren of een klokwijziging weer op de actuele tijd aansluiten. De ontvangende dienst beslist over acceptatie en eenmalig gebruik.3 Toestemming voor een concrete handeling Bij agenttoegang wil ik aanvrager, account, handeling en geldigheidsduur bij elkaar houden. Een ander account is geen automatisch vervolg op een eerdere toestemming. Ik wil bovendien de toegangsbeslissing kunnen teruglezen zonder sleutels of codes in het log. Daarvoor zijn aparte tests nodig met testaccounts of openbare referentiewaarden. De RFC-berekening controleert geen opslag, apprechten of agenttoegang. Wat TOTP niet voorkomt Een tijdelijke code kan worden onderschept en doorgestuurd. NIST beschrijft OTP daarom als niet phishingbestendig. Lokale uitvoering verandert die eigenschap van het protocol niet.4 Download Tijdsleutel voor de Mac Hier staat versie 1.3.3, build 8, voor Apple Silicon vanaf macOS 13. Het is een testrelease. Installatie-instructies, ondertekening en notarisatiestatus staan bij de knop. https://www.dewind.me/articles/tijdsleutel/#download De SHA-256 helpt controleren of het gedownloade bestand overeenkomt met het aangeboden pakket. Een overeenkomst zegt niets over ondertekening, notarisatie of een onafhankelijke beveiligingsaudit. De beschreven updater staat onder Instellingen → Updates. Daar kun je een update laten ophalen via Bijwerken en herstarten. Een probleem of idee kun je doorgeven via [het feedbackformulier](/articles/tijdsleutel/feedback/) of Instellingen → Feedback. De app vult versiegegevens in. Voeg zelf geen codes of geheime sleutels toe. Een kleine handeling die ik nu dagelijks anders doe Wat begon als een manier om mijn telefoon op tafel te laten liggen, is nu een app die ik iedere dag gebruik. De koppeling met Codex kwam erbij omdat ik haar zelf nodig had. Dat is precies wat ik prettig vind aan eigen software: ik kan verder bouwen wanneer mijn werk daarom vraagt.6 Bronnen en toelichting [1] Tijdsleutel · projectbasis en afbakening https://www.dewind.me/articles/assets/tijdsleutel/evidence/project-basis.md De oorspronkelijke projectbasis. De actuele gebruiksstatus staat bij bron 6. [2] Apple · verificatiecodes op de Mac https://support.apple.com/en-om/guide/passwords/mchl873a6e72/mac Verificatiecodes tonen en gebruiken met Apple Wachtwoorden. [3] IETF · RFC 6238, TOTP https://www.rfc-editor.org/rfc/rfc6238.html De TOTP-berekening en de openbare testvectoren in Appendix B. Dit zijn protocolvoorbeelden. [4] NIST · SP 800-63B-4 https://pages.nist.gov/800-63-4/sp800-63b.html De eigenschappen en beperkingen van OTP-authenticatie, waaronder phishinggevoeligheid. [5] Eigen artikelenmodule: de Tijdsleutel-downloadroute https://www.dewind.me/articles/assets/tijdsleutel/evidence/download-code.nl.md De websitebestanden voor de downloadroute. Dit document beschrijft de website, niet de beveiliging van de Mac-app. [6] Eigen gebruik en screenshots · 18 oktober 2026 https://www.dewind.me/articles/assets/tijdsleutel/evidence/owner-confirmation-20261018.nl.txt Mijn bevestiging van dagelijks gebruik van versie 1.3.3, build 8, de menubalk, PostgreSQL-back-ups en de koppeling met Codex. Geen onafhankelijke beveiligingsaudit.