3

我想签署一个设备,我有 64 位来存储我的签名在设备中。该设备有一个 MAC 地址和一些其他详细信息(大约 30 个字节),我可以修改它来创建我的签名。

如果可能的话,我希望该方法是单向的,这样我就可以在不知道如何创建有效签名的情况下验证签名是否有效。大多数公钥-私钥都具有此功能,但它们生成的签名长度为 48 个字节(我只有 8 个字节)。

在 Python 中实现是一个加号。

谢谢

编辑:感谢大家的建议。听起来没有安全的方法可以做到这一点,只有一种对攻击者来说不太方便的方法。我可能会使用加密哈希和秘密比特洗牌。这将与我的(非常弱的)“安全性”中的任何其他链接一样安全。

4

3 回答 3

5

哈希函数和数字签名是非常不同的东西。

数字签名的大小取决于底层散列函数和密钥长度。所以理论上,您可以创建一个生成 64 位签名的 RSA 实现,但这将是一个非常弱的签名。

对于较小的密钥长度,您可能需要查看椭圆曲线密码学。

编辑:是的,我是密码学家。

编辑 2:但是,如果您只需要一个哈希函数,您可以按照 Fernando Miguélez 的建议查看 elf64 或 RIPEMD-64。

编辑 3:做数学,你需要在 ECC 中使用 16 位密钥来生成 64 位签名,这是非常弱的。对于 ECC,任何小于 128 位的都可以被认为是弱的。对于 RSA,这是 1024 位。

于 2008-11-10T23:25:41.150 回答
3

基本上你需要的是一个 64 位加密散列函数,例如 Ripemd-64 或 elf-64。然后你用加密方法加密散列,你得到一个 64 位的签名。唯一的问题是,从非密码分析师的角度来看,64 位提供的签名比典型的超过 128 位散列要弱得多。尽管如此,它仍然可能适合您的应用程序。

于 2008-11-10T22:45:07.860 回答
0

您可以只使用标准散列函数 (MD5 SHA1),并且只使用前 30 个字节或后 30 个字节。
散列函数生成的字节数是相当随意的——这显然是空间和唯一性之间的权衡。他们使用的签名长度没有什么特别之处。

编辑 - 抱歉,我认为 MD5 返回 32 字节 - 它实际返回 16 字节,但通常写为 32 十六进制数字。

于 2008-11-10T22:37:50.980 回答