我正在开发一个在本地网络环境中处理隐私敏感数据的软件,使用Mac计算机,只有特定的一组人可以访问该软件。
我需要理解,我如何能够提供安全和个性化的访问(相同的)数据由每个授权人。
数据存储在SQL数据库中(目前是Sqlite,但最终可能是Postgresql),并且应该在数据库文件中进行加密。DB引擎应该能够解密数据,以便能够轻松地搜索数据,也就是说,我不想加密客户端上的数据。
因此,我认为在打开数据库时,需要提供解密密钥,因为数据库无法单独管理它。这意味着访问服务器的计算机必须知道密钥。根据我到目前为止所了解到的,这是这样做的:
每个授权用户都有一个密码--该密码用于创建哈希代码。然后,哈希代码用于加密和解密秘密数据,在本例中是数据库的密钥。这意味着,对于我创建的每个用户帐户,我必须用用户的密码加密相同的DB密钥。
此外,为了防止人们轻易泄露密码,应使用物理密钥对每个用户进行身份验证。可能是一些钥匙卡系统。
我不知道任何密钥卡系统,也从未研究过任何身份验证系统(例如,我怀疑Kerberos与此相关,但我从未使用过它,因此这方面的“专业知识”是我的水平)。
我的问题是:
我还有一些关于使用RFID卡的想法。虽然它们可以很容易地复制,但我可以将它们与让用户输入个人密码结合起来,然后使用RFID的唯一ID和密码创建一个哈希代码,然后我用它来解码数据库的加密密钥。因此,攻击者需要两样东西--卡和用户的密码,在我的情况下,这就足够好了。这种技术有意义吗?
发布于 2016-03-04 23:34:14
我不确定你关于数据库加密的想法是否最有效。但只是想给你一个想法,你需要使用第二个因素的加密。
设备或应用程序,如谷歌身份验证使用一次密码算法。这是基于对称密钥的。这种算法和设备不能用于加密。
您希望使用非对称键(>= RSA2048)执行以下操作。在智能卡上创建私钥和公钥的密钥对。私钥不离开智能卡。公钥可以。因为它是公开的。私钥在硬件中是唯一的,因为它不离开硬件。
使用对称AES密钥加密数据库。
现在,您可以用公钥加密对称AES密钥。每次用户想访问数据库时,您都可以解密智能卡中加密的AES密钥(带有私钥),并且可以使用AES加密密钥对数据库进行解密。当然,您需要注意对称AES加密密钥不会泄漏。
但是现在您可以使用自己的非对称密钥对添加新用户。对于每个用户,可以使用用户的公钥对AES加密密钥进行加密。因此,只有这个用户可以用他的私钥解密AES加密密钥。您可以管理哪个用户将能够解密数据库。
...if,你想这么做,你还有很长的路要走!玩得开心;-)
https://security.stackexchange.com/questions/116454
复制相似问题