AES算法(密码长度)- AES密码 + 额外的PIN码

4
在我的业务场景中(基本上是一个云文件共享应用程序),我有以下情况:
1. 用户上传文件到文件夹。 2. 检查文件夹是否受到PIN保护。 3. 如果文件夹没有受到PIN保护,则使用存储在应用程序中的预定义密码和存储在数据库中的IV密钥对文件进行加密。 4. 如果文件夹受到PIN保护,则使用预定义的密码+PIN值+存储在数据库中的IV密钥对文件进行加密。
问题是AES具有有限的密码长度,当最大密钥大小(16、24、32字节)超过时会变成无效的密钥长度。我的主要问题是如何在保持安全性的同时实现类似的加密。
目前,文件夹的PIN长度没有限制,但似乎应该将其限制为至少AES密钥通行证的最大长度。稍微改进一下可以使用RijndaelManaged,在通行证长度方面具有更多的灵活性。
如果有任何建议,将不胜感激。
注意:我认为代码不会增加问题的价值,但如果有人不同意,请让我知道,我会添加它。
2个回答

2

我不完全清楚您的情境,但总的来说,答案就是使用您拥有的“秘密”并将其哈希以获得相同的AES密钥长度。假设您使用SHA256来哈希这些秘密,那么您的应用程序可以使用AES-256,无论使用哪些数据来生成密钥。

再次强调,生成密钥的数据必须具有足够的熵并且必须保密。尤其是在使用密码时,您应该使用安全的密码到密钥派生方案,如PKCS#5,而不是自己构建一些东西...


谢谢您的回答!我想跳过任何哈希处理,因为考虑到PIN本身已经被哈希(PBKDF2),并且这是第一道防线,所以在这种情况下不认为需要。第二道防线是加密文件,其中一些使用通行证+ PIN进行加密。通过这样做,我不必保存额外的哈希值,唯一要做的就是使用用户提供的通行证+ PIN解密文件。通行证嵌入到应用程序中。我应该将其视为安全风险吗? - wegelagerer

2

关键派生函数将创建一个控制长度的密钥,如果派生密钥比需要的长,只需截断即可。

此外,加密IV并不被视为机密,并且通常只是附加在加密数据前面。很多时候,关键派生盐以及迭代次数也会附加在加密数据前面。为了获得良好的安全性,最好使用经过充分验证的方法。


谢谢!这正是我想听到的 - 截断是一种安全的操作! - wegelagerer
1
一系列随机字节基本上就是哈希或密钥派生函数产生的内容,它们都是同等随机的,没有哪一个比其他的“更好”。因此,只需选择其中任意一段范围即可,截断是一种简单的方法。 - zaph

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接