RSA暗号の仕組み

はじめに

RSA暗号とは大きな数字の素因数分解が困難であることを利用した、公開鍵暗号方式のアルゴリズムの一種である。ここでは、RSA暗号の仕組みとその安全性について紹介する。

RSA暗号の仕組み

RSA暗号を用いた通信には大きく分かけて以下の3つの段階が存在する。 1. メッセージを受け取る側の準備 2. メッセージを送る側の準備 3. メッセージを受け取る側の復元方法 それぞれの項目について説明していく。

1. メッセージを受け取る側の準備

  • 大きな素数 p, q を生成し、n = pqとする。
  • (p−1)(q−1) と互いに素な整数kを取ってくる。
  • kl ≡ 1 (mod (p -1)(q – 1)) なる整数 l を取ってくる。
    • この数は一意に定まる。証明は[こちらのサイト](https://manabitimes.jp/math/1141)の例題2を参照。

kl ≡ 1 (mod (p – 1)(q – 1)) は kl を (p – 1)(q – 1) で割った余りが1であるということ。

  • n と k は公開する(公開鍵)、 l は公開しない(秘密鍵)

2. メッセージを送る側の暗号化方法

  • 送りたいメッセージを m とする。ただし、 m は n 未満の正の整数とする
  • 公開鍵を用いて m^k を n で割った余りを計算し、これを暗号文 C とおく。

3. メッセージを受け取る側の復元方法

  • 暗号文 C と秘密鍵 l を用いて C^l を n で割った余りを計算すると、もとのメッセージ m と一致する。
  • この方法で復元できる理由、つまり m^(kl) ≡ m (mod n) となる理由はこちらを参照。

RSA暗号の安全性

この暗号の解読の難しさの肝は、n の素因数分解の難しさにある。暗号文 C と公開鍵 k と n が外部に漏れたとしても、 n の因数p, qがわからなければ秘密鍵 l を当てることができない。

一般に100桁の整数の素因数分解を求めるのに、現代の最新のコンピュータを使っても天文学的な時間がかかると考えられている。そのため、RSA暗号に用いられる大きい数字とはだいたい300桁程度の数のことを指す。