秘密鍵の生成 2×k個の乱数を生成する(各乱数の長さも k bit) ◦ 公開鍵の生成 2×k個の秘密鍵の各値をハッシュしたのが公開鍵( z = H(y)) k = 256 bit (32 byte)の場合、公開鍵のサイズは 2×256×256bit = 16KB ※ 鍵長が現在のECDSAやSchnorrと比べて巨大になる y 1,0 y 2,0 y 3,0 y k,0 … y 1,1 y 2,1 y 3,1 y k,1 … , z 1,0 z 2,0 z 3,0 z k,0 … z 1,1 z 2,1 z 3,1 z k,1 …
(各 は、 0 or 1) c. 各m i に対応する秘密鍵y i,? をピックアップする 例: , sig(m 1 , …, m k ) = (y 1, m1 , y 2, m2 , …, y k, mk ) メッセージダイジェストの各bit値に対応するハッシュロックをアンロックする m 1 m 2 m 3 m k … m i m 1 = 0 y 1,0 m 1 = 1 y 1,1
c. sig(m 1 , …, m k ) = (y 1, m1 , y 2, m2 , …, y k, mk ) に対応する公開鍵をピックアップし、 各署名値をハッシュした値と等しいかチェック 署名により秘密鍵の一部が明らかになるため、使えるのは一度きり m 1 m 2 m 3 m k … y 1,m1 … z 1,m1 z 2,m2 z 3,m3 z k,mk y 2,m2 y 3,m3 y k,mk … ハッシュ