Byla vydána verze Ad Nihilum 0.4.3 – minimalistická, samostatně hostovaná, šifrovaná služba pro zasílání zpráv založená na principu „přečti a vypal“.
Server funguje pouze jako tiché úložné zařízení. Šifrování a dešifrování probíhá výhradně na straně klienta, v prohlížeči (pomocí AES-GCM).
Vlastnosti
- lokální šifrování a dešifrování, serveru nikdy nevidí klíč;
- podpora další vrstvy šifrování hesla, kterou (1) server nemůže znát, (2) nelze zjistit z přenášeného odkazu;
- Projekt obsahuje přibližně 2 200 řádků serverového kódu v jazyce C a 600 řádků klientského kódu v jazyce JS, což zjednodušuje audit;
- Ad Nihilum závisí pouze na libmicrohttpd. Pro generování QR kódů je k dispozici upravená verze QRCode.js;
- Součástí jsou pokyny pro rychlé nastavení lokální služby bez externí IP adresy;
- Ad Nihilum funguje dál Android, je přiložen odpovídající skript pro assembler v Termuxu;
- jednovláknový a synchronní server.
Změny
Rozsáhlá přestavba
- Stránky pro odesílání a příjem zpráv a odpovídající klientský kód jsou oddělené.
- Obecně byl design výrazně změněn a upraven s ohledem na přání Lorchanů.
- „Jednoduchí“ a lokální klienti:
- Klientské stránky lze ukládat lokálně a používat ze souboru file://.
Zásady prohlížeče
- CSP byl implementován pro boj s XSS;
- Server odesílá HSTS.
Další změny
- projekt byl přejmenován z Epha-ots;
- doména adnihilum.net zakoupena;
- TLS je poskytováno pomocí Let's Encrypt, což je dobré mít na paměti (není zapojeno do žádných peněz);
- Práce se soubory byla zjednodušena;
- přechod na ukazatele tuku;
- opraveny drobné chyby;
- automatické jsminify a sestavování klientských souborů při sestavování pomocí CMake.
Přehled protokolu
Generovat tři náhodné hodnoty: klíč K, inicializační vektor N a sůl S. K — 256 bitů, N — 96 bitů, S — 128 bitů.
ustoupit ID z K и S pomocí HKDF založeného na SHA-256.
Vygenerujte řetězec dalších ověřených dat Aad - je to jen řetězec jako: id=ID
Pokud si uživatel nastavil heslo:
- stáhnout Pk z hesla a S s použitím PBKDF2, SHA-256, 800 000 iterací;
- na všechno se používá stejná sůl;
- Šifrování dat pomocí AES-GCM s použitím klíče Pk, IV/jednorázový kód N a předávání dál Aad.
Přidejte dvoubajtový tag k již zašifrovaným datům, pokud bylo heslo použito, nebo k původním datům, pokud heslo nebylo použito.
První bajt je významný: označuje, zda byla data zašifrována heslem:
- 0x73 - data jsou šifrována heslem;
- 0x13 - data nejsou šifrována heslem.
Druhý bajt je konstantní hodnota 0x37.
Výsledek znovu zašifrujte pomocí AES-GCM s použitím stejného iv = N a stejného AadTím se získá finální šifrovaný text. ct.
Zřetězení bajtů do řetězce: blob = N .. S .. ct
Odeslat kapka na server spolu s IDServer vrací kapka Proto ID a nelze jej nahradit: klient nejprve zkontroluje ID použití N и K ještě před dešifrováním a poté - skrz Aad.
Klient obchoduje K. K se nikdy neodesílá na server. Pk se také neodesílá; vše související s heslem se z paměti vymaže.
Klient vygeneruje odkaz: origin/#ID/K
Zde ID и K — řetězce ve formátu base64url.
Když příjemce otevře odkaz:
- Prohlížeč zahodí vše, co začíná znakem #; toto se nazývá location.hash;
- klientská aplikace se stáhne ze serveru;
- Podle mého názoru je tohle hlavní díra: v podstatě se opět setkáváme s faktem, že „TLS je děravý“;
- Nic vám však nebrání v uložení klienta offline;
- V ideálním případě by měl existovat samostatný klient.
JavaScript na straně klienta kontroluje location.hash a zda je přítomen. ID и K, stahuje data ze serveru.
Pak je zkontroluje, dešifruje a v případě potřeby se zeptá na heslo a znovu je dešifruje.
Licence
Projekt je distribuován pod licencí GPLv3.
Zdroj: linux.org.ru
