ハッシュ(メッセージダイジェスト)とは?

このQ&Aのポイント
  • ハッシュ(メッセージダイジェスト)とは、データを暗号化するための技術です。
  • ハッシュ関数を使用してデータを変換し、一定の長さの固定長の文字列、つまりメッセージダイジェストを生成します。
  • このメッセージダイジェストを使用して、データを保護し、改ざんまたは盗まれるリスクを低減することができます。
回答を見る
  • ベストアンサー

ハッシュ(メッセージダイジェスト)について

よろしくお願いいたします。 現在セキュリティの勉強をしております。 で、ハッシュについて確認したく投稿いたしました。 自分なりに勉強をして、 送信者がデータをハッシュ関数を使用してメッセージダイジェストを 作成し、受けても同じ事を行うのはわかりました。 つまり、 [データ]+[メッセージダイジェスト(データに添付する)]+[デジタル署名(データに添付する)] の3点をまとめて暗号化し、 受け取った相手が秘密鍵で [データ]+[メッセージダイジェスト]+[デジタル署名]に複合し 自分でもハッシュ関数を使用してメッセージダイジェストを作成し 送り手のダイジェストと比較すると理解しましたが 正しいのでしょうか? また、同じハッシュ関数で自分でも作成するみたいですが どこにハッシュ関数の情報が載っているのですか? いまいち自信が持てませんのでアドバイスお願いいたします。

  • gaia5
  • お礼率99% (116/117)

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

  • ベストアンサー
  • funi2
  • ベストアンサー率53% (14/26)
回答No.1

質問中に書かれていることは正しいです。受け取ったほうも同じハッシュ関数を用いて, ダイジェストを比較して, 改ざんが起きてないか確認します。 さて, ハッシュ関数の情報ですが, MD5というハッシュ関数はRFC1321という規格になっており, その規格書みたいなやつにソースコードが載っております。ただし, このソースコードはちょっと変更しないと使えないので, 頑張ってください。また, SHAというハッシュ関数があり, こちらはCのコンパイラーによってはsha.hというヘッダーファイルで, 提供されていることがあります。 今, 確認したところによると, 参考URLにてMD5ハッシュ関数のソースコードが提供されています。上手く, ファイルに分けて, C言語にて, コンパイルしてください。間違っている箇所というのは, #define MD MD5という文で, これを#define Md 5に変えてください。 SHAについてはhttp://www.cc.utah.edu/~nahaj/c/sha/sha.c.htmlにてC言語でのソースコードが載っています。 また, 自分で新しいハッシュ関数を発明したいというのなら, 共通鍵暗号を勉強して, どんなことをしても可逆変換不可能なものを考えればいいと思います。ハッシュ関数は重要な関数にも関わらず, あまり, 研究報告がされていないと聞いています(専門家と書いていても今年の3月までなのでごめんなさい)。もしかしたらすごく有名な人になれるかもしれません。 ハッシュ関数は自分は"現代暗号"(岡本龍明, 山本博資)という本で勉強しました。 後は, インターネットで流れている論文です。 研究頑張ってください。

参考URL:
http://www.faqs.org/rfcs/rfc1321.html
gaia5
質問者

お礼

回答ありがとうございます。 専門家の方からのアドバイスとても うれしいです。 参考URLもものすごく勉強になります。 ハッシュについてはご指摘の通り 奥が深い割に、あまり資料も少ないみたいですね。 でも、何とかがんばってみます。 誠にありがとうございました。

関連するQ&A

  • デジタル署名のプロセスについて

    次の選択肢の中で、デジタル署名のプロセスとして正しいものはどれか教えて下さい。 1.ハッシュ関数で元データをダイジェストという文字列に変換する→それを自分のプライベート鍵で暗号化する 2.ハッシュ関数で元データを圧縮する→それを自分の公開鍵で暗号化する 3.元データを自分のプライベート鍵で暗号化する 4.元データを自分の公開鍵で暗号化する 5.元データを自分のプライベート鍵で暗号化する→それをハッシュ関数で圧縮す る

  • ハッシュ関数について

    原文をハッシュ関数で暗号化した場合,そのハッシュ値から逆に複合化することは不可能というふうによく書かれていますが,それは何故でしょうか?「不可能」とは「非常に時間がかかる」ということなのでしょうか?

  • デジタル署名について教えてください。

    デジタル署名とは何か? と言う事で検索して自分なりに調べたのですが 1、データが改ざんされていないことを保証 2、文書、作成者が本人に間違いない という結論しか解らずしっくりきません。 パソコンを触った事がない小学生でもわかるように 教えてください。 なぜデジタル署名だと 上記の1,2、となるのですか? またハッシュ値、ハチシュ関数で暗号化ともありましたが 簡単にわかりやすく言うとどういう事なのでしょうか?

  • メールのデジタル署名は、なぜ本文を暗号化しないの?

    デジタル署名の仕組みについて教えてください。 デジタル署名の仕組みは、メールの内容(原文)からメッセージダイジェストを作成し、それを送信者の秘密鍵で暗号化したものを署名として原文(または暗号文)に付けるということですが、どうして単に原文そのものを暗号化したものを署名として送らないのでしょうか? 改ざん防止の為であれば、原文そのものを暗号化して送れば、受信側で改めてメッセージダイジェストを作成し、それと復号化したメッセージダイジェストを突き合わせて検証するようなことをしなくても済むと思うのですが。 いづれにしても公開鍵で復号化できるということは、秘密鍵を持っている送信者が署名した段階から改ざんされていないはずですし、その公開鍵が証明書等により検証できていれば、確かに本人であるということになりますよね。 現実世界の「署名」のように、署名とは原文とは別につけるもの(=わざわざ復号化しなくても原文が読める)、いうことに似せているだけのことでしょうか? (参考URL) http://www.ipa.go.jp/security/awareness/administrator/remote/capter6/7.html

  • 暗号学的ハッシュ関数でbit長が適切って作れますか

    SHA256が(224かもですが)最小bit長で、 入力に1bitでも、また2bit以上入力値全体まで、異なれば、 出力のうちほぼ半数のbitが反転する、かつその 反転するbit位置は複数の入力値に対して法則性はなく、 ほぼランダムである。 という暗号学的ハッシュ関数であるのは、正しいですか? また、データの暗号化に使われるパスワードは4096bitを推奨との 事ですが、 SHA4096などその時に合った暗号学的ハッシュ関数を 作るのは難しいのですか? 素人考えでは、今256bitで衝突が見つかってないなら 4096bitならbit長大きいのだから作れそうな気もしますが やはりそういう問題ではないのでしょうか? もし作れるとしたら、データの暗号化に使うパスワードを SHAなんとか・・・の出力そのまま使っては、危険でしょうか? というかデータに限らず認証のパスワードでも SHAなんとかの出力そのままを使うのは何かまずいのでしょうか? もしできたらパスワードを覚えなくてよいのでいいかと思ったのですが。 パスワードは「IDのパスワード」をSHAなんとかに通した値ということで。 IDは「種パスワード+なんとかのサイト」をSHAなんとかに通した値ということで。 種パスワードはしょうがないからネットをパスワードの決め方とかで検索して 出てきた方法を見て理解して自分なりにアレンジして、最後にちゃんと頭に記憶して。 とりあえずここまで、どうでしょうか。

  • ホームページ作成に関する問題がわかりません <パート3>

    次のホームページ作成に関する問題がわかりません。 教えてください! お願いします。m(__)m <問01>下記に示す階層型ファイルシステムにおいて、home.htmlにリンクを貼るためのパスはどれ? 1.index.html 2.../link.html 3.next/index.html 4.../next/index.html <問02>デジタル署名のプロセスとして正しいものを一つ選びなさい。 1.ハッシュ関数で元データをダイジェストという文字列に変換する→それを自分のプライベート鍵で暗号化する 2.ハッシュ関数で元データを圧縮する→それを自分の公開鍵で暗号化する 3.元データを自分のプライベート鍵で暗号化する 4.元データを自分の公開鍵で暗号化する 5.元データを自分のプライベート鍵で暗号化する→ハッシュ関数で元データを圧縮する <問03>正しい組合せは? a.インターネットはアメリカで開発されたものなので、インターネット上はアメリカの法律が適用される b.cookieとは、インターネットにおける認証システムのひとつである c.HTMLでは、ハートマークなどの特殊文字は書くことができない d.プロバイダ事業を始めるためにはJPNICの会員にならなければならない 1.a:× b:× c:× d:× 2.a:○ b:○ c:× d:○ 3.a:○ b:× c:○ d:○ <問04>以下のさまざまなファイルの圧縮形式のうち、可逆圧縮のものは? 1. JPEG 2. LHZ 3. MJPEG 4. MPEG4 5. MP3 <問05>一般的に多くの視聴者は常に最新版のブラウザにアップグレードしているので、サイト・デザイナーは最新の技術を用いたサイトを構築して他社との競争率を上げる必要がある。 1.YES 2.NO

  • デジタル署名

    デジタル署名とは公開鍵暗号方式を応用したものということですよね。 公開鍵暗号方式では暗号化に公開鍵、複合化に秘密鍵を用いるのに、 デジタル署名では暗号化に秘密鍵、複合化に公開鍵となるのは どうしてなのでしょうか。

  • サーバ証明書等の正当性の確認について。

    サーバ証明書、証明書には、 認証局の署名をSHA-1等のハッシュ関数で、 ハッシュ化されたハッシュ値を、 認証局の秘密鍵で暗号化された認証局の電子署名が付加されていると思いますが、 その部分の信頼性についてですが、 認証局から、 公開鍵を取り寄せて、 ハッシュ値を取り出すと思うのですが、 もともとの平文(署名)を認証局から取り寄せることは可能でしょうか。 認証局の公開鍵で復号できたから、 認証局の秘密鍵で暗号化されているといえるのですが、 もともとの署名が何かがわかりません。 (ちょっと信頼性にかけるような気がします。) 署名を取り寄せることができれば、 署名をSHA-1等を使って、 ハッシュ値を取り出して、 公開鍵で復号したハッシュ値と比較することができます。 公開鍵と平文(署名)を取り寄せることはできないのでしょうか。

  • ディジタル署名について

    情報処理技術者の勉強してます。 公開鍵暗号化方式の問題では、受信者の公開鍵で暗号化して受信者は自分の秘密鍵で複合するとあります。 ディジタル署名では、送信者の秘密鍵で暗号化して送信者の公開鍵で複合化とありますが それならばなぜ公開鍵暗号化方式は送信者の秘密鍵で暗号化して送信者の公開鍵で複合化と回答すると間違いなのでしょうか?

  • あらゆる種類の情報をハッシュで一定量に揃えれるなら

    0バイトの情報(情報が無いという情報)でもデータセンター1棟丸ごとの情報でも、もし仮にハッシュ関数を通すことができれば、一定のビット数で要約ができるのなら(他の情報と区別がつけられるのなら)、情報の表す意味と、その情報の特定性は、切り離す方向で考えたほうがいいのでしょうか。 例1 プログラムの作成時、関数名を決めたいが文字数制限があってうまく決められない→ 自分で充分に満足するような関数名をまずメモ帳にでも書いてみて、プログラムソース上はそのハッシュ値で関数名を決めてしまう。(当然、読みづらいソースになるので、HTMLのブラウザのような専用ビューワやエディターで閲覧編集する) 例2 あるWebサービスである名前でIDを取りたいが既に他人に取られていて自分のものとして使えない→諦めてハッシュをIDとする(それでも取られていたら変更回数として0でも末尾につけてまたハッシュする) そのWebサービスで取りたかったID名との対応表みたいのもまたネットに置いておく(オンラインブックマークにコメント記入するなど)