首页 > 解决方案 > 每个用户在哪里存储 SHA256 密钥对

问题描述

我在 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到他的公钥和私钥很简单。

一个问题是我不能要求用户创建一对私钥/公钥并只向我发送公共密钥,因为所有这些都需要是自动的,用户不必做任何事情。

另一个问题是应用程序应该可以在任何设备上使用,因此私钥不能存储在客户端。

标签: node.jsencryption

解决方案


您不能将它们存储在服务器上,因为攻击者在服务器上。恶意黑客可以轻松找到密钥(因为它们未加密),下载整个数据库并解密所有内容。

因此,您最好的选择是将密钥存储在完全不同的机器上,并让该机器进行加密和解密。这样,攻击者首先必须闯入您的机器,然后再进入加密/解密机器。并非不可能,但希望更难。

基本上,没有什么是不可破解的。使攻击者尽可能困难的事情是要走的路。

此外,即使您必须将数据严格存储在主服务器可以访问的数据库中,也不要将它们存储在同一个表中(如示例中所示,您如何将它们保存在单独的表中)。保持添加到用户数据库的所有数据的索引相同,以便用户数据库的索引 1 将为该索引生成正确的键(正是您所做的)。

另一种选择是加密硬件。我对此并不熟悉,但我知道有些公司销售的硬件可以满足您的所有加密需求。


推荐阅读