web-dev-qa-db-ja.com

難読化、ハッシュ、暗号化の違いは何ですか?

難読化、ハッシュ、暗号化の違いは何ですか?

これが私の理解です:

  • ハッシュは一方向のアルゴリズムです。元に戻すことはできません
  • 難読化は暗号化に似ていますが、理解するために「秘密」を必要としません(ROT13は一例です)
  • 暗号化は元に戻すことができますが、そのためには「秘密」が必要です
30
Robert Taylor

ハッシュは、より大きなデータに基づいて半一意のキーを作成する手法です。特定のハッシュでは、最終的に「衝突」(たとえば、同じハッシュ値に計算される2つの異なるデータ)が発生します。その場合、通常、より大きなハッシュキーサイズを作成します。

難読化には、一般に、役立つ手がかり(つまり、意味のある変数/関数名)を削除しようとすること、空白を削除して読みにくくすること、そして一般的に複雑な方法で物事を実行して、何が起こっているのかを追跡するのが困難になることが含まれます。 「真の」暗号化のような深刻なレベルのセキュリティは提供しません。

暗号化はいくつかのモデルに従うことができます。そのうちの1つは、秘密鍵暗号化と呼ばれる「秘密」方式であり、両方の当事者が秘密鍵を持っています。公開鍵暗号化では、共有の一方向鍵を使用して暗号化し、秘密受信者鍵を使用して復号化します。公開鍵を使用すると、受信者だけが秘密を持っている必要があります。

29
theraccoonbear

それは高レベルの説明です。私はそれらを洗練しようとします:

ハッシュ-完璧な世界では、それはランダムオラクルです。同じ入力Xに対して、常に同じ出力Yを受け取ります。これは、Xとはまったく関係ありません。これは数学的に不可能です(または少なくとも可能であることが証明されていません)。最も近いのはTrapdoor関数です。 H(X) = Y for with H-1(Y)= Xは非常に難しいので、H(Z) = Y

難読化(私の意見)-f(a) = bで、fが秘密であることに依存している関数f。Fはハッシュ関数かもしれませんが、「難読化」の部分はセキュリティを意味します。これまでROT13を見たことがない場合は、難読化されます。

暗号化-Ek(X)= Y、Dl(Y)= Xここで、Eはすべての人に知られています。 kとlはキーであり、同じである可能性があります(対称では、同じです)。 Yは暗号文、Xは平文です。

7
Tom Ritter

ハッシュ一方向アルゴリズムに使用されます参照を損なうことなく入力を参照と比較します。

ログインでパスワードを比較するためによく使用されます。クレジットカードを使用して買い物をする場合は、レシピでも見つけることができます。そこにいくつかの番号が隠されたクレジットカード番号があります。このようにして、カードが商品の購入に使用されたことを高い確率で証明できます誰かがあなたのゴミを検索している間、あなたのカードの番号を見つけることができません。

非常に素朴で単純なハッシュは "文字列の最初の3文字"です。つまり、「abcdefg」のハッシュは「abc」になります。この関数は明らかに元に戻すことはできません。これがハッシュの全体的な目的です。ただし、「abcxyz」のハッシュはまったく同じであることに注意してください。これは衝突と呼ばれます。繰り返しますが、a ハッシュは、2つの比較された値が同じであることを特定の確率で証明するだけです

もう1つの非常に単純で単純なハッシュは、数値の5モジュラスです。ここでは、6、11、16などがすべて同じハッシュを持っていることがわかります:1。

最新のハッシュアルゴリズムは、衝突の数をできるだけ少なくするように設計されていますが、完全に回避することはできません。経験則では、ハッシュが長いほど、衝突が少なくなります。

6
Erkie

難読化暗号化では入力データをエンコードしていますハッシュまたは暗号化されています。

これにより、正しい平文を判別することが難しくなるため、ブルートフォース攻撃の実行可能性が低くなります。

3
Rinat Abdullin

これは私がいつもそれを見てきた方法です。

  • ハッシュとは、設定されたアルゴリズムを使用して、別の値から値を導出することです。使用するアルゴによっては、これは一方向である場合とそうでない場合があります。

  • 難読化は、記号の置換によって何かを読みにくくしています。

  • 暗号化はハッシュに似ていますが、値がアルゴリズムに提供する別の値に依存する点が異なります。

2
Wes P

それは悪い高レベルの説明ではありません。追加の考慮事項は次のとおりです。

ハッシュは通常、大量のデータをはるかに小さいサイズに縮小します。これは、たとえば、比較するために2つのコピーがなくても、ファイルの内容を確認するのに役立ちます。

暗号化にはいくつかの秘密データの保存が含まれ、秘密データのセキュリティは、悪意のある人物から別の「キー」を安全に保つことに依存します。

難読化とは、個別のキーなしで(または固定キーを使用して)一部の情報を非表示にすることです。この場合、メソッドを秘密にしておくことが、データを安全に保つ方法です。

これから、ハッシュアルゴリズムがデジタル署名とコンテンツの検証にどのように役立つか、暗号化を使用してファイルとネットワーク接続を保護する方法、およびデジタル著作権管理に難読化を使用する理由を理解できます。

2
Mark Bessey

簡単な答え:

ハッシュ-一部のデータにチェックフィールドを作成します(データがいつ変更されたかを検出するため)。これは一方向性関数であり、元のデータをハッシュから導出することはできません。このための一般的な標準は、SHA-1、SHA256などです。

難読化-データ/コードを変更して、他の人を混乱させます(実際の保護はありません)。これにより、元のデータの一部が失われる場合と失われない場合があります。これには実際の基準はありません。

暗号化-キーを使用してデータを変換し、正しいキーを持っている人だけがデータを理解できるようにします。暗号化されたデータを復号化して、元のデータを取得できます。一般的な標準は、DES、TDES、AES、RSAなどです。

1
selwyn

難読化が暗号化と実際には似ていないことを除いて、すべて問題ありません。ROT13のように単純な暗号さえ含まれていない場合もあります。

0
Cade Roux

難読化とは、何かを隠したり、理解しにくくしたりすることです。

ハッシュは入力を受け取り、それを関数で実行し、入力への参照となる出力を生成します。これは必ずしも一意ではありません。関数は、異なる入力に対して同じ出力を生成できます。

暗号化は、独自の方法で入力を出力に変換します。 1対1の相関関係があるため、データの損失や混乱が​​発生する可能性はありません。出力は、あいまいさなしにいつでも入力に戻すことができます。

0
Ray
  • ハッシュは、ある値を別の値から作成する一方向のタスクです。アルゴリズムは、できるだけ短く、できるだけ一意の値を作成しようとする必要があります。

  • 難読化とは、セマンティクスを変更せずに何かを読めなくすることです。これには、値の変換、空白の削除などが含まれます。難読化の一部の形式は一方向でもある可能性があるため、開始値を取得することは不可能です。

  • 暗号化は双方向であり、常に逆の方法で機能する復号化があります。

だから、はい、あなたはほとんど正しいです。

0
Milan Babuškov

難読化とは、誰かを混乱させるテクニックを導入することによって、何かを理解しにくくすることです。コード難読化ツールは通常、名前を変更して変数名またはメソッド名から意味のあるものを削除することでこれを行います。使用するために復号化する必要がないという点で、暗号化とは異なります。

通常、ハッシュと暗号化の違いは、ハッシュは通常、データを別の形式に変換する式を使用するだけであり、暗号化は暗号化/復号化にキーを必要とする式を使用することです。例としては、ハッシュアルゴリズムであるbase 64エンコーディングがあり、md5は暗号化アルゴリズムです。誰でもbase64でエンコードされたデータをハッシュ解除できますが、キーなしでmd5で暗号化されたデータの暗号化を解除することはできません。

0
Jeremy