Argon2はパスワードハッシュコンテストの優勝者であり、現在パスワードを安全に保管するためにOWASPによって推奨されています。
Argon2の重要なステップの1つは、関数が使用するパラメーターを決定することです。現在のIETFドラフトのタイトルは「 メモリハードArgon2パスワードハッシュおよび作業証明関数 」であり、「パラメータの選択」という名前の章があり、適切なものを見つけるための段階的なガイドを提供しています。パラメーター。
タイプyを選択します。それらの違いがわからない場合、またはサイドチャネル攻撃を実行可能な脅威と見なす場合は、Argon2idを選択してください。
この手順は非常に簡単です。ユースケースに適した他のモードがあることがわかっている場合を除き、デフォルトとしてArgon2idを使用することをお勧めします。
Argon2への各呼び出しによって開始できるスレッドの最大数hを計算します。
このステップは最初の混乱するステップです。どのように多くのスレッドを使用する必要があるかを「把握」するにはどうすればよいですか? 1つのスレッドのみが使用されている場合、それは安全ではありませんか?
各呼び出しが提供できるメモリの最大量mを計算します。
このステップは、より簡単に思えます。ただし、サーバーに128 GB RAMがあり、ピーク時に最大1024の同時ログインが予想される場合、最大128 MBが最大になります。ただし、これは応答しません。多くのユーザー?1 MBが最大である場合は?16 KBが最大である場合?どのポイントが「メモリが少なすぎる」ですか?
各コールが許容できる最大時間xの時間(秒単位)を計算します。
これは簡単なようですが、数値が大きいほど、ログイン速度が犠牲になりますが、クラック耐性が高くなります。
ソルトの長さを選択します。すべてのアプリケーションで128ビットで十分ですが、スペースの制約がある場合は64ビットに減らすことができます。
これは、正常と見なされるデフォルト値を提供するため、非常に役立ちます。
タグの長さを選択します。鍵の導出を含むほとんどのアプリケーションでは、128ビットで十分です。より長いキーが必要な場合は、より長いタグを選択します。
手順5と同様に、これはまともなデフォルトを提供するので便利です。
サイドチャネル攻撃が実行可能な脅威である場合、または確信が持てない場合は、ライブラリの呼び出しでメモリ消去オプションを有効にします。
緩和しようとする脅威について説明しているので役立つ情報。
異なるパス数tを使用して、タイプy、メモリmおよびhレーンおよびスレッドのスキームを実行します。実行時間がxを超えないように、最大のtを計算します。 t 1] ==であってもxを超える場合は、それに応じてmを減らします。
この手順は、最も混乱するものです。アイデアは明らかにシステムをベンチマークし、m、hおよびtの「適切な」値を見つけることですが、優先順位はありませんそれらのパラメータに。メモリは少ないですが、並列度が高く、反復回数が多いのはいいですか?ハイメモリと並列処理についてはどうですか?しかし、反復はほとんどありませんか?
要約する:
Argon2 spec は、非常に詳細な情報を提供します。
どのように多くのスレッドを使用する必要があるかを「把握」するにはどうすればよいですか? 1つのスレッドのみが使用されている場合、それは安全ではありませんか?
必要なスレッドの最大数は、システム上のハードウェアスレッドの数です。 8つの論理コアを提供する4つの物理コアIntel CPUハイパースレッディングは、8つのスレッドでArgon2を実行している必要があります。スレッドを1つだけ使用すると、ハードウェアを最適に使用できなくなります。これは自動的に安全ではありませんが、KDFが同じ量の作業を完了するのに時間がかかることを意味します。 lotのハードウェアスレッドを備えたシステムがある場合は、それをベンチマークすることをお勧めします。
これは答えませんが、ユーザーが10倍になるとどうなるでしょうか。 1 MBが最大の場合はどうなりますか? 16 KBが最大の場合はどうなりますか? 「少なすぎる」記憶はどの点ですか?
仕様によって課される制限を超える効果的な下限はありません。必要なだけ低くすることもできますが、メモリの量が少ないほど、攻撃者はASICなどの高速な専用プロセッサをより簡単に利用できるようになることを覚えておいてください。使用するメモリが多いほど、攻撃にかかる費用が高くなります。可能な限り最大限に使用したい。リソースの制約が原因でメモリをほとんど使用せざるを得ない場合、それに対してできることは何もありません。
この手順は、最も混乱するものです。アイデアは明らかにシステムのベンチマークを行い、m、h、tの「適切な」値を見つけることですが、これらのパラメーターに優先順位はありません。メモリは少ないですが、並列度が高く、反復回数が多いのはいいですか?ハイメモリと並列処理についてはどうですか?しかし、反復はほとんどありませんか?
並列処理は、実際にはメモリをより速く満たすために使用されます。使用するハードウェアスレッドの数が多いほど、メモリの充填と操作が高速になります。メモリと反復の使用に関しては、それはトレードオフを表します。すべてのメモリハードアルゴリズムを使用すると、攻撃者はtime-memory tradeoff(TMTO)攻撃を利用して、使用したメモリよりも少ないメモリを使用して回避することができますただし、計算要件が大幅に増加します。反復が多ければ多いほど、攻撃者が使用する必要のあるメモリの量を減らすために実行する必要がある計算も多くなります。 exact最適値は、攻撃自体の経済性に完全に依存します(たとえば、約16 GiB ofサファイア基板上のTSVを使用した超高速かつ低レイテンシのメモリですが、特定の攻撃者にとって、TMTO攻撃を実行するために計算ユニットを追加するよりも多かれ少なかれコストがかかりますか?)。
姉妹サイトの関連する回答 Cryptography (および argon2タグ )。