我实现了一种加密格式(以MultiCipherOutputStream和MultiCipherInputStream的形式),支持将多个密码流嵌套。目标是生成一种灵活的加密文件格式,即使是最偏执的用户也能满足。虽然我相信我已经收集了很多关于如何实现这样的知识的知识,但我不是一个深入的加密专家。背景:加密格式适用于Syncany,一种使用任意存储Dropbox的文件同步工具。
所以我的问题是:
以下是格式说明:
Length HMAC'd Description
----------------------------------------------
04 no "Sy" 0x02 0x05 (magic bytes, 4 bytes)
01 no Version (1 byte)
12 no Header HMAC salt
01 yes (in header) Cipher count (=n, 1 byte)
repeat n times:
01 yes (in header) Cipher spec ID (1 byte)
12 yes (in header) Salt for cipher i (12 bytes)
(dyn.) yes (in header) IV for cipher i (cipher specific length, 0..x)
32 no Header HMAC (32 bytes, for "HmacSHA256")
(dyn.) yes (in mode) Ciphertext (HMAC'd by mode, e.g. GCM)
一般设计概念和假设:
来源:
答案 0 :(得分:2)
您的计划在密钥管理方面不是很安全,正如EJP已经规定的那样。执行此操作的常见方法是使用非对称密钥,例如PGP密钥分配方案。目前只有一个人泄漏密码才能使这个方案不安全,没有人会知道谁是罪魁祸首。
此外,使用相同的密码来导出密钥。现在我假设其中一个键用于计算标题上的HMAC。这意味着如果字典或暴力攻击对密码是可行的,则可以通过标头针对HMAC检查结果。找到密码后,可以从中导出其余密钥。
因此,虽然您有多层加密,但您的密钥/密码管理方案中没有多个层。攻击可能只关注您的密钥管理方案,使您的额外轮次加密变得多余。实际上,使用具有较大盐和迭代计数的PBKDF实际上已经更安全了,然后使用KBKDF在PBKDF的结果上导出密钥。但即使这样也无法掩盖密钥管理的问题。
所以不,这个方案不是特别安全。