• ベストアンサー

ハッシュ値について

現代暗号入門という本を読んで「ハッシュ値」について解説がありました。 初めて聞く言葉だなと思い、読んでゆくとこれはあれに似ているなと思いました 「あれ」とは CRCという仕組みです ずいぶん前の話ですが、シリアル伝送路にはその途中でのデータ改ざんの恐れがあり、その検出のためにこんな方法があるのだということだったと思います ダイアルアップで接続していたころです この考え方はハッシュ値と同じではないかと思うのです となると、CRCとハッシュ値との間にはどんなかかわりがあるのだろうと思ったわけです どなたかこの疑問に答えてくださいませんか

質問者が選んだベストアンサー

  • ベストアンサー
  • FEX2053
  • ベストアンサー率37% (7995/21384)
回答No.3

以下、wikipediaの記述で、これがわかりやすいかと思います。 「CRC値は、メッセージとの1対1の対応が不可能(メッセージより常に情報量が少ないため)という点は、暗号学的ハッシュ関数によるハッシュ値(以下、単に「ハッシュ値」とする)と同じだが、ハッシュ値はそれでも100ビット程度以上の大きさがあるのが普通であり、また、内容が異なるのに同じハッシュ値となるようなメッセージを偽造したりするのは容易でない(という特性が一般に暗号学的ハッシュ関数には必須である)。それに対し、CRC値は一般に小さく、さらには消失訂正という技法によって同じCRC値になるメッセージを容易に作成可能であり、元のメッセージを少しだけ改変したものでもCRC値を同じにできる。なお、元のメッセージに非常によく似た(ごく低い通信エラーと同程度の差異しか無く、攻撃者の意図で決められたものではなくランダムに変えられたような)メッセージであれば、CRCの設計上、大きく異なるものにはなる。」 要は、CRCは小容量のデータが目的で、改ざんも容易なために「単純なデータ送信時の誤り確認」にしか使えないのに対し、ハッシュ値は大容量のデータ比較が目的で改ざんが難しい・・・という差があります。 CRCは基本的に処理が簡単なので、計算速度の遅いコンピュータでも容易に使えたのに対し、ハッシュ値は計算が複雑でパワーのあるコンピュータでしか使えなかったという問題もあり、CRCによる符号訂正は現在「レガシー技術」の世界でしか使ってないと思います。

noname#249103
質問者

お礼

回答ありがとうございます よくわかりました 暗号に興味を持って本を読んでいるうちにハッシュ値という言葉にたどり着きました また何かの機会がありましたらよろしくお願いします

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • asciiz
  • ベストアンサー率70% (6871/9771)
回答No.4

「ハッシュ値」という言葉自体は、大量のデータに対して何らかの演算をし、そのデータ全体の特性を表した小さなデータ、という意味です。 そしてハッシュ値を求める方法には、いろいろなものがあります。 CRCはその具体的な方法のうちの、一つです。 単純にデータの合計値を求めるだけのチェックサム方式や、ビット数の偶奇を揃えるだけのパリティビット方式も、ハッシュ値を求める方法の1つと言えます。 --以下余談かも-- ・パリティビット方式は、元データの1となっているビット数を数えて、常に偶数または常に奇数になるよう、0または1を末尾につけます。 まあこんなチェックでは、2か所以上ノイズが載ったら、偶然で合うことも十分考えられ、データの完全性はあまり期待できません。 それでも、7ビットごとに1ビットのパリティを付ければ、その7ビット間にノイズが2か所乗るというのも考えにくいので、かなりの精度でチェックできることになります。 (しかし送信データ全体の1/8がチェックデータに使われるというのは、効率の悪い話です。) ・チェックサム方式は、任意バイト数のデータをすべて合計し、下位1バイト(または2バイト)のチェックサム値を求めます。 これもたとえば、255バイトごとに1バイトのSUMを求めることにすれば、チェックが合わなかったときに256バイトのどこかにエラーがある、という検出ができます。 2か所以上にエラーが生じた場合でも、エラー同士の増減が等しくなければ、チェックサムは合わず、とりあえずのエラー検出はできます。 またパリティビット方式に比べて、本体データ量:チェックデータ量の比は7:1から255:1となり、かなり効率よくなりますね。 しかし、人為的なデータ操作には弱いという弱点もあります。 チェックサムが合うようにデータを書き換えられたなら、エラーを検出できません。 そして次あたりに出てくるのが、CRCです。 これはざっくりいうと、割り算の剰余をチェックデータに使うものです。 データ列をとても大きな数値だとみなして、特定の数で割っていきます。 ここで割り算の筆算を思い浮かべてもらうと、数字の上位桁数個を使って計算し、その余りと続きの桁を下ろしてきて、計算を続けますよね。実はこれと同じ原理で、数字全体の桁数がムチャクチャ多くても、「剰余」は求めていけるんです。 ※割り算の結果=「商」は、求めません。商は求めた次の瞬間に破棄してしまい、最終的に1つの「剰余」さえ求められればいいんです。 この方式により、チェックサムではすり抜けられたような、合計が合うようにデータを増減するとか、任意のデータの場所を入れ替えるという方法では、CRCチェックをごまかせません。 CRC値が狂わないようにデータを書き換えるのはそれなりの労力が必要になります。 そしてパリティビットやチェックサム方式に比較して、もっと大きなデータブロックに対してCRCを付与しても、十分に信頼度のあるエラーチェックができます。 しかしそのCRCにも弱点はあります。 そこでさらに優秀なハッシュ関数、MD5や、SHA-○○などが開発され、年々改良されています。 ---- 「暗号化する」ということと「ハッシュ値を求める」ということは似ている部分がありますが、決定的な違いがあります。 「ハッシュ値から元のデータは復元できない」ということです。 まあそりゃそうです、何百分の一、あるいは何万分の一になったデータから元のデータ列が再生できたなら、どんな超圧縮技術が発明されたんだってことになりますが、さすがにそんなことはあり得ません。 ハッシュ値の意味とは、 「ハッシュ値が違うなら、受け取ったデータはどこかが壊れている」 そして 「ハッシュ値が等しいなら、データはまず改竄されていないと信用できる」 というところにあります。 まあ、偶然にもハッシュ値が合うように複数個所のデータ破損が起こり、検出できなかった、ということは当然あり得るのですが。 そういう破損にも強い計算方法であること、1ビットでも違えばハッシュ値が大きく変わるものであること、ハッシュ値の変わらない改竄方法がなかなか見つからないようなものであること、そういう条件を満たすものほど、「優秀なハッシュ関数」であると言えます。

noname#249103
質問者

お礼

回答ありがとうございます よくわかりました CRCはハッシュの一形態である CRCはすでに過去のものかと思ったのですが、そうではない ありがとうございました

すると、全ての回答が全文表示されます。
回答No.2

  CRCとハッシュ値は計算方法が違う  

noname#249103
質問者

お礼

回答ありがとうございます 計算方法は違うんですね 用途はどうでしょう どんな時に使われるものなのか

すると、全ての回答が全文表示されます。
  • 121CCagent
  • ベストアンサー率52% (16046/30722)
回答No.1

ハッシュ値 http://e-words.jp/w/%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E5%80%A4.html ハッシュ値 (hash value) https://wa3.i-3-i.info/word11949.html 巡回冗長検査 https://www.weblio.jp/content/%E5%B7%A1%E5%9B%9E%E5%86%97%E9%95%B7%E6%A4%9C%E6%9F%BB 巡回冗長検査 https://ja.wikipedia.org/wiki/%E5%B7%A1%E5%9B%9E%E5%86%97%E9%95%B7%E6%A4%9C%E6%9F%BB 等々検索したら色々出てきます。 CRCはデータの誤りを修正りたりする場合に使うものでハッシュ値はファイルの同一性を見るためのもので目的が違うような気はしますけどね。

noname#249103
質問者

お礼

回答ありがとうございます 目的が違うとのこと ファイルの同一性を検証するという目的に使うというハッシュ値 ファイルの同一性を検証しなければならない場面とはどういう場面か? あるデータを送信してその送信路での改ざんを疑う場合、ハッシュ値が使用されるのではないかと思ったのです すると、同じような目的に使用されるCRCは現在利用価値があるのか? などということを考えてしまったのです

すると、全ての回答が全文表示されます。

関連するQ&A