Basis van publieke sleutel cryptografie: veilig delen
Leer de basis van publieke sleutel cryptografie en hoe het veilig delen mogelijk maakt. RSA, Diffie-Hellman uitgelegd.
Publieke-sleutelcryptografie — ook wel asymmetrische cryptografie genoemd — gebruikt twee wiskundig gekoppelde sleutels: een publieke sleutel die je vrijelijk kunt uitdelen en een privésleutel die je bewaakt. Versleutel iets met mijn publieke sleutel, en alleen mijn privésleutel kan het lezen. Dit lost het oudste probleem in de cryptografie op: hoe twee vreemden die elkaar nooit hebben ontmoet een geheim kunnen delen via een open kanaal. Uitgevonden door Diffie en Hellman in 1976 en praktisch gemaakt door RSA een jaar later, vormt het nu de basis van TLS 1.3, Signal, SSH, Ed25519-codeondertekening en elke bestandsoverdrachtsservice die gebruikers authenticeert. Zo werkt het precies.
De wiskundige valdeuren
Alle publieke-sleutelcryptografie berust op "valdeur"-functies — berekeningen die gemakkelijk voorwaarts te doen zijn maar effectief onmogelijk om te keren zonder extra informatie. Twee families domineren:
- Geheeltallige factorisatie (RSA): twee grote priemgetallen vermenigvuldigen is triviaal; hun product factoriseren is exponentieel moeilijk. Een 2048-bits RSA-sleutel gebruikt twee ~1024-bits priemgetallen. De bekende beste aanval, General Number Field Sieve, neemt ruwweg 2^112 bewerkingen — buiten bereik.
- Discrete logaritmen over elliptische curven (ECDH, ECDSA, Ed25519): puntsvermenigvuldiging op een curve berekenen is snel; omgekeerd de vermenigvuldiger vinden is moeilijk. 256-bits curves zoals Curve25519 geven equivalente beveiliging aan 3072-bits RSA.
Beide problemen zijn gemakkelijk voor kwantumcomputers via Shor's algoritme, wat de reden is waarom NIST in 2024 post-kwantumvervangingen standaardiseerde (ML-KEM en ML-DSA) in FIPS 203–205.
RSA in de praktijk
Ron Rivest, Adi Shamir en Leonard Adleman publiceerden RSA in 1977. Het schema is elegant:
- Kies twee grote priemgetallen
penq. - Bereken
n = p × q(de modulus) enφ(n) = (p-1)(q-1). - Kies
ecopriem aanφ(n), gewoonlijk 65537. - Bereken
dzodanig date × d ≡ 1 (mod φ(n)). - Publieke sleutel:
(n, e). Privésleutel:(n, d).
Versleuteling: versleutelde tekst = bericht^e mod n. Ontsleuteling: bericht = versleutelde tekst^d mod n. De wiskunde werkt vanwege de stelling van Euler.
Praktische RSA gebruikt OAEP-opvulling (RFC 8017) om gekozen-versleutelde-tekst-aanvallen te voorkomen. Leerboek RSA is catastrofaal onveilig. RSA-2048 is het huidige minimum voor nieuwe systemen; RSA-3072 of 4096 voor iets langdurig.
Diffie-Hellman: gedeelde geheimen zonder sleutels te verzenden
RSA laat je versleutelen voor een bekende ontvanger. Diffie-Hellman doet iets subtiel anders: het laat twee partijen een gedeeld geheim afleiden over een publiek kanaal, zonder dat één van beide het geheim verzendt.
De klassieke versie (DH over gehele getallen modulo een groot priemgetal):
- Beide partijen komen overeen op een groot priemgetal
pen generatorg. - Alice kiest geheim
a, stuurtA = g^a mod p. - Bob kiest geheim
b, stuurtB = g^b mod p. - Alice berekent
B^a mod p = g^(ab) mod p. - Bob berekent
A^b mod p = g^(ab) mod p.
Beide bereiken g^ab mod p zonder ooit a of b te verzenden. Een afluisteraar ziet g, p, A, B maar g^ab berekenen van A en B vereist het oplossen van het discrete logaritmeprobleem.
Modern DH gebruikt elliptische curven (ECDH). X25519 is de standaardkeuze: 32-byte sleutels, 32-byte gedeelde geheimen, implementatie gehard tegen timing-aanvallen.
Elliptische curven en waarom ze gewonnen hebben
RSA voelt oud aan omdat het dat grotendeels is. Elliptische-curvecryptografie heeft het om drie praktische redenen vervangen:
- Kleinere sleutels. Een 256-bits EC-sleutel geeft de beveiliging van een 3072-bits RSA-sleutel. Dat is 32 bytes versus 384 bytes.
- Snellere bewerkingen. ECDH op Curve25519 duurt ruwweg 70 microseconden op een moderne CPU. RSA-3072-sleutelgeneratie duurt seconden.
- Betere willekeurigheidsweerstand. Ed25519 is deterministisch — handtekeningen vereisen geen per-bericht-willekeurige nonces, waardoor de Sony PS3 ECDSA-ramp van 2010 wordt vermeden waarbij een constante nonce de hoofdsleutel lekte.
NIST-curves (P-256, P-384, P-521) zijn breed ondersteund maar historisch gewantrouwd door sommige cryptografen vanwege onverklaarde constanten. Curve25519 en Ed25519, ontworpen door Daniel Bernstein, zijn de moderne standaarden die worden gebruikt in TLS 1.3, WireGuard, Signal en SSH.
Handtekeningen: bewijzen wie wat heeft verzonden
Publieke-sleutelcryptografie doet iets wat symmetrisch niet kan: auteurschap bewijzen. Ondertekening keert de versleutelingsrollen om — je "versleutelt" (ondertekent) met je privésleutel, en iedereen met je publieke sleutel kan "ontsleutelen" (verifiëren). Als het klopt, moet je de privésleutel hebben gehad.
Echte handtekeningen gebruiken hashfuncties om berichten van willekeurige grootte te verwerken:
- Bereken
h = SHA-256(bericht). - Onderteken
hmet de privésleutel (RSA-PSS, ECDSA of Ed25519). - Verificateur hasht het ontvangen bericht, controleert dat tegen de handtekening met de publieke sleutel.
Toepassingen: TLS-certificaten (de CA ondertekent de publieke sleutel van de site), codeondertekening (Apple's notarisatie, Microsoft Authenticode), Git-commit-ondertekening, softwarepakketbeheerders (apt, Homebrew, npm).
Waar bestandsoverdracht publieke-sleutelcryptografie gebruikt
Voor anonieme op-links-gebaseerde overdrachten (SwissTransfer, HexaTransfer) verschijnt publieke-sleutelcryptografie vaak niet direct — een willekeurige symmetrische sleutel in het URL-fragment doet alles. Maar voor accountgebaseerde diensten zijn publieke sleutels van belang:
- TLS 1.3-serverauthenticatie. Elke HTTPS-verbinding begint met het certificaat van de server, geverifieerd tegen een CA-keten. Efemere ECDHE-sleuteluitwisseling leidt dan de sessiesleutel af.
- Account-tot-account-versleuteling. Tresorit, Proton Drive en Mega geven gebruikers elk een sleutelpaar bij aanmelding. Bestanden gedeeld tussen accounts zijn gewrapped met de publieke sleutel van de ontvanger.
- Ondertekende clients en updates. Desktopapps verifiëren updates met Ed25519- of RSA-handtekeningen om supply-chain-aanvallen te voorkomen.
- Wachtwoordloze authenticatie. WebAuthn en Passkeys gebruiken EC-sleutels opgeslagen in beveiligde hardware (Touch ID, Windows Hello, YubiKey).
Sleuteldistributie: het resterende harde probleem
Publieke-sleutelcryptografie lost één sleuteldistributieprobleem op maar creëert een ander: hoe weet je dat een publieke sleutel werkelijk toebehoort aan degene die het beweert? Drie modellen:
- PKI (Public Key Infrastructure). Certificeringsautoriteiten ondertekenen publieke sleutels. Gebruikt door TLS met roots in Chrome, Firefox, Safari.
- Web of trust. De aanpak van PGP — gebruikers ondertekenen elkaars sleutels. Flexibel maar schaalproblemen hielden de adoptie niche.
- TOFU (Trust On First Use). De aanpak van SSH — accepteer de sleutel de eerste keer, waarschuw als die verandert. Eenvoudig maar kwetsbaar voor initiële onderschepping.
- Sleuteltransparantie. Merkle-boomlogboeken waarbij alle publieke sleutels publiek auditeerbaar zijn. Gebruikt door WhatsApp, iMessage Contact Key Verification en moderne passkey-systemen.
Voor bestandsoverdracht met onbekende ontvangers omzeilt URL-fragmentdelen dit volledig — de verzender geeft de ontvanger de sleutel direct via de link, en authenticiteit hangt af van het kanaal dat gebruikt wordt om de link te delen.
Wat kwantumcomputing verandert
Een grootschalige kwantumcomputer die Shor's algoritme uitvoert, breekt zowel RSA als elliptische-curvecryptografie. Huidige schattingen plaatsen de tijdlijn op 10–20 jaar, maar het risico is onmiddellijk voor gegevens met een lange houdbaarheid: "harvest now, decrypt later"-aanvallen leggen vandaag versleuteld verkeer vast en ontsleutelen dat in 2040.
NIST's post-kwantumstandaarden van 2024:
- FIPS 203 (ML-KEM) — vervangt Diffie-Hellman/ECDH voor sleuteluitwisseling. Gebaseerd op roosterproblemen.
- FIPS 204 (ML-DSA) — vervangt RSA/ECDSA voor handtekeningen.
- FIPS 205 (SLH-DSA) — op hash gebaseerde handtekeningback-up.
Cloudflare en Google ondersteunen nu ML-KEM in TLS 1.3-sleuteluitwisseling. Bestandsoverdrachtsservices zullen de komende jaren volgen. Symmetrische versleuteling (AES-256-GCM) is grotendeels onaangetast — Grover's algoritme halveert slechts de effectieve sterkte.
Samengebracht
Voor gevoelige delingen vandaag: TLS 1.3 met X25519-sleuteluitwisseling beschermt de verbinding, AES-256-GCM verwerkt bulkversleuteling en voor accountgebaseerde diensten wikkelt ECDH met Curve25519 per-bestandssleutels. Op links gebaseerde diensten slaan de accountlaag over maar winnen eenvoud. Beide modellen leveren sterke beveiliging wanneer correct geïmplementeerd.
Probeer het op hexatransfer.com — gratis, zonder account, tot 10 GB.
Verstuur grote bestanden veilig met end-to-end-versleuteling
Draag bestanden tot 10 GB gratis over met end-to-end-versleuteling. Geen account nodig. Uw bestanden worden in uw browser versleuteld voordat ze worden geüpload — niemand anders kan ze lezen.
Een bestand verzenden