1日限定のトークン認証システムを考えてみた
はじめに
タイトルのままです. その日限定で認証可能なトークン認証システムを考えてみました. 日付にIPアドレスなども付加すれば,そのIPアドレスのみとか制約を付加できると考えています.
いろいろ定義
この記事で使う関数とか変数を定義しておきます.
// 適当なハッシュ関数 string Hash(string val); // HMAC string HMAC(string val);
トークン生成
ユーザからの入力
ID
: IDPW
: パスワード
生成方法
- まず,IDとPWが正しいか普通にチェック
- 正しければ,次のようにTokenペア生成
token = Hash(today.toString() + ID)
hmac = HMAC(token, "適当な秘密鍵(PWのハッシュ値とか)")
認証
ユーザからの入力
ID
token
hmac
認証方法
if(hmac == HMAC(token, "生成に使った秘密鍵(PWのハッシュ値とか)") && token == Hash(today.toString() + ID) { 認証成功 } else { 失敗 }
思ったこと
token
はID
と日付さえわかっていれば簡単に生成可能.
hmac
はtoken
と秘密鍵(PWのハッシュ値とか)が分かっていれば生成可能.
なので,サーバがわざわざ鍵を生成する必要もない気がする.
HMACに使う秘密鍵がサーバで固有なものであれば話は別だけど.
最後に
セキュリティとか暗号とかそういうのを一切勉強したことがないので,トンチンカンなことを書いてると思います. 勉強のため,優しく教えて下さい><