問題タブ [elliptic-curve]

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.

0 投票する
2 に答える
1798 参照

java - Java6の楕円曲線暗号

デフォルトでJava6で楕円曲線暗号を使用することは可能ですか?バウンシーキャッスルのようなサードパーティのプロバイダーは使いたくありません。

0 投票する
1 に答える
2981 参照

bouncycastle - Java で対称鍵を生成するための PFX ファイル ECC PrivateKey へのアクセス

ONE ECキーペアによって生成されたキーを使用してAES-256 / GCMでファイルを暗号化するプログラムを(JavaでBouncy Castle APIを使用して)書いています。対称暗号化部分は完全に機能していますが、鍵の生成が困難であることがわかりました。javax.crypto.KeyAgreement.init() メソッドで ECPublicKey オブジェクトを使用しようとすると、次のエラーが返されます。

メソッドのソース コードは次のとおりです。

証明書の PrivateKey にアクセスするにはどうすればよいですか?

**更新: **更新されたソースコード

** 編集 ** 次のコマンドと手順を使用して、問題を実証するためのテスト ファイルを作成できます。

0 投票する
1 に答える
2031 参照

java - JKS KeyStore から ECPrivateKey を読み戻す

ECPrivateKey以下のコードに示すように、JKS KeyStore から (証明書チェーンを含む) を読み戻そうとしています。

私が使用している曲線は、Sun/Oracle セキュリティ プロバイダではサポートされていないため、Bouncy Castle を使用しています。BC は、セキュリティ プロバイダーのリストの 0 の位置に挿入されます。保存は正常に機能しますが、読み戻しは失敗します。

どうやら、JKS KeyStore の実装は、セキュリティ プロバイダーのリストをループしないようです。ただし、これは BC:PKCS12およびBKS. BC を使用してキーを回復するときに KeyStore タイプとして使用する方法はありますか?JKS

上記createX509Certificateのコードで使用されるメソッドは、次のようになります。

0 投票する
1 に答える
2227 参照

php - キーペアを生成し、PHPECCで暗号化する方法

MDanterのPHPECCパッケージを使用して、公開鍵と秘密鍵のペアを生成し、メッセージを暗号化するにはどうすればよいですか?

このライブラリはここで見つかりました:https ://github.com/mdanter/phpecc しかし、チュートリアルや説明は提供されていません。

次のことを試しましたが、動作しますが、公開鍵しか持っていないため、秘密鍵の入手先と鍵の長さの変更方法がわかりません。

どんな助けでもありがたいです、ありがとう

0 投票する
1 に答える
1507 参照

cryptography - 楕円曲線の例

ECCを使用してメッセージに署名したいと思います。グーグルで検索しようとしましたが、それがどのように機能するかを理解するためのコメント付きコードを見つけることができませんでした。

数学的基礎だけでなく、それを実装する方法も説明しているドキュメントを知っていますか?

0 投票する
1 に答える
1751 参照

rsa - .NET または BouncyCastle で証明書キーの種類 (RSA と EC) を決定しますか?

現在、証明書 (および秘密鍵) を指定して byte[] に署名するルーチンがあります。ただし、証明書/キーのタイプは「RSA キーを使用した証明書」としてハードコードされています。そのコードは次のとおりです。

証明書が RSA キーを使用している場合は 1 つの方法で処理し、EC キーを使用している場合は別の方法で処理するように、より柔軟にしたいと考えています。基本的に、Crypto Service Provider のタイプは別のタイプになります。

したがって、核となる質問は次のとおりです。

  • 公開鍵と秘密鍵を含む証明書 (署名用) または公開鍵のみを含む証明書 (検証用) が与えられた場合、証明書で使用される鍵の種類をどのように判断しますか?

私は、標準の .NET ライブラリまたは BouncyCastle.Org ライブラリに対してもオープンです。

0 投票する
2 に答える
2529 参照

.net - 次のPKCS7/CMSコードで機能するECC証明書は何ですか?

PKCS#7 / CMSデータ形式標準を使用して、機密性の高いペイロードを暗号化/復号化/署名/検証しています。現在、PKCS7 / CMSとそのファインに2048ビットと4096ビットのRSA証明書(およびキー)を使用しています(以下のRSA作業コードを参照)。

ECC(特に、secp521曲線)のサポートを追加したいのですが、.NET 4.5は、NSA Suite Bの唯一のPKIアルゴリズム(256および384プライムモジュラス)であるにもかかわらず、ECCのサポートが不十分です。

質問

.NET 4.5および以下のコード(おそらくいくつかの編集を含む)と互換性のある、どのEC証明書+キーを使用できますか?私は特定の曲線を探しています。実際、OpenSSL(または他の一般的なツールまたは無料のツール)を介して証明書とキーを作成すると、非常に具体的な答えが得られます。

RSA-4096証明書+キーの動作する簡略化されたコード

ECC証明書+キーを使用する場合の例外

RSA-4096証明書+キーの動作する簡略化されたコード

ECC証明書+キーを使用する場合の例外

ECC証明書の作成

次のバッチファイルを使用してECC証明書を生成しています。その代表的なスニペットは、

追加の詳細

上記のリンクされたバッチファイルごとに証明書を(再)作成したくない場合は、次の方法で証明書をダンプします。 openssl asn1parse -in test-cert.pem -i -dump

PS:私は以前、問題を逆に解決しようとして質問をしました。BouncyCastleを介してECCPKCS7/ CMSを実行することについてですが、それはサボテンと同じくらい多くの抱擁を得ました。この質問は、はるかに異なるアプローチを追求しています...

0 投票する
5 に答える
7864 参照

ios - iOS の楕円曲線暗号

安全な通信に使用されているiPhoneアプリにECCを組み込もうとしていますが、目的のcでこれを行う方法に関する適切なライブラリ/チュートリアルを見つけるのに苦労しています. この投稿を読みました: iOS で ECC を使用する方法 しかし、ほぼ 1 年前に投稿されたもので、何の反応もありませんでした。ヒント/アドバイスをいただければ幸いです

ありがとう!

0 投票する
1 に答える
3526 参照

openssl - OpenSSL コマンド ライン secp384r1 / SHA-256 デジタル署名

OpenSSL コマンド ラインから secp384r1 / SHA-256 を使用してデジタル署名を生成することは可能ですか (バージョン 1.0.1c を使用しています)? いくつかの実験の後、以下を使用して SHA-1 で署名を生成できます。

しかし

「-ecdsa-with-SHA256」の既知のオプションを教えてくれるだけですか?

前もって感謝します

0 投票する
1 に答える
3796 参照

ios - OpenSSLとBouncyCastleから派生したECDH共有シークレットは、定数とドメインパラメータが両方で同じであるにもかかわらず、常に同じであるとは限りません。

iOSアプリとJavaサーブレットの間にAES暗号化を実装しようとしています。JavaサーブレットはBouncyCastleライブラリを使用し、iOSアプリはOpenSSLを使用します。両方の側で同じ公開/秘密鍵ペアとドメインパラメータを使用しましたが、OpenSSLによって生成された共有シークレットは、サーバー側のBouncyCastleによって生成されたものと異なる場合があります。

手順は次のとおりです。

  1. 指定されたドメインパラメータ(たとえばserver_public_keyserver_private_key)を使用してサーバーで生成された公開鍵と秘密鍵のペア
  2. server_public_keyEC_POINTXとYの形でiOSアプリに埋め込まれています
  3. 実行時に、iOSアプリは独自の公開鍵と秘密鍵のペアを生成します( client_key_curveこれはEC_KEY)、および
  4. 次に、server_public_keyとclient_key_curveに基づいてserver_public_key共有秘密( )をロードして計算し、key_agreement
  5. 次に、client_public_key(から抽出されたclient_key_curve)と、派生した共有シークレット()を使用して対称的に暗号化された暗号化メッセージがkey_agreementサーバーに送信されます。
  6. サーバー側では、共有シークレットは client_public_key、クライアント側と同じサーバーECDHパラメーターを使用して計算されます。
  7. 次に、計算されたものを使用して復号化された暗号化されたメッセージkey_agreement

ただし、復号化されたメッセージは、クライアントが送信したメッセージと常に同じであるとは限りません。

同じ手順を使用するが暗号化にBouncyCastleを使用するAndroidアプリも開発したので、OpenSSLを使用して実装されたコードの正確性を疑うので、他の人が問題の解決に役立つようにコードをここに公開します。共有シークレットを計算するために実装したものは次のとおりです

_clientPublicKey_symmetricKeyクラスレベルで宣言されます

同じ曲線(prime256v1またはsecp256r1という名前)が両側で使用されますが、結果は常に同じとは限りません。

編集1:@PeterDettmanに応えて、サーバーを公開しました–より明確にするためのサイドコード

ここclient_public_key_hexclient_public_key、それはバイトの配列に変換されます。期待される結果は、常にserver_calculatd_symmetric_key等しいということですsymmetricKey。しかし、それらは常に同じではありません。

編集2:@PeterDettmanの回答へのフィードバックとして、彼の提案を反映するためにいくつかの変更を加えました。不平等の割合は減少しますが、どちらの側でも生成された鍵共有(共有秘密)はすべての場合でまだ同じではありません。

以下のデータで不平等ケースの1つを再現することが可能です

  • 公開鍵: 02E05C058C3DF6E8D63791660D9C5EA98B5A0822AB93339B0B8815322131119C4C
  • プライベートキー: 062E8AC930BD6009CF929E51B37432498075D21C335BD00086BF68CE09933ACA
  • OpenSSLによって生成された共有シークレット:51d027264f8540e5d0fde70000000000
  • BouncyCastleによって生成された共有シークレット: 51d027264f8540e5d0fde700e5db0fab

では、実装されたコードや手順に間違いはありますか?

ありがとう