密钥协商方法和系统与流程

文档序号:24816790发布日期:2021-04-27 14:00阅读:1036来源:国知局
密钥协商方法和系统与流程

1.本发明属于信息安全领域,具体涉及密钥协商方法和系统。


背景技术:

2.密钥交换协议是通信双方通过不安全的信道传递消息,根据传递的消息计算出一个共享的秘密值,用该秘密值计算共享密钥,用于后续的安全通信。
3.常见的密钥交换算法有dh密钥交换算法,该算法可以满足通信双方在完全没有对方任何预先消息的条件下通过不安全信道创建一个共享密钥。dh算法的流程是,通信双方各自建立一个临时公私钥对,并把临时公钥公开传递给对方;双方利用己方的临时私钥和对方传递过来的临时公钥,计算出一个共享的秘密值。dh算法是基于离散对数困难问题,类似地,基于椭圆曲线上(ecc)的离散对数困难问题,产生了ecdh算法。ecdh算法的流程和dh算法的流程是一致的。然而,dh和ecdh算法都缺乏身份认证,因此都无法抵抗中间人攻击。在实际使用过程中,dh和ecdh算法都需要与其他签名算法配合,靠签名算法实现身份认证。
4.基于口令的密钥交换算法一定程度上解决了上述身份认证的问题。国际上的spake2算法是一个对称口令认证的密钥交换协议。该算法可以满足拥有共同口令的双方通过两次或者三次信息传递过程得到一个安全性更强的共享密钥。该协议是两个用户通过交互的信息传递以及口令计算出一个只有他们知道的秘密值,再由该秘密值构造出共享密钥。spake2算法本质上是在dh算法的基础上,加入了口令认证的部分。
5.基于口令认证的密钥交换算法在物联网中有着非常广泛的应用前景,如车联网中数字车钥匙和车首次配对过程中安全通道的建立,实际生活中有非常多的基于一个简单口令建立一个更安全的通信通道的需求,然而现有的基于口令认证的密钥交换存在安全性强度低,无法抵抗口令猜测攻击的问题。
6.国密sm2算法密钥交换协议适用于商用密码应用中的密钥交换,可以满足通信双方经过两次或者三次信息传递过程得到一个双方共同决定的共享密钥。sm2算法密钥交换协议也需要双方互相传递一个临时公钥,然后用己方的私钥、己方的临时公私密钥对、对方的公钥、对方的临时公钥来计算一个只有他们知道的秘密值,由该秘密值计算出共享密钥。该共享密钥通常用于某个对称密码算法中。sm2算法密钥交换协议可以用于密钥管理和协商。但是国密sm2算法并不适用于口令认证的密钥协商应用场景。


技术实现要素:

7.本发明针对现有技术中口令认证密钥交换协议无法抵抗口令猜测攻击的问题,基于国密sm2算法,提供一种能够提高口令认证交换密钥的安全强度的密钥协商方法和系统。
8.第一技术方案为一种密钥协商系统,其特征在于,通信双方通过互相传递信息,共同协商出一个共享密钥,
9.通信方a包括以下模块:第1私钥生成模块(11)、第1公钥生成模块(12)、第1组合公钥生成模块(13)、第1信息恢复模块(14)、第1共享密钥生成模块(15);
10.通信方b包括以下模块:第2私钥生成模块(21)、第2公钥生成模块(22)、第2组合公钥生成模块(23)、第2信息恢复模块(24)、第2共享密钥生成模块(25);
11.通信方a和通信方b,各自分别具有私钥d
a
、d
b
,公钥p
a
、p
b
,并共享一个秘密口令π∈[1,n

1],其中,g为椭圆曲线的基点,其阶为n,h为余因子,m、n为两个公开的点参数,
[0012]
所述第1私钥生成模块(11)产生一个随机数r
a
作为临时私钥,
[0013]
所述第1公钥生成模块(12)将临时私钥r
a
乘以基点g得到r
a
=[r
a
]g作为临时公钥,其中[]为椭圆曲线上的点乘运算,
[0014]
所述第1组合公钥生成模块(13)将秘密口令π乘以公开点m得到口令公钥[π]m,由临时公钥r
a
和口令公钥[π]m生成组合公钥x,
[0015]
所述第1信息恢复模块(14)接收通信方b发送的组合公钥y,计算出通信方b的口令公钥[π]n,由组合公钥y中恢复出通信方b的临时公钥r
b

[0016]
所述第1共享密钥生成模块(15)由私钥d
a
、公钥p
a
、己方临时私钥r
a
、己方临时公钥r
a
、对方临时公钥r
b
、对方公钥p
b
计算出秘密值u用于生成共享密钥k
a

[0017]
所述第2私钥生成模块(21)产生一个随机数r
b
作为临时私钥,所述第2公钥生成模块(22)将临时私钥r
b
乘以基点g得到r
b
=[r
b
]g作为临时公钥,
[0018]
所述第2组合公钥生成模块(23)将秘密口令π乘以公开点n得到口令公钥[π]n,由临时公钥r
b
和口令公钥[π]n生成组合公钥y,
[0019]
所述第2恢复模块(24)接收通信方a发送的组合公钥x,计算出通信方a的口令公钥[π]m,由组合公钥x中恢复出通信方a的临时公钥r
a

[0020]
所述第2共享密钥生成模块(25)由私钥d
b
、公钥p
b
、己方临时私钥r
b
、己方临时公钥r
b
、对方临时公钥r
a
、对方公钥p
a
计算出秘密值v用于生成共享密钥k
b

[0021]
优选所述第1共享密钥生成模块(15)使用kdf算法由所述秘密值u及公开参数生成所需长度的共享密钥k
a

[0022]
所述第2共享密钥生成模块(25)使用kdf算法由所述秘密值v及公开参数生成所需长度的共享密钥k
b

[0023]
优选所述通信方a和通信方b还分别包括第1信息验证模块(16)和第2信息验证模块(26),
[0024]
所述第1信息验证模块(16)和所述第2信息验证模块(26)通过信息传递确认双方生成的共享密钥k
a
和k
b
相同。
[0025]
优选所述第1信息验证模块(16)和所述第2信息验证模块(26)利用哈希算法、mac算法、对称密码算法中的任意算法作用在共享密钥和一些其他双方都知道的信息上进行验证。
[0026]
第二技术方案为一种密钥协商方法,其特征在于:通信双方通过互相传递信息,共同协商出一个共享密钥,通信方a包括以下步骤,
[0027]
步骤a1:产生随机数r
a
∈[1,n

1],
[0028]
步骤a2:计算椭圆曲线点r
a
=[r
a
]g=(x1,y1),
[0029]
步骤a3:计算椭圆曲线点x=r
a
+[π]m,其中+为椭圆曲线上的点加运算,如果[h]x是无穷远点,则回到步骤a1,重复以上步骤,直至[h]x不是无穷远点,
[0030]
步骤a4:将椭圆曲线点x发送给通信方b,并接收通信方b发送的椭圆曲线点y,
[0031]
步骤a5:计算椭圆曲线点r
b
=y

[π]n,其中

为椭圆曲线上的点减运算,并验证r
b
是否满足椭圆曲线方程,若不满足进入步骤a13,判定协商失败;否则进入步骤a6继续协商共享密钥,
[0032]
步骤a6:从r
b
中取出域元素x2,将x2的数据类型转化为整数,计算其中
[0033]
步骤a7:从r
a
中取出域元素x1,将x1的数据类型转化为整数,计算
[0034]
步骤a8:计算
[0035]
步骤a9:计算椭圆曲线点
[0036]
如果u是无穷远点,进入步骤a13,判定协商失败;否则进入步骤a10,
[0037]
步骤a10:计算共享密钥k
a
=kdf(x
u
||y
u
||z
a
||z
b
,klen),其中z
a
和z
b
为公开可计算的通信方a、b对应的杂凑值,klen为约定的共享密钥的长度,
[0038]
通信方b包括以下步骤,
[0039]
步骤b1:产生随机数r
b
∈[1,n

1],
[0040]
步骤b2:计算椭圆曲线点r
b
=[r
b
]g=(x2,y2),
[0041]
步骤b3:计算椭圆曲线点y=r
b
+[π]n,其中+为椭圆曲线上的点加运算,
[0042]
如果[h]y是无穷远点,则回到b1;重复以上步骤,直至[h]y不是无穷远点,椭圆曲线点y发送给通信方a,
[0043]
步骤b4:根据通信方a发送的椭圆曲线点x计算椭圆曲线点r
a
=x

[π]m,其中

为椭圆曲线上的点减运算,
[0044]
并验证r
a
是否满足椭圆曲线方程,若不满足则进入步骤b14,判定协商失败;否则进入步骤b5继续协商共享密钥,
[0045]
步骤b5:从r
a
中取出域元素x1,将x1的数据类型转化为整数,计算其中
[0046]
步骤b6:从r
b
中取出域元素x2,将x2的数据类型转化为整数,计算
[0047]
步骤b7:计算
[0048]
步骤b8:计算椭圆曲线点
[0049]
如果v是无穷远点,进入步骤以b14,共享密钥协商失败;否则进入步骤b9,
[0050]
步骤b9:计算共享密钥k
b
=kdf(x
v
||y
v
||z
a
||z
b
,klen),其中z
a
和z
b
为公开可计算的通信方a、b对应的杂凑值,klen为约定的共享密钥的长度。
[0051]
优选所述通信方a还包括以下步骤:
[0052]
步骤a11:计算
[0053]
s1=hash(0x02||y
u
||hash(x
u
||z
a
||z
b
||x1||y1||x2||y2)),并根据通
[0054]
信方b发送的s
b
,检验s1=s
b
是否成立,若不成立则从用户b到用户a的密钥确认失败,若成立则进入步骤a12,
[0055]
步骤a12:计算
[0056]
s
a
=hash(0x03||y
u
||hash(x
u
||z
a
||z
b
||x1||y1||x2||y2)),并将s
a
发送给通信方b,
[0057]
通信方b包括以下步骤,
[0058]
步骤b10:计算
[0059]
s
b
=hash(0x02||y
v
||hash(x
v
||z
a
||z
b
||x1||y1||x2||y2));
[0060]
步骤b11:将s
b
或与椭圆曲线点y一起发送给通信方a;
[0061]
步骤b12:计算
[0062]
s2=hash(0x03||y
v
||hash(x
v
||z
a
||z
b
||x1||y1||x2||y2)),
[0063]
并根据通信方a发送的s
a
,检验s2=s
a
是否成立,如果成立,确认通信a到b的密钥协商成功,若不成立则判定从用户a到b的密钥协商失败。
[0064]
技术效果:
[0065]
本发明基于sm2算法实现了口令认证密钥交换协议,通过两轮或者三轮信息传递(密钥确认流程可选),把双方共享的口令转变成安全级别更高的所需长度的共享密钥。通信双方各自产生临时私钥,计算出临时公钥、口令公钥,在这两者的基础上计算出一个组合公钥并传递给对方。双方接收到对方的组合公钥后,利用口令恢复出对方临时公钥,利用己方公私密钥对、己方临时公私密钥对、对方临时公钥、对方公钥计算出一个共同的秘密值,并在此基础上根据约定的算法计算出共享密钥。
[0066]
本发明在sm2算法的基础上,能够完成基于私钥和口令的双重身份认证,能够有效抵抗中间人攻击,比现有的口令认证密钥交换协议更加安全,同时也能够满足通信双方利用口令来协商共享密钥的应用场景的需求。同时本发明也能扩展到其他ecc椭圆曲线密码系统上。
附图说明
[0067]
图1为第1实施例的密钥协商系统的结构框图;
[0068]
图2为第1实施例的密钥协商方法的流程图;
[0069]
图3为第2实施例的密钥协商系统的结构框图;
[0070]
图4为第2实施例的密钥交换协议流程图。
具体实施方式
[0071]
本发明提供了许多可应用的创造性概念,该创造性概念可大量的体现于具体的上下文中。在下述本发明的实施方式中描述的具体的实施例仅作为本发明的具体实施方式的示例性说明,而不构成对本发明范围的限制。
[0072]
本发明为一种在椭圆曲线上实现口令认证密钥交换协议的方案。两个用户通过交互的信息传递,用己方的公私密钥对、对方的公钥以及口令来商定一个只有他们知道的共享密钥。这个共享密钥通常作为某个对称密码算法密钥,用于后续建立一个安全强度更高的通信通道。
[0073]
基本原理为:选定有限域上的一条椭圆曲线以及三个属于该椭圆曲线的随机点,要求这些点能生成一个很大的子群,这个子群最好和椭圆曲线本身所构成的群一样大或者
比较接近。记这三个随机点为g、m、n。其中,g作为椭圆曲线的基点,其阶为素数n,h为余因子,m、n作为公开的点参数。
[0074]
通信的双方为a和b,各自的私钥分别为d
a
、d
b
,公钥为p
a
、p
b
,用户a和b之间共享一个秘密口令π∈[1,n

1]。π可以通过双方共享的短口令串联公共参数(如双方公开信息或者盐值)经过hash函数计算,然后通过处理到合适的范围得到。当用户a和用户b通信时,通过以下操作协商共享密钥,用于后续的安全通信,例如车联网场景中数字钥匙与车辆之间的基于口令的密钥协商和安全通信。
[0075]
通信方a产生一个随机数r
a
作为临时私钥(第1私钥),将随机数r
a
乘以基点g得到r
a
=[r
a
]g作为临时公钥(第1公钥)。将秘密口令π乘以公开点m得到口令公钥[π]m;由临时公钥r
a
和口令公钥[π]m生成组合公钥x(第1组合公钥),组合公钥x通过网络传输给通信方b。通信方a在生成组合公钥x时,需要确保组合公钥x并不是无穷远点,否则需重新生成临时私钥。
[0076]
通信方b同样产生一个随机数r
b
作为临时私钥(第2私钥),将随机数r
b
乘以基点g得到r
b
=[r
b
]g作为临时公钥(第2公钥)。将秘密口令π乘以公开点n得到口令公钥[π]n;由临时公钥r
b
和口令公钥[π]n生成组合公钥y(第2组合公钥),组合公钥y通过网络传输给通信方a。通信方b同样需要确保组合密码y并不是无穷远点,否则需重新生成临时私钥。
[0077]
通信方a接收到组合公钥y后,计算出通信方b的口令公钥[π]n,由组合公钥y中恢复出通信方b的临时公钥r
b
(第2公钥)。由私钥d
a
、公钥p
a
、己方临时私钥r
a
、己方临时公钥r
a
、对方临时公钥r
b
、对方公钥p
b
计算出一个秘密值v,用于生成共享密钥k
a
。例如可使用约定的kdf算法或者hash算法由该秘密值v和一些公开参数生成所需长度的共享密钥k
a

[0078]
通信方b接收到组合公钥x后,计算出通信方a的口令公钥[π]m,由组合公钥x中恢复出通信方a的临时公钥r
a
(第1公钥)。由私钥d
b
、公钥p
b
、己方临时私钥r
b
、己方临时公钥r
b
、对方临时公钥r
a
、对方公钥p
a
计算出同一个秘密值v,生成共享密钥k
b
。例如可以使用相同的kdf算法或者hash算法由该秘密值v及公开参数生成所需长度的共享密钥k
b

[0079]
这样,通信方a和b通过两次通信,生成共享密钥k
a
(也就是k
b
)。
[0080]
作为密钥确认流程,用户a、b可以利用hash算法、mac算法、对称密码算法等,通过加一轮信息传递,以确认双方生成的共享密钥k
a
和k
b
是否一致,该步骤是可选的。
[0081]
下面进一步阐述上述步骤中可以灵活选择的部分:
[0082]
本发明中的hash算法可以选用常见的hash算法,如国密sm3算法或者sha256算法等。
[0083]
kdf算法又叫密钥派生算法,它的作用是从一个共享的秘密比特串中派生出密钥数据。在密钥协商过程中,密钥派生算法作用在密钥交换所获共享的秘密比特串上,从中产生所需的会话密钥或进一步加密所需的密钥数据。密钥派生函数可以选择sm2算法中的kdf算法等。
[0084]
由临时公钥和口令公钥生成组合公钥的计算过程,只需要满足能够从组合公钥和口令公钥反推出临时公钥,并且三者都非平凡地参与运算即可。例如,可以采用点加计算,组合公钥等于临时公钥加上口令公钥,在后续从组合公钥和口令公钥计算临时公钥的过程中,临时公钥等于组合公钥减去口令公钥;也可以采用点减运算,组合公钥等于临时公钥减去口令公钥,那么在后续从组合公钥和口令公钥计算临时公钥的过程中,临时公钥就等于
组合公钥加上口令公钥。
[0085]
由己方公私密钥对、己方临时公私密钥对、对方临时公钥、对方公钥计算出一个秘密点的计算过程记为f,该过程只需要满足:
[0086]
a.f(d
a
,p
a
,r
a
,r
a
,r
b
,p
b
)=f(d
b
,p
b
,r
b
,r
b
,r
a
,p
a
),也就是
[0087]
通信双方通过f函数生成同一个秘密值z;
[0088]
b.双方临时公钥和对方公钥须非平凡地参与计算;
[0089]
c.须不影响椭圆曲线对应的安全强度。
[0090]
例如,可以选择sm2算法密钥交换协议中的同一计算过程。
[0091]
密钥确认流程只需要确保双方生成了相同的共享密钥即可,可以利用hash算法、mac算法、对称密码算法等作用在共享密钥以及双方都知道的其他共享信息上。
[0092]
以下通过具体实施例对本发明的技术方案进行说明。
[0093]
第1实施例:
[0094]
第1实施例中,椭圆曲线参数为sm2椭圆曲线公钥密码算法系统参数:其中,g为椭圆曲线的基点,其阶为素数n,h为余因子。此外,任意选定两个椭圆曲线上的点m、n作为公开参数。hash算法、kdf算法以及共享秘密点的生成函数f都与sm2算法密钥交换协议中一致。
[0095]
图1为第1实施例1的密钥协商系统的结构框图。
[0096]
通信方a由以下模块组成:第1私钥生成模块11、第1公钥生成模块12、第1组合公钥生成模块13、第1信息恢复模块14、第1共享密钥生成模块15、第1信息验证模块16、第1通信模块17。
[0097]
通信方b由以下模块组成:第2私钥生成模块21、第2公钥生成模块22、第2组合公钥生成模块23、第2信息恢复模块24、第2共享密钥生成模块25、第2信息验证模块26、第2通信模块27。
[0098]
通信的双方为a和b,各自的私钥分别为d
a
、d
b
,公钥为p
a
、p
b
,用户a和b之间共享一个秘密口令π∈[1,n

1]。π可以通过双方共享的短口令串联公共参数(如双方公开信息或者盐值)经过hash函数计算,然后通过处理到合适的范围得到。当通信方a和通信方b通信时,通过以下操作协商共享密钥,用于后续的安全通信,例如车联网场景中数字钥匙与车辆之间的基于口令的密钥协商和安全通信。
[0099]
通信方a:
[0100]
第1私钥生成模块11产生一个随机数r
a
作为临时私钥(第1临时密钥),第1公钥生成模块12将临时私钥r
a
乘以基点g得到r
a
=[r
a
]g作为临时公钥(第1临时公钥)。第1组合公钥生成模块13将秘密口令π乘以公开点m得到口令公钥[π]m;由临时公钥r
a
和口令公钥[π]m生成组合公钥x(第1组合公钥)。组合公钥x通过第1通信模块17传送给通信方b。在生成组合公钥x时,通信方a需要确保组合公钥x并不是无穷远点,否则需重新生成临时私钥。
[0101]
第1信息恢复模块14接收通信方b发送的组合公钥y,计算出通信方b的口令公钥[π]n,由组合公钥y中恢复出通信方b的临时公钥r
b
(第2临时公钥)。
[0102]
第1共享密钥生成模块15由私钥d
a
、公钥p
a
、己方临时私钥r
a
、己方临时公钥r
a
、对方临时公钥r
b
、对方公钥p
b
计算出一个秘密值u,用于生成共享密钥。本实施例使用约定的kdf算法由该秘密值u和一些公开参数生成所需长度的共享密钥k
a

[0103]
第1信息验证模块16确认通信方a与b的共享密钥是否一致。
[0104]
通信方b:
[0105]
第2私钥生成模块21产生一个随机数r
b
作为临时私钥(第2临时密钥),第2公钥生成模块22将临时私钥r
b
乘以基点g得到r
b
=[r
b
]g作为临时公钥(第2临时公钥)。第2组合公钥生成模块23将秘密口令π乘以公开点n得到口令公钥[π]n;由临时公钥r
b
和口令公钥[π]n生成组合公钥y(第2组合公钥)。组合公钥y通过第2通信模块27传送给通信方a。通信方b同样需要确保组合公钥y并不是无穷远点,否则需重新生成临时私钥。
[0106]
第2恢复模块24接收通信方a发送的组合公钥x,计算出通信方a的口令公钥[π]m,由组合公钥x中恢复出通信方a的临时公钥r
a
[0107]
(第1临时公钥)。
[0108]
第2共享密钥生成模块25由私钥d
b
、公钥p
b
、己方临时私钥r
b
、己方临时公钥r
b
、对方临时公钥r
a
、对方公钥p
a
计算出同一个秘密值v,生成共享密钥k
b
。本实施例使用相同的kdf算法由该秘密值v及公开参数生成所需长度的共享密钥k
b

[0109]
第2信息验证模块26确认通信方a与b的共享密钥是否一致。
[0110]
图2为第1实施例的密钥交换协议的流程图;
[0111]
用户a的公私钥对为(d
a
,p
a
),其中d
a
为私钥,p
a
为公钥,用户b的公私钥对为(d
b
,p
b
),其中d
b
为私钥,p
b
为公钥。z
a
和z
b
为公开可计算的用户a、b对应的杂凑值。用户a、b共享一个秘密口令π∈[1,n

1],计划协商获得的密钥数据长度为klen比特,用户a为发起方,用户b为响应方。用户a、b双方基于如下运算步骤获得相同的密钥。实施例中,
[0112]
通信方a包括以下步骤。
[0113]
步骤a1:第1私钥生成模块11产生随机数r
a
∈[1,n

1]。
[0114]
步骤a2:第1公钥生成模块12计算椭圆曲线点r
a
=[r
a
]g=(x1,y1)。
[0115]
步骤a3:第1组合公钥生成模块13计算椭圆曲线点
[0116]
x=r
a
+[π]m,如果[h]x是无穷远点,则回到步骤a1,重复以上步骤,直至[h]x不是无穷远点。
[0117]
步骤a4:第1通信模块17将椭圆曲线点x发送给通信方b,并接收通信方b发送的椭圆曲线点y。
[0118]
步骤a5:第1信息恢复模块14计算椭圆曲线点r
b
=y

[π]n,并验证r
b
是否满足椭圆曲线方程,若不满足进入步骤a13,判定协商失败;否则进入步骤a6继续协商共享密钥。
[0119]
步骤a6:第1共享密钥生成模块15从r
b
中取出域元素x2,将x2的数据类型转化为整数,计算
[0120]
步骤a7:第1共享密钥生成模块15从r
a
中取出域元素x1,将x1的数据类型转化为整数,计算
[0121]
步骤a8:第1共享密钥生成模块15计算
[0122]
步骤a9:第1共享密钥生成模块15计算椭圆曲线点
[0123]
如果u是无穷远点,进入步骤a13,判定协商失败;否则按照gm/t 0003

2012中给出的方法将x
u
、y
u
的数据类型转化为比特串,进入步骤
a10。
[0124]
步骤a10:第1共享密钥生成模块15计算共享密钥
[0125]
k
a
=kdf(x
u
||y
u
||z
a
||z
b
,klen)。
[0126]
步骤a11:第1信息验证模块16将相应数据的数据类型转化为比特串,计算
[0127]
s1=hash(0x02||y
u
||hash(x
u
||z
a
||z
b
||x1||y1||x2||y2)),并根据通信方b发送的s
b
,检验s1=s
b
是否成立,若不成立则从通信方b到通信方a的密钥确认失败,若成立则进入步骤a12。
[0128]
步骤a12:第1信息验证模块16计算
[0129]
s
a
=hash(0x03||y
u
||hash(x
u
||z
a
||z
b
||x1||y1||x2||y2)),并通过第1
[0130]
通信模块17将s
a
发送给通信方b。
[0131]
通信方b包括以下步骤。
[0132]
步骤b1第2私钥生成模块21产生随机数r
b
∈[1,n

1]。
[0133]
步骤b2:第2公钥生成模块22计算椭圆曲线点r
b
=[r
b
]g=(x2,y2)。
[0134]
步骤b3:第2组合公钥生成模块23计算椭圆曲线点y=r
b
+[π]n,如果[h]y是无穷远点,则回到b1;重复以上步骤,直至[h]y不是无穷远点。
[0135]
步骤b4:第2恢复模块24根据通信方a发送的椭圆曲线点x计算椭圆曲线点r
a
=x

[π]m,并验证r
a
是否满足椭圆曲线方程,若不满足则进入步骤b14,判定协商失败;否则进入步骤b5继续协商共享密钥。
[0136]
步骤b5:第2共享密钥生成模块25从r
a
中取出域元素x1,将x1的数据类型转化为整数,计算
[0137]
步骤b6:第2共享密钥生成模块25从r
b
中取出域元素x2,将x2的数据类型转化为整数,计算
[0138]
步骤b7:第2共享密钥生成模块25计算
[0139]
步骤b8:第2共享密钥生成模块25计算椭圆曲线点步骤b8:第2共享密钥生成模块25计算椭圆曲线点如果v是无穷远点,那么进入步骤以b14,共享密钥协商失败;否则按照gm/t 0003

2012中给出的方法将x
v
、y
v
的数据类型转化为比特串,进入步骤b9。
[0140]
步骤b9:第2共享密钥生成模块25计算
[0141]
k
b
=kdf(x
v
||y
v
||z
a
||z
b
,klen)。
[0142]
步骤b10:第2信息验证模块26将相应数据的数据类型转化为比特串,计算s
b
=hash(0x02||y
v
||hash(x
v
||z
a
||z
b
||x1||y1||x2||y2))。
[0143]
步骤b11:第2通信模块27将椭圆曲线点y、s
b
发送给通信方a。
[0144]
步骤b12:第2信息验证模块26计算
[0145]
s2=hash(0x03||y
v
||hash(x
v
||z
a
||z
b
||x1||y1||x2||y2)),
[0146]
并根据通信方a发送的s
a
,检验s2=s
a
是否成立,如果成立,进入步骤b13,确认通信方a到b的密钥协商成功,若不成立则进入步骤b14判定从通信方a到b的密钥协商失败。
[0147]
以上以实施例为例对本发明技术方案进行了说明。由上可知本发明主要是基于sm2算法实现了口令认证密钥交换协议,通过两轮或者三轮信息传递,把双方共享的口令转
变成安全级别更高的所需长度的共享密钥。信息交换双方能够基于各自的秘密值(己方私钥、临时私钥、口令)和公开值(双方公钥、组合公钥)能够计算出一个共同的秘密值。即,
[0148]
1.双方各自产生临时私钥,计算出临时公钥、口令公钥,在这两者的基础上计算出一个组合公钥并传递给对方。
[0149]
2.双方接收到对方的组合公钥后,利用口令恢复出对方临时公钥,利用己方公私密钥对、己方临时公私密钥对、对方临时公钥、对方公钥计算出一个共同的秘密值,并在此基础上根据约定的算法计算出共享密钥。
[0150]
3.双方通过增加一轮信息传递可以确保双方已经计算出相同的共享密钥,该密钥确认流程不是必要的,可以根据需求选择。
[0151]
本发明的技术方案可应用于基于一个简单口令建立一个更安全的通信通道的应用场景中,如车联网场景中数字钥匙与车辆基于口令的密钥协商。
[0152]
本发明基于sm2算法密钥交换协议,构造了一种新的基于口令认证的密钥交换协议。与已有的算法比较而言,sm2算法密钥交换协议中通信双方基于对各自私钥的掌握来实现双方的认证,最后协商出共享密钥;spake2算法则基于的是双方都拥有的口令实现相互认证从而协商出共享密钥。本发明综合了以上两种算法的优点,采用的是基于对私钥以及口令这两个因素的掌握来实现双方的相互认证,经过两轮或者三轮的信息交换,协商出所需求长度的共享密钥。
[0153]
本发明与现有的密钥协商算法相比具有以下优点:
[0154]
1.相比于dh算法、ecdh算法,本发明能够天然抵抗中间人攻击。
[0155]
2.相比于spake2算法,本发明有基于口令和私钥的双重认证,相比于单纯的基于口令认证,安全强度更高。
[0156]
3.相比于sm2密钥交换协议,本发明添加了口令认证的部分,更适用于基于口令实现更高级别安全通道建立的应用场景中。
[0157]
以下对第2实施例进行说明。
[0158]
第2实施例
[0159]
图3为第2实施例的密钥协商系统的结构框图,图4为第2实施例的密钥交换协议流程图。
[0160]
第2实施例与第1实施例相比省略了第1信息验证模块和第2信息验证模块以及计算s1、s2、s
a
、s
b
和验证的步骤,其他与第1实施例相同。与第1实施例相比,第2实施例可减少通信方a和b的信息传送的次数。
[0161]
应该注意的是,上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1