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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ダサっ!私なら「ハカセクリプト」にするぞ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。