Ad Nihilum 0.4.3

A avut loc lansarea Ad Nihilum 0.4.3 - un serviciu minimalist pentru schimbul de mesaje criptate pe principiul „citit - ars”, orientat în principal spre self-hosting.

Serverul acționează doar ca un depozit mut. Criptarea și decriptarea se realizează exclusiv pe partea clientului, în browser (prin AES-GCM).

Caracteristici

  • criptare și decriptare localizată, serverul niciodată nu vede cheia;
  • suport pentru un strat suplimentar de criptare cu parolă, despre care (1) serverul nu poate ști, (2) nu poate fi dedus din link-ul transmis;
  • proiectul conține aproximativ 2200 de linii de cod server pe C și 600 de linii de cod client pe JS, ceea ce simplifică auditul;
  • Ad Nihilum depinde doar de libmicrohttpd. Pentru generarea codurilor QR se furnizează o versiune modificată a QRCode.js;
  • este inclus un ghid pentru ridicarea rapidă a serviciului local fără IP extern;
  • Ad Nihilum funcționează și pe Android, incluzând un script corespunzător pentru compilare în Termux;
  • server unifil și sincron.

Modificări

Redesign extins

  • Pagini separate pentru trimiterea și primirea mesajelor, codul clientului corespunzător.
  • În general, designul a fost modificat semnificativ și ajustat conform dorințelor utilizatorilor de pe lorchan.
  • Clienți „simpli” și locali:
    • s-a adăugat un client cu un design simplificat https://adnihilum.net/simple;
    • paginile clientului pot fi salvate local și utilizate din file://.

Politicile browser-ului

  • s-a implementat CSP pentru combaterea XSS;
  • serverul trimite HSTS.

Alte modificări

  • proiectul a fost redenumit din Epha-ots;
  • a fost cumpărat domeniul adnihilum.net;
  • TLS este asigurat prin Let’s Encrypt, ceea ce trebuie avut în vedere (nu sunt bani);
  • a fost simplificată gestionarea fișierelor;
  • trecerea la pointeri mari;
  • au fost corectate erorile mici;
  • auto-jsminify și compilarea fișierelor client la compilarea prin CMake.

Revizuirea protocolului

Generează trei valori aleatorii: cheia K, vector de inițializare N și sare S. K — 256 biți, N — 96 biți, S — 128 biți.

Afișează ID din K și S prin HKDF bazat pe SHA-256.

Formează un șir de date suplimentare autentificate aad — este pur și simplu un șir de tip: id=ID

Dacă utilizatorul a setat o parolă:

  • afisează Pk din parolă și S prin PBKDF2, SHA-256, 800000 de iterații;
  • aceeași sare este folosită pentru tot;
  • criptează datele folosind AES-GCM, folosind cheia Pk, IV/nonce N și transmite aad.

Adaugă o etichetă de două octeți la datele deja criptate, dacă a existat o parolă, sau la datele originale, dacă nu a fost parolă.

Primul octet are valoarea: indică dacă datele au fost criptate cu o parolă:

  • 0x73 — datele sunt criptate cu o parolă;
  • 0x13 — datele nu sunt criptate cu o parolă.

Al doilea octet — o valoare constantă 0x37.

Recritează din nou rezultatul folosind AES-GCM, folosind același iv = N și același aad. Aceasta oferă textul criptat final ct.

Conectează octeții într-un șir: blob = N .. S .. ct

Trimite blob pe server împreună cu ID. Serverul returnează blob pe baza acestuia ID și nu îl poate înlocui: clientul verifică mai întâi ID folosind N și K încă înainte de decriptare, și apoi — prin aad.

Clientul stochează K. K niciodată nu este trimis pe server. Pk nici nu este trimis; tot ce este legat de parolă este șters din memorie.

Clientul formează un link: origin/#ID/K

Aici ID și K — șiruri în format base64url.

Când destinatarul deschide linkul:

  • navigatoarele ignoră tot ce începe cu #; acest lucru se numește location.hash;
  • aplicația client este încărcată de pe server;
  • din punctul meu de vedere, aceasta este principala vulnerabilitate: ne întoarcem de fapt la problema că «TLS este vulnerabil»;
  • cu toate acestea, nimic nu împiedică păstrarea clientului offline;
  • în ideal ar trebui să existe un client standalone separat.

JavaScript-ul clientului verifică location.hash, și dacă există ID și K, acesta încarcă datele de pe server.

Apoi le verifică, le decriptează și, dacă este nevoie, solicită parola și le decriptează din nou.

Licență

Proiectul este distribuit sub GPLv3.

Sursa: linux.org.ru

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster