こちらの動画を視聴して RSA 公開鍵暗号 を学びます。 大学生のころ、このあたりの授業を受けましたがすっかり忘れていますね…。
url: https://www.youtube.com/watch?v=cz1ezomeJvk
title: "公開鍵暗号を教わってみた/素因数分解が難しいからどうしたの?"
description: "#プログラミング #エンジニア #セキュリティ公開鍵・秘密鍵を雰囲気で使っている・暗号の仕組みがぜんぜんわからない・数学が苦手な人向けに、数学大好きムーさんから教えてもらいました。🛎️ 宣伝 : 本を書きました!「コードが動かないので帰れません!」新人プログラマーのためのエラーが怖くなくなる本です。エラーログの..."
host: www.youtube.com
favicon: https://www.youtube.com/s/desktop/c90d512c/img/favicon_32x32.png
image: https://i.ytimg.com/vi/cz1ezomeJvk/maxresdefault.jpg
個人的なるほどポイント
公開鍵を利用して平文を暗号化したとき、その式がシンプルだと公開鍵だけで逆算できてしまいます。 たとえば、足し算であれば引き算することで解読が可能です。
式
自体も公開情報であるため、式と公開鍵両方が第三者にわたっても復号化できないようにする必要があります。
公開指数 (encrypt) も公開鍵暗号で利用します。 について、後述する とは異なり、 であることに注意です。
公開指数 | encrypt | |
---|---|---|
素数 | prime | |
素数 | p の次; prime | |
積 |
暗号化の計算式は以下です。
平文 (message?) について、公開指数 で累乗し、それを で mod を取ります。 そうして得られるものが暗号 です。
式自体はシンプルですが、 をどう定めるかはまだ説明されていません。 またどのような を用意すべきかについても説明されていません。 どうやって定めるのか…が数学ですね…。
累乗で mod を取ったほうが解析しづらい、というのなるほどなと思いました。 たしかに規則性が見えないですね。
公開鍵は のタプルのようです。 また秘密鍵は (decrypt) でありまだここでは説明されていません。
具体例で理解する
フローで理解していきます。 なお、注意点として の生成は Alice 側でまとめておこなわれるはずです。 図においては Bob 側で計算されているようにみえますが、 Alice 側で公開鍵と秘密鍵セットで生成し、Bob は の公開鍵のみ提供します。
という最小公倍数を導入します。 これは の最小公倍数ですが、どうして なのかは後述されます。
そして、 公開指数 がようやく計算されます。 は と最大公約数が 1、つまり 互いに素 な を選ぶようです。
実際の運用としては を巨大な素数とすることが多いようです。 素数であれば と互いに素になるためです(純粋な倍数でなければ)。
ここからは復号側の仕組みです。
秘密指数 は を利用して計算します。 公開鍵の と、 の を利用して計算します。
ということは Alice は と さえ知っていればよい、ということなのですね…。 というのも は動的に手元で計算できるためです。
下記の不定方程式を満たすような の組のうち、 の値が正となるものを とするようです。 いろいろな組み合わせ のうち、 を求めるようです。
ここの計算方法については別の Qiita で勉強しようとおもいます。
暗号 を 乗し、 で mod を取ることで元の平文 が得られます。
暗号化ステップ
- 素数 を決める
- 積 を計算する
- を計算する
- は Least Common Multiple 最小公倍数
- と互いに素になる (gcd = 1) を計算する
- となる を計算する
- とする
- 別に でもよい
- 暗号 を計算する
復号ステップ
- を計算する
- かつ を満たすような の組を計算する
- このときの を とする
- を満たす から、 とする
- 平文 を計算する