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

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

ケイト・ブランシェットは3日間一緒に夫と一緒に寝て、25年経ってもまだ夫と結婚しています

ケイト・ブランシェットは3日間一緒に夫と一緒に寝て、25年経ってもまだ夫と結婚しています

ケイト・ブランシェットは、夫に会ったとき、典型的な交際のアドバイスに逆らいました。

マイケルシーンが非営利の俳優である理由

マイケルシーンが非営利の俳優である理由

マイケルシーンは非営利の俳優ですが、それは正確にはどういう意味ですか?

ホールマークスターのコリンエッグレスフィールドがRomaDramaLiveでスリル満点のファンと出会う![エクスクルーシブ]

ホールマークスターのコリンエッグレスフィールドがRomaDramaLiveでスリル満点のファンと出会う![エクスクルーシブ]

特徴的なスターのコリン・エッグレスフィールドは、RomaDrama Liveでのスリル満点のファンとの出会いについて料理しました!加えて、大会での彼のINSPIREプログラム。

「たどりつけば」をオンラインでストリーミングできない理由

「たどりつけば」をオンラインでストリーミングできない理由

ノーザンエクスポージャーが90年代の最も人気のある番組の1つになった理由を確認するには、Blu-rayまたはDVDプレーヤーをほこりで払う必要があります。

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

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

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

ドミニカのボイリング湖:アクセスは簡単ではありませんが、ハイキングする価値があります

ドミニカのボイリング湖:アクセスは簡単ではありませんが、ハイキングする価値があります

ドミニカのボイリング湖は、世界で2番目に大きいボイリング湖です。そこにたどり着くまでのトレッキングは大変で長いですが、努力する価値は十分にあります。

私たちの水をきれいに保つのを助けるためにあなたの髪を寄付してください

私たちの水をきれいに保つのを助けるためにあなたの髪を寄付してください

サロンからのヘアトリミングや個人的な寄付は、油流出を吸収して環境を保護するのに役立つマットとして再利用できます。

ホワイトハウスの最も記憶に残る結婚式を見てください

ホワイトハウスの最も記憶に残る結婚式を見てください

過去200年以上の間にホワイトハウスで結婚したのはほんの数人です。彼らは誰でしたか、そしてそこで結婚式を獲得するために何が必要ですか?

驚くほど素晴らしいDropMixミュージックミキシングカードゲームは30ドルで驚くべき取引です

驚くほど素晴らしいDropMixミュージックミキシングカードゲームは30ドルで驚くべき取引です

DropMixはNFC対応のカードゲームで、基本的にはリミックスアーティストになります。現在、Amazonでは$ 30まで下がっており、これまでで最高の価格に匹敵します。ロックバンドで有名なHarmonixによって開発されたDropMixは、おそらく少し野心的すぎるように思われます。結局のところ、ほとんどの人は素晴らしいリズムを持っていませんが、ゲームは驚くほどうまく実行されます。

メアリーJ.ブライジがついにハリウッドウォークオブフェイムスターを獲得

メアリーJ.ブライジがついにハリウッドウォークオブフェイムスターを獲得

写真:APメアリーJ.ブライジは、間もなくハリウッドウォークオブフェイムのスターを獲得します。これは、メアリーJよりもハリウッドウォークオブフェイムのほうが正直なところ恩恵です。

MeltdownとSpectreの脆弱性についてこれまでに知っていることはすべて、簡単な方法で説明されています

MeltdownとSpectreの脆弱性についてこれまでに知っていることはすべて、簡単な方法で説明されています

画像:グラズ工科大学/ NataschaEiblがデザインしたロゴ。MeltdownとSpectreは、攻撃者がシステムメモリに保存されているあらゆる種類の情報にアクセスできるようにする2つの脆弱性に付けられた名前です。

彼のニューヨークの家から追い出されようとしている97歳の第二次世界大戦の獣医。メリーエフィングクリスマス

彼のニューヨークの家から追い出されようとしている97歳の第二次世界大戦の獣医。メリーエフィングクリスマス

日本人に襲われたときに真珠湾にいた97歳の第二次世界大戦のベテランが、ニューヨークのブルックリンから追い出されています。

Zendaya Wishes Boyfriend Tom Holland Happy Birthday with Cuddly Photo: He 'Makes Me the Happiest'

Zendaya Wishes Boyfriend Tom Holland Happy Birthday with Cuddly Photo: He 'Makes Me the Happiest'

Zendaya shared a sweet photo in honor of boyfriend Tom Holland's 26th birthday Wednesday

小さな女性:脳卒中を患った後に病院から解放されたアトランタのジューシーな赤ちゃん:「まだ癒し」

小さな女性:脳卒中を患った後に病院から解放されたアトランタのジューシーな赤ちゃん:「まだ癒し」

シーレン「Ms.JuicyBaby」ピアソンは、先月脳卒中で入院した後、「もう一度たくさんのことをする方法を学ばなければならない」ため、言語療法を受けていることを明らかにしました。

エマストーンは彼女のクリフサイドマリブビーチハウスを420万ドルでリストアップしています—中を見てください!

エマストーンは彼女のクリフサイドマリブビーチハウスを420万ドルでリストアップしています—中を見てください!

オスカー受賞者の世紀半ばの家には、3つのベッドルーム、2つのバス、オーシャンフロントの景色があります。

ジーニー・メイ・ジェンキンスは、母乳育児の経験の中で、彼女は「本当に、本当に落ち込んでいる」と言います

ジーニー・メイ・ジェンキンスは、母乳育児の経験の中で、彼女は「本当に、本当に落ち込んでいる」と言います

ジーニー・メイ・ジェンキンスは、生後4か月の娘、モナコに母乳育児をしていると語った。

投資ノート:Bioscout AU$300万シード

投資ノート:Bioscout AU$300万シード

Bioscoutは、農家を運転席に置くという使命を負っています。Artesian(GrainInnovate)やUniseedと並んで、最新のシードラウンドでチームを支援できることをうれしく思います。問題真菌症による重大な作物の損失は、農民にとって試練であることが証明されています。

リトルマーケットリサーチ1| 2022年のクイックグリンプス遠隔医療市場

リトルマーケットリサーチ1| 2022年のクイックグリンプス遠隔医療市場

遠隔医療は、パンデミック後の時代では新しいものではなく、時代遅れの分野でもありません。しかし、業界を詳しく見ると、需要と供給の強力な持続可能性と、米国で絶え間ない革命となる強力な潜在的成長曲線を示しています。

スタートアップ資金調達環境:タイのスタートアップエコシステムの次は何ですか?

スタートアップ資金調達環境:タイのスタートアップエコシステムの次は何ですか?

2021年は、世界的なベンチャーキャピタル(VC)の資金調達にとって記録的な年でした。DealStreetAsiaによると、東南アジアも例外ではなく、この地域では年間で記録的な25の新しいユニコーンが採掘されました。

ムーアの法則を超えて

ムーアの法則を超えて

計算に対する私たちの欲求とムーアの法則が提供できるものとの間には、指数関数的に増大するギャップがあります。私たちの文明は計算に基づいています—建築と想像力の現在の限界を超える技術を見つけなければなりません。

Language