本文へスキップ
ecdsa.com

コファクター

楕円曲線上の点の個数と、暗号に使う部分群の素数位数 n との比 h = #E / n で、NIST の P 曲線と secp256k1 では 1、Curve25519 では 8、Curve448 では 4 です。
別表記curve cofactorsmall subgroup

h が 1 を超える場合、曲線には小さな部分群が含まれるため、相手から渡された点が素数位数の部分群の外にある可能性があります。プロトコルはこれに対して、コファクターを掛ける(SP 800-56A のコファクター付き Diffie–Hellman)、秘密スカラーをコファクターの倍数にクランプする(X25519、Ed25519)、部分群に属するかを確認する、ristretto255 や decaf448(RFC 9496)のような素数位数の抽象化を使う、といった方法で対処します。

実際のバグ:2017年の CryptoNote のコファクターの問題では、Monero の 1 つの出力から有効なキーイメージを複数作れたため、修正されるまでは二重支払いが可能になるおそれがありました。コファクター付きの検証とコファクターなしの検証のどちらを採るかで食い違う EdDSA の検証者同士(RFC 8032 §5.1.7 はどちらも認めています)は、攻撃者が細工した署名のどれを受け入れるかが異なり、これはコンセンサスシステムで問題になります。

コファクターが 1 のワイエルシュトラス曲線には、こうした問題はまったくありません。マルチパーティ計算や検証可能ランダム関数など、単純な群の性質を必要とするプロトコルで素数位数の曲線が今も好まれている理由の 1 つはここにあります。

規格と参考文献

すべての用語