Encryption 使用与密钥相同的字符串加密字符串是否安全?

Encryption 使用与密钥相同的字符串加密字符串是否安全?,encryption,Encryption,在CBC模式下使用AES和IV(当然)对给定密钥本身进行加密是否存在安全隐患 遵守这些原则:密钥是秘密的,IV是公开的(因为这不会影响加密的安全性) 但是,潜在的攻击者将知道(因为他可以访问源代码),该字符串使用自身作为密钥进行加密 我的判断没有发现任何问题,但我正在努力确保 多谢各位 编辑-任务的详细信息,我希望我能够清楚地传递它们,我自己还不是很清楚: 我的系统使用加密在MySQL表中存储某些值。加密是在PHP代码上执行的(不是MySQL内置的AES)。显然,我需要一个密钥,它需要由系统管理

在CBC模式下使用AES和IV(当然)对给定密钥本身进行加密是否存在安全隐患

遵守这些原则:密钥是秘密的,IV是公开的(因为这不会影响加密的安全性)

但是,潜在的攻击者将知道(因为他可以访问源代码),该字符串使用自身作为密钥进行加密

我的判断没有发现任何问题,但我正在努力确保

多谢各位

编辑-任务的详细信息,我希望我能够清楚地传递它们,我自己还不是很清楚:

  • 我的系统使用加密在MySQL表中存储某些值。加密是在PHP代码上执行的(不是MySQL内置的AES)。显然,我需要一个密钥,它需要由系统管理员在系统设置时设置一次。这是至关重要的,因为在保存任何加密数据后更改密钥将使该数据不可解密

  • 管理员只需通过FTP(或其他方式)编辑PHP脚本文件,即可设置密钥。但那不是我想要的

  • 我想要的是有一个安装脚本,在这个脚本中管理员选择密钥,该密钥用自身加密并存储到一个表中。诚然,下面提出的一个有效观点是,您需要密钥来解密密钥。。。我的推理并没有深入到这一步,我正在调查将密钥本身作为密钥进行加密是否仍然是一件安全的事情

  • 如果您对以上内容有任何想法,我们将不胜感激


    谢谢。

    问题是,重点是什么?如果要解密字符串,必须已经知道该字符串;如果你不知道,你就不能解密。这是可能的,但毫无意义。首先:不是真正的安全专家

    因此,要当前获取该值,您需要存储一个秘密值,并且只能获取该秘密值,但要告诉它该秘密值?:)

    但是我可以看到你想做什么,对于一个密码系统(也许),你可以一起验证它们

    一些缺点可能是,如果黑客可以访问所有用户的密码,并且黑客有一个可以记住密码的帐户,那么他可以很容易地发现你的加密逻辑。他可以在那之后,只进行字典攻击,并获得大量密码。为此,我将至少考虑为每个记录使用一个唯一的散列。然后他仍然可以进行字典攻击,但这需要更长的时间。然后还要添加一个存储在应用程序深处的自定义哈希,这样他也需要猜测,或者访问应用程序代码

    所以我至少推荐一个密钥,它是密码+记录\u散列+共享\u散列的组合


    更新:我可以看到黑客可以访问代码,然后尝试将共享散列存储在他无法访问的位置。

    正如您在Jesper回答中的评论所述,“强度存在于加密密钥”和加密算法中。如果两者都很强,它应该是安全的。据我所知,强加密和密钥的技术薄弱环节在实现过程中(如果有的话)

    有兴趣知道您将使用此方法用于什么应用程序,如果您可以这样说的话

    编辑这并不完全回答文章标题中的问题,但我认为这与你更新的文章有关:

    假设CBC和IV具有强大且正确实现的AES,并且攻击者可以访问存储加密主密钥的表

    无论是使用自身存储加密的主密钥,还是存储主密钥的加密散列,安全性都应该没有什么区别。假设CBC模式下的加密哈希和AES都是同等安全的,那么强度取决于主密钥的强度

    如果主密钥较弱,即使攻击者无法从主密钥的加密散列中获取主密钥,他也可以通过“某些值”表获取主密钥,从而获得“某些值”。如果使用主密钥对自身进行加密,他可以通过“某些值”表或主密钥表获得主密钥

    无论您选择使用相同的密码来加密和存储主密钥,还是以加密方式散列和存储主密钥,请确保主密钥是强密钥。看起来你在写一些开源系统。我的建议是,系统根据正则表达式(或函数)检查任何可能的主密钥,如果认为该密钥不够强,则拒绝该密钥

    我希望我也正确理解了你的帖子


    免责声明:我不是安全专家,也不是安全行业的专家。

    用密钥本身加密基本上是一种特殊的散列函数。因此,您可以使用真实的密码。

    起初,我同意@Piskor的观点,“这有什么意义?”但我发现,如果您使用自身加密密码,然后存储生成的密文,您可以通过尝试使用提供的密码解密密文来验证正确的密码。这与您的用例类似吗?只是我还是您的标题和问题不同S@Greg如果他只是测试密码是否正确,那么最好存储密码的加密散列。你对用户的输入进行散列,如果散列匹配,你就知道输入的密码是正确的。@Greg:我希望这么简单,对于简单的密码检查,我只需要使用SHA散列并完成它@Ranhiru Cooray:我想只有你:)黑客可以访问加密逻辑,无论如何,他都可以看到(开放的)源代码。所以,和往常一样,加密密钥的优势在于它。我可以从您的更新中看出,在您的情况下,它实际上是一个单密钥方案,那么我看不出您的解决方案有任何问题。:)它给你的唯一能力是我