我正在使用一些加密项目(使用C#)并且有一项任务,我正在考虑如何做得好。
我需要客户端为非对称加密生成私钥,但是由于我已经查看了一些库,所以它并不是那么简洁和干净。轻松的任务。
为什么?
为了在Windows中生成私钥,我有下一个可能性:
使用makecert.exe
,pvk2pfx.exe
等生成它们......但这些工具
来自Windows SDK,似乎是他们与其他DLL链接,
所以如果客户端有一个干净的操作系统(没有安装任何库),我可以:
1)。在客户端的PC上安装Windows SDK 2)。复制makecert.exe
和其他实用程序和
坚持项目发布(我认为,由于不同的Windows版本(从7到10)和32/64位架构,这是一个坏主意
使用Bouncy Castle
生成,不错的方式(我也可以使用编程语言而不是外部工具,这对我来说是一个优势),但C#版本没有很好地记录,并且有一些源代码中丑陋的地方
使用OpenSSL
,不喜欢它,因为有几个函数调用
库中的错误本身(使用多线程)
使用PowerShell
(也是一个选项,但我想会有
在旧版Windows上支持它的问题,如7)
由于这些事实,我想,如果我释放客户端生成私钥怎么办?这是个坏主意吗?我可以在服务器端生成它并且不保存私钥,只需通过TLS传输。
以这种方式存在哪些安全漏洞?考虑一下,使用TLS是 STRICT 选项。
答案 0 :(得分:0)
这取决于您的申请。在服务器上生成私钥至少有几个问题。
客户必须相信您以后不会保存此密钥。你知道你不是,但客户不知道。根据应用情况,它可能是重要的区别。
即使您通过TLS发送密钥,在某些情况下仍然可以被中间的人拦截。例如,公司可能会在组织中的每台计算机上安装受信任的根证书,然后拦截并解密进入该组织的所有ssl流量。根据应用程序的类型,这可能会也可能不重要。
假设您编写针对大量受众的聊天应用程序,并希望加密用户之间的所有消息。然后,如果您将在服务器上生成密钥 - 没有人会(或至少应该)使用您的应用程序。首先,您可以将所有密钥转储到政府\无论如何(他们不能100%确定不会发生这种情况),即使您不会这样做 - 整个国家都会通过使用"来检查ssl流量。假"受信任的根证书。
如此长的故事简短 - 如果您可以在客户端生成私钥 - 那就这样做。在你的情况下,我认为你可以。
答案 1 :(得分:0)
取决于多方面的考虑因素!
如果我是你,我会在客户端追求BouncyCastle。