gpt4 book ai didi

java - 这种基于 Java 的多密码加密格式实现安全吗?

转载 作者:行者123 更新时间:2023-12-02 06:34:27 24 4
gpt4 key购买 nike

我实现了一种加密格式(以 MultiCipherOutputStreamMultiCipherInputStream 的形式),支持将多个密码流嵌套。目标是产生一种灵活的加密文件格式,甚至可以满足最偏执的用户的需求。虽然我相信我已经收集了相当多关于如何实现此类内容的知识,但我并不是一位深入的加密专家。背景:加密格式为 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)

总体设计概念和假设:

  • 假设:所有用户共享一个密码
  • 输入参数:密码字符串、密码规范列表(例如 AES/GCM/NoPadding、128 位)
  • 密码用于使用 PBKDF2(12 字节盐,1k 轮)为每个密码派生一个对称 key
  • 对称 key 用于加密文件;它最多可以重复使用。 100 个文件(约 200 MB)
  • 密码算法是可配置的,但并非所有密码都被允许:仅限 AES 和 Twofish(128/256 位),仅限身份验证模式(目前仅限 GCM;没有 ECB、CBC 等)
  • 密码使用随机初始化 vector (IV) 进行初始化,IV 永远不会重复使用
  • 可以嵌套/链接多个密码算法(1-n 个密码),例如AES-128 和 Twofish-256
  • 密码配置、IV 和盐通过 HMAC (SHA256) 进行身份验证

来源:

最佳答案

正如 EJP 已经规定的那样,您的方案在 key 管理方面不太安全。常见的方法是使用非对称 key ,例如PGP key 分配方案。目前只需一个人泄露密码即可使该方案变得不安全,而且没有人知道谁是罪魁祸首。

此外,相同的密码用于派生 key 。现在我假设这些 key 之一用于计算 header 上的 HMAC。因此,这意味着如果字典或暴力攻击对密码可行,则可以通过 header 对 HMAC 进行检查结果。一旦找到密码,就可以从中派生出其余的 key 。

因此,尽管您有多层加密,但您的 key /密码管理方案中并没有多层。攻击可能只会集中在您的 key 管理方案上,从而使您的额外加密轮次变得多余。实际上,最初使用具有较大盐和迭代计数的 PBKDF,然后使用 KBKDF 根据 PBKDF 的结果派生 key ,实际上已经更安全了。但即便如此也无法掩盖 key 管理的问题。

所以不,这个方案并不是特别安全。

关于java - 这种基于 Java 的多密码加密格式实现安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19798184/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com