Cryptology Academy · leksjon

Noise-protokollrammeverket

Utforsk Noise – et rammeverk for å bygge skreddersydde kryptografiske håndtrykk, brukt i WireGuard, WhatsApp og Lightning.

Leksjon 3 av 413 trinn

Noise-protokollrammeverket er en gratis leksjon i Cryptology Academy på CoddyKit. Dette er leksjon 3 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Cryptology Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Cryptology Academy inneholder totalt 4 leksjoner.

Hva er Noise Framework

Noise Protocol Framework (Trevor Perrin, 2016; gjeldende revisjon 2018) er et rammeverk for å bygge sikre kanalprotokoller ved hjelp av et lite sett primitiver og et mønsterspråk. I stedet for å spesifisere én enkelt protokoll definerer Noise et vokabular av håndtrykksmønstre som beskriver sekvensen av DH-operasjoner og rekkefølgen deres. Alle gyldige Noise-mønstre kan instansieres med konkrete DH-funksjoner (Curve25519 eller Curve448), krypteringsfunksjoner (AESGCM eller ChaChaPoly) og hashfunksjoner (SHA-256, SHA-512, BLAKE2). Noise brukes i WireGuard, WhatsApp, Signal (som grunnlag for X3DH), Lightning Network og I2P.

Roller og nøkler i Noise

Alle Noise-håndtrykk har en initiator (I) og en svarer (R). Hver part kan ha to typer nøkler: statiske (langsiktige identitetsnøkler, angitt som s/S) og efemere (generert på nytt for hver sesjon, angitt som e/E). Små bokstaver angir den lokale partens nøkkel, mens store bokstaver angir motpartens offentlige nøkkel. Et Noise-mønster angir hvilke nøkler som sendes (i klartekst eller kryptert), og hvilke DH-operasjoner som utføres. «e» betyr for eksempel «send min efemere offentlige nøkkel»; «es» betyr «utfør DH(my_ephemeral, remote_static)». Hvert DH-resultat blandes inn i håndtrykkets løpende hash-tilstand.

SymmetricState i Noise

Kjernen i Noise er SymmetricState, som vedlikeholder tre verdier: ck (kjedenøkkel, initialisert med en hash av protokollnavnet), h (håndtrykks-hashen, den løpende transkripthashen) og k (gjeldende krypteringsnøkkel). MixKey(input) kjører HKDF(ck, input) for å oppdatere ck og k. MixHash(data) hasher data inn i h. EncryptAndHash(plaintext) krypterer med k og blander chifferteksten inn i h. DecryptAndHash(ciphertext) dekrypterer og blander chifferteksten inn i h. Håndtrykks-hashen h binder transkriptet — enhver ondsinnet endring av en melding endrer h, slik at dekrypteringen mislykkes. På slutten av håndtrykket produserer Split() to separate CipherStates for sending og mottak.

Noise_XX-mønsteret

Noise_XX er det mest brukte mønsteret for gjensidig autentisering. Det gir gjensidig autentisering av statiske nøkler, der begge parters statiske nøkler overføres under håndtrykket. Mønster: (1) -> e (initiator sender sin efemere offentlige nøkkel). (2) <- e, ee, s, es (svareren sender sin efemere offentlige nøkkel, utfører DH(e,e) og DH(e,s_resp), og sender en kryptert statisk nøkkel). (3) -> s, se (initiator sender en kryptert statisk nøkkel og utfører DH(s_init, e_resp)). Etter trinn 3 har begge parter blandet tre DH-resultater inn i sesjonsnøkkelen: ee (fremoverhemmelighold), es (serverautentisering) og se (klientautentisering). Sesjonsnøkkelen er uavhengig av kompromittering av en langsiktig nøkkel etter at sesjonen er avsluttet.

Noise_IK-mønsteret (WireGuard)

WireGuard bruker et mønster avledet fra Noise_IK, der initiator kjenner svarerens statiske nøkkel på forhånd. (1) -> e, es, s, ss (initiator sender sin efemere offentlige nøkkel, utfører DH(e, S_resp), sender en kryptert statisk nøkkel og utfører DH(s_init, S_resp)). (2) <- e, ee, se (svareren sender sin efemere offentlige nøkkel og utfører DH(e_resp, e_init) og DH(e_resp, S_init)). IK-mønsteret gir skjuling av initiatorens identitet (den statiske nøkkelen krypteres med svarerens statiske nøkkel i trinn 1) og fullføres på én RTT. WireGuard legger til et tidsstempel i initiatorens krypterte nyttelast for å hindre replay. Dette gir WireGuard den karakteristiske enkelheten: et komplett VPN-håndtrykk i to UDP-pakker.

Noise-håndtrykks-hash og kanalbinding

Håndtrykks-hashen h på slutten av et Noise-håndtrykk er en transkripthash som omfatter alle meldinger som er sendt. Den fungerer som en kanalbindingsverdi — begge parter beregner samme h, og enhver tredjepartsprotokoll som vil binde seg til Noise-sesjonen, kan inkludere h som en nonce eller kanal-ID. Dette muliggjør sammensatt autentisering: Et TLS-lignende sertifikatautentiseringstrinn kan kjøres etter Noise-håndtrykket, slik at sertifikatet bindes til denne bestemte sesjonen via h. Kanalbinding forhindrer angrep der autentiseringsopplysninger fra én sesjon spilles av mot en annen. Split() gir h til applikasjonen sammen med sesjonsnøklene.

Utsatte Noise-mønstre og tilbakefall

Noise støtter mønstre med utsatt autentisering for situasjoner der initiator ikke kjenner svarerens statiske nøkkel på forhånd. Noise_NX (initiator har ingen statisk nøkkel; svareren overfører sin) tilsvarer TLS med ensidig autentisering. Noise_XX håndterer tilfeller der begge må utveksle nøkler. Noise_IK kan falle tilbake til Noise_XXfallback hvis initiatorens antakelse om svarerens statiske nøkkel er feil (for eksempel etter en nøkkelrotasjon). Tilbakefallsmønsteret gjør det mulig for svareren å signalisere «du brukte feil nøkkel; her er min nye offentlige nøkkel» uten at eksterne observatører kan se at tilbakefall skjedde — og bevarer dermed protokollens ugjennomsiktighet.

Noise i WhatsApp og Signal

WhatsApp og Signal bruker Noise_XX til å etablere sikre kanaler mellom klienter og servere. WhatsApps binærprotokoll bruker Noise_XX med Curve25519, ChaChaPoly og SHA-256. Klientens statiske nøkkel er dens langsiktige identitetsnøkkel. Etter Noise-håndtrykket utfører applikasjonslaget ytterligere autentisering (Signal-registrering, verifisering av telefonnummer). Signals X3DH (Extended Triple Diffie-Hellman) utfører nøkkelavtale med fire DH-operasjoner for å etablere en delt hemmelighet mellom to brukere via en asynkron meldingsutveksling — dette er ikke et standard Noise-mønster, men bruker lignende konsepter for DH-blanding. Deretter overtar Double Ratchet for løpende meldingskryptering.

Noise sammenlignet med TLS

Noise og TLS 1.3 løser det samme problemet (autentisert nøkkelutveksling), men med ulik filosofi. TLS 1.3 er en enkeltstående protokoll med angitte chiffersuiter, sertifikatformater (X.509) og utvidelser. Den er utviklet for nettlesere og servere — en protokoll som passer de fleste. Noise er et rammeverk: Det spesifiserer ingen sertifikatformater, ingen PKI og ingen transportbinding. Dette gjør Noise mindre (WireGuards samlede Noise-implementering er på under 400 kodelinjer) og enklere å analysere formelt, men krever at applikasjonen håndterer identitetsstyring separat. Noise foretrekkes for lukkede systemer (app-til-server, VPN) der PKI er unødvendig, mens TLS foretrekkes for åpne systemer (nettet) der sertifikatinteroperabilitet er nødvendig.

Formell sikkerhet i Noise

Noise-mønstre er analysert formelt i sikkerhetsmodellen eCK (extended Canetti-Krawczyk). Kobeissi, Bhargavan og Blanchet analyserte Noise ved hjelp av Proverif og fant bevis for autentisering og nøkkelkonfidensialitet for alle 12 grunnleggende Noise-mønstre. Bevisene forutsetter standardantakelsen om at DH er vanskelig å bryte (Curve25519), samt sikkerheten til de underliggende AEAD- og hashfunksjonene. Den kompositoriske oppbygningen av Noise (hver DH blandes inn trinnvis) gjør det enklere å analysere enn komplekse TLS-lignende protokoller med mange tilstandsoverganger. Kryptografisk verifikasjon av Noise ga WireGuard og WhatsApp høy tillit til protokollsikkerheten før utrulling.

Korrekt implementering av Noise

Vanlige fallgruver ved Noise-implementering: (1) Forveksling av mønstre — bruk av Noise_IK når svarerens statiske nøkkel ikke er pålitelig forhåndsdistribuert, fører til identitetsavvik (initiator kan i stillhet kryptere til feil nøkkel). (2) Replay-beskyttelse — Noise tilbyr autentisering, men ikke replay-beskyttelse for meldinger i Transport-fasen; noncer (64-bits tellere) må håndheves, og teller-overløp (etter 2^64 meldinger) må utløse ny nøkkelgenerering. (3) Prologintegritet — Noise-prologen (en byte-streng som blandes inn i h før håndtrykket starter) må inneholde all protokollkontekst (versjon, algoritmevalg) for å hindre nedgraderingsangrep. (4) Feil bruk av PSK — Noise støtter PSK-utvidelser for blanding av forhåndsdelte nøkler; PSK-er må ha høy entropi og må ikke være brukerpassord.

Quiz om Noise Framework

Hva betyr Noise-mønsternotasjonen «es» i et håndtrykksmønster?

Oppsummering av Noise Framework

Noise er et rammeverk for å bygge protokoller for autentisert nøkkelutveksling ved hjelp av et mønsterspråk for DH-operasjoner. SymmetricState vedlikeholder kjedenøkkelen (ck), transkripthashen (h) og chiffernøkkelen (k), som oppdateres av MixKey/MixHash. Noise_XX gir gjensidig autentisering på 1,5 RTT; Noise_IK (WireGuard) fullføres på 1 RTT med kjent svarernøkkel. Håndtrykks-hashen h fungerer som kanalbinding. Noise er formelt verifisert for alle kjernemønstre ved hjelp av Proverif. Det foretrekkes fremfor TLS for protokoller i lukkede systemer (WireGuard, WhatsApp) der PKI er unødvendig. Korrekt implementering krever replay-beskyttelse, prologintegritet og PSK-er med høy entropi.

Gratis å komme i gang

Lær deg Cryptology Academy med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
67
Leksjoner
261

Ofte stilte spørsmål

Er leksjonen «Noise-protokollrammeverket» gratis?

Ja – hele teksten i «Noise-protokollrammeverket» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Cryptology Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Cryptology Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Noise-protokollrammeverket»?

Utforsk Noise – et rammeverk for å bygge skreddersydde kryptografiske håndtrykk, brukt i WireGuard, WhatsApp og Lightning. Du øver på Cryptology Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Cryptology Academy?

Ingen tidligere erfaring er nødvendig. Cryptology Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.

Hvor lang tid tar leksjonen «Noise-protokollrammeverket»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Cryptology Academy-leksjonen?

Ja. Alle Cryptology Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Needham-Schroeder-protokollen og angrep
  2. Station-to-Station-protokollen (STS)
  3. Noise-protokollrammeverket
  4. Prinsipper for sikker protokolldesign
← Tilbake til Cryptology Academy