经典PKI的情况......你想要一个CA ...
所有您同行需要提前了解的公共CA证书......
一次与服务器的同行寄存器,它应该加密自己的密钥,以便服务器可以确保接收到的密钥没有被篡改...
的数据结构,你应该使用X509
但从程序员点:
对A想用新的密钥对注册...
- >生成密钥对
- >填写证书的识别细节,并附上公钥 (你现在通常称为“证书请求”)
- > enc对称地发送请求(具有随机IV的AES-CBC-256看起来像是一个不错的选择)
->对symertic密钥进行加密,并将加密的请求和明文IV连同加密的请求和明文IV发送到服务器(可选地包括服务器提供随机数或在加密部分addidional会话数据)
在服务器侧:
解密,检查数据,尤其是请求 的识别信息,如果这是确定,取请求(ID部分+公共密钥)并用CA密钥
报告回对等体A并且移交签名证书因斯它不包含任何秘密,这可能是明文或与同行一所提供的密钥)
,一旦你需要让同行之间的接触,你只需要一些联系人信息加密:
如果同行X想要联系同伴A,所有您必须分发的地址是如何联系A的地址......然后,X联系A并要求提供ID(“您好?这是A吗?请给我你的证书,这里是我的证书。“)...证书交换后,验证签名......如果CA sig确定,双方都会生成随机数(”nonces“;数字一旦使用)并用接收和验证的证书中的公钥对它们进行加密,并将它们交给另一个对等体......在接收到加密值时解密,并用其他方密钥重新加密,并且在接收到解密后该值与您自己的私人密钥,并验证它是相同的号码您发送...已验证的连接已建立,您现在可以继续交接对称密钥,并开始传输加密数据
如果您认为您可以在没有身份验证的情况下生活另一个节点,你可以直接开始传输加密数据后,你检查他们的证书上的CA信号......但考虑到在这种情况下,一个attac ker可以接收不适合他的数据(他不能解密,但他可以假装成另一个同伴......)
非常感谢。我正在考虑类似于这个实现的东西,但我也有其他的实现,并没有能够找出哪一个去。我认为的另一种方法是让服务器在注册过程中创建密钥对和证书,并签署证书并将其发回给对等方。但我想我会去执行这个实现。而且我没有像真正的CA那样创建一个CA,但是我将拥有一个中央服务器的自签名证书和密钥对。并用它来签署所有的对等证书。 –
您能否告诉我任何安全隐患:不使用已建立的CA软件并自己执行此类任务。签名部分看起来非常简单,我没有看到有任何CA软件的意义。 –
好...什么是CA软件? ...如果你看看openssl,它包含一个“小CA”......围绕openssl的基本操作的一堆脚本......你正在构建的是一个CA ......事实上......您的CA将拥有自签名证书...好吧...查看其他CA ...浏览器中的所有根CA都有自签名证书......唯一的区别是:这些证书随浏览器或您的操作系统一起提供...你的应用将与你的应用一起交付......这个CA将和其他任何... – DarkSquirrel42