メール通知の確認コードの暗号化方式の最適な使用方法: md5、sha1、または sha256
一部のアクションをメールで確認するためのメール通知を行います。
ソルトといくつかのパラメーターを使用して確認コードを生成しました。
確認コードに暗号化方式を使用するにはどうすればよいですか?
メール通知の確認コードの暗号化方式の最適な使用方法: md5、sha1、または sha256
一部のアクションをメールで確認するためのメール通知を行います。
ソルトといくつかのパラメーターを使用して確認コードを生成しました。
確認コードに暗号化方式を使用するにはどうすればよいですか?
ここには 2 つの主なオプションがあります。
最初のオプションは安全ですが (実際の乱数ジェネレーターまたは非常に優れた疑似乱数ジェネレーターを使用していると仮定します)、データベースにデータを保存する必要があります。
データベースに何も保存する必要がなく、リンクが有効かどうかを確認するためにデータベースにクエリを実行する必要もないため、通常は 2 番目のオプションを好みます。
サーバーだけが知っている秘密鍵を選択し、URL で検証するパラメーターを正確に定義します (たとえば、ユーザー ID だけで十分かもしれませんが、リンクを期限切れにしたい場合は、タイムスタンプを追加できます)。 URL を取得し、ユーザー ID とタイムスタンプの両方をハッシュで検証します)。秘密鍵とパラメーターを混ぜ合わせ、これに基づいてハッシュを生成し、パラメーターとハッシュの両方を指定するリンクを作成します。ユーザーがリンクをクリックすると、URL からパラメーターを取得し、それらを秘密鍵と再度組み合わせて、結果をハッシュし、URL に付属するハッシュと比較します。
これを行う安全な方法は、 Hash-based Message Authentication CodeであるHMACを使用することです。http://php.net/manual/en/function.hash-hmac.phpを参照してください。
このメカニズムは、検証しているデータを URL で公開することに注意してください。データが秘密の場合 (つまり、リンクをクリックする前にデータベースに何も保存せずに、ユーザー名とパスワードの両方を含むリンクをユーザーに送信したいとします)、Authenticated Encryptionを使用する必要があります。暗号化アルゴリズム (誰もデータを読み取ることができないことを保証する) と認証アルゴリズム (暗号化されたデータを改ざんして意味のあるものを生成できないことを保証するもの) の組み合わせ。そのようなコードを生成できるのはサーバーだけです)。
「ランダムな」確認コードを生成するだけの場合は、使用しているハッシュ関数について心配する必要はありません。ハッシュ化された情報のセキュリティについてはあまり気にしません。確認コードが推測できないという点だけです。これは、エントロピーのビットが多いほど、確認コードがより安全 (かつ一意) になることを意味します。MD5 は 128 ビットのエントロピー、SHA1 は 160 ビット、SHA256 は 256 ビットになります。大きなソルト (>= 1024 ビットで問題ありません) を使用して、それを良いと呼びます。
本当に安全にしたい場合は、or から n バイト (n は 24+ という大きな数) を読み込みます(前者はegdなどを実行している場合のみ、それ以外の場合は DOS 攻撃の影響を受ける可能性があります)。それらを16進またはbase64でエンコードし、ユーザーレコードに保存して、それを確認コードとして設定します。これにより、推測可能性が完全に排除され、一般的なコショウのように単一の攻撃ポイントがありません./dev/random
/dev/urandom