Php 使用SSL证书进行加密与生成密钥
我正在从事加密工作,目前正在使用Php 使用SSL证书进行加密与生成密钥,php,laravel,ssl,encryption,cryptography,Php,Laravel,Ssl,Encryption,Cryptography,我正在从事加密工作,目前正在使用openssl\u encrypt解决方案加密我的数据。目前我正在重写一个使用openssl\u public\u encrypt和openssl\u private\u decrypt的旧代码库 当然,我必须匹配之前使用的加密,但我正在考虑撤消加密数据并重写加密和解密方法 openssl\u public\u encrypt值的缺点是它们不能大于用于加密的证书。对于openssl\u encrypt,这种缺点并不存在 遗留代码库中的解决方法是将加密片段粘合在一
openssl\u encrypt
解决方案加密我的数据。目前我正在重写一个使用openssl\u public\u encrypt
和openssl\u private\u decrypt
的旧代码库
当然,我必须匹配之前使用的加密,但我正在考虑撤消加密数据并重写加密和解密方法
openssl\u public\u encrypt
值的缺点是它们不能大于用于加密的证书。对于openssl\u encrypt
,这种缺点并不存在
遗留代码库中的解决方法是将加密片段粘合在一起,以便能够加密大型数据。对我来说,这看起来相当混乱和紧张
我当前的解决方案是使用openssl\u encrypt
和一个简单的生成密钥,如Laravel将为其生成密钥:
protected function generateRandomKey()
{
return 'base64:'.base64_encode(random_bytes(
$this->laravel['config']['app.cipher'] == 'AES-128-CBC' ? 16 : 32
));
}
这项工作非常出色,但对于旧代码库,我选择SSL证书进行加密/解密,原因我还不完全清楚
与公共/私有方式相比,openssl\u encrypt
的优点/缺点是什么
我想与第三方合作,您可以向他们提供您的公共证书,但您也可以向他们提供您生成的密钥
如果第三方(如金融系统)需要访问加密数据,他们也可以解密
在这两种情况下,您都提供了解密数据的密钥
我希望有人能解释一下,为什么您会限制自己加密的值不超过您的证书,这样您就可以使用public/private openssl
函数
干杯。来点光。。。好的
首先让我们看看我们在这里处理的算法或算法类别:
公钥/私钥。。。这意味着使用RSA等算法的不对称加密。。。DH
与使用AES等算法的符号加密相比。。。德。。。双鱼
如果您的代码库包含诸如将加密数据块粘合在一起之类的内容,因为数据量对于非对称算法来说太大了,您可以放心地说,无论是谁构建的,他/她都不知道自己在做什么
对称算法用于加密批量数据。。。
不对称算法用于加密对称密钥,以便相应私钥的所有者可以解密对称密钥,从而可以解密批量数据密文
像AES这样的对称密码的密钥不大于您在描述的方法中找到的大小限制
非对称加密的原因是,您可以与世界共享您的公钥,每个人都可以为您加密数据(这里的数据在99%的真实世界场景中都是指:对称密钥),但只有您作为私钥的持有者才能解密。。。私钥永远不会离开你的手。。。除了所有者之外,没有人可以访问它
证书仅仅是公钥+元数据
该元数据包含有关谁拥有密钥对、密钥对的用途、从何时到何时密钥对有效等信息
元数据被转换成特定格式,并由可信的第三方签名。。。结果就是所谓的证书
证书上的签名是您可以使用公钥密码执行的其他操作。。。但这一次反过来。。。要为特定数据集创建签名,您需要私钥。。。没有它你就不能签名。。。但是每个持有公钥的人都可以验证签名。。。如果更改签名所属数据中的一个位,它将变得无效,因此不能简单地篡改证书的内容,例如更改密钥
更新:
如果您需要第三方在拥有您的公钥的情况下向您发送加密数据:
-他们创建了一个只有他们自己才知道的随机符号键(我们称之为Ksym)-他们用那个密钥和一个对称密码加密他们需要的任何数据。。。(ct=ENC(数据,Ksym))
-他们使用您的公钥为您加密Ks(eKsym=ENC(Ksym,Kpub))
-他们给你发ct和eKsym -您可以破译eKsym(Ksym=DEC(eKsym,Kpriv))
-破译数据=DEC(ct,Ksym) 事实: 只有你和第三方知道Ksym 如果您想以第三方无法解密的方式存储数据,则需要对其重新加密 如果您存储eKsym和ct,则只有您和最初加密数据的第三方知道所需的解密密钥Ksym(当然还有从您或所述第三方获得密钥的所有人)
有趣的事实是:Ksym对于每个传入数据段都是不同的,并且只对该数据段有效。。。与另一个第三方共享一个Ksym只能访问属于此密钥的一部分数据如果您不确定如何解决此问题,那么您现在应该退出,并雇佣知道他们正在做什么来解决此问题的人。不要吝啬或粗鲁,最好把事情做好。在你之前从事这项工作的人显然不知道他们在做什么,不要将自己添加到列表中
如果你打算自己解决这个问题(我认为你不应该),我建议你使用TLS来保护你和最终用户之间的连接,接收他们发送给你的任何数据,然后加密并存储。我真的不知道为什么你(或者之前从事这项工作的人)认为用同一台设备上的密钥加密静态数据会有好处。。。很多工作实际上都没有安全性。因此,我们向人们分发公钥,以加密他们可以向我们发送的数据。因为我们持有私钥,所以我们是唯一