暗号であまりの世界に素数が必要な理由 〜離散対数問題ではない何か〜
はじめに
暗号理論を学んでいくと、「あまりの世界」つまりmodの世界で素数が必ず出現してきます。素数が用いられる理由で、離散対数問題の困難さ、つまり「公開鍵から秘密鍵を導出することが難しい」ことを数学的に保証してくれるから、というのはよく聞きます。
実は他にもあります。それは、有限体における割り算(正確には除算)を可能にしてくれるという理由もあります。なぜあまりの世界で素数が割り算を可能にしてくれるのか、素数でないとダメな可能性が出てくるのか、私の学習した範囲で記していきます。
有限体上の除算
「有限体上で除算ができる」というのは何を示しているのかというと、乗法逆元が存在するということです。つまり、ある元に掛けたら1になる元が有限体上に存在するということです。
整数で5÷5
について見てみると、
このようになります。これは5に対してかけると1になる「5^-1
」が逆元にあたります。これをあまりの世界はどうなるのか見ていきます。
まずは具体例
実際に有限体上に逆元が存在する例(mod 5)としない例(mod 6)をそれぞれ見てみます。
(整数でも同様ですが0以外で考えます。)
mod 5 (5で割ったあまりの世界) -> 素数
5で割ったあまりの世界(つまり素数で割ったあまりの世界)について、modのおさらいも兼ねてみてみます。元は全部で5つ(0, 1, 2, 3, 4)あります。割り切れたら0。あとはあまりが1から4まで存在して、あまり5は存在しません。この中で0以外で掛けたら1になる元をそれぞれの元で見つけていきます。
-
1 * 1 = 1 (mod 5)
-
2 * 3 = 1 (mod 5)
->3 * 2
も同じ -
4 * 4 = 1 (mod 5)
このように0以外の要素で逆元を見つけることができました。
mod 6 (6で割ったあまりの世界) -> 合成数(素数ではない数)
さて6で割ったあまりの世界(素数ではない数で割ったあまりの世界)ではどうでしょうか。こちらは具体的に2で逆元を見つけてみます。(元の要素は0~5の6つです。)
2 * 1 = 2 (mod 6)
2 * 2 = 4 (mod 6)
2 * 3 = 0 (mod 6)
2 * 4 = 2 (mod 6)
2 * 5 = 4 (mod 6)
2 * 0 = 0 (mod 6)
このように6で割ったあまりの世界では、逆元をもたない元(今回の例では2)が存在することがわかります。
素数で割ったあまりの世界で逆元が存在する証明
ある数
で割ったあまりの世界を考えるためにある数
をm
とします。つまり mod m
このことですね。
m
が合成数の時
m
が素数でない数(合成数)の場合について考えます。
m
は素数ではないので下記のような掛けてm
になるような元a
と b
が有限体上に存在します。
この式を mod m
の世界で表すと下記になります。
もし a
に逆元があったとすると、それをc
とすると下記のように表せます。
上記②の両辺にc
をかけると、 a * c
が1になるので、結果0=b
になります。
①でa
, b
ともに2以上なので b = 0
に矛盾が起きる。
m
が素数の時
mod m
で m
が素数の場合に、「0以外の元に対して逆元があること」を見てみます。つまり0以外の元a
に対して下記が成り立ちます。
a
は0以外なのでm
で割り切れません、つまりm
の倍数ではないと言えます。 a
に0からm-1までの自然数をかけたm個の数に注目します。これらは全てm
で割ったあまりが異なります。
m
で割ったあまりが異なる?
本当に全ての要素はもしあまりが等しい元(i
, j
)があったとすると、0以上m-1以下の要素で同じa
をかけてもあまりが等しいi
とj
が存在することになります。
つまりa*i = a*j (mod m)
は移行して計算すると a(j-i) = 0 (mod m)
となり、m
で割り切れる、つまりm
の倍数ということになります。
ただm
は素数と仮定しているので、掛けてm
の倍数ということは、a
かj-i
のどちらかがm
の倍数ということになります。ただ上記①でa
は(mod 0)にならないことが前提、つまりm
の倍数にならないことに、注目するとj-i
がm
の倍数ということになります。j
とi
は0以上m-1以下の要素なので、jとiの差が一番小さくて0一番大きくて(m-1)-0
でm-1が考えられます。
この中でm
の倍数となれる逃げ道は0となる時です。
i
とj
には同じ値が入ります。つまりa
かけたもののあまりが等しくなるような下記の式
が成り立つとすると、i
とj
は等しくなり、反対に言えばこの**i
とj
が異なればa
をかけたあまりは異なる**ということが言えます。
上記のi
を1としたり、j
を2としたりしてもa
と掛け合わせたあまりは必ず異なります、ということですね。
「掛けて1が存在するということ」は「逆元が存在するといういこと」に等しいのでm
が素数であるmod m
の有限体上で除算ができるということが言えます。
まとめ
暗号で使われる有限体(mod)の世界では、除算(逆元)を実現するのに素数が必ず必要になります。Diffie-Hellman鍵交換やRSA暗号、楕円曲線暗号やデジタル署名などにも逆元が必ず用いられます。
今回はなぜ有限体の中で逆元を必ずもつためには mod m のmが素数ではなくてはならないのかという、暗号を学んでいく中で疑問に思ったことを調べて記録してみました。これで仕事が増えるわけではないですが、面白いですね笑
Discussion