Coding - Crypto - Data Security - Digital Signature - OpenSSL - Others - PGP - PHP - Software

電子署名(プログラムの改竄検証)

 電子署名を構成する要約関数はプログラムなどの改竄見極めにも用いられます。

 プログラムにウィルスやスパイウェアを仕込まれた場合にシステムの安全性が損なわれてしまうことになるので、配布元のファイルと手元のファイルが改竄なく同一であることを確認するために使われます。その際にダイジェスト値が用いられますがこれをチェックサム(Checksum)とも呼びます。

 例として無料でダウンロードできるOSのひとつである「CentOS」の配布で見てみます。CentOS version8の配布サイト(http://ftp-srv2.kddilabs.jp/Linux/packages/CentOS/8-stream/isos/x86_64/)を開くと下記のような画面が表示されます。

試しに「CentOS-Stream-8-x86_64-20201007-boot.iso」が配布元のデータと手元にあるデータが同一であるか調べてみます。CECKSUMファイルの中身は下記です。2行目に「SHA256をアルゴリズムとして生成したハッシュ値」が書いてあります。

# CentOS-Stream-8-x86_64-20201007-boot.iso: 714080256 bytes
SHA256 (CentOS-Stream-8-x86_64-20201007-boot.iso) = ca0daed77d0741c5342d92689d8ac8da87b869a36e6e85fb7651d281c988b2f2
# CentOS-Stream-8-x86_64-20201007-dvd1.iso: 9269411840 bytes
SHA256 (CentOS-Stream-8-x86_64-20201007-dvd1.iso) = b11559ff531e30771088771d19fd9ebe06ce7d89f23894d3689fc664d56b2161

ここで下記のPHPスクリプトで実際にファイルからハッシュ値を生成します。

<?php

// CHECKSUMファイルの中に記載されたハッシュ値
$hash_given = "ca0daed77d0741c5342d92689d8ac8da87b869a36e6e85fb7651d281c988b2f2";

// 実際に600MBを超えるファイルから、アルゴリズムをsha256に指定してハッシュ値を生成
// なお、アルゴリズムは上記のCHECKSUMファイルの中に記載してある
$hash_generated = hash_file('sha256', 'CentOS-Stream-8-x86_64-20201007-boot.iso');

?>

こうして得られたハッシュ値が「ca0daed77d0741c5342d92689d8ac8da87b869a36e6e85fb7651d281c988b2f2」であり、CECKSUMファイルで与えられたハッシュ値と同一であるので、手元のファイルは改竄がされていないものと判断されます。

なお、配布側から与えられたハッシュ値がそもそも改竄されていないことを担保するために、同時に電子署名も与えられるのが通例です。CentOSの配布ではgnupgで検証する電子署名が与えられていますが、OpenSSLとGnuPGで話がごっちゃになるとよくないので今回は割愛します。

なお、上記で使ったハッシュ値は電子署名の話で出てきた「ダイジェスト値」と同一であり、このようにして電子署名はファイルの改竄がないことの確認にも用いられます。


 ネットからプログラムをダウンロードする際は悪意のある細工が紛れ込んでいないか確認してから使いましょう。

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments