2008-11-10 46 views
3

我想sign一个设备,我有64位将我的签名存储在设备中。这个设备有一个MAC地址和一些其他的细节(约30字节值),我可以打破我的签名。什么是生成64位签名的有点安全的方法?

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

在Python中的实现是一个优点。

感谢

编辑: 谢谢你的建议每一个人。这听起来好像没有安全的方式来做到这一点,只是一种对攻击者适中不方便的方式。我可能会使用加密哈希与秘密比特洗牌相结合。这与我的(非常薄弱的​​)“安全性”中的任何其他链接一样安全。

回答

5

散列函数和数字签名是很不同不同的东西。

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

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

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

编辑2:然而,如果你只需要散列函数,你可以看看FernandoMiguélez建议的elf64或RIPEMD-64。

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

0

您可以使用标准哈希函数(MD5 SHA1),并且只使用第一个或最后30个字节。
哈希函数产生的字节数量相当随意 - 这显然是空间和唯一性之间的折衷。他们使用的签名长度没有特殊之处。

编辑 - 对不起,我认为MD5返回32字节 - 它actaulyl返回16字节,但是通常写为32位数字。

+0

这个解决方案的问题是,别人很容易找出我使用的哈希算法并创建自己的签名。我正在考虑一个标准的散列,随后进行一些混洗,但它是对称的(测试签名是为了创建签名) – 2008-11-10 22:40:01

+0

您可以使用密钥散列,这种秘密与您同在。因此,HMAC-MD5或HMAC-SHA1可能会被截断。我不知道这个截断的安全性,请关注你。 – 2008-11-10 22:41:53

+0

当然,密钥散列意味着用于签名的密钥也需要与验证者一起(对称)。好吧。也许有办法做非对称密钥哈希。 :-P – 2008-11-10 22:42:55

3

基本上你需要的是一个64位的cryptographic hash funcion,比如Ripemd-64或者elf-64。然后你用加密方法加密散列,你得到了一个64位的签名。从非加密分析师的角度来看,唯一的问题是64位比典型的128位以上的散列提供了更弱的签名。尽管如此,它仍然适合您的应用程序。

相关问题