背景
- 最近用到了OTP, 遂mark一下
OTP
- 動態口令驗證可以看作是服務端和客戶端之間通過約定相同的算法來實現驗證功能, 也即你在客戶端看到的動態口令是客戶端通過算法生成的無需請求服務端獲取
TOTP
- 平時用的google動態口令用的就是TOTP(
Time-based One-Time Password
), TOTP基於HOTP, 所以弄懂TOTP即可 - 原理: 假設用的是30秒間隔的六位口令, 精簡版僞代碼:
// secret爲密碼, timestamp爲時間戳, 返回口令
GetOTPCode(secret, timestamp) {
hs = hmac(secret, timestamp/30)
// hsToInt是對hs這個[]byte進行各種&與偏移操作然後轉爲int
intHs = hsToInt(hs)
code = intHs % 1000000
return code
}