久しぶりのブログ投稿になります。こんにちは。今回はsecp256k-1であるに整数解は存在しないことの証明を行いたいと思います。
元々はgemとC Libraryで書かれたsecp256k-1のライブラリが返す加算結果が違っていて、どっちのライブラリが正しい値かを手計算でも検算できそうな整数解となる点はどこかという話が発端でした。
納会のはずがy^2=x^3+7が整数解を持たないことの証明会に。 pic.twitter.com/P3Ij8GPgrH
— Shigeyuki Azuchi (@techmedia_think) 2018年12月28日
この話題のなかで、「secp256k-1 integer」などでググったところタイトルの通り、整数解は存在しないというhomeworkを見つけました。今回ではこのhomeworkの回答をみながら自分なりに証明をしていきたいと思います。
1. xが偶数の時の証明
より
\begin{align}
y^2=8n^3+7 \equiv 7 \bmod 8
\end{align}
により、は平方剰余ではないためyが整数となる解は存在しない。
2. xが奇数の時の証明
まず、両辺に1を足して、右辺を展開していきます。
\begin{align}
y^2+1 &= x^3+8 \notag \\
&= (x+2)(x^2-2x+4)
\end{align}
(3) についてある素数で割り切れることを示します。
xが奇数の場合、は次のようになります。
\begin{align}
x^2 &= (2n+1)^2 = 4n^2 + 4n + 1 \notag \\
&= 4n(n + 1) + 1
\end{align}
この時、奇数の要素となるnについてそれぞれ偶数の場合と奇数の場合で考えると、
偶数の場合:
\begin{align}
even: n = 2k とすると 8k(2k+1) + 1 \\
odd: n = 2k+1 とすると 4(2k+1)(2k+2) +1 = 8(2k+1)(k+1) + 1
\end{align}
となることから、
\begin{align}
x^2 \equiv 8n' + 1 \equiv 1 \bmod 8
\end{align}
次には、
\begin{align}
2x = 2(2n+1) = 4n + 2 \equiv 2 \bmod 4
\end{align}
(6)と(7)よりは、
\begin{align}
x^2-2x+4 &= 8n+1 - (4n+2) + 4 \notag \\
&= 4n + 3 \equiv 3 \bmod 4
\end{align}
となります。
式(1)と(8)よりはで割り切れることがわかったので、とすると、以下の式が成り立つ
\begin{align}
y^2+1 &= mp より \notag \\
y^2 &= mp -1 \notag \\
y^2 &= -1 \bmod p
\end{align}
(9)より、ある素数については平方剰余ではないため、yが整数となる解はありません。
まとめ
平方の定義とか、平方剰余とかについて学ぶいい機会になりました。あと、楕円曲線暗号として普段よく使っているsecp256k-1の式には整数解がないってことを知らなかったので意外な発見でした。ちなみに、bitcoinなどでは実際にはであり、剰余を用いているため公開鍵はx, y共に整数となっているようです。でも小数の剰余ってどうなるんだろう・・・・?よくわからなくなってきましたw
参考
- ELEMENTARY NUMBER THEORY HOMEWORK 4 (1)
- 平方剰余 - Security Akademeia
x = 奇数の時にx^2 = 1 mod 8になるのがわからん。
— Yukishige Nakajo (@nakajo) 2018年12月29日
x = 2n+1と置いたら、4n(n+1)+1になるから 1 mod 4になるんじゃないの?