在通过VB.NET发送到SQL之前加密数据

时间:2018-04-12 23:13:49

标签: sql vb.net encryption

我需要创建一个应用程序,其中写入DB的大多数数据都是加密的。为此,任何可以访问该DB服务器的超级用户都不应该看到/可以获得它。哪个好,因为要加密数据。问题是我不应该有办法看到它或获取它的方式,但管理员用户应该能够看到它。

应用程序将使用LDAP对用户进行身份验证,但是当用户将密码输入表单时我可以获取密码,并使用该密码作为加密密钥,以便将所有数据保存到DB加密,并使用相同的密码进行解密

我对这个想法几乎没有关注:

  1. 如果用户通过在LDAP上执行密码重置而忘记密码并获取新密码该怎么办?
  2. 如何向管理员用户授予对此数据的访问权限?
  3. 我想我可以存储用户在使用某些内置函数加密的数据库中输入的第一个密码,并使用加密字符串而不进行解密。然后,我可以给管理员用户一种使用这些密钥解密这些数据的方法,但这又意味着我知道它是如何工作的,所以我可以从数据库中获取这些密钥并在需要时解密。

    这里最好的方法是什么?

    此致 马特

1 个答案:

答案 0 :(得分:1)

有多种方法可以解决这个问题,你的问题非常广泛。但是,请考虑以下事项:

每个用户数据都使用不同的对称密钥加密。我们称这个键为k1。因此,对于每个用户,只存在一个且仅与该用户和该用户相关联的k1密钥。每个用户在创建帐户时都会生成k1

每个用户还有一个密钥k2,该密钥来自他们的密码。 k2未存储在服务器上,仅在必要时从用户输入的密码派生。我们使用k2加密k1并将此加密的结果与用户的其他数据一起存储在数据库中。

这有助于轻松更改密码:每次用户想要更改密码时,不必解密然后重新加密所有用户数据,我们所要做的就是使用旧的k2进行解密k1然后使用新k2重新加密,以获取k1的新密文。所有用户数据仍然使用k1进行安全加密,但我们需要新密码来推导新k2k1现已加密。

您可以为“经理”帐户遵循类似的计划。每个用户k1密钥都使用从您的经理密码派生的密钥加密,并与管理器一起存储。然后,他们可以使用密码解密任何k1密钥。