Ilmus Ad Nihilum 0.4.3 â minimalistlik teenus, mis pĂ”hineb pĂ”himĂ”ttel "luges â pĂ”letada" ja on suunatud peamiselt self-hosting'ule.
Server toimib ainult kui pime sĂ€ilitustehnika. KrĂŒpteerimine ja dekrĂŒpteerimine toimub ainult kliendi kĂŒljel, braUSERIs (kasutades AES-GCM).
Omadused
- kohalik krĂŒpteerimine ja dekrĂŒpteerimine, server ei nĂ€e kunagi vĂ”tit;
- toetatakse tĂ€iendavat krĂŒpteerimiskihte parooli abil, millest (1) server ei saa teada, (2) ei saa teada edastatud lingi kaudu;
- projekt sisaldab umbes 2200 rida serverikoodi C keeles ja 600 rida kliendikoodi JS'is, mis lihtsustab auditeerimist;
- Ad Nihilum sÔltub ainult libmicrohttpd-st. QR koodide genereerimiseks on lisatud muudatud versioon QRCode.js;
- kaasas on juhend kiireks kohaliku teenuse kÀivitamiseks ilma vÀlise IP-ta;
- Ad Nihilum töötab ka Androidil, kaasas on vastav skript Termuxi kogumiseks;
- ĂŒhe niidi ja sĂŒnkroonse teenus.
Muudatused
Suur redigeerimine
- Saadetud ja vastuvÔetud sÔnumite lehed on eraldatud, vastav kliendikood.
- Tegelikult on disain oluliselt muudetud ja kohandatud lorchani soovide arvesse vÔtmisega.
- "Lihtsad" ja kohalikud kliendid:
- kliendilehed saab salvestada kohalikult ja kasutada file:// kaudu.
BraUSERi poliitikad
- CSP on rakendatud XSS-i vastu vÔitlemiseks;
- server saadab HSTS.
Muud muudatused
- projekt on ĂŒmbernimetatud Epha-otsist;
- domeen adnihilum.net on ostetud;
- TLS-i tagab Let's Encrypt, seda on oluline meeles pidada (raha pole);
- failide kasutamine on lihtsustatud;
- ĂŒleminek rasvastele punkti tĂ€histele;
- vÀikesed vead on parandatud;
- auto-jsminify ja kliendifailide koostamine CMake'i kaudu koostamise ajal.
Protokolli ĂŒlevaade
Genereeri kolm juhuslikku vÀÀrtust: vĂ”ti K, initsialiseerimise vektor N ja sool S. K â 256 bitti, N â 96 bitti, S â 128 bitti.
VĂ€ljasta ID API-s K ja S HKDF abil, kasutades SHA-256.
Koosta tĂ€iendavate autentimisandmete string aad â see on lihtsalt string kujul: id=ID
Kui kasutaja on mÀÀranud parooli:
- vÀljasta Pk paroolist ja S kasutades PBKDF2, SHA-256, 800000 iteratsiooni;
- sama soola kasutatakse kÔikjal;
- krĂŒpteerida andmed AES-GCM abil, kasutades vĂ”tit Pk, IV/nonce N ja edastada aad.
Lisa kahebiti silt juba krĂŒpteeritud andmetele, kui parool oli, vĂ”i alg-andmetele, kui parooli ei olnud.
Esimene bait on oluline: see nĂ€itab, kas andmed on parooliga krĂŒpteeritud:
- 0x73 â andmed on parooliga krĂŒpteeritud;
- 0x13 â andmed ei ole parooliga krĂŒpteeritud.
Teine bait on pĂŒsi vÀÀrtus 0x37.
KrĂŒpteerige tulemus uuesti AES-GCM abil, kasutades sama iv = N ja sama aad. See annab lĂ”pliku krĂŒpteeritud teksti ct.
Kleebi baitid stringiks: blob = N .. S .. ct
Saada blob serverisse koos ID. Server naaseb blob selle abil ID ja ei saa seda asendada: klient kontrollib seda esmalt ID kasutades N ja K veel enne dekrĂŒpteerimist, ja seejĂ€rel - lĂ€bi aad.
Klient salvestab K. K kunagi ei saadeta serverisse. Pk ka ei saadeta; kÔik, mis on seotud parooliga, kustutatakse mÀlust.
Klient koostab lingi: origin/#ID/K
Siin ID ja K â stringid vormingus base64url.
Kui saaja avab lingi:
- brauser ignoreerib kÔike, mis algab #; seda nimetatakse location.hash;
- kliendi rakendus laaditakse serverist;
- minu arvates on see peamine auk: me pÔrkame tegelikult taas vastu seda, et "TLS on auklik";
- siiski ei takista miski kliendi off-line hoidmist;
- ideaalis peaks olema eraldi iseseisev klient.
Kliendi JavaScript kontrollib location.hash ja kui seal on ID ja K, laadib ta andmed serverist.
SeejĂ€rel kontrollib ta neid, dekrĂŒpteerib ja vajadusel kĂŒsib parooli ja dekrĂŒpteerib veel kord.
Litsents
Projekt levitatakse GPLv3 alusel.
Allikas: linux.org.ru
