我了解 NIST 哈希函数竞赛候选者Skein带有一个内置的分组密码 Threefish,它通过使用Unique Block Iteration链接变成了流密码(对吗?)。
pyskein实现使这个特别容易使用:
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)))
但是,由于算法相对较新,我有一大堆问题最终导致“我如何正确使用它?”
- 随机数应该多长?
- 我还需要使用 PBKDF2 吗?(即这东西自己做任何关键的拉伸吗?)
- 我还需要对消息进行身份验证吗?
- 如果我不给它一个随机数会发生什么?
- 如何使用所有可选参数?
- 为什么我应该/不应该使用它?
我不是密码学家,关于 Skein 的 Threefish 部分似乎没有任何易于理解的文档。然而,这个算法看起来真的很不错。所以我希望你能帮助我。:-)