問題タブ [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.
c++ - OpenSSL で ECDSA 署名、Crypto++ で検証
Wei Dai の Crypto++ を使用して、アプリケーションで ECDSA キーペア (secp128r1) を作成します。署名と検証は期待どおりに機能します。署名の長さ (正確に 32 バイト) を最小限に抑えるために、メッセージ自体を署名に追加しません。
ただし、openssl で署名を作成すると、次のようになります。
OpenSSL は明らかにメッセージ自体を署名に入れるため、署名が大きくなります (例: 39 バイト)。を設定すると、Crypto++ で署名を検証できますCryptoPP::SignatureVerificationFilter::PUT_MESSAGE
。
結果の署名が正確に 32 バイトになるように、メッセージを署名に入れずにメッセージに署名するように OpenSSL に指示できますか?
c# - BouncyCastle を使用して C# でキー (ECPublicKeyParameters) を再作成する
次のように AsymmetricCipherKeyPair を生成します。
私の意図は、公開鍵と秘密鍵を抽出し、後で鍵を再構築することでした。最初に次のようにキーを抽出しました。
公開鍵パラメーターと秘密鍵パラメーターを使用できるように再作成するにはどうすればよいですか? この例では、秘密鍵を再作成してから、データ バイト配列に署名します。
本物のハックのように感じますが、うまく機能します。公開鍵でこれを行うにはどうすればよいですか? 変数 xxx を (ECPublicKeyParameters)aKeyPair.Public に設定すると、以下のコードを使用して署名を検証できます。xxx を直接使用することもできますが、ポイントは xxx をシリアル化してから戻すことです。そのため、このコードは実際に xxx 変数を変換し、xx に格納される新しい変数を作成します。次に、xx を使用して検証します (これは、キーを往復できることを示しています)。
秘密鍵の場合と同じように、Q.GetEncoded() からキー (xx) を作成できることを期待していました。
秘密鍵を再構築するより良い方法はありますか? ASN.1エンコーディングも使用していますか? もしそうなら、おそらく私は代わりにそれを使うべきです。
encryption - crypto:sign/4 を適切に使用するにはどうすればよいですか?
crypto:sign/4 を使用してメッセージに署名しようとしましたが、失敗しました。Erlang で ECDSA を使用してメッセージに署名する方法を誰か教えてくれませんか? ありがとう。(Erlang バージョン R16B01 を使用しています。)
モジュールコード:
しかし、テスト実行で失敗しました:
Paul のおかげで、このエラーは次の変更を行うことで修正できます。
変化する:
に:
ssl - 選択された暗号スイートが ECDSA であるが、選択されたクライアント証明書が RSA である場合の動作はどうなりますか?
TLS1.1 と TLS 1.0 の場合、次のシナリオではどのような動作になりますか?
サーバーとクライアントの両方が RSA と ECDSA を処理できると仮定すると、クライアントは暗号スイートのリストを送信し、サーバーは認証のために ECDSA を選択します。次に、サーバーはクライアント証明書を要求します。クライアントには、クライアント認証用の RSA 証明書と ECDSA 証明書の両方があります。クライアントが RSA 証明書を選択した場合。この場合はどうなりますか。
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暗号の専門家ではないので、おそらく私が犯している愚かな間違いです
c - OpenSSL C ライブラリを使用して、複数のスレッドで楕円曲線キー ペア (EC_KEY_generate_key) を生成します。
多くの ec キーペアを生成したい。プロセスを少し高速化するために、このジョブに複数のスレッドを使用するようにアプリケーションを書き直しました。以下は、各スレッドがキーを生成する方法のコード スニペットです。
一見すると、すべてが正常に機能しているように見えました。i5 520m で 4 つのスレッドを使用すると、アプリケーションは 2 倍の速さで実行されました。しかし、その後 3 ~ 4 回の E6 キー生成の後、突然セグメンテーション違反が発生します。EC_KEY_generate_key 操作をロックすると、セグメンテーション違反はなくなりますが、複数のスレッドを使用する利点はなくなります。今私の質問。メモリを破損することなく、キーの作成を複数のスレッドに分割することは可能ですか? グーグルを使っても情報が見つかりませんでした。ただし、SSL ドキュメントでは、スレッド セーフについては何も言及されていません。どんな助けでも大歓迎です。どうも
openssl - ECDSA 秘密 16 進キーを公開キーに変換する
以下の 2 行を使用して、ECDSA 秘密鍵の 16 進数を生成しています。
それらの出力は次のようになります。
次に、その 16 進キーを使用して公開 ECDSA キーを生成するにはどうすればよいでしょうか?
どんな助けでも大歓迎です。
node.js - node.js で ECDSA キーを 16 進エンコードする
APIサーバーと通信するnodejsアプリを構築しています。API サーバーは、私が行う各リクエストに、 ECDSA 曲線と特定のデータ セットのハッシュX-Signature
を使用するヘッダーが含まれていることを要求します。prime256v1
sha256
cryptoとtlsのドキュメントを調べましたが、適切なものは見つかりませんでした。で秘密鍵を正常に生成しましopenssl ecparam -name prime256v1 -genkey
たが、PEM 形式です。DER 形式のキーも生成しました。これらには両方とも、使用される曲線や、PEM の場合はコメントなどの追加のメタデータが含まれます。
これらのキーを使用して署名操作を行うことができますが、サーバーでは、16 進エンコードを使用して公開キーをアップロードする必要があります (サーバーは、要求に対して行った署名を検証できます)。
具体的には、サーバーは次の Python コードの出力のようなものを必要としています。
pubkey の出力例 (改行なし):c5bd76cd0cd948de17a31261567d219576e992d9066fe1a6bca97496dec634e2c8e06f8949773b300b9f73fabbbc7710d5d6691e96bcf3c9145e15daf6fe07b9
ノードアプリへの依存関係としてPythonを追加したくない... PEMまたはDERファイルから秘密鍵を表すバイナリデータを抽出できる方法を知っている人がいるので、それをバッファに入れて呼び出すことができますbuffer.toString('hex')
か? または、ネイティブcrypto
ライブラリを使用して ECDSA キーペアを生成する方法はありますか? または同じことをするライブラリ?
java - ECDSA で基点の順序が長い短いハッシュを処理する方法
私は CVC 証明書を使用しています (聞いたことがない場合は、X509 のふりをしてください)、brainpool256r1 曲線と SHA1 ハッシュを使用した楕円曲線署名を使用しています。バウンシーキャッスルを使用したJavaでは、次のように確認するだけです。
そして、すべてがうまくいきます。ただし、組み込みデバイスでもそれらを検証する必要があり、ウィキペディア ECDSA の記事z
によると、少なくとも左端の 256 ビットのハッシュを使用して値を取得することになっているため、問題が発生しました。しかし、SHA1 には 160 ビットしかありません。
これは bouncycastle によってどのように解決されますか?また、これを処理する方法に関する一般的な理論はありますか?