d41d8cd98f00b204e9800998ecf8427e
といった英数字の羅列. これがハッシュ値. 今回はMD5で0バイトのファイルのハッシュ値を算出した. さて,ファイルサイズに関わらず,MD5ハッシュアルゴリズムはいつも32文字=256bitを出力する. これがハッシュの良いところ. もうひとつの良いところは入力するファイルのデータが1bitでも変わると,全く異なる英数字が出力されるところ. ハッシュ値が違うということは別のファイル(もしくは壊れたファイル)であることの判断材料になる. だからDigest(要約)と呼ばれる. Checksumという単語はデータの整合性をチェック(Check)するためのデータの合計値(Sum)という意味合い. つまり,データが壊れていないかどうか,判定する時に使用されるデータのことをChecksumと呼んだりする.
HandBrakeの公式サイトへ行くと,ダウンロードページには次のような表記がある.
File Name: HandBrake-1.2.2.dmg
File Size (MB): 19.69 MB
SHA 1: 5effaa1b39aefc95981117419a1af94b5c573cdd
SHA 256: 690e5bb3cc668b6e4c74bdbe43095c3693e55a06c1e5f1b330420f7c2a406c8e
HandBrake-1.2.2.dmgというファイルのハッシュ値が書かれている. SHA-1とSHA-256のハッシュ値が書かれている. ハッシュ値はアルゴリズムの種類(例えばMD5かSHA-256か)で出力される文字数(bit数)が異なる. MD5は32文字だったが,SHA-256は64文字=512bitだ. さて,HandBrakeのダウンロードページが意味するのは,ダウンロードしたファイルのハッシュ値を求めて,ここに書かれているハッシュ値と同じだったらデータはきちんとダウンロードされましたよ,ということ. macOSの場合,ハッシュ値を求めるのは簡単. まず,Terminal.appを開く. そして,次のコマンドでハッシュ値が求まる.
openssl dgst -md5 ファイル名
これはMD5のハッシュ値. SHA-1は次の通り.
openssl dgst -sha1 ファイル名
SHA-256はこう.
openssl dgst -sha256 ファイル名
もうお分かりだろう. このコマンドさえ覚えておけば,お望みのファイルのハッシュ値をすぐに求めることが出来る.
さて,ハッシュ値を求めることが出来たので,これを比較すればファイルの整合性を確かめることが出来るわけだが,いちいち人力で一文字ずつチェックするのはスマートではない. ワンライナーで一致しているか否かを確かめることは出来るが,せっかくなのでシェルスクリプトのお勉強も兼ねて,ファイルのハッシュ値と与えられたハッシュ値が等しいかを確かめてくれるシェルスクリプトをつくった. digestChecker.sh | GitHub.com
digestChecker.sh
#!/bin/bash
function printUsage () {
echo 'USAGE: digestchecker [option] file checksum'
echo 'Available options:'
echo -e '\t--md5'
echo -e '\t--sha1'
echo -e '\t--sha256'
exit 1
}
if [ $# -gt 2 ]; then
# option(argument) specified
file="$2" # File name
checksum="$3" # Checksum value
if [ ! -f "$file" ] || [ -f "$checksum" ]; then
printUsage # exit with code 1
fi
case $1 in
--md5 ) declare -a md5=($(openssl dgst -md5 "$file")) ;;
--sha1 ) declare -a sha1=($(openssl dgst -sha1 "$file")) ;;
--sha256 ) declare -a sha256=($(openssl dgst -sha256 "$file")) ;;
* ) printUsage ;; # exit with code 1
esac
else
# no option(argument) found
file="$1" # File name
checksum="$2" # Checksum value
if [ ! -f "$file" ] || [ -f "$checksum" ]; then
printUsage # exit with code 1
fi
# Each variables 'md5', 'sha1' and 'sha256' are arrays.
# - The first item is a file name.
# - The second item is a checksum.
declare -a md5=($(openssl dgst -md5 "$file"))
declare -a sha1=($(openssl dgst -sha1 "$file"))
declare -a sha256=($(openssl dgst -sha256 "$file"))
fi
function matched () {
echo $1
echo '+------------+'
echo '| Matched! |'
echo '+------------+'
exit 0
}
case "$checksum" in
"${md5[1]}") matched 'MD5 Digest Algorithm' ;; # exit with code 0
"${sha1[1]}") matched 'SHA-1 Digest Algorithm' ;; # exit with code 0
"${sha256[1]}") matched 'SHA-256 Digest Algorithm' ;; # exit with code 0
esac
# Not matched...
echo '+-------------+'
echo '| Wrong File! |'
echo '+-------------+'
exit 2
このシェルスクリプトを使えば,簡単にハッシュ値の一致不一致を確かめることが出来る. 使い方はこんな感じ.
digestChecker ファイル名 ハッシュ値
対応するダイジェストアルゴリズムはMD5,SHA-1,SHA-256. 次のように,ダイジェストアルゴリズムを指定することでより高速にチェックできる.
digestChecker --md5 ファイル名 ハッシュ値
digestChecker --sha1 ファイル名 ハッシュ値
digestChecker --sha256 ファイル名 ハッシュ値
まず,GitHubからスクリプトをダウンロードしたら,適当なところにファイルを移動させて,ターミナルを開き,そのパスまでcdコマンドで移動. ここでは`~/Documents/Scripts/`内へ移動したこととする. そして
sudo chmod +x digestChecker.sh
で実行権限を与える. このとき求められるパスワードはmacOSにログインする時に入力するパスワード. 入力しても画面は変化しないがきちんと入力されているので迷わずreturnキー! さて,Bashをお使いの方は.bashrcファイルに次のエイリアスを追記.
touch ~/.bashrc | nano bashrc
.bashrc
alias md5check="~/Documents/Scripts/digestChecker.sh --md5"
alias md5checker="~/Documents/Scripts/digestChecker.sh --md5"
alias sha1check="~/Documents/Scripts/digestChecker.sh --sha1"
alias sha1checker="~/Documents/Scripts/digestChecker.sh --sha1"
alias sha256check="~/Documents/Scripts/digestChecker.sh --sha256"
alias sha256checker="~/Documents/Scripts/digestChecker.sh --sha256"
alias digestcheck="~/Documents/Scripts/digestChecker.sh"
alias digestchecker="~/Documents/Scripts/digestChecker.sh"
Ctrl+xを押し,yを押し,returnで保存したら次のコマンドで`.bashrc`を適用.
source ~/.bashrc
さて,これで便利なコマンドが使えるようになった.
HandBrakeの公式サイトへ行き,HandBrakeの最新版をダウンロードしよう. 現時点での最新版は1.2.2だった. ファイル名はHandBrake-1.2.2.dmg. ダウンロードが完了したら次のようなコマンドを使ってSHA-1のダイジェストを検証できる.
sha1checker ~/Downloads/HandBrake-1.2.2.dmg 5effaa1b39aefc95981117419a1af94b5c573cdd
または
digestChecker ~/Downloads/HandBrake-1.2.2.dmg 5effaa1b39aefc95981117419a1af94b5c573cdd
もしターミナルに
SHA-1 Digest Algorithm
+------------+
| Matched! |
+------------+
と表示されればファイルの整合性が確認できたことを意味する.もし,
+-------------+
| Wrong File! |
+-------------+
と表示された場合,そのファイルは損傷しているか,別のバージョンをダウンロードしたか,第三者によって改ざんされた可能性がある. ちなみにSHA-256のチェックは次のコマンドでできる.
sha256checker ~/Downloads/HandBrake-1.2.2.dmg 690e5bb3cc668b6e4c74bdbe43095c3693e55a06c1e5f1b330420f7c2a406c8e
または
digestChecker ~/Downloads/HandBrake-1.2.2.dmg 690e5bb3cc668b6e4c74bdbe43095c3693e55a06c1e5f1b330420f7c2a406c8e
ただ,処理がかなり遅いので注意. とはいえ,今までの話しは前提として閲覧しているWebサイトが改ざんされていないことを前提としている. もしWebサイト上のハッシュ値まで改ざんされていたら,そこまではダイジェストチェックだけでは見抜くことは不可能. 良質なHTTPSの普及を望んで...
9111593329097634393
https://www.storange.jp/2019/05/checksum.html
https://www.storange.jp/2019/05/checksum.html
ファイルのダイジェスト(Checksum)を検証する
2019-05-29T22:00:00+09:00
https://www.storange.jp/2019/05/checksum.html
Hideyuki Tabata
Hideyuki Tabata
200
200
72
72