Cryptology Academy · Lektion

Noise Protocol Framework

Udforsk Noise – et framework til opbygning af skræddersyede kryptografiske handshakes, som bruges i WireGuard, WhatsApp og Lightning.

Lektion 3 af 413 trin

Noise Protocol Framework er en gratis Cryptology Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Cryptology Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Cryptology Academy-kurset indeholder 4 lektioner i alt.

Hvad er Noise Framework

Noise Protocol Framework (Trevor Perrin, 2016; nuværende revision 2018) er en ramme til opbygning af sikre kanalprotokoller ved hjælp af et lille sæt kryptografiske primitiver og et mønstersprog. I stedet for at specificere én enkelt protokol definerer Noise et ordforråd af håndtryksmønstre, der beskriver rækkefølgen af DH-operationer. Ethvert gyldigt Noise-mønster kan instantieres med konkrete DH-funktioner (Curve25519 eller Curve448), krypteringsfunktioner (AESGCM eller ChaChaPoly) og hashfunktioner (SHA-256, SHA-512, BLAKE2). Noise bruges i WireGuard, WhatsApp, Signal (som grundlag for X3DH), Lightning Network og I2P.

Roller og nøgler i Noise

Ethvert Noise-håndtryk har en initiator (I) og en responder (R). Hver part kan have to typer nøgler: statiske nøgler (langsigtede identitetsnøgler, betegnet s/S) og midlertidige nøgler (genereret på ny for hver session, betegnet e/E). Små bogstaver angiver den lokale parts nøgle, mens store bogstaver angiver den eksterne parts offentlige nøgle. Et Noise-mønster angiver, hvilke nøgler der sendes (som klartekst eller krypteret), og hvilke DH-operationer der udføres. For eksempel betyder "e" »send min midlertidige offentlige nøgle«, mens "es" betyder »udfør DH(my_ephemeral, remote_static)«. Hvert DH-resultat blandes ind i håndtrykkets løbende hash-tilstand.

Noise: symmetrisk tilstand

Kernen i Noise er SymmetricState, som vedligeholder tre værdier: ck (kædenøgle, initialiseret med en hash af et protokolnavn), h (håndtrykkets hash, den løbende hash af transskriptet) og k (den aktuelle krypteringsnøgle). MixKey(input) kører HKDF(ck, input) for at opdatere ck og k. MixHash(data) hasher data ind i h. EncryptAndHash(plaintext) krypterer med k og blander kryptogrammet ind i h. DecryptAndHash(ciphertext) dekrypterer og blander kryptogrammet ind i h. Håndtrykkets hash h binder transskriptet — enhver ændring foretaget af en angriber i en meddelelse ændrer h, så dekrypteringen mislykkes. Ved afslutningen af håndtrykket opretter Split() to separate CipherStates til afsendelse og modtagelse.

Noise_XX-mønsteret

Noise_XX er det mest anvendte mønster til gensidig autentifikation. Det giver gensidig autentifikation af statiske nøgler, hvor begge parters statiske nøgler overføres under håndtrykket. Mønster: (1) -> e (initiatoren sender sin midlertidige offentlige nøgle). (2) <- e, ee, s, es (responderen sender sin midlertidige nøgle, udfører DH(e,e) og DH(e,s_resp) og sender den krypterede statiske nøgle). (3) -> s, se (initiatoren sender den krypterede statiske nøgle og udfører DH(s_init, e_resp)). Efter trin 3 har begge parter blandet tre DH-resultater ind i sessionsnøglen: ee (fremadrettet hemmeligholdelse), es (serverautentifikation), se (klientautentifikation). Sessionsnøglen er uafhængig af enhver kompromittering af langsigtede nøgler, efter sessionen er afsluttet.

Noise_IK-mønsteret (WireGuard)

WireGuard bruger et mønster, der er afledt af Noise_IK, hvor initiatoren på forhånd kender responderens statiske nøgle. (1) -> e, es, s, ss (initiatoren sender sin midlertidige nøgle, udfører DH(e, S_resp), sender den krypterede statiske nøgle og udfører DH(s_init, S_resp)). (2) <- e, ee, se (responderen sender sin midlertidige nøgle, udfører DH(e_resp, e_init) og DH(e_resp, S_init)). IK-mønsteret skjuler initiatorens identitet (dens statiske nøgle krypteres med responderens statiske nøgle i trin 1) og afsluttes på én RTT. WireGuard tilføjer et tidsstempel i den krypterede nyttelast fra initiatoren for at forhindre genafspilning. Det giver WireGuard dets karakteristiske enkelhed: et komplet VPN-håndtryk i to UDP-pakker.

Noise-håndtrykkets hash og kanalbinding

Hashen h ved afslutningen af et Noise-håndtryk er en hash af transskriptet, der dækker alle sendte meddelelser. Den fungerer som en værdi til kanalbinding — begge parter beregner den samme h, og enhver tredjepartsprotokol, der vil bindes til Noise-sessionen, kan inkludere h som en nonce eller et kanal-id. Det muliggør sammensat autentifikation: Et TLS-lignende certifikatautentifikationstrin kan køres efter Noise-håndtrykket, så certifikatet bindes til netop denne session via h. Kanalbinding forhindrer angreb med videresendelse af legitimationsoplysninger, hvor autentifikationsoplysninger fra én session genafspilles mod en anden. Split() leverer h til applikationen sammen med sessionsnøglerne.

Udskudte Noise-mønstre og tilbagefald

Noise understøtter udskudte mønstre i situationer, hvor initiatoren ikke på forhånd kender responderens statiske nøgle. Noise_NX (initiatoren har ingen statisk nøgle, og responderen sender sin) svarer til envejs-TLS. Noise_XX håndterer situationer, hvor begge parter skal udveksle nøgler. Noise_IK kan falde tilbage til Noise_XXfallback, hvis initiatorens antagelse om responderens statiske nøgle er forkert (f.eks. efter en nøglerotation). Tilbagefaldsmønsteret gør det muligt for responderen at signalere »du brugte den forkerte nøgle; her er min nye offentlige nøgle« uden at afsløre over for eksterne observatører, at der skete et tilbagefald — og dermed bevare protokollens uigennemsigtighed.

Noise i WhatsApp og Signal

WhatsApp og Signal bruger Noise_XX til at etablere sikre kanaler mellem klienter og servere. WhatsApps binære protokol bruger Noise_XX med Curve25519, ChaChaPoly og SHA-256. Klientens statiske nøgle er dens langsigtede identitetsnøgle. Efter Noise-håndtrykket kører applikationslaget yderligere autentifikation (Signal-registrering og bekræftelse af telefonnummer). Signals X3DH (Extended Triple Diffie-Hellman) udfører fire DH-operationer for at etablere en fælles hemmelighed mellem to brugere via en asynkron meddelelsesudveksling — dette er ikke et standard-Noise-mønster, men bruger lignende principper for blanding af DH-resultater. Double Ratchet overtager derefter den løbende kryptering af meddelelser.

Noise kontra TLS

Noise og TLS 1.3 løser det samme problem (autentificeret nøgleudveksling) med forskellige tilgange. TLS 1.3 er én protokol med foreskrevne krypteringspakker, certifikatformater (X.509) og udvidelser. Den er designet til webbrowsere og servere — en protokol, der passer til næsten alle formål. Noise er en ramme: Den specificerer hverken certifikatformater, PKI eller binding til transportlaget. Det gør Noise mindre (hele Noise-implementeringen i WireGuard fylder under 400 linjer kode) og lettere at analysere formelt, men kræver, at applikationen håndterer identitetsstyring separat. Noise foretrækkes til lukkede systemer (app-til-server og VPN), hvor PKI er unødvendigt omfattende, mens TLS bruges til åbne systemer (web), hvor der er behov for certifikatinteroperabilitet.

Formel sikkerhed for Noise

Noise-mønstre er blevet formelt analyseret i eCK-modellen (den udvidede Canetti-Krawczyk-model). Kobeissi, Bhargavan og Blanchet analyserede Noise ved hjælp af Proverif og fandt beviser for autentifikation og nøglehemmeligholdelse for alle 12 grundlæggende Noise-mønstre. Beviserne forudsætter standardantagelsen om DH-problemets beregningsmæssige sværhedsgrad (Curve25519) samt sikkerheden af de underliggende AEAD- og hashfunktioner. Noise's kompositionelle opbygning (hvert DH-resultat blandes gradvist ind) gør det lettere at analysere end komplekse TLS-lignende protokoller med mange tilstandsovergange. Kryptografisk verifikation af Noise gav WireGuard og WhatsApp stor tillid til deres protokolsikkerhed før udrulningen.

Korrekt implementering af Noise

Almindelige faldgruber ved Noise-implementeringer: (1) Mønsterforvirring — hvis du bruger Noise_IK, når responderens statiske nøgle ikke er distribueret pålideligt på forhånd, fører det til en identitetsuoverensstemmelse (initiatoren kan kryptere med en forkert nøgle uden at opdage det). (2) Beskyttelse mod genafspilning — Noise tilbyder autentifikation, men ikke beskyttelse mod genafspilning af meddelelser i transportfasen; nonces (64-bit-tællere) skal håndhæves, og oversløb (efter 2^64 meddelelser) skal udløse generering af en ny nøgle. (3) Prologens integritet — Noise-prologen (en byte-streng, der blandes ind i h, før håndtrykket begynder) skal indeholde al protokol-kontekst (version og algoritmevalg) for at forhindre nedgraderingsangreb. (4) PSK-misbrug — Noise understøtter PSK-udvidelser til blanding af forhåndsdelte nøgler; PSK'er skal have høj entropi og må ikke være brugeradgangskoder.

Quiz om Noise Framework

Hvad betyder Noise-mønsternotationen "es" i et håndtryksmønster?

Opsummering af Noise Framework

Noise er en ramme til opbygning af autentificerede nøgleudvekslingsprotokoller ved hjælp af et mønstersprog med DH-operationer. SymmetricState vedligeholder kædenøglen (ck), transskripthashen (h) og krypteringsnøglen (k), som opdateres af MixKey/MixHash. Noise_XX giver gensidig autentifikation på 1,5 RTT, mens Noise_IK (WireGuard) afsluttes på 1 RTT, når responderens nøgle er kendt. Håndtrykkets hash h fungerer som kanalbinding. Noise er formelt verificeret for alle grundlæggende mønstre via Proverif. Det foretrækkes frem for TLS til protokoller i lukkede systemer (WireGuard og WhatsApp), hvor PKI er unødvendigt. En korrekt implementering kræver beskyttelse mod genafspilning, prologens integritet og PSK'er med høj entropi.

Gratis at komme i gang

Lær Cryptology Academy med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
67
Lektioner
261

Ofte stillede spørgsmål

Er lektionen “Noise Protocol Framework” gratis?

Ja — hele teksten til “Noise Protocol Framework” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Cryptology Academy-kurset, skal du opgradere til CoddyKit PRO. Cryptology Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Noise Protocol Framework”?

Udforsk Noise – et framework til opbygning af skræddersyede kryptografiske handshakes, som bruges i WireGuard, WhatsApp og Lightning. Du øver dig i Cryptology Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Cryptology Academy?

Der kræves ingen tidligere erfaring. Cryptology Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.

Hvor lang tid tager lektionen “Noise Protocol Framework”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Cryptology Academy-lektion?

Ja. Alle Cryptology Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Needham-Schroeder-protokollen og angreb
  2. Station-to-Station-protokollen (STS)
  3. Noise Protocol Framework
  4. Principper for sikkert protokoldesign
← Tilbage til Cryptology Academy