LĂ«shimi i Ad Nihilum 0.4.3 â njĂ« shĂ«rbim minimalistik pĂ«r shkĂ«mbimin e mesazheve tĂ« enkriptuara sipas parimit "lexo - digj" qĂ« synon kryesisht self-hosting.
Serveri vepron vetëm si një depo e shurdhët. Enkriptimi dhe dekriptimi ndodhin ekskluzivisht në anën e klientit, në shfletues (nëpërmjet AES-GCM).
Karakteristikat
- enkriptimi dhe dekriptimi lokal, server kurrë nuk e sheh çelësin;
- mbështetje për një shtesë të enkriptimit me fjalëkalim, për të cilin (1) serveri nuk mund të dijë, (2) nuk mund të kuptohet përmes lidhjes që transmetohet;
- projekti përmban rreth 2200 rreshta kodi serveri në C dhe 600 rreshta kodi klienti në JS, gjë që e thjeshton auditin;
- Ad Nihilum varet vetëm nga libmicrohttpd. Për gjenerimin e kodit QR ofrohet një version i modifikuar i QRCode.js;
- vjen me një udhëzues për ngritjen e shpejtë të shërbimit lokal pa një IP të jashtme;
- Ad Nihilum funksionon edhe në Android, me një skenar për ndërtim në Termux;
- server një-fije dhe sinkron;
Ndryshimet
Redesign masiv
- Faqet e dërgimit dhe marrjes së mesazheve janë ndarë, kodi përkatës për klientin.
- Në përgjithësi, dizajni është ndryshuar dhe rregulluar në përputhje me kërkesat e lorchanëve
- Klientët "e thjeshtë" dhe lokalë:
- faqet e klientëve mund të ruhet lokalisht dhe të përdoren nga file://.
Politikat e shfletuesit
- CSP është implementuar për të luftuar XSS;
- serveri dërgon HSTS.
Ndryshime të tjera
- projekti është ribërë nga Epha-ots;
- blerë domenin adnihilum.net;
- TLS sigurohet nĂ«pĂ«rmjet Letâs Encrypt, Ă«shtĂ« e rĂ«ndĂ«sishme ta keni parasysh (nuk ka para);
- punimi me skedarët është thjeshtuar;
- kalimi në fat-pointer;
- u rregulluan disa defekte të vogla;
- auto-jsminify dhe ndërtimi i skedarëve të klientëve gjatë ndërtimit përmes CMake.
Përmbledhja e protokollit
Gjeneroni tre valore tĂ« rastĂ«sishme: çelĂ«si K, vektori i inicializimit N dhe kripa S. K â 256 bit, N â 96 bit, S â 128 bit.
Shfaq ID nga K dhe S me HKDF të bazuar në SHA-256.
Formoni njĂ« varg tĂ« dhĂ«nash tĂ« verifikuara tĂ« dhĂ«nash aad â kjo Ă«shtĂ« thjesht njĂ« varg me formĂ«: id=ID
Nëse përdoruesi ka vendosur një fjalëkalim:
- shfaq Pk nga fjalëkalimi dhe S nëpërmjet PBKDF2, SHA-256, 800000 iteracione;
- e njëjta kripë përdoret për të gjitha;
- enkripto të dhënat duke përdorur AES-GCM, duke përdorur çelësin Pk, IV/nonce N dhe duke e transmetuar aad.
Shtoni një etiketë dy-byte në të dhënat e enkriptuara, nëse ka pasur një fjalëkalim, ose në të dhënat origjinale, nëse nuk ka pasur fjalëkalim.
Bajti i parë ka rëndësi: ai tregon nëse të dhënat janë enkriptuar me fjalëkalim:
- 0x73 â tĂ« dhĂ«nat janĂ« enkriptuar me fjalĂ«kalim;
- 0x13 â tĂ« dhĂ«nat nuk janĂ« enkriptuar me fjalĂ«kalim.
Bajti i dytĂ« â njĂ« vlerĂ« e qĂ«ndrueshme 0x37.
Rënia e rezultatit përsëri me AES-GCM, duke përdorur të njëjtin iv = N dhe të njëjtin aad. Kjo jep tekstin përfundimtar të enkriptimit ct.
Kombino bajtët në një varg: blob = N .. S .. ct
DĂ«rgo blob nĂ« server sĂ« bashku me ID. Serveri kthen blob nĂ« kĂ«tĂ« ID dhe nuk mund ta zĂ«vendĂ«sojĂ«: klienti kontrollon fillimisht ID duke pĂ«rdorur N dhe K edhe para se tĂ« dekrijptohet, dhe pastaj â pĂ«rmes aad.
Klienti ruan K. K kurrë nuk dërgohet në server. Pk as nuk dërgohet; gjithçka që lidhet me fjalëkalimin pastrohet nga memoria.
Klienti formon lidhjen: origin/#ID/K
KĂ«tu ID dhe K â vargje nĂ« formatin base64url.
Kur marrësi hap lidhjen:
- navigatori hedh gjithçka që fillon me #; kjo quhet location.hash;
- aplikacioni klient ngarkohet nga serveri;
- sipas mendimit tim, kjo është vrima kryesore: ne me të vërtetë kthehemi në atë që «TLS është i çarë»;
- megjithatë nuk ka asgjë që ndalon ruajtjen e klientit offline;
- idealisht duhet të ketë një klient të veçantë standalone.
JavaScript i klientit kontrollon location.hash, dhe nëse ka ID dhe K, ai ngarkohet të dhënat nga serveri.
Pastaj ai i kontrollon, i dekrijpton dhe, nëse është e nevojshme, kërkon fjalëkalimin dhe dekrijpton përsëri.
Licenca
Projekti shpërndahet nën GPLv3.
Burimi: linux.org.ru
