DiffieHellman(てDiffieHellman)鍵交換アルゴリズムの理論とその実装

本論文の参照元https://segmentfault.com/a/1190000010917737https://zh.wikipedia.org/wiki/%E6%A8%A1%E9%99%A4   と  https://www.cnblogs.com /DarkValkyrie/p/10962231.html  (大きな助けのこの記事の首長の基本式)

 Diffie-Hellman鍵交換アルゴリズムとは何ですか?
  Diffie-Hellmanは:セキュリティ確保KEYを共有するための 間で 非セキュアなネットワークを、それはOAKLEYの不可欠な部分です。ホワイトフィールドとMartin Hellmanは1976年に、素敵な鍵交換プロトコルを提示したDiffie-Hellman鍵交換プロトコル/アルゴリズム(のDiffie-Hellman鍵交換/協定と呼ばれるアルゴリズム)。 両当事者が安全に通信できる必要があり、この独創的なメカニズムを対称鍵は、この方法によって決定されます。その後、暗号化および復号化キーを使用することができます。注意は、しかし、鍵交換プロトコル/鍵交換アルゴリズムを使用することができるが、メッセージの暗号化と復号化にはありません。双方は、他の使用するために、キーを使用して決定し 、対称鍵暗号化アルゴリズムの操作を 暗号化を達成し、メッセージを解読します。
 
はじめにアルゴリズムモジュロ算術ルール---
  • 幾分同様の四つの基本的な演算が、分割の例外を除いてモジュロ演算。次のようにそのルールは以下のとおりです。
  1. (A + B)%のP =(%のP + B%のP)%のP(1)
  2. ( - B)%のP =(P% - B%P)%のP(2)
  3. (* B)%、P =(%Pは* B%P)が%P(3)
  4. ^ Bの%のP =((%のP)^ B)%のP(4)
  • 連想法:
  1. ((A + B)%のP + C)%P =(A +(B + C)%P)%のP(5)
  2. ((* B)%のP *はC)%P =(*(B * C)%P)が%P(6)
  • 可換:
  1. (A + B)%のP =(B + A)%のP(7)
  2. (* b)は%のP =(B * A)%のP(8)
  • 分配法則:
  1. (A + B)%のP =(%のP + B%のP)%のP(9)
  2. ((A + B)%のP *はC)%、P =((* c)が%Pが+(b *表C)%P)%のP(10)
 
  1.(A ^ Xa因子のmod P)^ XbのMOD P = A ^(XA * Xbの)MOD P
  2.等価剰余演算と可換性
    1>(mod n)を計算MOD N = MOD Nの同値
    2>。^ Bの%のP =((%のP)^ B)%のP
 アルゴリズムの原則:
    1.次に、クライアント二つの素数のサーバ選択、(公然と)Pを仮定
  • クライアント:第Xa選択自然数、雅= A ^ Xa因子のmod P、雅、サーバに送信します。

  • サーバー:自然数Xbを、Ybのは= A ^ Xbのモッズpを選択し、クライアントのYbに送信します。

  • クライアント:計算のKa = Ybの^第XaモッズP

  • サーバー:KB =雅^ Xbのモッズpを計算

導出

    カー= Ybの^モッズPを送ります

          =(A ^ XbのMOD  P)^第Xa MOD  P   

                 ==>(A ^ Xbの  MOD P)^第Xa  式のMOD Pは、4つの(a ^ Xbの)^第Xa MODに分割することができ 、P

          = ^(Xbの*第Xa)のmod P

          =(A ^ Xa因子のmod  P)^ XbのMOD  P  

          =雅^ XbのモッズP

          = KB
私たちは、クライアントは、サーバーが互いの第Xa、Xbの中でお互いを知りませんが、同等の秘密を計算するのにもかかわらず、見ることができます。

コード例Nodejs

点クライアントの一つであるコードビュー、以下の要約に関連して先に述べたように、サーバは、同じ素数、Pを使用します。

 

必要暗号= VAR( '暗号'); 

VARのprimeLength = 1024; //長素数pの
VARジェネレータ= 5; //プライム
//作成し、クライアントのDHインスタンス
VAR = crypto.createDiffieHellmanクライアント(primeLength、ジェネレータ); 
/ /生成した公開鍵のペア、MOD第Xa雅= A ^ PVAR 
clientKey client.generateKeys =(); 
//同じ素数、Pのでクライアントを使用して、インスタンスDHサーバを作成
VAR = crypto.createDiffieHellmanサーバー(クライアント。 getPrime()、client.getGeneratorは()); 
//公開鍵と秘密鍵のペアを生成し、XbのYbを= A ^ P MODの
VAR server.generateKeysサーバキー=(); 
//計算^ Pのの第XaのYb = MODのKa 
VAR =クライアントclientSecret .computeSecret(server.getPublicKey()); 
//計算雅^ Xbの= MOD KB P 
VAR serverSecret = server.computeSecret(client.getPublicKey()); 
//各プリントがないように、素数pは、動的に生成されるので以下のような
//但是clientSecret === serverSecretの
console.log(clientSecret.toString( '進')); 
console.log(serverSecret.toString( '進'));

  

 

おすすめ

転載: www.cnblogs.com/pig1314/p/11618632.html