Patikrink per 2 minutes
Paspausk F12 naršyklėje. Nieko neįdiegiant. Nemokant programuoti.
| Teiginys | Kaip patikrinti | Skirtukas |
|---|---|---|
| Jokių slapukų jokios rūšies | Application → Cookies → tuščia. Solo2 neįdiegia jokių slapukų. Tavo sesija palaikoma localStorage, ne slapukuose. Be _ga |
Application |
| Programėlėje nėra trečiųjų šalių paslaugų | Network → filtruoti pagal domeną → tik užklausos į solo2.net. Nėra Google, Facebook, Cloudflare ar kitų. |
Network |
| Analitika tik pristatymo puslapyje, ne programėlėje | Network → /* matysite užklausas į stats.menzuri.com. Programėlėje (/app/*), jokių. |
Network |
| Tavo istorija saugoma tavo naršyklėje | Application → IndexedDB → solo2-vault-{userId}. Tavo šifruoti duomenys yra čia, ne serveryje. |
Application |
| Kontaktų sąrašas tik vietinis | Application → IndexedDB → store pares. Egzistuoja tik tavo naršyklėje. |
Application |
| Be išorinių CDN | Network → visi JS/CSS įkeliami iš to paties domeno. Nėra cdn.jsdelivr.net, unpkg.com ar panašių. |
Network |
| Sesijos iki 24 val. | Application → localStorage → solo2_session. Tokenas turi patikrinamą galiojimo laiką. |
Application |
| Gali matyti, kokį ryšio tipą naudoji | Pokalbio UI: P2P indikatorius (žalias) vs Mirror/TURN (oranžinis) visada matomas | UI |
| Umami neturi slapukų | Application → Cookies → nerodomas joks stats.menzuri.com slapukas. Umami nenaudoja slapukų. |
Application |
| Tavo pagrindinis raktas sukuriamas atsitiktinai | Application → registruojantis, Solo2 sugeneruoja 24 unikalius žodžius. Jie neišvedami iš tavo slaptažodžio — tai nepriklausomas raktas su 256 bitais tikros entropijos | Application |
Jei moki naudoti DevTools
Patikrinimai, reikalaujantys techninių žinių. Jei supranti HTTP, WebRTC ir bazinę kriptografiją, gali patvirtinti šiuos teiginius.
| Teiginys | Kaip patikrinti |
|---|---|
| E2E šifruotos žinutės | Network → užklausos į /cmd turi šifruotus duomenis (base64/binary). Nėra skaitomo JSON su paprastu tekstu. |
| E2E šifruoti WebRTC signalai | Network → signalizacijos žinutės keliauja kaip šifruoti dvejetainiai blob'ai. Tai nėra skaitomas JSON su offer/answer paprastu tekstu. |
| Pagrindinis raktas nepriklausomas nuo slaptažodžio | Network → prisijungimas gauna užšifruotą wrapped_master_key |
| Vienodas padding mirror režime | Network → WebSocket/DataChannel paketai turi fiksuotą dydį naudojant relay. Patikrink dydžius Network skirtuke |
| Slaptažodis apsaugotas (nekeliauja paprastu tekstu) | Network → prisijungimas siunčia hash, ne paprastą tekstą. Negali patikrinti serverio algoritmo (Argon2id), bet gali matyti, kad tavo originalus slaptažodis niekada nesiunčiamas. |
| Susiejimo užklausos baigia galioti po 3 dienų | Sukurk užklausą, neatsakyk, patikrink po 3 dienų, kad dingo. Reikia kantrybės, bet tai patikrinama. |
| Šifruoti push pranešimai | Network → push užklausos į Service Worker ateina šifruotos (Web Push standartas). Šifruotą turinį matai Network skirtuke |
| Tiesioginė P2P jungtis vs relay | chrome://webrtc-internals/ → patikrink ICE kandidatus. Jei matai typ srflx arba typ relay, žinai, ar ryšys tiesioginis, ar persiųstas. |
To patikrinti negali
Būtume veidmainiai, jei sakytume, kad viską galima patikrinti. Šie teiginiai reikalauja pasitikėjimo — arba išorinio audito.
| Teiginys | Kodėl negalima patikrinti |
|---|---|
| Double Ratchet su raktų rotacija | Kriptografinės operacijos vyksta WASM binaro viduje. Vartotojas mato, kad jis įkeliamas, bet negali perskaityti, kokį algoritmą vykdo |
| Pagrindinis raktas sukuriamas su tikra entropija (256 bitai) | Generavimas naudoja crypto.getRandomValues naršyklėje. Gali matyti, kad sugeneruojami 24 žodžiai, tačiau negali iš F12 patikrinti entropijos kokybės nei to, kad CSPRNG yra saugus |
| X25519 + Ed25519 + ChaCha20-Poly1305 | Ta pati problema: kriptografinis stekas yra WASM viduje. Kreivių nei algoritmų negalima patvirtinti iš naršyklės |
| Serveris yra „visiškai aklas" | Gali patikrinti, kad klientas nesiunčia skaitomų duomenų. Ką serveris daro su prisijungimo metaduomenimis (IP, laiko žymės) reikalauja pasitikėjimo arba audito |
| Serveris nesaugo ryšių po susiejimo | Reikia prieigos prie serverio kodo ir duomenų bazės |
| IP adresai neregistruojami | Negali patikrinti, ką serveris registruoja savo žurnaluose |
| Raktai keičiasi su kiekviena žinute | Vyksta WASM viduje. Matai, kad žinutės siunčiamos, bet negali stebėti raktų rotacijos |
| Ištrinti duomenys tikrai dingsta | Gali ištrinti iš vietinio IndexedDB, bet negali patikrinti, ar serveris nelaiko kopijų (nors Manifestas teigia, kad jų niekada neturėjo) |
Kodėl WASM yra tikra kliūtis
Solo2 kriptografinė sluoksnis sukompiliuota į WebAssembly — dvejetainį formatą, kurį tavo naršyklė vykdo, bet negali skaityti kaip teksto. Tai reiškia, kad negali tiesiogiai audituoti kodo, kuris šifruoja tavo žinutes.
Suglaudintas JavaScript (kurį naudojame sąsajai) yra atvirkštinis: naršyklė gali jį performatuoti ir kodo struktūra yra skaitoma. Tai varginantis procesas, bet įmanomas. WASM — ne: tai nepermatomas binaras.
Sakome, kad tai Double Ratchet su X25519. Gali pasitikėti mūsų žodžiu arba palaukti, kol paskelbsime kriptografinės sluoksnies pirminį kodą, kad galėtum pats patikrinti.
Ką darome, kad galėtum labiau pasitikėti
Publikuoti .wasm SHA-256 hash'us
Paskelbsime kiekvieno WASM failo kriptografinį hash'ą produkcijoje. Taip bet kuris auditorius galės patikrinti, kad naršyklėje vykdomas binaras sutampa su tuo, kurį mes sukompiliavome.
Atverti kriptografinę sluoksnį kaip atvirąjį kodą
Paskelbti kriptografinės sluoksnies (Zig) pirminį kodą kaip viešą saugyklą. Tas pats modelis kaip Signal: atviras kriptografinis protokolas, likusi programėlės dalis privati.
Saugumas nepriklauso nuo slaptumo
Mūsų saugumo modelis sukurtas veikti net jei kodas būtų viešas. Nepriklausome nuo to, kad niekas nematytų, kaip veikia — priklausome nuo kriptografijos patikimumo.
5 documented security layers
Slaptažodis (prieiga prie serverio), 24 žodžiai (tikrasis pagrindinis raktas), įrenginio paslaptis (saugyklos apsauga) ir Double Ratchet rotacija. Kiekvienas sluoksnis yra nepriklausomas ir patikrinamas mūsų Skaidrumo Manifeste.