Door cdwijs: Hoi iedereen,
Ik heb op youtube een uitleg gekeken van het "Diffie-Hellman Key Exchange" protocol om samen tot een geheim nummer te komen, zonder dat deze onversleuteld verstuurd wordt:
https://www.youtube.com/watch?v=3QnD2c4Xovk
Leuke video, grappig dat ze dit met kleuren laten zien!
Voor allen die wat meer over cryptografie willen weten: kijk eens naar CrypTool (gratis), versie 2 is recentelijk uitgekomen (zie
https://www.cryptool.org/en/cryptool2-en). Als je in "Startcenter" onder "Templates" naar "Diffie-Hellman" zoekt en dubbel-klikt op het eerste resultaat, krijg je een interactieve omgeving waarin je met de waarden van o.a. P en Q kunt spelen.
De truc is dat beide kanten ieder apart een random nummer nemen, en dan 3 tot de macht dat nummer doen, dan modulo 17, en die uitkomst naar de ontvanger sturen. Dan kan de ontvanger zijn eigen random nummer tot de macht van het ontvangen doen. Die uitkomst is aan beide zijden gelijk, terwijl een aanvaller niet tot dat antwoord kan komen. Als dit met enorme priemgetallen wordt gedaan ipv 3 en 17, dan is het lastig om dit te brute-forcen.
Ik wil dit trucje echter uitvoeren met een microcontroller, en dan zijn grote getallen lastig. Bovenstaande truc levert ongeveer 4 bits aan sleutel op. Ik vraag me af of het even veilig is om een enorme sleutel te berekenen van bijvoorbeeld 256 bits, of 64 kleine sleutels van 4 bits. Ik denk dat die kleine sleutels zijn een stuk makkelijker te berekenen zijn dan een enorme sleutel.
Met vriendelijke groet,
Cedric
Een "enorme" DH sleutel van 256 bits is veel te klein (zie bijv.
https://bugzilla.mozilla.org/show_bug.cgi?id=583337#c6 uit 2010).
Tenzij het om een hobbyprojectje gaat met gegevens die gerust op straat mogen belanden: ga niet zelf prutsen met crytografie (bijv. door 64 kleine sleutels i.p.v. 1 grote te gebruiken) maar gebruik een goed geteste library.
Je kunt naar Elliptic Curve DHE kijken, dan kunnen de sleutels aanzienlijk kleiner zijn. De laatste tijd is er behoorlijk wat aandacht voor "curve25519", ontworpen door D.J. Bernstein, zie
http://cr.yp.to/ecdh.html. Voor een voorbeeld van het gebruik van curve25519 zie
https://github.com/kaepora/miniLock. Nb. ik ben geen cryptograaf (kan je inhoudelijk niet helpen met dit soort algoritmes) maar probeer de ontwikkelingen wel te volgen.
Hou er ook rekening mee dat een Diffie-Hellman key agreement niet voor authenticatie zorgt waardoor man-in-the-middle aanvallen mogelijk zijn zonder dat je dit merkt.
De vraag is wat je precies probeert te bereiken; het is niet gebruikelijk om een publiek toegankelijke webserver te bouwen met een microcontroller. Als jouw doel is om een soort tunnel met "forward secrecy" tussen 2 systemen op te zetten die je beide beheert, zijn ook andere oplossingen denkbaar.