请先阅读问题,因为标题不太清楚,我无法用几句话表达我的问题。
我的情况是这样的: 我正在创建一个 P2P 应用程序。对等方在安装过程中生成公钥和私钥对,并将公钥上传到我的中央服务器。当对等点 A 想要与对等点 B 进行通信时,它会下载 B 的公钥并进行正常的加密和数据传输。
我需要注意以编程方式创建此公钥/私钥对。我再次需要用中央服务器的私钥对对等点的公钥进行签名,以便知道其真实性。
我是否必须创建一个私有(private) CA 之类的东西或者任何其他可能的方式?如果有人可以帮助我从编程的角度理解创建、签名等,那就太好了。我在谷歌搜索中得到了很多概念,但在编码中却没有太多。我是密码学新手,因此任何其他实现相同想法的想法都会有所帮助。
注意:我无法使用任何第三方 CA。我没有使用证书进行身份验证,而是用于加密。
谢谢。
最佳答案
您在概念上而非编程上获得很多关注的原因是,很难想出一个好的协议(protocol),而不是那么对其进行实际编程。这也是正确的顺序,这种协议(protocol)你不能只是稍后编程和记录。
如果您想使用证书/私钥进行签名或加密,这并不重要。关键是公钥需要被信任。如果您不能信任公钥,那么您就无法保证为正确的实体执行了加密。这意味着例如对等点 A 使用 M 而不是 B 的公钥进行加密。这几乎总是一个问题,除非您只对窃听攻击感兴趣。
由于您似乎拥有中央服务器,因此使用分层信任模型似乎是合乎逻辑的。对于这样的系统,使用 X509 证书和中央 CA 的 PKI 是最有意义的。您可以使用基于 OpenSSL 的 CA 系统或任何其他免费的 CA 解决方案,例如 EJBCA 或某些基于 Windows 服务器的解决方案。
当您运行 CA 时,您还没有达到目的。您需要一种方法让对等方信任 CA 的根证书。之后,您需要一种方法让 CA 信任对等方发送的证书请求。如果没有更多信息,很难说哪种方法最适合您。
只有当您(至少)弄清楚所有这些之后,您才应该担心编程。
关于c++ - 以编程方式创建和签署公钥/私钥对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16045884/