楕円曲線暗号(だえんきょくせんあんごう、Elliptic Curve Cryptography、ECC)とは、楕円曲線上の離散対数問題 (EC-DLP) の困難性を安全性の根拠とする暗号。1985年頃にビクター・S・ミラー(英語版)とニール・コブリッツ(英語版)が各々発明した。
具体的な暗号方式の名前ではなく、楕円曲線を利用した暗号方式の総称である。DSAを楕円曲線上で定義した楕円曲線DSA (ECDSA)、ディフィー・ヘルマン鍵共有(DH鍵共有)を楕円化した楕円曲線ディフィー・ヘルマン鍵共有 (ECDH) などがある。公開鍵暗号が多い。
EC-DLPを解く準指数関数時間アルゴリズムがまだ見つかっていないため、それが見つかるまでの間は、RSA暗号などと比べて、同レベルの安全性をより短い鍵で実現でき、処理速度も速いことをメリットとして、ポストRSA暗号として注目されている。ただしP=NPが成立した場合、EC-DLPを多項式時間で解くアルゴリズムが存在するということになり、ECCの安全性は崩壊する(公開鍵暗号自体が崩壊)。また、送信者が暗号化時に適当な乱数(公開鍵とは違うモノ)を使うので鍵が同じでも平文と暗号文の関係が1対1でない点にも注意(ElGamal暗号でも同様)。
一部の楕円曲線には、DLPを解く多項式時間アルゴリズムが見つかっているため、注意が必要である。
暗号理論に楕円曲線を利用しようというアイディアは、1985年にニール・コブリッツ[1] と ビクター・S・ミラー[2] によって独立に提案された。楕円曲線暗号は、2004~2005年ごろから広く使用されるようになっている。
楕円曲線の例: secp256k1(後述)で規定されている
上の
のグラフ。
実平面
上の点を
で表した場合、
上で定義される楕円曲線
(ワイエルシュトラスの標準形)では、
上の点に接弦法(またはバシェ(Bachet)の方法)[3]
と呼ばれる加法的な2項演算により加群の構造を与えることができる(零元は通常は無限遠点と定義される。これを
で表す)。
楕円曲線暗号で扱う楕円曲線とは、
上の有理点を、ある素数
で還元した有限体
上の離散的楕円曲線
であり、還元によって上記の加群の構造は
上の加群の構造に写される。
楕円曲線上の加法[編集]
楕円曲線
上の異なる2点を
とする場合、その接弦法の加法を
で表すことにすると、これは以下の式で計算される[4]。
まず、
である。すなわち、無限遠点
が零元である。
もし
ならば、
である。このとき
を
と書き、
の逆元と呼ぶことにする。
それ以外の場合、
は、2点
を通る直線と
との(
および
と異なる)交点の、y座標の符号を反転したものである。つまり
と置けば、次のように計算される。
![{\displaystyle x_{3}=\phi ^{2}-x_{1}-x_{2},}](https://wikimedia.org/api/rest_v1/media/math/render/svg/9afd4ac5a15b29702670334c99c33e91ab3d21e8)
![{\displaystyle y_{3}=-\phi x_{3}-\psi .}](https://wikimedia.org/api/rest_v1/media/math/render/svg/b270411e46e2345722034466281b733e5b8f0db3)
ただし
![{\displaystyle \phi ,\,\psi }](https://wikimedia.org/api/rest_v1/media/math/render/svg/083f06247e07a6d49eed245f4274862730a96775)
は
![{\displaystyle \phi ={\frac {y_{2}-y_{1}}{x_{2}-x_{1}}},}](https://wikimedia.org/api/rest_v1/media/math/render/svg/bcec1d1ffa5af302401ed6222bae70134afea3eb)
![{\displaystyle \psi ={\frac {y_{1}x_{2}-y_{2}x_{1}}{x_{2}-x_{1}}}.}](https://wikimedia.org/api/rest_v1/media/math/render/svg/26f9f041bbe74a7a8bd18ff6ef046934787d43bf)
上の方法で定義された2項演算は加法として必要な次の性質を備えている。
- 零元
の存在
- 各元
に対する逆元
の存在
- 可換性:
(定義式の対称性から明らか)
- 結合性:
(煩雑であるが定義式を丁寧に解けば証明できる)
楕円曲線上での2倍算[編集]
楕円曲線
上の点
に対し、さらに
を加算する場合、つまり
を求める場合、上記の方法は使えない。
この場合、まず
のときは、
である。また、
である。
それ以外の場合は、
は、
での
の接線が
自身と交わる(
とは異なる)交点の、
座標の符号を反転したものである。すなわち
と置けば、次のように計算される。
![{\displaystyle x_{4}=\phi ^{2}-2x_{1},}](https://wikimedia.org/api/rest_v1/media/math/render/svg/f561c568f930dc7f1d819cd52b23cdcb7c11b3ca)
![{\displaystyle y_{4}=-\phi x_{4}-\psi .}](https://wikimedia.org/api/rest_v1/media/math/render/svg/cf86945311dd5a6c8e188254ba171f496f323263)
この式は異なる二点の加算の場合と同じであるが、
![{\displaystyle \phi ,\,\psi }](https://wikimedia.org/api/rest_v1/media/math/render/svg/083f06247e07a6d49eed245f4274862730a96775)
の計算式が次のように変わる。
![{\displaystyle \phi ={\frac {3x_{1}^{2}+a}{2y_{1}}},}](https://wikimedia.org/api/rest_v1/media/math/render/svg/0f922a66f4b03daf9b8bd1b7db74a675d216a89f)
![{\displaystyle \psi ={\frac {-3x_{1}^{3}-ax_{1}+2y_{1}^{2}}{2y_{1}}}.}](https://wikimedia.org/api/rest_v1/media/math/render/svg/9f35ea755058cbe1b461a3404760b393e6b2606b)
スカラー倍算[編集]
スカラー倍算(Scalar Multiplication)は楕円曲線上における掛け算である。楕円曲線上の点と点を掛けるのではなく、点に整数(スカラー)を掛けることに注意。
上のある点
を始点として、これに順次
自身を
回加算して得られる点を
で表すことにする。この操作は
に
を
回加算することと同じである。
に
を
回加算すれば
が得られる。
このようにして、
上の点と整数の掛け算が定義できる。この操作をスカラー倍算(Scalar Multiplication)と呼ぶことにする。
を始点として、加法により生成される点列(つまり全ての整数についての
のスカラー倍算の集合)は、
上の巡回加群を作っている(これを
と表すことにする)。
楕円曲線上の有理点[編集]
楕円曲線のパラメーター
が有理数の場合、2つの有理点(
が共に有理数の点)を加算して得られる点はやはり有理点である。つまり、
上の全ての有理点の集合+無限遠点
を
と表すと、
は加法について
の部分加群を成している。また、
上のある有理点を始点として加法により生成される
上の点列は、
上の全ての点が成す加群の部分加群(巡回群)を成している。さらに始点が整点(
が共に整数の点)でない場合、この巡回加群の位数は無限大である(Nagell-Lutzの定理[5])。
また、
全体が成す加群は、有限個の始点が生成する巡回群の直和になることが知られている(モーデルの定理)。
素数 p による還元[編集]
楕円曲線暗号で扱う楕円曲線とは、
をある素数
で還元した有限体
上の離散的楕円曲線であり、これを
と表すことにする(無限遠点
も含む)。ここで素数
による還元とは、有理数体
から有限体
上への次の写像
を作用させることである。
有理数を
(uは整数、vは自然数)と表した場合、
![{\displaystyle f_{p}(u/v)=(u{\bmod {\,}}p)(v{\bmod {\,}}p)^{-1}{\bmod {\,}}p}](https://wikimedia.org/api/rest_v1/media/math/render/svg/8e4bc3c1af0726ba14dba5934b073db81cf3bcd4)
ただし、
![{\displaystyle (v{\bmod {\,}}p)^{-1}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/1a36f1a2cdd571d235ce0a0eb42d5772d9d14c53)
は
![{\displaystyle \mathbf {F} _{p}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/c3f9e5be7d9aabb5ceafb61a21e637f72e5ce7dd)
の元
![{\displaystyle v{\bmod {\,}}p}](https://wikimedia.org/api/rest_v1/media/math/render/svg/5a81fedc9c6909b9f2ffe4f960b3d67b63741f25)
の
![{\displaystyle \mathbf {F} _{p}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/c3f9e5be7d9aabb5ceafb61a21e637f72e5ce7dd)
における逆元とする。
は有理数体
から 有限体
への体準同型写像であり、
上の加法、乗法、逆元は
上の加法、乗法、逆元に写される。例えば
における除算は、
では逆元を乗ずる操作に写される。
離散的楕円曲線の例: 有限体 F61 上の楕円曲線 y2 = x3 − x
上で定義された楕円曲線
を素数
で還元した離散的楕円曲線
は
上では次の式で定義される。
![{\displaystyle E(\mathbb {\mathbf {F} _{p}} ):y^{2}=x^{3}+a_{p}\,x+b_{p}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/1988a1a563d3347c8b641c84b117107a3e32edd4)
ただし、
は
の元であり、
とする。
このようにして定義された離散的楕円曲線は、グラフにすれば最早曲線ではなく、離散した点の集まりにしか見えない(ただし分布は直線
に対して対称である)。
しかし、上述の接弦法の加法の計算式は、
または
による除法を、
における逆元
または
による乗法に置き換えればそのまま成り立つ。
なお、前述のように、
上においては、始点が整点でない巡回加群の位数は無限大であるが、楕円曲線
の
による像である
上の楕円曲線
は有限集合であり、当然位数も有限となる。
補足:上記の方法を拡張して、有限体
の
次拡大体
上での楕円曲線
を用いる暗号法も考案されており、実用的な仕様も公開されているが、話が煩雑になるので立ち入らないことにする。
ベースポイントと巡回群の位数[編集]
楕円曲線
上のある点
から、
を計算していくと、次々と異なる(楕円曲線上の)点が得られるが、上述のように
は有限集合であるから、この点列はいずれは無限遠点
に到達する(ただし楕円曲線によってはそのようなGはG=Oしか無い事もある)。その後は、
と繰り返される。このように
からスカラー倍算によって得られる点の集合を
と書くことにすると、
は巡回群となる。
は巡回群の位数と呼ばれ、
を生成する元
はベースポイントとも呼ばれる。
上の全ての点の個数を
とすれば、これは高々
個(無限遠点
を含む)であり、位数
はこれより小さくなるが、楕円曲線のパラメーター
に依存し、実際の値はSchoofのアルゴリズムまたはその改良版などを用いて
を計算しないと分からない(
の値の範囲については、ハッセの定理という手掛かりがある)。
が素数の場合、巡回群
の全ての元は
の生成元であり、それらの位数は全て
になる。
楕円曲線暗号においては
はなるべく大きな素数であることが、暗号強度を強くする上で必要とされるが、これに適したパラメーター
の決定は、多数のパラメーターの候補について、Schoofのアルゴリズムまたはその改良版などを用いて
を計算するという試行錯誤により行われる。
で定義される値
はコファクターと呼ばれるが、この値は 1 に近いことが望ましい。
の取り方によっては、
とすることが可能である(後述の secp256k1 では
である)。
の場合、
上の点は、ほぼ全て
の元であるので、ベースポイントを見つけることは容易になる。モーデルの定理が示唆するように
以外の場合も可能であり、
となる実用的楕円曲線の仕様もある。
離散対数と離散対数問題[編集]
巡回群
の任意の要素(楕円曲線上の点)
に対し、
を満たす
が
の中に常にただ一つ存在する。このような
を
の離散対数と呼ぶ。また、
から無作為に選らばれた
を与えられ、その離散対数を求めよという問題を、楕円曲線上の離散対数問題 と呼ぶ[注 1]。
と
の対応は1対1であり、
から
を計算することは比較的容易だが、
から
を計算することは実質的に不可能である。つまり
と
の対応は一方向性関数になっている。
また、
の二つの点
が与えられた場合、
を求めよという問題を、楕円曲線上のディフィー・ヘルマン問題 と呼ぶ。解法としては、
または
についての離散対数問題を解く以外の方法は知られておらず、この問題は一方向性関数として使用可能であり、公開鍵(
)を開示してる者同士が暗号鍵を共有する手段として使われている(ディフィー・ヘルマン鍵共有)。
巡回群の位数
が小さければ、離散対数問題やディフィー・ヘルマン問題が容易に解けてしまうため、位数が巨大な素数になるようなパラメーター
が使用される。
楕円曲線のパラメーターの一例として、ビットコインで使われている楕円曲線暗号である secp256k1 のものを示す[9]。
![{\displaystyle p=2^{256}-2^{32}-2^{9}-2^{8}-2^{7}-2^{6}-2^{4}-1}](https://wikimedia.org/api/rest_v1/media/math/render/svg/a60a65fe6fad38091c157fa5b1e2c8def07e7224)
= FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F
![{\displaystyle E:\,y^{2}=x^{3}+7}](https://wikimedia.org/api/rest_v1/media/math/render/svg/49f8e0c56897f07fda200e704afcf345c9a7d995)
![{\displaystyle G=(x_{G},y_{G})}](https://wikimedia.org/api/rest_v1/media/math/render/svg/a62f942673ad42f03b40459ad2bade11d183cf61)
= 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798
= 483ADA77 26A3C465 5DA4FBFC 0E1108A8 FD17B448 A6855419 9C47D08F FB10D4B8
= FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141
= 1
スカラー倍算の効率化[編集]
暗号化・復号の過程において、
(
は楕円曲線上の点)というスカラー倍算を行う。
ナイーヴな実装としては
というように Pを
回加算(1回目は2倍算となる)するが、これでは効率が悪い。
スカラー倍算はRSA暗号などにおけるべき乗剰余演算とリンクしており、これの高速化手法もそれから流用できるものが多い。例えば、そのひとつとして有名なBinary法では、dを2進数表記し、dの各ビット
が "0" の場合は2倍算のみを行い、"1" の場合は2倍算と加算を行うことにより、ナイーブな実装と同じ計算をより高速に行なっている。この計算手法では、2倍算はべき乗剰余演算における自乗算、加算は掛け算にそれぞれ対応している。
この演算は楕円曲線暗号の根幹を成している部分であり、楕円曲線暗号を利用する際の時間の大半を占めている。ゆえに、ICカードなどハードウェア上に演算回路を実装する場合はサイドチャネル攻撃(特にSPA、DPA)のターゲットとなる箇所なので工夫が必要となる。
攻撃手法[編集]
サイドチャネル攻撃[編集]
楕円曲線上で楕円加算 P + Q を行う場合、加算(P ≠ Q)と2倍算(P = Q)では演算プロセスが大きく異なる。そのため、サイドチャネル攻撃(例えば、タイミング攻撃や単純電力解析/差分電力解析)への対策(例えば [10] など)が必要である。あるいは、ツイステッドエドワーズ曲線(英語版)を使うこともできる。この曲線は、加算と2倍算を同じ演算プロセスで実行できる特別な楕円曲線の族である。[11]
量子コンピュータを用いた攻撃[編集]
離散対数問題を効率的に解くことのできるショアのアルゴリズムは、楕円曲線暗号の解読にも利用できる。256ビットの法を持つ楕円曲線暗号(128ビット安全)を破るためには、2330量子ビット、1,260億トフォリゲートのリソースを持つ量子コンピュータが必要であると見積もられている。[12]
一方、アメリカ国立標準技術研究所の勧告(NIST SP 800-57)によりこれと同等のセキュリティレベルとされる3072ビット鍵のRSA暗号を破るためには、6146量子ビット、18.6兆トフォリゲートが必要であり[12]、量子コンピュータにとっては、RSA暗号に比べ楕円曲線暗号は攻撃しやすいといえる。[独自研究?]いずれにせよ、これらのリソースは現在実存する量子コンピュータのリソースをはるかに超えており、このようなコンピュータの構築は10年以上先になると見られている[要出典]。
同種写像暗号は、楕円曲線の同種写像を用いた暗号方式であり、量子コンピュータに対して耐性がある(耐量子)と考えられている。同種写像暗号の例としてディフィー・ヘルマン鍵共有と同様に鍵共有を行うSIDHがある。従来の楕円曲線暗号と同じ体の演算を多く使用し、必要な計算量や通信量は現在使用されている多くの公開鍵システムと同程度である。
[13]
- ^ 最もポピュラーな離散対数問題は、
と
から
を求めよ、という問題であり、
から生成される乗法群の上で定義されている。これに対して、楕円曲線は加法群であるため、
を満たす
を離散対数と呼ぶ。
- ^ Koblitz, N. (1987). “Elliptic curve cryptosystems”. Mathematics of Computation 48 (177): 203?209. doi:10.2307/2007884. JSTOR 2007884.
- ^ Miller, V. (1985). “Use of elliptic curves in cryptography”. CRYPTO. Lecture Notes in Computer Science 85: 417?426. doi:10.1007/3-540-39799-X_31. ISBN 978-3-540-16463-0.
- ^ 足立恒雄『フェルマーの大定理 [第3版]』日本評論社、1996年5月、164-167頁。ISBN 4-535-78231-8。
- ^ J.Song『プログラミング・ビットコイン ゼロからビットコインをプログラムする方法』中川卓俊、住田和則、中村昭雄 監訳 星野靖子 訳、オライリー・ジャパン (オーム社)、2020年10月、36-40頁。ISBN 978-4-87311-902-1。
- ^ J.H.シルヴァーマン、J.テイト『楕円曲線論入門』足立恒雄ほか 訳、丸善出版、2012年7月、61頁。ISBN 978-4-621-06571-6。
- ^ S.Chandrashekar & N.Ramani (27 January 2010). SEC 2:Recommended Elliptic Curve Domain Parameters (Version 2.0) (PDF) (Report). Standards for Efficient Cryptography Group (SECG). p. 13. 2024年5月30日閲覧。
- ^ Hedabou, M.; Pinel, P.; Beneteau, L. (2004). “A comb method to render ECC resistant against Side Channel Attacks”. IACR ePrint Report. http://eprint.iacr.org/2004/342.
- ^ “Cr.yp.to: 2014.03.23: How to design an elliptic-curve signature system”. 2020年1月2日閲覧。
- ^ a b Roetteler, Martin; Naehrig, Michael; Svore, Krysta M.; Lauter, Kristin (2017). "Quantum resource estimates for computing elliptic curve discrete logarithms". arXiv:1706.06752 [quant-ph]。
- ^ De Feo, Luca; Jao, David; Plut, Jerome (2014). “Towards quantum-resistant cryptosystems from supersingular elliptic curve isogenies”. Journal of Math. Cryptology: 209–247. https://www.degruyter.com/view/j/jmc.2014.8.issue-3/jmc-2012-0015/jmc-2012-0015.xml.
参考文献[編集]
- N.コブリッツ『数論アルゴリズムと楕円暗号理論入門』櫻井幸一 訳、シュプリンガー・フェアラーク東京、1997年8月。ISBN 4-431-70727-1。
- Blake; Seroussi; Smart (1999). Elliptic Curves in Cryptography. CAMBRIDGE UNIVERSITY PRESS
関連項目[編集]