問題タブ [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.
security - LAN での中間者攻撃
私はこの種のことでかなり新しいです。
私はローカルエリアネットワークを持っており、一部のユーザーはケーブルを介してアクセスし、他のユーザーはwifiを介してアクセスします。LAN クライアントの一部のみを認証ユーザーとして受信するローカル アプリケーションを php で開発しました。それらは、秘密鍵を確立するために、Diffie-Hellman のものと同様の鍵交換のアルゴリズムを使用してシステムによって識別できます。次に、クライアントは、そのようなチャネルを通じて識別されるように要求します。
問題は、この種の状況で MITM 攻撃が可能になることです。このような攻撃がどのように実行されるかについてウィキペディアを読みました。誰かが 2 つのメッセージを聞き、クライアントとサーバー用に 2 つの異なる秘密鍵を作成する間に挟まれます。
この攻撃は現実なので、可能でなければなりません。しかし、私はそれが LAN でどのように起こるのか理解していません: 攻撃者はメッセージを聞いて、必要に応じて https の IP フィールドを偽造することで通信の 2 つの主体になりすまして、自分のメッセージを挿入することができます... しかし、彼はできません元の偽造されていないメッセージが、悪意のある偽造されたメッセージである受信者と同時に(ただし、偽造プロセスに攻撃者のコンピューターに時間がかかるため、後で)到達するのを防ぎます!特に、ケーブルを切断するなど、単一のユーザーに対して切断できないwifi接続では。したがって、クライアントとサーバーは、真と偽造の 2 つの異なる http 要求を相互に受け取ります。これは、そのような攻撃が進行中であることを認識するための方法ではないでしょうか?
たぶん、この質問は目新しいものです。私が言ったように、私はこれでかなり新しいです。
c# - DiffieHellman (ECDiffieHellmanCng クラス) で使用するために証明書キーを CngKey クラスにロードします。
これは .NET / C# に関連しています。PFX または PKCS#12 ファイル内に証明書 + 秘密鍵 (P521 ECC 1) があるとします。この証明書とその秘密キーを Windows 証明書ストアにロードしました (PFX をダブルクリックするか、実行しますcertutil -f -p myPfxPassword -importPFX MY SomeEcCert.pfx
)。証明書に互換性がある場合 (p521 曲線など)、CNG 証明書/キーとして自動的にインストールされることに注意してください。
では、秘密鍵を CngKey にロードして、ECDiffieHellmanCng
クラス内で使用できるようにするにはどうすればよいでしょうか? X509 (CNG) 証明書を読み込んで、簿記のためにシリアル番号、発行者、共通名などを読みたいと思います。
cryptography - Diffie-Hellman キー交換中に使用される DH グループをネゴシエートするのは一般的ですか?
DH 鍵交換がどのように機能するかについての説明を読んだとき、公開値と非公開値を計算するためにどの「グループ」(p
およびパラメーター) を使用する必要があるかについて、鍵交換者がどのように合意に達したかについては言及されていません。RFC 5114g
を見ると、かなりの数の選択肢があるようです。
このネゴシエーションが通常、交換中に行われるかどうかを知りたいのですが、そうでない場合は、そのステップが含まれていた場合にアルゴリズムがどのように異なるかについての説明がどこかにあるかどうかを知りたいです。
読んでくれてありがとう。
java - C++ および Java 用の Diffie-Hellman ライブラリ
C++ アプリケーションと Android アプリケーションの間で公開鍵を交換したいと考えています。Diffie-Hellmanを使用することにしました。C++ 側では、このライブラリは c++ でキーを生成するのに有望に見えます。今、Android スマートフォンでキーを生成するための Java の実装を探しています。
C ++側でも、どのライブラリを提案しますか? 最後に、公開鍵を UDP 経由で文字列として共有したいと考えています。
敬具
c - OpenSSL の EVP_PKEY 構造内の生の ECDH 公開鍵、秘密鍵、およびパラメーターにどのようにアクセスしますか?
OpenSSL の c ライブラリを使用して、楕円曲線 Diffie-Hellman (ECDH) キー ペアを生成しています。最初のコード サンプルはこちらです。次の行で、公開鍵の実際の交換について詳しく説明します。
pkey
変数と戻り値はどちらも型ですEVP *
。pkey
以前に生成された公開鍵、秘密鍵、およびパラメーターが含まれ、戻り値にはピアの公開鍵のみが含まれます。したがって、これにより 3 つの疑問が生じます。
- ピアに送信するため
get_peerkey()
に実際に公開鍵だけを抽出するにはどうすればよいでしょうか?pkey
- コードは秘密鍵とパラメータを抽出して
pKey
、鍵交換後に後で使用できるように保存するにはどうすればよいでしょうか? - ピアの生の公開鍵から
get_peerkey()
新しい構造をどのように生成しますか?EVP_PKEY
EVP_PKEY_print_public()
OpenSSL 関数、EVP_PKEY_print_private()
、およびを見てきましたEVP_PKEY_print_params()
が、これらは人間が読める出力を生成するためのものです。EVP_PKEY
そして、人間が読める公開鍵を構造体に戻すための同等のものは見つかりませんでした。
java - 演習用に書いたコードは効率的ですか?
以下の Diffie-Hellman 鍵交換アルゴリズムを実装するコードの書き方を学びましたが、私のコードは最も効率的ではないと感じています。誰でも私のコードを修正できますか...?
上記のコードは Java ルールで適切でしたか??
ssh - ssh2 ベース 'G' とモジュラス 'P' がどのようにネゴシエートされるか、不明なフィールド
(最初に私の母国語ではないので私の英語で申し訳ありません) 私はwiresharkでssh2を理解しようとしています(wiresharkの記録はこちらにあります: https://dl.dropboxusercontent.com/s/e9ut8z6v8oldg7g/ssh_wireshark .pcap?token_hash=AAGtkPMwKLt4IIr1Rlrht5_21HpMwQZBfeEFjGoRA85cjQ&dl=1 ) と rfc 4253 ですが、いくつかの問題があります:
SSH_MSG_KEXINIT メッセージの後に、SSH_MSG_KEXDH_INIT (30) と SSH_MSG_KEXDH_REPLY (31) があります。
私の問題は、SSH_MSG_KEXDH_INIT と SSH_MSG_KEXDH_REPLY を理解することです。rfc4253 によると:
しかし、wiresharkを使用すると、次のように表示されます:
「ペイロード」フィールドとは何ですか? ベース「G」とモジュラス「P」はどのようにネゴシエートされますか? ecdsa 公開鍵は素数ですか、それとも合成数ですか?
これは私の分析です:
a)wireshark が間違っています。
rfc が正しければ、ペイロード フィールドは 'e' と 'f' です。
しかし、問題があります: rfc が正しい場合、モジュラス p と基数 g は SSH_MSG_KEXDH_INIT の前に知る必要があります。したがって、Wireshark のデコードは間違っています。
そして、wireshark が間違っていることを教えてくれる何かがあります: /etc/....pub ファイルで見つかる base64 をデコードすると、wireshark DH_modulus フィールドの値を見ることができます。したがって、DH_modulus フィールドは実際には DH_modulus ではなく、サーバーの公開ホスト キーです。rfc は正しく、wireshark は間違っています。
この場合、ベースとモジュラスは「Diffie-Hellman Key Exchange Reply」によって送信されないため、「g」と「p」はどのように送信されるのでしょうか??すべての ssh クライアント/サーバーで「接頭辞」が付けられ、送信されませんか?
b)wiresharkは正しい
サーバーの公開ホストキーが素数であると仮定すると、DH_modulus と rfc および Wireshark が正しい可能性があります。
しかし、ここでも問題があります。ペイロードは DH_modulus と DH_base の前に送信されるため、クライアントからのペイロードを「e」にすることはできません...
ペイロードフィールドは何ですか?
「e」と「f」はいつ送信されますか? 「Diffie-Hellman Key Exchange Reply」の直後に、鍵交換の終了を示す「Newkeys メッセージ」があるためです。
しかし一方で、sshとしてデコードされていないポート22との間の4つのパケットがありますが、おそらく「e」と「f」ですか??
最初の 2 つのパケットは 48 バイトの長さで、残りの 2 つのパケットは 64 バイトの長さです。
「e」と「f」はこれら 4 つの TCP パケットで送信されますか? おそらくeとfは64 + 48 = 112バイトの長さですか?
ご覧のとおり、私は混乱しています。私を助けてくれませんか(すべての質問ではないかもしれませんが、いくつかの兆候が役立つ可能性があります)
ありがとうございました。
c# - Elliptic Curve Diffie-Hellman (ECDH) - SecretPrepend と SecretAppend の目的は何ですか?
私はちょうど遊んでいて、何のために、ECDiffieHellmanCng
何ができるのだろうSecretAppend
と思っていSecretPrepend
ました。Google はあまり役に立ちませんでした。何か案が?