Noise-protokollakehys
Tutustukaa Noiseen — kehykseen, jolla rakennetaan räätälöityjä kryptografisia kättelyjä ja jota käytetään WireGuardissa, WhatsAppissa ja Lightningissa.
Noise-protokollakehys on ilmainen Cryptology Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Cryptology Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Cryptology Academy-kurssilla on yhteensä 4 oppituntia.
Mikä Noise Framework on
Noise Protocol Framework (Trevor Perrin, 2016; nykyinen versio 2018) on kehys suojattujen kanavaprotokollien rakentamiseen pienen primitiivijoukon ja mallikielen avulla. Sen sijaan että Noise määrittelisi yhden protokollan, se määrittelee kättelymallien sanaston, joka kuvaa DH-operaatioiden sarjan ja järjestyksen. Jokainen kelvollinen Noise-malli voidaan toteuttaa käyttämällä tiettyjä DH-funktioita (Curve25519 tai Curve448), salausmenetelmää (AESGCM tai ChaChaPoly) ja hajautusfunktiota (SHA-256, SHA-512 tai BLAKE2). Noisea käytetään WireGuardissa, WhatsAppissa, Signalissa (X3DH:n perustana), Lightning Networkissa ja I2P:ssä.
Noisen roolit ja avaimet
Jokaisella Noise-kättelyllä on aloittaja (I) ja vastaaja (R). Kummallakin osapuolella voi olla kahdenlaisia avaimia: staattinen (pitkäaikainen identiteettiavain, merkitään s/S) ja ephemeraali (luodaan uutena jokaista istuntoa varten, merkitään e/E). Pienet kirjaimet tarkoittavat paikallisen osapuolen avainta; isot kirjaimet etäosapuolen julkista avainta. Noise-malli määrittelee, mitkä avaimet lähetetään (selväkielisinä tai salattuina) ja mitkä DH-operaatiot suoritetaan. Esimerkiksi "e" tarkoittaa "lähetä ephemeraali julkinen avaimeni"; "es" tarkoittaa "suorita DH(my_ephemeral, remote_static)". Jokainen DH-tulos sekoitetaan kättelyn juoksevaan hajautustilaan.
Noisen SymmetricState
Noisen ydin on SymmetricState, joka ylläpitää kolmea arvoa: ck (ketjutusavain, alustetaan protokollan nimen hajautusarvolla), h (kättelyhajautusarvo, transkriptin juokseva hajautusarvo) ja k (nykyinen salausavain). MixKey(input) suorittaa HKDF(ck, input)-operaation päivittääkseen ck:n ja k:n. MixHash(data) hajauttaa datan h:hon. EncryptAndHash(plaintext) salaa plaintextin k:lla ja sekoittaa salakirjoitetun tekstin h:hon. DecryptAndHash(ciphertext) purkaa salauksen ja sekoittaa ciphertextin h:hon. Kättelyhajautusarvo h sitoo transkriptin — hyökkääjän tekemä minkä tahansa viestin muutos muuttaa h:ta ja aiheuttaa salauksen purkamisen epäonnistumisen. Kättelyn lopussa Split() tuottaa kaksi erillistä CipherStates-tilaa lähettämistä ja vastaanottamista varten.
Noise_XX-malli
Noise_XX on yleisimmin käytetty molemminpuolisen todennuksen malli. Se tarjoaa molemminpuolisen staattisten avainten avulla tapahtuvan todennuksen, jossa molempien osapuolten staattiset avaimet välitetään kättelyn aikana. Malli: (1) -> e (aloittaja lähettää ephemeraali julkisen avaimen). (2) <- e, ee, s, es (vastaaja lähettää ephemeraaliavaimen, suorittaa DH(e,e)- ja DH(e,s_resp)-operaatiot sekä lähettää salatun staattisen avaimen). (3) -> s, se (aloittaja lähettää salatun staattisen avaimen ja suorittaa DH(s_init, e_resp)-operaation). Vaiheen 3 jälkeen molemmat osapuolet ovat sekoittaneet kolme DH-tulosta istuntoavaimeen: ee (eteenpäin suuntautuva salaus), es (palvelimen todennus), se (asiakkaan todennus). Istuntoavain ei riipu pitkäaikaisen avaimen myöhemmästä vaarantumisesta istunnon päätyttyä.
Noise_IK-malli (WireGuard)
WireGuard käyttää Noise_IK:sta johdettua mallia, jossa aloittaja tuntee vastaajan staattisen avaimen etukäteen. (1) -> e, es, s, ss (aloittaja lähettää ephemeraaliavaimen, suorittaa DH(e, S_resp)-operaation, lähettää salatun staattisen avaimen ja suorittaa DH(s_init, S_resp)-operaation). (2) <- e, ee, se (vastaaja lähettää ephemeraaliavaimen ja suorittaa DH(e_resp, e_init)- sekä DH(e_resp, S_init)-operaatiot). IK-malli tarjoaa aloittajan identiteetin piilotuksen (sen staattinen avain salataan vastaajan staattisella avaimella vaiheessa 1) ja valmistuu yhden RTT:n aikana. WireGuard lisää salattuun aloittajan hyötykuormaan aikaleiman estääkseen toistohyökkäykset. Tämän ansiosta WireGuard on luonteeltaan yksinkertainen: kokonainen VPN-kättely kahdessa UDP-paketissa.
Noisen kättelyhajautusarvo ja kanavasidonta
Noisen kättelyn lopussa oleva h on kaikkien lähetettyjen viestien kattava transkriptihajautusarvo. Se toimii kanavasidonta-arvona: molemmat osapuolet laskevat saman h:n, ja mikä tahansa ulkopuolinen protokolla, joka haluaa sitoa itsensä Noise-istuntoon, voi sisällyttää h:n nonce-arvoksi tai kanavatunnukseksi. Tämä mahdollistaa yhdistelmätodennuksen: TLS-tyylinen varmennetodennusvaihe voidaan suorittaa Noisen kättelyn jälkeen sitomalla varmenne tähän tiettyyn istuntoon h:n avulla. Kanavasidonta estää tunnistetietojen välityshyökkäykset, joissa yhden istunnon todennustunnistetietoja toistetaan toista istuntoa vastaan. Split() tarjoaa h:n sovellukselle istuntoavainten ohessa.
Noisen viivästetyt mallit ja fallback
Noise tukee viivästettyjä malleja tilanteisiin, joissa aloittaja ei tunne vastaajan staattista avainta etukäteen. Noise_NX (aloittajalla ei ole staattista avainta; vastaaja lähettää omansa) vastaa yksisuuntaista TLS:ää. Noise_XX käsittelee tilanteen, jossa molempien osapuolten on vaihdettava avaimet. Noise_IK voi siirtyä Noise_XXfallback-malliin, jos aloittajan arvaus vastaajan staattisesta avaimesta on väärä (esimerkiksi avaimen kierron jälkeen). Fallback-malli sallii vastaajan ilmoittaa "käytit väärää avainta; tässä on uusi julkinen avaimeni" ilman, että ulkopuoliset tarkkailijat havaitsevat varamenettelyn tapahtuneen — näin protokolla pysyy ulkopuolisille läpinäkymättömänä.
Noise WhatsAppissa ja Signalissa
WhatsApp ja Signal käyttävät Noise_XX-mallia suojattujen kanavien muodostamiseen asiakkaiden ja palvelinten välille. WhatsAppin binääriprotokolla käyttää Noise_XX-mallia, Curve25519:ää, ChaChaPolyta ja SHA-256:ta. Asiakkaan staattinen avain on sen pitkäaikainen identiteettiavain. Noise-kättelyn jälkeen sovelluskerros suorittaa lisätodennuksen (Signal-rekisteröinti, puhelinnumeron vahvistus). Signalissa käytettävä X3DH (Extended Triple Diffie-Hellman) -avaintenvaihto suorittaa neljä DH-operaatiota yhteisen salaisuuden muodostamiseksi kahden käyttäjän välille asynkronisen viestinvaihdon avulla — kyseessä ei ole tavallinen Noise-malli, mutta siinä käytetään samankaltaisia DH:n sekoituskäsitteitä. Double Ratchet ottaa sen jälkeen vastuun jatkuvasta viestien salauksesta.
Noise ja TLS
Noise ja TLS 1.3 ratkaisevat saman ongelman (todennettu avaintenvaihto) eri lähtökohdista. TLS 1.3 on yksi protokolla, jossa salauspaketit, varmennemuodot (X.509) ja laajennukset on määritelty ennalta. Se on suunniteltu selaimille ja palvelimille — kyseessä on useimpiin tilanteisiin sopiva yleisratkaisu. Noise on kehys: se ei määrittele varmennemuotoa, PKI:tä eikä siirtoprotokollasidontaa. Tämän vuoksi Noise on pienempi (WireGuardin koko Noise-toteutus on alle 400 koodiriviä) ja sen muodollinen analysointi on helpompaa, mutta sovelluksen on käsiteltävä identiteettien hallinta erikseen. Noisea suositaan suljetuissa järjestelmissä (sovelluksen ja palvelimen välinen yhteys, VPN), joissa PKI olisi ylimitoitettu; TLS:ää käytetään avoimissa järjestelmissä (verkko), joissa varmenteiden yhteentoimivuutta tarvitaan.
Noisen formaali turvallisuus
Noise-malleja on analysoitu formaalisesti eCK-mallissa (extended Canetti-Krawczyk). Kobeissi, Bhargavan ja Blanchet analysoivat Noisea Proverifillä ja löysivät kaikille 12 perustavanlaatuiselle Noise-mallille todisteet todennuksesta ja avainten luottamuksellisuudesta. Todisteet perustuvat tavalliseen DH-vaikeusolettamaan (Curve25519) sekä taustalla olevien AEAD- ja hajautusfunktioiden turvallisuuteen. Noisen koostettava rakenne, jossa jokainen DH sekoitetaan vaiheittain, helpottaa päättelyä verrattuna monimutkaisiin TLS-tyyppisiin protokolliin, joissa on paljon tilasiirtymiä. Noisen kryptografinen verifiointi antoi WireGuardille ja WhatsAppille vahvan varmuuden protokolliensa turvallisuudesta ennen käyttöönottoa.
Noisen oikea toteutus
Yleisiä Noisen toteutusvirheitä: (1) Mallin valinta — Noise_IK:n käyttäminen silloin, kun vastaajan staattista avainta ei ole jaettu etukäteen luotettavasti, johtaa identiteetin yhteensopimattomuuteen (aloittaja saattaa tietämättään salata tiedot väärällä avaimella). (2) Toistosuojaus — Noise tarjoaa todennuksen, mutta ei suojaa Transport-vaiheen viestien toistolta; nonce-arvoina on käytettävä 64-bittistä laskuria, ja laskurin ylivuodon (2^64 viestin jälkeen) on käynnistettävä avainten uudelleenvaihto. (3) Prologin eheys — Noise-prologin (tavujono, joka sekoitetaan h:hon ennen kättelyn alkua) on sisällettävä kaikki protokollan konteksti (versio, algoritmivalinnat), jotta alennushyökkäykset voidaan estää. (4) PSK:n väärinkäyttö — Noise tukee PSK-laajennuksia esijaetun avaimen sekoittamiseen; PSK-arvojen entropian on oltava suuri, eivätkä ne saa olla käyttäjien salasanoja.
Noise Framework -tietovisa
Mitä Noise-kättelymallin merkintä "es" tarkoittaa?
Noise Frameworkin kertaus
Noise on kehys todennettujen avaintenvaihtoprotokollien rakentamiseen käyttäen DH-operaatioihin perustuvaa mallikieltä. SymmetricState ylläpitää ketjutusavainta (ck), transkriptihajautusarvoa (h) ja salausavainta (k), joita MixKey/MixHash päivittävät. Noise_XX tarjoaa molemminpuolisen todennuksen 1,5 RTT:llä; Noise_IK (WireGuard) valmistuu 1 RTT:llä, kun vastaajan avain tunnetaan etukäteen. Kättelyhajautusarvo h toimii kanavasidontana. Kaikki keskeiset Noise-mallit on varmennettu formaalisesti Proverifillä. Noisea suositaan suljetuissa järjestelmäprotokollissa (WireGuard, WhatsApp), joissa PKI:tä ei tarvita. Oikea toteutus edellyttää toistosuojausta, prologin eheyttä ja suuren entropian PSK-arvoja.
Opi Cryptology Academy tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 67
- Oppitunnit
- 261
Usein kysytyt kysymykset
Onko oppitunti ”Noise-protokollakehys” ilmainen?
Kyllä – oppitunnin ”Noise-protokollakehys” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Cryptology Academy-kurssin, päivitä CoddyKit PROhon. Cryptology Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Noise-protokollakehys”?
Tutustukaa Noiseen — kehykseen, jolla rakennetaan räätälöityjä kryptografisia kättelyjä ja jota käytetään WireGuardissa, WhatsAppissa ja Lightningissa. Harjoittelet Cryptology Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Cryptology Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Cryptology Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.
Kuinka kauan ”Noise-protokollakehys”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Cryptology Academy-oppitunnilla?
Kyllä. Jokainen Cryptology Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Needham–Schroeder-protokolla ja hyökkäykset
- Station-to-Station-protokolla (STS)
- Noise-protokollakehys
- Turvallisen protokollasuunnittelun periaatteet