Ad Nihilum 0.4.3

De release van Ad Nihilum 0.4.3 heeft plaatsgevonden - een minimalistische service voor het uitwisselen van versleutelde berichten volgens het principe 'gelezen - verbrand', gericht op self-hosting.

De server fungeert alleen als een stille opslag. Versleuteling en ontsleuteling vinden uitsluitend aan de cliƫntzijde plaats, in de browser (via AES-GCM).

Kenmerken

  • lokale versleuteling en ontsleuteling, server ziet nooit de sleutel;
  • ondersteuning voor een extra versleuteling met wachtwoord, waarvan (1) de server niets kan weten, (2) niet kan worden afgeleid uit de verzonden link;
  • het project bevat ongeveer 2200 regels servercode in C en 600 regels clientcode in JS, wat de audit vereenvoudigt;
  • Ad Nihilum is alleen afhankelijk van libmicrohttpd. Voor het genereren van QR-codes is er een gemodificeerde versie van QRCode.js bijgevoegd;
  • er is een handleiding bijgevoegd voor het snel opzetten van een lokale service zonder externe IP;
  • Ad Nihilum werkt ook op Android, er is een bijbehorend script voor de bouw in Termux bijgevoegd;
  • ƩƩn-threadige en synchrone server.

Wijzigingen

Grote herontwerp

  • Verzend- en ontvangpagina's zijn gescheiden, de bijbehorende clientcode.
  • Over het algemeen is het ontwerp aanzienlijk veranderd en aangepast aan de wensen van de gebruikers.
  • Eenvoudige en lokale clients:
    • er is een client met een vereenvoudigd ontwerp toegevoegd https://adnihilum.net/simple;
    • clientpagina's kunnen lokaal worden opgeslagen en vanuit file:// worden gebruikt.

Browserbeleid

  • CSP is geĆÆmplementeerd om XSS te bestrijden;
  • de server stuurt HSTS.

Overige wijzigingen

  • het project is herdoopt van Epha-ots;
  • de domeinnaam adnihilum.net is aangekocht;
  • TLS wordt verzorgd door Let’s Encrypt, dit is goed om te onthouden (geen geld beschikbaar);
  • het werken met bestanden is vereenvoudigd;
  • overgang naar fat-ponters;
  • kleine bugs zijn opgelost;
  • auto-jsminify en het bouwen van clientbestanden tijdens de bouw via CMake.

Protocoloverzicht

Genereer drie willekeurige waarden: sleutel K, initialisatievector N en zout S. K — 256 bits, N — 96 bits, S — 128 bits.

Toon ID uit K en S met behulp van HKDF op basis van SHA-256.

Vorm een string van extra geauthentiseerde gegevens aad — het is gewoon een string van de vorm: id=ID

Als de gebruiker een wachtwoord heeft opgegeven:

  • geef Pk uit het wachtwoord en S met behulp van PBKDF2, SHA-256, 800000 iteraties;
  • dezelfde zout wordt voor alles gebruikt;
  • versleutel gegevens met AES-GCM, gebruikmakend van de sleutel Pk, IV/nonce N en geeft door aad.

Voeg een tweebyte-tag toe aan al versleutelde gegevens als er een wachtwoord was, of aan de oorspronkelijke gegevens als er geen wachtwoord was.

De eerste byte is belangrijk: deze geeft aan of de gegevens met een wachtwoord zijn versleuteld.

  • 0x73 - de gegevens zijn met een wachtwoord versleuteld;
  • 0x13 - de gegevens zijn niet met een wachtwoord versleuteld.

De tweede byte is een constante waarde van 0x37.

Versleutel het resultaat opnieuw met AES-GCM, gebruikmakend van dezelfde iv = N en dezelfde aad. Dit geeft de uiteindelijke ciphertext ct.

Voeg de bytes samen tot een string: blob = N .. S .. ct

Verzend blob naar de server samen met ID. De server retourneert blob over deze ID en kan deze niet vervangen: de client controleert eerst ID met behulp van N en K al vóór de decryptie, en dan - via aad.

De client slaat K. K nooit op de server verzonden. Pk ook niet verzonden; alles wat met het wachtwoord te maken heeft, wordt gewist uit het geheugen.

De client vormt een link: origin/#ID/K

Hier ID en K — strings in base64url formaat.

Wanneer de ontvanger de link opent:

  • de browser negeert alles wat begint met #; dit wordt location.hash genoemd;
  • de client-applicatie wordt van de server geladen;
  • naar mijn mening is dit de grootste kwetsbaarheid: we komen feitelijk weer terug bij het feit dat "TLS lek is";
  • maar niets weerhoudt ervan de client offline op te slaan;
  • idealiter zou er een aparte standalone client moeten zijn.

De client-side JavaScript controleert location.hash, en als daar ID en K, laadt het gegevens van de server.

Daarna controleert het deze, decrypt en, indien nodig, vraagt om het wachtwoord en decrypt nogmaals.

Licentie

Het project wordt verspreid onder GPLv3.

Bron: linux.org.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers šŸ”„ Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster