Ad Nihilum 0.4.3

Proběhl vydání Ad Nihilum 0.4.3 — minimalistické služby pro výměnu zašifrovaných zpráv podle principu 'přečetl — spálil', zaměřené především na self-hosting.

Server funguje pouze jako hluchý sklad. Šifrování a dešifrování se provádí výhradně na straně klienta, v prohlížeči (pomocí AES-GCM).

Vlastnosti

  • lokální šifrování a dešifrování, server nikdy nevidí klíč;
  • podpora dalšího vrstvy šifrování heslem, o kterém (1) server nemůže vědět, (2) nelze zjistit podle přenášeného odkazu;
  • projekt obsahuje přibližně 2200 řádků serverového kódu v C a 600 řádků klientského kódu v JS, což usnadňuje audit;
  • Ad Nihilum závisí pouze na libmicrohttpd. Pro generování QR kódů je dodávána modifikovaná verze QRCode.js;
  • je přiložen návod k rychlému spuštění místní služby bez externího IP;
  • Ad Nihilum funguje i na Androidu, přiložený je příslušný skript pro sestavení v Termux;
  • jedno-vláknový a synchronní server.

Změny

Široké redesignování

  • Byly odděleny stránky pro odesílání a přijímání zpráv, odpovídající klientský kód.
  • Celkově byl design výrazně změněn a upraven s ohledem na přání lorců.
  • „Jednoduché“ a lokální klienty:
    • byl přidán klient s jednodušším designem https://adnihilum.net/simple;
    • klientské stránky lze uložit lokálně a používat z file://.

Politiky prohlížeče

  • implementováno CSP na ochranu proti XSS;
  • server posílá HSTS.

Další změny

  • projekt byl přejmenován z Epha-ots;
  • zakoupen domén adnihilum.net;
  • TLS zajištěno pomocí Let’s Encrypt, to je dobré mít na paměti (není na to rozpočet);
  • zjednodušena práce se soubory;
  • přechod na fat-pointery;
  • opraveny drobné chyby;
  • auto-jsminify a sestavení klientských souborů při sestavení prostřednictvím CMake.

Přehled protokolu

Vygenerovat tři náhodné hodnoty: klíč K, inicializační vektor N a sůl S. K — 256 bitů, N — 96 bitů, S — 128 bitů.

Vypsat ID z K a S pomocí HKDF založeného na SHA-256.

Vytvořit řetězec dalších autentizovaných dat aad — to je prostě řetězec ve formátu: id=ID

Pokud uživatel zadá heslo:

  • vypsat Pk z hesla a S s pomocí PBKDF2, SHA-256, 800000 iterací;
  • stejná sůl se používá pro všechno;
  • zašifrovat data pomocí AES-GCM, s použitím klíče Pk, IV/nonce N a předat aad.

Přidat dvoubajtový tag k již zašifrovaným datům, pokud bylo heslo, nebo k původním datům, pokud heslo nebylo.

První bajt má význam: ukazuje, zda byla data zašifrována heslem:

  • 0x73 — data jsou zašifrována heslem;
  • 0x13 — data nejsou zašifrována heslem.

Druhý bajt je konstantní hodnota 0x37.

Znovu zašifrovat výsledek pomocí AES-GCM, přičemž se používá stejný iv = N a stejný aad. To dává finální šifrovaný text ct.

Spojit bajty do řetězce: blob = N .. S .. ct

Odeslat blob na server spolu s ID. Server vrátí blob podle tohoto ID a nemůže ho podvrhnout: klient nejprve zkontroluje ID s využitím N a K ještě před dešifrováním, a poté — prostřednictvím aad.

Klient uchovává K. K nikdy se neodesílá na server. Pk ani se neodesílá; všechno, co souvisí s heslem, je vymazáno z paměti.

Klient vytváří odkaz: origin/#ID/K

Zde ID a K — řetězce ve formátu base64url.

Když příjemce otevře odkaz:

  • prohlížeč odmítá vše, co začíná s #; tomu se říká location.hash;
  • klientská aplikace se načítá ze serveru;
  • podle mého názoru je to největší slabina: vlastně se znovu dostáváme k tomu, že „TLS je děravý“;
  • ale nic nebrání tomu, aby klient byl offline;
  • ideálně by měl být samostatný standalone klient.

Klientský JavaScript kontroluje location.hash, a pokud tam je ID a K, načte data ze serveru.

Poté je zkontroluje, dešifruje a pokud je to nutné, požádá o heslo a znovu dešifruje.

Licence

Projekt je distribuován pod licencí GPLv3.

Zdroj: linux.org.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster