難読化、ハッシュ、暗号化の違いは何ですか?
ここに私の理解があります:
- ハッシュは一方向のアルゴリズムです。元に戻すことはできません
- 難読化は暗号化に似ていますが、理解するために「秘密」を必要としません (ROT13 はその一例です)。
- 暗号化は元に戻すことができますが、そのためには「秘密」が必要です
難読化、ハッシュ、暗号化の違いは何ですか?
ここに私の理解があります:
ハッシュは、より大きなデータに基づいて半一意のキーを作成する手法です。特定のハッシュでは、最終的に「衝突」が発生し(たとえば、同じハッシュ値で計算される2つの異なるデータ)、その場合、通常、より大きなハッシュキーサイズが作成されます。
難読化には、一般に、役立つ手がかり(つまり、意味のある変数/関数名)を削除しようとすること、空白を削除して読みにくくすること、そして一般的に複雑な方法で物事を実行して、何が起こっているのかを追跡することが困難になります。「真の」暗号化のような深刻なレベルのセキュリティは提供されません。
暗号化はいくつかのモデルに従うことができます。そのうちの1つは、秘密鍵暗号化と呼ばれる「秘密」方式であり、両方の当事者が秘密鍵を持っています。公開鍵暗号化では、共有の一方向鍵を使用して暗号化し、秘密受信者鍵を使用して復号化します。公開鍵を使用すると、受信者だけが秘密を持っている必要があります。
それは高レベルの説明です。私はそれらを洗練しようとします:
ハッシュ-完璧な世界では、それはランダムオラクルです。同じ入力Xに対して、常に同じ出力Yを受け取ります。これは、Xとはまったく関係ありません。これは数学的に不可能です(または少なくとも可能であることが証明されていません)。最も近いのはトラップドア関数です。H-1(Y)= Xの場合のH(X)= Yは非常に難しいため、H(Z)=YとなるようにZをブルートフォースしようとする方がよいでしょう。
難読化(私の意見)-fが秘密であることに依存しているf(a)=bのような任意の関数f。Fはハッシュ関数かもしれませんが、「難読化」の部分は、隠すことによるセキュリティを意味します。これまでROT13を見たことがない場合は、難読化されます
暗号化-Ek(X)= Y、Dl(Y)= Xここで、Eはすべての人に知られています。kとlはキーであり、同じである可能性があります(対称では、同じです)。Yは暗号文、Xは平文です。
ハッシュは、参照を損なうことなく入力を参照と比較するために使用される一方向アルゴリズムです。
パスワードを比較するためにログインでよく使用されます。また、クレジット カードを使用して買い物をする場合は、領収書にも表示されます。そこには、いくつかの数字が隠されているクレジットカード番号が表示されます。このようにして、誰かがあなたのゴミを探している間、あなたのカードが物を買うために使用されたことを高い確率で証明できます.あなたのカードの番号を見つけることはできません. .
非常に素朴で単純なハッシュは"文字列の最初の 3 文字"です。つまり、「abcdefg」のハッシュは「abc」になります。この関数は明らかに元に戻すことができません。これがハッシュの目的全体です。ただし、「abcxyz」はまったく同じハッシュを持つことに注意してください。これは衝突と呼ばれます。繰り返しますが、ハッシュは、比較される 2 つの値が同じであることを特定の確率で証明するだけです。
もう 1 つの非常に素朴で単純なハッシュは、数値の 5 モジュラスです。ここで、6、11、16 などはすべて同じハッシュ 1 を持つことがわかります。
最新のハッシュ アルゴリズムは、衝突の数をできるだけ低く抑えるように設計されていますが、完全に回避することはできません。経験則として、ハッシュが長ければ長いほど、衝突は少なくなります。
暗号化における難読化とは、入力データをハッシュまたは暗号化する前にエンコードすることです。
これにより、正しい平文を判別することが難しくなるため、ブルートフォース攻撃の実行可能性が低くなります。
それは悪い高レベルの説明ではありません。追加の考慮事項は次のとおりです。
ハッシュは通常、大量のデータをはるかに小さいサイズに縮小します。これは、たとえば、比較するために2つのコピーを用意しなくても、ファイルの内容を確認するのに役立ちます。
暗号化にはいくつかの秘密データの保存が含まれ、秘密データのセキュリティは、悪意のある人物から別の「キー」を安全に保つことに依存します。
難読化とは、個別のキーなしで(または固定キーを使用して)一部の情報を隠すことです。この場合、メソッドを秘密にしておくことが、データを安全に保つ方法です。
これから、ハッシュアルゴリズムがデジタル署名とコンテンツ検証にどのように役立つか、暗号化を使用してファイルとネットワーク接続を保護する方法、およびデジタル著作権管理に難読化を使用する理由を理解できます。
これは私がいつもそれを見た方法です。
ハッシュとは、設定されたアルゴリズムを使用して、別の値から値を導出することです。使用するアルゴによっては、これは一方向である場合とそうでない場合があります。
難読化は、記号の置換によって何かを読みにくくしています。
暗号化はハッシュに似ていますが、値がアルゴリズムを提供する別の値に依存する点が異なります。
簡単な答え:
ハッシュ-一部のデータにチェックフィールドを作成します(データが変更されたことを検出するため)。これは一方向性関数であり、元のデータをハッシュから導出することはできません。このための一般的な標準は、SHA-1、SHA256などです。
難読化-データ/コードを変更して、他の人を混乱させます(実際の保護はありません)。これにより、元のデータの一部が失われる場合と失われない場合があります。これには実際の基準はありません。
暗号化-キーを使用してデータを変換し、正しいキーを持っている人だけがデータを理解できるようにします。暗号化されたデータを復号化して、元のデータを取得できます。一般的な標準は、DES、TDES、AES、RSAなどです。
難読化とは、何かを隠したり、理解しにくくしたりすることです。
ハッシュは入力を受け取り、それを関数で実行し、入力への参照となる出力を生成します。これは必ずしも一意ではありません。関数は、異なる入力に対して同じ出力を生成できます。
暗号化は、独自の方法で入力を出力に変換します。1対1の相関関係があるため、データの損失や混乱の可能性はありません。出力は、あいまいさなしに常に入力に戻すことができます。
ハッシュは、ある値を別の値から作成する一方向のタスクです。アルゴリズムは、できるだけ短く、できるだけ一意の値を作成しようとする必要があります。
難読化とは、セマンティクスを変更せずに何かを読めなくすることです。これには、値の変換、空白の削除などが含まれます。難読化の一部の形式は一方向でもある可能性があるため、開始値を取得することは不可能です。
暗号化は双方向であり、常に逆の方法で機能する復号化があります。
だから、はい、あなたはほとんど正しいです。
難読化とは、誰かを混乱させるテクニックを導入することで、何かを理解しにくくすることです。コード難読化者は通常、名前を変更して、変数またはメソッド名から意味のあるものを削除することでこれを行います。使用するために復号化する必要がないという点で、暗号化とは異なります。
通常、ハッシュと暗号化の違いは、ハッシュは通常、式を使用してデータを別の形式に変換するだけであり、暗号化では暗号化/復号化にキーを必要とする式を使用することです。例として、base 64 エンコーディングがハッシュ アルゴリズムであり、md5 が暗号化アルゴリズムです。誰でも base64 でエンコードされたデータのハッシュを解除できますが、キーがなければ md5 で暗号化されたデータの暗号化を解除することはできません。
難読化が暗号化と実際には似ていないことを除いて、すべて問題ありません-ROT13ほど単純な暗号を含まない場合もあります。