我最近开始使用LibTomCrypt库,因为它声称它是一个有良好文档的C库,可以开始使用椭圆曲线密码学。
在我的第一个小程序中,我创建了一个ECC密钥,然后我尝试打印出来。因此,我使用了ecc_make_key和ecc_export函数。
unsigned char buf[4][4096]
// I do this for the private and public Key
ecc_export(keyBufPriv[0] /*keyBufPublic[0]*/, &x, PK_PRIVATE /* PK_PUBLIC */, &keyA)
for (int i = 0; i < x; i++) {
printf(" %d ", keyBuf[0][i]);
}打印出来后,我想知道为什么公钥和私钥看起来非常相似。有一些与库一起交付的测试程序显示了相同的行为。我在测试程序中添加了一些与上面类似的printf行。
我的程序输出:

测试程序的输出:

由于私钥和公钥之间的相似之处,我在问自己,是否libtomcryp库的所有内容都能正常运行,以生成一个安全的ECC。
发布于 2015-10-13 16:05:52
从https://github.com/libtom/libtomcrypt/blob/develop/src/pk/ecc/ecc_export.c中可以看到,您正在打印的是ASN.1/DER编码数据,其中除了'k‘参数外,还包含相同的数据。
所以是的,私钥和公钥看起来很相似是很正常的。
要解码这一点,您可以安装dumpasn1,它可以解析和显示ASN.1数据。
如果您想了解有关如何使用ecc API的更多信息,可以查看https://github.com/DCIT/perl-CryptX/blob/master/lib/CryptX_主键_ECC.xs.inc。
这并不是很明显,也不是完全相同的API,因为卡雷尔的所有更改并不是全部合并到主libtomcrypt (目前为止),但它应该给您一个想法。
https://security.stackexchange.com/questions/102598
复制相似问题