web-dev-qa-db-ja.com

今日の最強の暗号化およびハッシュアルゴリズム

基本的に、私は今日の最も強力な(最も壊れにくい)暗号化アルゴリズムが何であるかを知りたいです。同じことがハッシュアルゴリズムにも当てはまります。暗号化アルゴリズムの部分に、超強力なパスワードも選択したとしましょう(ボーナス:暗号化アルゴリズムを使用した安全なパスワードの長さはどれくらいですか?)。どれくらいの時間がかかるか、それが今日の「標準」であるかどうかは関係ありません(例:AESは「標準」であると聞きましたが、最も安全なアルゴリズムではないと聞いています)。それが侵入できない限り。

PDATE:これは非常に一般的な質問だと思いますので、少し絞り込みます。私が誰かと安全に通信しようとしている、または誰かに私のテキストを解読してほしくない、そして現在人間が可能な限り安全にしたい、としましょう。どのタイプの暗号化アルゴリズム、どのキーサイズ、どのビットサイズ、およびどの特定のアルゴリズムを使用する必要がありますか?ハッシュについても同じことが言えます。

PDATE:さらに絞り込むために、このケースの「ボブ」には、彼だけが知っている秘密鍵があるとしましょう。世界中のすべての人に暗号化されたメッセージのコピーが渡されたが、それを復号化できるのは「ボブ」だけであるとしましょう。

(これは日陰に聞こえ始めているかもしれませんが、これはすべて架空の状況です。)

3
user244358

その質問に答えることは本当に不可能です。アルゴリズムの「強さ」の普遍的な概念はありません。強さは、本質的に、攻撃に対する抵抗です。攻撃にはさまざまなカテゴリがあるため、強さはどの攻撃に抵抗する必要があるかによって異なります。要件がない場合、暗号化またはハッシュアルゴリズムをどれだけ強力にすることができるかに制限はありません。秘訣は、特定の要件を満たす最強の(または十分に強力な)アルゴリズムを見つけることです。

要件に影響を与えないため、特定の「攻撃」が無関係なアプリケーションがいくつかあります。たとえば、長さ拡張攻撃に対してすべてに対して非常に強力なハッシュアルゴリズムがあるかもしれません。これにより、長さ拡張攻撃が問題にならないアプリケーション(ハッシュの署名など​​)には最強のアルゴリズムになる可能性がありますが、長さ拡張攻撃が問題になるアプリケーション(APIキーなど)にはまったく適していません。

また、特性が大幅に異なる暗号化アルゴリズムには、まったく異なるカテゴリがあります。たとえば、対称暗号化アルゴリズムと非対称暗号化アルゴリズムがあります。

更新1:まだ最も基本的な情報を提供していません。暗号化が機能するためには、意図された受信者が持っている、または知っているものがあり、他の誰も知らない、または持っていないため、メッセージを復号化できます。それが何であるかについての手がかりがなければ、どのクラスのアルゴリズムを見るべきかさえ知る方法はありません。要件がない場合、答えはおそらくワンタイムパッドですが、それはほとんどの場合完全に非現実的です。

更新2:追加情報を使用して、 [〜#〜] rsa [〜#〜] with [ 〜#〜] oaep [〜#〜] は当然の選択です。

2
David Schwartz

bcrypt のようなものがあります。それが非常に遅いという要点。つまり、簡単に言うと、ハッカーが1秒でハッシュを計算できるため、ハッカーがそれを解読するには何年もかかります。 1人のユーザーが1回の認証手順を実行するのにそれほど時間はかかりません。しかし、ハッカーにとって1秒は、何百万もの組み合わせを試さなければならないため、多くのことです。比較すると、SHA-1(たとえば)はミリ秒単位でキャッシュを計算します。ハッカーも同様です。パスワードをブルートフォース攻撃するのは非常に便利です。だから、私は bcrypt をお勧めします。

[〜#〜]編集[〜#〜]@ Huskehnのコメントを大いに認めたいと思います。それがどのように実装されるかは非常に重要です。セキュリティには、最強のハッシュアルゴリズムを選択するだけでなく、多くの側面が含まれます。

1
VL-80