RSAの概要
最初にこの暗号化アルゴリズムの名前を見てください。これは非常に興味深いもので、実際には3人の名前です。1977年には、マサチューセッツ工科大学の3人の暗号化論者Rivest、Shamir、およびAdlemanがこの暗号化アルゴリズムを提案し、3人の姓の頭文字で名前を付けました。
RSAは非対称暗号化として使用できます。公開鍵と秘密鍵は相対的です。これは、一方が暗号化した情報を他方が復号化できるためです。通常、ご自身で保管される秘密鍵は秘密鍵であり、公開鍵は相手に送信されます。次に、RSAアルゴリズムを整理します。前提条件:関連する数論
鍵の生成手順
RSAアルゴリズムを理解するために例を使用します。アリスがボブと暗号化して通信したい場合、彼女はどのように公開鍵と秘密鍵を生成する必要がありますか?
- 最初のステップは、2つの等しくない素数pとqをランダムに選択することです。
アリスは61と53を選びました。(実際のアプリケーションでは、これらの2つの素数が大きいほど、解読が難しくなります。)
- 2番目のステップでは、pとqの積nが計算されます。
アリスは61と53を掛けました。
n = 61×53 = 3233
nの長さはキーの長さです。3233は2進数で110010100001と書かれており、合計12ビットなので、このキーは12ビットです。実際のアプリケーションでは、RSA鍵は一般に1024ビットであり、重要な場合には2048ビットです。
-
3番目のステップは、nのオイラー関数φ(n)を計算することです。
式によれば、
φ(n)=(p-1)(q-1)
アリスは、φ(3233)が60×52、つまり3120に等しいと計算しました。
- 4番目のステップでは、1 <e <φ(n)であり、eとφ(n)が比較的素数であるという条件で、整数eがランダムに選択されます。
アリスは1〜3120で、ランダムに17を選択します。(実際には、65537がしばしば選択されます。)
-
5番目のステップでは、φ(n)のeの逆元dを計算します。
いわゆる「モジュロ逆元」は、整数dを指します。これにより、edをφ(n)で割った余りが1になります。
ed≡1(modφ(n))
この式は次と同等です
ed-1 =kφ(n)
したがって、逆元dを見つけることは、本質的に次の二次線形方程式を解くことです。
ex +φ(n)y = 1
e = 17、φ(n)= 3120、
17x + 3120y = 1
この方程式は「拡張ユークリッドアルゴリズム」によって解くことができ、ここでは特定のプロセスを省略しています。つまり、アリスは整数解のセットを(x、y)=(2753、-15)として計算しました。つまり、d = 2753です。
この時点で、すべての計算が完了しています。
- 6番目のステップは、nとeを公開鍵に、nとdを秘密鍵にカプセル化することです。
アリスの例では、n = 3233、e = 17、d = 2753なので、公開鍵は(3233,17)、秘密鍵は(3233、2753)です。
暗号化と復号化
(1)暗号化には公開鍵(n、e)を使用
ボブが暗号化された情報mをアリスに送信したい場合、彼はアリスの公開鍵(n、e)でmを暗号化し
ます。ここで、mは整数(文字列はASCII値またはUnicode値を取ることができます)でなければならず、mはn未満でなければならないことに注意してください。
いわゆる「暗号化」は、次の式cを計算することです。
アリスの公開鍵は(3233、17)であり、ボブのm仮説は65である場合、次の方程式を計算できます。
6517≡2790(mod 3233)
したがって、cは2790に等しく、ボブは2790をアリスに送信します。
(2)復号化に秘密鍵(n、d)を使用する
アリスはボブから2790を受け取った後、秘密鍵(3233、2753)でそれを復号しました。次の方程式が成立する必要があることが証明できます。
つまり、cをdの累乗で割った余りがmです。
ここで、cは2790に等しく、秘密鍵は(3233、2753)であり、アリスは
27902753≡65(mod 3233)
したがって、アリスはボブの暗号化前の元のテキストが65であることを知っていました。
この時点で、「暗号化-復号化」のプロセス全体が完了しています。
RSA署名の検証
RSA暗号システムは、暗号化とデジタル署名の両方に使用できます。RSAデジタル署名の機能を以下に紹介します。
既知の公開鍵(e、n)、秘密鍵d:
1)メッセージmの署名は次のとおりです:sign≡m ^ d mod n
2)検証:メッセージ署名ペア(m、sign)の場合、m≡sign ^ e mod nの場合、signはmの有効な署名です
RSAアルゴリズムの信頼性
上記のキー生成手順を思い出して、合計6つの数字が表示されます。
p q nφ(n)およびd
これらの6つの数字のうち、2つ(nおよびe)が公開鍵に使用され、残りの4つの数字はすべて非公開です。最も重要なのはdです。nとdは秘密鍵を形成するため、dが漏洩すると、次のようになります。秘密鍵の漏洩。
では、nとeがわかっている場合、dを導出することはできますか?
-
(1)ed≡1(modφ(n))。eとφ(n)を知ることによってのみ、dを計算できます。
-
(2)φ(n)=(p-1)(q-1)。pとqを知ることによってのみ、φ(n)を計算できます。
-
(3)n = pq。nを因数分解することによってのみ、pおよびqを計算できます。
結論:nを因数分解できる場合、dを計算できます。これは、秘密鍵がクラックされていることを意味します。
ただし、大きな整数の因数分解は非常に困難です。現在、ブルートフォースクラッキングに加えて、他に効果的な方法は見つかっていません。ウィキペディアは書いています:
大きな整数の因数分解の難しさは、RSAアルゴリズムの信頼性を決定します。言い換えると、非常に大きな整数を因数分解することが困難であるほど、RSAアルゴリズムの信頼性が高くなります。鍵の長さが十分である限り、RSAで暗号化された情報は実際には破壊されません。今日、ブルートフォースできるのは短いRSAキーだけです。2008年現在、RSAアルゴリズムを攻撃する信頼できる方法はなく、現在クラックされている最長のRSAキーは768ビットです。
RSAの実践
Macに付属のopensslを使用して、RSA暗号化および復号化のプロセスを簡単にシミュレートできます。
1)公開鍵を生成します
。2)秘密鍵から公開鍵を抽出し
ます。これで
、次の2つのファイルができました。
参照リンク
http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html