Encryption 对称加密-使用一个对称密钥加密另一个密钥是不安全的,还是需要使用非对称密钥

Encryption 对称加密-使用一个对称密钥加密另一个密钥是不安全的,还是需要使用非对称密钥,encryption,encryption-symmetric,Encryption,Encryption Symmetric,我试图在我的PHP应用程序中添加一个混合加密方案,我所说的混合是指数据库中的每个记录都由其唯一的对称密钥加密,而每个对称密钥都由未存储在数据库中的共享私钥加密。对称密钥是256位AES密钥,私钥是2048位RSA密钥 混合加密方案可以工作,但解密对称密钥会给应用程序带来瓶颈-解密一个密钥是可以的,但是如果我需要从数据库检索100条记录并解密其中的一个字段,脚本执行时间将成为一个真正的问题,因为解密对称密钥会增加开销。我在OpenSSL中使用speed工具进行的不科学测试表明,从1024位RSA密

我试图在我的PHP应用程序中添加一个混合加密方案,我所说的混合是指数据库中的每个记录都由其唯一的对称密钥加密,而每个对称密钥都由未存储在数据库中的共享私钥加密。对称密钥是256位AES密钥,私钥是2048位RSA密钥

混合加密方案可以工作,但解密对称密钥会给应用程序带来瓶颈-解密一个密钥是可以的,但是如果我需要从数据库检索100条记录并解密其中的一个字段,脚本执行时间将成为一个真正的问题,因为解密对称密钥会增加开销。我在OpenSSL中使用speed工具进行的不科学测试表明,从1024位RSA密钥到2048位RSA密钥会导致我的机器上的解密时间延长七倍

我不能仅仅使用安全存储的共享对称密钥来加密每条记录的对称密钥,这有什么好的理由吗?我不完全清楚使用非对称密钥方案的好处是什么。我知道RSA密钥不能用于加密大量数据,这就是我使用对称密钥进行加密的原因,但是否对称密钥不应用于保护少量数据,即256位AES密钥


提前感谢您的帮助或指导

你问题的讽刺之处在于,使用a-参见表1,破解88位对称密钥的难度与破解2054位RSA密钥的难度大致相同


对于这样的应用程序,公钥加密的好处是解密发生在一个孤立的地方,而不是加密。但是,如果它们都发生在同一个地方,那么引入RSA只会让事情变得更糟。相反,只要坚持使用AES。

如果您使用的是每记录一个键的策略,那么是的,这可能会很慢。您是否有其他可以使用的加密库性能更好?因此,您正在PHP应用程序中对数据进行加密和解密。要解密的私钥存储在哪里?如果它在代码中或PHP代码可读的地方,那么您最好完全放弃RSA,转而使用AES密钥的AES加密。非对称密钥方案非常好,因为您可以与任何人共享您的公钥,而不必担心加密密钥。只要正确存储,可以用来读取数据私钥的密钥是安全的。我相信,只要正确存储对称密钥,就可以使用它们。如果客户机可以读取密钥是一个问题,那么您不必担心,只有当它们真正唯一时,它们才能解密自己的数据。如果你担心数据泄露,那么考虑私钥可以以同样的方式泄露。只需将它们存储在客户可以接触到的范围之外,就可以了。谢谢大家的意见大家:塔德曼-你是说我需要看看RSA以外的东西吗?虽然我可以在服务器上安装其他软件,但我正在使用内置的PHP OpenSSL模块。Artjom-私钥存储在服务器上,并在用户登录时解锁。从技术上讲,私钥将一直保存在内存中,直到脚本执行完成,以及PHP的垃圾收集器从内存中删除它所需的时间。Robert-没有数据或密钥的分发,数据也不需要签名。我投票结束这个问题,因为它不是一个真正的编程问题。谢谢你-我对非对称方案工作方式的了解非常基础,所以我需要仔细阅读。我所说的对称密钥不用于加密非常少量的数据的观点是否正确?假设我使用AES的CBC或CTR模式,只加密1字节的数据,我之所以弱化加密是因为唯一唯一的数据是初始化向量和我正在加密的单字节数据,还是即使有0字节的数据,初始化向量也足够了?@NoelWhitemore不,如果您安全地选择IV,并且从不重复IV,您就不会弱化加密-阅读更多有关安全模式的信息活动但是,请注意,AES的分析表明,在已知明文和选定明文攻击以及其他类型的攻击下,对大量数据进行加密非常安全,因此您不必害怕使用AES加密大量数据。再次感谢。如果我可以问另外一个问题,我理解不重复使用IV的原因,但是否有一种建议的方法来确保这不会发生,即我是否必须为我加密的每一段数据维护一个IV列表,然后对照该列表检查新的IV,或者,假设随机数据
生成器是加密安全的?IVs也需要是不可预测的。如果您通过加密prng选择它们,那么从统计上看,发生冲突的可能性非常小。好的,谢谢,我想可能是这样的。目前我生成IVs的方法就是从/dev/uradom检索16字节的数据。