Google Authenticator je alternativou k SMS pro 2Step ověření, instalace aplikace na Android, kam budou zasílány kódy.
Funguje bez připojení; funguje dokonce i v letadle. Tohle nedostávám. Jak je možné, že to funguje bez připojení? Jak se synchronizuje mobilní telefon a server, aby zjistili, který kód je právě v tuto chvíli platný?
Komentáře
- Kódy nejsou " odeslány ". Jsou vytvářeny přes seed a counter .
Odpověď
Google Authenticator podporuje HOTP a TOTP algoritmy pro generování jednorázových hesel.
S HOTP sdílí server a klient tajnou hodnotu a čítač, které se používají k samostatnému výpočtu jednorázového hesla na obou stranách. Kdykoli je vygenerováno a použito heslo, počítadlo je na obou stranách zvýšeno, což umožňuje serveru a klientovi zůstat synchronizovány.
TOTP v podstatě používá stejný algoritmus jako HOTP s jedním zásadním rozdílem. Počitadlo použité v TOTP je nahrazeno aktuálním časem. Klient a s erver zůstávají v synchronizaci, dokud zůstanou stejné systémové časy. Toho lze dosáhnout pomocí protokolu síťového času .
Tajný klíč (stejně jako počítadlo v případě HOTP) má být v určitém okamžiku sděleny jak serveru, tak klientovi. V případě aplikace Google Authenticator se to děje ve formě identifikátoru URI kódovaného QRCode. Další informace naleznete v části: KeyUriFormat .
Komentáře
- V případě HOTP, jak Google Authenticator ví, že jsem " použil " heslo bez synchronizace se serverem? Google Authenticator dělá to, že stále bliká různými klávesami a já je mohu použít, aniž bych jim dával zpětnou vazbu na svůj mobil.
- @MarioAwad Odpověď na to najdete v HOTP RFC, sekce 7.4 . ietf.org/rfc/rfc4226.txt
- Děkujeme za dobře definovanou odpověď a následné kroky. Stručné shrnutí části 7.4: Každou příležitostnou synchronizaci čítače a dohledové okno čítače umožňuje věci fungovat bez nutnosti okamžité synchronizace.
- Jak zdůraznil @TerryChia, tajný klíč je v QR kódu. Uvědomte si citlivost QRCode / Information. Před časem jsem napsal blogový příspěvek netknights.it/en/the-problem-with-the-google-authenticator
Odpověď
Práce:
Authenticator implementuje algoritmus Time-Based One-Time Password (TOTP). Má následující složky:
• Sdílené tajemství (posloupnost bajtů)
• Vstup odvozený od aktuálního času
• Funkce podepisování
Sdílené tajemství: Sdílené tajemství je to, co potřebujete k nastavení účtu v telefonu. . Buď pořídíte fotografii QR kódu pomocí telefonu, nebo můžete zadat tajemství ručně.
Vstup (aktuální čas): Hodnota vstupního času, kterou jednoduše získáte z telefonu, po získání tajemství není nutná žádná další interakce se serverem. Je však důležité, aby čas vašeho telefonu byl přesný, protože server bude v podstatě opakovat, co se děje na vašem telefonu s použitím aktuálního času známého serverem.
Podepisovací funkce: Podepisovací funkce je HMAC-SHA1. HMAC je zkratka pro ověřovací kód zprávy založený na hash a je to algoritmus, který k podpisu hodnoty používá zabezpečenou jednosměrnou hashovací funkci (v tomto případě SHA1). Použití konzoly HMAC nám umožňuje ověřit autenticitu – pouze lidé, kteří znají tajemství, mohou vygenerovat stejný výstup pro stejný vstup (aktuální čas).
OTP algoritmus :
Pseudokód:
original_secret = xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx secret = BASE32_DECODE(TO_UPPERCASE(REMOVE_SPACES(original_secret))) input = CURRENT_UNIX_TIME() / 30 // sets a constant value for 30 seconds hmac = SHA1(secret + SHA1(secret + input)) //apply hashing offset = hmac[len(hmac)-1] & 0x0F //Last nibble four_bytes = hmac[offset : offset+4] //takes a subset of 4 bytes from 20 bytes large_integer = INT(four_bytes) //Covert four bytes to integer small_integer = large_integer % 1,000,00 //gives 6 digit code
Odkaz: https://garbagecollected.org/2014/09/14/how-google-authenticator-works/
Podívejte se také na tento projekt github pro implementaci GO: https://github.com/robbiev/two-factor-auth/blob/master/main.go
Komentáře
- Nepodporuje ' autentizátor Google také HOTP?
Odpověď
Funguje to na semenu na základě času, takže je to podobné jako u Klíčenky RSA fungují. tj. také nevyžadují žádnou konektivitu.
Právě jsem se rozhlédl a na toto odpovídá zde: https://stackoverflow.com/questions/8340495/how-rsa-tokens-works
Odpověď
Pokud je strace
sshd
démon, je vidět, jak server „ví“ o tajném klíči, protože čte konfigurační soubor uživatelů:
#strace -f -v -e open /usr/sbin/sshd -p 2222 -dddd -f /etc/ssh/sshd_config 2>&1 | grep -i goog > > [pid 2105] open("/home/myuser/.google_authenticator", O_RDONLY) = 4 > > [pid 2105] open("/home/myuser/.google_authenticator~", > > O_WRONLY|O_CREAT|O_EXCL|O_TRUNC|O_NOFOLLOW, 0400debug3: > > mm_sshpam_respond: pam_respond returned 1 [preauth]
mobilní telefon už to ví; naskenovali jste to pomocí QR nebo jste to napsali.
Komentáře
- Toto je dobrý příklad, jak prokázat, že tokeny jsou není odesílán na server, ale ' ve skutečnosti nevysvětluje, jak to funguje (o co se OP zeptal)
- ' samo o sobě, ale řeší nedostatek připojení.