用户的内容已加密,但需要解密。有多个文件需要解密才能查看,并且绝对不会同时查看。
我当前正在通过使用用户的纯文本密码来加密随机生成的密钥来加密,该密钥会加密用户的数据。在执行任何操作之前,密码将被散列并正常验证。我正在使用PHP的aes-128-gcm openssl_encrypt()函数。
我当前的系统每次都想输入 用户想要读取文件的密码。
我曾考虑过一次解密所有内容,但这并不能很好地扩展。我还考虑过将用户密钥存储为cookie,但是我担心安全性。
是否有标准方法可以做到这一点? 谢谢!
答案 0 :(得分:0)
绝对不会同时查看它们
这里最安全的答案不是每次都只需要密码吗?我认为(尽管我确定这不是您要的答案),每次可能都只是要求输入密码是最好的解决方案。 尽管这对于用户而言可能很乏味,但我还认为它带来了某种安全感-因为它不像登录那样简单(因为文件已加密)。
从我的角度来看,我认为已加密的文件不应该被大规模解密吗?
对不起,我知道这不是您要找的答案-但是,如果您有更多有关自己动机的信息,也许可以找到一个更合理的解决方案?
答案 1 :(得分:0)
不要在服务器端进行解密-在客户端进行。将用户密码保存在自己设备上的内存中是安全的。
答案 2 :(得分:0)
要做的第一件事是将用户密码与此分开。您必须解密并重新加密所有文件。可能还有其他解决方法,例如仅允许新文件使用此系统。但这是非常特定于用例的,例如您将其文件保留多长时间,文件的交接时间等等。
无论如何,这是一种实现方法:
key.txt
。使用用户密码对该文件进行加密。key.txt
并获取生成的密码。因此,问题一已解决。
现在我们应该将其存储在哪里?
您可以简单地将其存储在数据库中的服务器上。这种类型取决于数据的机密性和服务器的安全性。您最终要对他人数据的安全负责,至少可以通过这种方式来控制它。
使用这些字段创建表格
user_id | ip | password | last_access
当用户去下载文件时,请检查其上次访问时间和IP地址以使密码无效并使其刷新。这很容易设置,完全在您的控制之下。如果您保存了加密密钥,那么它始终将始终具有某种程度的漏洞,至少以这种方式,它全在您的控制之下。
即使您不想将其存储在数据库中,这里最大的缺点是如果有人拥有该表,但是如果他们这样做并存储了重要数据,您可能已经有很多问题了。 / p>
至少使用第一部分,因为这可以解决将其与实际帐户密码绑定在一起的大问题。即使黑客因为是单独的而从客户端获取文件密码(被盗的cookie等),但仅凭密码不能让他们像帐户密码那样登录到您的站点。我假设在这里,用户必须登录才能进入下载部分。为他们使用相同的密码使他们可以访问获取数据的方法和下载数据的方法。
要清楚,它们是关于将其存储在客户端的论点。然后,如果您的网站遭到入侵,则很少有人会得到该密码,因为该密码(取决于您的操作方式)仅存在于客户端和服务器等的内存中。它将责任推给他们。
不对称加密
您还可以使用非对称加密。目前看来您正在使用AES,这很好,但是它是一个对称密钥块密码。基本上,有三种常见的“加密”形式(白话):
散列(实际上不是加密)-md5
,sha1
,sha256
-这是一种无法解码的方式。它们具有固定的长度,并且始终加密为同一事物。通常会在文件校验和(用于验证文件内容),块链,密码或其他需要比较两个“加密”值的地方看到此信息。
对称-AES
,3DES
,Blowfish
,Twofish
-加密和解密所需的任何内容。相同的键可以同时执行。通常,由于IV,这些每次都会将同一事物加密为不同的值。
非对称-SSL
,DSA
,RSA
,PGP
,用于加密货币钱包,TLS等。有了这些,您就有2个密钥,一个公用一个和一个私人的。密钥不能解密自己的加密数据,只有其他密钥可以解密。因此,如果服务器上有一把钥匙,而客户端有另一把钥匙,那么就可以了。您可以使用密钥(只能通过其密钥解密)来加密他们的文件,而不必担心别人拿到您的密钥,因为它不允许他们解密文件。您可以将一个密钥提供给客户端,客户端可以使用该密钥解密您加密的数据(即使没有密钥)。每次使用它们时,它们还会加密为不同的“填充”。
因此,您可以看到非对称形式在两方(或更多方)系统中使用时具有一些优势。它还具有好处,您不需要他们的密钥来加密文件。您所需要的只是您俩中的一员。因此,例如,如果您为它们生成数据而又不想加密,然后又让它们在同一系统中解密,则可以毫无问题地做到这一点。这可能省去了一个步骤,因为您需要询问他们,或者在您想要加密任何内容时随时跟踪它们的对称性。在这里,您只需要密钥对的一部分即可。
(在服务器上)实现起来实际上并不难,但很难理解它的作用。这就是为什么我决定添加此内容的原因,如果没有这些知识(您可能知道或可能不知道),很难使用这些术语并使它们变得有意义。如果您使用非对称加密,那么对您(如果您这样称呼)的唯一真正缺点是,如果客户端丢失了密钥,您将无法解密文件。因此,我将确保他们知道将其备份在安全的地方。这是您在新闻中看到的相同问题,涉及丢失不对称加密的加密货币钱包
正如我所说,我的大部分知识与服务器上的数据加密和处理有关。因此,我不确定如何将其与“客户体验”联系在一起。例如,我确实知道如何使用RSA密钥来减少密码,而无需使用SSH等进行登录。这有点相同,但不完全相同。
希望有帮助!