簡單來說就是使用密鑰+時間的加密方式,加密細節可以參考下方網站
https://www.zhihu.com/question/20462696
http://www.csdn.net/article/2014-09-23/2821808-Google-Authenticator
使用上來說就是網站先幫使用者產生隨機密鑰,使用者用 Google Authenticator 輸入密鑰後用現在的時間算出一個加密過後的一串很長的 16 進位數,利用這個 16 進位數來雙重認證。
Google Authenticator 本身多做的兩件事情是
1. 使用 30 秒為一個區間加密
2. 將加密出來的 16 進位數再算成六位數的十進位數字讓使用者比較容易輸入
也就是說如果網站開發者要實作 google authenticator 的二階段認證的話就必須
1. 將六位數字換算回 16 進位數字
2. 根據 30 秒為一個區間解密使用者輸入的數字,而不是使用當下時間點
ruby 上的實作:
https://github.com/mdp/rotp
沒有留言:
張貼留言