【发布时间】:2021-04-11 16:29:41
【问题描述】:
我在 NodeJS 中有一个数据库和一个 API,我使用 Web 应用程序创建用户,每个用户都可以创建/更新/删除数据。
为了确保这一点,我需要加密用户的数据。所以我想要的是在每次创建用户时创建一对 SHA256 公钥私钥。
实际上我所做的是将这些密钥存储在数据库中,通过使用全局 SHA256 密钥对对其进行加密。
所以,简而言之,我有一对全局密钥来加密每个用户的每对特定密钥。
事实上,这似乎并不安全,因为最终每个用户都有自己的加密/解密方法存储在数据库中。
例如我可以有 2 张桌子:
User table :
id_user | firstname | lastname | encrypted_data
-----------------------------------------------
1 | John | Doe | QMwmuCMmI..
2 | Jane | Doe | QMwmuCMmI..
...
Keys table :
id_user | public | private
------------------------------
1 | MIICIjA.. | MIIJrT..
2 | MIICIjA.. | MIIJrT..
...
所以从John Doe 到他的公钥和私钥的链接很简单。
一个问题是我不能要求用户创建一对私钥/公钥并只向我发送公共密钥,因为所有这些都需要是自动的,用户不必做任何事情。
另一个问题是应用程序应该可以在任何设备上使用,所以私钥不能存储在客户端。
【问题讨论】:
-
1. SHA256 是一种单向哈希函数,它与公钥或私钥没有直接关系。没有 SHA256 密钥对这样的东西。 2. 是的,这是一个问题,将数据加密密钥与密文存储在同一个数据库中不会提供任何安全性。也许加密数据库所在的存储就足够了。
-
那么加密服务器?数据库的 URL ?事实是存储的数据必须加密,所以无论如何我都需要一些东西来直接加密数据并在客户端或在发送之前对其进行解密。
-
使用密码作为加密密钥是否足够安全?密码不以纯文本形式存储,并且不可解密。那么解密数据的唯一方法就是知道密码?
-
加密是一种防止向各种系统实体泄露的机制,这些实体会根据所使用的加密类型和位置而变化。为什么需要加密?这是某种合规要求吗?您的合规官对此有什么建议吗?
-
用户数据必须加密,每个用户的数据必须用不同的密钥加密是完全不同的要求。我不熟悉法国的管辖权,但我想第一个就足够了。很难推断出云服务提供商无法通过某种努力获取数据的加密方案。我知道的唯一方法是完全同态加密,没有人使用,因为它太慢而且仍然可能存在一些边信道漏洞。
标签: node.js encryption