A Google Hitelesítő az SMS alternatívája a kétlépcsős azonosításhoz, telepítve egy alkalmazást az Android rendszerre, ahova a kódokat elküldik.
Működik minden kapcsolat nélkül; még repülő üzemmódban is működik. Ezt nem értem. Hogyan lehetséges, hogy kapcsolat nélkül működik? Hogyan szinkronizálja a mobiltelefon és a szerver, hogy megtudja, melyik kód érvényes abban a pillanatban?
Megjegyzések
- A kódok nincsenek " elküldve ". Magonként és számlálón keresztül készülnek. .
Válasz
A Google Hitelesítő támogatja mind a HOTP és TOTP algoritmusok egyszeri jelszavak előállításához.
A HOTP használatával a kiszolgáló és az ügyfél titkos értéket és egy számláló, amelyek mindkét oldalon egymástól függetlenül kiszámítják az egyszeri jelszót. Amikor jelszót generálnak és használnak, a számláló mindkét oldalon növekszik, így a szerver és az ügyfél szinkronban maradhat.
TOTP lényegében ugyanazt az algoritmust használja, mint a HOTP, egy fő különbséggel. A TOTP-ben használt számlálót az aktuális idő váltja fel. Az erver mindaddig szinkronban marad, amíg a rendszeridő változatlan marad. Ez a hálózati idő protokoll használatával érhető el.
A titkos kulcs (valamint a számláló a HOTP esetén) hogy a szerverrel és az ügyféllel egy bizonyos időpontban kommunikálni kell. A Google Authenticator esetében ez QRCode kódolású URI formájában történik. További információ: KeyUriFormat .
Megjegyzések
- HOTP, honnan tudja a Google Authenticator, hogy " használtam a " jelszót a szerverrel való szinkronizálás nélkül? A Google Authenticator az, hogy továbbra is különböző gombokat villog, és bármelyiket használhatom, anélkül, hogy visszajelzést adnék a mobilomra.
- @MarioAwad Erre a válasz megtalálható a HOTP RFC 7.4 szakaszában. . ietf.org/rfc/rfc4226.txt
- köszönöm a jól definiált választ és a követést. Gyors összefoglalás a 7.4 szakaszból: A számláló időnként újraszinkronizálása és a számláló előretekintő ablaka az, ami a dolgokat azonnali szinkronizálás nélkül működtetheti.
- Amint a @TerryChia rámutatott, a titkos kulcs a QR-kódban található. Legyen tisztában a QRCode / Information érzékenységével. Írtam egy blogbejegyzést egy ideje ezelőtt netknights.it/en/the-problem-with-the-google-authenticator
Válasz
Működik:
A Hitelesítő végrehajtja az időalapú egyszeri jelszó (TOTP) algoritmust. A következő összetevőket tartalmazza:
• Megosztott titok (bájtsorozat)
• Az aktuális időből levezetett bemenet
• Aláíró függvény
Megosztott titok: A megosztott titok az, amit meg kell szereznie a fiók telefonon történő beállításához . Vagy fényképet készít a QR-kódról a telefonjával, vagy manuálisan beírhatja a titkot.
Bevitel (aktuális idő): Az a beviteli időérték, amelyet egyszerűen a telefonjáról szerez be, a titok megszerzése után nincs szükség további együttműködésre a szerverrel. Fontos azonban, hogy a telefon ideje pontos legyen, mint a szerver lényegében megismétli, mi történik a telefonján, a szerver által ismert aktuális idő felhasználásával.
Aláírási funkció: A használt aláíró függvény a HMAC-SHA1. A HMAC a Hash alapú üzenet hitelesítési kódot jelenti, és ez egy olyan algoritmus, amely egy biztonságos egyirányú hash függvényt (ebben az esetben SHA1) használ az érték aláírásához. A HMAC használata lehetővé teszi számunkra a hitelesség ellenőrzését – csak a titkot ismerő emberek generálhatnak ugyanazt a kimenetet ugyanarra a bemenetre (az aktuális időre).
OTP algoritmus :
Álkó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
Hivatkozás: https://garbagecollected.org/2014/09/14/how-google-authenticator-works/
Ezt a github projektet is ellenőrizze a GO megvalósításához: https://github.com/robbiev/two-factor-auth/blob/master/main.go
Megjegyzések
- Nem ' nem támogatja-e a google hitelesítő a HOTP-t is?
Válasz
Ez egy magon az idő alapján fog működni, így hasonló ahhoz, ahogyan a Az RSA kulcstartók működnek. azaz nem is igényelnek semmilyen kapcsolatot.
Éppen körülnéztem, és erre itt válaszolok: https://stackoverflow.com/questions/8340495/how-rsa-tokens-works
Válasz
Ha egy strace
s a sshd
démon, láthatja, hogy a szerver hogyan tud “tudni” a titkos kulcsról, amikor elolvassa a felhasználók konfigurációs fájlját: már tudja; beolvasta QR-n keresztül, vagy beírta. nem a szerverre küldve, de nem ' nem magyarázza el, hogyan működik (amit az OP kért)