Security 以下哪种加密方法更安全?为什么?

Security 以下哪种加密方法更安全?为什么?,security,encryption,hash,hmac,Security,Encryption,Hash,Hmac,我正在编写一个程序,从用户那里获取密码短语,然后将一些加密数据写入文件。到目前为止,我提出的方法如下: 通过哈希文件名和系统时间生成128位IV,并将其写入文件开头 使用SHA256从密码短语生成256位密钥 在CBC模式下使用AES使用此密钥加密数据(以32位静态签名开始),并将其写入文件 解密时,读取IV,然后以相同的方式读取用于生成密钥的密码短语,并将前32位与签名的内容进行比较,以判断密钥是否有效 但是,我查看了中提供的(我用于进行哈希和加密的库),它们使用了更复杂的方法: 通过哈

我正在编写一个程序,从用户那里获取密码短语,然后将一些加密数据写入文件。到目前为止,我提出的方法如下:

  • 通过哈希文件名和系统时间生成128位IV,并将其写入文件开头
  • 使用SHA256从密码短语生成256位密钥
  • 在CBC模式下使用AES使用此密钥加密数据(以32位静态签名开始),并将其写入文件
解密时,读取IV,然后以相同的方式读取用于生成密钥的密码短语,并将前32位与签名的内容进行比较,以判断密钥是否有效

但是,我查看了中提供的(我用于进行哈希和加密的库),它们使用了更复杂的方法:

  • 通过哈希文件名和文件大小生成128位IV,并将其写入文件开头
  • 通过对密码短语和IV进行8192次哈希(SHA256)生成256位密钥
  • 使用此键初始化HMAC
  • 在CBC模式下使用AES使用此密钥加密数据,并将其写入文件,同时使用每个加密块更新HMAC
  • 将HMAC写入文件末尾
我得到的印象是第二种方法更安全,但我没有足够的知识来支持它,除了它看起来更复杂

  • 如果更安全,原因是什么
  • 将HMAC附加到文件末尾是否比在加密数据的开头添加签名更安全
  • 散列8192次是否增加了安全性

注意:这是一个开源项目,因此无论我使用什么方法,它都将免费提供给任何人。

第二个选项更安全

您的方法不提供任何消息完整性。这意味着攻击者可以修改部分密文,并改变纯文本解密的内容。只要他们不修改任何会改变你的32位静态签名的东西,你就会相信它。第二个方法上的HMAC提供消息完整性

通过将密钥散列8192次,它增加了额外的计算步骤,以便有人尝试强制执行密钥。假设用户将选择基于字典的密码。攻击者必须使用您的方法执行SHA256(someguess),然后尝试解密。然而,对于PolarSSL版本,他们必须计算
SHA256(SHA256(SHA256…(SHA256(someguess)))
8192次。这只会减慢攻击者的速度,但可能已经足够了(目前)


不管它值多少钱,请使用现有的库。加密很难,而且容易出现细微错误。

第二个选项更安全

您的方法不提供任何消息完整性。这意味着攻击者可以修改部分密文并更改纯文本解密的内容。只要他们不修改任何会改变32位静态签名的内容,您就可以信任它。第二个方法上的HMAC提供消息完整性

通过将密钥散列8192次,它会增加额外的计算步骤,以便有人尝试强制执行密钥。假设用户将选择基于字典的密码。使用您的方法,攻击者必须执行
SHA256(someguess)
,然后尝试解密。但是,对于PolarSSL版本,他们必须计算
SHA256(SHA256(SHA256…(SHA256(someguess))
8192次。这只会减慢攻击者的速度,但现在可能已经足够了


不管它值多少钱,请使用现有的库。加密很难,而且容易出现细微错误。

第二个选项更安全

您的方法不提供任何消息完整性。这意味着攻击者可以修改部分密文并更改纯文本解密的内容。只要他们不修改任何会改变32位静态签名的内容,您就可以信任它。第二个方法上的HMAC提供消息完整性

通过将密钥散列8192次,它会增加额外的计算步骤,以便有人尝试强制执行密钥。假设用户将选择基于字典的密码。使用您的方法,攻击者必须执行
SHA256(someguess)
,然后尝试解密。但是,对于PolarSSL版本,他们必须计算
SHA256(SHA256(SHA256…(SHA256(someguess))
8192次。这只会减慢攻击者的速度,但现在可能已经足够了


不管它值多少钱,请使用现有的库。加密很难,而且容易出现细微错误。

第二个选项更安全

您的方法不提供任何消息完整性。这意味着攻击者可以修改部分密文并更改纯文本解密的内容。只要他们不修改任何会改变32位静态签名的内容,您就可以信任它。第二个方法上的HMAC提供消息完整性

通过将密钥散列8192次,它会增加额外的计算步骤,以便有人尝试强制执行密钥。假设用户将选择基于字典的密码。使用您的方法,攻击者必须执行
SHA256(someguess)
,然后尝试解密。但是,对于PolarSSL版本,他们必须计算
SHA256(SHA256(SHA256…(SHA256(someguess))
8192次。这只会减慢攻击者的速度,但现在可能已经足够了


不管它值多少钱,请使用现有的库。密码学很难,而且容易出现细微错误。

这个问题似乎是离题的,因为它是关于加密算法的功能/安全性的讨论,而不是指南中定义的编程。如果我错了,请纠正我,不是吗