web-dev-qa-db-ja.com

パスワードを使用してデータを暗号化できるのに、認証にはそれほど強力ではないのはなぜですか?

多くの場合、暗号化ソフトウェアはパスワードベースです。たとえ攻撃者があなたのコンピュータを入手したとしても、パスワードを知らなければデータを入手することはできず、ブルートフォーシングは実行不可能です。

Webサイトはパスワードを使用してユーザーを認証します。特に、ユーザーのパスワードのハッシュを保存します。攻撃者がサーバーにアクセスした場合、パスワードを入手することは困難ですが、実行可能です。それがハッシュが秘密にされている理由です。

どうしてこれなの?暗号化がハッシュよりも壊れにくい理由はありますか?

3
PyRulez

簡単な答えは、それはnotより弱いということです。単にパスワードベースの暗号化は、同等に設計されたパスワードベースの認証システムと同じように(安全ではない)安全です。

7
Stephen Touset

多くの場合、暗号化ソフトウェアはパスワードベースです。たとえ攻撃者があなたのコンピュータを入手したとしても、パスワードを知らなければデータを入手することはできず、ブルートフォーシングは実行不可能です。

力ずくの強制はなぜ実行不可能なのですか?これは主にシステムの設計ともちろんパスワードの強度に依存します。 「パスワード」で暗号化された暗号化平文は「ブルートフォース」に簡単です。さて、とにかくブルートフォースについて尋ねるときに「辞書攻撃」を含めると。

鍵を計算したら、暗号文が壊れていると想定する必要があります。ほとんどすべての平文には、推測が正しいことを検証するのに十分な構造が含まれています。通常、プロトコルは、パスワードを入力するときにユーザーが正しいことを要求します。

Webサイトはパスワードを使用してユーザーを認証します。特に、ユーザーのパスワードのハッシュを保存します。攻撃者がサーバーにアクセスした場合、パスワードを入手することは困難ですが、実行可能です。それがハッシュが秘密にされている理由です。

ハッシュは一般に秘密にされていません。パスワードやキーとしては扱われません。オフラインでの推測が可能なため、それらを漏らしたくない。しかし、それらを完全に秘密にしておくことができれば、パスワード自体を保存し、直接のパスワード比較を実行することもできます(もちろん、サイドチャネル攻撃から保護されています)。

別のセキュリティ層として直接利用可能であると想定されていないとしましょう。

どうしてこれなの?暗号化がハッシュよりも解読が難しい理由はありますか?

そうではありません。暗号化の場合、通常、暗号文は攻撃者が直接利用できます。暗号文の攻撃を開始するために特定のサーバーにアクセスする必要はありません。これは、パスワードハッシュの場合です。

言い換えれば、強化され正しく構成/プログラムされたサーバーが提供できる保護が不足しています。

3
Maarten Bodewes

ここで実際に2つの質問があると思います。

パスワードを使用してデータを暗号化できるのに、認証にはそれほど強力ではないのはなぜですか?

同じ暗号化キーを使用して1人のユーザーのすべてのデータを暗号化する場合、または何らかの安全なストレージがあり、使用したのと同じパスワードでこの1人のユーザーを認証するための安全な機能がある場合、セキュリティに違いはありません暗号化。ただし、これは通常、実際の設定ではありません。つまり、暗号化と認証はさまざまなシナリオで使用されます。

暗号化がハッシュよりも解読が難しい理由はありますか?

暗号化がハッシュやその逆よりも強力であるということではありません。ただし、メッセージの暗号化とパスワードの検証には異なる要件があります。実際、単純にパスワードストレージに暗号化を使用すると安全性が低下し、データ暗号化にハッシュを使用すると元のデータを復元できなくなります。

  • 暗号化
    メッセージを解読できるようにします。ハッシュは一方向のみなので、暗号化にハッシュを使用することはできませんが、AESなどの対称アルゴリズムまたはRSAなどの非対称アルゴリズムを使用する必要があります。暗号化の主要なポイントは、選択されたユーザーだけがメッセージを復号化できることです。大きな問題は、復号化に必要なキーを保護することです。
  • パスワードの検証
    ユーザーが正しいパスワードを入力したかどうかを確認します。サーバーが危険にさらされても強力なパスワードが明らかにならないように、十分に安全にしてください。暗号化は機能しますが、復号化キーを再度保護するという問題があります。つまり、すべてのパスワードに対する単一の侵害ポイントです。 Adobe's desaster を見てください。なぜパスワードの暗号化が悪いのですか。ハッシュにはこの問題はありません。しかし、ブルートフォースをより強力にしてソルトを追加し、十分に遅くするには、 Secure Password Hashingについて を参照してください。
2
Steffen Ullrich

暗号化ハッシュ関数

ハッシュと暗号化の違いについて説明する前に、いわゆる暗号化ハッシュ関数のいくつかのルールを定めることが重要です。ハッシュ関数[〜#〜] h [〜#〜]を暗号化ハッシュ関数にするには、2つの要件があります。

  1. 耐衝突性:値xが指定された場合、ブルートフォースランダム推測よりも優れたアルゴリズムはありませんyH (x)= H(y)
  2. プリイメージの非表示:大きなメッセージスペースが与えられた場合(長さが1〜30のすべての文字列のセットを考えてください)、与えられたH(m)よりも優れたアルゴリズムはありません導出のためのランダムな推測m。つまりハッシュは一方向です。

ハッシュ

Webサイトbob.comがあり、アカウントを設定してログインしたいユーザーAliceがいるシナリオを想像してみましょう。フローは次のようになります。

  • ユーザーAlicebob.comにアクセスし、アカウントを作成します。アリスは、自分の希望するユーザー名とパスワードを含むフォームをサイトに送信します。
  • bob.comはフォームを受信し、データベースに新しいユーザーの新しい行aliceを格納します。先に述べたように、違反による情報漏えいを防ぐために、サイトはデータベースにアリスのパスワードを直接保存しません。そのため、bob.comはソルトパスワードハッシュを保存します。これは、乱数(「塩」)と、乱数と連結されたアリスのパスワードのハッシュを暗号化ハッシュ関数を使用して格納することを意味します[〜#〜] h [〜#〜]

今、ログインフロー:

  • アリスはサイトにログオンしようとします。ログインフォームにパスワード[〜#〜] p [〜#〜]を入力し、[送信]をクリックします。
  • bob.comは[〜#〜] p [〜#〜]を受け取り、アリスのソルトを検索します[〜#〜] s [〜#〜]とハッシュされたパスワード- h、そしてハッシュ関数[〜#〜] h [〜#〜]を使用してチェックを実行し、H(P + S)= hであることを確認します=。正しい場合は、アリスが送信したパスワードは正しく、ログインが続行されます。それ以外の場合、ログインは拒否されます。

アリスのパスワードの情報は失われませんが、直接使用できる形式ではないことに注意してください。ハッシュ化された情報をverifierとして使用できますが、パスワードを複製することはできません[〜#〜] p [〜#〜] Alice以外の気まぐれで入力します。具体的には、パスワードを推測して推測した場合[〜#〜] p [〜#〜]は、指定されたハッシュhとsalt [〜# 〜] s [〜#〜]の場合、暗号化ハッシュ関数で保証されているように、ランダムな推測よりも優れたアルゴリズムはありません。

暗号化

暗号化には、元のデータを検索するための逆演算decryptionが必要であるというハッシュの難しさが追加されています。復号化するとき、ユーザーは、何らかの大きな鍵空間からランダムに(疑似)引き出された、何らかの形式の復号化鍵を提供する必要があります(すべての1024ビット文字列と考えてください)。ここで、暗号化スキームの要件の1つは、暗号化されたテキスト(つまり、暗号化されたメッセージ)が与えられた場合、キースペースのサイズが線形ではないことを推測できないようにすることです。この分析は上記のハッシュ分析に似ており、実際には、ハッシュと暗号化の両方で、復号化の難しさは使用するキーの長さ(またはハッシュの場合、メッセージの送信元のメッセージスペース)。

もちろん、これはAESなどの適切な暗号化アルゴリズムを想定しており、プロトコルの問題は考慮されていません。欠陥のあるプロトコルは、キースペース全体を試す際の「ショートカット」を提供するため、主に壊れやすいため、たとえば、 SO上の3DESに関するこの応答 を参照してください。

1
a10y