1

まず、指摘する必要があると思います。通常、インターネットの速度が十分に遅いため、速度とセキュリティの妥協が必要な携帯電話向けのアプリケーションを作成しています。

同じ関数(もちろん、ハッシュの作成に使用される変数は異なります)を使用して、ユーザーの自動ログイン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攻撃の標的にしやすくすることなく、これを十分に安全にするには、いくつのループを準備する必要がありますか?

4

2 に答える 2

2

あなたは暗号化の専門家ではありません。独自の暗号構造を作成しようとしないでください。暗号について十分に認識できない微妙な欠陥がある可能性があります。

少なくとも、「multiSHA」ハッシュスキームにはモード0でのソルトがなく、モード1では繰り返し不可(したがって完全に役に立たない)です。

いずれにせよ、クライアントデバイスの速度/能力は、サーバー側で使用できるデータ暗号化のセキュリティとはまったく関係がありません。PBKDF2がサーバーに過度の負荷をかけることを懸念している場合は、ログイン試行に何らかの形式のレート制限を適用してください。

于 2012-06-18T17:35:54.760 に答える
0

OWASP-Password StorageCheatSheetのガイドラインを確認してください。

現在、パスワードに対して64,000回のハッシュの反復を推奨しています。参照が見つかりません(OWASPにあると思いました)が、最近、ソルトは2012年の時点で少なくとも24バイトである必要があることを思い出しました。

今のところ、セキュリティには、塩を使用したSHA-512の64,000回の反復で十分だと思います。

編集:ソルトに関するメモはOWASPからのものですが、削除されたようです。元のテキストは次のとおりです。

最大24文字のサイズのすべてのパスワードに対して実際にレインボーテーブルを見てきましたので、少なくとも24バイトのソルトが推奨される最小の長さです。

于 2012-06-18T17:33:40.000 に答える