LoginSignup
4
4

More than 1 year has passed since last update.

OpenSSL で作成したファイルの SHA ハッシュ値を比較検証する(coreutils フォーマットのダイジェスト値のベリファイ)

Last updated at Posted at 2018-08-20

以下の、OpenSSLopenssl dgst -r コマンドで作成した coreutils フォーマットのハッシュ値(ダイジェスト、チェックサム)を検証したい。

SHAハッシュ(ダイジェスト)ファイルの作成
openssl dgst -r -out sample.txt.sha256 -sha256 sample.txt

つまり、受け取った sample.txt が、上記の sample.txt.sha256 とマッチするか知りたいのです。

TL; DR (今北産業)

  1. チェックサムのファイルの検証には shasum コマンドを使います。
  2. 基本構文
    チェックサムの基本構文
    shasum -a <SHAアルゴリズム> -c <SHAチェックサムファイルのパス>
    
  3. 具体例
    shasum -a 256 -c sample.txt.sha256
    

TS; DR

openssl ではファイルのハッシュ値は作成できても検証はできない

openssl では dgst コマンドでファイルのハッシュ値/ダイジェストを算出することができ、SHA-1 より堅牢な SHA-2(SHA-256 や SHA-512 など)のアルゴリズムも使えます。

  • dgst | openssl | Docs @ OpenSSL.org

この時、openssl dgst -r、つまり -r オプションを付けると coreutils フォーマットで出力できるため、従来の sha1sum コマンドのようにファイルのチェックサムとして利用できます。

問題は、このチェックサム(ダイジェスト値/ハッシュ値)を検証するコマンドが openssl にはないことです。

openssl dgst -verify で検証できそうな気がするのですが、意外にできません。

なぜなら、-veryfy オプションはハッシュ値(ダイジェスト値)の検証ではなく、公開鍵による署名の検証コマンドだからです。これは、OpenSSL は元々 SSL(Secure Sockets Layer)通信の暗号化のためのライブラリだったので、データの暗号化や署名を主としているため、-sign オプションで署名したファイルを -verify で検証するために使われます。

ファイルの署名ではなく、ファイルのチェックサムを比較して検証したい場合は shaXXXsum 系のコマンドを使います。

sha1sum のように sha256sumsha512sum などもありますが、汎用の shasum コマンドがシンプルでおすすめです。

🐒   ハッシュ値/ダイジェスト値/チェックサムの違いは、以下の記事の「ハッシュ関数の基本と特徴」の項目をご覧ください。

shasum の基本構文

チェックサムの基本構文
shasum -a <SHAアルゴリズム> -c <SHAチェックサムファイルのパス>
  • <SHAアルゴリズム>1, 224, 256, 384, 512, 512224, 512256
  • <SHAチェックサムファイルのパス>:ファイル内に1行1ファイルで複数ファイルを指定することもできる。
  • 留意事項
    • 比較する際のダイジェスト・ファイルのフォーマットは CoreUtils 互換であること。
      • 形式が <ハッシュ値> <ファイル名もしくはファイルのパス>
    • ハッシュ作成時の openssl dgst-r オプションを付けると CoreUtils 互換のフォーマットになる。
    • opensslverify サブ・コマンドは署名の検証用。ダイジェスト(ハッシュ値)の検証用ではない
    • ハッシュ値による検証は「verify」(証明)ではなく「compare」(比較)もしくは「check」(確認)と覚える。
使用例
$ # サンプルファイルの作成
$ touch sample.txt
$
$ # SHA256 のハッシュファイル作成
$ openssl dgst -r -out sample.txt.sha256 -sha256 sample.txt
$ 
$ # 中身のチェック(`-r` オプションで出力フォーマットが変わることに注意)
$ cat sample.txt.sha256
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 *sample.txt
$ 
$ # 比較検証(コンペア)
$ shasum -a 256 -c sample.txt.sha256
sample.txt: OK

動作検証済み環境

  • macOS HighSierra(OSX 10.13.6)
  • $ openssl version: LibreSSL 2.2.7
  • $ shasum --version: 5.84
4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4