前回はハッシュが
どういうものかを
教えてもらったよ!
今回はハッシュの
使い方を学ぼう!
ハッシュを求める計算方法を
「ハッシュアルゴリズム
(hash algorithm)」というよ
代表的なものに
以下があるんだ
ハッシュアルゴリズム | ハッシュ値の長さ | 安全性 | 対応するコマンド |
---|---|---|---|
MD5 | 128 bit | × | md5sum |
SHA-1 | 160 bit | × | sha1sum |
SHA-224 | 224 bit | ○ | sha224sum |
SHA-256 | 256 bit | ○ | sha256sum |
SHA-384 | 384 bit | ○ | sha384sum |
SHA-512 | 512 bit | ○ | sha512sum |
安全性に「×」が
付いているものは
任意のハッシュ値を
生成できる方法が
見つかったなどで
現在では安全に
利用できないものだよ
安全性に「×」が
付いているものは
使っちゃいけない
ということ?
セキュリティに
関わらない内容なら
使っても問題ないよ
例えば
「ダウンロードしたファイルが
データ化けしていないか」を
確認する場合などだよ
逆のことをいうと
「ファイルが意図的に
改ざんされていないか」を
確認する用途では
セキュリティが関わるので
使っちゃダメなんだね!
特に MD5 は処理が速いので
安全に使えないと知られてからも
セキュリティが関わらない用途で
使われ続けているんだ
md5sum
コマンドmd5sum
は
MD5 のハッシュ値を
生成したり確認するよ
md5sum [オプション]... [ファイル]...
オプション | 役割 |
---|---|
-c, | 入力からハッシュ値のチェックを行う |
-q, | チェックでハッシュ値が一致しなかったファイルのみ出力 |
ハッシュアルゴリズムが違うコマンドも使い方は同様なので他のアルゴリズムを使いたい場合はコマンドを読み替えてね
お兄ちゃん!さっそくハッシュ値を求めてみようよ!
まずはハッシュを求める元データを作ろうどのように作ってもいいけど以下のようにしてみようか
echo -n "hello" > ~/hello
echo
の -n
オプションは末尾に改行を付けないだったねhello
ファイルを作るんだね実行したよ!この
hello
ファイルを対象にmd5sum
を実行してみよう!md5sum ~/hello
どんな値が出てくるかワクワクするね!
5d41402abc4b2a76b9719d911017c592 /home/midori/hello
最初がハッシュ値で最後がファイルのパスかな?
そのとおり!複数のファイルを指定しても出力の各行からファイルとハッシュ値の対応がわかるよ!
拡張子が
.md5
や.md5sum
のファイルにはmd5sum
の出力が書かれているんだこのファイルを使えばハッシュ値の検証ができるよ!へぇ…こっちもやってみようよ!
まずは
md5sum
の出力をhello.md5sum
ファイルへ出力しようmd5sum ~/hello > ~/hello.md5sum
うん!実行したよ!
そうしたら
md5sum
に-c
オプションを付けて引数に hello.md5sum
を指定して実行してねmd5sum -c ~/hello.md5sum
-c
オプションを指定すると指定されたファイルのハッシュ値を求めるのではなく指定されたファイルの内容からハッシュ値を確認する動作をしてくれるんだね!/home/midori/hello: OK
OK と出たよ!
hello.md5sum
に記録されていたハッシュ値と実際のファイルのハッシュ値が一致したんだね!ところで一致しなかった場合はどうなるんだろうね?
それなら
hello
ファイルの内容を変更してみようecho >> ~/hello
echo
に引数を指定していないけど何を出力しているのかな?echo
に引数を指定しないと改行だけを出力するよということは
hello
ファイルの内容の末尾に改行を追加したんだね!この状態でハッシュ値の比較をもう一度行ってみよう!
md5sum -c ~/hello.md5sum
これでファイルの内容変更が検出できるという訳なんだね!
/home/midori/hello: FAILED
md5sum: WARNING: 1 computed checksum did NOT match
おお!チェックで失敗したね!ちゃんとハッシュ値の変化を検出できたよ!
今回は
md5sum
でハッシュ値を求めたりハッシュ値を使った比較検証を行ったよmd5sum
は MD5 を使うけど他のハッシュアルゴリズムを使いたい場合同様の 〜sum
コマンドでハッシュ値を扱えるよ一般的な操作での主な用途はファイル内容変化の検出だよダウンロードサイトでは
.md5
や .md5sum
も一緒に公開されていることがあるのでこれらを使って検証することでデータ化けが起こっていないと確認できるんだ!