この質問はかなり人気があるので、更新すると便利だと思いました。
この質問に対する AviDの正しい答えを強調させてください。
暗号化が必要なデータを Cookie に保存しないでください。代わりに、適切なサイズ (128 ビット/16 バイト) のランダム キーを Cookie に格納し、Cookie のキーによって識別される、サーバー上で安全に保ちたい情報を格納します。
Cookie を暗号化するための「最適な」暗号化アルゴリズムに関する情報を探しています。
次の要件があります。
データの暗号化と復号化は、(ほぼ)すべてのリクエストに対して高速である必要があります小さなデータセット、通常は約 100 文字以下の文字列で動作します。
安全でなければなりませんが、銀行取引を保護しているわけではありません
SHA1などが出ないように、情報を解読できる必要があります。
ここで、Blowfish が高速で安全であることを読み、AES が高速で安全であることを読みました。ふぐの方がブロックサイズが小さい。
どちらのアルゴリズムも十分以上のセキュリティを提供すると思いますか? したがって、速度が決定的な要因になります。しかし、それらのアルゴリズムが小さな文字列に適しているかどうか、また Cookie の暗号化により適したアルゴリズムがあるかどうかはわかりません。
私の質問は、
Cookie データの暗号化に最適な暗号化アルゴリズムは何ですか?
更新
より正確に言うと、2 つの Cookie を暗号化する必要があります。1 つはセッション情報を含み、もう 1 つは「remeber me」情報を含みます。
プラットフォームは、VPS 上の Linux 上の apache モジュールとしての PHP です。
更新 2 Cookie に情報を保存することは安全ではないというcletus
に同意します。
ただし、「remeber me」機能を実装する必要があります。これについて受け入れられている方法は、Cookie を設定することです。クライアントがこの Cookie を提示すると、有効なユーザー名とパスワードの組み合わせを提示したかのように (ほぼ) 同等の権利でシステムにアクセスできます。
したがって、少なくとも Cookie 内のすべてのデータを暗号化して、a
)悪意のあるユーザーが内容を読み取れないようにする必要があります
。b)悪意のあるユーザーが独自の Cookie を作成したり、改ざんしたりできないようにします。
(Cookie からのすべてのデータは、何かを行う前にサニタイズされ、有効性がチェックされますが、それは別の話です)
セッション Cookie には、sessionId/timestamp だけが含まれています。おそらく暗号化なしで使用できますが、暗号化しても問題はないと思いますか? (計算時間以外)。
データを Cookie に保存する必要がある場合、それを暗号化する最善の方法は何でしょうか?
更新 3
この質問への回答により、選択したアプローチを再考することができました。実際、暗号化を必要とせずに同じことができます。データを暗号化する代わりに、コンテキストがなければ意味がなく、推測できないデータのみを送信する必要があります。
しかし、私は途方に暮れています:
暗号化により、BigBadWorld™ にデータを送信できるようになり、それでも (かなり) 誰もそれを読み取ったり、改ざんしたりできないことを確信できると思いました
...暗号化のポイント?
しかし、以下の反応は次の方向に進んでいます。セキュリティを達成するために暗号化を信頼しないでください。
私は何が欠けていますか??