是否可以使用每个用户不同的APP_密钥加密Laravel中的数据?
我正在使用Laravel框架加密MySQL数据库中的几乎所有数据。出于隐私考虑,这是一项要求 Laravel使用特定于应用程序的应用程序密钥作为主密钥来处理加密和解密(OpenSSL/AES-256-CBC密码) 我想知道:在用户基础上生成应用程序密钥是否容易(或者是否有软件包)?那么每个用户都有一个应用程序密钥(即用户应用程序密钥)来处理所有用户特定的数据 我认为这增加了一个额外的安全层。因此,即使数据被盗,并且一个用户以某种方式被解密,其余的数据对攻击者来说仍然是无用的 还是我把事情搞得太复杂了,一个应用程序密钥就足够安全了是否可以使用每个用户不同的APP_密钥加密Laravel中的数据?,laravel,encryption,architecture,Laravel,Encryption,Architecture,我正在使用Laravel框架加密MySQL数据库中的几乎所有数据。出于隐私考虑,这是一项要求 Laravel使用特定于应用程序的应用程序密钥作为主密钥来处理加密和解密(OpenSSL/AES-256-CBC密码) 我想知道:在用户基础上生成应用程序密钥是否容易(或者是否有软件包)?那么每个用户都有一个应用程序密钥(即用户应用程序密钥)来处理所有用户特定的数据 我认为这增加了一个额外的安全层。因此,即使数据被盗,并且一个用户以某种方式被解密,其余的数据对攻击者来说仍然是无用的 还是我把事情搞得太复
已尝试: 搜索Laravel框架的现有包。
通用谷歌搜索示例。决定只使用一个应用程序键。据我所知,没有一个包可以处理这个问题。根据评论,它在安全性方面没有任何好处。是的,您可以为每个用户生成密钥并将其存储到
users
表中。
下面的代码示例将生成一个密钥
'key' => encrypt($this->generateRandomString(16))
private function generateRandomString($n) {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$randomString = '';
for ($i = 0; $i < $n; $i++) {
$index = rand(0, strlen($characters) - 1);
$randomString .= $characters[$index];
}
return $randomString;
}
为了增加安全性,我建议您使用APP_密钥加密基于用户的密钥。
然后将加密密钥存储在数据库中
解密时,首先需要解密密钥。之后,您可以使用基于用户的密钥解密内容。
然后有人需要得到的内容需要知道这两个键,即用户键和应用程序键
希望这有帮助。如果每个用户都有自己的密钥,则该密钥必须存储在某个位置。出于实际目的,可能在数据库中的某个位置与用户数据一起。它将密钥放在加密数据的旁边。这使得整个过程有些毫无意义。目前,一个APP_密钥存储在webroot之外的文件系统中的一个.env变量中。解决方案可能是在webroot之外添加某种数据结构,将用户链接到自己的应用程序密钥。您可以将用户id和静态密钥结合起来,因为在用户表id字段的id列中有主键,所以每次都会生成diff KEY。@Peer这通常不是一种明智的方法。Web服务器应该是无状态和可伸缩的,因此假设您有多个该服务器的实例在运行以实现负载平衡。在这种情况下,除了数据库之外,还需要在web服务器上存储数据变得非常不切实际。通常,只有在攻击者没有密钥的情况下,加密才有意义。您应该问问自己,攻击者获取数据的概率是多少,而不是密钥。如果您将密钥存储在某个文件/环境变量中,那么在攻击您的服务器时,它们很可能会将密钥与数据一起存储。加密数据库数据唯一有用的情况是备份泄漏,例如,没有附带的密钥。这种可能性有多大?加密你的备份就足够了吗?你到底在防范什么?
$encrypter = new \Illuminate\Encryption\Encrypter($key);
$decrypted = $encrypter->decrypt($encryptedContent);