Ishulli Ad Nihilum 0.4.3 â njĂ« shĂ«rbim minimalist pĂ«r shkĂ«mbimin e mesazheve tĂ« enkriptuara sipas parimit "lexo - djeg", i orientuar kryesisht drejt self-hosting.
Serveri vepron vetëm si një depo e verbër. Enkriptimi dhe dekryptimi ndodhin ekskluzivisht nga ana e klientit, në shfletues (përmes AES-GCM).
Karakteristikat
- enkriptim dhe dekryptim lokal, server kurrë nuk sheh çelësin;
- mbështetje për një shtresë shtesë enkriptimi me fjalëkalim, për të cilin (1) serveri nuk mund të dijë, (2) nuk mund të dihet nga lidhja e dërguar;
- projekti përmban rreth 2200 rreshta kodi serveri në C dhe 600 rreshta kodi klienti në JS, 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 shërbimit lokal pa një IP të jashtme;
- Ad Nihilum funksionon gjithashtu në Android, është dhënë një skenar për ndërtimin në Termux;
- server njënjësor dhe sinkron.
Ndryshimet
Rindizajn Masiv
- Janë ndarë faqet e dërgimit dhe marrjes së mesazheve, kodi përkatës i klientit.
- Përgjithësisht, dizajni është ndryshuar dhe korrigjuar ndjeshëm në përputhje me kërkesat e lorchan
- «E thjeshtë» dhe klientët lokalë:
- faqet e klientëve mund të ruhen lokalmente dhe të përdoren nga file://.
Politikat e shfletuesit
- është implementuar CSP për të luftuar XSS;
- serveri dërgon HSTS.
Ndryshime të tjera
- projekti u rinovua nga Epha-ots;
- u bleu domeni adnihilum.net;
- TLS sigurohet pĂ«rmes Letâs Encrypt, Ă«shtĂ« mirĂ« tĂ« mbahet mend (nuk ka para);
- është lehtësuar puna me skedarët;
- kalimi në fat-pointerë;
- janë korrigjuar bugs 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 vlera tĂ« rastĂ«sishme: çelĂ«si K, vektori i inicializimit N dhe kripa S. K â 256 bit, N â 96 bit, S â 128 bit.
Shfaqni ID nga K dhe S nëpërmjet HKDF bazuar në SHA-256.
Formoni njĂ« varg tĂ« dhĂ«nash tĂ« verifikuara shtesĂ« aad â ky Ă«shtĂ« thjesht njĂ« varg i tipit: id=ID
Nëse përdoruesi cakton fjalëkalimin:
- shfaqni Pk nga fjalëkalimi dhe S nëpërmjet PBKDF2, SHA-256, 800000 iteracione;
- i njëjti krip është përdorur për gjithçka;
- kriptoni të dhënat me AES-GCM, duke përdorur çelësin Pk, IV/nonce N dhe dërgoni aad.
Shtoni një etiketë dy-byte në të dhënat tashmë të kriptuara, nëse kishte fjalëkalim, ose në të dhënat origjinale, nëse nuk kishte fjalëkalim.
Baiti i parë ka vlerën: tregon nëse të dhënat janë kriptuar me fjalëkalim:
- 0x73 â tĂ« dhĂ«nat janĂ« tĂ« koduara me fjalĂ«kalim;
- 0x13 â tĂ« dhĂ«nat nuk janĂ« tĂ« koduara me fjalĂ«kalim.
Byte i dytĂ« â njĂ« vlerĂ« konstante 0x37.
Rivendosni rezultatin duke përdorur AES-GCM, duke përdorur të njëjtin iv = N dhe të njëjtin aad. Kjo jep tekstin përfundimtar ct.
Kombinoni bajtat 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 verifikon mĂ« parĂ« ID duke pĂ«rdorur N dhe K para se tĂ« dekriptojĂ«, dhe mĂ« pas â pĂ«rmes aad.
Klienti ruan K. K asnjëherë nuk dërgohet në server. Pk as nuk dërgohet; gjithçka që lidhet me fjalëkalimin, fshihet nga memoria.
Klienti formon një lidhje: origin/#ID/K
KĂ«tu ID dhe K â vargje nĂ« formatin base64url.
Kur marrësi hap lidhjen:
- shfletuesi hedh gjithçka që fillon me #; kjo quhet location.hash;
- aplikacioni klient ngarkohet nga serveri;
- sipër mendimit tim, kjo është vrima kryesore: ne në fakt po përballeshim përsëri me atë që "TLS është e çarë";
- megjithatë, asgjë nuk e pengon mbajtjen e klientit offline;
- në një mënyrë ideale duhet të jetë një klient i veçantë standalone.
JavaScript klient kontrollon location.hash, dhe nëse ka ID dhe K, ai ngarkon të dhënat nga serveri.
Pastaj verifikon ato, dekriptohet dhe, nëse është e nevojshme, kërkon fjalëkalimin dhe dekriptohet përsëri.
Licenca
Projekti distribuohet nën GPLv3.
Burimi: linux.org.ru
