ベストプラクティス:パスワードのソルト&ペッパー?

154
Glitch Desire 2013-06-03 21:15.

私がやっていたことは、実際にはパスワードをソルトするのではなく、ペッパーすることであることがわかったという議論に出くわしました。それ以来、次のような機能で両方を実行し始めました。

hash_function($salt.hash_function($pepper.$password)) [multiple iterations]

選択したハッシュアルゴリズムを無視します(これは特定のアルゴリズムではなく、塩とピーマンの議論にしたいのですが、安全なアルゴリズムを使用しています)、これは安全なオプションですか、それとも別のことをする必要がありますか?用語に慣れていない人のために:

  • 塩は、通常、それが不可能なパスワードをクラックするハッシュテーブルを使用するようにするために設計されたデータベース内の文字列を格納し、ランダムに生成された値です。各パスワードには独自のソルトがあるため、パスワードを解読するには、すべてを個別にブルートフォースする必要があります。ただし、ソルトはパスワードハッシュとともにデータベースに保存されるため、データベースの侵害は両方を失うことを意味します。

  • 唐辛子は秘密であることが意図されている(通常は、アプリケーションのソースコードにハードコードされた)データベースとは別に格納されているサイト全体の静的な値です。これは、データベースの侵害によってアプリケーション全体のパスワードテーブルがブルートフォース可能にならないようにするために使用されます。

不足しているものがあり、パスワードをソルト&ペッパーすることが、ユーザーのセキュリティを保護するための最良のオプションですか?この方法でそれを行うことに潜在的なセキュリティ上の欠陥はありますか?

注:説明の目的で、アプリケーションとデータベースは別々のマシンに保存され、パスワードなどを共有しないと想定します。したがって、データベースサーバーの違反は、アプリケーションサーバーの違反を自動的に意味するわけではありません。

5 answers

318
ircmaxell 2013-06-04 01:59.

OK。私はこれについて書く必要があると見超えるとオーバー、私は一人でコショウで最後の標準的な答えをします。

唐辛子の見かけの利点

唐辛子がハッシュ関数をより安全にするべきであることは非常に明白なようです。つまり、攻撃者がデータベースのみを取得する場合、ユーザーのパスワードは安全である必要がありますよね?論理的に思えますよね?

だからこそ、多くの人が唐辛子は良い考えだと信じています。それは理にかなっている"。

唐辛子の現実

セキュリティと暗号化の分野では、「理にかなっている」だけでは不十分です。安全であると見なされるためには、何かが証明可能意味のあるものでなければなりません。さらに、保守可能な方法で実装可能である必要があります。維持できない最も安全なシステムは安全でないと見なされます(そのセキュリティの一部が壊れた場合、システム全体が崩壊するため)。

そして、ピーマンは証明可能なモデルにも保守可能なモデルにも適合しません...

ピーマンの理論的問題

ステージを設定したので、ピーマンの何が問題になっているのかを見てみましょう。

  • あるハッシュを別のハッシュにフィードすると危険な場合があります。

    あなたの例では、あなたはそうします。hash_function($salt . hash_function($pepper . $password))

    過去の経験から、あるハッシュ結果を別のハッシュ関数に「フィードする」だけで、全体的なセキュリティが低下する可能性があることがわかっています。その理由は、両方のハッシュ関数が攻撃の標的になる可能性があるためです。

    そのため、PBKDF2のようなアルゴリズムは、特別な操作を使用してそれらを結合します(その場合はhmac)。

    重要なのは、それは大したことではありませんが、ただ投げ捨てるのも簡単なことではないということです。暗号システムは、「機能するはず」のケースを回避するように設計されており、代わりに「機能するように設計された」ケースに焦点を合わせています。

    これは純粋に理論的に見えるかもしれませんが、実際にはそうではありません。たとえば、Bcryptは任意のパスワードを受け入れることはできません。したがって、渡すと、バイナリ文字列を返す場合bcrypt(hash(pw), salt)よりもハッシュがはるかに弱くなるbcrypt(pw, salt)可能性hash()があります。

  • デザインに反対する

    bcrypt(およびその他のパスワードハッシュアルゴリズム)が設計された方法は、saltを使用することです。コショウの概念は決して導入されませんでした。これは些細なことのように思えるかもしれませんが、そうではありません。その理由は、塩は秘密ではないからです。これは、攻撃者が知ることができる単なる値です。一方、コショウは、非常に定義上、暗号の秘密です。

    現在のパスワードハッシュアルゴリズム(bcrypt、pbkdf2など)はすべて、1つの秘密の値(パスワード)のみを取り込むように設計されています。アルゴリズムに別の秘密を追加することは、まったく研究されていません。

    それはそれが安全ではないという意味ではありません。それが安全かどうかわからないということです。そして、セキュリティと暗号化に関する一般的な推奨事項は、私たちが知らなければ、そうではないということです。

    したがって、秘密の値(peppers)で使用するためにアルゴリズムが暗号学者によって設計および精査されるまで、現在のアルゴリズムをそれらで使用しないでください。

  • 複雑さはセキュリティの敵です

    信じられないかもしれませんが、複雑さはセキュリティの敵です。複雑に見えるアルゴリズムを作成することは安全かもしれませんし、そうでないかもしれません。しかし、それが安全でない可能性は非常に重要です。

ピーマンに関する重大な問題

  • メンテナンスできません

    ペッパーを実装すると、ペッパーキーを回転させることができなくなります。一方向性関数への入力でペッパーが使用されるため、値の存続期間中、ペッパーを変更することはできません。これは、キーの回転をサポートするために、いくつかの奇抜なハックを考え出す必要があることを意味します。

    これは、暗号化シークレットを保存するときに必ず必要になるため、非常に重要です。キーをローテーションするメカニズムがないこと(定期的および違反後)は、セキュリティ上の大きな脆弱性です。

    また、現在のペッパーアプローチでは、すべてのユーザーがローテーションによってパスワードを完全に無効にするか、次のログインがローテーションされるまで待つ必要があります(これは決して行われない可能性があります)...

    これは基本的にあなたのアプローチを即座にノーゴーにします。

  • それはあなたがあなた自身の暗号を転がす必要があります

    現在のアルゴリズムはペッパーの概念をサポートしていないため、ペッパーをサポートするためにアルゴリズムを作成するか、新しいアルゴリズムを発明する必要があります。そして、なぜそれが本当に悪いことなのかすぐにわからない場合:

    最も無知なアマチュアから最高の暗号研究者まで、誰でも、彼自身が破ることができないアルゴリズムを作成することができます。

    • ブルース・シュナイアー

    あなた自身の暗号を決して転がさないでください...

より良い方法

したがって、上記のすべての問題のうち、状況を処理する方法は2つあります。

  • 存在するアルゴリズムを使用するだけです

    bcryptまたはscryptを正しく(高コストで)使用する場合、最も弱い辞書パスワードを除くすべてが統計的に安全であるはずです。コスト5でbcryptをハッシュする現在のレコードは、1秒あたり71kハッシュです。そのレートでは、6文字のランダムパスワードでさえ解読するのに何年もかかります。また、推奨される最小コストが10であることを考慮すると、1秒あたりのハッシュ数が32分の1に削減されます。したがって、1秒あたりのハッシュ数は約2200になります。そのレートでは、いくつかの辞書のフレーズや変更でさえ安全かもしれません。

    さらに、ドアでこれらの弱いクラスのパスワードをチェックし、許可しないようにする必要があります。パスワードクラッキングが高度になるにつれて、パスワードの品質要件も高度になります。それはまだ統計的なゲームですが、適切なストレージ技術と強力なパスワードがあれば、誰もが実質的に非常に安全であるはずです...

  • ストレージの前に出力ハッシュを暗号化する

    セキュリティ領域には、上記のすべてを処理するように設計されたアルゴリズムが存在します。これはブロック暗号です。リバーシブルなので、キーを回転させることができるので良いです(イェーイ!保守性!)。設計通りに使用されているので良いです。それはユーザーに情報を与えないので良いです。

    その行をもう一度見てみましょう。攻撃者があなたのアルゴリズムを知っているとしましょう(これはセキュリティに必要です。そうでない場合は、隠すことによるセキュリティです)。従来のペッパーアプローチでは、攻撃者はセンチネルパスワードを作成でき、ソルトと出力を知っているため、ペッパーをブルートフォース攻撃できます。わかりました、それはロングショットですが、それは可能です。暗号を使用すると、攻撃者は何も取得しません。そして、塩はランダム化されているので、歩哨のパスワードは彼/彼女を助けさえしません。したがって、残されている最善の方法は、暗号化されたフォームを攻撃することです。つまり、最初に暗号化されたハッシュを攻撃して暗号化キーを回復し、次にハッシュを攻撃する必要があります。しかし、暗号の攻撃については多くの研究が行われているので、それに依存したいと思います。

TL / DR

唐辛子は使用しないでください。それらには多くの問題があり、サーバー側のシークレットを使用しない(はい、問題ありません)方法と、保存前にブロック暗号を使用して出力ハッシュを暗号化する方法の2つがあります。

27
martinstoeckli 2013-06-03 23:05.

まず、コショウの正確な利点について説明する必要があります

  • ペッパーは、攻撃者がデータベース(ハッシュを含む)への読み取りアクセス権を持っているが、ペッパーを使用してソースコードにアクセスできない特別な場合に、弱いパスワードを辞書攻撃から保護できます。

典型的なシナリオは、SQLインジェクション、バックアップの破棄、サーバーの破棄などです。これらの状況は、思ったほど珍しいことではなく、多くの場合、ユーザーの制御下にありません(サーバーホスティング)。使用する場合...

  • パスワードごとの一意のソルト
  • BCryptのような遅いハッシュアルゴリズム

...強力なパスワードは十分に保護されています。塩分がわかっている場合でも、これらの条件下で強力なパスワードをブルートフォース攻撃することはほぼ不可能です。問題は、ブルートフォース辞書の一部であるか、それらの派生物である弱いパスワードです。最も一般的なパスワードのみをテストするため、辞書攻撃はそれらを非常に高速に明らかにします。

2番目の質問はコショウをどのように適用するかです。

コショウを適用するためによく推奨される方法は、ハッシュ関数に渡す前にパスワードとコショウを組み合わせることです。

$pepperedPassword = hash_hmac('sha512', $password, $pepper); $passwordHash = bcrypt($pepperedPassword);

ただし、さらに良い方法がもう1つあります。

$passwordHash = bcrypt($password); $encryptedHash = encrypt($passwordHash, $serverSideKey);

これにより、サーバー側のシークレットを追加できるだけでなく、必要に応じて$ serverSideKeyを交換することもできます。この方法はもう少し手間がかかりますが、コードが一度存在する場合(ライブラリ)、それを使用しない理由はありません。

3
Aron 2013-06-03 21:32.

ソルトアンドペッパーのポイントは、レインボーテーブルと呼ばれる事前に計算されたパスワードルックアップのコストを増やすことです。

一般に、単一のハッシュの衝突を見つけようとするのは困難です(ハッシュが安全であると仮定)。ただし、ハッシュが短い場合は、コンピューターを使用して、可能なすべてのハッシュを生成し、ハードディスクを検索することができます。これはレインボーテーブルと呼ばれます。レインボーテーブルを作成すると、世界に出て、任意の(無塩でペッパーのない)ハッシュのもっともらしいパスワードをすばやく見つけることができます。

コショウのポイントは、パスワードリストをハッキングするために必要なレインボーテーブルを一意にすることです。したがって、攻撃者がレインボーテーブルを作成するためにより多くの時間を浪費します。

ただし、重要な点は、各ユーザーのレインボーテーブルをユーザーに固有のものにして、攻撃の複雑さをさらに高めることです。

実際、コンピュータセキュリティのポイントは、(数学的に)不可能にすることはほとんどなく、数学的にも物理的にも実用的ではありません(たとえば、安全なシステムでは、単一のユーザーのパスワードを計算するために、宇宙のすべてのエントロピー(およびそれ以上)が必要になります)。

2
benrg 2020-08-03 15:28.

これを特定のアルゴリズムではなく、塩とピーマンの議論にしたいのですが、安全なアルゴリズムを使用しています

私が知っているすべての安全なパスワードハッシュ関数は、パスワードとソルト(およびサポートされている場合はシークレット/ペッパー)を別々の引数として受け取り、すべての作業を実行します。

文字列を連結していて、hash_function引数が1つしかないという事実だけで、十分にテストされ、十分に分析された標準アルゴリズムの1つを使用しておらず、代わりに独自のアルゴリズムを使用しようとしていることがわかります。そうしないでください。

Argon2は2015年にパスワードハッシュコンペティションで優勝しました。私が知る限り、Argon2は新しいデザインに最適です。Kパラメータ(「シークレット値」または「キー」と呼ばれる)を介してペッパーをサポートします。コショウを使わない理由はわかりません。最悪の場合、コショウはデータベースとともに危険にさらされ、使用しなかった場合よりも悪化することはありません。

組み込みのペッパーサポートを使用できない場合は、このディスカッションで提案されている2つの式のいずれかを使用できます。

Argon2(salt, HMAC(pepper, password))   or   HMAC(pepper, Argon2(salt, password))

重要な注意:HMAC(またはその他のハッシュ関数)の出力をArgon2(またはその他のパスワードハッシュ関数)に渡す場合は、パスワードハッシュ関数が埋め込みゼロバイトをサポートしていることを確認するか、ハッシュ値をエンコードしてください(例:base64) )ゼロバイトがないことを確認します。文字列が埋め込みゼロバイトをサポートする言語を使用している場合、その言語がPHPでない限り、おそらく安全ですが、とにかくチェックします。

1
Sven 2013-06-03 21:23.

ハードコードされた値をソースコードに保存することは、セキュリティに関連しているとは見なされません。隠すことによるセキュリティです。

ハッカーがあなたのデータベースを取得した場合、彼はあなたのユーザーパスワードをブルートフォース攻撃を開始することができます。ハッカーがいくつかのパスワードを解読できれば、そのハッカーがあなたのコショウを識別するのにそれほど時間はかかりません。

Related questions

MORE COOL STUFF

「水曜日」シーズン1の中心には大きなミステリーがあります

「水曜日」シーズン1の中心には大きなミステリーがあります

Netflixの「水曜日」は、典型的な10代のドラマ以上のものであり、実際、シーズン1にはその中心に大きなミステリーがあります.

ボディーランゲージの専門家は、州訪問中にカミラ・パーカー・ボウルズが輝くことを可能にした微妙なケイト・ミドルトンの動きを指摘しています

ボディーランゲージの専門家は、州訪問中にカミラ・パーカー・ボウルズが輝くことを可能にした微妙なケイト・ミドルトンの動きを指摘しています

ケイト・ミドルトンは、州の夕食会と州の訪問中にカミラ・パーカー・ボウルズからスポットライトを奪いたくなかった、と専門家は言う.

一部のファンがハリー・スタイルズとオリビア・ワイルドの「非常に友好的な」休憩が永続的であることを望んでいる理由

一部のファンがハリー・スタイルズとオリビア・ワイルドの「非常に友好的な」休憩が永続的であることを望んでいる理由

一部のファンが、オリビア・ワイルドが彼女とハリー・スタイルズとの間の「難しい」が「非常に友好的」な分割を恒久的にすることを望んでいる理由を見つけてください.

エリザベス女王の死後、ケイト・ミドルトンはまだ「非常に困難な時期」を過ごしている、と王室の専門家が明らかにする 

エリザベス女王の死後、ケイト・ミドルトンはまだ「非常に困難な時期」を過ごしている、と王室の専門家が明らかにする 

エリザベス女王の死後、ケイト・ミドルトンが舞台裏で「非常に困難な時期」を過ごしていたと伝えられている理由を調べてください.

セントヘレナのジェイコブのはしごを登るのは、気弱な人向けではありません

セントヘレナのジェイコブのはしごを登るのは、気弱な人向けではありません

セント ヘレナ島のジェイコブズ ラダーは 699 段の真っ直ぐ上る階段で、頂上に到達すると証明書が発行されるほどの難易度です。

The Secrets of Airline Travel Quiz

The Secrets of Airline Travel Quiz

Air travel is far more than getting from point A to point B safely. How much do you know about the million little details that go into flying on airplanes?

Where in the World Are You? Take our GeoGuesser Quiz

Where in the World Are You? Take our GeoGuesser Quiz

The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!

バイオニック読書はあなたをより速く読むことができますか?

バイオニック読書はあなたをより速く読むことができますか?

BionicReadingアプリの人気が爆発的に高まっています。しかし、それは本当にあなたを速読術にすることができますか?

パンデミックは終わったかもしれないが、Covid-19 は終わっていない

パンデミックは終わったかもしれないが、Covid-19 は終わっていない

2021 年 6 月 8 日にニューヨーク市で開催された covid-19 パンデミックで亡くなった人々の命を偲び、祝うために、ネーミング ザ ロスト メモリアルズが主催するイベントと行進の最中に、グリーンウッド墓地の正門から記念碑がぶら下がっています。週末、ジョー・バイデン大統領は、covid-19 パンデミックの終息を宣言しました。これは、過去 2 年以上にわたり、公の場でそうするための長い列の中で最新のものです。

デビル・イン・オハイオの予告編は、エミリー・デシャネルもオハイオにいることを明らかにしています

デビル・イン・オハイオの予告編は、エミリー・デシャネルもオハイオにいることを明らかにしています

オハイオ州のエミリー・デシャネル みんな早く来て、ボーンズが帰ってきた!まあ、ショーボーンズではなく、彼女を演じた俳優. エミリー・デシャネルに最後に会ってからしばらく経ちました.Emily Deschanel は、長期にわたるプロシージャルな Bones の Temperance “Bones” Brennan としてよく知られています。

ドナルド・トランプはFBIのマー・ア・ラーゴ襲撃映像をリリースする予定ですか?

ドナルド・トランプはFBIのマー・ア・ラーゴ襲撃映像をリリースする予定ですか?

どうやら、ドナルド・トランプに近い人々は、今月初めにFBIによって家宅捜索された彼のMar-a-Lago財産からの映像を公開するよう彼に勧めています. 前大統領はテープを公開するかどうかを確認していませんが、息子はフォックス・ニュースにそうなるだろうと語った.

Andor は、他の Star Wars ショーから大きな距離を置きます。

Andor は、他の Star Wars ショーから大きな距離を置きます。

アンドールの一場面。数十年前、ジョージ・ルーカスがスター・ウォーズのテレビ番組を制作するのを妨げた主な理由は、お金でした。

ケイト・ミドルトンとウィリアム王子は、彼らが子供たちと行っているスパイをテーマにした活動を共有しています

ケイト・ミドルトンとウィリアム王子は、彼らが子供たちと行っているスパイをテーマにした活動を共有しています

ケイト・ミドルトンとウィリアム王子は、子供向けのパズルの本の序文を書き、ジョージ王子、シャーロット王女、ルイ王子と一緒にテキストを読むと述べた.

事故で押しつぶされたスイカは、動物を喜ばせ水分補給するために野生生物保護団体に寄付されました

事故で押しつぶされたスイカは、動物を喜ばせ水分補給するために野生生物保護団体に寄付されました

Yak's Produce は、数十個のつぶれたメロンを野生動物のリハビリ専門家であるレスリー グリーンと彼女のルイジアナ州の救助施設で暮らす 42 匹の動物に寄付しました。

デミ・ロヴァートは、新しいミュージシャンのボーイフレンドと「幸せで健康的な関係」にあります: ソース

デミ・ロヴァートは、新しいミュージシャンのボーイフレンドと「幸せで健康的な関係」にあります: ソース

8 枚目のスタジオ アルバムのリリースに向けて準備を進めているデミ ロヴァートは、「スーパー グレート ガイ」と付き合っている、と情報筋は PEOPLE に確認しています。

Plathville の Kim と Olivia Plath が数年ぶりに言葉を交わすことへようこそ

Plathville の Kim と Olivia Plath が数年ぶりに言葉を交わすことへようこそ

イーサン プラスの誕生日のお祝いは、TLC のウェルカム トゥ プラスビルのシーズン 4 のフィナーレで、戦争中の母親のキム プラスと妻のオリビア プラスを結びつけました。

仕事の生産性を高める 8 つのシンプルなホーム オフィスのセットアップのアイデア

仕事の生産性を高める 8 つのシンプルなホーム オフィスのセットアップのアイデア

ホームオフィスのセットアップ術を極めよう!AppExert の開発者は、家族全員が一緒にいる場合でも、在宅勤務の技術を習得しています。祖父や曽祖父が共同家族で暮らしていた頃の記憶がよみがえりました。

2022 年、私たちのデジタル ライフはどこで終わり、「リアル ライフ」はどこから始まるのでしょうか?

20 年前のタイムトラベラーでさえ、日常生活におけるデジタルおよびインターネットベースのサービスの重要性に驚くことでしょう。MySpace、eBay、Napster などのプラットフォームは、高速化に焦点を合わせた世界がどのようなものになるかを示してくれました。

ニューロマーケティングの秘密科学

ニューロマーケティングの秘密科学

マーケティング担当者が人間の欲望を操作するために使用する、最先端の (気味が悪いと言う人もいます) メソッドを探ります。カートをいっぱいにして 3 桁の領収書を持って店を出る前に、ほんの数点の商品を買いに行ったことはありませんか? あなたは一人じゃない。

地理情報システムの日: GIS 開発者として学ぶべき最高の技術スタック

地理情報システムの日: GIS 開発者として学ぶべき最高の技術スタック

私たちが住んでいる世界を確実に理解するには、データが必要です。ただし、空間参照がない場合、このデータは地理的コンテキストがないと役に立たなくなる可能性があります。

Language