まず、指摘する必要があると思います。通常、インターネットの速度が十分に遅いため、速度とセキュリティの妥協が必要な携帯電話向けのアプリケーションを作成しています。
同じ関数(もちろん、ハッシュの作成に使用される変数は異なります)を使用して、ユーザーの自動ログインCookieを作成し、パスワードを保存します。
これまでのところ、次のようになります。
function multiSHA($toSha, $mode=0, $count=100) { //$mode=1 to create cookies with uniqid, or =0 for hashing with externally specified salt (added to $toSha) and static pepper
$toSha=hash('sha512',$toSha); //so that I know the length of the string below
if ($mode==0) {
for ($i=0; $i<$count; ++$i) {
$p1=hash('sha512',substr($toSha,0,64)); // since I know the length
$p2=hash('sha512',substr($toSha,64,128));
$pepper=hash('sha512','This is my static pepper.');
$toSha=hash('sha512',$p1.$pepper.$p2);
}
}
else {
for ($i=0; $i<$count; ++$i) {
$p1=hash('sha512',substr($toSha,0,64));
$p2=hash('sha512',substr($toSha,64,128));
$uniqid=hash('sha512',uniqid('This is my static pepper.',true));
$toSha=hash('sha512',$p1.$uniqid.$p2);
}
}
return $toSha;
}
さて、これはパスワードとクッキーのデータを保存するのに十分でしょうか?たとえば、リソースを大量に消費PBKDF2
するため使用できませんが、これはかなり軽量です。攻撃者はfor
ループが何回繰り返されるかわからないので、Cookieを別のテーブルに保存して、追加のセキュリティチェック(ユーザーエージェントなど)を実行します。
また、自分のサイトをDDOS攻撃の標的にしやすくすることなく、これを十分に安全にするには、いくつのループを準備する必要がありますか?