RSA暗号

● フェルマーの小定理 ●

 フェルマーの小定理って、こんなものでした。

<5でわったあまりの世界>

 たとえば、5でわったあまりの世界で考えましょう。(5は素数)

 5でわったあまりは

       0 , 1 , 2 , 3 , 4

だけですから、このあまりの世界には、数はたったの5つしかありません。

 たとえば、ふつうの世界の 7 と 12 は、
どちらも 5でわったあまりが 2 ですから、同じ数と考えて

       7=12  ではなくて  7≡12 (mod 5)

とあらわすことになっています。

 そして、 7 も 12 も このあまりの世界では 2 なのです。

 そうすると、フェルマーの小定理は、0をのぞくと

    1×1×1×1≡1 (mod 5)  つまり   1≡1 (mod 5)
    2×2×2×2≡1 (mod 5)  つまり   2≡1 (mod 5)
    3×3×3×3≡1 (mod 5)  つまり   3≡1 (mod 5)
    4×4×4×4≡1 (mod 5)  つまり   4≡1 (mod 5)

となるというものです。

 つまり、このあまりの世界では、(0は何回かけても0ですが)
0以外の数は、どれも4回かけると(4乗すると)1になるというのです。

 ためしに、計算してみましょう。

     1×1×1×1=1   を 5でわったあまりは 1
     2×2×2×2=16  を 5でわったあまりは 1
     3×3×3×3=81  を 5でわったあまりは 1
     4×4×4×4=256 を 5でわったあまりは 1

 たしかに、そうなっていますね。
 では、どうしてこんなことになるのでしょうか。

 たとえば、 2≡1 (mod 5) はこんなふうに考えます。

 このあまりの世界の0をのぞいた数にどれも 2をかけます。

     2×1 , 2×2 , 2×3 , 2×4

 そうすると、これらは順番がいれかわっただけで、

      1  ,  2  ,  3  ,  4

とおなじものなのです。じっさい

     2×1 , 2×2 , 2×3 , 2×4  は

      2  ,   4  ,  1  ,  3    です。

 きちんというには、まず 2×1 , 2×2 , 2×3 , 2×4 が
このあまりの世界で全部異なっていることをしめします。
 それには、ユークリッドの互除法でもとめる、2の逆の数(逆元)をつかうといいですね。
 すると、同じ数だけあって全部異なっているのですから、
順番を入れかえただけということになるのです。

 ですから、

    (2×1)×(2×2)×(2×3)×(2×4) ≡ 1×2×3×4  (mod 5)

 つまり、

    2×1×2×3×4 ≡ 1×2×3×4  (mod 5)

 これの両辺に 1×2×3×4 の逆の数(逆元)をかけると

    2≡1 (mod 5)

となります。

 そして、2≡1 (mod 5) の  は、
このあまりの世界の数で、逆の数(逆元)をもつものが、

       0 , 1 , 2 , 3 , 4

の 5個のうち 0 をのぞいた 個 だという 4です。

 

<11でわったあまりの世界>

 同じようにして、今度は 11 でわったあまりの世界で考えましょう。(11は素数)

 11でわったあまりは

    0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10

ですから、このあまりの世界には、数は 11個 あります。

 そして、フェルマーの小定理は、0をのぞくと

     110≡1 (mod 11)
     210≡1 (mod 11)
     310≡1 (mod 11)
     410≡1 (mod 11)
     510≡1 (mod 11)
     610≡1 (mod 11)
     710≡1 (mod 11)
     810≡1 (mod 11)
     910≡1 (mod 11)
    1010≡1 (mod 11)

となるというものです。

 つまり、このあまりの世界では、(0は何回かけても0ですが)
0以外の数は、どれも10回かけると(10乗すると)1になるというのです。

 そして、210≡1 (mod 11) などの 10 は、
このあまりの世界の数で、逆の数(逆元)をもつものが

    0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10

の 11個のうち 0 をのぞいた 10個 だという 10です。

 


● 剰余 ●

 公開鍵と秘密鍵のお話をおぼえていますか。

 公開鍵で90度まわして(じっさいは累乗して)閉めたら、
その逆の数、つまり秘密鍵で−90度まわして(じっさいは累乗して)
開けてもとにもどすのでした。

 

<55でわったあまりの世界>

 では、この鍵を使って、いったい何を開けたり閉めたりするのでしょうか。

 じつは、あまりの世界なのです。

 それも、2つの素数 たとえば 5 と 11 をかけた 5×11=55
でわったあまりの世界を考えるのです。

 もちろん、じっさいには もっと大きな素数をかけ算します。
 そして、5×11=55 とかけ算するのはかんたんだけど、
反対に 55=5×11 と素因数分解するのはむずかしいということを、
暗号に利用しているのです。

 

 さて、55でわったあまりを、表にしてみましょう。

 

     Y   0   1   2   3   4
     ○  0   1   2   3   4
  X □ −−−−−−−−−−−−−−
  0 |  0  11  22  33  44
     |
  9 | 45   1  12  23  34
     |
  7 | 35  46   2  13  24
     |
  5 | 25  36  47   3  14
     |
  3 | 15  26  37  48   4
     |
  1 |  5  16  27  38  49
     |
 10 | 50   6  17  28  39
     |
  8 | 40  51   7  18  29
     |
  6 | 30  41  52   8  19
     |
  4 | 20  31  42  53   9
     |
  210| 10  21  32  43  54

 

 この表は、X と Y のまじわったところに

    5X+11Y

を計算して、55でわったあまりを書きこんだものです。

 そして、表の見方ですが、たとえば
11でわるとあまり、5でわるとあまる数は
表の3の行2の列の交わったところの数が 47 ですから、
55でわると 47 あまる数です。

 さて、最初に(素数の場合の)フェルマーの小定理は
合成数55の場合はどうなるかをみてみます。

 素数の場合は、0だけのぞきましたが、
今回は、55=5×11 ですから、逆の数をもたないのは、
5や11でわりきれる数全部です。

 そうすると、表の赤い数をのぞくことになります。

 

     Y   0   1   2   3   4
     ○  0   1   2   3   4
  X □ −−−−−−−−−−−−−−
  0   0  11  22  33  44
     |
  9 | 45   1  12  23  34
     |
  7 | 35  46   2  13  24
     |
  5 | 25  36  47   3  14
     |
  3 | 15  26  37  48   4
     |
  1 |  5  16  27  38  49
     |
 10 | 50   6  17  28  39
     |
  8 | 40  51   7  18  29
     |
  6 | 30  41  52   8  19
     |
  4 | 20  31  42  53   9
     |
  210| 10  21  32  43  54

 

 そうすると、のこった数の 1,12,23,34,46,2,・・・は、ぜんぶで

   (11−1)×(5−1) = 10×4 = 40 (個)

あります。すると、フェルマーの小定理のように

     140≡1 (mod 55)
    1240≡1 (mod 55)
    2340≡1 (mod 55)
    3440≡1 (mod 55)
    4640≡1 (mod 55)
     240≡1 (mod 55)
     ・・・・・・・・・・・・・・・・・
     ・・・・・・・・・・・・・・・・・

となるというのが、オイラーの定理(の 55の場合)です。

 ですから、40をもとにして、公開鍵と秘密鍵を考えることもできます。
 その場合の鍵については、<お勉強>の「公開鍵と秘密鍵」を読んでください。
 でも、じっさいのRSA暗号では、 40 より小さい 20 、つまり

   (11−1)×(5−1) = 10×4 = 40

ではなく、

   (11−1)=10 と (5−1)=4 の最小公倍数 20

を使って鍵を作るのです。

 10と4の最小公倍数というのは、
       10の倍数(何倍かした数)でもあり
        4の倍数(何倍かした数)でもあるもの
つまり、
       20 , 40 , 60 , ・・・

といった数の最小のもの、つまり 20 です。

 じつは、 40 でなくても、 20 で

     120≡1 (mod 55)
    1220≡1 (mod 55)
    2320≡1 (mod 55)
    3420≡1 (mod 55)
    4620≡1 (mod 55)
     220≡1 (mod 55)
     ・・・・・・・・・・・・・・・・・
     ・・・・・・・・・・・・・・・・・

がなりたつというのです。

 これから、このことをたしかめていきましょう。

 


● 累乗(るいじょう) ●

 鍵をまわして開けたり閉めたりすることは、
じっさいは鍵となる数だけ累乗(るいじょう)すること、つまり何乗かすること、
ようするにその回数分だけかけ算をくりかえすことです。

 そこで、フェルマーの小定理が役立つのです。
 公開鍵で閉めて秘密鍵で開けてもとどおりになる、
つまり何乗かしてもかわらない(もとどおり)というとくべつな数が重要なのです。

 たし算ならば たしてもかわらない 0
 かけ算ならば かけてもかわらない 1 

 では、この55でわったあまりの世界で、
 累乗という計算で、累乗してもかわらない数 は何でしょう。
 (累乗するという計算は、たし算やかけ算とはちょっとちがいますが・・・)

 

     Y   0   1   2   3   4
     ○  0   1   2   3   4
  X □ −−−−−−−−−−−−−−
  0   0  11  22  33  44
     |
  9 | 45   1  12  23  34
     |
  7 | 35  46   2  13  24
     |
  5 | 25  36  47   3  14
     |
  3 | 15  26  37  48   4
     |
  1 |  5  16  27  38  49
     |
 10 | 50   6  17  28  39
     |
  8 | 40  51   7  18  29
     |
  6 | 30  41  52   8  19
     |
  4 | 20  31  42  53   9
     |
  210| 10  21  32  43  54

 

 ためしに 47 を例にとって、これを何乗したら 1 になるか
考えていきます。

 まず 47 は 11でわるとあまり、5でわるとあまる 数です。

 これを2乗した(2回かけた) 47×47=47 は
    11でわると=9あまり、5でわると=4あまる 数なので
    表の の行との列の数をみると 9 です。
 つまり
    47=2209 は 55でわると 9 あまる数です。
    47≡9 (mod 55)

 そこで、いったい何乗したら、表の の行との列の数 1 になるかを
最初に行と列に分けてそれぞれで考えて、後で合わせて考えます。

 

<行>

 最初は の行にあります。
 2乗すると =3×3=9の行にうつります。
 3乗すると =9×3≡5 (mod 11)の行にうつります。
 4乗すると ≡5×3≡4 (mod 11)の行にうつります。
 5乗すると ≡4×3≡1 (mod 11)の行にうつります。

 5乗すると の行 にうつれました。

     ≡1 (mod 11)

 そして、6乗からあとは同じことのくりかえしになります。
 だから、5乗,10乗,15乗,20乗,・・・ は、の行になります。
 さらに、6乗,11乗,16乗,21乗,・・・ は、もとの の行にもどります。

 3の場合は 5乗でよかったですが、
3以外の場合にも・・・となると 10乗でいいというのが、
フェルマーの小定理です。

     110≡1 (mod 11)
     210≡1 (mod 11)
     310≡1 (mod 11)
     410≡1 (mod 11)
     510≡1 (mod 11)
     610≡1 (mod 11)
     710≡1 (mod 11)
     810≡1 (mod 11)
     910≡1 (mod 11)
    1010≡1 (mod 11)

 行に関しては、0以外の行は 10乗,20乗,30乗,・・・すれば の行 にうつれます。

 そして、0の行は何乗したって0の行ですから、
 0の行もふくめて 11乗,21乗,31乗,・・・すれば もとの行 にもどれます。

 

<列>

 最初は の列にあります。
 2乗すると =2×2=4の列にうつります。
 3乗すると =4×2≡3 (mod 5)の列にうつります。
 4乗すると =3×2≡1 (mod 5)の列にうつります。

 4乗すると の行 にうつれました。

     ≡1 (mod 5)

 そして、5乗からあとは同じことのくりかえしになります。
 だから、4乗,8乗,12乗,16乗,・・・ は、の列になります。
 さらに、5乗,9乗,13乗,17乗,・・・ は、もとの の列にもどります。

 2の場合は 4乗でよかったですが、
2以外の場合にも 4乗でいいというのが、
フェルマーの小定理です。

     1≡1 (mod 5)
     2≡1 (mod 5)
     3≡1 (mod 5)
     4≡1 (mod 5)

 列に関しては、0以外の列は 4乗,8乗,12乗,・・・すれば の列 にうつれます。

 そして、0の列は何乗したって0の列ですから、
 0の列もふくめて 5乗,9乗,13乗,・・・すれば もとの列 にもどれます。

 

<行と列>      

 さて、行と列をあわせると、(0以外の行や列の数は)
いったい何乗したら、表の の行との列の数 1 に うつれるのでしょうか。

 47の場合では、
   5乗,10乗,15乗,20乗,・・・ で、の行にうつれ、
   4乗,8乗,12乗,16乗,・・・ で、の列にうつります。

 ですから、5の倍数でもあって、4の倍数でもある数
つまり、5 と 4 の公倍数の 20乗,40乗,60乗,・・・すれば、
表の の行との列の数 1 に うつれることになります。

 じっさいには、次のようになります。

     Y   0    1    2    3    4
     ○  0    1    2    3    4
  X □ −−−−−−−−−−−−−−−−
  0   0   11   22   33   44
     |
  9 | 45    1   12   23   34
     |    (20乗)( 5乗)(15乗)(10乗)
  7 | 35   46    2   13   24
     |
  5 | 25   36   47    3   14
     |    (16乗)( 1乗)(11乗)( 6乗)
  3 | 15   26   37   48    4
     |    ( 4乗)( 9乗)(19乗)(14乗)
  1 |  5   16   27   38   49
     |    ( 8乗)(13乗)( 3乗)(18乗)
 10 | 50    6   17   28   39
     |
  8 | 40   51    7   18   29
     |
  6 | 30   41   52    8   19
     |
  4 | 20   31   42   53    9
     |    (12乗)(17乗)( 7乗)( 2乗)
  210| 10   21   32   43   54

 

 そして、21乗からあとは、おなじことのくりかえしになります。
 つまり、21乗は 1乗と同じ 47、
     22乗は 2乗と同じ 9、・・・ です。

 

 47以外の場合にも、
 行に関しては、0以外の行は 10乗,20乗,30乗,・・・すれば の行 にうつれ、
 列に関しては、0以外の列は 4乗,8乗,12乗,・・・すれば の列 にうつれます。

 ですから、10の倍数でもあって、4の倍数でもある数
つまり、10 と 4 の公倍数の 20乗,40乗,60乗,・・・すれば、
表の の行との列の数 1 に うつれることになります。

 さらに、0の行や0の列もふくめて、
21乗,41乗,61乗,・・・すれば、表の もとの数 に もどれることになります。

 ここで、21乗,41乗,61乗,・・・というのは、
20でわったあまりが1という数です。

 では、最初にもどりましょう。
 この55でわったあまりの世界で、 累乗という計算に関して、
累乗してもかわらない数 は何でしょう、ということでした。

 それは、20でわったあまりの世界で 1 という数です。

 


● 公開鍵と秘密鍵 ●

 では、今度は 20でわったあまりの世界で、
公開鍵と秘密鍵をもとめてみましょう。
 (くわしくは、<お勉強>の「公開鍵と秘密鍵」を見てね。)

 

     Y   0   1   2   3
     ○  0   1   2   3
  X □ −−−−−−−−−−−
  0   0   5  10  15
     |
  4 | 16   1   6  11
     |
  3 | 12  17   2   7
     |
  2 |  8  13  18   3
     |
  1 |  4   9  14  19

 

 この表は、X と Y のまじわったところに

    4X+5Y

を計算して、20でわったあまりを書きこんだものです。

 そして、表の見方ですが、たとえば
5でわるとあまり、4でわるとあまる数は
表の3の行1の列の交わったところの数が 17 ですから、
20でわると 17 あまる数です。

 この20でわったあまりの世界で、かけ算を考えます。

 かけ算を考えるのは、たとえば
2乗してからさらに3乗すると、2×3=6乗することになるからです。

      ((□) = □

 そして、20=2×2×5 なので、2や5でわりきれる数、つまり表でいうと赤い数は、
逆の数をもたないので、さいしょからのぞいておきます。

 のこった数をあらためて表にしましょう。

 

     Y   1    3
     ○   1    3
  X □ −−−−−−−
     |
  4 |  1   11
     |
  3 | 17    7
     |
  2 | 13    3
     |
  1 |  9   19

 

 さて、これらの数が公開鍵(になりうるもの)でしたね。
 
 では、引き続き、公開鍵 のかけ算における逆の数、
つまり 秘密鍵 をもとめましょう。

 今度は、5でわったあまりの 1,2,3,4 と
4でわったあまりの 1,3 で考えると、
(最初から、前もそうすればよかったって・・・?
 じつは、これは証明をとばしているのでかんたんなだけです。)

 □= 1,2,3,4 では、

      ×≡1 (mod 5)
      ×≡1 (mod 5)
      ×≡1 (mod 5)
      ×≡1 (mod 5)

 ○=1,3 では

      ×≡1 (mod 4)
      ×≡1 (mod 4)

 

 このことから、次のようにもとまります。

公開鍵

秘密鍵

     Y   1    3
     ○   1    3
  X □ −−−−−−−
     |
  4 |  1   11
     |
  3 | 17    7
     |
  2 | 13    3
     |
  1 |  9   19
     Y   1    3
     ○   1    3
  X □ −−−−−−−
     |
  4 |  1   11
     |
  3 | 13    3
     |
  2 | 17    7
     |
  1 |  9   19

 

 表の見方は、公開鍵が17なら、その秘密鍵は13です。

 そして、公開鍵と秘密鍵が同じではきけんなので、

     1  11

     9  19

は、けっきょく公開鍵としては使い物になりません。

 


● 暗号(あんごう) ●

 さて、いよいよ公開鍵を使って暗号文を作り、
それを秘密鍵を使って解読(かいどく)しましょう。

 じつは、1つ1つの文字は、コンピュータ内部で2進法の数におきかえられています。
 そして、その2進法の数をてきとうにくぎり直したりして、
それに 55でわったあまりの数を対応させます。

 

     Y   0   1   2   3   4
     ○  0   1   2   3   4
  X □ −−−−−−−−−−−−−−
  0 |  0  11  22  33  44
     |
  9 | 45   1  12  23  34
     |
  7 | 35  46   2  13  24
     |
  5 | 25  36  47   3  14
     |
  3 | 15  26  37  48   4
     |
  1 |  5  16  27  38  49
     |
 10 | 50   6  17  28  39
     |
  8 | 40  51   7  18  29
     |
  6 | 30  41  52   8  19
     |
  4 | 20  31  42  53   9
     |
  210| 10  21  32  43  54

 

 そして、その数を公開鍵を使って何乗かします。

 たとえば、47 を 公開鍵17を使って、17乗します。

  47 は 17乗すると (55でわったあまりが) 42 になります。

 

     Y   0    1    2    3    4
     ○  0    1    2    3    4
  X □ −−−−−−−−−−−−−−−−
  0   0   11   22   33   44
     |
  9 | 45    1   12   23   34
     |    (20乗)( 5乗)(15乗)(10乗)
  7 | 35   46    2   13   24
     |
  5 | 25   36   47    3   14
     |    (16乗)( 1乗)(11乗)( 6乗)
  3 | 15   26   37   48    4
     |    ( 4乗)( 9乗)(19乗)(14乗)
  1 |  5   16   27   38   49
     |    ( 8乗)(13乗)( 3乗)(18乗)
 10 | 50    6   17   28   39
     |
  8 | 40   51    7   18   29
     |
  6 | 30   41   52    8   19
     |
  4 | 20   31   42   53    9
     |    (12乗)(17乗)( 7乗)( 2乗)
  210| 10   21   32   43   54

 

 さてこれを、もとの 47 にもどせるのは、
秘密鍵13を持っているあなただけというわけです。

   ((47)1713=(47)17×13

           =(47)221

           =(47)20×11+1

           =((47)2011×(47)

           ≡ 1×(47)  (mod 55)

           ≡47

 上の計算で、17×13≡1 (mod 20) が、じっさいに

   17×13=221 で  221=20×11+1

になっており、20乗するごとに1にもどるのでしたから、
11回おなじことをくりかえして 1 になった次の221乗で、
きちんともとにもどることになります。

 最後に、くぎり直しの反対をして、もとの文字におきかえなおすと
解読できるというものです。

 暗号のお話は、どうでしたか。
 きちんと証明すべきところを、かなりとばしたので
ふんいきだけになってしまいましたね。

 


HOME(もどる)

掲載内容の無断転載、転用、編集を禁じます。(c) 小林吹代
All Rights Reserved, (c)kobayashi fukiyo , 2001