数学
A(
講義ノート
)
桔梗宏孝
暗号や符号では有限の代数構造が重要になっている。整数や多項式をもと に組織的に代数構造が構成される様子を味わってほしい。1
整数
1.1
合同式
普通の時計において,12
時から針を3
時間進めても15
時間進めても3
時 を指している。また,9
時間逆にまわしても3
時である。一般に,12
時からx
時間(x
は整数で,正でも負でもよい)
進めると,x
を12
で割った余りの 時間を指している。ただし,余り0
の場合は12
である。現在よく使われて いる暗号や符号では,この「余りの世界」が使われている。 定理1.1.1
(割り算の原理) 任意の整数x
に対し,x = 12q + r,
0
≤ r < 12
となるq
とr
がちょうど1
組存在する。 さらに一般に,N > 0
とするとx = N q + r,
0
≤ r < N
となるq
とr
がちょうど1
組存在する。q
をx/N
の商,r
を余りと呼ぶ。r
をx mod N
とも書く。たとえば,
15 mod 12 = 3, 3 mod 12 = 3,
−9 mod 12 = 3
である。 定義1.1.2
(法N
の合同)N
̸= 0
を整数とする。整数x, y
に対し,x
− y
がN
の整数倍のときx
≡ y (mod N)
と書き,x
とy
は法N
で合同,ある いはmod N
で合同という。mod N
の合同という関係についての基本的な性質をまとめておく。 命題1.1.3
N , x, y
は整数で,N > 0
とする。(1)
x
≡ x (mod N)
(2)
x
≡ y (mod N)
ならばy
≡ x (mod N)
(3)
x
≡ y (mod N), y ≡ z (mod N)
ならばx
≡ z (mod N)
証明.
(3)
だけ示す。x
≡ y (mod N), y ≡ z (mod N)
と仮定する。する と,x
−y
とy
−z
は共にN
の整数倍である。すると,x
−z = (x−y)+(y−z)
より,
x
− z
もN
の整数倍である。□
命題
1.1.4
N , x, y, m
は整数で,N > 0
とする。(1)
x
≡ y (mod N) ⇐⇒ x mod N = y mod N
(2)
x
≡ y (mod N) ⇒ mx ≡ my (mod N)
(3)
m
̸= 0
のとき,x
≡ y (mod N) ⇐⇒ mx ≡ my (mod mN)
(4)
x
≡ y (mod mN) ⇒ x ≡ y (mod N)
証明.(1) x
≡ y (mod N)
と仮定する。x = q
1N + r
1, y = q
2N + r
2 とす る。r
1≥ r
2と仮定してよい。そうでなければ,x
−y = (q
1−q
2)N +(r
1−r
2).
x
−y
がN
の整数倍なので,r
1−r
2 もN
の整数倍。しかし,0
≤ r
1−r
2< N
なので,r
1− r
2= 0
.よって,x mod N = r
1= r
2= y mod N
.(2) x
− y
がN
の整数倍ならば,mx
− my = m(x − y)
もN
の整数倍。(3) (
⇒) x ≡ y (mod N)
と仮定する。すると,x
− y = qN (q:
整数)
と 書ける。すると,m(x
− y) = mqN
.よって,mx
− my
はmN
の整数倍。(
⇐) mx ≡ my (mod mN)
と仮定する。すると,mx
− my = qmN (q:
整数)
と書ける。すると,m(x
− y) = mqN
.m
̸= 0
なので,x
− y = qN
. よって,x
− y
はN
の整数倍。(4) mN
の整数倍はN
の整数倍になっている。□
mod N
で合同という概念は整数の足し算とかけ算との相性がよい。 命題1.1.5
x
≡ x
′(mod N )
かつy
≡ y
′(mod N )
ならば,x + y
≡ x
′+ y
′(mod N ),
xy
≡ x
′y
′(mod N )
証明.x
≡ x
′(mod N )
かつy
≡ y
′(mod N )
と仮定する。すると,x
− x
′ とy
− y
′ は共にN
の整数倍である。(x + y)
− (x
′+ y
′) = (x
− x
′) + (y
− y
′)
より,これもN
の整数倍。よって,x + y
≡ x
′+ y
′(mod N ).
また,xy
− x
′y
′= xy
− x
′y + x
′y
− x
′y
′= (x
− x
′)y + x
′(y
− y
′)
より,これもN
の整数倍。よって,xy
≡ x
′y
′(mod N ).
□
1.2
最大公約数とユークリッドの互除法
定義1.2.1
(約数,公約数) 整数m, d
に対し,m
がd
の整数倍のとき,d
をm
の約数と呼ぶ。d
がm
の約数かつd
がn
の約数のとき,d
をm
とn
の公約数と呼ぶ。m
とn
の公約数のうち最大のものをgcd(m, n)
と書き,m
とn
の最大公約数と呼ぶ。定理
1.2.2
(ユークリッドの互除法)m, n > 0
が整数で,m = qn + r
とすると(1)
r = 0
のとき,gcd(m, n) = n
(2)
r
̸= 0
のとき,gcd(m, n) = gcd(n, r)
証明.(1) n > 0
なので,n
の約数の最大値はn
.一方,r = 0
より,n
の 約数はm
の約数でもある。したがって,gcd(m, n) = n
.(2) d
を任意の整数とする。d
がm
とn
を同時に割り切ることとd
がn
とr
を同時に割り切ることが同値なことがすぐにわかる。 したがって,m
とn
の公約数の集合とn
とr
の公約数の集合は一致する。 よって,その最大値も一致する。□
正の整数m
とn
の最大公約数は次のようにして求まる。(1) r := m mod n
を計算。(0
≤ r < n
である)
(2) r = 0
の場合は,n
が最大公約数。(3) r > 0
の場合は,n
とr
の最大公約数が求めるもの。 すなわち,m := n; n := r
として,(1)
へもどる。 例1.2.3
2109
と1653
の最大公約数を求める。 引けるだけ引いた残りが余りであることに注意。2109
− 1653
=
456
1653
− 456 × 3 = 285
456
− 285
=
171
285
− 171
=
114
171
− 114
=
57
114
− 57 × 2
=
0
57
が求める最大公約数。gcd(2109, 1653) = gcd(1653, 456) = gcd(456, 285)
=
gcd(285, 171) = gcd(171, 114) = gcd(114, 57) = 57
問1.2.4
次の問に答えよ。1.
2257 mod 1073
を計算せよ(2257
÷ 1073
の余り)
。2.
2257
と1073
の最大公約数を求めよ。 上の例1.2.3
で,2
番目の式の左辺の456
を1
番目の式の左辺で置き換え ると1653
− (2109 − 1653) × 3 = 285
すなわち,1653
× 4 − 2109 × 3 = 285
456
− 285 = 171
の456
と285
を2109
と1653
の整数倍の和で置き換えると,171
も2109
と1653
の整数倍の和になることがわかる。 同様に,114
も2109
と1653
の整数倍の和になり,57
も2109
と1653
の 整数倍の和になる。 このことを一般に議論すれば,次の命題を得る。 命題1.2.5
m, n
̸= 0
を整数とするとmx + ny = gcd(m, n)
となる整数x, y
が存在する。この命題は次のような等式を考え,右辺に対してユークリッドの互除法を 適用することでも示せる。
x, y
も1
組求まる。(1)
2109
· 1
+1653
· 0
=
2109
当然の式(2)
2109
· 0
+1653
· 1
=
1653
当然の式(3)
2109
· 1
+1653
· (−1)
=
456
(1)
− (2)
(4)
2109
· (−3) +1653 · 4
=
285
(2)
− (3) × 3
(5)
2109
· 4
+1653
· (−5)
=
171
(3)
− (4)
(6)
2109
· (−7) +1653 · 9
=
114
(4)
− (5)
(7)
2109
· 11
+1653
· (−14) =
57
(5)
− (6)
gcd(m, n) = 1
となるときが重要である。 定義1.2.6
m, n
̸= 0
とする。gcd(m, n) = 1
のとき,m
とn
は互いに素で あるという。 命題1.2.7
m, n > 0
を整数とすると次の条件は同値である。(1)
m
とn
は互いに素。(2)
mx + ny = 1
となる整数x, y
が存在する。(3)
mx
≡ 1 (mod n)
となる整数x
が存在する。(4)
nx
≡ 1 (mod m)
となる整数x
が存在する。 証明.(1)
⇒ (2)
は命題1.2.5
による。(2)
⇒ (1)
.d = gcd(m, n)
とする。(2)
を仮定するとd
はm, n
を割り切 るからmx + ny
,すなわち1
を割り切る。d > 0
より,d = 1
.(2)
⇒ (3)
.mx + ny = 1
とする。ny
≡ 0 (mod n)
より,mx
≡ 1
(mod n)
.(3)
⇒ (2)
.mx
≡ 1 (mod n)
とする。すると,mx
− 1 = qn
となる整数q
がある。すなわち,mx + n(
−q) = 1
.(2)
と(4)
の同値性も同様である。□
定義
1.2.8
N > 0
を整数とする。整数m
に対し,mx
≡ 1 (mod N)
と なる整数x
をmod N
のm
の逆元(
あるいは逆数)
と呼ぶ。正確には, 乗法の逆元と呼ぶ。このとき,とくにx mod N (x
をN
で割った余り,0
≤ (x mod N) < N)
をm
−1mod N
と書く。 上の命題からm
がmod N
の逆元をもつことの必要十分条件はm
とN
が互いに素であることである。mod N
の逆元も(
あれば)
ユークリッドの互 除法で求められる。 例1.2.9
mod 97
で23
の逆元を求める。23x
≡ 1 (mod 97)
を解くのだが,常に正しい式97x
≡ 0 (mod 97)
も利 用する。2
つの式からユークリッドの互除法でx
の係数を小さくしていく。最初の2
つの係数が互いに素なら最後はx
≡ a (mod N)
の形の式になる。(1)
97x
≡
0
(mod 97)
あたりまえの式(2)
23x
≡
1
(mod 97)
解く式(3)
5x
≡
−4 (mod 97) (1) − (2) × 4
(4)
3x
≡
17
(mod 97)
(2)
− (3) × 4
(5)
2x
≡ −21 (mod 97) (3) − (4)
(6)
x
≡
38
(mod 97)
(4)
− (5)
23
× 38 = 874 = 97 × 9 + 1 ≡ 1 (mod 97)
さらに,(23
× 38 − 1)/97 = 9
より,23
× 38 + 97 × (−9) = 1
がわかる。 上の例のように,N x
≡ 0 (mod N)
とmx
≡ 1 (mod N)
に対して,x
の係数にユークリッドの互除法を施して,x
≡ a (mod N)
の形が出たら,a
は必ずmod N
でのm
の逆元になる。これは,すでに存在がわかっている からである。この方法で,
m
とn
が互いに素のとき,mx + ny = 1
となる整数x, y
も 計算できる。 問1.2.10
mod 97
で22
の逆元を求めよ。97x + 22y = 1
となる整数x, y
を一組求めよ。1
から96
までの数を適当に選んで,mod 97
での逆元を求 めよ。 問1.2.11
容積3
リットルのバケツと5
リットルのバケツがある。これを 利用して1
リットルの水を作る方法を述べよ。 容積1600cc
の容器と1300cc
の容器がある。これを利用して100cc
の水 を作る方法を述べよ。1.3
中国剰余定理
次のようなパズルがある。1
から100
までの数を思い浮かべてください。その数を3, 5, 7
で 割って,余りを教えてください。その数を当ててみせます。 思い浮かべた数をx
とすると,x
≡ a (mod 3), x ≡ b (mod 5), x ≡ c (mod 7)
という連立方程式を解くことになる。結論からいうと,
x = (70a + 21b + 15c) mod 105
となる。
これは次の定理からわかる。
となる整数
u, v
がある。このとき,{
x
≡ a (mod m)
x
≡ b (mod n)
の必要十分条件は
x
≡ nva + mub (mod mn).
とくに,上の連立方程式の解は
1
からmn (0
からmn
− 1)
の間にちょうど1
つ存在する。証明.
x
≡ a (mod m)
かつx
≡ b (mod n)
と仮定する。すると,nx
≡
na (mod mn)
かつmx
≡ mb (mod mn)
である。さらに,nvx
≡ nva
(mod mn)
かつmux
≡ mub (mod mn)
となり,両辺をそれぞれ加える と,(nv + mu)x
≡ nva + mub (mod mn)
.ここで,nv + mu = 1
なので,x
≡ nva + mub (mod mn)
.逆に,
x
≡ nva + mub (mod mn)
と仮定する。m
はmn
の約数なので,x
≡ nva + mub (mod m)
である。mu
≡ 0
(mod m)
とmu+nv = 1
より,nv
≡ 1 (mod m)
である。これと,mub
≡ 0
(mod m)
より,nva + mub
≡ a (mod m)
である。同様に,
nva + mub
≡ b (mod n)
である。□
例1.3.2
次の連立合同式を考える。x
≡ a (mod 3), x ≡ b (mod 5)
3
× 2 − 5 = 1
なので,これはx
≡ 6b − 5a (mod 15)
と同値。一方,x
≡ c (mod 7), x ≡ d (mod 15)
を考えると,
7
× (−2) + 15 = 1
より,これはx
≡ 15c − 14d (mod 105)
と同値。d = 6b
− 5a
を代入するとx
≡ 15c − 14(6b − 5a) (mod 105)
すなわち,x
≡ 70a − 84b + 15c (mod 105)
−84 ≡ 21 (mod 105)
なので,x
≡ 70a + 21b + 15c (mod 105)
これが,x
≡ a (mod 3), x ≡ b (mod 5), x ≡ c (mod 7)
1.4
オイラーの定理とフェルマーの小定理
定義1.4.1
N > 0
を整数とする。Z
∗N=
{a ∈ Z : 0 ≤ a < N, a
とN
は互 いに素}
と定義する。Z
∗N の要素の個数をφ(N )
と書く。φ(N )
をオイラー 関数と呼ぶ。 例1.4.2
Z
∗12=
{1, 5, 7, 11}, φ(12) = 4.
Z
∗ 10=
{1, 3, 7, 9}, φ(10) = 4.
Z
∗ 7=
{1, 2, 3, 4, 5, 6}, φ(7) = 6.
補題1.4.3
N > 0
を整数とする。(1)
a
とN
が互いに素ならばa mod N
∈ Z
∗N.
(2)
a
∈ Z
∗N ならばa
−1mod N
∈ Z
∗N.
(3)
a, b
∈ Z
∗N ならばab mod N
∈ Z
∗N.
証明.(1) a
とN
が互いに素とすると,命題1.2.7
より,ab
≡ 1 (mod N)
となる整数b
がある。a
′= a mod N
とすると0
≤ a
′< N
かつa
′≡ a
(mod N )
.すると,a
′b
≡ ab ≡ 1 (mod N)
.命題1.2.7
より,a
′ とN
は互 いに素。よって,a mod N = a
′∈ Z
∗N.(2) a
∈ Z
∗N とすると,a
とN
が互いに素なのでb = a
−1mod N
が存在す る。定義より,ab
≡ 1 (mod N)
かつ0
≤ b < N
である。よって,b
∈ Z
∗N である。(3) a, b
∈ Z
∗N とする。すると,aa
′≡ 1 (mod N)
,bb
′≡ 1 (mod N)
と なる整数a
′, b
′が存在する。c = ab mod N
とすると,0
≤ c < N
で,c
≡ ab
(mod N )
.よって,c(a
′b
′)
≡ ab(a
′b
′) = (aa
′)(bb
′)
≡ 1 (mod N)
.すなわち,
c
∈ Z
∗N.□
の整数
a
に対しa
φ(N )≡ 1 (mod N)
証明.a
∈ Z
∗N の場合に先ず議論する。Z
∗ N=
{a
1, . . . , a
m}
,m = φ(N )
と書ける。補題1.4.3
より,i = 1, . . .,
m
について,a
′i= aa
imod N
とするとa
′i∈ Z
∗N である。 主張.{a
′ 1, a
′2, . . . , a
′m} = {a
1, a
2, . . . , a
m}
i
̸= j
ならばa
′i̸= a
j′ を示せばよい。この対偶を示そう。a
′i= a
′j と 仮 定 す る 。す な わ ち ,aa
imod N = aa
jmod N
.す る と ,aa
i≡ aa
j(mod N )
.両辺にb = a
−1mod N
をかけると,baa
i≡ baa
j(mod N )
.ba
≡ 1 (mod N)
なので,1
· a
i≡ 1 · a
j(mod N )
.すなわち,a
i≡ a
j(mod N )
.0
≤ a
i, a
j< N
なので,a
i= a
j.これで,主張が示せた。主張より,左右それぞれの要素をすべて掛け合わせても等しいので,
a
′1a
′2· · · a
′m= a
1a
2· · · a
ma
′i≡ aa
i(mod N )
より,a
ma
1a
2· · · a
m= (aa
1)(aa
2)
· · · (aa
m)
≡ a
1a
2· · · a
m(mod N )
すなわち,
a
ma
1a
2· · · a
m≡ a
1a
2· · · a
m(mod N )
b
i= a
−1imod N
とする。この両辺にb
m· · · b
2b
1 をかけると,a
m(a
1a
2· · · a
m)(b
m· · · b
2b
1)
≡ (a
1a
2· · · a
m)(b
m· · · b
2b
1)
(mod N )
a
ib
i≡ 1 (mod N)
なので,(a
1a
2· · · a
m)(b
m· · · b
2b
1)
≡ 1 (mod N)
.よ って,a
m≡ 1 (mod N)
a
をN
と 互 い に 素 な 任 意 の 整 数 と す る 。a
′= a mod N
と す る と ,a
′φ(N)≡ 1 (mod N)
であるが,a
≡ a
′(mod N )
より,a
φ(N )≡ a
′φ(N)≡ 1
(mod N )
.□
Z
∗ 10=
{1, 3, 7, 9}
で上の議論を考えてみる。3
· 1 ≡ 3 (mod 10)
(1)
3
· 3 ≡ 9 (mod 10)
(2)
3
· 7 ≡ 1 (mod 10)
(3)
3
· 9 ≡ 7 (mod 10)
(4)
よって,(3
· 1)(3 · 3)(3 · 7)(3 · 9) ≡ 3 · 9 · 1 · 7 (mod 10)
したがって,3
4(1
· 3 · 7 · 9) ≡ 1 · 3 · 7 · 9 (mod 10)
両辺に9
· 3 · 7
をかけると,3
4(3
· 7 · 9)(9 · 3 · 7) ≡ (3 · 7 · 9)(9 · 3 · 7) (mod 10)
(3
· 7 · 9)(9 · 3 · 7) ≡ 1 (mod 10)
より,3
4≡ 1 (mod 10)
p
が素数ならば,Z
p∗=
{1, 2, . . . , p − 1}
である。したがって次の定理を 得る。 定理1.4.5
(フェルマーの小定理)p
を(
正の)
素数とする。整数a
がp
で 割り切れないならばa
p−1≡ 1 (mod p)
さらに,任意の整数a
に対しa
p≡ a (mod p)
素数
p
に対してはもっと強いことが成り立つ。 定理1.4.6
p
が素数のとき,Z
∗p は1
つの要素のべき(mod p)
で生成され る。すなわち,あるa
∈ Z
∗p に対し,Z
∗p=
{a
imod p : i = 1, 2, . . . , p
− 1}
a
を生成元あるいは原始元と呼ぶ。 証明は少し長くなるので省略する。 例1.4.7
Z
∗7 は3
で生成される。5
も生成元である。 命題1.4.8
Z
∗p の生成元はちょうどφ(p
− 1)
個ある。 証明.a
をZ
∗p の生成元とする。l > 0
でl
とp
− 1
が互いに素のとき,a
l も生成元になることを示せばよい。l
とp
− 1
が互いに素なので,lj
≡ 1 (mod p − 1)
となる整数j > 0
があ る。lj = 1 + m(p
− 1) (m ≥ 0)
と書ける。 すると,(a
l)
j= a
lj= a
1+m(p−1)= a(a
p−1)
m≡ a · 1
m= a (mod p).
よって,a
l の累乗で,Z
∗p の要素がすべて表せる。□
この命題を少し一般化して,ちょっとした個数の計算をするとZ
∗p の生成 元の存在が示せる。1.5
RSA
暗号
コンピュータ上のデータ(
テキスト,ファイル)
は0
と1
の有限列(2
進 列,ビット列)
で表現されている(
と考えられる)
。この節では,内容がわか らないようにしてファイルを送信するための暗号の技術の一つを解説する。 ファイルは2
進列であるが,2
進列は2
進数と解釈すると整数を表してい ると考えられる。例
1.5.1
(2
進数)11010110
を2
進数として考えると1
· 2
7+ 1
· 2
6+ 0
· 2
5+ 1
· 2
4+ 0
· 2
3+ 1
· 2
2+ 1
· 2
1+ 0
· 2
0 になる。2
進数の足し算では10
進数のときと同様に一般に繰り上がりが生 じる。掛け算も10
進数のときと同様にできる。RSA
暗号は公開鍵暗号と呼ばれる暗号である。一般に暗号化と暗号の復 号という操作が必要であるが,暗号化と復号に同じ鍵を使う場合を共通鍵暗 号と呼び,暗号化の鍵と復号の鍵が異なり,暗号化のための鍵を公開しても 問題ないものを公開鍵暗号と呼ぶ。 共通鍵暗号は,情報を共有したいグループごとに固有の鍵が必要である。 したがって,鍵がたくさん必要になる。公開鍵暗号の場合は,同じ人に暗号 を送るときは,1
つの公開鍵ですむ。 定義1.5.2
(RSA
暗号)p, q
を2
つの異なる大きな素数とする。L
をp
− 1
とq
− 1
の(
最小)
公倍数とする。e
をL
と互いに素な数とする。たとえば,e = 41, 257, 65537
で試し,それでもだめなら2
ずつ増やしていって見つけ る。N = pq
とする。 公開鍵: e
とN
暗号化法:
平文x < N
に対し,y = x
emod N
を暗号とする。 復号法: d = e
−1mod L
とすると,x = y
dmod N
で復号できる。 定理1.5.3
RSA
の暗号は上記の復号法で復号できる。 証明.y = x
emod N
とする。ed
≡ 1 (mod L)
より,ed = 1 + mL
と書 ける。y
d≡ x
ed(mod N ).
N = pq
より,y
d≡ x
ed(mod p),
y
d≡ x
ed(mod q)
L
はp
− 1
の倍数なので,x
ed= x
1+mL= x(x
p−1)
m′ と書ける。x
がp
の倍数でなければ,x
ed= x(x
p−1)
m′≡ x · 1
m′≡ x (mod p)
x
がp
の倍数ならば両辺とも0
と合同なので,いつでもx
ed≡ x (mod p)
よって,y
d≡ x (mod p)
同様にy
d≡ x (mod q)
中国剰余定理より(
あるいはy
d− x
がp
とq
で割り切れるから)
y
d≡ x (mod pq)
0 < x < N = pq
なので,y
dmod N = x.
□
原理的には公開鍵e, N
から秘密鍵d
を求めることは可能である。N = pq
と因数分解すればあとは簡単であるが,実はp
とq
の桁が大きいと(
例えば1000
ビット程度)
,実際にN
の因数を早く見つける方法は今のところ知られ ていない。もちろん,しらみつぶしにp
を生成してN
を割ってみればよい のであるが,2
1000 個近く調べる必要があり,現在のコンピュータをもって してもこの方法では相当時間がかかる。他にd
を求める方法は知られていな い。ただし,早く計算する方法がないことが証明できているわけでもない。 ロシアの当局がうまい方法を見つけて公表していないだけかも知れない。 ところで,d
の桁も1000
桁程度あるかも知れないが,その場合はy
dmod
N
を計算するのに2
1000 回程度の掛け算をする必要があるのだろうか。そうだとしたら暗号の復号は事実上できなくなる。しかし,うまくやるとべきの 桁数程度の演算回数で累乗計算ができる。 命題
1.5.4
d
の2
進数表現をα
とする。するとx
dmod N
の計算はα
の 長さ程度の回数のmod N
の掛け算でできる。 証明.2
進数α
に対し,0
を最後につけたα0
はα
× 2
を表し,1
を最後に つけたα1
はα
× 2 + 1
を表す。したがって,x
αmod N = a
とすると,x
α0mod N = a
2mod N,
x
α1mod N = a
2x mod N
これを利用すると,
d
の2
進数表現の桁数程度の演算でx
dmod N
が計算で きる。 例えば,3
37mod 100
を計算してみよう。37 = 100101
2 である。べきを2
進数で書く。3
1= 3,
3
10= 3
2= 9,
3
100= (3
10)
2= 81,
3
1001= (3
100)
2· 3 = 81
2· 3 ≡ 83 (mod 100)
3
10010= (3
1001)
2≡ 83
2≡ 89 (mod 100)
3
100101= (3
10010)
2· 3 ≡ 89
2· 3 ≡ 63 (mod 100)
□
1.6
ElGamal
暗号
RSA
暗号は大きな素数の積の素因数分解が難しいことを利用した暗号 であるが,ここで紹介するElGamal
暗号は次の離散対数問題の難しさを 利用した暗号である。RSA
は整数の性質にかなり依存した暗号であるが,ElGamal
暗号は演算が1
つ定義されている状況(
いわゆる群)
でも同様の暗号が考えられるという意味でより汎用的である。
IC
カードの情報は楕円曲 線と呼ばれる代数曲線上の点同士で定義されるある演算を使ったElGamal
暗号で暗号化されている。 離散対数問題について述べよう。Z
n∗ や有限体の乗法群において,b
をそ の要素とするとき,b
xの計算はx
が整数のとき高速にできるが,与えられた 要素b
′ に対し,b
x= b
′ となる整数x
を求めるのはかなり困難である。この ようなx
をb
とb
′ から求める問題を離散対数問題と呼ぶ。離散対数問題は 任意の群において考えることができる。また,次の仮定をDiffie-Hellman
の仮定と呼ぶ。p
を大きな素数とする。Z
∗p の要素g
に対し,g
amod p
とg
bmod p
の値からg
abmod p
の値を計算するのは困難である。ElGamal
暗号 大きな素数q
を固定する。Z
∗q は位数(
大きさ)q
− 1
の巡回群である。q :=
適度に大きな素数(
擬素数); (q
は公開する)
1 < g < q
− 1
なるg
を1
つ選ぶ.(g
も公開する)
g
はZ
∗p の生成元が望ましい。1 < a < q
− 1
をランダムに選ぶ.(a
は秘密鍵)
h = g
amod q; (h
は公開する)
x
の暗号化(0 < x < q):
(g
kmod q, xh
kmod q)
復号:
暗号(y, z)
に対し,x = zy
−amod q
この復号の方法でもとに戻ることを示しておく。y = g
kmod q
より,y
a≡ g
ka(mod q)
.y
′= (y
a)
−1mod q
とすると,y
′g
ka≡ 1 (mod q)
.するとz = xh
k≡ xg
ak(mod q)
.したがって, zy
′2
多項式
(
整式
)
コンピュータ上ではデータは2
進列で表されており,RSA
暗号などでは2
進列を2
進数と考えて,整数の演算を利用してデータの加工を行なってい る。2
進列は2
進数と考える必要があるわけではない。誤り訂正符号などで はある種の多項式と考えた場合の演算を利用している。この節ではこの考え 方を説明する。10
進数(
整数) 1425
は10
3+ 4
· 10
2+ 2
· 10 + 5
を表わしていて,これから10
進数同士の足し算と掛け算の筆算方法が導か れる。1
4
2
5
+
3
17
16
1
8
0
1
1
4
2
5
×
3
7
6
8
5
5
0
9
9
7
5
4
2
7
5
5
3
5
8
0
0
次に1
変数整数係数多項式を考えよう。たとえば,x
3+ 4x
2+ 2x + 5
や3x
2+ 7x + 6
などがこの例である。これらの和や積は,整数の筆算と似た方 法で計算できる。x
を省略して,係数だけ並べるだけで計算ができる。多項 式の演算は繰り上がりがないのが特徴である。1
4
2
5
+
3
7
6
1
7
9
11
1
4
2
5
×
3
7
6
6
24
12
30
7
28
14
35
3
12
6
15
3
19
40
53
47
30
結果の列
1 7 9 11
はx
3+ 7x
2+ 9x + 11
,3 19 40 53 47 30
は3x
5+ 19x
4+
40x
3+ 53x
2+ 47x + 30
のことである。x
を変数とする1
変数整数係数多項 式の全体をZ[x]
と書く。 さらに,多項式の係数をmod 10
で計算することにすると次のように なる。1
4
2
5
+
3
7
6
1
7
9
1
1
4
2
5
×
3
7
6
6
4
2
0
7
8
4
5
3
2
6
5
3
9
0
3
7
0
これは10
進数の筆算に非常に近く,実は繰り上がりをすべて無視した演算 になる。Z
10=
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
とおく。係数をZ
10 の要素に限定 した変数x
の多項式全体をZ
10[x]
と書く。上の演算をZ
10[x]
の足し算と掛 け算と呼ぶ。 同じことを2
進列に対して考える。2
進列が与えられたとき,それら(0
と1)
を係数とする1
変数整数係数多項式と考えて足し算や掛け算を行い,最 後に係数を2
で割った余りで置き換える。Z
2=
F
2=
{0, 1}
とし,F
2 に係 数をもつ変数x
の多項式全体をF
2[x]
と書き,この足し算と掛け算をF
2[x]
の足し算と掛け算と呼ぶ。 たとえば1011
はx
3+ x + 1
のことと考える。x
を表わす2
進列は10
で ある。x
2= 10
2= 100
,x
3= 10
3= 1000
,. . .
となっている。F
2[x]
の要素 として,1011 + 111
と1011
× 111
は次のようになる。1
0
1
1
+
1
1
1
1
1
0
0
1
0
1
1
×
1
1
1
1
0
1
1
1
0
1
1
1
0
1
1
1
1
0
0
0
1
足し算はビットごとの排他的論理和になっている。2.1
F
2[x]
の割り算の原理
定義2.1.1
F
2[x]
の要素(
多項式)
に対して,係数が0
でない項の最大次数 をその多項式の次数と呼ぶ。たとえば,1011 = x
3+ x + 1
の次数は3
次で ある。一般に,1
から始まるn
ビットの列はF
2[x]
のn
− 1
次多項式を表す。f
∈ F
2[x]
に対し,f
の次数をdeg f
と書く。この定義だと0
の次数は決ま らない。0
の次数を−∞
とする流儀もあるが,定数項しかないという考え で,0
の次数も0
にしておく。 また,f
∈ F
2[x]
に対し,x
にa
を代入してF
2=
Z
2 で計算(
すなわち,mod 2
で計算)
した結果をf (a)
と書く。f = 1011 = x
3+ x + 1
のとき,f (0) = (0
3+ 0 + 1) mod 2 = 1
,f (1) = (1
3+ 1 + 1) mod 2 = 3 mod 2 = 1
である。 定理
2.1.2
(割り算の原理)f
∈ F
2[x]
でf
̸= 0
とする。任意のg
∈ F
2[x]
に対し,g = qf + r,
0
≤ deg r < deg f
となるq, r
∈ F
2[x]
がちょうど1
組存在する。q
をg/f
の商,r
を余りと呼ぶ。r
をg mod f
とも書く。F
2=
Z
2 で,−1 ≡ 1 (mod 2)
に注意すると,割り算も整数の割り算の筆 算と同様にできる。繰り上がりがないので,引き算で「借りる」必要がない。1
1
1
1
1 ) 1
0
1
1
1
1
1
1
0
1
1
1
1
1
0
1
1
1
×
1
1
1
1
1
1
1
1
1
0
0
1
+
1
0
1
0
1
1
この例は,
1011 = x
3+ x + 1
を111 = x
2+ x + 1
で割る計算で,右側は検 算である。F
2[x]
で0
でない多項式は最高次の係数が1
である。するとこの ような筆算が必ずできることがわかる。したがって,割り算の原理が成り立 つ。この割り算の原理を使うとF
2[x]
が整数と同じような性質をたくさんも つことがわかる。 多項式が整数と異なる点は,根の概念である。多項式f = f (x)
∈ F
2[x]
に対し,x
にF
2 の要素a
を代入してF
2 で計算した値をf (a)
と書く。F
2=
{0, 1}
なので,f (0)
とf (1)
しか考えない。f (a) = 0
となるとき,a
をf
の根と呼ぶ。 定義2.1.3
f , g
∈ F
2[x]
とする。f = gh
となるh
∈ F
2[x]
があるとき,g
をf
の因子(
因数)
と呼ぶ。g
がf
の因子であることとf mod g = 0
が同値 である。 定理2.1.4
(因数定理)a
∈ F
2 とする。x
− a (
係数の2
進表記は1a)
がf
∈ F
2[x]
の因子であることと,f (a) = 0 (a
がf
の根)
が同値である。 証明. 割り算の原理から,f (x) = (x
− a)q + r
で,r
の次数が0
次の形で 書ける。0
次多項式はF
2 の要素である。すると,f (a) = r
.よって,余りr
が0
ということと,f (a) = 0
が同値になる。□
定義2.1.5
(法F
の合同)F
̸= 0
をF
2[x]
の要素とする。多項式f , g
∈
F
2[x]
に対し,f
− g
がF
で割り切れるとき(
余りが0)
,f
≡ g (mod F )
と 書き,f
とg
は法F
で合同,あるいはmod F
で合同という。mod F
の合同という関係についての基本的な性質をまとめておく。 命題2.1.6
F , f , g, h
∈ F
2[x]
で,F
̸= 0
とする。(1)
f
≡ f (mod F )
(2)
f
≡ g (mod F )
ならばg
≡ f (mod F )
(3)
f
≡ g (mod F ), g ≡ h (mod F )
ならばf
≡ h (mod F )
命題
2.1.7
F , f , g, h
はF
2[x]
の要素とする。(1)
f
≡ g (mod F ) ⇐⇒ f mod F = g mod F
(2)
f
≡ g (mod F ) ⇒ hf ≡ hg (mod F )
(3)
h
̸= 0
とする。f
≡ g (mod F ) ⇐⇒ hf ≡ hg (mod hF )
(4)
f
≡ g (mod hF ) ⇒ f ≡ g (mod F )
命題2.1.8
f
≡ f
′(mod F )
かつg
≡ g
′(mod F )
ならば,f + g
≡ f
′+ g
′(mod F ),
f g
≡ f
′g
′(mod F )
2.2
最大公約数とユークリッドの互除法
定義2.2.1
(約数,公約数)F
2 係数1
変数多項式f , g, h
に対し,f = gh
と書けるとき,g(h
も)
をf
の因子(
因数)
と呼ぶ。h
がf
の因子かつh
がg
の因子のとき,h
をf
とg
の公因子と呼ぶ。f
とg
の公因子のうち次数が最 大のものをgcd(f, g)
と書き,f
とg
の最大公因子と呼ぶ。 定理2.2.2
(ユークリッドの互除法)f, g
がF
2 係数1
変数多項式で,g
̸= 0
のとき,f = qg + r
とすると(1)
r = 0
のとき,gcd(f, g) = g
(2)
r
̸= 0
のとき,gcd(f, g) = gcd(g, r)
F
2 係数多項式f
とg
̸= 0
の最大公因子は次のようにして求まる。(1) r := f mod g
を計算。(deg g > 0
ならば0
≤ deg r < deg g
である)
(2) r = 0
の場合は,g
が最大公因子。(3) r
̸= 0
の場合は,g
とr
の最大公因子が求めるもの。 すなわち,f := g; g := r
として,(1)
へもどる。(1)
の計算のあとdeg r = 0
となると,r = 1
あるいは0
なので,遅くと も次の回で終了する。 例2.2.3
1111 (= x
3+ x
2+ x + 1)
と1010 (= x
3+ x)
の最大公因子を求 める。1111
− 1010
=
101
1010
− 101 × 10 =
0
101 (= x
2+ 1)
が最大公因子。 命題2.2.4
f, g
̸= 0, f, g ∈ F
2[x]
とするとf u + gv = gcd(f, g)
となるu, v
∈ F
2[x]
が存在する。gcd(m, n) = 1
となるときが重要である。 定義2.2.5
f, g
̸= 0, f, g ∈ F
2[x]
とする。gcd(f, g) = 1
のとき,f
とg
は 互いに素であるという。 命題2.2.6
f, g
̸= 0, f, g ∈ F
2[x]
とすると次の条件は同値である。(1)
f
とg
は互いに素。(2)
f u + gv = 1
となるu, v
∈ F
2[x]
が存在する。(3)
f u
≡ 1 (mod g)
となるu
∈ F
2[x]
が存在する。(4)
gv
≡ 1 (mod f)
となるv
∈ F
2[x]
が存在する。 整数における素数に対応する概念が既約多項式である。g
∈ F
2[x]
に対し,g
̸= 0
ならばg
とf
が互いに素になるとき,f
を既約と 呼ぶ。f
が既約であることと,f
がF
2[x]
において1
次以上deg f
未満の因 子をもたないことが同値である。 整数において,p
が素数のとき,Z
∗p=
{1, . . . , p − 1}
とすると,これはmod p
の掛け算で閉じていて,Z
∗p のどの要素も乗法の逆元をZ
∗p にもって いた。さらに,Z
∗p は1
つの要素の(mod p
での)
累乗で生成されていた。 これと同じような状況が既約多項式で割った余りの集合で起きる。2.3
F
2[x]
の既約多項式
F
2[x]
における既約多項式をいくつか調べてみよう。例によって,係数を 並べたビット列で表記する。左が高次の係数である。一般に,F
2[x]
の要素 が1
次の因子をもたないためには定数項(
一番右)
が1
で,1
の個数が奇数 である必要がある。たとえば,f = 101
とすると,f (1) = 1
2+ 1 = 0
なの で101
は既約でない。また,m
次式とn
次式を掛けるとちょうど(m + n)
次式になる。よって,因子をもてば,半分以下の次数の(
既約)
因子をもつ。 たとえば,7
次式が4
次の因子をもつとすると,4
次×3
次の形の因数分解 ができる。すなわち,3
次の因子をもつ。さらに分解できれば,もっと低い 次数の既約因子をもつ。1
次式10, 11 (1
次式はすべて既約)
2
次式111
1
次の因子をもたない条件,最高次(
一番左)
が1
で,定数項が1
で,1
の個数が奇数個を満たすのはこれしかない。2
次式は因子をもてば1
次の因子をもつので,111
は既約。3
次式1011, 1101
1
次の因子をもたないのはこの2
つ。3
次式が因数分解できたら1
次 の因子をもつはずなので,これらは既約である。4
次式10011, 11001, 11111
1
次の因子をもたないのはこれらと10101
.4
次式が因数分解できる とすると,1
次式または2
次式の既約因子をもつ。したがって,111
で割り切れないことだけ調べればよい。上の3
つは111
で割ると余 りが0
でない。一方,10101 = 111
2 である。 問2.3.1
F
2[x]
の8
次多項式110000111
がF
2[x]
で既約であることを示せ。(
ヒント.8
次式が既約でなければ,4
次以下の既約因子をもつ。)
実は次が成り立つ。 定理2.3.2
自然数n
≥ 1
に対し,F
2[x]
にはn
次の既約多項式がある。 実数係数の1
変数既約多項式は高々2
次で,複素数係数の1
変数既約多項 式は1
次のものしかない。有理数係数の場合も,n
≥ 1
ならばn
次の既約多 項式がある。2.4
2
n元体
F
2[x]
の2
次以下の要素は,{0, 1, 10, 11}
である。この集合はF
2[x](
多項 式)
の和で閉じている。f , g
をこの2
次以下の多項式とするとき,f
とg
の 積をf g mod 111 (
多項式として掛けて,111
で割った余りを演算結果とす る)
で定義する。このように和と積を考えたとき,F
4=
{0, 1, 10, 11}
と定義する。F
4 はこの和と積について,F
2[x]
や整数とほぼ同様の性質を 満たし,さらに,0
でない要素は積について逆元をもつ。実際,10
× 11 =
110
≡ 1 (mod 111)
.すなわち,a
̸= 0
ならばax = 1
となるx
がとれる。 このような性質をもつものを体と呼ぶ。0
でないものについて(
余りのない)
割り算ができるので,有理数や実数などと同じである。F
4 は4
つの要素からなる体なので,
4
元体と呼ばれる。一般に,q
個の要素からなる体をq
元 体と呼ぶ。 定理2.4.1
(2
n 元体の存在)F
をF
2[x]
のn
次の既約多項式とする。q =
2
n に対し,F
q=
F
2[x]
のn
− 1
次以下の多項式全体 とし,和をF
2[x]
における和,f , g
∈ F
q に対し,積f g
をf
とg
の多項式 としての積をF
で割った余りと定義する。すると,F
q は体になる。F
q の要素の個数はちょうどq
である。n
− 1
次以下の多項式の係数はn
− 1
次,n
− 2
次,. . .
,1
次,0
次のn
個の係数を並べて表現でき,それぞ れ値は0
または1
の2
通りずつある。したがって,2
n 通りある。 証明. 体の正確な定義をしていないが,ほとんどの性質はF
2[x]
の演算か ら受け継がれる。0
でないものが積について逆元をもつことを示せばよい。f
∈ F
q とすると,F
が既約なので,F
2[x]
の要素としてF
とf
の最大公因 子は1
である。命題2.2.6
より,f u + F v = 1
となるu, v
∈ F
2[x]
がある。g = u mod F
とするとg
はn
− 1
次以下で,f g
≡ 1 (mod F )
である。す なわち,F
q の演算で,f g = 1
である。□
3
次以上の既約多項式は複数あるので,F
q という表現は不適切に見える。 しかし,q
個の元からなる体は本質的に一つしかないことが知られているの で単にF
q と書くのである。しかし,この「本質的に一つ」という意味は少 し難しい概念なので省略する。積の定義に使う既約多項式が異なれば,同じ 表現の要素でも,積の値が異なることがある。以下,使う既約多項式はその つど固定されているものとする。 さて,F
∗q=
F
q− {0}
の要素は積について逆元をもっていたが,もっと強 く,ある1
つの要素のべきで生成できることが知られている。定理
2.4.2
(原始元の存在)q
元体F
q に対し,あるα
∈ F
∗q をうまくとるとF
∗q=
{α
i: i = 1, 2,
· · · , q − 1}
と書ける。特に,α
q−1= 1
である。α
をF
q の原始元と呼ぶ。 オイラーの定理の証明と同様に,x
∈ F
∗q ならばx
q−1= 1
がわかる。上の 定理は,F
q[y](
F
q 係数多項式)
の理論を使って証明されるが,少し長くなる ので省略する。 具体的なものについては,実際に確認できる。 例2.4.3
F
2[x]
においてmod 1011
で積を計算するF
8 を考える(8 = 2
3)
。 すると,10
が原始元である。実際,α = 10
とすると,α = 10,
α
2= 100,
α
3= 1000
≡ 11 (mod 1011),
α
4= 110,
α
5= 1100
≡ 111 (mod 1011),
α
6= 1110
≡ 101 (mod 1011),
α
7= 1010
≡ 1 (mod 1011).
既約多項式f
に対し,mod f
で考えた体の原始元として10 = x
が選べる とき,f
を原始既約多項式と呼ぶ。 問2.4.4
F
2[x]
の要素10011, 11001
は原始既約多項式であることを示せ。11111
は原始既約多項式ではない。mod 11111
の原始元を1
つ求めよ(11
がそう)
。2.5
体係数多項式
F
2n,Z/pZ (p
は素数)
のような集合をその足し算とかけ算の演算をこめ て体と呼ぶ。要素の個数がq
の体をq
元体と呼び,F
q と書く。要素の個数 がq
の体は本質的に1
つしかないことが知られているので,F
q という1
通 りの記法で書かれる。GF (q)
と書くこともある。p
が素数のとき,F
p=
Z/pZ = {0, 1, . . . , p − 1}
で,+
は整数として加え てからp
で割った余りをとる演算,·
は整数としてかけてからp
で割った余 りをとる演算である。n
≥ 2
に対し,F
p[x]
のn
次既約多項式f
が存在する。F
p[x]/(f )
は集合と してはF
p 係数n
− 1
次以下の1
変数多項式で,+
は多項式としての足し算(
係数ごとの足し算)
,·
はF
p係数多項式としてかけ算をしてからf
で割った 余りをとる演算である。F
p[x]/(f )
は体になる(0
でない要素はかけ算につい ての逆元をもつ)
。F
p[x]/(f )
の要素はn
個の係数がF
p=
{0, 1, . . . , p − 1}
のどれかということで決まるので,要素の個数はp
n 個である。有限体はこの パターンで構成されるものしかないことが知られている。F
pn=
F
p[x]/(f )
,(f
はn
次の1
変数既約多項式)
である。 有限体F
q に対し,その要素を係数とする1
変数多項式が再び考えられる。 それをF
q[y]
とする。係数を最高次から順に左から右に並べた表記も使う。 たとえば,a
0y
3+ a
1y
2+ a
2y + a
3= (a
0, a
1, a
2, a
3)
である。この係数の並 び,すなわちF
q の要素の列を係数ベクトルと呼ぶのが一般的である。 定義2.5.1
F
q の要素をm
個並べた(a
0, a
1, a
2, . . . , a
m−1) (a
i∈ F
q)
の形 の並び(
ベクトル)
の全体をF
mq と書く。F
mq の要素は(m
− 1)
次以下の1
変数多項式(
の係数ベクトル)
と考えられる。 次の表記も標準的ではないが,ある意味ですっきりした記法と考えられる。定義