哈希游戏SM2算法第三篇:实现SM2秘钥交换协议的算法流程
万达哈希,哈希游戏平台,哈希娱乐,哈希游戏
本部分规定了SM2椭圆曲线公钥密码算法的密钥交换协议,并给出了密钥交换与验证示例及相应的流程。本部分适用于商用密码 应用中的密钥交换,可满足通信双方经过两次或可选三次信息传递过程,计算获取一个由双方共同决定的共享秘密密钥(会话密钥)。同时,本部分还可为安全产品生产商提供产品和技术的标准定位以及标准化的参考,提高安全产品的可信性和互操作性。
多个用户之间建立一个共享秘密秘钥的过程,并且其中任何一个用户都不能预先确定该秘钥的值。
通过作用于共享秘密和双方都知道的其他参数,产生一个或多个共享秘密秘钥的函数。
(b)对于任意给定的输入,要找到输出相同的另一个输入,在计算上是不可行的。
一种执行加密/解密的算法,其中加密/解密使用的秘钥容易从计算上相互求得。
HASH函数的抗冲突性使得如果一段明文稍有变化,哪怕只更改该段落的一个字母,通过哈希算法作用后都将产生不同的值。而HASH算法的单向性使得要找到哈希值相同的两个不同的输入消息,在计算上是不可能的。所以数据的哈希值,即消息摘要,可以检验数据的完整性。
哈希函数的这种对不同的输入能够生成不同的值的特性使得无法找到两个具有相同哈希值的输入。因此,如果两个文档经哈希转换后成为相同的值,就可以肯定它们是同一文档。所以,当希望有效地比较两个数据块时,就可以比较它们的哈希值。例如,可以通过比较邮件发送前和发送后的哈希值来验证该邮件在传递时是否修改。
O:椭圆曲线上的一个特殊点,称为无穷远点或零点,是椭圆曲线加法群的单位元。
ZA:关于用户A的可辨别标识、部分椭圆曲线系统参数和用户A公钥的杂凑值。
ZB:关于用户B的可辨别标识、部分椭圆曲线系统参数和用户B公钥的杂凑值。
密钥交换协议是两个用户A和B通过交互的信息传递,用各自的私钥和对方的公钥来商定一个只有他们自己知道的秘密密钥。这个共享的秘密密钥通常用在某个对称密码算法中。该密钥交换协议能够用于密钥管理和协商。
(3)E(Fq)上的基点G=(xG,yG)(G≠O),其中xG、yG是Fq中的两个元素;
(2)密钥派生函数:从一个共享的秘密比特串中派生出密钥数据。在密钥协商过程中,密钥派生函数作用在密钥交换所获共享的秘密比特串上,从中产生所需要的会话密钥或进一步加密所需要的秘钥数据。
设用户A和B协商获取密钥数据的长度为klen比特,用户A是发起方,用户B是响应方。用户A和B双方为了获取相同的密钥,应实现如下运算步骤:
B3:从RB中取出域元素x2,按本文第一部分的4.2.7给出的方法将x2的数据类型转换为整数,计算x2`=2^w+(x2&(2^w-1));
B5:验证RA是否满足椭圆曲线的方程,若不满足则协商失败;否则从从RB中取出域元素x1,按本文第一部分的4.2.7给出的方法将x2的数据类型转换为整数,
B6:计算椭圆曲线点V=[h*tB](PA+[x1`]RA)=(xv,yv),若V是无穷远点,则B协商失败;否则按本文第一部分4.2.5和4.2.4给出的方法将xv,yv的数据类型转换为比特串;
B8:(选项)按本文第一部分4.2.5和4.2.4给出的方法将RA的坐标x1、y1和RB的坐标x2、y2的数据类型转换为比特串,计算SB==Hash.......;
A4:从RA中提取出域元素x1,按本文第一本分4.2.7给出的方法将x1的数据类型转换为整数,计算x1`=2^w+(x1&(2^w-1));
A6:验证RB是否满足椭圆曲线的方程,若不满足则协商失败;否则从从RB中取出域元素x2,按本文第一部分的4.2.7给出的方法将x2的数据类型转换为整数,
A7:计算椭圆曲线点U=[h*tA](PB+[x2`]RB)=(xu,yu),若U是无穷远点,则A协商失败;否则按本文第一部分4.2.5和4.2.4给出的方法将xu,yu的数据类型转换为比特串;
A9:(选项)计算S1,并检验S1=SB是否成立,若不成立则从B到A的秘钥确认失败;
B10:计算S2,并检验S2=SA是否成立,若不成立则从A到B的秘钥确认失败。