Time-Based-One-Time-Password의 약자로 일회성 비밀번호 생성을 위해 공유 비밀키와 시간정보를 사용하여 일회성 비밀번호를 생성합니다. 일회성 비밀번호를 전달하지 않아도 됩니다. TOTP는 HMAC과 HOTP 알고리즘이 사용되므로 해당 개념들을 이해해야 합니다.
HMAC은 Hash-based Message Authentication Code의 줄임말로서, 사용자의 Secret Key를 평문과 조합하여 해시를 발생시키고 메세지와 함께 전달함으로써 무결성을 확인하는 매커니즘입니다.
HMAC(Key, message) = SHA1(Key XOR Opad + SHA1(Key XOR Ipad + message))
01001000 01100101 01101100 01101100 01101111
= 0x48656c6c6f
01011100 01011100 01011100 01011100 01011100
= 0x5c5c5c5c5c
00010100 00111001 00110000 00110000 00110011
⇒ 0x1439303033
0x1439303033
0x6162636465
0x759b939498
fe5ce5adc135af4e081618a100a6c7000e350452
0x48656c6c6f
xor 0x3636363636
⇒ 0x48535a5a59
fe5ce5adc135af4e081618a100a6c77e618f5eab
09d5ac5ab199a4956e0528314f54c22beec265dd