c++ - 以编程方式创建和签署公钥/私钥对

标签 c++ windows cryptography public-key-encryption

请先阅读问题,因为标题不太清楚,我无法用几句话表达我的问题。

我的情况是这样的: 我正在创建一个 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/

相关文章:

c++ - 什么是本地峰值检测器skimage.feature.peak_local_max的C++实现或类似物?

windows - CouchDB在Windows 2008 R2 Standard上崩溃,出现os_mon错误

javascript - 使用 Javascript 的 RSA 简单示例?

c++ - GlobalMemoryStatusEx 不考虑新阵列

ruby-on-rails - Gemfile.lock 中包含仅限 Windows 的 gem 是否存在问题?

ruby - 使用 Ruby OpenSSL 库时公钥无效

c# - 查询字符串参数混淆

java - 第一次使用 boolean c++ 或 java

c++ - 如何获取类中成员函数的地址

c++ - 什么时候提供用户定义的复制构造函数和赋值运算符?