« 2008年06月09日 | メイン | 2008年06月11日 »
2008年06月10日
PDFで電子署名による改竄防止とは?ハッシュ値
PDFに電子署名すると改竄防止になるのだろうか?とお考えになる方は、PDFに電子署名するとPDFが暗号化されるのではないかと予想されていると思います。
しかし、昨日もお話しましたように、PDFに電子署名すると、対象のPDFからハッシュ値を計算し、そのハッシュ値を暗号化します。署名対象PDFそのものは元のままです。
署名対象PDFを暗号化しないで、わざわざハッシュ値を作ってそれを暗号化するのは、署名につかう暗号の計算(公開鍵暗号方式といいますが)には処理時間がかかり、PDFのような大きなファイルを処理対象にすると実用的な速度で暗号化できないためです。
そこで、ハッシュ値という元のPDFの代理になる小さなデータを作って、もとのPDFの代わりに代理のハッシュ値を暗号化するのです。
ハッシュ値を計算する方式はハッシュ関数と言います。ハッシュ関数は次のような特性が要求されます。
要求条件:「ふたつのPDFが異なっているなら、それから計算した二つのハッシュ値も異なっている。」
この要求条件が成立すれば、その対偶、「ふたつのハッシュ値が同じであれば、ふたつのもとのPDFは同じ」が成立します。
PDF電子署名では、この原理を使っています。
つまり、署名時点のPDFのハッシュ値と、現在(検証時点)のPDFのハッシュ値をそれぞれ独立に計算し、それが同じかどうかを調べます。
同じであれば、署名時点のPDFと現在(検証時点)のPDFは同じである→改竄されていない、と判定するわけです。
ハッシュ関数には、MD2、MD4、MD5、SHAなどいろいろあります。SHAにはSHA-1、SHA-2(SHA-224、SHA-256、SHA-384、SHA-512)があります。
実際のところ、私の素人的直感では任意のPDFに対して上記の要求条件を完全に満たすハッシュ関数は、たぶん、存在しえないでしょう。どんなハッシュ関数でも、確率的には異なるふたつのPDFから同じハッシュ値がいつかは作られることになってしまうと思います。
でも、実際には、あるPDFとそれを改竄したPDFから計算したふたつのハッシュ値が必ず違っていれば、それで、充分です。それが満たされれば、改竄したPDFを確実に検出できます。
逆に、改竄する前のPDFと意図的に改竄したPDFから同じハッシュ値が計算できるようになってしまったら大変。改竄を発見できなくなるわけですから、そのハッシュ関数は使い物になりません。
こういう状態になることをハッシュ関数の安全性が損なわれた、あるいは、脆弱性というようです。
投票をお願いいたします