Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么此站点的ECC-DH对称密钥与OpenSSL不同_Javascript_Ruby_Openssl_Elliptic Curve_Diffie Hellman - Fatal编程技术网

Javascript 为什么此站点的ECC-DH对称密钥与OpenSSL不同

Javascript 为什么此站点的ECC-DH对称密钥与OpenSSL不同,javascript,ruby,openssl,elliptic-curve,diffie-hellman,Javascript,Ruby,Openssl,Elliptic Curve,Diffie Hellman,我正在使用Javascript库和OpenSSL Ruby计算椭圆曲线Diffie-Hellman的对称密钥 然而,从我的结果来看,OpenSSL Ruby只生成了一个密钥,这与站点上具有X和Y对称密钥的密钥不同。我很困惑,因为我的OpenSSL对称密钥与站点上的x和y都不匹配 我使用secp224r1曲线获得的对称(共享机密)密钥: Ruby OpenSSL 13506351678569412185536677668115375188438201041599149052762191980

我正在使用Javascript库和OpenSSL Ruby计算椭圆曲线Diffie-Hellman的对称密钥

然而,从我的结果来看,OpenSSL Ruby只生成了一个密钥,这与站点上具有X和Y对称密钥的密钥不同。我很困惑,因为我的OpenSSL对称密钥与站点上的x和y都不匹配

我使用
secp224r1
曲线获得的对称(共享机密)密钥:

Ruby OpenSSL

   13506351678569412185536677668115375188438201041599149052762191980775
使用站点的JS库

x: 26210366144026557327555572210249241206666031403062020900473236895358
y: 19676808255388748321882118528911150828003358302170965920476006073155
我的问题是:

1) 为什么OpenSSL Ruby只产生一个密钥,而该大小产生两个密钥:x和y(我假设x和y不会相互连接,因为与Ruby对称密钥相比,比特大小太长)

2) 有没有办法将两个对称密钥(上面的OpenSSL和JSBN-EC库)相互转换?我所有的转换尝试都失败了


我已经为用JSBN-EC库实现Ruby OpenSSL奋斗了一周。我也尝试过类似的结果(对称键不匹配)。请帮助。

我现在已经通过在客户端(JSBN-EC)和服务器OpenSSL Ruby上使用对称密钥解决了这个问题

我发现我的问题实际上在于代码本身。修复后,我在OpenSSL Ruby上得到了一个对称密钥,如下所示:

#Ruby: OpenSSL
...
...
symm_key = ec.dh_compute_key(point)
symm_key.unpack('B*').first.to_i(2) #Converts to binary, then to integer
#--> 6922380353406615622038660570577625762884344085425862813095878420328
在客户端使用JSBN-EC时

#Javascript: JSBN-EC
...
...
var curve = get_curve();
var P = new ECPointFp(curve,
curve.fromBigInteger(server_pub_key_x),
curve.fromBigInteger(server_pub_key_y));
var a = client_priv_key;
var S = P.multiply(a);

console.log('SYMM_KEY X: '+S.getX().toBigInteger().toString());
//--> 6922380353406615622038660570577625762884344085425862813095878420328
console.log('SYMM_KEY Y: '+S.getY().toBigInteger().toString());
//--> 14426877769799867628378883482085635535383864283889042780773103726343
因此,从外观上看,匹配Ruby OpenSSL值的对称密钥是JSBN-EC对称密钥的X值

6922380353406615622038660570577625762884344085425862813095878420328
==
6922380353406615622038660570577625762884344085425862813095878420328
我不知道Y值现在是什么意思。看来我不需要了。干杯!:)