想像してください。あなたには秘密の数字があります。この数字を使って、誰でも見られる結果を作り出せます。でも、その結果を見ても、元の秘密の数字は分からないのです。
例:
- あなたの秘密の数字:7
- 公開の結果:7 × 3 = 21
他の人は21という結果は見えますが、それが7×3なのか、3×7なのか、1×21なのかは分かりません。
- 暗号での応用
暗号の世界では、もっと複雑な計算を使います。でも基本的な考え方は同じです:
- 秘密鍵(あなたの秘密の数字)
- 公開鍵(誰でも見られる結果)
- 署名のしくみ
署名をするとき:
- あなたのメッセージを特別な方法で数字に変換します。
- その数字とあなたの秘密の数字を使って、複雑な計算をします。
- 計算の結果が「署名」になります。
- なぜ安全なの?
- 署名を見ても、元の秘密の数字は分かりません。
- でも、あなたの公開の結果(公開鍵)を使えば、その署名が本当にあなたのものか確認できます。
- 日常生活の例え
これは、南京錠のようなものです:
- 鍵を持っている人(秘密鍵の所有者)だけが錠を閉められます。
- でも、閉じた錠を見れば、誰でもそれが正しい錠であることは確認できます。
- ただし、閉じた錠を見ただけでは、中の鍵の形は分かりません。
暗号の署名も同じです。署名(閉じた錠)を見ても秘密鍵(鍵の形)は分かりませんが、その署名が正しいものかどうかは確認できるのです。
- あなたの公開情報(例:学籍番号)を知っています。
- 欠席届の内容と添付された計算結果を見て、本当にあなたが書いたものか確認できます。
- でも、その過程であなたの秘密の数字(誕生日)を知ることはできません。
公開鍵暗号の数学的原理
公開鍵暗号方式の背後には、特定の数学的問題が関係しています。ここでは、その中でも代表的な「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 が数学的に関連しているからです。