logo

合同方程式の根 📂整数論

合同方程式の根

アルゴリズム 1

自然数b,k,mb,k,mgcd(b,m)=gcd(k,ϕ(m))=1\gcd (b , m) = \gcd ( k , \phi (m) ) = 1を満たす場合、合同方程式xkb(modm)x^{k} \equiv b \pmod{ m }の解xxは以下のようにして計算できる。


ステップ 1.

ϕ(m)\phi (m)を計算する。


ステップ 2.

kuϕ(m)v=1ku - \phi (m) v =1を満たすu,vu, vを見つけ、両辺をuu乗してxkubu(modm)x^{ku} \equiv b^{u} \pmod{m}を得る。


ステップ 3.

bu(modm)b^{u} \pmod{ m }繰り返し二乗法で計算する。

説明

ϕ\phiオイラーのφ関数で、乗法的性質を持っているからmmの素因数分解が鍵となる。

知られているように、素因数分解には王道がなく、非常に難しい。巨大な素数p,qp,qが存在して、m=pqm=pqとすると、まずx:=ϕ(m)x := \phi (m)を求めることから難しい。一見これは欠点に見えるかもしれないが、逆にxxを暗号のように使うことができる。kkmmが公開されていても、mmの素因数分解を知らなければxxの計算は非常に難しい。したがってmmの素因数分解を知っている人だけがxxを知る資格があれば、素晴らしい暗号システムとなる。このような暗号システムをRSA暗号という。

このアルゴリズムは、非常に大きな素数を見つけることが実用的な価値を持つことを示している。

証明

kuϕ(m)v=1ku - \phi (m) v =1を満たす整数解u,vu,vの存在は保証されており、ku=ϕ(m)v+1ku = \phi (m) v + 1であるため、 xkuxϕ(m)v+1(modm) x^{ku} \equiv x^{ \phi (m) v + 1 } \pmod{m}

オイラーのφ関数定理: gcd(x,m)=1    xϕ(m)1(modm)\gcd(x,m) = 1 \implies x^{ \phi (m) } \equiv 1 \pmod{m}

xϕ(m)v+1x1=bu(modm)x^{ \phi (m) v + 1 } \equiv x^{ 1 } = b^{u} \pmod{m}であるから、bub^{u}だけを計算すればよい。gcd(x,m)=1\gcd (x, m) = 1を満たしていないが、このようにして得られたxxは、与えられた合同方程式の解として全く問題がない。

xk=(bu)k=buk=b1+ϕ(m)v=bbϕ(m)v x^{k} = \left( b^{u} \right)^{k} = b^{uk} = b^{ 1+ \phi (m ) v} = b \cdot b^{ \phi (m ) v} gcd(b,m)=1\gcd (b , m) = 1を仮定したので、次が成り立つ。 xkb(modm) x^{k} \equiv b \pmod{ m }


  1. Silverman. (2012). A Friendly Introduction to Number Theory (4th Edition): p119. ↩︎