CA是数字证书颁发机构 拥有有CA私钥和CA公钥

CA的作用是,所经过CA数字证书颁发机构认证的客户A,A的私钥和公钥都是经过CA的私钥加密过的,通过CA的公钥就可以验证A的合法性

假设有A和B两个公司,A和B都是CA证书颁发机构信任的用户,他们的公钥的合法性可以通过CA公钥来验证,要在网上签合同,合同采用数字签名技术

首先A公司会准备一个拟好的合同,然后将该合同使用单向散列函数输出一个128位的摘要,再使用A的私钥加密形成一个加密后的摘要,也就是A的数字签名。

然后A公司将三部分内容1、未加密的合同 2、A的数字签名 3、A的公钥 通过网络传输给B公司

B公司拿到之后,会首先通过CA公钥验证A公司公钥的合法性,在验证过A的公钥合法之后,表明A的数字签名可信,确实是由CA证书颁发机构颁发的。

然后,B公司会拿着A的公钥去解密A私钥加密过的数字签名,这样就会得到A公司合同的摘要,B公司同时会将收到的未加密的合同通过单向散列函数输出一个128位的摘要,B公司拿自己输出的摘要和解密出的A公司传输过来的摘要进行对比,如果发现不一致,说明修改过此合同,这样一来就能防止A公司抵赖。

此时若有一个C公司存在,和A公司是竞争对手,它也是CA证书颁发机构颁发过证书的,它的C公钥也是合法的

假如C公司采用黑客手段,截获了A公司发给B公司的三部分数据(1、未加密的合同 2、A的数字签名 3、A的公钥),由于A拟好的合同是未加密的,所以C公司可以看到所有信息,

假如此时C公司将合同做部分篡改,且C也通过单向散列函数将篡改过的合同输出为128位的摘要,并将此摘要通过C的私钥加密。然后C公司将1、篡改过的合同 2、C的数字签名 3、C的公钥这三部分数据传送给B公司,B公司在收到数据后,经过同样的操作,即B公司首先利用CA的公钥来验证收到的公钥的合法性,验证通过,确实是合法的,因为C公司也是CA证书颁发机构认证过的,

验证通过以后,B公司拿C的公钥去解密经过C私钥加密后形成的C的数字签名,得到一个摘要,B公司又拿收到的合同(实际上C公司已经修改过)经过单向散列函数输出一个摘要,B公司把这两个摘要进行对比,结果是一致的。然后B公司就信任了这份合同的内容。但是我们都只知道,C公司从中作梗,已经篡改了合同里面的信息。所以是不可信的。

问题是,B公司通过CA证书颁发机构可以证明对方是一个合法用户,但是不知道这个合法用户是不是就是和自己签合同的那个客户,因为A公司和C公司都是合法的

我不明白我的描述是不是和事实有偏差,这也是我的疑问,数字签名的合法性可以保证,但是B公司怎么确定合同确实是A的合同呢?