ランポート署名
From Wikipedia, the free encyclopedia
ランポート署名(ランポートしょめい、英: Lamport signature)とは、デジタル署名を構築するための手法である。ランポート署名は、任意の一方向性関数を用いて構成でき、一般には暗号学的ハッシュ関数を用いて実装される。
将来的に量子コンピュータの登場でRSAのような多くの暗号技術が脅威にさらされる中で、長いハッシュ値を持つハッシュ関数を用いたランポート署名は安全性を担保できると考えられている。
ランポート署名において、署名鍵は1つのメッセージの署名にしか利用できないという制約がある。だが、ハッシュ木を利用することで、1つの鍵で、複数のメッセージの署名をすることが可能である。
ランポート署名は、1979 年にLeslie Lamportによって発明され、発明者の名前にちなんで名付けられた。[1]
鍵生成
署名されるメッセージは固定の長さ( ビット)であるとする。もし、任意の長さのメッセージに署名したい場合には、まずハッシュ長がビットの暗号学的に安全なハッシュ関数でハッシュ値を計算し、そのハッシュ値に対して署名の手続きをすることで署名することができる。
を一方向性関数とする。
署名者は、 の定義域から独立一様ランダムに 個の値 および をランダムに選ぶ。次に、各 に を作用させることで および を計算する。
署名鍵(秘密鍵)は であり、検証鍵(公開鍵)は である。
メッセージの署名生成
ビットのメッセージを とする。 署名は
である。
署名の検証
メッセージ と署名 を持つ検証者は、全ての に対して が成り立つことをチェックし、成り立てば署名を受理する。
直感的な安全性の説明
署名を偽造するためには、偽造者は公開されている から、 を満たす を計算しなければならない。したがって、 が一方向性関数である限り、偽造は不可能である。
例
一方向性関数として、出力が256ビットであるハッシュ関数hash( )を用いるとしよう。
鍵ペア
署名に用いる秘密鍵は、ランダムな256×2個の256ビット列 である。 検証に用いる公開鍵は、256×2個の256ビットハッシュ値 である。それぞれ128 Kibit である。
署名
メッセージ(あるいはそのハッシュ値)は256ビットであり、各ビットに対して乱数のペア が署名鍵として選ばれている。そこで,メッセージの ビット目が0ならば を署名に入れ、1ならば を署名に入れる。例えばメッセージが であった場合、
- () より、
- () より、
- () より、
- () より、
とおき、署名を とする。署名は 256×256 bits = 64 Kibitである。
検証
検証者が256ビットのメッセージと、256個のからなる署名を得たとする。検証鍵は、256個のハッシュ値のペア から成る。そこで、署名内の各 のハッシュ値を計算し、メッセージの ビット目が0ならば とハッシュ値を等しいかを、1ならば とハッシュ値と等しいかを確認する。 例えば上の例の場合、
- () が成り立つか?
- () が成り立つか?
- () が成り立つか?
- () が成り立つか?
を確認する。全て成り立つならば、署名を正しいものとする。