問題タブ [ecdsa]

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 投票する
3 に答える
4403 参照

c++ - OpenSSL で ECDSA 署名、Crypto++ で検証

Wei Dai の Crypto++ を使用して、アプリケーションで ECDSA キーペア (secp128r1) を作成します。署名と検証は期待どおりに機能します。署名の長さ (正確に 32 バイト) を最小限に抑えるために、メッセージ自体を署名に追加しません。

ただし、openssl で署名を作成すると、次のようになります。

OpenSSL は明らかにメッセージ自体を署名に入れるため、署名が大きくなります (例: 39 バイト)。を設定すると、Crypto++ で署名を検証できますCryptoPP::SignatureVerificationFilter::PUT_MESSAGE

結果の署名が正確に 32 バイトになるように、メッセージを署名に入れずにメッセージに署名するように OpenSSL に指示できますか?

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

c# - BouncyCastle を使用して C# でキー (ECPublicKeyParameters) を再作成する

次のように AsymmetricCipherKeyPair を生成します。

私の意図は、公開鍵と秘密鍵を抽出し、後で鍵を再構築することでした。最初に次のようにキーを抽出しました。

公開鍵パラメーターと秘密鍵パラメーターを使用できるように再作成するにはどうすればよいですか? この例では、秘密鍵を再作成してから、データ バイト配列に署名します。

本物のハックのように感じますが、うまく機能します。公開鍵でこれを行うにはどうすればよいですか? 変数 xxx を (ECPublicKeyParameters)aKeyPair.Public に設定すると、以下のコードを使用して署名を検証できます。xxx を直接使用することもできますが、ポイントは xxx をシリアル化してから戻すことです。そのため、このコードは実際に xxx 変数を変換し、xx に格納される新しい変数を作成します。次に、xx を使用して検証します (これは、キーを往復できることを示しています)。

秘密鍵の場合と同じように、Q.GetEncoded() からキー (xx) を作成できることを期待していました。

秘密鍵を再構築するより良い方法はありますか? ASN.1エンコーディングも使用していますか? もしそうなら、おそらく私は代わりにそれを使うべきです。

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

encryption - crypto:sign/4 を適切に使用するにはどうすればよいですか?

crypto:sign/4 を使用してメッセージに署名しようとしましたが、失敗しました。Erlang で ECDSA を使用してメッセージに署名する方法を誰か教えてくれませんか? ありがとう。(Erlang バージョン R16B01 を使用しています。)

モジュールコード:

しかし、テスト実行で失敗しました:


Paul のおかげで、このエラーは次の変更を行うことで修正できます。

変化する:

に:

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

ssl - 選択された暗号スイートが ECDSA であるが、選択されたクライアント証明書が RSA である場合の動作はどうなりますか?

TLS1.1 と TLS 1.0 の場合、次のシナリオではどのような動作になりますか?

サーバーとクライアントの両方が RSA と ECDSA を処理できると仮定すると、クライアントは暗号スイートのリストを送信し、サーバーは認証のために ECDSA を選択します。次に、サーバーはクライアント証明書を要求します。クライアントには、クライアント認証用の RSA 証明書と ECDSA 証明書の両方があります。クライアントが RSA 証明書を選択した場合。この場合はどうなりますか。

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

encryption - (現在のプログラムで使用されている CPU 時間のピコ秒数 + クロック時間) は、疑似乱数ジェネレーターの暗号解読の影響を受けないシードですか?

Haskell でこのECDSA実装を使用しようとしています。15 行目を見ると、k 値がグローバル乱数ジェネレーターを使用するrandomRIOを使用していることがわかります。そのゲッターは、シードを作成するmkStdRNGを使用する theStdGenを使用します。

(壁時計の現在の秒数) * 12345 + (壁時計の現在のピコ秒) + (現在のプログラムで使用されている CPU 時間のピコ秒数)

これは、数十億ドルの価値があるデータに署名するのに十分ですか?

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

java - RFC テスト ベクトルに従って Java で ECDSA 署名を計算する

ikev2 プロトコルに関連するプログラムのテスト ハーネスを Java で作成しています。この一環として、ECDSA 署名を計算できるようにする必要があります (具体的には NIST P-256 曲線を使用)。

RFC 4754は、IKEv2 での ECDSA の使用について説明し、一連のテスト ベクトルを提供します (必要な p256 曲線を含む)。

次のコードを使用して、Java の ECDSA 署名実装を介して ECDSA-256 テスト ベクトル値 ( RFC のセクション 8.1 ) を実行しようとしています。

結果は次のようになります。

CB28E099 9B9C7715 FD0A80D8 E47A7707 9716CBBF 917DD72E 97566EA1 C066957C 86FA3BB4 E26CAD5B F90B7F81 899256CE 7594BB1E A0C89212 748BFF3B 3D5B0315

代わりに私は得る:

30460221 00dd9131 edeb5efd c5e718df c8a7ab2d 5532b85b 7d4c012a e5a4e90c 3b824ab5 d7022100 9a8a2b12 9e10a2ff 7066ff79 89aa73d5 ba37c868 8e 7d7fa6e 2e 613

長さの違いは、署名の Java ASN.1 エンコードが原因であることを知っています。しかし、残りの部分は完全に間違っており、その理由がわかりません。

どんな助けやアドバイスも大歓迎です!

PS私はECDSAまたはJava暗号の専門家ではないので、おそらく私が犯している愚かな間違いです

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

c - OpenSSL C ライブラリを使用して、複数のスレッドで楕円曲線キー ペア (EC_KEY_generate_key) を生成します。

多くの ec キーペアを生成したい。プロセスを少し高速化するために、このジョブに複数のスレッドを使用するようにアプリケーションを書き直しました。以下は、各スレッドがキーを生成する方法のコード スニペットです。

一見すると、すべてが正常に機能しているように見えました。i5 520m で 4 つのスレッドを使用すると、アプリケーションは 2 倍の速さで実行されました。しかし、その後 3 ~ 4 回の E6 キー生成の後、突然セグメンテーション違反が発生します。EC_KEY_generate_key 操作をロックすると、セグメンテーション違反はなくなりますが、複数のスレッドを使用する利点はなくなります。今私の質問。メモリを破損することなく、キーの作成を複数のスレッドに分割することは可能ですか? グーグルを使っても情報が見つかりませんでした。ただし、SSL ドキュメントでは、スレッド セーフについては何も言及されていません。どんな助けでも大歓迎です。どうも

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

openssl - ECDSA 秘密 16 進キーを公開キーに変換する

以下の 2 行を使用して、ECDSA 秘密鍵の 16 進数を生成しています。

それらの出力は次のようになります。

次に、その 16 進キーを使用して公開 ECDSA キーを生成するにはどうすればよいでしょうか?

どんな助けでも大歓迎です。

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

node.js - node.js で ECDSA キーを 16 進エンコードする

APIサーバーと通信するnodejsアプリを構築しています。API サーバーは、私が行う各リクエストに、 ECDSA 曲線と特定のデータ セットのハッシュX-Signatureを使用するヘッダーが含まれていることを要求します。prime256v1sha256

cryptotlsのドキュメントを調べましたが、適切なものは見つかりませんでした。で秘密鍵を正常に生成しましopenssl ecparam -name prime256v1 -genkeyたが、PEM 形式です。DER 形式のキーも生成しました。これらには両方とも、使用される曲線や、PEM の場合はコメントなどの追加のメタデータが含まれます。

これらのキーを使用して署名操作を行うことができますが、サーバーでは、16 進エンコードを使用して公開キーをアップロードする必要があります (サーバーは、要求に対して行った署名を検証できます)。

具体的には、サーバーは次の Python コードの出力のようなものを必要としています。

pubkey の出力例 (改行なし):c5bd76cd0cd948de17a31261567d219576e992d9066fe1a6bca97496dec634e2c8e06f8949773b300b9f73fabbbc7710d5d6691e96bcf3c9145e15daf6fe07b9

ノードアプリへの依存関係としてPythonを追加したくない... PEMまたはDERファイルから秘密鍵を表すバイナリデータを抽出できる方法を知っている人がいるので、それをバッファに入れて呼び出すことができますbuffer.toString('hex')か? または、ネイティブcryptoライブラリを使用して ECDSA キーペアを生成する方法はありますか? または同じことをするライブラリ?

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

java - ECDSA で基点の順序が長い短いハッシュを処理する方法

私は CVC 証明書を使用しています (聞いたことがない場合は、X509 のふりをしてください)、brainpool256r1 曲線と SHA1 ハッシュを使用した楕円曲線署名を使用しています。バウンシーキャッスルを使用したJavaでは、次のように確認するだけです。

そして、すべてがうまくいきます。ただし、組み込みデバイスでもそれらを検証する必要があり、ウィキペディア ECDSA の記事z によると、少なくとも左端の 256 ビットのハッシュを使用して値を取得することになっているため、問題が発生しました。しかし、SHA1 には 160 ビットしかありません。

これは bouncycastle によってどのように解決されますか?また、これを処理する方法に関する一般的な理論はありますか?