Datový klíč vzniká u vás
Prohlížeč vytvoří náhodný klíč DEK. Tím se šifruje balík vašich odpovědí pomocí XChaCha20-Poly1305.
Soukromí bez mlhy
Joiano je postavené tak, aby se citlivé odpovědi šifrovaly už ve vašem prohlížeči. Server pomáhá s účtem, platbou, synchronizací a průnikem, ale nemá klíč k přečtení vašich odpovědí.
1 Prohlížeč vytvoří datový klíč.
2 Heslo a záchranný klíč jej jen zabalí.
3 Server uloží šifrotext a obálky.
4 Shody se počítají z neprůhledných tokenů.
Obálkové šifrování
Prohlížeč vytvoří náhodný klíč DEK. Tím se šifruje balík vašich odpovědí pomocí XChaCha20-Poly1305.
Z hesla a záchranného klíče se přes Argon2id odvodí obálkové klíče. Ty umí rozbalit DEK, ne samotný server.
Server má samostatný verifier pro přihlášení. Je z jiné soli než klíč pro obálku, takže jím nejde odbalit DEK.
Párování
Při pozvání si partneři vymění jen veřejné klíče X25519. Jednorázové tajemství PS je až za znakem # ve fragmentu odkazu, takže ho prohlížeč neposílá serveru. Každý klient si potom dopočítá stejný párový klíč CK z výměny klíčů a PS.
Server CK nezná. Po spárování si každý klient uloží CK jen jako šifrovanou obálku pod vlastním DEK, aby bylo možné shody obnovit po přihlášení.
Tokenový průnik
Jen u vás se z dešifrovaných odpovědí vytvoří množina položek, které nejsou hranice a mají dostatečný zájem.
Token je odvozený z CK a item_id. Bez CK vypadá pro server jako náhodná hodnota a nejde přímo namapovat na katalog.
Server spočítá průnik tokenů. Klient si ho lokálně přeloží zpět na položky, které mají oba, ne na ne-shody druhého.
Poctivý rozsah
Limity v1
Současný model je navržený hlavně proti úniku databáze, záloh a proti čtení dat insiderem. V1 stále posílá heslo serveru přes TLS kvůli ověření, takže aktivně kompromitovaný běžící server v okamžiku přihlášení je silnější hrozba.
Roadmapa počítá s OPAQUE aPAKE pro přihlášení bez posílání hesla a s oblivious PSI, které skryje i velikosti množin. Tyto kroky jsou vědomé zpevnění, ne skrytý slib dnešní verze.