我计划编写一些软件,使用带有公钥/私钥身份验证的SFTP将文件上传到服务器。我想知道人们如何推荐管理密钥(特别是私钥)。
我的目标平台是装有C#或C++的Windows。我看过很多库:
C#
(免费/开放)
(商业广告)
C++
所有这些似乎都需要将私钥存储在文件系统上,出于安全原因,我倾向于避免使用私钥。我也不愿意自己实现身份验证,尽管我认为这是一种选择。我的问题:
有没有办法直接从内存中提供这些库(或者我可能忽略的任何库/API)中的键值,而不是从文件中加载?
如果没有,管理这些密钥文件的推荐方式是什么?除了密码加密和严格的访问控制之外,还应该做其他事情来保护密钥文件吗?
发布于 2010-12-04 15:10:10
我从未使用过Granados,但是该库的SSH2UserAuthKey class有一个FromSECSHStyleStream方法,可以从任意的Stream (如果您想直接从内存加载密钥,可以是MemoryStream )加载用户的身份验证密钥。这似乎可以让您绕过文件系统来存储密钥。
Rebex.Net有一个可以从byte[]加载的SshPrivateKey class constructor;这也可以让您避开文件系统。
虽然我还没有检查其他库,但它们似乎都提供了从byte[]、MemoryStream或unsigned char*加载密钥的方法,以及直接从文件加载的方便方法。
但是,这些API并没有解决私钥实际如何存储的问题。您可以对其进行密码保护(这似乎是使用SSH私有密钥的一种相当常见的方法),或者使用ProtectedData class使用当前Windows用户的凭证对其进行加密。
发布于 2010-12-05 08:30:08
所有这些似乎都需要将私钥存储在文件系统上,出于安全原因,我倾向于避免这样做。
我认为您应该接受文件系统。诸如NTFS (作为Windows开发人员,您几乎肯定会使用它)这样的现代应用程序具有健壮的安全机制,这些机制可能比您(或我)设计的大多数替代机制都要好。NTFS有访问控制列表、加密等等--如果您不能信任您的文件系统来保护您的数据安全,那么您为什么还要关心网络流量呢?
我会注意到,有一些特定的情况可能会阻止我做上面说的事情,但我没有看到原始帖子中提到的任何一个。
发布于 2010-12-04 16:13:59
SecureBlackbox (我们的产品)的SFTP classes允许您从任何流或字节数组加载密钥。此外,它们还允许您以各种格式生成和转换SSH密钥。
https://stackoverflow.com/questions/4350484
复制相似问题