MI6

背景

我们可以想象两个特工(这里暂时不讨论二五仔的情况)在敌后接头,特工A希望获得特工B的服务点的支持(I need something bigger,XD),但是他们互相不知道对方的身份,而且周围的每一个人都可能是敌国特务,那么他们两个要如何证明自己的身份而且确认另一方的身份呢?

最简单的办法,如果他们两个人知道一个共同的秘密(比如在训练营中有人刚开始就被gang了),那么他们只要共同说出这个秘密就行了。当然,对暗号也是可以的。

但是因为周围都可能是间谍,所以一旦他们的秘密被人偷听到那么就是十分危险的,所以他们不能说出这个秘密。这种情况下如果他们还想保证安全进行身份确认的话,就需要引入一个权威第三方,这里我们就说是MI6(军情六处,前段时间看了王牌特工感觉还不错)。

因为军情六处掌握着所有特工的身份信息,所以理论上两个接头的特工只需要向MI6发送一个身份认证请求就好了。

第一步

特工A用自己的身份识别编码的hash作为密钥加密自己请求的时间戳和,以及自己的代号和一串随机字符串(都是明文)发给MI6,希望能从MI6处获得自己的身份证明确认。

也就是说

1
特工A的请求=“{时间戳}特工A身份编码hash”+“代号”+“随机字符串”。

{时间戳}特工A身份编码hash意思是用特工A身份编码hash加密的时间戳,后文的公式都如此。

MI6接收到这条信息后,先看到特工A的代号从而在档案库中调出特工A的身份识别编码并进行hash运算,用这个hash后的编码解密接收到的信息,得到特工A的请求时间随机字符串。因为理论上只有特工A拥有自己的身份码,所以如果信息可以被解密,那么就说明特工A证实了自己的身份。

这时候MI6先生成了两把相同的身份验证密钥:在之后发送返回信息时,一把用特工A的身份识别编码hash进行加密另一把则用MI6自己的身份识别编码的hash值进行加密

之后MI6向特工A发送了两个东西:用于后续和MI6认证的凭证(这个凭证是用MI6的身份识别编码hash加密的,里面包含了特工A的相关信息和用MI6身份识别编码hash加密的身份验证密钥);以及用特工A的身份识别编码hash加密的身份验证密钥时间戳以及当时特工A发送的随机字符串

也就是说:

1
2
3
凭证={特工A相关信息,身份验证密钥}MI6身份验证码hash

MI6的回复=凭证;{身份验证密钥,时间戳,随机字符串}特工A身份编码hash

第二步

特工A拿到了返回信息之后,首先用自己的身份识别编码hash解密其中一个数据包(肯定是用相同密钥加密的那个),从中提取出MI6返回给自己的密钥,又通过提取出的随机字符串确定了MI6的可信,时间戳让他确定了这个返回信息不是被伪造的。

之后他继续向MI6请求,希望能够在特工B的服务点获得支持。因此特工A向MI6发送了上一次接收到的用于和MI6认证的凭证,以及另外一个用从MI6返回的身份验证密钥加密的数据包,里面包含了特工A的身份信息时间戳以及明文传输的特工B服务的相关信息。

1
特工A的请求=凭证;{特工A身份信息,时间戳}身份验证密钥+“特工B服务相关信息”

MI6从特工A发送的数据中看到了A的识别凭证,用MI6自己的身份识别编码hash解密之后发现了自己之前生成的身份验证密钥,再用这把解密出的身份验证密钥(套娃!)解密另一组特工A发来的信息,提取出了特工A的身份信息及时间戳从而确定了A的身份。

因为MI6已经认证了特工A的身份凭证,之后只需要确认A有这个权限,而且帮助特工A和特工B进行身份认证就好了。

这时候MI6又给了特工A两个身份识别密钥(注意!这里是识别密钥!)一个用于A向B证明自己的身份,一个用于帮助A确定B的身份。这两个密钥中用于帮助A确定B身份的密钥,又使用B的身份识别编码hash来加密,同时被加密的还有特工A的相关信息从而组成了一个**票据**;这样一来就算假的特工B收到了这个票据也会因为缺少真正B特工的身份识别编码hash从而无法解开这个票据。另外一个密钥则用之前发送过的给特工A的密钥加密,之后和票据一起发送给特工A。

1
2
票据={身份识别密钥,账号A的信息}特工B的身份识别码hash
MI6的回复=票据;{身份识别密钥}身份验证密钥

特工A在收到这个加密密钥之后用之前(指一开始验证身份的时候)自己从MI6获得的身份验证密钥解密,从而提取出用于请求特工B服务的身份识别密钥。票据则保存用于之后和特工B的认证及服务。

值得一提的是,这里票据中特工A的信息可不单单是身份信息,还包含了特工A的权限。

第三步

特工A获得了从MI6处得到的票据和加密密钥(这个时候加密密钥已经被解密)之后开始与特工B接头。

特工A向特工B发送了用身份识别密钥加密的特工A的身份信息,时间戳;还有票据。

1
特工A发送=票据;{特工A身份信息,时间戳}身份识别密钥

特工B收到后首先用自己的身份识别码hash解密票据,从中提取出特工A的信息(以及他所申请的服务),和身份识别密钥;再用解密出的身份识别密钥解密(又套娃,艹)特工A发送的信息,获得了特工A的身份信息和时间戳。

这样经过两次验证之后,特工B终于相信特工A是可信的。这时候特工B需要向特工A证明他就是那个收到了特工A信息的B(好冷的笑话),于是特工B用解密出的身份识别密钥加密了时间戳发送给特工A。

1
特工B发送={时间戳}身份识别密钥

特工A在接受到信息后用相同的密钥解密出时间戳信息,从而确定特工B就是那个B,然后愉快的交♂易就开始了。