【问题标题】:AES algorithm (pass key length) - AES pass key + addtional PIN codeAES 算法(密码长度) - AES 密码 + 额外的 PIN 码
【发布时间】:2016-02-25 10:38:14
【问题描述】:

在我的业务场景中(基本上是一个云文件共享应用程序)我有以下案例:

  1. 用户上传文件到文件夹

  2. 正在检查文件夹是否受 PIN 保护

  3. 1) 如果它没有 PIN 保护,则使用存储在应用程序中的预定义密钥 + 存储在 数据库。

    2) 如果它是PIN 保护,使用预定义的密码 + PIN 值 + 存储在数据库中的 IV 密钥加密文件

问题在于,当超过最大密钥大小(16、24、32 字节)时,具有有限密钥长度的 AES 会获得无效的密钥长度。我的主要问题是如何在保持安全性的同时实现类似的目标。

目前文件夹 PIN 长度不受限制,但似乎我应该将其限制为至少 AES 密钥传递的最大长度。使用 RijndaelManaged 可能会稍有改进,我在密码长度方面有更多的灵活性。

任何建议都将不胜感激。

注意:我认为代码不会为问题增加任何价值,但如果有人不同意,请告诉我,我会添加。

【问题讨论】:

    标签: c# encryption aes rijndaelmanaged


    【解决方案1】:

    密钥派生函数将创建一个长度受控的密钥,如果派生的密钥比需要的长,只需截断它。

    此外,加密 IV 不被视为机密,通常只是添加到加密数据的前面。许多密钥派生盐以及迭代计数也预先添加到加密数据中。为了获得良好的安全性,最好使用经过严格审查的方法。

    【讨论】:

    • 谢谢!正是我想听到的 - 截断是一件安全的事情!
    • 一系列随机字节本质上是散列或密钥派生函数产生的,它们都是同样随机的,没有一个比其他的“更好”。所以只需选择它们中的任何范围,截断是一种简单的方法。
    【解决方案2】:

    您的情况对我来说并不完全清楚,但总的来说,答案是使用您所拥有的作为“秘密”并对这些进行哈希处理以始终获得相同的 AES 密钥长度。假设您使用 SHA256 对密钥进行哈希处理,那么无论您使用哪种数据生成密钥,您的应用程序都可以使用 AES-256。

    同样,产生密钥的数据必须有足够的熵并且必须保密。特别是在使用密码时,您应该使用安全密码来生成密钥派生方案,例如 PKCS#5,而不是自己构建一些东西...

    【讨论】:

    • 感谢您的回答!我想跳过任何类型的散列,因为考虑到 PIN 本身已经散列(PBKDF2)并且这是第一道防线,我认为在这种情况下不需要它。第二道防线是加密文件,其中一些是使用密码+PIN加密的。通过这样做,我不必保存额外的哈希值,我唯一要做的就是使用用户提供的密钥 + PIN 来解密文件。密钥嵌入到应用程序中。我应该将其视为安全风险吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-07
    • 1970-01-01
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-31
    相关资源
    最近更新 更多