我想sign一个设备,我有64位将我的签名存储在设备中。这个设备有一个MAC地址和一些其他细节(大约30个字节)我可以破坏创建我的签名。
如果可能,我希望该方法是单向的,这样我就可以在不知道如何创建有效签名的情况下验证签名是否有效。大多数公钥 - 私钥具有此功能,但它们生成48字节长的签名(我只有8个字节)。
在Python中实现是一个优势。
由于
修改: 谢谢大家的建议。听起来似乎没有安全方式来做到这一点,只是一种对攻击者来说中度不方便的方式。我可能会使用加密哈希与秘密比特改组相结合。这将与我(非常弱)的“安全”中的任何其他链接一样安全。
答案 0 :(得分:5)
哈希函数和数字签名是非常不同的东西。
数字签名的大小取决于底层哈希函数和密钥长度。因此,理论上,您可以创建一个生成64位签名的RSA实现,但这将是一个非常弱的签名。
对于较小的密钥长度,您可能需要查看椭圆曲线加密。
编辑:是的,我是密码学家。
编辑2:然而,如果你只需要一个哈希函数,你可以看看ellf64或者RIPEMD-64,就像FernandoMiguélez所说的那样。
编辑3:进行数学计算,您需要在ECC中使用16位密钥来生成64位签名,这非常弱。对于ECC,任何小于128位的内容都可以被认为是弱的。对于RSA,这是1024位。
答案 1 :(得分:3)
基本上你需要的是64位cryptographic hash funcion,例如Ripemd-64或elf-64。然后,您使用加密方法加密哈希,并获得64位签名。唯一的问题是,从非加密分析师的角度来看,64位提供的签名比典型的128位散列要弱得多。尽管如此,它仍然适用于您的应用程序。
答案 2 :(得分:0)
您可以使用标准散列函数(MD5 SHA1)并仅使用前30个字节或最后30个字节 散列函数产生的字节数相当随意 - 显然是空间和唯一性之间的权衡。他们使用的签名长度没有什么特别之处。
编辑 - 抱歉我认为MD5返回了32bytes-它actaulyl返回16bytes但是通常写为32hex数字。