在安全方面,哈希和加密的顺序有影响吗?

4

我正在使用Java实现一个密码保险箱程序。我已经编写了三重DES进行加密和SHA256进行散列。

我的问题是,如果我先对原始数据(密码)进行哈希,然后再加密它,或者先加密数据(密码),然后再哈希加密后的数据,这样做是否会有任何区别?我最关心的是,这样做会不会在安全方面造成严重改变。

谢谢


1
这可能是一个适合安全堆栈交换的好问题。 - oleksii
@oleksii 谢谢,我也会在那里尝试我的运气。 - Ekin
由于这是一个密码保险库,我假设您正在尝试以纯文本形式获取密码?在这种情况下,您想通过哈希实现什么目标? - Peter Elliott
@PeterElliott 问题是,密码存储在一个XML文件中(该文件存储在本地),而XML文件中保留了加密数据。哈希(MAC)仅用于确保密码是否已被攻击者更改。 - Ekin
一个原始的哈希算法不是MAC方案,并且不能提供MAC的安全性。另外,为什么你要使用3DES而不是AES? - Peter Elliott
1个回答

2
根据您的评论,您不想仅使用哈希作为消息认证码。有基于哈希的MAC(适当地称为HMACs),适用于此应用程序。在这种情况下,您可能需要使用HMAC-SHA256。还要记住,您将需要一个单独的密钥用于您的MAC(对于加密和MACs使用相同的密钥是大忌)。
但是关于您的问题本身,您的问题归结为Encrypt-then-MAC vs MAC-then-Encrypt。根据Crypto.SE answer,最好的做法是Encrypt-then-MAC,只要您确保MAC涵盖了与密文有关的所有内容,包括IV和算法标识符(如果允许使用除3DES之外的加密算法)。这样可以获得密文和明文的完整性,并且无需解密即可验证明文。

你绝对正确,使用不同的密钥进行加密和MAC。也许我会采纳你的建议,使用AES来提高性能。此外,我刚刚发现另一个链接Encrypt-then-MAC,我认为“先加密再MAC”的情况似乎适合我的情况。谢谢! - Ekin

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