問題タブ [diffie-hellman]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Java で完全な Diffie-Hellman 鍵交換暗号化を実装する
データの送受信にソケットを使用するチャット プログラムがあります。ここで、ソケット経由のデータ転送を Diffie-Hellman 鍵交換システムで暗号化したいと考えています。それを行う最も簡単な方法は何ですか?
java - ECDH対。JAVA での DH ベンチマーク
この質問は以前にcrypto.exchangeに投稿されましたが、私の問題はまだ残っているため、おそらくこれはプログラミングの詳細であり、理論的なものではなく、見落としている可能性があると思いました。
したがって、基本的に私の問題は、JavaでECDHキーを生成するのにかかる時間とDHキーを生成するのにかかる時間を測定するときに得られる奇妙な結果です。
生成にかかる時間を比較します。
- 192 ビットの ECDH キーから 512 ビットの DH キーへ
- 1024 DH キーへの 224 ビット ECDH キー
ここで、キー サイズの違いにより、ECDH キー ペアの生成が通常の DH キーよりも優れていると予想していましたが、そうではありませんでした。おそらく私はこれを間違って測定しているか、別の説明があります。
java - Diffie Hellman Key Exchange の使用を強制する方法
TLS ソケット接続を作成したい。TLSにはキーを交換する方法がいくつかあることは知っています。RSA、Diffie-Hellman など。他の形式の鍵交換ではなく、Diffie-Hellman 鍵交換の使用を強制するにはどうすればよいですか?
Diffie-Hellman 鍵交換を使用すると、中間者攻撃に対して脆弱になることがわかっています。RSA を使用する場合、MITM を防止するサーバー認証があります。しかし、私が懸念していることの 1 つは、RSA を使用すると前方秘匿性が妨げられることです。
私は何をすべきか?
ssl - 秘密鍵配布とDiffie–Hellmanの公開鍵暗号化
秘密鍵と公開鍵を備えたサーバーがあり、後者はすべてのクライアントが利用でき、独自の非対称鍵を持たないクライアントがあるとします。サーバーとクライアント間の安全な通信を確立する必要があり、クライアントはサーバーの信頼性を確保する必要があります。これはかなり一般的な状況です。
さて、秘密鍵と公開鍵のペアは通常、信頼性を確保するためにのみこのような状況で使用されることを理解しています(クライアントはサーバーの公開鍵を使用してサーバーの信頼性を検証できます)。サーバーとクライアント間の両面通信を確実にするために、Diffie-Hellman鍵交換が使用され、通信は共有秘密鍵に基づいています。
なぜこのような状況でDiffie-Hellmanが使用されるのか不思議に思うことはできません。私が理解していることから、公開鍵暗号は、信頼性を確保するためと、クライアントとサーバーの間で秘密鍵を共有するための両方に使用できます。サーバーはクライアントに秘密鍵でエンコードされたメッセージを送信でき、クライアントはサーバーの公開鍵を使用してメッセージをデコードしてIDを確認できます。さらに、クライアントはサーバーの公開鍵を使用して、新しいランダムな秘密鍵をサーバーに送信できます。サーバーだけが自分の秘密鍵を知っているので、サーバーだけがこの秘密鍵を知っています。エンコードとデコードの両方に公開鍵を使用しないようにアドバイスする人もいますが、その理由は誰にもわかりません。
明らかに、クライアントとサーバーの両方が独自の公開/秘密鍵を持っている場合、秘密鍵を共有する必要すらありませんが、それは一般的な状況ではありません。
だから...要約すると。公開鍵暗号による秘密鍵配布の代わりにDiffie-Hellmanが使用されるのはなぜですか?何か利点はありますか?
java - Diffie-Hellman秘密鍵
秘密鍵を生成するための次のコード行があります。
G
とP
は静的な数値です。一方Xa
、ランダムに生成されます。プログラムを実行するたびに、同じ結果が得られYa
ます。これはDiffie-Hellmanにとって正しいですか?アルゴリズムを実行するたびに秘密鍵を変更する必要があると思いました。
cryptography - diffie-hellman を無効にするか、セッション キーを設定する
Diffie-Hellman を無効にしたり、openssh の固定セッション キーを設定したりできるかどうか知っていますか? 実際、WireShark でトラフィックを分析したいので、復号化する必要があります。
java - Java.Security.Key.getEncoded() OpenSSL DH の同等物
getEncoded() メソッドが生成するのと同じ結果を OpenSSL で C で実現するにはどうすればよいですか? これは Diffie-Hellman Key Agreement に必要であり、公開鍵を Java サーバーに送信する必要があります (ただし、getEncoded() メソッドは公開鍵をエンコードするだけでなく、私の場合にも必要なパラメーターもエンコードすると思います)
私の現在のステータスは、PublicKey と p&g を BigNum として含む OpenSSL DH オブジェクトを持っていることです。
誰かがそれを行う方法を知っていれば、とても素晴らしいでしょう。
php - javascript で楕円曲線 Diffie-Hellman をブリッジできません
私はこれが非常に具体的な質問であることを知っていますが、健全なように見える2つのライブラリに基づく楕円曲線Diffie-Hellmanアルゴリズム(ECDH)を使用して、phpとクライアントの間で鍵を交換しようとしました:
https://github.com/mdanter/phpeccの php 部分と
js 部分のhttp://www-cs-students.stanford.edu/~tjw/jsbn/ecdh.html 。
パラメータ (2 番目のデモで見られるように) は、(1) の Mattias Danter ライブラリには適切ではないようです!
私が試したこと:
a. PHP でアリスの公開鍵を生成する
b. (a) から x 値と y 値を取得し、アリス フィールドの代わりにスタンフォードの js デモ ページに配置します。
c. ページ (b) から生成するボブの公開ポイントと秘密鍵
d. (a)でphpを再実行しますが、アリスのプロパティを以前の実行にリセットし(Mattias Danterクラスにいくつかのセッターを追加する必要がありました)、ボブの公開値と秘密鍵を使用してボブをjavascriptの値にリセットしました
e. キーをインポートして比較する
しかし、phpはエラーをキャッチします:
コードを検索すると、エラーの原因がわかりました。アリスによる共通キーの計算中だったのです。
Bob の公開鍵 (javascript から) が に保存されEcDH::receivedPubPoint
、エラーが発生しました!!
これは、いくつかの識別 (EcDH クラス) を持つオブジェクト Alice です。
私の意見では、「楕円曲線パラメーター」の下のフィールドがhttp://www-cs-students.stanford.edu/~tjw/jsbn/ecdh.htmlで実装されているため、javascript の公開値は正しくありません。
さらに検索すると、スタンフォードのコードのこの js ブロックは、php バージョンと比較して問題があることがわかりました。
何か提案はありますか?
ありがとう。
encryption - openssl lib のログで Diffie Hellman 共有キーを公開する
openssl ライブラリには、共有キーを作成する DH_Compute_key という関数があります。これを使用して、デバッグ目的でログに公開できますか?