如何将私有加密用户数据存储在数据库中,但是将其提供给其他选定用户?

Fro*_*dik 9 security encryption hash lamp password-protection

首先,如果我的问题听起来有些混乱,我会道歉,我会尽力详细描述我的情景:

我有网站,用户可以输入自己的个人数据.它们主要是健康数据,因此它是非常私密和敏感的信息.因此,我需要在服务器上加密这些数据,即使服务器受到损害,这些数据也会受到保护,因为它们将使用每个用户的密码进行加密.当然,用户密码不会作为明文型文本存储在服务器上,只会存储密码哈希值.

但我的问题是,当用户可以选择与其他用户分享他/她的一些信息时,该网站将提供"社交功能".但这会有问题,因为我无法解密用户私有数据,因此无法向其他用户显示.

你能给我一些选择,或者至少是想法,怎么能解决这个问题?优选使用LAMP环境.

phi*_*hag 23

这可以使用公钥加密来解决:

  1. 为每个用户生成公钥/私钥对; 并且只能使用用户密码临时解密私钥.
  2. 对于每个数据项,随机选择(对称)密钥S并用它加密数据d.商店S(d).
  3. 使用要授予访问权限的用户的公钥P + u加密S. 最初,这是用户ü其数据要存储.
  4. 永久存储P + u(S).忘掉所有其他钥匙.

现在,当用户ü想要与用户共享数据X,请执行以下操作:

  1. 使用用户密码解密用户的私钥P - u.
  2. 使用该私钥解密存储的数据:P - u(P + u(S))= S.
  3. 使用要与其共享信息的用户的公钥加密S.
  4. 永久存储生成的P + x(S).忘掉所有其他钥匙.

现在,当任何用户x想要访问数据时,请执行以下过程:

  1. 使用用户密码解密用户的私钥P - x.
  2. 求P + x(S).(如果没有存储,则表示没有人与穷人x共享数据).
  3. 使用私钥解密存储的数据:P - x(P + x(S))= S.
  4. 使用S,解密存储的加密S(d):S(S(d))= d.