ユーザーを一意に識別できるように、Cookieに含まれる値を生成する必要があります。多くの読み取りを行った後、それopenssl_random_pseudo_bytes()
は法案に適合する可能性があります。
ただし、length
値を一意にするために関数に使用する必要があるパラメーターがわかりません。つまり、10、25、50、100などの長さを使用する必要がありますか?
現在の妥当な (強力な暗号化)セキュリティ レベルは 128 ビットです。これは、128 ビット暗号 (AES-128 など) を使用した対称暗号化から得られるのと同じレベルのセキュリティです。値を一意にするために衝突が問題になると仮定すると、誕生日のパラドックスを考慮する必要があるため、Cookie 値に 256 ビットのランダム データが必要になります。の場合は 32 バイトですlength
。256 ビットで誕生日攻撃を開始するには、衝突を検出するために約 2 256/2 = 2 128回の試行が必要です。これは、128 ビットのセキュリティ レベルに相当します。
あなたのニーズに合ったより良い関数があると思いますuniqid()
: microtime()
もちろん、これは暗号学的に安全ではありませんが、安全である必要があるとは指定していません。
使用法: uniqid()
13 文字の長さの文字列、uniqid("", TRUE)
23 文字、uniqid($var)
yieldstrlen($var)+13
文字を返します。
uniqid の PHP ドキュメントから:
この関数は、暗号的に安全なトークンを生成しません。実際、追加のパラメーターが渡されない場合、戻り値は microtime() とほとんど変わりません。暗号的に安全なトークンを生成する必要がある場合は、openssl_random_pseudo_bytes() を使用します。