Passit

Hoe werkt het

Passit is een brievenbus voor wachtwoorden en andere geheimen. Alles wordt versleuteld in je eigen browser, vóór het naar de server gaat. De server bewaart alleen onleesbare tekens en de sleutel staat in de link, achter het hekje. Dat deel van een link verlaat je browser nooit.

Delen

  1. Je plakt een geheim en kiest hoe lang de link geldig blijft. Je browser maakt een willekeurige sleutel en versleutelt de tekst (en eventuele bestanden) daarmee.
  2. Je krijgt een link. Het deel vóór het hekje wijst naar de versleutelde tekst op de server; het deel erachter is de sleutel. Alleen wie de hele link heeft kan het geheim lezen.
  3. De ontvanger opent de envelop. Pas dan haalt de browser de versleutelde tekst op, en de server telt de opening in dezelfde beweging. Een tweede keer openen kan niet, ook niet door jou. Wil je dat wel, dan sta je 3 of 10 keer openen toe, of zet je een wachtwoord op de link.
  4. Bedenk je je? Trek de link in. Is het geheim al geopend, dan zegt Passit dat eerlijk, zodat je het wachtwoord kunt wijzigen.
  5. Bestanden: tot 5 bestanden van elk 25 MB, één voor één versleuteld in je browser en in delen geüpload. Na het openen heeft de ontvanger 10 minuten om ze te downloaden; daarna zijn ze weg.

Opvragen

  1. Je maakt een verzoek met de velden die je nodig hebt, bijvoorbeeld adres, gebruikersnaam en wachtwoord van WordPress. Je browser maakt een sleutelpaar: een publieke sleutel om mee te versleutelen en een privésleutel om mee te lezen.
  2. Je krijgt twee links. De verzoeklink stuur je naar je klant; daarin zit je publieke sleutel. De ophaallink is voor jou alleen; daarin zit je privésleutel. Bewaar die in je wachtwoordmanager.
  3. Je klant vult in, zonder account. Zijn browser versleutelt het antwoord met jouw publieke sleutel. Niemand anders kan het openen, ook Passit niet.
  4. Jij haalt op en wist. Antwoorden blijven staan tot je ze wist, en verdwijnen in elk geval een dag na de eerste keer ophalen.
  5. Met een account krijg je een mail zodra er een antwoord is, en kan Passit de link namens jou naar je klant mailen, inclusief de sleutel. Voor dat ene verzoek zou een gecompromitteerde server de sleutel kunnen omwisselen; daarom staat in die mail altijd het geverifieerde accountadres, en zetten we klantmail per account handmatig aan.

Wat de server wél ziet

  • Versleutelde tekst en bestanden, met een verloopdatum. Geen sleutels.
  • Bij een verzoek: de titel, het bericht en de veldnamen, in gewone tekst. Je klant moet die kunnen lezen vóór hij een sleutel heeft. Zet er dus zelf geen geheimen in.
  • Een gehashte versie van je IP-adres, hooguit een uur, om misbruik af te remmen.
  • Een activiteitenlog per link: wanneer hij is bekeken, geopend of beantwoord, met het land en de browserfamilie (bijvoorbeeld “Chrome, Windows”). Geen IP-adres. De deler of aanvrager ziet dat; de ontvanger en de klant weten dat het gedeeld wordt.
  • Met een account: je e-mailadres, versleuteld opgeslagen, en de naam, het logo en de accentkleur die je zelf instelt. Naam en logo zijn voor je klanten zichtbaar vanaf 7 dagen na het aanmaken van je account.

Passit controleert niet wie een verzoek maakt. Vul alleen in als je de afzender van een link kent. En zoals bij elke dienst die in de browser versleutelt: de code die versleutelt komt van de server. Is die code gecompromitteerd, dan is de belofte dat ook. De code is daarom bewust klein gehouden.

De techniek

Delen
AES-256-GCM met een willekeurige sleutel van 256 bit en een IV van 96 bit. De sleutel staat als base64url in het URL-fragment. De ciphertext is gebonden aan het id van het geheim, zodat hij niet naar een ander id verplaatst kan worden. Een wachtwoord op de link wordt in je browser met PBKDF2 uitgerekt en in de sleutel gemengd; de server bewaart alleen een controlewaarde.
Opvragen
ECDH op P-256. De publieke sleutel van de aanvrager staat in het fragment van de verzoeklink, samen met een SHA-256 van titel, bericht en velden: verandert de server daar iets aan, dan weigert de browser van de klant. Per antwoord maakt de klant-browser een eenmalig sleutelpaar, leidt met HKDF-SHA256 een AES-sleutel af en versleutelt daarmee.
Eenmalig openen
Eén atomaire database-opdracht die het geheim teruggeeft en tegelijk de opening telt. Twee mensen die tegelijk klikken: precies één krijgt het.
Alleen WebCrypto
Geen eigen cryptografie en geen externe bibliotheken; alles via de ingebouwde Web Crypto API van de browser.

Vragen of twijfel? Deel dan gewoon niets, en vraag de afzender om een andere weg. Terug naar delen.