怎么样确定A得到的所谓B的公钥,的确是B的公钥,比如通过CA的签名具体机制
Authentication(身份验证)是件很复杂的事情。
TLS里的Authentication指的是确认:“在此时此刻,和我做这种会话的人是谁。”
不仅要验证人物, 还有时间和密钥协商方式。(who, when, how)
而保证when的手段之一就是nonce N,这个nonce并不一定直接参与密钥计算,而是用来验证整个会话的。
稍稍具体一点是这样的:
客户端请求和服务器建立TLS连接客户端发送nonce r1服务器把r1和自己选定的r2连接成一个字符串,hash后签名为S,然后把r2、这个签名、自己的证书发给客户端。客户端验证证书(通过本地存储或者CA),然后自己用r1,r2,hash函数,证书来验证S是否正确,这样也确定了目前为止自己对话的对象是否是服务器。单看一个Nonce是看不出问题的,比如如果第二步里,中间人换掉这个nonce,服务器是毫无察觉的。而到了第四步,客户端很容易就能通过签名来验证自己的Nonce是否被掉包。而且如果是“重放”攻击,除非正好碰上了相同的r1,否则客户端在第四步也能识别。
另外,在密钥协商场景中,“公钥”其实有2个意思
1. public key
这就是指的较长期存在的、公开的、和自己身份绑定的,可让他人用此密钥加密发给自己信息、或供他人使用验证自己签名的密钥。
2. key material in transcript
在密钥协商(key establishment)中,双方在非安全信道上发送给对方的、用于生成会话密钥(session key)的数据。
【怎么样确定A得到的所谓B的公钥,的确是B的公钥,比如通过CA的签名具体机制】 1靠CA,即PKI系统来验证,2靠1以及nonce等手段来验证。
■网友
不请自来。题主提到的问题应该和PKI和SSL有关,本人刚刚通过CCIE安全考试,试着答一下。个人觉得楼主应该是把PKI和SSL混了。PKI数字证书是用来做身份验证的,ssl在身份验证阶段会用到PKI。A和B交换公钥,是通过CA根证书签名的(ca私钥加密签名结果),A和B需要提前获取CA的根证书,CA根证书含有CA的公钥这个公钥用来解CA签名过的A或B的公钥。如果A和B交换公钥信息签名能够被CA的公钥解那么说明A和B确实A和B。这里的CA类似公安局,CA签名A和B公钥类似颁发给A和B颁发身份证。这里又有一个问题A和B如何确认获取到CA根证书就是真正的CA呢?这里需要离线确认,CA根证书含有hash验证,通过离线验证hash值是否一致。题主提到随机数,这里应该是和ssl相关,随机数不是用来验证A和B。A和B ssl VPN隧道建立过程中需要使用随机数来生成主密钥来防止重放攻击。下面是我的ssl部分笔记:Authentication and Key Exchange认证和 密钥交换阶段。在这个阶段,客户和服务器需要产生一个认证的shared secret (共享秘密),叫做pre_master secret,它将用于转换成为master secret(主秘密)。SSLv3和TLS支持一系列认证和密钥交换模式: RSA:最广泛被使用的认证和密钥交换模式。客户产生random secret(随机秘密)叫做pre_master secret,被服务器RSA公钥加密后通过ClientKeyExchange 信息发送给服务器。服务器公钥使用服务器证书进行认证,服务器证书被 ServerCertificate信息发送。 ServerHello信息发送以后,服务器发送ServerCertificate信息和 ServerHelloDone信息。ServerCertificate信息发送服务器证书(证书里包含服务器公钥)。ServerHelloDone信息是一个简单的信息,表示服务器已经在这个阶段发送了所有的信息。Pre_master secret由两个部分组成:客户提供的protocol version(协议 版本)和random number(随机数)。协议版本设计来抵御rollback attacks(反转攻击)。客户使用服务器公钥来加密pre_master secret。如果需要对客户进行认证,服务器需要发送CertificateRequest信息来请求 客户发送自己的证书。客户回送两个信息:ClientCertificate和 CertificateVerify,ClientCertificate包含客户证书,CertificateVerify用于完成客户认证工作。它包含一个对所有handshake信息进行的hash,并且这个 hash被客户的私钥做了签名。为了认证客户,服务器从ClientCertificat获取客户的公钥,然后使用这个公钥解密接受到的签名,最后把解密后的结果和服务器 对所有handshake信息计算hash的结果进行比较。如果匹配,客户认证认证成功。 Key DerivationSSL客户和服务器使用先前安全交换的数据来 产生master secret(主秘密)。master secret(主秘密)是绝对不会交换的,它是由客户和服务器各自计算产生的,并且基于master secret还会产生一系列密钥,包括信息加密密钥和用于完整性校验的密钥。SSL客户和服务器使用下面这些先前交换的数据来产生master secret: 1.Pre-master secret 2.The Client random and server random(客户和服务器随机数)
推荐阅读
- 筑牢疫情防控“大防线”上海确定三大重点任务
- |龙城高级中学建校地址确定 总用地面积8.24万平
- dart这编程语言现在发展怎么样了,语法与Java,c#很相似,甚至更简洁
- 青年|一汽奔腾T77怎么样?车主吐槽:后排座椅太短,和坐小板凳似的
- 电商网站支付流程的流失率是怎么样的从用户点击充值/支付按钮,到支付完成,其中每一步的流失比率都是咋样的
- 假如把中国电信监测到的3亿人一个月每天上网的所有行为打个包,哪些数据应该被提出从这些数据能得到啥
- 作为一个服装供应商,怎么样与淘宝卖家沟通才能卖出自己的产品或者拿到订单
- 在丁丁租房工作的感受是怎么样的
- 城市数据团是怎么样一个团队
- win7中本地连接跟无线网卡同时使用时是怎么样的模式
