Ad Nihilum 0.4.3 har fullfÞrt lanseringen - en minimalistisk tjeneste for Ä utveksle krypterte meldinger basert pÄ prinsippet om «lest - Þdelagt», primÊrt rettet mot self-hosting.
Serveren fungerer kun som et blindt lager. Kryptering og dekryptering skjer utelukkende pÄ klientsiden, i nettleseren (gjennom AES-GCM).
Egenskaper
- lokal kryptering og dekryptering, server ser aldri nĂžkkelen;
- stĂžtte for et ekstra krypteringslag med passord, som (1) serveren ikke kan kjenne, (2) ikke kan oppdages via den sendte lenken;
- prosjektet inneholder omtrent 2200 linjer serverkode i C og 600 linjer klientkode i JS, noe som forenkler revisjonen;
- Ad Nihilum avhenger kun av libmicrohttpd. For generering av QR-koder leveres en modifisert versjon av QRCode.js;
- det fĂžlger med en instruksjon for rask oppsett av en lokal tjeneste uten ekstern IP;
- Ad Nihilum fungerer ogsÄ pÄ Android, med et tilsvarende skript for bygging i Termux;
- enkelt-trÄdet og synkront server.
Endringer
Omfattende redesign
- Sider for sending og mottak av meldinger er delt opp, med tilhĂžrende klientkode.
- Generelt er designet sterkt endret og korrigert med tanke pÄ tilbakemeldinger fra lorcanere
- «Enkel» og lokal klient:
- klientssidene kan lagres lokalt og brukes fra file://.
Nettleserpolitikker
- CSP er implementert for Ă„ bekjempe XSS;
- serveren sender HSTS.
Other changes
- prosjektet er omdĂžpt fra Epha-ots;
- domenet adnihilum.net er kjĂžpt;
- TLS sikres ved hjelp av Letâs Encrypt, noe Ă„ ha i tankene (det er ingen penger);
- arbeidet med filer er forenklet;
- overgangen til fat-poeng;
- smÄ feil er fikset;
- auto-jsminify og bygging av klientfiler under bygging via CMake.
Oversikt over protokollen
Generer tre tilfeldige verdier: nĂžkkel K, initialiseringsvektor N og salt S. K â 256 bit, N â 96 bit, S â 128 bit.
Utgang ID fra K og S ved hjelp av HKDF basert pÄ SHA-256.
Opprett en streng med ekstra autentiserte data aad â det er bare en streng av typen: id=ID
Hvis brukeren har angitt et passord:
- utgang Pk fra passordet og S ved hjelp av PBKDF2, SHA-256, 800000 iterasjoner;
- den samme saltet brukes for alt;
- krypter data med AES-GCM, ved bruk av nĂžkkelen Pk, IV/nonce N og send aad.
Legg til en to-bytes tag til allerede krypterte data hvis passordet var brukt, eller til de opprinnelige dataene hvis det ikke var noe passord.
Den fĂžrste byten har betydning: den viser om dataene er krypteret med adgangskoden:
- 0x73 â dataene er krypteret med adgangskoden;
- 0x13 â dataene er ikke krypteret med adgangskoden.
Den anden byten er en konstant vĂŠrdi 0x37.
Krypter resultatet igen ved hjĂŠlp af AES-GCM, brug den samme iv = N og den samme aad. Dette giver den endelige chiffrede tekst ct.
SammensĂŠt bytes til en streng: blob = N .. S .. ct
Send blob til serveren sammen med ID. Serveren returnerer blob gennem dette ID og kan ikke blive ĂŠndret: klienten kontrollerer fĂžrst ID med bruk av N og K allerede fĂžr dekryptering, og derefter â gennem aad.
Klienten opbevarer K. K sendes aldrig til serveren. Pk heller ikke sendes; alt, der relaterer sig til adgangskoden, renses fra hukommelsen.
Klienten danner et link: origin/#ID/K
Her ID og K â strenge i base64url-format.
NÄr modtageren Äbner linket:
- browseren ignorerer alt, der starter med #; dette kaldes location.hash;
- klientapplikationen indlĂŠses fra serveren;
- efter min mening er dette den stÞrste sÄrbarhed: vi stÞder faktisk igen pÄ, at 'TLS er utÊt';
- men intet forhindrer opbevaring af klienten offline;
- ideelt set bĂžr der vĂŠre en separat standalone-klient.
Klientens JavaScript kontrollerer location.hash, og hvis der er ID og K, henter den data fra serveren.
Derefter kontrollerer den dem, dekrypterer og, hvis nĂždvendigt, beder om adgangskoden og dekrypterer igen.
Lisens
Projektet distribueres under GPLv3.
Kilde: linux.org.ru
