問題タブ [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.
cryptography - 楕円曲線上のJacobian座標系を使用して点の加算を計算する方法
私は楕円曲線暗号の小さなプロジェクトを書いています。このプログラムは、アフィン座標系を使用するとうまく機能します。つまり、各点は2つの座標(x'、y')で表されます。
ここで、アフィン座標系を、各点が3つの座標(x、y、z)、x'= x /z²、y' =y/z³で表されるジャコビアン座標系に置き換えようとしています。
アフィン座標をジャコビアン座標に変換する方法を知りたい**。一部のチュートリアルでは、次の式を使用します。(x、y)=(x、y、1)これは、z座標が常に1に設定されることを意味します。しかし、それが正しいかどうかはわかりません。
次に、楕円曲線上の点の追加について、P(x1、y1、z1)+ Q(x2、y2、z2)= R(x3、y3、z3)を計算します。プログラムでは次の式を使用しました。
しかし、プログラムをテストすると、たとえば(-2854978200、-5344897546224,578)などの負の座標が得られます。そして、結果を式(x'= x /z²、y' = y /z³)を使用してアフィン座標系に変換しようとすると、(-8545、-27679)が得られ、実際にはx座標は-8545.689です。 ...ジャコビアンのx座標はz²で割り切れません。
座標が整数でない場合はどうすればよいですか?そして、彼らが否定的であるならば?曲線のフィールドサイズでMODを試みましたが、結果も正しくありません。
したがって、ジャコビアン座標を使用するポイント(x,y,1)
は正しいですが、一意ではありません。満足するすべてのポイント(a^2.x,a^3.y,a)
は同等です。そして私のプログラムでは、曲線は素体で定義されているので、計算するときにu1, u2, s1, s2 ...
各変数にMOD pを適用する必要がありますか?
そして、最終結果をアフィン座標に戻すために、たとえばx座標、実際には除算ではなく、モジュラ逆数ですか?たとえば、私の曲線は有限の素体で定義されてp=11
おり、ジャコビアン座標を使用してポイントがあり、(15,3,2)
ジャコビアンx座標をアフィンx座標に変換するには、を計算する必要があります。したがって、アフィネx2^2 = 4 => x = 4^-1 mod p => x = 3
座標15.3 mod p = 1
は1です。 ?
ジャコビアン座標の目的は、加算中の分割を回避することです。しかし、Thomas Porninが言ったように、私たちが計算するとき、P1 + P2 = P3
処理するいくつかの特別なケースがあります。
- P1とP2は両方とも無限です:
P3=infinite
。 - P1は無限です:
P3=P2
。 - P2は無限です:
P3=P1
。 - P1とP2のx座標は同じですが、y座標が異なるか、両方のy座標が0に等しくなります
P3=infinite
。 - P1とP2のx座標は異なります
Addition formula
。 - P1とP2の座標は同じです:
Doubling formula
。
そして、これが私のC関数のプロトタイプです。
point
jacobian
アフィン座標系およびジャコビアン系で定義された点を表す構造体です。
問題は、これらの特殊なケース、特に4番目のケースを処理するときに、両方のポイントをアフィン座標に変換し直しているか、それらの座標を比較できないため、除算を計算する必要があることです。
android - SMSを介した公開鍵の送信
私は現在、ECDHとBouncyCastleを使用してAndroid用の暗号化アプリを開発しようとしています。これまでに実装したのは、以下のコードに従って、アプリケーションで公開鍵と秘密鍵を生成することです。
次のタスクは、SMSを介して公開鍵を送信することです。私は仕事を成し遂げるためにどのような方法を使うことができるかを知りたいです。現在、生成されたキーを文字列に割り当てて試してから、文字列を送信していますが、それでも正しく機能させることができません。
どんな援助も大歓迎です
ありがとう、そしてハッピーホリデー!
elliptic-curve - ECCを利用した乱数と秘密鍵の付加
ECC を使用してキーを生成しました。乱数と秘密鍵を追加する必要がありますx=r+s
。これが私のコードです:
次に、追加する必要がありx=numNoRange+privkey
ます。しかし、追加できませんでした。新しいアイデアの提案はありますか?
.net - BouncyCastle から EC 秘密鍵をエクスポートし、CngKey または ECDsaCng にインポートしますか?
BouncyCastle を使用して楕円曲線 DSA 署名のキー ペアを作成し、RFC4050 に準拠した XMLString を使用して公開キーを ECDsaCng にインポートすることができました。今、秘密鍵も移動したいのですが、解決策を見つけることができませんでした。私が得た最も近いものは、CngKey.Import を使用することです。
CngKey.Import は PKCS#8 形式をサポートしているため、キーを有効な pkcs8 に入れることができれば機能します。残念ながら、次のコードはまったく機能しません。
これにより例外がスローされます。
System.Security.Cryptography.CryptographicException: ASN1 の不適切なタグ値が見つかりました。
私が知る限り、GetDerEncoded は有効な Pkcs8 blob を返すはずです。
BouncyCastle で作成された秘密鍵を ECDsaCng オブジェクトで使用するにはどうすればよいですか?
java - オブジェクトJavaから値を取得する方法
オブジェクトの値にアクセスする方法を知る必要があります..たとえば、私のコードで `
int y=numNoRange+p;// ここで、p は秘密鍵の値です.ここに数値とともに、秘密鍵の値を追加する必要がありますが、秘密はオブジェクトであるため、オブジェクトから値を取得する方法を知る必要があります..ありがとう..
java - Java でのペアリング ベースの暗号化に適したライブラリ
ペアリングベースの暗号化 (PBC) を実行できる優れたライブラリを探しています。私が見つけたのはjPBCです
他の人は何を使用しましたか?そして彼らの経験?
アイデアは、標準的なペアリング ( Weil、Tate ) といくつかの新しい提案を使用して、数学で手を汚さずにアルゴリズムのパフォーマンスをテストすることです。
opengl - SVGファイルの変形。ベジェ曲線?
SVGファイルを持っています。このファイルは漫画のキャラクター(2Dキャラクター)の概要を示しています。私の質問は、ユーザーがアウトラインを操作して変形できるプログラムを作成できるかどうかです。例として、マウスでキャラクターの腕の輪郭を引っ張ると、腕が大きくなります。
Bezier Curves and Elliptical Arcsが解決策だと思います。また、OPENGLを使用するのであれば、もっと柔軟に対応できるのではないかと思います。
java - flexiProvider の異なる BrainpoolP521r1 パラメータ。なんで?
flexiProvider を使用して ECC 公開秘密鍵ペアを生成しようとしています。flexiProvider のbrainpoolP521r1 の p や q などのパラメータの値が、多くのサイトで指定されている値と異なることに気付きました。指定された値は Q= AADD です....しかし、私が得るのは Q=8948 です... flexiProvider が指定された値を使用しない理由と、異なる値を持つことがセキュリティに影響するかどうかについての考え。私はECCを初めて使用します。どんな助けでも大歓迎です。
node.js - 楕円曲線鍵を使用してサーバーとクライアントを作成するときに Node JS TLS パスフレーズと暗号オプションを使用する (共有暗号スイート エラーなし)
この質問に関連して、node.js で TLS サーバーを起動して、OpenSSL で作成したものを反映しようとしています。コマンド ラインから OpenSSL を使用してクライアントとサーバーをテストしたところ、正常に接続されました。サーバーを node.js に移植しようとすると (さらに OpenSSL クライアントを使用して接続しようとすると)、「共有暗号がありません」というエラーが表示されます。passphrase
オプションを使用するときに何か特別なことをする必要があるかどうか疑問に思っていますtls.createServer()
以下は、サーバーとクライアントのそれぞれで成功した OpenSSL コマンドです。passphrase.txt ファイルには、パスフレーズである単一の行が含まれていることに注意してください。
の追加引数を使用してクライアントおよび/またはサーバーの暗号を指定すると、正常に接続することもできます-cipher 'ECDHE-ECDSA-AES128-GCM-SHA256'
。以前の質問で説明したように、openssl ecparam
作成された CA で生成および署名された楕円曲線キーを使用しています。openssl ca
node.js で記述されたサーバー コードは次のようになります。
上記のコードを呼び出してnode tlsServer.js
、コマンド ラインで OpenSSL クライアントに接続しようとすると、次のメッセージが表示されます。
サーバ:
クライアント:
ノード v0.6.15 を使用しています。また、に送信されたオプション リストのciphers
、requestCert
、およびのコメントを外しても、エラーは変わりません。クライアントの node.js 接続もあり、ノード サーバーに接続しようとするとソケット ハングアップ コード ECONNRESET が表示され、OpenSSL サーバーに接続しようとすると次のエラーが表示されます。rejectUnauthorized
tls.createServer()
あなたの助けとアイデアを前もってありがとう!