本文へスキップ
ecdsa.com

署名の展性

署名方式またはそのエンコーディングが持つ性質で、秘密鍵を知らなくても、誰でも有効な署名を、同じメッセージと鍵に対する別の有効な署名に変換できるというものです。
別表記transaction malleabilitysignature malleation

ECDSA は設計上、展性を持ちます。(r, s) と (r, n − s) の両方が検証に通るためです。さらに、パーサーが最小でない長さやパディングされた整数を受け付けると、DER エンコーディングによって変形がさらに増えます(Bitcoin の BIP 66 の厳格な DER の規則が、2015年にこれを塞ぎました)。EdDSA は、検証者が S が群の位数未満であることの確認を省くと展性を持ちます。展性は偽造ではありません。新しいメッセージに署名できる人はいません。

展性が問題になるのは、署名や、署名を含むデータのハッシュが識別子として使われる場合です。SegWit 以前の Bitcoin では、トランザクション ID の計算に署名が含まれていたため、第三者が未承認のトランザクションの ID を変更できました(2014年2月に Mt. Gox が出金を停止した際、これを理由に挙げました)。使用済みの nonce ではなく使用済みの署名を記録するスマートコントラクトや、署名でリクエストの重複を排除する API も、同じように破綻します。

対策は、正規エンコーディング(厳格な DER、low-S、L 未満の S)、署名ではなく署名対象の内容から計算する識別子、署名するペイロードに含めた明示的な nonce、そして Ed25519 や BIP-340 のように、厳格に検証すれば強偽造不可能性を持つ方式です。

規格と参考文献

すべての用語