1

ワールプールでのパスワード暗号化に関しては、少し過剰なソルトを生成した可能性があると思います。

これは、salt 生成コードが段階的に行うことです。

  1. 長さ 10 の疑似乱数文字列が生成されます. 可能な値は次のとおりです:

    0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

  2. -2 から 123 までの真の乱数は、大気ノイズによって生成されます

  3. この疑似ランダム文字列と完全に乱数は、UNIX タイムスタンプと一緒にシャッフルされます。
  4. このプレソルトは、md5 で暗号化されます。

それは単に塩の生成です。私はまた、ワールプールで暗号化されたすべてのものを持っています

hash( 'whirlpool',$salt.$password);

コードにセキュリティ上の欠陥はありますか? 結合前または結合後に値を md5 ハッシュする必要がありますか?

ここにチェックする私のコードがあります...

<?php
function generateRandomString($length = 10) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, strlen($characters) - 1)];
    }
    return $randomString;
}

function get_true_random_number($min = 1, $max = 100) {
    $max = ((int) $max >= 1) ? (int) $max : 100;
    $min = ((int) $min < $max) ? (int) $min : 1;
    $options = array(
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HEADER => false,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_ENCODING => '',
        CURLOPT_USERAGENT => 'PHP',
        CURLOPT_AUTOREFERER => true,
        CURLOPT_CONNECTTIMEOUT => 120,
        CURLOPT_TIMEOUT => 120,
        CURLOPT_MAXREDIRS => 10,
    );

    $ch = curl_init('http://www.random.org/integers/?num=1&min='
        . $min . '&max=' . $max . '&col=1&base=10&format=plain&rnd=new');
    curl_setopt_array($ch, $options);
    $content = curl_exec($ch);
    curl_close($ch);

    if(is_numeric($content)) {
        return trim($content);
    } else {
        return rand(-10,127); //INCASE RANDOM.ORG returns a server busy error
    }
}

function generateSalt() {
    $string = generateRandomString(10);
    $int = get_true_random_number(-2,123);
    $shuffled_mixture = str_shuffle(Time().$int.$string);
    return $salt = md5($shuffled_mixture);
}

echo generateSalt();
?>

また、塩はどのくらいの長さですか?個人的には、他のタイプの文字をハッシュすることはそれほど重要ではないと思います。単純に、1人のブルートフォースがソルト全体を強制することはないと思います。それで全部です!前もって感謝します。また、より優れた、またはより効率的な方法があれば役立ちます。

4

2 に答える 2

0

暗号化に関する一般的なガイドライン:独自の暗号を作成しないでください。これには、独自のアルゴリズムを作成し、公開されたピア レビュー システムを実装することが含まれます。正しく理解するのは非常に困難です (専門家であっても)。

PHP 5.5 からは、パスワードのハッシュに使用すべき非常にシンプルで適切な API があります: password_hash() および password_verify()


実装とアルゴリズムについて:

パスワードハッシュアルゴリズムの間違った側面について心配しています。使用するソルトには、超高エントロピー値を含める必要はなく、それらをはるかに簡単な方法で収集することもできます (たとえば、Linux を使用している場合は から 32 バイトを読み取ります/dev/urandom)。

代わりに心配する必要があるのは、ソルトとハッシュ (データベース侵害のシナリオ) が与えられた場合にパスワードをブルート フォースするのがどれほど難しいかということです。これは事実上、すべての可能性のあるパスワードを保存されたソルトでハッシュし、それを保存された参照ハッシュと比較することを意味します。攻撃者を遅らせるには、スローハッシュ関数を使用して多くのパスワード比較を防止します。例としては、結果のハッシュを何度も (数千回) ハッシュすることです。

ソルトはレインボー テーブル攻撃から保護します。レインボー テーブル攻撃では、事前に計算された巨大なデータベースにクエリを実行して、元のハッシュを検索できます。ソルトを介してハッシュ関数をランダム化することにより、その攻撃ベクトルを (成功して) 防止します。

于 2014-04-08T21:51:28.310 に答える