Lから始まるLinux

2章49話
ハッシュ(基本)
2章50話 ハッシュ(使い方)
もくじ
2章51話
終了ステータス
ハッシュ(使い方)
若木 みどり
前回はハッシュが どういうものかを 教えてもらったよ!
若木 しげる
今回はハッシュの 使い方を学ぼう!
ハッシュアルゴリズム
若木 しげる
ハッシュを求める計算方法を 「ハッシュアルゴリズム (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, --check入力からハッシュ値のチェックを行う
-q, --quietチェックでハッシュ値が一致しなかったファイルのみ出力
若木 しげる
ハッシュアルゴリズムが違うコマンドも使い方は同様なので他のアルゴリズムを使いたい場合はコマンドを読み替えてね
ハッシュ値の出力
若木 みどり
お兄ちゃん!さっそくハッシュ値を求めてみようよ!
若木 しげる
まずはハッシュを求める元データを作ろうどのように作ってもいいけど以下のようにしてみようか
echo -n "hello" > ~/hello
若木 みどり
echo-n オプションは末尾に改行を付けないだったね「hello」とだけ書かれた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 も一緒に公開されていることがあるのでこれらを使って検証することでデータ化けが起こっていないと確認できるんだ!