想像してください。あなたには秘密の数字があります。この数字を使って、誰でも見られる結果を作り出せます。でも、その結果を見ても、元の秘密の数字は分からないのです。

例:

  • あなたの秘密の数字:7
  • 公開の結果:7 × 3 = 21

他の人は21という結果は見えますが、それが7×3なのか、3×7なのか、1×21なのかは分かりません。

  1. 暗号での応用

暗号の世界では、もっと複雑な計算を使います。でも基本的な考え方は同じです:

  • 秘密鍵(あなたの秘密の数字)
  • 公開鍵(誰でも見られる結果)
  1. 署名のしくみ

署名をするとき:

  1. あなたのメッセージを特別な方法で数字に変換します。
  2. その数字とあなたの秘密の数字を使って、複雑な計算をします。
  3. 計算の結果が「署名」になります。
  4. なぜ安全なの?
  • 署名を見ても、元の秘密の数字は分かりません。
  • でも、あなたの公開の結果(公開鍵)を使えば、その署名が本当にあなたのものか確認できます。
  1. 日常生活の例え

これは、南京錠のようなものです:

  • 鍵を持っている人(秘密鍵の所有者)だけが錠を閉められます。
  • でも、閉じた錠を見れば、誰でもそれが正しい錠であることは確認できます。
  • ただし、閉じた錠を見ただけでは、中の鍵の形は分かりません。

暗号の署名も同じです。署名(閉じた錠)を見ても秘密鍵(鍵の形)は分かりませんが、その署名が正しいものかどうかは確認できるのです。

  • あなたの公開情報(例:学籍番号)を知っています。
  • 欠席届の内容と添付された計算結果を見て、本当にあなたが書いたものか確認できます。
  • でも、その過程であなたの秘密の数字(誕生日)を知ることはできません。

公開鍵暗号の数学的原理

公開鍵暗号方式の背後には、特定の数学的問題が関係しています。ここでは、その中でも代表的な「RSA暗号」を例にとって説明します。

1. 大きな素数の積

  • 公開鍵暗号の核となるのは、「素因数分解の困難性」です。
  • 大きな素数を2つ選び、その積を計算します。この積が非常に大きな数になると、この積を元に元の素数を求めること(素因数分解)は極めて困難です。

例:

  • 素数 ppp と qqq を使います。
  • p=61p = 61p=61 と q=53q = 53q=53 を選ぶと、その積 nnn は 323332333233 になります。
  • この n=3233n = 3233n=3233 は公開されます。

2. ある演算の難しさ

  • 公開鍵暗号は、次のような問題を利用しています:
    • 大きな数を素因数分解するのは非常に難しいという性質。
    • べき乗の計算モジュラ逆元の計算(特に大きな数の場合)。

具体的には、RSA暗号の場合:

  • eee(公開指数)を使ってメッセージをべき乗し、 nnn で割った余りを計算します。この計算結果が暗号文になります。
  • 復号するときは、秘密鍵 ddd(秘密指数)を使って再度べき乗し、再度 nnn で割った余りを計算します。

3. 鍵の生成と役割

  • 公開鍵: 公開されるのは nnn と eee です。これを使って誰でもメッセージを暗号化できます。
  • 秘密鍵: ddd は秘密に保管され、復号に使われます。

4. 署名と検証

  • 署名: メッセージのハッシュ値を、秘密鍵 ddd を使って暗号化します。
  • 検証: その暗号化された値(署名)を、公開鍵 eee を使って復号化します。

公開鍵 eee を使うと、元のハッシュ値が復元されます。このプロセスが成功するのは、公開鍵 eee と秘密鍵 ddd が数学的に関連しているからです。