暗号研究ノート II: RSA 暗号化

RSA暗号方式の解析

    この記事では、RSA 暗号化アルゴリズムの基本原理を紹介します。まず、基本的な数学的知識を理解してから、暗号化の基本的な知識を理解して、最後に RSA 暗号化アルゴリズムを理解しましょう。

1. 数学の基礎知識

1.1. 「素数」とは何ですか?

  百度百科では、素数は次のように定義されています: 素数 (素数) は素数とも呼ばれ、無限です。素数は、1 とそれ自体以外に因数を持たない、1 より大きい自然数として定義されます。

例: 15=1*15=3*5、つまり 15 の約数は 1、3、5、15 であるため、15 は素数ではありません; 13=1*13、つまり 13 の約数は 1 と 13 です
。 、定義によれば、13 は素数です。

1.2. 「共素数」とは何ですか?

  いつものように、百度百科の共素数の説明: 共素数とは数学における概念であり、2 つ以上の整数の公約数が 1 のみであるゼロ以外の自然数です。公約数が 1 のみである 2 つの非ゼロの自然数を共素数と呼びます。

   例:
  (1) 2 つの素数は互いに素数でなければなりません。たとえば、2 と 7、13 と 19 などです。
  (2) 素数が別の合成数を割り切れない場合、2 つの数は互いに素な数になります。たとえば、3 と 10、5 と 26 などです。
  (3) 1 は素数や合成数ではなく、任意の自然数と互いに素な数です。1 や 9908 など。
  (4) 隣接する 2 つの自然数は互いに素数です。15とか16とか。
  (5) 隣接する 2 つの奇数は互いに素な数です。49や51など。
  (6) 大きな数は素数であり、2 つの数は互いに素数です。97とか88とか。
  (7) 小数は素数であり、その大きい数が小数の倍数ではない 2 つの数は互いに素な数です。7や16など。
  (8) 両方の数は合成数 (2 つの数の差が比較的大きい) であり、小数の素因数はすべて大きい数の約数ではありません。これら 2 つの数は互いに素な数です。357 と 715 のように、357=3×7×17、3、7、17 は 715 の約数ではなく、これら 2 つの数字は互いに素な数です。

1.3.「オイラー関数」とは何ですか?

  百度百科のオイラー関数の説明: 数論では、正の整数 n について、オイラー関数は、n より小さい正の整数 (φ(1)=1) で n と互いに素である数の数です。
  オイラー関数の一般式は次のとおりです。

ここに画像の説明を挿入
  p1、p2...pn は x の素因数、素因数です。整数論では、与えられた正の整数を割り切れる素数を指します。
  例: x=16 と仮定すると、16 の素因数は 2 なので、φ(16)=16*(1-1/2)=8 となり、16 より小さく、16 と互いに素な正の整数は次のようになります。 、3、5、7、9、11、13、15、数字はちょうど 8 です。

1.4. 「指数剰余演算」とは何ですか?

  モジュロ演算は整数演算であり、整数 m があり、モジュロ演算は n を法とする、つまり m mod n で実行されます。m を n で割って余りだけを結果とすることをモジュロ演算といいます。例: 10 mod 3 = 1; 6 mod 2 = 0。
  モジュロ指数演算は、最初に指数演算を実行し、その結果を取得してからモジュロ演算を実行します。例えば:

ここに画像の説明を挿入

2. 暗号の基礎知識

2.1. 「平文と暗号文」とは何ですか?

  平文は暗号化する前の元のデータであり、暗号文は暗号操作が暗号文になった後の結果です。

  キーは、暗号化アルゴリズムの使用中に入力されるパラメーターです。同じ平文から、同じ暗号化アルゴリズムと異なる鍵計算に基づいて異なる暗号文が生成されます。

  多くのよく知られた暗号アルゴリズムが公開されており、キーは暗号文が安全かどうかを判断する重要なパラメータです。通常、キーが長いほど解読は困難になります。この方法は簡単に解読されます。 DES アルゴリズムでは 56 ビット キーが使用されていますが、これはもはや安全な暗号化アルゴリズムではありません。主な理由は、56 ビット キーが短すぎるため、数時間以内に解読されてしまう可能性があることです。

  鍵は対称鍵と非対称鍵に分けられます。

2.2. 「対称暗号化」とは何ですか?

  対称キーは、暗号化と復号化のプロセスで同じキーを使用します。一般的な対称暗号化アルゴリズムには、DES、3DES、AES、RC5、RC6 などがあります。

  対称鍵の利点は計算速度が速いことですが、欠点は、通信の両端で鍵を共有する必要があるため、相手が正しく復号化する前にお互いに鍵が何であるかを知ることができることです。すべてのクライアントが同じキーを共有する場合、このキーはマスター キーのように、1 つのキーで全員の暗号文を解読できます。各クライアントとサーバーが個別のキーを保持する場合、サーバーは数千のキーを管理する必要があります。

2.3. 「非対称暗号化」とは何ですか?

  非対称暗号化は公開キー暗号化とも呼ばれます。サーバーはキーのペアを生成します。1 つの秘密キーはサーバーに保存され、ユーザーだけが知っています。もう 1 つは公開キーです。公開キーは誰でも自由に公開できます。使用。公開鍵で暗号化されたクライアントの平文の暗号文は、秘密鍵で復号化する必要があります。

  非対称鍵は、暗号化と復号化の過程で異なる鍵を使用し、暗号化と復号化が非対称であるため、非対称暗号化と呼ばれます。対称鍵暗号と比較して、非対称暗号はクライアントとサーバー間で鍵を共有する必要がなく、秘密鍵がユーザーに送信されない限り、たとえ公開鍵がインターネット上で傍受されても復号化できません。公開鍵は盗まれるだけで役に立ちません。一般的な非対称暗号化は RSA 暗号化アルゴリズムです。

3. RSA暗号化アルゴリズム

  アルゴリズム理論について話す前に、簡単な例を挙げてみましょう。主人公の名前はアリス、ボブ、イブです。RSA アルゴリズムは非対称暗号化であるため、2 つのキーが存在します。

  アリスは公開キーを設計したいと考えています。このキーは公開され、誰もがこのキーをコピーして、自分に送信されるメッセージを暗号化するために使用できます。ただし、このキーでは暗号化された情報のロックを解除できてはなりません。これが公開鍵です。したがって、このステップでは、暗号化のみ可能で復号化できない不可逆関数演算が必要ですが、これは前述したモジュロ演算で実現できます。

  同時に、アリス自身も公開されていない鍵を持っている必要があります。そして、この鍵は彼女の公開鍵によって暗号化された情報のロックを解除することができます。これが秘密鍵です。

  アリスによって与えられた公開鍵は、2 つの比較的大きな素数 p と q を乗算して、より大きな数 N を得ることで得られます。pとqは秘密にしなければならず、アリスだけが知っていて他人に教えることはできませんが、積Nは公開されており、誰でも知ることができます、つまり生成された公開鍵です。

  アリスにメッセージを送信する人は誰でも、N を使用して暗号化する必要があります。暗号化プロセスでは引き続きモジュロ計算が使用され、モジュラスは N です。数学的プロセスにより、このモジュロ演算は不可逆であることが保証されているため、たとえイブがこの N を知っていたとしても、それは役に立ちません。

  アリスの復号化プロセス: アリスは復号化に N を必要としませんが、p と q の値を使用します (p と q は誰も知りません。アリスだけが知っています)。アリスがプライベートで行った別のモジュロ演算のモジュラス、この値は (p-1)*(q-1) です。

  以下に、RSA アルゴリズムのプロセスを要約します。最初に
  アルゴリズムの主要なステップ
  を表に示します。
ここに画像の説明を挿入
プロセスの説明:
(1) 異なる、十分に大きな素数 p、q のペアを選択し、p、q を秘密にしておく。知ることができます。
(2) N = pq を計算します;
(3) f(N) = (p-1)(q-1) を計算します; (
4) f(n) と互いに素であり、1<e< である数 e を見つけます。 f (N);
(5) d を計算します、
ここに画像の説明を挿入
(6) 次に、公開鍵 (e, N)、秘密鍵 (d, N)
  例:
(1) 等しくない 2 つの素数をランダムに選択します p=3,q =11 ,
(2) 1 ~ (p-1)(q-1) から整数 e をランダムに選択し、それは (p-1)(q-1) と互いに素でなければなりません (最大公約数は 1) ( p
   - 1) (q-1)=2*10= 20 (20 と互いに素)、ランダムに 3 を選択します;
   N = 3*11=33; e = 3;
  公開鍵 (e,N)=(3,33) ) ;
(3)
  ≡ は数論における合同の記号です。式では、≡ 記号の左側は記号の右側と一致する必要があります。つまり、両側のモジュロ演算の結果は同じになります。明らかに、f(n) がどのような値であっても、シンボルの右側の 1 mod f(n) の結果は 1 に等しく、左側の d と e の積のモジュロ演算の結果です。シンボルの も 1 に等しくなければなりません。e×d≡1 mod f(n)

d を解くための徹底的な方法:
ここに画像の説明を挿入
d = 7 を解く;  秘密鍵 (d, N) = (7, 33);

(4) 暗号化:暗号化する暗号文を m = 5;
ここに画像の説明を挿入
C = 26
とする (5) 同様に m = 5 のみを秘密鍵で復号するが、ここで難しいのは合同式の計算方法を理解することである。(合同式の計算については別記事で詳しく解説します。)

  RSA の安全性は大きな数の因数分解に依存しますが、RSA の解読の困難さが大きな数の因数分解の困難と同等であることは理論的に証明されていません。つまり、RSA の大きな欠点は、機密性能を理論的に把握できないことです。

おすすめ

転載: blog.csdn.net/koudan567/article/details/90029313