受信者は素数 , を選び、 とした。暗号化指数を とし、公開鍵 を公開した。復号指数 は
を満たす整数である。送信者は平文 ( を満たす整数)を ()で暗号化し、暗号文 を送った。受信者が で復号して得る平文 を求めよ。
RSA 暗号の鍵生成・暗号化・復号
素数 から と を作り、 を満たす復号指数 を求めて、, で暗号化・復号できる
前提
- 繰り返し二乗法によるべき剰余 (大学数学 暗号理論)
- 法 での逆元(拡張ユークリッドの互除法) (大学数学 暗号理論)
- 剰余類環の単元群とオイラー関数 (大学数学 代数学)
この技能までの道筋(28 技能)
読み込み中…
右端(太枠)がこの技能です。左へドラッグすると、さらに前の前提をさかのぼれます。技能を押すと、そこまでの道筋が光ります。
一覧で見る(前提が先)
- 分数のたし算・ひき算 (算数 計算と数のきまり)
- 小数の四則計算 (算数 計算と数のきまり)
- 正負の数の加法・減法 (中学数学 数と式)
- 分数のかけ算・わり算 (算数 計算と数のきまり)
- 四則の混じった計算の順序 (算数 計算と数のきまり)
- 正負の数の乗除・累乗と四則混合 (中学数学 数と式)
- 分配法則を使った計算のくふう (算数 計算と数のきまり)
- 文字式の計算(同類項・分配法則) (中学数学 数と式)
- 乗法公式による展開 (中学数学 数と式)
- 因数分解 (中学数学 数と式)
- 約数の見つけ方 (算数 整数の性質)
- 文字式で表した整数の性質 (中学数学 数と式)
- 余りによる整数の分類 (数学A 整数の性質)
- 樹形図で数え上げる (算数 場合の数)
- 積の法則と和の法則 (算数 場合の数)
- 和の法則・積の法則と樹形図 (数学A 場合の数と確率)
- 合同式 (数学A 整数の性質)
- n 進法 (数学A 整数の性質)
- 繰り返し二乗法によるべき剰余 (大学数学 暗号理論)
- 最大公約数と最小公倍数 (算数 整数の性質)
- 素因数分解と約数の個数 (算数 整数の性質)
- 最大公約数と最小公倍数 (数学A 整数の性質)
- ユークリッドの互除法 (数学A 整数の性質)
- 1 次不定方程式の整数解 (数学A 整数の性質)
- 法 での逆元(拡張ユークリッドの互除法) (大学数学 暗号理論)
- 群の位数と元の位数 (大学数学 代数学)
- 有限アーベル群の構造と部分群の個数 (大学数学 代数学)
- 剰余類環の単元群とオイラー関数 (大学数学 代数学)
説明
RSA 暗号は、だれでも使える「公開鍵」で暗号化し、持ち主だけが知る「秘密鍵」でしか復号できないしくみの代表例です。異なる 2 つの素数 から と を作り、暗号化の指数 に対して となる復号指数 を求めます。暗号化は 、復号は というべき剰余の計算だけで行えます。鍵の作成には拡張ユークリッドの互除法を、暗号化と復号には繰り返し二乗法を使います。
なぜそうしてよいのか
を素数とし、 とおきます。オイラー関数は互いに素な数の積に対して積になり、素数 では です。したがって で、これは単元群 の位数です。元の位数は群の位数を割り切るので、 なら が成り立ちます。 を となるように選べば、 は法 で逆元 をもちます。このとき ( は 0 以上の整数)と書けるので、 となります。つまり、 乗して暗号化したものを 乗すると元に戻ります。
が と互いに素でない場合( で または の倍数の場合)も、復号は正しく働きます。法 で考えると、 なら両辺とも なので です。 なら の位数は なので です。 は の倍数ですから、やはり になります。法 でも同じことが言えます。 は互いに素なので、中国剰余定理により が従います。 なので、 を で割った余りは そのものです。
は公開してかまいません。 を求めるには が必要で、それには を素因数分解しなければなりません。 が巨大だとこの分解が現実的に困難であることが、安全性の根拠になっています。
手順
鍵の準備: 異なる素数 を選び、 と を計算する。
暗号化指数を選ぶ: かつ となる を選ぶ。公開鍵は である。
復号指数を求める: 拡張ユークリッドの互除法で を解き、 を の範囲に直す。 が秘密鍵である。
暗号化: 平文 に対して を繰り返し二乗法で計算する。
復号: を繰り返し二乗法で計算する(法は ではなく )。
例題
として RSA 暗号の鍵を作る。暗号文 を復号して得られる平文 ()を求めよ。
例題の解答
【手順 1】、 である。
【手順 2】 なので、 は条件を満たす。
【手順 3】互除法を行うと となる。よって であり、 が成り立つ。 なので である。確認すると となる。
【手順 5】 を求める。(2 進法で )なので、 の 2 の累乗乗を順に 2 乗して求める。
これらを掛け合わせると である。順に計算すると 、、 となる。よって である。
(検算: なので、 を暗号化すると確かに になる。)
答え:
よくある誤り
を法 の逆元として求めてしまう誤り。例では としても復号できない。正しくは法 での逆元で、 である。
を としてしまう誤り。例では としてしまう。正しくは である( は素数ではない)。
の を選んでしまう誤り。たとえば で とすると、逆元 が存在しない。正しくは、 を必ず確かめてから を決める。
拡張互除法で得た負の をそのまま にしたり、べき剰余を法 で計算したりする誤り。例では としてしまったり、 を計算してしまったりする。正しくは に直し、復号は で計算する。
この説明は AI が書き、別の AI が例題を独立に解いて答えを確かめ、説明を一歩ずつ査読しました。
入口の問題
受信者は素数 , を選び、 と暗号化指数 を公開鍵として公開した。秘密鍵の復号指数 は
を満たす整数とする。送信者は平文 ( を満たす整数)を ()により暗号化し、暗号文 を送った。受信者が により復号して得る平文 を求めよ。
この技能を使う問題
素数 , を用いて RSA 暗号の鍵を作る。 とし、公開鍵の暗号化指数を とする。秘密鍵の復号指数 は、 を満たす の整数とする。
平文 ( を満たす整数)を , により暗号化したところ、暗号文 が得られた。平文 を求めよ。
受信者は素数 , を選び、 と暗号化指数 を公開鍵として公開した。送信者は平文 ( を満たす整数)を
によって暗号化し、暗号文 を受信者に送った。受信者は秘密鍵の復号指数 を , を満たす整数として求め、 により復号する。平文 を求めよ。
RSA 暗号の公開鍵として、相異なる 2 つの素数 の積 と暗号化指数 が公開されている。暗号化は、平文 ( を満たす整数)に対して
で行う。いま、攻撃者はオイラー関数の値 を知ったとする。暗号化しても値が変わらない平文、すなわち
を満たす整数 の個数を求めよ。RSA 暗号の受信者は、相異なる素数 を選んで とし、公開鍵 を公開した。秘密鍵の復号指数 は
を満たす整数である。ここで である。送信者は平文 ( を満たす整数)を ()によって暗号化して送る。いま攻撃者は、 そのものは知らないが、 であることを知った。さらに暗号文 を傍受した。この暗号文に対応する平文 を求めよ。
を相異なる奇素数とし、、 とおく。正の整数 は をみたすとする(RSA 暗号の公開鍵 と秘密鍵 )。中国剰余定理を使った高速な復号(CRT-RSA)のために、次を定める。
- を を で割った余り、 を を で割った余りとする(、)。
- 整数 を、 をみたす整数のうちの 1 つとする( は相異なる素数なので、このような は存在する)。をみたす整数 (暗号文)に対して、
- を を で割った余り、 を を で割った余り(、)、
- を を で割った余り()、
-とおく。ここで は と互いに素であるとは限らない( や、 が または の倍数である場合も含む)。また、整数 に対して と定める( のときも含む)。このとき、 かつ であることを証明せよ。
ただし、フェルマーの小定理と、「整数 が相異なる素数 のそれぞれで割り切れるならば で割り切れる」ことは用いてよい。