// encryptie
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.
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-31 | Key agreement (versleuteling) | X25519 |
| 32-63 | Signing (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.
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.
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 |
|---|---|
| 1 | Genereer vers ephemeral X25519 sleutelmateriaal |
| 2 | Leid een gedeeld geheim af met de destination public key of ratchet key |
| 3 | Leid symmetrische encryptie- en authenticatiesleutels af met HKDF |
| 4 | Versleutel de payload en authenticeer de ciphertext |
| 5 | Voeg 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 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 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 behouden | 512 |
| Minimaal rotatie-interval | 1800 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.
| Functie | Primitief |
|---|---|
| Signatures | Ed25519 |
| Key exchange | X25519 (ECDH) |
| Key derivation | HKDF |
| Encryptie | AES-256-CBC met PKCS7 |
| Authenticatie | HMAC-SHA-256 |
| Hashing | SHA-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.
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. |