在我的公司,我们有几千个硬件设备,安装在外部,所有这些设备都将数据发送回中央服务器。他们每小时都会发回数据。
这些硬件设备中的每一个都使用单独的加密密钥(通常是AES 128位加密)加密它们发送的数据,但是还有其他几种加密方法,包括非对称加密方法。
我需要做的是安全地存储所有这些密钥,从输入服务器可以解密输入数据时,输入系统是用C# .NET制作的。出于安全考虑,加密密钥必须存储在另一台服务器上。您知道有任何加密密钥存储系统支持上述功能吗?
我们目前可能只有几千个硬件设备,但是这个系统应该能够处理1000多个硬件设备。
通过测试和研究,我已经发现像Oracle Key Vault这样的系统对我们来说并不理想。我还没有找到一个不关注数据库安全、凭据安全的系统
发布于 2014-11-06 15:12:11
你应该重新改造你的整个系统。从本质上说,它的安全性远不如它应该的那样安全。您没有充分的理由存储可用于在服务器上模拟您的设备的加密密钥。相反,您应该为每个设备提供一个签名证书(来自一个可以使用CA最佳实践安全操作的私有CA )。这向您确认:( a)每个设备实际上使用的是您授权的公钥/私钥对,b)允许您从公共证书中验证每个设备,您可以将这些证书存储在清空中(甚至在每个连接开始时由设备发送,而根本不存储在服务器上)。
要与服务器对话,只需要有一个用于所有通信的私钥和设备用于验证服务器的公钥。AES仍然可以用于客户机和服务器之间的各个会话,但是可以动态生成密钥,使用非对称系统交换密钥,然后在会话结束时丢弃密钥。
在此设置下,您只需要安全地存储2至4个密钥,而不需要使用整个基础结构来管理密钥,其唯一不可替代的价值是试图破坏您的系统的攻击者。
更新:如果您真的不能使用适当的分布式密钥基础结构,那么您将需要使用密钥链接来最小化敏感数据。用主密钥加密每个密钥,从而使它们能够安全地存储在任何地方。设置一个带有主密钥的极其锁定的服务器,并让它为系统提供加密和解密服务,使密钥永远不会在该系统之外被解密。然后,该系统将基本上作为一个HSM (如果您可以得到一个实际的HSM,这将是可取的)。连接将与加密的加密密钥一起发送到该系统。系统将解密通信量并将其提供给请求者。此外,您还需要某种安全性来验证提出加密/解密服务器请求的服务,尽管那里的具体需求在很大程度上取决于您的站点上的数据需要什么样的安全性。
发布于 2014-11-06 16:45:04
正如所提到的,如果您需要以这种方式使用键,那么它们实际上应该存储在HSM中。如果您只是将密钥存储在单独的服务器上,那么这不会提供更多(如果有的话)额外安全性。如果您的一个服务器被破坏,那么您必须假设您的其他服务器也可能被破坏,一旦这台机器被破坏,任何关键数据都可以从驱动器或内存中读取。
另一方面,如果密钥存储在HSM中,那么任何人都不可能访问密钥数据,即使它们完全控制了所有主机。密钥数据不能从模块导出(至少在没有物理授权的情况下,这取决于HSM的类型),而且即使是对HSM的物理访问也不允许读取关键数据,因为设备通常使用某种形式的封装来覆盖组件,因此任何访问它们的尝试都会破坏硬件。
根据您使用的HSM类型,它们通常会提供一个标准API,您可以使用它来访问密钥和加密函数。其中最常见的是PKCS11,它可以从C#通过各种包装器使用,但也有微软的CryptoAPI ( Capi )、Capi NextGen (CNG)、Java等。
https://security.stackexchange.com/questions/72425
复制相似问题