萌えハッカーニュースリーダー

2025/10/06 19:07 A Quiet Change to RSA

出典: https://www.johndcook.com/blog/2025/10/06/a-quiet-change-to-rsa/
hakase
博士

ロボ子、今日のITニュースはRSA暗号の鍵生成に関するものじゃ。

roboko
ロボ子

RSA暗号ですね。公開鍵と秘密鍵を使う暗号方式でしたでしょうか。

hakase
博士

そうじゃ!RSAの公開鍵は、指数 *e* と *n* = *p* *q* のペア(*e*, *n*)で構成されるんじゃよ。*p* と *q* は大きな素数じゃ。

roboko
ロボ子

なるほど。初期のRSA論文では、秘密鍵 *d* を選択して、*e* *d* ≡ 1 mod φ(*n*) を計算していたと。

hakase
博士

そうそう。今は *e* を選んで *d* を計算するのが一般的で、*e* はほぼ常に65537じゃな。

roboko
ロボ子

φ(*n*) はオイラーのトーティエント関数で、φ(*n*) = (*p* − 1)(*q* − 1) で計算されるんですよね。

hakase
博士

その通り!RSA暗号の安全性は、*p* と *q* を知らない限り、φ(*n*) を計算するのが難しいという仮定に基づいているんじゃ。

roboko
ロボ子

秘密鍵 *d* の計算方法が、当初の *e* *d* ≡ 1 mod φ(*n*) から、*e* *d* ≡ 1 mod λ(*n*) に変わったというのは、どういうことでしょうか?

hakase
博士

λ(*n*) はカーマイケルのトーティエント関数じゃ。フェルマーの小定理のオイラーによる一般化におけるφ(*n*)を置き換えることができる最小の数として定義されていて、λ(*n*)はφ(*n*)を割り切るんじゃ。

roboko
ロボ子

カーマイケルのトーティエント関数を使うと、秘密鍵が小さくなって、復号が速くなるんですね。

hakase
博士

*n* = *p* *q* の場合、λ(*n*) = lcm((*p* − 1), (*q* − 1)) = (*p* − 1)(*q* − 1) / gcd((*p* − 1), (*q* − 1)) となるんじゃ。

roboko
ロボ子

λ(*n*) は φ(*n*) よりも gcd((*p* − 1), (*q* − 1)) の分だけ小さいんですね。少なくとも、この因子は2以上だと。

hakase
博士

そうじゃ。でも実験によると、gcd((*p* − 1), (*q* − 1)) は通常2か4で、カーマイケルのトーティエント関数を使っても効率の向上はわずかなんじゃ。

roboko
ロボ子

なるほど。ガーナーのアルゴリズムを使う方が、効率が向上するんですね。

hakase
博士

そういうことじゃ!RSA暗号も奥が深いじゃろう?

roboko
ロボ子

はい、勉強になりました!

hakase
博士

ところでロボ子、RSA暗号の「RSA」って何の略か知ってるか?

roboko
ロボ子

えっと…発明者の名前ですよね?

hakase
博士

正解!じゃあ、ロボ子が暗号を発明したら、なんて名前にする?

roboko
ロボ子

そうですね…「ロボ子暗号」…ですかね?

hakase
博士

ダサっ!私なら「ハカセクリプト」にするぞ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search