我理解NIST哈希函数竞争候选Skein附带了一个内置的块密码,Threefish,它通过使用唯一的块迭代链转换成流密码(对吗?)
吡嗪实现使这一特殊情况更易于使用:
import os
import skein
data = b'Hello World!'
key = b'thisisasecret'
nonce = os.urandom(32)
c1 = skein.StreamCipher(key, nonce=nonce, hasher=skein.skein1024)
c2 = skein.StreamCipher(key, nonce=nonce, hasher=skein.skein1024)
print(c2.decrypt(c1.encrypt(data)))但是,由于该算法相对较新,我有一大堆问题,最终导致“我如何正确地使用它?”
我不是一个密码学家,而且Skein的Threefish部分的文档似乎并不容易理解。但是这个算法看起来真的很不错。所以我希望你能帮我。:-)
发布于 2011-07-13 15:36:35
您还不应该部署基于Skein的软件。
在内部,Skein是围绕自定义块密码( Threefish )构建的,它可以用作流密码或MAC,但是还没有人真正地研究Threefish的固有安全性,只是因为它如何提供一个好的散列函数,而且即使是在使用时,也还没有得出结论。需要数年的仔细研究才能确定给定的算法“看起来非常安全”。一个一刀切的原语具有巨大的吸引力,特别是对于代码空间有限的嵌入式系统来说,但要想正式认为Threefish是安全的,还需要几年的时间。粗略地说,如果Skein被选为SHA-3 (到2012年底),那么Threefish很可能会作为加密原语开始被调查,在这种情况下,它可能在2016年被宣布为“似乎不错”。你得有耐心。
你需要等待的另一个原因是Skein和/或Threefish可能仍然会受到修改。定期,SHA-3候选人可以“调整”(根据先前的分析设计的轻微修改)。在SHA-3比赛的第二轮比赛中扭动了扭动,然后又在第三轮调整了.哪个版本是用吡咯烷酮实现的?这里有互操作性噩梦的空间。
至于你的其他问题:
当然,pyskein可能会添加任意的限制,所以我建议您查看pyskein文档,如果它存在的话。
发布于 2011-07-15 06:20:15
我完全同意托马斯的观点。你现在不应该用Skein。
相反,我建议您在加密-然后身份验证模式中使用AES-CBC或AES-CTR加密以及CMAC消息身份验证代码。
https://security.stackexchange.com/questions/5260
复制相似问题