hashの応用

今までhashといえば、

hash
データ管理用のデータ。要素の参照にキーを設定する

と覚えてました。なので、{1 => 一}など単純なhashを使ってます。




しかし、今回はhashの応用した使い方について勉強します。

hash
データに対し何らかの操作を実行し、そのデータの像となる値を得る


まず、SHA-256を使ってハッシュ値を求めるプログラムsha256.rbを書きました。それを使って、sha.rbのハッシュ値を求めてみた

C:xxx>ruby sha256.rb sha256.rb
hush -> 52bdbcadbb23c9676fa6b8d1e36fe431a97bceff38a0ff7561e362b91f9b8aff

次はsha256.rbをコピーして、sha256_2.rbを作成する。sha256_2.rbには改行を加えてハッシュ値を求めると

C:xxx>ruby sha256.rb sha256_2.rb
hush -> 9d1791869a784a636289328e8505c688563cc39abcd3419a406f6a2e80bab9e9

sha256.rbとsha256_2.rbでは全く違うハッシュ値になった。
ファイルを配布している人が公開しているハッシュ値と、受け取った人のファイルのハッシュ値を比べるとファイルが正しいかどうか判断できる。

ただし、ハッシュ値が同じだからと言って絶対に信用できるわけではない。

  • コンピュータウィルスや悪意のあるソフトウェアを仕込んだパッケージの作成
  • サイズを元のファイルと同じにする
  • ファイルの内容を調節してハッシュ値が得られるようにする

以上、3つの条件を満たしたら、それが正しいファイルかどうか判断できなくなる。まぁ、すっごい大変なことなんだけど。