Preveri v 2 minutah
V brskalniku pritisni F12. Brez nameščanja česar koli. Brez znanja programiranja.
| Trditev | Kako preveriti | Zavihek |
|---|---|---|
| Ni piškotkov nobene vrste | Application → Cookies → prazno. Solo2 ne namesti nobenega piškotka. Tvoja seja se ohranja v localStorage, ne v piškotkih. Brez _ga |
Application |
| V aplikaciji ni storitev tretjih oseb | Network → filtriraj po domeni → le zahtevki na solo2.net |
Network |
| Analitika le na predstavitveni strani, ne v aplikaciji | Network → v /* |
Network |
| Tvoja zgodovina živi v tvojem brskalniku | Application → IndexedDB → solo2-vault-{userId} |
Application |
| Seznam kontaktov je le lokalen | Application → IndexedDB → store pares |
Application |
| Brez zunanjih CDN-jev | Network → vsi JS/CSS se naložijo z iste domene. Ni cdn.jsdelivr.net |
Network |
| Seje največ 24 ur | Application → localStorage → solo2_session |
Application |
| Lahko vidiš, katero vrsto povezave uporabljaš | Na seznamu stikov: poleg vsakega stika, P2P (zelen) ali Ogledalo (oranžen) | UI |
| Umami je brez piškotkov | Application → Cookies → ne pojavi se noben piškotek od stats.menzuri.com |
Application |
| Tvoj glavni ključ se generira naključno | Application → ob registraciji Solo2 generira 24 unikatnih besed. Ne izhajajo iz tvojega gesla — so neodvisen ključ z 256 biti realne entropije | Application |
Če znaš uporabljati DevTools
Preverjanja, ki zahtevajo tehnično znanje. Če razumeš HTTP, WebRTC in osnovno kriptografijo, lahko potrdiš te trditve.
| Trditev | Kako preveriti |
|---|---|
| Sporočila šifrirana E2E | Network → zahtevki na /cmd |
| WebRTC signali šifrirani E2E | Network → signalna sporočila potujejo kot šifrirani binarni bloki. Niso berljivi JSON z offer |
| Glavni ključ neodvisen od gesla | Network → prijava prejme wrapped_master_key |
| Enotno oblazinjenje (padding) v mirror | Network → paketi WebSocket/DataChannel imajo fiksno velikost, ko se uporablja ogledalo (TURN). Preveri velikosti v zavihku Network |
| Geslo zaščiteno (ne potuje v čistopisu) | Network → prijava pošlje hash, ne čistega besedila. Ne moreš preveriti, kateri algoritem uporablja strežnik (Argon2id), lahko pa vidiš, da tvoje prvotno geslo nikoli ne zapusti brskalnika |
| Zahteve za povezovanje potečejo v 3 dneh | Ustvari zahtevo, nanjo ne odgovori, po 3 dneh preveri, da je izginila. Zahteva potrpežljivost in dva računa |
| Push obvestila šifrirana | Network → push zahtevki do Service Workerja prispejo šifrirani (standard Web Push). Šifrirana vsebina je vidna v zavihku Network |
| Neposredna povezava P2P proti ogledalu (TURN) | chrome://webrtc-internals/ |
Tega ne moreš preveriti
Bili bi hinavski, če bi rekli, da je vse preverljivo. Te trditve zahtevajo, da nam zaupaš — ali počakaš, da objavimo kodo.
| Trditev | Zakaj ni preverljivo |
|---|---|
| Double Ratchet z rotacijo ključev | Kriptografske operacije potekajo znotraj binarija WASM. Uporabnik vidi, da se naloži, ne more pa prebrati, kateri algoritem izvaja |
| Glavni ključ generiran z realno entropijo (256 bitov) | Generiranje uporablja crypto.getRandomValues v brskalniku. Vidiš, da se generira 24 besed, ne moreš pa iz F12 preveriti kakovosti entropije ali varnosti CSPRNG-ja |
| X25519 + Ed25519 + ChaCha20-Poly1305 | Ista težava: kriptografski sklad je znotraj WASM. Krivulj in algoritmov ni mogoče potrditi iz brskalnika |
| Strežnik ne more prebrati vsebine tvojih sporočil | Lahko preveriš, da odjemalec ne pošilja berljivih podatkov. Kaj strežnik počne z metapodatki povezave (IP-ji, časovni žigi), zahteva zaupanje ali revizijo strežnika |
| Strežnik ne hrani razmerij po povezovanju | Zahteva dostop do kode in baze podatkov strežnika |
| IP-ji se ne beležijo | Ne moreš preveriti, kaj strežnik beleži v svojih logih |
| Ključi rotirajo z vsakim sporočilom | Dogaja se znotraj WASM. Vidiš, da se sporočila pošiljajo, ne moreš pa opazovati rotacije ključev |
| Izbrisani podatki resnično izginejo | Izbrišeš lahko iz lokalnega IndexedDB, ne moreš pa preveriti, da strežnik ne zadrži kopij (čeprav Manifest pravi, da jih nikoli ni imel) |
Zakaj je WASM prava pregrada
Kriptografska plast Solo2 je prevedena v WebAssembly — binarno obliko, ki jo brskalnik izvaja, vendar je ne moreš brati kot besedilo. To pomeni, da iz F12 ne moreš preveriti, kateri algoritem uporabljamo.
Minificiran JavaScript (ki ga uporabljamo za vmesnik) je sicer povratno prevedljiv: brskalnik ga lahko preoblikuje in struktura kode je berljiva. Je praktična ovira, ne pa prava pregrada. Vendar je WASM, preveden iz Zig-a, temeljne drugačen
Pravimo, da je Double Ratchet z X25519. Lahko nam zaupaš na besedo ali pa počakaš, da objavimo izvorno kodo kriptografske plasti, da jo bo lahko kdor koli revidiral. Delamo na tem.
Kaj počnemo, da bi nam lahko bolj zaupal
Objava SHA-256 hashev datotek .wasm
Objavili bomo kriptografski hash vsake datoteke WASM v produkciji. Tako bo kateri koli revizor lahko potrdil, da binarij, ki se izvaja v tvojem brskalniku, natanko ustreza tistemu, ki smo ga mi prevedli.
Odprtje kripto plasti kot odprte kode
Objava izvorne kode kriptografske plasti (Zig) kot javno skladišče. Isti model kot Signal: odprt kriptografski protokol, zaprta ostala koda. Kdor koli bo lahko prevedel izvorno kodo in primerjal hash dobljene datoteke .wasm s tisto, ki je v produkciji.
Varnost ni odvisna od nejasnosti
Naš varnostni model je zasnovan tako, da deluje, tudi če je izvorna koda javna. Če bi bila varnost odvisna od tega, da nihče ne more brati kode, to ne bi bila varnost — temveč upanje.
5 dokumentiranih plasti varnosti
Geslo (dostop do strežnika), 24 besed (dejanski glavni ključ), skrivnost naprave (zaščita lokalnih podatkov) in rotacija Double Ratchet. Vsaka plast je neodvisna in preverljiva v našem Manifestu preglednosti.