質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

暗号化

ネットワークを通じてデジタルデータをやり取りする際に、第三者に解読されることのないよう、アルゴリズムを用いてデータを変換すること。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

ハッシュ

ハッシュは、高速にデータ検索を行うアルゴリズムのことです。

Q&A

解決済

4回答

1946閲覧

悪さされてないかを調べる方法

aaaaaaaa

総合スコア501

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

暗号化

ネットワークを通じてデジタルデータをやり取りする際に、第三者に解読されることのないよう、アルゴリズムを用いてデータを変換すること。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

ハッシュ

ハッシュは、高速にデータ検索を行うアルゴリズムのことです。

0グッド

0クリップ

投稿2018/03/09 10:44

こちらの頁によると

  • 暗号化目的

たとえば、文書が改竄されていないかをチェックするに当たって、何メガバイトもある全文に対して処理するより、僅かなビット数のハッシュ値に対して操作するほうが容易ですし、また適切なハッシュ関数を選べば、ハッシュ値から元の値に関する情報を得られないようにすることもできます。
SSL証明書の電子署名も、証明書全体ではなく、ハッシュ値に対して行っています。少し前にSHA-1からSHA-2への切り替えというのが話題となりましたが、この2つもハッシュ関数の名称です。

とあります。つまり何か悪戯されてないか調べたい対象をハッシュ知にして、そのハッシュ値を調べることで結果がわかるし、ハッシュ化するまえよりいろいろとらくちんだと認識しました。
ところでハッシュ値をどう調べると悪さされていないかわかるのでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

ハッシュというのは元の大きなデータを不可逆圧縮したものです。

例えば整数を 2 で割って余りを求めると 0 か 1 の二種類になりますが、どんな大きな整数でもこの二種類になるので 1 ビットで表せるようになります。
これがハッシュ値です。
ハッシュ値はそれを求めるアルゴリズムによって変わり、この場合は 2 の剰余を求めるアルゴリズムを使っています。
別のアルゴリズムを使えば別のハッシュ値になります。

さて、元の整数が 132 だったとするとこのアルゴリズムではハッシュ値は 0 になるわけですが、これが 133 に書き換えられるとハッシュ値が 1 に変わります。
これによって値が書き換えられたことがわかるわけです。

2 の剰余を求めるアルゴリズムの場合は 132 が 134 に書き換えられてもわかりません。
同じくどんなアルゴリズムを使ってもそのような場合はあります。
ただ、SHA-1 などではそのような場合になる確率が極めて小さくなるよう工夫してありますので「書き換えられたかどうかが高確率でわかります」ということです。
必ずわかるわけではありません。

投稿2018/03/09 11:39

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

文章を読むだけでは分からないでしょうね。
具体的な例としてハッシュ化アルゴリズムの一つ、MD5を紹介します。

  • どんな文字列からでも、16進数32文字になる
  • 同じ文字列に対して変換かければ必ず同じハッシュ値が生成出来る
  • ハッシュ値は元の文字列に公式を当てはめて無理やり32文字に変換させているので戻せない

因みに殆どのハッシュアルゴリズムは2や3の特徴は同じだったりします。
16進数32文字になるのはMD5の仕様です。

MD5ハッシュ計算ツールを紹介するので、色んな文字を試しに変換してみてください。


悪さされてないかを調べる方法

例えば私が「こんにちは」という文字列を友達に贈ろうとします。
こんにちはをMD5に変換かけると「2316c3ccdb7049dc4b38bb8453e3f538」になります。

MD5は16進数32文字なので128bitです。
2つの文字列をMD5に変換した時に「完全に一致」する確率は「1/2の128乗」です。

なんかしょぼい?
いやいや、128乗ですのでちょっと計算を工夫して…「1,024の12乗に256を掛けた数字」になります。
1,024の2乗ですら100万分の1ですからね……
まぁ元のワードが分からない限り何度試そうが同じハッシュ値を作り出す事は不可能です。

要するに、私が「こんにちは」という文字列を友達に送りつつ、
MD5結果の「2316c3ccdb7049dc4b38bb8453e3f538」を送信したとします。
その場合、悪意の第三者が「こんにちは」という文字列を傍受して改ざんしようとしてもすぐにバレます。


ただし、コンピュータの力を借りて無理やり突破することは可能です。
例えば私がWordの文章で「こんにちは」と書いて渡したとしましょう。

全てのフォントが同じ文字列幅であるとは限りません。
変な値の文字列を挿入することで、不可視な文字を挿し込みつつ一見違和感のない文章を作る事も可能です。

それらを組み合わせて「さようなら」という文字列に改変し、
不可視の文字を大量に埋め込みながらMD5に変換して試して…を繰り返し、
何万文字とゴミデータを差し込み続け見事「2316c3ccdb7049dc4b38bb8453e3f538」の生成に成功したとしましょう。

そこで私が「あっ、さっき送った文書は5文字だからね」と言えばおしまいです。
ファイルにはサイズがありますからね。
ファイルサイズをピタリあわせつつ同じハッシュ値を生成することは極めて困難です。

複数の条件を組み合わせる事で、ハッシュの改ざんに対する牽制力は飛躍的に上がります。
こういった工夫を重ねながら改ざんしてもすぐに判明するという仕組みを構築しているのです。

投稿2018/03/09 12:23

編集2018/03/09 13:43
miyabi-sun

総合スコア21158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

それそのまま、「暗号 ハッシュ」でぐぐるといろいろでてきますんで、読んでみてください

投稿2018/03/09 10:47

y_waiwai

総合スコア87749

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ハッシュ関数、ハッシュ値については他の回答者様方が答えられているので、別なアプローチで。

データをやり取りする方法に「メッセージ認証コード」なるものがあるらしく、以下のような仕組みだそうです。

以下、

plain

1暗号化された元の文書 : X 2送受信者しか知らないハッシュ関数 : H 3ハッシュ値 : x (← これをメッセージ認証コード[Message Authentication Code、MAC]と呼ぶそうです。) 4 5間違った値の時 : ○! 6間違っているかもしれない値の時 : ○?

とする。

  • 正常時

plain

1送信側 : X → H → x 2 3 ↓ Xとxを同時に送る 4 5受信側 : X → H → x → 合ってる
  • 異常時

plain

1送信側 : X → H → x 2 3 ↓Xとxを同時に送る 4 5イタズラ 6 7 ↓X?、x?になる 8 9受信側 : X? → H → x?となる時 → 多分合ってる(「ハッシュ関数が漏れた」か、「[X!,x]で偶々ハッシュ値の衝突が起きた」か、など。イタズラが起きたかは不明) 10 11または 12 13受信側 : X? → H → y(≠x?)となる時 → X!であったか、x!であったか、またはその両方 → イタズラか障害が発生した

私は聞きかじっただけなので詳しいことはわからないですが…(^ ^;

事前にハッシュ関数(またはそれを生成するためのキー)自体も共通鍵暗号方式等で共有する必要があるみたいですね。(これが割れているなら完全な書き換えやなりすましが可能ですから…)

投稿2018/03/09 12:51

編集2018/03/10 03:11
namnium1125

総合スコア2043

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問