我想将帐号和路由号码存储到SQL数据库中,我正在寻找加密/解密这些敏感信息的最佳方法。经过研究,我发现我可以使用对称算法(如AES)或非对称算法(如RSA、X509证书)。我只想在本地加密/解密服务器上的信息,并将其存储到SQL中。为此,建议使用128位HEX密钥的AES吗?
不对称算法的使用似乎过分了,因为加密/解密将在同一台服务器上本地发生。
(请注意,这些信息最终将传递给使用SFTP的供应商,但是在传输期间,我们将使用供应商提供的PGP公钥进行加密,以便供应商能够解密。我在这里看到的是本地存储的加密/解密)
发布于 2019-04-16 18:36:51
首先,您应该进行威胁分析并确定加密应该保护您不受攻击的攻击场景。如果没有这样的分析,你所做的只是在你的数据库上撒上魔法密码尘埃,并希望它能以某种方式保护你免受任何和所有可能的威胁。(剧透者:可能不会。)
例如,一些或多或少合理的威胁可能包括:
加密可以防止其中的一些威胁,但并不是所有这些威胁,并且它能够防止这些威胁的程度取决于划分的程度(例如将公开访问的服务分离到专用服务器上,实现严格的防火墙规则,要求对所有帐户进行安全多因素身份验证,在硬件安全模块中存储活动加密密钥,将不活动的主密钥分割成多个共享,并将它们存储在不同的位置,等等)。你愿意去实现和忍受。
当然,您加密数据的唯一直接原因也可能是通过要求它的认证。在这种情况下,您可能希望检查认证标准,并确定它们对您的加密所要求的内容以及他们期望它应对的威胁。
根据您的特定需求和威胁模型,您可能仅仅通过激活数据库软件的内置加密功能,甚至仅仅通过将数据库存储在加密磁盘上,就可以充分满足您对静止数据加密的需求。如果是这样的话,这无疑是最简单的选择,尽管它只对有限的一组攻击进行保护。
数据库前端(如CryptDB )可能也很有用,不过,您应该再次仔细检查它们的能力,以保护您免受您确定的相关威胁,同时仍然提供对所需数据的访问。
如果您必须实现您自己的数据库列加密,并且如果对称密钥加密足够满足您的需要,那么我强烈建议使用AES-SIV (或者可能使用AES-GCM-SIV)。如果不需要对加密的字段进行相等的比较,则对每个字段使用带有唯一随机值的SIV (并考虑将表和列名以及行的主键作为关联数据)。如果您确实需要对加密字段进行比较而不对它们进行解密,那么使用SIV时不要使用nonce (但最好还是将表名和列名作为关联数据)。
(如果您发现自己想要对加密数据进行任何类型的搜索或比较,除了简单的等式比较之外,我强烈建议检查您的设计并尝试找到另一种解决方案。虽然确实存在各种声称提供这种功能的“保序”和/或“可搜索”加密方案,但它们不能--而且根本不能--达到现代加密方案通常预期的安全水平,因为进行这种比较的能力不可避免地泄露关于加密数据的信息。即使是非加密的SIV也应该谨慎使用,因为它泄露了加密值的相等性。)
在某些情况下,例如,如果您希望您的服务器能够向数据库添加新的加密值,但不能在添加了现有数据后对其进行解密,则可能需要使用公钥加密方案。特别是,您可能需要一个混合密码体制,如ECIES,其中系统的公钥部分用于生成和加密随机对称密码密钥,然后使用这个随机对称密钥对数据本身进行加密。与AES-SIV相比,这类系统的主要缺点是其额外的复杂性和较高的开销(在处理时间和存储需求方面)。当然,它们的主要优点是,即使攻击者能够访问公共加密密钥,数据的机密性也不会受到损害。
发布于 2018-09-26 20:59:25
麻省理工学院有一项名为CryptDB的工作,它可以处理你所要求的大部分内容,并于2011年提交。他们发布了他们的代码,但是您可能很难在应用程序中使用它。例如,PhpBB和HotCRP的测试代码没有完全发布。此外,不计算代理服务器的计算资源增加。
至少有两个安全分析一和二。还有,一个短的这里。第一个例子显示了当完整性缺失时会发生什么,数据库的双镜头会导致信息泄漏。第二种是表明奥普和DET (零IV的CMC)洋葱可以泄漏信息。
如果文章中提到的问题没有困扰你,那是给你的。
存储帐号和路由号码
非对称算法的使用
一般情况下,非对称加密用于密钥交换。与对称加密算法相比,非对称加密算法将是非常慢的。现代英特尔和AMD CPU的每个核心都有AES-NI指令.这将减少服务器的时间。
https://crypto.stackexchange.com/questions/62655
复制相似问题