素数 と、法 の原始根 を公開パラメータとするエルガマル暗号を考える。受信者の秘密鍵は であり、公開鍵 を公開している。送信者は平文 ( の整数)を、ある整数 を用いて
と暗号化し、暗号文 を受信者に送った。受信者が秘密鍵 を用いて復号して得る平文 を求めよ。
エルガマル暗号
公開鍵 を作り、 で暗号化し、 で復号できる。同じ が使い回されたとき、 から秘密鍵なしで平文を求められる
前提
- ディフィー・ヘルマン鍵共有 (大学数学 暗号理論)
- 法 での逆元(拡張ユークリッドの互除法) (大学数学 暗号理論)
この技能までの道筋(26 技能)
読み込み中…
右端(太枠)がこの技能です。左へドラッグすると、さらに前の前提をさかのぼれます。技能を押すと、そこまでの道筋が光ります。
一覧で見る(前提が先)
- 分数のたし算・ひき算 (算数 計算と数のきまり)
- 小数の四則計算 (算数 計算と数のきまり)
- 正負の数の加法・減法 (中学数学 数と式)
- 分数のかけ算・わり算 (算数 計算と数のきまり)
- 四則の混じった計算の順序 (算数 計算と数のきまり)
- 正負の数の乗除・累乗と四則混合 (中学数学 数と式)
- 分配法則を使った計算のくふう (算数 計算と数のきまり)
- 文字式の計算(同類項・分配法則) (中学数学 数と式)
- 乗法公式による展開 (中学数学 数と式)
- 因数分解 (中学数学 数と式)
- 約数の見つけ方 (算数 整数の性質)
- 文字式で表した整数の性質 (中学数学 数と式)
- 余りによる整数の分類 (数学A 整数の性質)
- 樹形図で数え上げる (算数 場合の数)
- 積の法則と和の法則 (算数 場合の数)
- 和の法則・積の法則と樹形図 (数学A 場合の数と確率)
- 合同式 (数学A 整数の性質)
- n 進法 (数学A 整数の性質)
- 繰り返し二乗法によるべき剰余 (大学数学 暗号理論)
- ディフィー・ヘルマン鍵共有 (大学数学 暗号理論)
- 最大公約数と最小公倍数 (算数 整数の性質)
- 素因数分解と約数の個数 (算数 整数の性質)
- 最大公約数と最小公倍数 (数学A 整数の性質)
- ユークリッドの互除法 (数学A 整数の性質)
- 1 次不定方程式の整数解 (数学A 整数の性質)
- 法 での逆元(拡張ユークリッドの互除法) (大学数学 暗号理論)
説明
エルガマル暗号は、ディフィー・ヘルマン鍵共有のしくみを使った公開鍵暗号です。公開鍵があれば誰でも暗号化でき、秘密鍵を持つ人だけが復号できます。素数 と ()を公開し、受信者は秘密鍵 から公開鍵 を作ります。送信者は平文 ( の整数)を毎回新しい乱数 で暗号文 に変え、受信者は を使って を取り出します。さらに、同じ を使い回すと秘密鍵がなくても平文が漏れることも確かめます。
なぜそうしてよいのか
ディフィー・ヘルマン鍵共有で、受信者の秘密を 、送信者の秘密を とみなします。受信者の公開値は 、送信者の公開値は です。このとき両者が作れる共有鍵は です。送信者はこの を「目隠し」として平文に掛け、 を送ります。受信者が を再現できるように、 も一緒に送ります。
受信者は自分の を使って を計算できます。 は素数で、 は の倍数ではありません。そのため も の倍数ではなく、 となるので逆元 が存在します。よって となり、平文が戻ります。 なので、 は余りとして一つに決まります。
安全性について、二つのことを区別しておきます。盗聴者が知っているのは です。復号するには、これらから を求める必要があります。この「 から を求める問題」を計算ディフィー・ヘルマン問題といい、これが難しいことが、第三者に平文を求められないことの根拠です。一方、離散対数問題( から を求める問題)が易しいと、 が求まって誰でも復号できてしまいます。つまり離散対数の困難性は、秘密鍵 を求められないための条件であり、安全性に必要な条件です。ただし、 を求めずに を作る方法がないことまでは、これだけでは保証されません。
同じ で2つの平文 を暗号化すると、目隠し が共通になり、、 となります。 で は素数なので、 です。 も と互いに素なので、積 も の倍数ではありません。よって と はどちらも存在します。両式の比をとると が消えて となります。したがって、 を知っている攻撃者は、秘密鍵なしで を計算できてしまいます。これが、 を毎回変えなければならない理由です。
手順
鍵を作る: 受信者は秘密鍵 ()を選ぶ。繰り返し二乗法で公開鍵 を計算し、 を公開する。
暗号化する: 送信者は毎回新しい乱数 ()を選ぶ。、 を計算して を送る。
復号で目隠しを再現する: 受信者は を繰り返し二乗法で計算する(これは と等しい)。
逆元を求める: なので、拡張ユークリッドの互除法で を解き、 を得る。
平文を取り出す: を計算し、 以上 以下の余りにする。
( の使い回しを突く場合)同じ の暗号文 と既知の平文 を使う。 は と互いに素なので が存在する。これを互除法で求め、 を計算する。
例題
エルガマル暗号で、公開パラメータを 、、受信者の秘密鍵を とする。受信した暗号文 を復号し、平文 ()を求めよ。
例題の解答
手順3(目隠しの再現): を繰り返し二乗法で計算する。、 である。よって となり、 である。
手順4(逆元): なので逆元は存在する。互除法を行うと 、 である。これを逆にたどると となる。よって である(確かめ: )。
手順5(平文の取り出し): 。
検算: 公開鍵は である。、 より となる。 とすると 、 なので となり、受信した暗号文と一致する。よって 。
答え:
よくある誤り
復号で や を計算してしまう誤り。目隠しは であり、受信者が使えるのは である。正しくは (例題では )。
を で普通に割り算してしまう誤り(例: は整数にならない)。正しくは逆元を掛けて、 とする。
逆元を法 で求めてしまう誤り。たとえば は、 なので存在しない。平文の計算は法 で行うので、正しくは 。指数の や を扱うときの法 と混同しないこと。
の使い回しで比の向きを逆にしてしまう誤り( としてしまう)。、 なので、正しくは 。
この説明は AI が書き、別の AI が例題を独立に解いて答えを確かめ、説明を一歩ずつ査読しました。
入口の問題
素数 と、法 の原始根 を公開パラメータとするエルガマル暗号を考える。受信者の秘密鍵は で、公開鍵は である。送信者は平文 ( の整数)を、ある整数 を用いて
と暗号化し、暗号文 を送った。受信者が秘密鍵を用いて復号したときの平文 を求めよ。素数 と、法 の原始根 を公開パラメータとするエルガマル暗号を考える。受信者の秘密鍵は である。受信者は、ある平文 ( の整数)を暗号化した暗号文
を受け取った。ただし、送信者は秘密の整数 を選び、, ( は受信者の公開鍵)として暗号文を作ったものとする。復号の式 を用いて、平文 を求めよ。
この技能を使う問題
素数 と、法 の原始根 を公開パラメータとするエルガマル暗号を考える。受信者の公開鍵は である(秘密鍵 は を満たす。 は公開されていない)。
平文 ( の整数)を暗号化するとき、送信者は整数 を選び、
として暗号文 を送る。ある送信者が、本来は毎回選び直すべき を使い回して、2 つの平文 を同じ で暗号化した。得られた暗号文は
である。攻撃者は何らかの方法で であることを知った。秘密鍵 を求めずに、平文 ( の整数)を求めよ。素数 と、法 の原始根 を公開パラメータとするエルガマル暗号を考える。受信者の公開鍵は である。秘密鍵 は を満たすが、公開されていない。
送信者は平文 ( を満たす整数)を暗号化するとき、一時鍵 を選び、
として暗号文 を送る。ある送信者が、本来は毎回取り替えるべき一時鍵 を、2 つの平文 , の暗号化に同じ値のまま使ってしまった。その結果、送られた暗号文は次の 2 つである。
攻撃者は、1 つ目の暗号文の平文が であることを知っている。このとき、2 つ目の暗号文の平文 ()を求めよ。素数 と法 の原始根 を用いるエルガマル暗号を考える。受信者の秘密鍵を 、公開鍵を とする。平文 ( の整数)は、送信者が整数 ()を選び
として暗号文 に暗号化される。送信者は、誤って同じ を使い回して 2 つの平文 を暗号化し、暗号文 と をこの順に送った。盗聴者は つ目の平文が であることを知っている。 つ目の平文 を求めよ。
素数 と、法 の原始根 を公開パラメータとするエルガマル暗号を考える。受信者は秘密鍵 を選び、公開鍵 ()を公開している。
送信者は平文 ( の整数)を、整数 を選んで
により暗号文 に変換して送る。受信者が受け取った暗号文が であるとき、平文 を求めよ。素数 と、法 の原始根 を公開パラメータとするエルガマル暗号を考える。受信者の公開鍵は である(秘密鍵 は を満たすが、公開されていない)。
平文 ( の整数)を暗号化するとき、送信者は乱数 ( の整数)を選び、
として暗号文 を送る。ある送信者が、2 つの平文 を暗号化する際に、誤って同じ乱数 を使ってしまい、暗号文はそれぞれ
となった。攻撃者は、1 つ目の平文が であることを知っている。このとき、2 つ目の平文 を求めよ。素数 と、法 の原始根 を公開パラメータとするエルガマル暗号を考える。受信者の公開鍵は である(秘密鍵 は を満たすが、公開されていない)。
平文 ( の整数)を暗号化するとき、送信者は乱数 を選び、
として暗号文 を送る。ある送信者が、2 つの平文 , を暗号化する際に、誤って同じ乱数 を使ってしまった。その結果、暗号文はそれぞれ
となった。攻撃者は何らかの方法で であることを知った。このとき、秘密鍵 や乱数 を求めずに得られる ( の整数)を求めよ。