今回はハッシュについて、Windowsで使用していこうと思います。
このところ、世間を騒がせているパスワードハッシュがありますが、まずはハッシュというものがどういったものか知ることがいいかなと思っています。
なお、私はこの業界に入ったばかりの頃はわかっていませんでした・・・
また、記載内容に間違っている点がある可能性もありますので、その際はご教示いただければ幸いです。
ハッシュ関数について
まずはハッシュ関数についてです。
ハッシュ関数は主に検索の高速化やデータ比較処理の高速化、さらには改竄の検出に使われる。例えば、データベース内の項目を探したり、大きなファイル内で重複しているレコードや似ているレコードを検出したり、核酸の並びから類似する配列を探したりといった場合に利用できる。
ハッシュ関数の入力を「キー (key)」と呼ぶ。ハッシュ関数は2つ以上のキーに同じハッシュ値をマッピングすることがある。多くの場合、このような衝突の発生は最小限に抑えるのが望ましい。したがって、ハッシュ関数はキーとハッシュ値をマッピングする際に可能な限り一様になるようにしなければならない。用途によっては、他の特性も要求されることがある。ハッシュ関数の考え方は1950年代に遡るが、ハッシュ関数の設計の改善は今でも盛んに研究されている。
参考:https://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E9%96%A2%E6%95%B0
とまあ色々書いてあります。
個人的にちゃんと分かってほしいことは「ハッシュ化≠暗号化」であることです。
ちなみにこれについては、私は業界はいりたての頃に先輩にがっつり怒られたので、皆様も気を付けましょう。
実際に使用してみる
では実際にハッシュを使ってみましょう。
昔のWindowsには実装されていなかったと記憶していますが、現在(Windows7位からかな?)はWindowsのコマンドプロンプトからハッシュ値を求めることができます。
certutil -hashfile <ファイルパス> [ハッシュアルゴリズム]
ハッシュのアルゴリズムとして指定できるのは以下です。
ハッシュ アルゴリズム: MD2 MD4 MD5 SHA1 SHA256 SHA384 SHA512
実際にコマンドプロンプトで使用してみましょう。
テキストエディタに「aaaaa」と記載した「test.txt」を作成しこのハッシュ値を求めます。
>certutil -hashfile test.txt SHA1 SHA1 ハッシュ (対象 test.txt): df51e37c269aa94d38f93e537bf6e2020b21406c CertUtil: -hashfile コマンドは正常に完了しました。
SHA1でハッシュを行いましたが、値は「df51e37c269aa94d38f93e537bf6e2020b21406c」となりました。
皆様のお手元の環境で、テキストファイルの内容を「aaaaa」として、同じようにハッシュ値を求めても同じ結果(値)になるかと思います。
実際の使用方法としては、例として「Ubuntu Desktopイメージ」をダウンロードするとします。
まずはサイトに行ってダウンロードするファイルを選びます。
赤枠で囲われたファイルをダウンロードします。その際に右側に「md5sum: bd606d253091edca54e56e4ffc2dce74」という文字列があるかと思います。
なんでMD5だけなんだろうかと少し思いましたが、ダウンロードしたファイルのハッシュ値(MD5)を求めてみます。
>certutil -hashfile ubuntu-ja-18.04.1-desktop-amd64.iso MD5 MD5 ハッシュ (対象 ubuntu-ja-18.04.1-desktop-amd64.iso): bd606d253091edca54e56e4ffc2dce74 CertUtil: -hashfile コマンドは正常に完了しました。
上記のようにサイトで記載されている値とおなじ値が求められました。
これでサイトからダウンロードしたファイルはMD5で求めたハッシュ値で同じ値になったので、改ざんされている可能性が低いと判断できます。
※MD5については、ハッシュの衝突耐性について違う内容でも同じハッシュ値がでるとの問題が指摘されていますので、こういった表記にさせて頂きました。
こういった具合にダウンロードするファイルが改ざんされていないことを確認するために使用することができます。
他にもデータベースに保存されたパスワードをハッシュ化して保存する等がありますが、それはまた今度ということで・・・
まとめ
ハッシュについてと、Windowsでのハッシュ値の検証を行ってみました。
ツールやVMイメージ等を皆様もよくダウンロードすることもあるかと思いますが、その際は一度ハッシュ値を求めてみて、そのファイルが改ざんされていないか検証をすると安全かと思います。
また、いつになるかわかりませんが、MD5の衝突の検証とかもできたらいいな~と考えています。
不明点や要望やこういったこともやって欲しいとの要望があれば、お問い合わせページやコメント、ツイッターからでも結構ですので、気軽にご連絡ください。
コメント