読む セキュリティエンジニアリング ロスアンダーソン、 2.4.7.1章パスワードマングラー 私が既存の問題を最終的に解決するように見えるアイデアを得ました '私は強いことを覚えておく必要があります*あまりにも多くのシステムのソリューションのパスワード。
*)パスワードはランダムに生成され、使用するサービスの重要度に応じたサイズで、最小8文字、通常最大約16文字です。
既存のソリューションについて私が気に入らない点の簡単な内訳:
つまり、私は次のような解決策を探していました。
それで、私の質問は:
マスターパスワード(ランダムに生成された12個の印刷可能なASCII文字)に基づいて、Webサイトのドメイン名(stackexchange.com)を「ソルト」として使用して、PBKDF2を使用してパスワードを生成するのは安全ですか?
<?php
$password = $_POST['password'];
$salt = $_POST['publicIdentifier'];
function passKey($password, $salt) {
$iterationCount = pow(2, 18); // 262.144 iterations
$outputLength = 20; // because this should be 'secure enough'?
// Step 1: get the derived key
$generated = hash_pbkdf2('sha256', $password, $salt, $iterationCount, $outputLength, true); // returns binary output
// Step 2: encode as Base91
$generated = base91_encode($generated); // because we want 'special characters' in our password string (websites often require this)
// Step 3: return the password, sliced down to required length
return substr($generated, 0, $outputLength);
}
echo 'generated password: '.passKey($password, $salt);
ソリューションが自分の信頼できるWebサーバーでホストされ、SSL/TLSを介してのみアクセスできるとしたら?
攻撃者が使用されたコード(上記に投稿)、「publicIdentifier」、および場合によっては生成されたパスワードのリストにアクセスできる場合、上記のスキームは攻撃者がマスターを理解するのを防ぎますパスワード?
short、ランダムに生成されない文字列をソルトとして使用すると、PBKDF2の強度が低下する可能性があるのではないかと心配しています。
専門のWebサイトにアクセスしてパスワードを取得できるのなら、なぜ専門のWebソフトウェアにアクセスしてパスワードを取得できないのでしょうか。たとえば、LastPassはオンライン検索を提供します。
データベースを備えたサムドライブで、ポータブルバージョンのKeePass(およびその他のローカルパスワードマネージャー)を携帯することもできます。
または、最近のほとんどのパスワードマネージャーはスマートフォンアプリを持っているので、スマートフォンを持っていてほとんどの場所に持っていれば、そこから簡単にパスワードを取得して入力できます。
言い換えれば、正しく行われ、少し計画を立てれば、必要なときにパスワードマネージャーにアクセスできない状況はおそらくほとんどありません。