それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

作成済みのm5sumとぱぱっと比較する方法(改竄検出の楽な方法

md5sum の -c オプション

-c 生成済みの md5sum の一覧とファイルを比較して改ざんを検出する。

事前にファイルのmd5sum の値の一覧を作成しておき、いまのファイルがそのファイルのハッシュ値と一致するかを調べておく。すると簡単に改竄検出や不正検出を見つけることが出来る。

使い方

最初に、md5sum の一覧を計算してファイルに書き出しておきます。

md5sum sample.txt > out.md5

次に、この出力結果を使ってファイルが一致するかチェックします

md5sum -c out.md5

out.md5の中身は次のようになっています。 md5値 ファイルPATHが列挙されています。

c3cec535915d86f2ce51c668f6919696  sample.ext

チェック-cの場合は、右側のファイルパスのファイルを探して、md5値を導出し事前に計算していた左側に一致するかを調べてくれます。

指定したフォルダの中をマトメてチェック

1ファイルだと何の役に立つかわかりにくいのですが、フォルダの中のまとめてチェックすると強いです。

find コマンドや xargs と組合せる。 フォルダのすべてのファイルについて、md5を計算する

sudo find /etc/  -mindepth 1 -type f   -exec md5sum {} \; > etc.md5

結果を使って、フォルダの中のすべてのファイルについて、ファイルの改竄検出を行う。

sudo md5sum -c etc.md5

if 文で使う

bash の if 文でつかときは --status オプションが便利です。

このオプションを付けると、表示をしない代わりに、チェック結果をコマンドの実行結果で返してくれます。

if ( md5sum -c --status etc.md5 ) ; do 
  echo "改竄チェックOK"
else
  echo "改竄チェックNG"
fi 

これで有るフォルダの中が書き換わってないかを手軽に調べることが出来ます。

もしチェックに失敗したファイルを見つけたいときは

sudo md5sum -c   out.md5 | grep -i failed

のようにしたら見つけることが出来ました。

もっと簡単にするには、

sudo md5sum --quiet -c   out.md5 

--quiet don't print OK for each successfully verified file このオプションをつけるのもいいでしょうね。

ハッシュ値をまとめて保存とは

もし、ハッシュ値保存したファイルを改ざんされると怖いので、ハッシュ値を保存したファイルのハッシュ値を取ってそれをブロックごととに保存していくといいです。このブロックが・・・

ブロックチェーン技術などで盛んにファイルの記録をハッシュ値で云々と叫ばれてます。 基本的にはハッシュ値を計算してファイルに保存してそのファイルのハッシュ値を計算してーってことです。似たようなものです。

フォルダの中のファイルつまり、あるエントリの内部のハッシュ値をすべて見るには、md5sum である程度十分です。便利だし。

衝突の可能性も有るでしょうがローカルファイルで衝突は可能性が低いしね。

参考資料

How to access all your cloud files in one place in Windows 10 | TechRadar

みんな大好き! man