• salasanaton
  • kertaluonteinen salasana
  • otp
  • aika-pohjainen otp
  • hash-pohjainen otp

Kuinka kertaluonteinen salasana (OTP) toimii?

Tässä artikkelissa esittelemme kaksi erilaista kertaluonteista salasanamenetelmää: sähköposti/puhelin + vahvistuskoodi ja dynaaminen koodi.

Darcy Ye
Darcy Ye
Developer

Kun internet on kehittynyt, olemme käyttäneet monenlaisia verkkopalveluita täyttämään lähes kaikki tarpeemme. Ensimmäinen askel näiden palveluiden käyttämisessä on usein rekisteröinti ja kirjautuminen. Rekisteröinnin ja sisäänkirjautumisen yhteydessä käyttäjä-ID- ja salasana-todennus on yhä laajasti käytössä, vaikka yli kolme vuosikymmentä on kulunut ajoista, jolloin käytimme erillisiä pöytätietokoneita, jotka eivät voineet yhdistää internetiin.

Aikaisemmin meidän täytyi ehkä vain muistaa sähköpostitilin salasana, mutta nyt käytämme usein kymmeniä tai jopa satoja verkkopalveluita, emmekä voi käyttää samaa salasanaa kaikissa niissä (jos yhden tilin salasana vaarantuu, kaikki samat salasanaa käyttävät tilit ovat vaarassa). Tämän vuoksi salasanaton sisäänkirjautuminen on yhä suositumpaa ja on vähitellen tulossa valtavirran lähestymistavaksi.

Salasanaless-todennukseen on monia erilaisia menetelmiä, mukaan lukien mutta ei rajoittuen sosiaaliseen sisäänkirjautumiseen, sähköpostiin/puhelimeen + vahvistuskoodiin ja dynaamisiin salasanoihin käyttäen todennussovelluksia. Jälkimmäiset kaksi menetelmää voidaan luokitella kertaluonteisiksi salasanoiksi (OTP:ksi).

Mikä on kertaluonteinen salasana (OTP)?

OTP on automaattisesti luotu merkkijono, joka on voimassa vain yhden kirjautumiskerran ajan tai lyhyen ajan. Koska OTP:tä voidaan käyttää vain kerran, se voi estää todistustietojen vuotamisen riskiä, kuten kadonneen tai varastetun salasanan.

Teoriassa OTP voi olla satunnainen merkkijono tietyn pituisista merkeistä, mukaan lukien isot ja pienet kirjaimet, ja jopa erikoismerkit. Mutta käyttäjäkokemuksen vuoksi useimmat palvelut käyttävät puhtaita numeroita käyttäessään OTP:itä.

Sähköposti / puhelin + vahvistuskoodi

Monet verkkosivustot vaativat henkilöllisyyden vahvistamista lähettämällä vahvistuskoodi (tai salasana) rekisteröityyn sähköposti- tai puhelinnumeroon.

Kuvittele, että Jack ja Joe pelaavat arvauspeliä, jossa Jack ajattelee numeroa 0:n ja 999:n välillä ja antaa Joelle kolme mahdollisuutta arvata numero minuutin kuluessa. Tietämättä muuta kuin numeroalueen, Joella ei ole muuta tietoa.

Tiedämme kaikki, että on lähes mahdotonta, että Joe arvaa numeron oikein minuutin aikana käyttämällä vain kolmea yritystä.

Sähköposti / puhelin + vahvistuskoodi toimii samalla periaatteella: vahvistuskoodi on yleensä voimassa vain hyvin lyhyen ajan, yleensä korkeintaan 10 minuuttia (samanlainen kuin että Jack antaisi Joelle "minuutin" arvata numero). Lisäksi vahvistuskoodin vahvistamisen API tai menetelmä sisältää yleensä nopeusrajoituksen estääkseen brute-force-hyökkäykset päätysanaan (kuten että Jack antaisi Joelle vain "kolme mahdollisuutta").

Mahdollisille hyökkääjille tämän menetelmän murtautuminen on lähes mahdotonta. Järjestelmä kuitenkin kertoo käyttäjälle vahvistuskoodin luotettavan kanavan (sähköposti tai puhelin) kautta, mikä mahdollistaa käyttäjän suoran vahvistamisen.

Dynaaminen koodi

Dynaaminen koodi, joka tunnetaan myös ajastettuna kertaluonteisena salasanana (TOTP), on "dynaaminen" siinä mielessä, että se muuttuu ajan mittaan. Yleensä, jos verkkosovellus käyttää TOTP:tä, se seuraa RFC6238 - TOTP: Aika-Pohjainen Kertaluonteinen Salasanan Algoritmi.

Hash-pohjainen kertaluonteinen salasana

Ennen TOTP:n esittelyä meidän on selitettävä lyhyesti RFC4226 - HOTP: HMAC-Pohjainen Kertaluonteinen Salasanan Algoritmi (HMAC on hashausalgoritmi). HOTP-algoritmi toimii seuraavasti:

  1. Salaisuus: HOTP vaatii jaetun salaisen avaimen K, joka on sama palvelimen ja asiakkaan välillä.

  2. Laskuri: HOTP:n ydin on laskuri C, jota lisätään joka kerta, kun uusi salasana luodaan.

  3. HMAC-Laskenta:

    • Käytä HMAC-SHA-1 (tai muita hash-funktioita) laskettaessa todennuskoodia:

      hmac calculation
    • Tässä H on 160-bittinen hash-arvo.

  4. Trunkointi: Ota osa hash-arvosta H OTP:n generoimiseksi. Oletetaan, että haluamme 6-numeroisen OTP:n, prosessi on seuraava:

    • Ota H:n viimeinen tavu truncointi offset O:na.
    • Ota 4 tavua alkaen O:sta, muunna ne kokonaisluvuksi T.
    • Ota T:n viimeiset d numeroa, eli OTP = T mod 10^d.

Yhteenvetona HOTP-kaava on:

hash-based otp calculation

missä d on haluttu OTP:n pituus (yleensä 6-8 numeroa).

Aika-pohjainen kertaluonteinen salasana

TOTP on laajennus HOTP:lle, jossa laskuri on korvattu aikastepillä. Se käyttää nykyistä aikaa luodakseen dynaamisen vahvistuskoodin, joten OTP vanhenee automaattisesti ajan mittaan. Toimintaperiaate on seuraava:

  1. Aikasteppi: TOTP käyttää nykyistä aikaa T HOTP-laskurin C:n sijasta. Aikasteppi on asetettu kiinteä aikaväli (yleensä 30 sekuntia).

    • Esimerkiksi, oletetaan, että aikasteppi on 30 sekuntia ja nykyinen Unix-aikaleima on T. TOTP-laskuri lasketaan seuraavasti: T' = T / aikasteppi
    • Missä T′ on aikastepin laskuri, 30 sekunnin yksiköissä.
  2. OTP:n generointi: Korvaa T′ HOTP-algoritmilla luodaksesi OTP:

    generating totp
  3. Dynaaminen päivitys: Koska TOTP perustuu aikasteppiin, OTP muuttuu ajan mittaan, joten palvelin voi vahvistaa sen kelvollisuuden, kunhan OTP on voimassa olevan aikavälin sisällä.

Yhteenvetona TOTP-kaava on:

totp calculation

Perustuen kokemukseemme todennussovellusten käytöstä voimme synkronoida salaisen arvon laitteen ja palvelimen välillä skannaamalla QR-koodin tai suoraan kopioimalla ja liittämällä, ja sitten meidän on syötettävä nykyinen dynaaminen koodi kerran varmistaaksemme, että salainen arvo on sama.

Käyttäessämme mobiililaitteita aikaisemmin saattoi huomata, että eri laitteiden ajat eivät olleet samanlaisia, ja meidän piti manuaalisesti säätää laitteiden aikaa tietyn väliajoin. Viime vuosina lähes kaikki laitteet käyttävät verkkoajan palvelua (NTP) synkronoimaan ja päivittämään laiteajan säännöllisesti. Vaikka laitteen kello ei olisi täysin tarkka, usein tapahtuvat päivitykset voivat varmistaa, että aika on kohtuullisen johdonmukainen eri laitteilla. Tämän oletuksen perusteella dynaamista koodia voidaan silti käyttää, vaikka laite olisi offline-tilassa, kun taas vahvistuskoodin vastaanottaminen offline-tilassa olisi vaikeaa.

Loppuhuomautukset

Tässä artikkelissa olemme esittäneet kaksi erilaista kertaluonteista salasanamenetelmää: sähköposti/puhelin + vahvistuskoodi ja dynaaminen koodi.

Sähköposti/puhelin + vahvistuskoodi luottaa viestintäinfrastruktuuriin ja kolmannen osapuolen sähköposti- tai lyhytsanomapalveluihin (SMS) toteutuakseen; dynaaminen koodi ei ole riippuvainen ulkoisista palveluista ja viestintätoiminnoista, ja sitä voidaan käyttää offline-tilassa.

Logto, suosittu, tehokas ja erittäin laajennettava IAM (Identity and Access Management) -palvelu, tukee molempia OTP-menetelmiä, ja se antaa käyttäjille mahdollisuuden valita liiketoimintatarpeisiinsa parhaiten sopiva ratkaisu.