Een protocoldocument is een contract tussen implementaties, en aandachtig lezen vertelt je wat twee conforme peers uitwisselen en welke eigenschappen de ontwerpers wilden garanderen. Het vertelt je niet welk binair bestand er op de server draait waarmee je verbindt, hoe die server is geconfigureerd of wat er daarna met je accountrecord gebeurt. Dat zijn drie verschillende soorten bewijs, en de specificatie als alle drie behandelen is de manier waarop een protocolnaam begint werk te doen dat hij niet kan doen. De drie gescheiden houden is de hele oefening.

Het document is het begin van een argument, niet de conclusie ervan.

Wat het document werkelijk specificeert

Voor WireGuard definieert de protocolbeschrijving een Noise IK-handshake, een vaste set primitieven, berichtlay-outs en de transportframing die daarna pakketten draagt. Voor IKEv2 is het vergelijkbare artefact RFC 7296, dat uitwisselingen, payloads en de onderhandeling over voorstellen specificeert. In beide gevallen is de reikwijdte precies: de berichten, de toestandsmachine en de aannames waaronder de beveiligingsdoelen gelden.

Optionele modi bemoeilijken het lezen. Een eigenschap die voor één handshake geldt, geldt mogelijk niet voor een uitrol met een andere authenticatieopzet of een terugvalconfiguratie.

Waar de garanties ophouden

Een formele analyse beantwoordt een vraag over een model. Het verificatiewerk van WireGuard gebruikt een symbolisch model in de Tamarin-bewijzer, dat kan aantonen dat het ontwerp bepaalde aanvallen weerstaat onder zijn aannames; het toont niet aan dat een uitgeleverde implementatie in de gebruikersruimte geen geheugenveiligheidsfout heeft. Juist in die kloof tussen model en machine leven echte incidenten. Een bewijs als implementatiecertificaat lezen is een categoriefout.

Forward secrecy illustreert dezelfde grens. De eigenschap hangt ervan af dat sleutels worden vernietigd zoals het protocol bedoelt, en dat is een eigenschap van de implementatie en haar omgeving, niet van het berichtformaat. Een ontwerp dat wissen voorschrijft, kan dat niet afdwingen op een platform dat geheugen naar schijf wegschrijft.

Gelaagde afhankelijkheden verbreden de kloof verder: de TLS-bibliotheek achter een op TLS gebaseerde tunnel, de kernelinterface die een tunnel in de gebruikersruimte gebruikt, en de toevalsgenerator staan allemaal buiten de protocoltekst.

Volg de bytes tot in de build

Ga van document naar artefacten door versies te identificeren en ze vervolgens te vergelijken met wat werkelijk verkeer bedient. Een product dat een protocol noemt, kan voorzienings-, telemetrie- en beheercomponenten toevoegen die de specificatie nooit beschrijft.

openvpn --version | head -3
wg --version
dpkg -l | grep -E 'openvpn|wireguard|libssl'
ss -lunp | grep -E '1194|51820'
sha256sum ./wireguard-tools_1.0.20210914_amd64.deb

Reproduceerbare builds en gepubliceerde controlesommen maken het mogelijk een bronboom aan een gedistribueerd binair bestand te koppelen. Zonder die koppeling bewijst gepubliceerde bron alleen dat inspectie mogelijk is, niet dat het draaiende bestand ermee overeenkomt.

Configuratie hoort bij dezelfde stap. Ciphersuites, toegestane peers en routinginstellingen zijn uitrolkeuzes, en een conforme build die slordig is geconfigureerd levert nog steeds een zwakke tunnel op.

Houd operationele praktijken gescheiden

Accountrecords, betalingsgegevens en supportverzoeken zijn operatorbeslissingen die geen protocoltekst beperkt. Een auditrapport dekt genoemde componenten binnen een verklaarde reikwijdte, en een privacybeleid beschrijft bedoelingen en praktijken; geen van beide vervangt de ander, en geen van beide is een cryptografische uitspraak.

De precieze conclusie is cumulatief: de specificatie verklaart het ontwerp, de build en configuratie verklaren de tunnel, en de gedocumenteerde praktijken van de operator verklaren alles wat de tunnel nooit ziet. Zeg wat je daarvan hebt geverifieerd, en de bewering blijft waar.

Gerelateerde artikelen