// encryptie

Cryptografie en bescherming

Reticulum gebruikt cryptografische identities als basis voor adressen, versleuteling en authenticatie. Voor de meeste gebruikers betekent dat vooral: berichten worden versleuteld voordat ze je apparaat verlaten, en tussenliggende nodes zien alleen ciphertext.

Identity keys

Een Reticulum identity is een 64-byte private keyset. De twee helften hebben verschillende rollen en worden niet door elkaar gebruikt.

Bytes Doel Algoritme
0-31Key agreement (versleuteling)X25519
32-63Signing (handtekeningen)Ed25519

Het private key bestand is een bearer credential: wie het heeft, kan als die identity handelen. Er is geen recovery server of centraal register dat het kan herstellen of intrekken. Verlies je het, dan ben je die identity kwijt.

Destination hashes zijn geen geheimen

Reticulum routeert op 16-byte destination hashes. Een hash is publiek adresmateriaal, geen wachtwoord. Voor Single destinations is de hash afgeleid van de applicatie destination naam en de public-key hash van de identity.

Praktisch betekent dat:

De 128-bit adresruimte is bewust kort gehouden. Elk packet heeft maximaal 500 bytes, en op links met weinig bandbreedte wil je daar zo min mogelijk aan adressen kwijt zijn. Voor praktisch gebruik is 128 bit ruim genoeg.

Versleutelde packets

Voor Single destinations kan de afzender een packet versleutelen zonder een netwerk round trip als het al de public key of huidige ratchet key kent uit een announce.

Stap Actie
1Genereer vers ephemeral X25519 sleutelmateriaal
2Leid een gedeeld geheim af met de destination public key of ratchet key
3Leid symmetrische encryptie- en authenticatiesleutels af met HKDF
4Versleutel de payload en authenticeer de ciphertext
5Voeg de ephemeral public key toe zodat de ontvanger hetzelfde geheim kan afleiden

Elk packet gebruikt vers ephemeral sleutelmateriaal. Als een packet de authenticatie niet haalt, wordt het gedropt voordat applicatiecode het ziet.

Links en forward secrecy

Links bieden forward secrecy via eigen ephemeral key exchange. De link initiator en destination wisselen vers sleutelmateriaal uit tijdens link establishment en leiden sessiesleutels af voor die link. Die sleutels zijn niet de long-term identity keys en worden niet hergebruikt voor latere links.

Voor grotere of stateful transfers gebruik je daarom een link. Na de setup werkt die efficient, en de initiator hoeft geen long-term identity te onthullen tenzij de applicatie daarvoor kiest.

Ratchets

Ratchets bieden forward secrecy voor link-loze Single destination packets. Wanneer een destination ratchets aan heeft staan, bevatten de announces een roterende X25519 ratchet public key, gesigneerd door de long-term identity. Afzenders die de huidige ratchet kennen versleutelen daar naartoe in plaats van naar de statische identity key. Wanneer oude ratchet private keys worden weggegooid, worden eerder onderschepte packets moeilijker te ontsleutelen, zelfs als de long-term identity later gecompromitteerd wordt.

Parameter Standaard
Gegenereerde ratchets behouden512
Minimaal rotatie-interval1800 seconden
Ontvangen ratchet vervaltijd~30 dagen

Het retentievenster bestaat omdat announces tijd nodig hebben om te propageren. Peers versleutelen mogelijk nog naar een recente ratchet totdat ze de nieuwste leren.

Cryptografische primitieven

Functie Primitief
SignaturesEd25519
Key exchangeX25519 (ECDH)
Key derivationHKDF
EncryptieAES-256-CBC met PKCS7
AuthenticatieHMAC-SHA-256
HashingSHA-256, SHA-512

De Python referentie-implementatie gebruikt PyCA/OpenSSL. Ratspeak's Rust implementatie gebruikt Rust crypto crates. De twee zijn onderling wire compatible. Zie architectuur voor hoe routing en addressing werken en LXMF voor de berichtenlaag.

LXMF stamps en tickets

Encryptie voorkomt dat tussenpartijen berichten lezen. Het voorkomt niet dat iemand ongewenste versleutelde berichten stuurt naar een publieke destination. LXMF voegt spamresistentie toe met stamps en tickets.

Mechanisme Hoe het werkt
Stamp Proof-of-work token gehecht aan een LXMF bericht. Onbekende afzenders moeten CPU-werk leveren om een stamp te produceren die voldoet aan de advertised cost van de ontvanger.
Ticket Per-afzender token waarmee een vertrouwde correspondent het stamp-werk overslaat voor toekomstige berichten.