在CBC模式下使用AES加密给定密钥并使用IV(当然)是否有任何安全方面的缺点?
原则得到尊重:密钥是秘密的,IV是公开的(因为这不会影响加密的安全性)。
但是,潜在的攻击者会知道(因为他可以访问源代码),该字符串是使用自身作为密钥加密的。
我的判断没有看到任何问题,但我正在努力确保。
谢谢。
编辑 - 任务的细节,我希望我能够清楚地传递它们,对我自己来说还不是很清楚:
我的系统使用加密在MySQL表中存储某些值。加密是在PHP代码(而不是MySQL内置AES)上执行的。显然,我需要一个密钥,需要在系统设置时由系统管理员设置,只需ONCE。这一点至关重要,因为在保存任何加密数据后更改密钥会使该数据无法解密。
管理员只需通过FTP(或其他)编辑PHP脚本文件即可设置密钥。但那不是我想要的。
我想要的是一个安装脚本,在此期间,管理员会选择一个密钥,该密钥会自行加密并存储到表中。当然,下面提到的一个有效点是,你需要密钥来解密密钥...我的理由并没有得到很多,我正处于调查是否加密密钥的阶段因为关键仍然是一件安全的事情。
如果您对上述内容有任何想法,我们将不胜感激。
感谢。
答案 0 :(得分:12)
问题是,有什么意义?如果要解密字符串,则必须已知该字符串;如果你不知道它,你就不应该解密它。这可能是毫无意义的恕我直言。
答案 1 :(得分:5)
使用自身加密密钥基本上是一种ad-hoc哈希函数。所以你可以使用真实的。
答案 2 :(得分:2)
正如您在Jesper的回答中所提到的那样,“强度存在于加密密钥中”和加密算法中。如果两者都很强大,那应该是安全的。据我所知,强大的加密和密钥的技术薄弱环节正在实施中,如果有的话。
如果您能说出来,有兴趣知道您将使用此方法的应用程序。
编辑这不完全回答帖子标题中的问题,但我认为这与您更新的帖子有关:
假设使用CBC和IV强大且正确实施的AES,并且攻击者可以访问存储加密主密钥的表。
无论您是使用自身存储加密的主密钥还是存储主密钥的加密哈希,都应该没有什么安全区别。假设CBC模式下的加密散列和AES同样安全,强度在于主密钥的强度。
如果主密钥很弱,即使攻击者无法从主密钥的加密哈希中获取主密钥,他也能够通过“某些值”获取主密钥,从而获得“特定值” “表。如果使用主密钥加密自身,他可以通过“特定值”表或主密钥表获取主密钥。
无论您是选择使用相同的密码来加密和存储主密钥,还是加密哈希并存储主密钥,请确保主密钥是强大的。好像你在写一些开源系统。我的建议是你的系统检查任何潜在的主密钥与正则表达式(或函数),并拒绝该密钥,如果它被认为不够强。
我希望我也能正确理解你的帖子。
免责声明:我不是安全专家,也不是安全行业。
答案 3 :(得分:1)
第一:不是真正的安全专家
所以为了获得这个,你想存储一个秘密值,只能获得秘密值,但告诉它秘密值? :)
但是我可以看到你想要的地方,对于密码系统(也许),你可以一起验证它们。
一些缺点可能是,如果黑客能够访问所有用户的密码,并且黑客拥有一个他能记住的密码帐户,那么他就可以非常轻松地发现您的加密逻辑。他可以在那之后,进行字典攻击,并获得大量密码。为此,我至少会考虑为每条记录使用唯一的哈希值。然后他仍然可以进行字典攻击,但这会占用更长的时间。然后还添加一个存储在应用程序深处的自定义哈希,因此他也需要猜测,或者可以访问应用程序代码。
所以我至少会推荐一个密码复合密码+ record_hash + shared_hash
更新:我可以看到黑客可以访问代码,然后尝试将shared_hash存储到他无法访问的位置。