合同方程式の根
📂整数論合同方程式の根
アルゴリズム
自然数b,k,mがgcd(b,m)=gcd(k,ϕ(m))=1を満たす場合、合同方程式xk≡b(modm)の解xは以下のようにして計算できる。
ステップ 1.
ϕ(m)を計算する。
ステップ 2.
ku−ϕ(m)v=1を満たすu,vを見つけ、両辺をu乗してxku≡bu(modm)を得る。
ステップ 3.
bu(modm)を繰り返し二乗法で計算する。
説明
ϕはオイラーのφ関数で、乗法的性質を持っているからmの素因数分解が鍵となる。
知られているように、素因数分解には王道がなく、非常に難しい。巨大な素数p,qが存在して、m=pqとすると、まずx:=ϕ(m)を求めることから難しい。一見これは欠点に見えるかもしれないが、逆にxを暗号のように使うことができる。kとmが公開されていても、mの素因数分解を知らなければxの計算は非常に難しい。したがってmの素因数分解を知っている人だけがxを知る資格があれば、素晴らしい暗号システムとなる。このような暗号システムをRSA暗号という。
このアルゴリズムは、非常に大きな素数を見つけることが実用的な価値を持つことを示している。
証明
ku−ϕ(m)v=1を満たす整数解u,vの存在は保証されており、ku=ϕ(m)v+1であるため、
xku≡xϕ(m)v+1(modm)
オイラーのφ関数定理: gcd(x,m)=1⟹xϕ(m)≡1(modm)
xϕ(m)v+1≡x1=bu(modm)であるから、buだけを計算すればよい。gcd(x,m)=1を満たしていないが、このようにして得られたxは、与えられた合同方程式の解として全く問題がない。
xk=(bu)k=buk=b1+ϕ(m)v=b⋅bϕ(m)v
gcd(b,m)=1を仮定したので、次が成り立つ。
xk≡b(modm)
■