我正在尝试执行以下操作:
我有一个使用ECC生成标准Rijndael密钥的软件( NOT AES ...有区别:AES仅支持128,192和256位的密钥大小虽然Rijndael最初支持160和224位。当我查看该软件时,这首先是我的位置。)我已经能够确定它执行以下操作:
它有几种模式,但在最弱的模式下,它使用ECC secp160r1生成160位密钥(因此Rijndael和 NOT AES)。我已经能够获取“公共”值并在我自己的软件中使用私钥,并且使用openssl调用,能够生成相同的密钥并解密我需要解密的数据。
在最好的(最强/最难的,你有什么)模式中,它几乎做同样的事情,但是,它使用ECC sect571k1生成一个密钥,并且仅为它为Rijndael生成的72的前32个字节256位密钥(在这种情况下,你可以说是AES256)。
然而,在另一种模式中,它似乎也做同样的事情,但是当我尝试做我以前做过的事情时,我不会得到相同的共享秘密。
如果您使用Alice和Bob的标准定义:
da = Alice's secret key
db = Bob's secret key
Qa = Alice's public key
Qb = Bob's public key
S = Shared secret
我有:
daQb --> The public value sent from Alice.
db --> My "secret" key.
Qb --> My "public" key.
Sc --> The "correct" shared secret as computed by above program
我已经检查过我的Qb和daQb是在sect283k1曲线上。如果我使用 sect283r1,事情失败,我的点没有使用Openssl在该曲线上注册 EC_POINT,EC_KEY,EC_GROUP函数(我现在会发布代码,但我没有 它在我面前。我一做,我会试着在这里发布)。我已经能够了 正如我所说,重现其他两种模式,它似乎正常工作。然而, 在这种模式下,当我计算密钥时,我得到Sw - >计算出的“错误”共享秘密 我的节目。
所以,我的问题是:我是否有足够的信息来确定我是否可以 使用错误的数据库?我不认为我是,因为在另外两种情况下,我可以 得到数据库,它工作正常。不幸的是,我没有所述程序的源代码。我正在尝试创建一个可以处理原始工具生成的数据的工具。
我想过尝试反转Qb并将数据乘以daQb,但真正做的就是 得到我,这虽然有趣,但并没有让我采用一种方法,我可以在共享秘密上使用它,我必须确定数据库,检查我的工作。
我想到的另一件事是,可能使用与sect283k1类似的曲线,但不是sect283k1(也许是一些不同的G?我不确定是否可以在该曲线上使用另一个发生器,但我没有我认为每条曲线只有1个发生器,但也许这是错误的,也许另一个发生器会产生不同的结果......即正确的结果。)
无论如何,我尝试了几件事只是为了产生相同的错误密钥数据,大概是使用其他程序正在使用的相同数据。也许某人有一些非常优秀的EC数学知识(几乎任何一个都比我自己更好,但我希望有人可以帮我看看我缺少的东西)可以告诉我一种方法,我可以调和我得到的东西另一个工具得到了什么。
不幸的是,我可以在Rijndael键设置之前停止并查看它将被设置为什么。我可以找到密钥的那一部分并查看来自ECDH_compute_key操作的原始数据(看起来基本上是daQb和db之间的EC_POINT_mul(如果我对Diffie-Hellman密钥交换有足够的了解...我已经验证了这一点无论如何使用一些openssl调用),我知道其他一些东西,但我找不到能帮助我了解操作内容的Bignum / EC代码。所以我正在寻找另一种方法来修饰猫
感谢任何可以提供帮助的人。