1日限定のトークン認証システムを考えてみた

はじめに

タイトルのままです. その日限定で認証可能なトークン認証システムを考えてみました. 日付にIPアドレスなども付加すれば,そのIPアドレスのみとか制約を付加できると考えています.

いろいろ定義

この記事で使う関数とか変数を定義しておきます.

// 適当なハッシュ関数
string Hash(string val);

// HMAC
string HMAC(string val);

トークン生成

ユーザからの入力

  • ID: ID
  • PW: パスワード

生成方法

  • まず,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
{
    失敗
}

思ったこと

tokenIDと日付さえわかっていれば簡単に生成可能. hmactoken秘密鍵(PWのハッシュ値とか)が分かっていれば生成可能. なので,サーバがわざわざ鍵を生成する必要もない気がする. HMACに使う秘密鍵がサーバで固有なものであれば話は別だけど.

最後に

セキュリティとか暗号とかそういうのを一切勉強したことがないので,トンチンカンなことを書いてると思います. 勉強のため,優しく教えて下さい><