Është publikuar Ad Nihilum 0.4.3—një shërbim minimalist, i vetë-strehuar dhe i koduar mesazhesh, i bazuar në parimin "lexo dhe djeg".
Serveri vepron vetëm si një pajisje ruajtjeje e heshtur. Enkriptimi dhe dekriptimi ndodhin ekskluzivisht në anën e klientit, në shfletues (duke përdorur AES-GCM).
Features
- enkriptimi dhe dekriptimi lokal, server nuk e sheh kurrë çelësin;
- mbështetje për një shtresë shtesë të enkriptimit me fjalëkalim që (1) serveri nuk mund ta dijë, (2) nuk mund të zbulohet nga lidhja e transmetuar;
- Projekti përmban afërsisht 2200 rreshta kodi serveri në C dhe 600 rreshta kodi klienti në JS, gjë që thjeshton auditimin;
- Ad Nihilum varet vetëm nga libmicrohttpd. Një version i modifikuar i QRCode.js është dhënë për gjenerimin e kodeve QR;
- Përfshihen udhëzime për konfigurimin e shpejtë të një shërbimi lokal pa një IP të jashtëm;
- Ad Nihilum funksionon në Android, skripti përkatës për asamblenë në Termux është bashkëngjitur;
- server me një fije të vetme dhe sinkron.
ndryshimet
Ridizajnim në shkallë të gjerë
- Faqet për dërgimin dhe marrjen e mesazheve dhe kodi përkatës i klientit janë të ndara.
- Në përgjithësi, dizajni u ndryshua dhe u rregullua shumë duke marrë parasysh dëshirat e Lorkhanëve.
- Klientë "të thjeshtë" dhe vendas:
- Faqet e klientëve mund të ruhen lokalisht dhe të përdoren nga file://.
Politikat e shfletuesit
- CSP është zbatuar për të luftuar XSS;
- Serveri dërgon HSTS.
Ndryshime të tjera
- projekti u riemërua nga Epha-ots;
- domeni adnihilum.net u ble;
- TLS ofrohet duke përdorur Let's Encrypt, kjo ia vlen të mbahet mend (nuk përfshihen para);
- Puna me skedarë është thjeshtuar;
- kalimi në treguesit e dhjamit;
- gabime të vogla të rregulluara;
- auto-jsminify dhe ndërtimi i skedarëve të klientit gjatë ndërtimit nëpërmjet CMake.
Përmbledhje e protokollit
Gjeneroni tre vlera të rastësishme: çelësi K, vektor i inicializimit N dhe kripë S. K — 256 bit, N — 96 bit, S — 128 bit.
Të tërheqë ID nga K и S duke përdorur HKDF të bazuar në SHA-256.
Gjeneroni një varg të dhënash shtesë të autentifikuara adi - është vetëm një varg si: id=ID
Nëse përdoruesi ka vendosur një fjalëkalim:
- tërheqë Pk nga fjalëkalimi dhe S duke përdorur PBKDF2, SHA-256, 800000 përsëritje;
- e njëjta kripë përdoret për gjithçka;
- Enkripto të dhënat duke përdorur AES-GCM duke përdorur çelësin Pk, IV/nonce N dhe duke kaluar tutje adi.
Shtoni një etiketë dy bajtëshe në të dhënat e koduara tashmë nëse ka pasur fjalëkalim, ose në të dhënat origjinale nëse nuk ka pasur fjalëkalim.
Bajti i parë është i rëndësishëm: tregon nëse të dhënat janë koduar me fjalëkalim:
- 0x73 - të dhënat janë të koduara me një fjalëkalim;
- 0x13 - të dhënat nuk janë të koduara me fjalëkalim.
Bajti i dytë është vlera konstante 0x37.
Enkripto rezultatin përsëri me AES-GCM duke përdorur të njëjtin iv = N dhe të njëjtin adiKjo jep tekstin përfundimtar të koduar. ct.
Bashkoni bajtet në një varg: blob = N .. S .. ct
Dërgoj pikë në server së bashku me IDServeri kthen pikë Kjo është arsyeja pse ID dhe nuk mund ta zëvendësojë atë: klienti do të kontrollojë së pari ID me N и K edhe para deshifrimit, dhe pastaj - përmes adi.
Dyqanet e klientëve K. K nuk dërgohet kurrë në server. Pk gjithashtu nuk dërgohet; gjithçka që lidhet me fjalëkalimin fshihet nga kujtesa.
Klienti gjeneron një lidhje: origin/#ID/K
Këtu ID и K — vargjet në formatin base64url.
Kur marrësi hap lidhjen:
- Shfletuesi hedh poshtë gjithçka që fillon me #; kjo quhet location.hash;
- aplikacioni i klientit shkarkohet nga serveri;
- Sipas mendimit tim, kjo është e meta kryesore: në thelb po hasim përsëri në faktin se "TLS ka probleme me rrjedhjen";
- Megjithatë, asgjë nuk ju pengon ta ruani klientin jashtë linje;
- Idealisht, duhet të ketë një klient të veçantë dhe të pavarur.
JavaScript në anën e klientit kontrollon location.hash dhe nëse është aty. ID и K, shkarkon të dhëna nga serveri.
Pastaj i kontrollon, i deshifron dhe, nëse është e nevojshme, kërkon fjalëkalimin dhe i deshifron përsëri.
leje
Projekti shpërndahet sipas GPLv3.
Burimi: linux.org.ru
