SHA256でトークンをログインします
質問
クエリストリングでサイト1からサイト2に渡すことができるログイントークンを作成する必要があります。ユーザー名やIDを転送する必要はありません。サイト2で、ユーザーがサイト1に有効なログインを持っていることを知る必要があります。
私は現在、このようなトークンを作成しています
timestamp|sha256(timestamp+secret)
サイト2で、指定されたタイムスタンプ+シークレットのSHA256を作成し、与えられたハッシュと一致させます。また、タイムスタンプをチェックしますが、5分以内にあるかどうかは検証されません。
これはかなり安全な方法ですか?
Sha256を割って秘密を手に入れるのは簡単ですか?
解決
使用できます hmac すでに共有されたシークレットキーを持っている2つの関係者間で認証されたメッセージを提供する。あなたが説明したことは、そのタイプのメッセージ認証コードであるため、HMACに非常に似ています。私は実際にこれを行うためにHMAC関数を使用しますが。
HMACをクラックするには、認証コード(メッセージのハッシュされた部分)を使用して、秘密をブルートフォースする必要があります。攻撃者はタイムスタンプを知っているので、秘密を推測し続けることができます。 /dev /ランダムからの出力が良い選択であるように、秘密を本当に大きくて非常にランダムにするだけです。
他のヒント
@Rookが言うように、HMACを使用してトークンを認証する必要があります。
さらに、トークンが盗まれないようにする必要があります。たとえば、そのトークンをClearTextで送信する場合、サイト1からユーザー、またはユーザーからサイト2まで、(Firesheepを考える)人は誰でもアカウントを持っていることを「証明」することもできます。それを防ぐためにできる最善のことは、SSL/TLSを使用することです。