署名と検証

メッセージMM、秘密鍵kk、対応する公開鍵AAを所与のものとし、署名の作成のために以下の手順が取られます。

H(k)=(h0,h1,...,h511) H(k) = (h_0, h_1, ..., h_{511})

r=H(h256,...,h511,M) r = H(h_{256}, ..., h_{511}, M) ただしカンマは結合を表す。 R=rB R = rB S=(r+H(R,A,M)a)modq S = (r+H(R,A,M)a) \: mod \: q

この時、(R,S)(R,S)を秘密鍵kkによるメッセージMM署名と呼びます。 S<qS < qかつS>0S > 0を満たす署名のみが有効であることに注意してください。 これにより署名の展性(malliability)の問題を防ぐことが可能になります。

特定のメッセージMMの署名(R,S)(R,S)の、公開鍵AAに対する有効性をチェックする場合、 まずS<qS < qかつS>0S > 0をチェックしたのち以下を計算し、

R~=SBH(R,A,M)A \tilde{R} = SB - H(R,A,M)A

そして以下の等式が成り立つことを確認します。

R~=R \tilde{R} = R

Sが上記の方法で計算されていれば

SB=rB+(H(R,A,M)a)B=R+H(R,A,M)A SB = rB + (H(R,A,M)a)B = R + H(R,A,M)A

が成り立つのでR~=R\tilde{R} = Rの確認が有効なことがわかります。

results matching ""

    No results matching ""