高效、不可锻造、不需数字签名的ssh运输层认证协议的制作方法

文档序号:7891001阅读:252来源:国知局
专利名称:高效、不可锻造、不需数字签名的ssh运输层认证协议的制作方法
技术领域
本发明属于密码协议,具体涉及一种高效、不可锻造、不需数字签名的SSH(SecureShell)运输层(Transport Layer)认证协议(Authentication Protocol)。

背景技术
SSH运输层认证协议是保护互联网信息安全,特别是在基于UNIX或Linux操作系统的分布式客户-服务器环境下的信息安全的核心认证密码协议。SSH运输层认证协议用以使得一个客户安全地登录至一个远程的服务器,以便安全地在远程服务器上下载文件或安全地在远程服务器上运行指令。
目前的SSH运输层认证协议工业标准是IETF(Internet Engineering Task Force)在2002年9月公布的,由T.Ylonen所提出的互联网草案(INTERNET-DRAFT)draft-ietf-transport-15.txt。
目前的SSH运输层认证协议工业标准基于Diffie-Hellman密钥交换,并且远程服务器使用数字签名向客户认证身份。目前SSH运输层认证协议工业标准核心密码协议如下 第一轮客户“A”向服务器发送X=gx。
第二轮服务器“B”向客户发送{B,Y=gy,sig}。其中,B=gb是服务器“B”的公钥,b为服务器“B”的私钥;sig是服务器“B”利用私钥b对信息Hash(pub,sid,B,X,Y,Xy)应用数字签名标准(Digital Signature Standard)算法所得到的数字签名;其中Hash是一个哈西函数,sid是会话标示符(sid实际上为客户和服务器在协议运行之前所交换的两个随机数的串联),pub是其它与协议运行相关的信息(一般包括协议版本,客户和服务器所支持的密码算法、安全参数等)。会话密钥设为K=HK(Xy)=HK(gxy)。
收到服务器“B”返回的第二轮信息后,客户“A”验证服务器“B”的公钥B的有效性,验证sig是否为服务器对Hash(pub,sid,B,X,Y,Yx)的签名;如果验证失败,客户“A”中止协议;验证成功,客户“A”计算会话密钥K=HK(Yx)=HK(gxy)。
目前的SSH运输层认证协议工业标准的不足之处为因为使用数字签名机制来认证远程服务器的身份,导致协议的通讯复杂性和计算复杂性较高,不够理想。比如,以目前的数字签名标准(Digital Signature Standard)为例(因为数字签名标准是基于离散对数的,因此服务器“B”的公钥自然也是基于离散对数的),其通讯复杂性(即签名的长度)为2q,签名者(即服务器“B”)需作一个指数运算,而签名验证者(即客户“A”)需作至少1.5个指数运算,而且无论是签名还是签名的验证均不能够离线事先计算。如果加上DH密钥成分的计算与会话密钥的计算,客户“A”总的计算复杂性为3.5个指数运算,服务器“B”总的计算复杂性为3个指数运算。


发明内容
本发明的目的在于提供一种高效、不可锻造、不需数字签名的SSH运输层认证协议,以降低目前SSH运输层认证协议的(在线on-line)计算复杂性(computational complexity)和通讯复杂性(communication complexity)。
本发明协议具有如下特点 本发明提供两种不同的不需数字签名的SSH运输层认证协议实现方法,提供比目前SSH运输层认证协议工业标准更优的(在线)计算复杂性和通讯复杂性。
第一种不需数字签名的实现方法为会话密钥K以及MAC-密钥Km由KB=Xdb+ey=BdxYex=KA导出。这种方法的关键之处为e必须承诺绑定与协议运行相关的所有公开信息,即e=H(sid,IA,IB,B,X,Y,pub),d为1或其输入不包含Y。这种方法的优点为除了必须的DH-密钥成分X、Y的计算之外(DH-密钥成分X、Y可以事先离线计算),服务器“B”可只作一个指数运算,即KB=Xdb+ey,从而大大减轻服务器的计算量,避免在服务器端出现计算和通讯的“瓶颈”;客户“A”可以事先离线计算Bdx和DH-密钥成分X,因此客户“A”也只需在线作一个指数运算,即Yex。对于总的计算复杂性,注意到KA=BdxYex的计算相当于1.5个(这与数字签名标准的签名验证算法的计算复杂度一致),因此客户“A”的总的计算复杂性为2.5个指数运算,而服务器“B”的总的计算复杂度为2个指数不需运算(当服务器不进行X的阶q检查)或2.5个指数运算(当服务器进行X的阶q检查)。注意KB=Xdb+ey与Xq的可以并行计算,其计算复杂度为1.5个指数运算。对于通讯复杂性,除了必须的DH-密钥成分传输外,服务器发送MACKm(0)以确认会话密钥(即服务器确认期的确知道b和y)。因此,这种方法仅增加额外的q-位的传输信息,即MACKm(0)。注意,目前SSH运输层认证协议的额外通讯复杂性(即数字签名)至少为2q位。显然,这种不需数字签名的实现方法提供比目前SSH运输层认证协议工业标准更优的(在线)计算复杂性和通讯复杂性,并更适合减轻服务器的计算量从而避免计算“瓶颈”在服务器端出现。
第二种不需数字签名的实现方法为会话密钥由gxy、gxb导出。为此,除了必须的DH-密钥成分X、Y的计算之外(DH-密钥成分X、Y可以事先离线计算),客户“A”需计算Bx和Yx;因为Bx和DH-密钥成分X可以事先离线计算,客户“A”实际上只需在线作一个指数运算,即Yx。服务器“B”需在线计算Xb和Xy,注意Xb和Xy的并行计算相当于1.5个指数运算,因此服务器“B”的在线计算复杂性为1.5个指数运算。对于总的计算复杂性,客户“A”需作3个指数运算,服务器“B”需作2.5个指数运算。与目前的SSH运输层认证协议工业标准相比较,第二种方法仍然提供较优的计算复杂性。
本发明协议的系统工作环境为 (1).系统参数系统参数(p,q,g,H,HK MAC),其中p和q为大素数,并且q能整除p-1,g是一个Z*p中阶(order)为q的元素,使得在Z*p中由g定义的子群上离散对数(discrete logarithm DL)及计算Diffie-Hellman(computational Diffie-Hellman CDH)问题是难的。一般而言,p的长度为1024位或2048位,q的长度为160或1024。所有的指数运算及(不在指数上的)乘法运算是模(mod)p运算,加法及指数上的乘法为模(mod)q运算(比如gdb表示gdb mod q modp)。这里,Z*p指的是所有比p小并与p互素的正整数的集合,即Z*p={1,2,…,p-1}。定义函数DLZq→Z*p,使得X=DL(x)=gx mod p。x称为X的离散对数。我们要求给定随机计算出的X,没有多项式时间算法计算出X的离散对数x,这称为离散对数问题。计算Diffie-Hellman问题指的是给定随机的X=gx与Y=gy,没有多项式时间算法计算出gxy。一般而言,对于熟悉本领域的人而言,离散对数问题及计算Diffie-Hellman问题也可以定义在由椭圆曲线或双线性对(bilineartity)定义的群上。H是从{0,1}*→{0,1,2,…,q-1}的哈西函数。为增加计算速度,H的输出长度可以为l=(log2q+1)/2。HK是从{0,1}*→{0,1}k的哈西函数,k是会话密钥的长度,比如k=128或160。对于字符串s1,…,sm,m>1,H(s1,s2,…,sm)表示的是将s1,…,sm用二进制0-1串来表示,然后将所有的0-1串连接(即,串联)起来,最后将串联后得到的串作为H的输入(元素的串联顺序可以变化)。MAC是一个消息认证码算法。
(2).系统运行在分布式的客户-服务器(Client-Server)网络中。除非有特别说明,具有身份ID IA的用户“A”代表一个客户(Client),客户不一定有公钥。具有ID IB的用户“B”代表服务器(Server),服务器“B”有一个基于离散对数的公钥记为B=gb mod p,其中私钥b由服务器“B”从Zq={0,1,…,q-1}中随机选取。我们假设客户“A”已经通过某种方式获取了服务器“B”的公钥。
(3).协议基于Diffie-Hellman密钥交换协议。记X=gx mod p为客户“A”的DH密钥成分,x为DH密钥成分X的离散对数,x由客户“A”从Zq={0,1,…,q-1}中随机选取;记Y=gymod p为服务器“B”的DH密钥成分,y为DH密钥成分Y的离散对数,y由服务器“B”从Zq={0,1,…,q-1}中随机选取。假设客户“A”为协议的发起者,服务器“B”为协议的响应者;即客户“A”在第一轮发送X;在收到X后服务器“B”检查X为Z*p中的非1元素并在第二轮发送Y;收到Y后,客户“A”检查Y为Z*p中的非1元素。
(4).协议的每一次执行称为一个会话(session)。我们假定协议的每一次执行(即,每一次会话)有一个标示号(session-identifier)sid,用于标记并发运行的协议执行。sid的制定和协商可随协议的运行环境不同而有所变化比如sid可以是协议运行两方发送的两个随机串的合并连接。一般而言,sid包含在协议运行之前用户交换的信息或交换信息的哈西值。在某些环境中sid可在协议运行过程中产生;在某些环境中当会话可由语境自动标示时sid亦可省略,例如在Diffie-Hellman密钥交换应用中,DH密钥成分(X=gx,Y=gy)可兼当会话标示号。
(5).与协议执行相关的其它信息pub除了(sid,IA,IB,B=gb,X=gx,Y=gy)外,其它与协议执行相关的信息用pub来表示。pub是一个字符串,一般是协议版本、协议执行之前用户所交换信息或交换信息的哈西值、用户的IP地址、时间戳等的串联。pub可以为空。在所有具有MAC的协议实现中,为了提高计算效率,可仅仅将pub作为MAC的输入一部分,而不作为H、HK的输入。
协议实现方法 根据会话密钥的不同计算方式,有两种协议实现方法 (1).协议实现方法-1客户“A”在第一轮发送X=gxmodp。在收到X后,服务器“B”检查X为Z*p中的阶为q的非1元素;检查不成功,服务器“B”中止协议执行;检查成功,服务器“B”在第二轮发送B=gb mod p、Y=gy mod p、计算KB=Xdb+ey mod q mod p和Km=HK(e,KB)并通过发送MACKm(0)来向客户“A”证明其知道b及y。其中,d=H(sid,IA,IB,B,X,pub)或1,e=H(sid,IA,IB,B,X,Y,pub)。服务器“B”计算会话密钥K=HK(KB,e)。
收到服务器“B”发送的第二轮信息后,客户“A”计算KA=Bdx mod q Yex mod q mod p及Km=HK(e,KA)并验证第二轮信息的有效性(即验证公钥B的有效性、Y为Z*p中的非1元素、以及MACKm(0)的有效性)。任何验证不成功,客户“A”中止协议;验证成功,客户“A”计算会话密钥K=HK(KA,e)。为了进一步确认客户“A”知道会话密钥,客户“A”可在第三轮发送MACKm(1)或EK(w),其中E为一个私钥加密算法(比如DES或AES分组密码算法),w为客户与服务器事先建立的秘密口令。
注意函数d的输入不包含Y,因此客户“A”可以事先计算X、d及Bdx mod q mod p。服务器“B”可以事先计算Y。如果服务器“B”不检查X的阶q,鉴于小群攻击风险,当Y事先计算时则y必须保存在安全的模块中并在计算KB=Xdb+ey mod q mod p后马上删除。
(2).协议实现方法-2客户“A”在第一轮发送X=gx mod p及HK(sid,IA,IB,B,X,Bx);客户“A”可以事先计算X及Bx。收到客户“A”发送的第一轮信息后,服务器“B”检查X为Z*p中的非1元素并利用Xb检查是否HK(sid,IA,IB,B,X,Bx,pub)=HK(sid,IA,IB,B,X,Xb,pub)。验证不成功,服务器“B”中止协议运行或返回一个随机数;验证成功,服务器“B”在第二轮发送HK(sid,IB,B,IA,Y,X,Xy,Xb)。会话密钥K由HK(gxy)或HK(gxy,gxb)导出。为了进一步确认客户“A”知道会话密钥,客户“A”可在第三轮发送HK(sid,IA,IB,B,X,Y,Yx)或EK(w),其中E为一个私钥加密算法(比如DES或AES分组密码算法),w为客户与服务器事先建立的秘密口令。
本发明协议的具体实现步骤 在下述协议描述中,大括号内的值表示发送的信息。注意服务器“B”的公钥是B=gb并且我们假设客户“A”已经通过某种安全的方式获得服务器的公钥B。假设客户“A”为协议运行初始者,服务器“B”为协议运行响应者。
协议-1 事先计算客户“A”可以事先计算X=gx mod p、d=H(sid,IA,IB,B,X,pub)或1、Bdx mod q mod p。服务器“B”可以事先计算Y=gy mod p。其中,x和y从Zq中随机选取,e=H(d,Y)或e=H(sid,IA,IB,B,X,Y,pub),X称为“A”的DH密钥成分,Y称为“B”的DH密钥成分。如果服务器“B”不检查X的阶q,鉴于小群攻击风险,当Y事先计算时则y必须保存在安全的模块中并在计算出db+ey后马上删除。
第一轮,从“A”到“B”{sid,IA,X=gx(mod p)}。
收到客户“A”发送的信息后,服务器“B”验证“A”的身份、X为Z*p中的阶为q的非1元素(即验证X∈Z*p且X≠1且Xq=1 mod p)。验证不成功,服务器“B”拒绝继续执行协议;验证成功,服务器“B”计算KB=Xdb+ey mod q mod p并删除掉y及db+ey;计算MAC-密钥Km=HK(e,KB)及会话密钥K=HK(KB,e),然后删除掉KB并进入下一轮。
第二轮,从“B”到“A”{sid,IB,B,Y=gy,MACKm(0)}。
收到服务器“B”发送的信息后,客户“A”验证“B”的身份及公钥,Y为Z*p中的非1元素。验证不成功,客户“A”中止协议;验证成功,客户“A”计算KA=Bdx mod qYex mod q mod p及Km=HK(e,KA)并验证MACKm(0)的有效性。MACKm(0)验证成功,客户“A”计算会话密钥K=HK(KA,e),删除掉x、Bdx、Yex、KA。
协议-2 事先计算客户“A”可以事先计算X=gx mod p及Bx mod p;服务器“B”可以事先计算Y=gy mod p。其中,x和y从Zq中随机选取,X称为“A”的DH密钥成分,Y称为“B”的DH密钥成分。
第一轮,从“A”到“B”{sid,IA,X=gx mod p,HK(sid,IA,IB,B,X,Bx,pub)}。
收到“A”发送的信息后,“B”验证“A”的身份、X为Z*p中的非1元素。验证不成功,“B”拒绝继续执行协议;验证成功,服务器“B”计算Xb、Xy,验证HK(sid,IA,IB,B,X,Bx,pub)的有效性,即验证是否HK(sid,IA,IB,B,X,Bx,pub)=HK(sid,IA,IB,B,X,Xb,pub)。HK(sid,IA,IB,B,X,Bx,pub)验证不成功,服务器“B”中止协议运行或返回一个与HK(sid,IB,B,IA,Y,X,Xy,Xb,pub)长度相同的随机数;HK(sid,IA,IB,B,X,Bx,pub)验证成功,服务器“B”计算HK(sid,IB,B,IA,Y,X,Xy,Xb,pub),计算会话密钥K=HK(sid,IB,B,IA,Y,X,Xy,pub),删除掉y、Xb、Xy、并进入下一轮。
第二轮,从“B”到“A”{sid,IB,B, Y=gy,HK(sid,IB,B,IA,Y,X,Xy,Xb,pub)}。
收到服务器“B”发送的信息后,客户“A”验证“B”的身份及公钥,Y为Z*p中的非1元素。验证不成功,“A”中止协议;验证成功,客户“A”计算Yx,验证HK(sid,IB,B,IA,Y,X,Xy,Xb,pub)=HK(sid,IB,B,IA,Y,X,Yx,Bx,pub)。;验证不成功,客户“A”中止协议执行;验证成功,客户“A”计算会话密钥K=HK(sid,IB,B,IA,Y,X,Yx,pub),删除掉x、Bx、Yx。
本发明中,协议-1及协议-2有如下变体 (1).协议-1中函数d、e的其它计算方法令c=H(sid,IA,IB,B,pub)或H(IA,IB,B),计算d=H(c,X)或H(IA,IB,B,X)或1,e=H(c,X,Y)或H(d,Y)。
或者,d=H(sid,IA,IB,B,X,Y,pub)或H(c,X,Y)或H(e)或1,e=H(d)。
或者,将哈西函数H的输入中的元素的顺序进行变化;将sid或pub不作为H的输入。
(2).在协议-1中,会话密钥与MAC-密钥的其它计算形式K=HK(KA)=HK(KB)或K=HK(KA,1)=HK(KB,1);Km=HK(KA,0)=HK(KB,0)。
将c、d、e、以及sid与pub的部分或全部作为HK输入的一部分。
会话密钥与MAC-密钥由不同的哈西函数来实现,此时,不同哈西函数的输入中的元素顺序可以一致。
将K作为一个伪随机函数的密钥,将0、1、c、d、e、以及sid与pub的部分或全部作为伪随机函数的输入来导出会话密钥和MAC-密钥。
将哈西函数HK的输入中的元素的顺序进行变化。
(3).在协议-1中,将第二轮MACKm(0)换为MACKm(IB);将第三轮的MACKm(1)换为MACKm(IA)。将c、d、e、以及sid与pub的部分或全部作为MAC的输入,其关键点为在第二轮中的MAC的输入与第三轮中的MAC的输入必须不同。
在将MAC的输入同时放入HK的输入的前提下,将部分或全部MAC去掉,只用哈西函数HK进行绑定。
(4).在协议-1和协议-2中,用户“A”或“B”不进行事先计算。此时,在会话密钥和MAC密钥计算之前所保留的内部状态仅包括x或y,并且一旦会话密钥计算完毕,除用户私钥和会话密钥之外的所有在本次协议执行中所生成的内部状态数据立即被删除。
在协议-1中,当d=1且不进行事先计算时,KA=BdxYex的计算顺序为先计算BYe再计算(BYe)x。
(5).在协议-2中,客户“A”在第一轮不发送HK(sid,IA,IB,B,X,Bx,pub)。此时,在第二轮,当服务器“B”发现X不是Z*p中的阶q的非1元素时,中止协议执行,而不是返回一个随机数。
(6).在协议-2的实际应用中,定义DH-密钥成分的群,记为(p*,g*,q*),与定义服务器公钥B的群可能不同,即(p*,g*,q*)≠(p,g,q)。此时,X=g*x mod p*、Y=g*y mod p*,其中x和y在Zq*中随机选取。对于这种情况,客户“A”在第一轮除了发送定义在(p*,g*)上的DH-密钥成分X外,客户“A”在第一轮额外发送C=gc mod p,并将HK(sid,IA,IB,B,X,Bx,pub)换为HK(sid,IA,IB,B,X,C,Bc,pub)或不发送HK(sid,IA,IB,B,X,C,Bc,pub);将第二轮中的Xb换为Cb mod p。在这种情况,不需要对DH-密钥成分X和Y进行阶q检查。
(7).在协议-2中,令Km=HK(sid,IB,B,IA,Y,X,Xy,Xb)或Km=HK(Xy,Xb),将第二轮的HK(sid,IB,B,IA,Y,X,Xy,Xb)换为MACKm(0)或MACKm(sid,IB,B,IA,Y,X,pub);将第三轮的HK(sid,IA,IB,B,X,Y,Yx)换为MACKm(1);将第一轮中的HK(sid,IA,IB,B,X,Bx,pub)换为MACHK(Bx)(sid,IA,IB,B,X,pub)。将0,1以及sid,IA,IB,B,X,Y,pub的部分或全部作为MAC和HK的输入,其要点为在第一轮Bx或Bc必须作为HK的输入,在第二轮Xy和Xb必须作为HK的输入,在第三轮Xy必须作为HK的输入;当第二轮和第三轮使用相同的MAC-密钥时,第二轮中的MAC的输入与第三轮中的MAC的输入必须不同。
将哈西函数HK的输入中的元素的顺序进行变化。
(8).在协议-2中,会话密钥的其它计算方式K=H′K(sid,IB,B,IA,Y,X,Xy,Xb),其中H′K是一个与HK不同的哈西函数。将HK(gxy)或HK(gxy,gxb)作为一个伪随机函数的密钥,将0、1、以及sid,IA,IB,B,X,Y,pub的部分或全部作为伪随机函数的输入来导出会话密钥和MAC-密钥;将0,1、以及sid,IA,IB,B,X,Y,pub的部分或全部作为HK的输入。
将哈西函数HK的输入中的元素的顺序进行变化。
(9).如果客户“A”与服务器“B”已经事先共享一个口令w,那么第一轮的X=gx可以换为X′=XBw mod p,其中X=gx;在第二轮,服务器计算出X=X′/Bw mod p,其它计算不变。
(10).在协议-1和协议-2中,客户“A”的DH-密钥成分X或服务器“B”的DH-密钥成分Y在一定时间内(比如几个星期或几个月)保持不变。此时,客户“A”的x及DH-密钥成分X存储在一个安全的存储设备中(比如一个安全的U盘或其它独立、安全、并具计算功能的特殊存储介质中)。服务器“B”的y存储在服务器的安全模块中或与服务器“B”的私钥b存储在一起。

具体实施例方式 在下述协议具体实施中,大括号内的值表示发送的信息; 注意服务器“B”的公钥是B=gb并且我们假设客户“A”已经通过某种安全的方式获得服务器的公钥B;假设客户“A”为协议运行初始者,服务器“B”为协议运行响应者; 在下述协议具体实施中,消息认证码MAC采用由IETF(Internet Engineering TaskForce)所公布的第2104号互联网意见征求文档(Internet RFC 2104)中所描述的HMAC认证码。HMAC只需作两个哈西运算,并被证明既是消息认证码又是伪随机函数。在协议具体实施中,HMAC以及哈西函数H,HK由SHA-1哈西函数来实现。
在下述协议具体实施中,会话标示符sid客户“A”与服务器“B”发送的两个随机串的串联,pub为客户“A”与服务器“B”的协议版本(我们假设较高的协议版本向下兼容较低的协议版本)。这导致协议实际运行4轮。
协议-1 事先计算客户“A”可以事先计算X=gx mod p、d=H(IA‖IB‖B‖X)或1、Bdx mod q mod p。服务器“B”可以事先计算Y=gymodp。这里,“||”表示的是字符串的顺序连接,x和y从Zq中随机选取,X称为“A”的DH密钥成分,Y称为“B”的DH密钥成分。如果服务器“B”不检查X的阶q,鉴于小群攻击风险,当Y事先计算时则y必须保存在安全的模块中并在计算出db+ey后马上删除。
第一轮,从“A”到“B”{RA,VA}。
其中RA是一个32位随机0-1串,VA是客户“A”的协议版本号。收到客户“A”发送的信息后,服务器“B”验证RA的有效性(即RA是一个32位0-1串)并检查客户“A”的协议版本号。
第二轮,从“B”到“A”{RB,VB}。
其中RB是一个32位随机0-1串,VB是服务器“B”的协议版本号。收到服务器“B”发送的信息后,客户“A”验证RB的有效性(即RB是一个32位0-1串)并检查客户“B”的协议版本号。真正运行的协议版本号是RA和RB的较小值,使得客户“A”与服务器“B”均可运行该协议版本。会话标示符sid设为RA‖RB。pub设为VA‖VB。
第三轮,从“A”到“B”{RA‖RB,IA,X=gx(mod p)}。
收到客户“A”发送的信息后,服务器“B”验证“A”的身份、X为Z*p中的阶为q的非1元素(即X∈Z*p且X≠1且Xq=1 mod p)。验证不成功,服务器“B”拒绝继续执行协议;验证成功,服务器“B”计算KB=Xdb+ey mod q mod p并删除掉y及db+ey,其中e=H(RA‖RB‖d‖Y‖VA‖VB)或e=H(RA‖RB‖IA‖IB‖B‖X‖Y‖VA‖VB);计算MAC-密钥Km=HK(e‖KB)及会话密钥K=HK(KB‖e),然后删除掉KB并进入下一轮。
第四轮,从“B”到“A”{RA‖RB,IB,B,Y=gy,HMAGKm(0)}。
收到服务器“B”发送的信息后,客户“A”验证“B”的身份及公钥,Y为Z*p中的非1元素。验证不成功,客户“A”中止协议;验证成功,客户“A”计算KA=Bdx mod qYex mod q mod p及Km=HK(e‖KA)并验证HMACKm(0)的有效性。HMACKm(0)验证成功,客户“A”计算会话密钥K=HK(KA‖e),删除掉x、Bdx、Yex、KA。
协议-2 事先计算客户“A”可以事先计算X=gx mod p及Bx mod p;服务器“B”可以事先计算Y=gy mod p。其中,x和y从Zq中随机选取,X称为“A”的DH密钥成分,Y称为“B”的DH密钥成分。
第一轮,从“A”到“B”{RA,VA}。
其中RA是一个32位随机0-1串,VA是客户“A”的协议版本号。收到客户“A”发送的信息后,服务器“B”验证RA的有效性(即RA是一个32位0-1串)并检查客户“A”的协议版本号。
第二轮,从“B”到“A”{RB,VB}。
其中RB是一个32位随机0-1串,VB是服务器“B”的协议版本号。收到服务器“B”发送的信息后,客户“A”验证RB的有效性(即RB是一个32位0-1串)并检查客户“B”的协议版本号。真正运行的协议版本号是RA和RB的较小值,使得客户“A”与服务器“B”均可运行该协议版本。会话标示符sid设为RA‖RB。pub设为VA‖VB。
第三轮,从“A”到“B”{RA‖RB,IA,X=gx mod p,HK(RA‖RB‖IA‖IB‖B‖X‖Bx‖VA‖VB)}; 收到“A”发送的信息后,“B”验证“A”的身份、X为Z*p中的非1元素。验证不成功,“B”拒绝继续执行协议;验证成功,服务器“B”计算Xb、Xy,验证HK(RA‖RB‖IA‖IB‖B‖X‖Bx‖VA‖VB)的有效性,即验证是否HK(RA‖RB‖IA‖IB‖B‖X‖Bx‖VA‖VB)=HK(RA‖RB‖IA‖IB‖B‖X‖Xb‖VA‖VB)。HK(RA‖RB‖IA‖IB‖B‖X‖Bx‖VA‖VB)验证不成功,服务器“B”中止协议运行或返回一个与HK(RA‖RB‖IB‖B‖IA‖Y‖X‖Xy‖Xb‖VA‖VB)长度相同的随机数;HK(RA‖RB‖IA‖IB‖B‖X‖Bx‖VA‖VB)验证成功,服务器“B”计算HK(RA‖RB‖IB‖B‖IA‖Y‖X‖Xy‖Xb‖VA‖VB),计算会话密钥K=HK(RA‖RB‖IB‖B‖IA‖Y‖X‖Xy‖VA‖VB),删除掉y、Xb、Xy、并进入下一轮。
第四轮,从“B”到“A”{RA‖RB,IB,B,Y=gy,HK(RA‖RB‖IB‖B‖IA‖Y‖X‖Xy‖Xb‖VA‖VB)}。
收到服务器“B”发送的信息后,客户“A”验证“B”的身份及公钥,Y为Z*p中的非1元素。验证不成功,“A”中止协议;验证成功,客户“A”计算Yx,验证HK(RA‖RB‖IB‖B‖IA‖Y‖X‖Xy‖Xb‖VA‖VB)=HK(RA‖RB‖IB‖B‖IA‖Y‖X‖Yx‖Bx‖VA‖VB)。验证不成功,客户“A”中止协议执行;验证成功,客户“A”计算会话密钥 K=HK(RA‖RB‖IB‖B‖IA‖Y‖X‖Xy‖VA‖VB),删除掉x、Bx、Yx。
协议变体的
具体实施例方式 (1).协议-1中函数d、e的其它计算方法令c=H(sid‖IA‖IB‖B‖pub)或H(IA‖IB‖B),计算d=H(c‖X)或H(IA‖IB‖B‖X)或1,e=H(c‖X‖Y)或H(d‖Y)。
或者,d=H(sid‖IA‖IB‖B‖X‖Y‖pub)或H(c‖X‖Y)或H(e)或1,e=H(d)。
或者,将哈西函数H的输入中的元素的顺序进行变化;将sid或pub不作为H的输入。
(2).在协议-1中,会话密钥与MAC-密钥的其它计算形式K=HK(KA)=HK(KB)或K=HK(KA‖1)=HK(KB‖1);Km=HK(KA‖0)=HK(KB‖0)。
将c、d、e、以及sid与pub的部分或全部作为HK输入的一部分。
会话密钥与MAC-密钥由不同的哈西函数来实现,此时,不同哈西函数的输入中的元素顺序可以一致。
将K作为一个伪随机函数的密钥,将0、1、c、d、e、以及sid与pub的部分或全部作为伪随机函数的输入来导出会话密钥和MAC-密钥。
将哈西函数HK的输入中的元素的顺序进行变化。
(3).在协议-1中,将第二轮MACKm(0)换为MACKm(IB);将第三轮的MACKm(1)换为MACKm(IA)。将c、d、e、以及sid与pub的部分或全部作为MAC的输入,其关键点为 在第二轮中的MAC的输入与第三轮中的MAC的输入必须不同。
在将MAC的输入同时放入HK的输入的前提下,将部分或全部MAC去掉,只用哈西函数HK进行绑定。
(4).在协议-1和协议-2中,用户“A”或“B”不进行事先计算。此时,在会话密钥和MAC密钥计算之前所保留的内部状态仅包括x或y,并且一旦会话密钥计算完毕,除用户私钥和会话密钥之外的所有在本次协议执行中所生成的内部状态数据立即被删除。
在协议-1中,当d=1且不进行事先计算时,KA=BdxYex的计算顺序为先计算BYe modp再计算(BYe)x。
(5).在协议-2中,客户“A”在第一轮不发送HK(sid‖IA‖IB‖B‖X‖Bx‖pub)。此时,在第二轮,当服务器“B”发现X不是Z*p中的阶q的非1元素时,中止协议执行,而不是返回一个随机数。
(6).在协议-2的实际应用中,定义DH-密钥成分的群,记为(p*,g*,q*),与定义服务器公钥B的群可能不同,即(p*,g*,q*)≠(p,g,q)。此时,X=g*xmod p*、Y=g*y modp*,其中x和y在Zq*中随机选取。对于这种情况,客户“A”在第一轮除了发送定义在(p*,g*)上的DH-密钥成分X外,客户“A”在第一轮额外发送C=gc mod p,并将HK(sid‖IA‖IB‖B‖X‖Bx‖pub)换为HK(sid‖IA‖IB‖B‖X‖C‖Bc‖pub)或不发送HK(sid‖IA‖IB‖B‖X‖C‖Bc‖pub);将第二轮中的Xb换为Cb mod p。在这种情况,不需要对DH-密钥成分X和Y进行阶q检查。
(7).在协议-2中,令Km=HK(sid‖IB‖B‖IA‖Y‖X‖Xy‖Xb)或Km=HK(Xy‖Xb),将第二轮的HK(sid‖IB‖B‖IA‖Y‖X‖Xy‖Xb)换为MACKm(0)或MACKm(sid‖IB‖B‖IA‖Y‖X‖pub);将第三轮的HK(sid‖IA‖IB‖B‖X‖Y‖Yx)换为MACKm(1);将第一轮中的HK(sid‖IA‖IB‖B‖X‖Bx‖pub)换为MACHK(Bx)(sid‖IA‖IB‖B‖X‖pub)。将0,1以及sid,IA,IB,B,X,Y,pub的部分或全部作为MAC和HK的输入,其要点为在第一轮Bx或Bc必须作为HK的输入,在第二轮Xy和Xb必须作为HK的输入,在第三轮Xy必须作为HK的输入;当第二轮和第三轮使用相同的MAC-密钥时,第二轮中的MAC的输入与第三轮中的MAC的输入必须不同。
将哈西函数HK的输入中的元素的顺序进行变化。
(8).在协议-2中,会话密钥的其它计算方式K=H′K(sid‖IB‖B‖IA‖Y‖X‖Xy‖Xb),其中H′K是一个与HK不同的哈西函数。将HK(gxy)或HK(gxy‖gxb)作为一个伪随机函数的密钥,将0、1、以及sid,IA,IB,B,X,Y,pub的部分或全部作为伪随机函数的输入来导出会话密钥和MAC-密钥;将0,1、以及sid,IA,IB,B,X,Y,pub的部分或全部作为HK的输入。
将哈西函数HK的输入中的元素的顺序进行变化。
(9).如果客户“A”与服务器“B”已经事先共享一个口令w,那么第一轮的X=gx可以换为X′=XBw mod p,其中X=gx;在第二轮,服务器计算出X=X′/Bw mod q mod p,其它计算不变。
(10).在协议-1和协议-2中,客户“A”的DH-密钥成分X或服务器“B”的DH-密钥成分Y在一定时间内(比如几个星期或几个月)保持不变。此时,客户“A”的x及DH-密钥成分X存储在一个安全的存储设备中(比如一个安全的U盘或其它独立、安全、并具计算功能的特殊存储介质中)。服务器“B”的y存储在服务器的安全模块中或与服务器“B”的私钥b存储在一起。
权利要求
1.一种高效、不可锻造、不需数字签名的SSH运输层认证协议,其特征在于
系统工作环境为
(1).系统参数(p,q,g,H,HK,MAC),其中p和q为大素数,并且q能整除p-1,g是一个Z*p中阶为q的元素,使得在Z*p中由g定义的子群上离散对数DL及计算Diffie-Hellman CDH问题是难的;MAC是一个消息认证码算法;所有的指数运算及不在指数上的乘法运算是mod p运算,加法及指数上的乘法为mod q运算;这里,Z*p={1,2,…,p-1};H是{0,1}*→{0,1,2,…,(q-1)/2}的哈西函数,HK是{0,1}*→{0,1}k的哈西函数,k是会话密钥的长度;对于字符串s1,…,sm,m>1,H(s1,s2,…,sm)表示的是将s1,…,sm用二进制0-1串来表示,然后将所有的0-1串顺序连接串联起来,最后将串联后得到的0-1串作为H的输入;
(2).系统运行在分布式的客户-服务器网络中;除非有特别说明,具有身份ID IA的用户“A”代表一个客户,客户不一定有公钥;具有ID IB的用户“B”代表服务器,服务器“B”有一个基于离散对数的公钥记为B=gb modp,其中私钥b由服务器“B”从Zq={0,1,…,q-1}中随机选取;假设客户“A”已经通过某种方式获取了服务器“B”的公钥;
(3).协议基于Diffie-Hellman密钥交换协议;记X=gxmod p为客户“A”的DH密钥成分,x为DH密钥成分X的离散对数,x由客户“A”从Zq={0,1,…,q-1}中随机选取;记Y=gy mod p为服务器“B”的DH密钥成分,y为DH密钥成分Y的离散对数,y由服务器“B”从Zq={0,1,…,q-1}中随机选取;假设客户“A”为协议的发起者,服务器“B”为协议的响应者;即客户“A”在第一轮发送X;在收到X后服务器“B”检查X为Z*p中的非1元素并在第二轮发送Y;收到Y后,客户“A”检查Y为Z*p中的非1元素;
(4).假定协议的每一次执行有一个标示号sid;sid是一个字符串,用于标记并发运行的协议执行;sid的制定和协商可随协议的运行环境不同而有所变化;sid包含在协议运行之前用户交换的信息或交换信息的哈西值;
(5).与协议执行相关的其它信息pubpub是一个字符串,是协议版本、协议执行之前用户所交换信息或交换信息的哈西值、用户的IP地址、时间戳的串联;
协议实现方法为
根据会话密钥的不同计算方式,有两种协议实现方法
(1).协议实现方法-1客户“A”在第一轮发送X=gx mod p;在收到X后,服务器“B”检查X为Z*p中的阶为q的非1元素;检查成功,服务器“B”在第二轮发送B、Y=gymodp、计算KB=Xdb+ey和Km=HK(e,KB),并通过发送MACKm(0)来向客户“A”证明其知道b及y;其中,d=H(sid,IA,IB,B,X,pub)或1,e=H(sid,IA,IB,B,X,Y,pub);服务器“B”计算会话密钥K=HK(KB,e);收到服务器“B”发送的第二轮信息后,客户“A”计算KA=BdxYex及Km=HK(e,KA),并验证第二轮信息的有效性;客户“A”计算会话密钥K=HK(KA,e);为了进一步确认客户“A”知道会话密钥,客户“A”在第三轮发送MACKm(1)或EK(w),其中E为一个私钥加密算法,w为客户与服务器事先建立的秘密口令;
(2).协议实现方法-2客户“A”在第一轮发送X=gx mod p及HK(sid,IA,IB,B,X,Bx);客户“A”事先计算X及Bx;服务器“B”检查X为Z*p中的非1元素并利用Xb检查是否HK(sid,IA,IB,B,X,Bx,pub)=HK(sid,IA,IB,B,X,Xb,pub);验证不成功,服务器“B”中止协议运行或返回一个随机数;验证成功,服务器“B”在第二轮发送HK(sid,IB,B,IA,Y,X,Xy,Xb);会话密钥K由HK(gxy)或HK(gxy,gxb)导出;为了进一步确认客户“A”知道会话密钥,客户“A”可在第三轮发送HK(sid,IA,IB,B,X,Y,Yx)或EK(w),其中E为一个私钥加密算法,w为客户与服务器事先建立的秘密口令。
2.根据权利要求1所述的高效、不可锻造、不需数字签名的SSH运输层认证协议,其特征在于协议的实现步骤为
在下述协议描述中,大括号内的值表示发送的信息;注意服务器“B”的公钥是B=gb,并且假设客户“A”已经通过某种安全的方式获得服务器的公钥B;假设客户“A”为协议运行初始者,服务器“B”为协议运行响应者;
协议-1
事先计算客户“A”事先计算X=gx mod p、d=H(sid,IA,IB,B,X,pub)或1、Bdxmod q modp;服务器“B”事先计算Y=gy mod p;其中,x和y从Zq中随机选取,e=H(d,Y)或e=H(sid,IA,IB,B,X,Y,pub),X称为“A”的DH密钥成分,Y称为“B”的DH密钥成分;如果服务器“B”不检查X的阶q,鉴于小群攻击风险,当Y事先计算时则y必须保存在安全的模块中并在计算出db+ey后马上删除;
第一轮,从“A”到“B”{sid,IA,X=gx(mod p)};
收到客户“A”发送的信息后,服务器“B”验证“A”的身份、X为Z*p中的阶为q的非1元素;验证不成功,服务器“B”拒绝继续执行协议;验证成功,服务器“B”计算KB=Xdb+eymod q mod p并删除掉y及db+ey;计算MAC-密钥Km=HK(e,KB)及会话密钥K=HK(KB,e),然后删除掉KB并进入下一轮;
第二轮,从“B”到“A”{sid,IB,B,Y=gy,MACKm(0)};
收到服务器“B”发送的信息后,客户“A”验证“B”的身份及公钥,Y为Z*p中的非1元素;验证不成功,客户“A”中止协议;验证成功,客户“A”计算KA=BdxYex及Km=HK(e,KA)并验证MACKm(0)的有效性;MACKm(0)验证成功,客户“A”计算会话密钥K=HK(KA,e),删除掉x、Bdx、Yex、KA;
协议-2
事先计算客户“A”事先计算X=gx mod p及Bx mod p;服务器“B”事先计算Y=gy mod p;其中,x和y从Zq中随机选取,X称为“A”的DH密钥成分,Y称为“B”的DH密钥成分;
第一轮,从“A”到“B”{sid,IA,X=gx mod p,HK(sid,IA,IB,B,X,Bx,pub)};收到“A”发送的信息后,“B”验证“A”的身份、X为Z*p中的非1元素;验证不成功,“B”拒绝继续执行协议;验证成功,服务器“B”计算Xb、Xy,验证HK(sid,IA,IB,B,X,Bx,pub)的有效性,即是否HK(sid,IA,IB,B,X,Bx,pub)=HK(sid,IA,IB,B,X,Xb,pub);HK(sid,IA,IB,B,X,Bx,pub)验证不成功,服务器“B”中止协议运行或返回一个与HK(sid,IB,B,IA,Y,X,Xy,Xb,pub)长度相同的随机数;HK(sid,IA,IB,B,X,Bx,pub)验证成功,服务器“B”计算HK(sid,IB,B,IA,Y,X,Xy,Xb,pub),计算会话密钥K=HK(sid,IB,B,IA,Y,X,Xy,pub),删除掉y、Xb、Xy、并进入下一轮;
第二轮,从“B”到“A”{sid,IB,B,Y=gy,HK(sid,IB,B,IA,Y,X,Xy,Xb,pub)};
收到服务器“B”发送的信息后,客户“A”验证“B”的身份及公钥,Y为Z*p中的非1元素;验证不成功,“A”中止协议;验证成功,客户“A”计算Yx,验证HK(sid,IB,B,IA,Y,X,Xy,Xb,pub)=HK(sid,IB,B,IA,Y,X,Yx,Bx,pub);验证不成功,客户“A”中止协议执行;验证成功,客户“A”计算会话密钥K=HK(sid,IB,B,IA,Y,X,Yx,pub),册除掉x、Bx、Yx。
3.根据权利要求1或2所述的高效、不可锻造、不需数字签名的SSH运输层认证协议,其特征在于协议-1及协议-2有如下的变体
(1).协议-1中函数d、e的其它计算方法令c=H(sid,IA,IB,B,pub)或H(IA,IB,B),计算d=H(c,X)或H(IA,IB,B,X)或1,e=H(c,X,Y)或H(d,Y);
或者,d=H(sid,IA,IB,B,X,Y,pub)或H(c,X,Y)或H(e)或1,e=H(d);
或者,将哈西函数H的输入中的元素的顺序进行变化;将sid或pub不作为H的输入;
(2).在协议-1中,会话密钥与MAC-密钥的其它计算形式K=HK(KA)=HK(KB)或K=HK(KA,1)=HK(KB,1);Km=HK(KA,0)=HK(KB,0);
将c、d、e、以及sid与pub的部分或全部作为HK输入的一部分;
会话密钥与MAC-密钥由不同的哈西函数来实现,此时,不同哈西函数的输入中的元素顺序可以一致;
将K作为一个伪随机函数的密钥,将0、1、c、d、e、以及sid与pub的部分或全部作为伪随机函数的输入来导出会话密钥和MAC-密钥;
将哈西函数HK的输入中的元素的顺序进行变化;
(3).在协议-1中,将第二轮MACKm(0)换为MACKm(IB);将第三轮的MACKm(1)换为MACKm(IA);将c、d、e、以及sid与pub的部分或全部作为MAC的输入,其关键点为在第二轮中的MAC的输入与第三轮中的MAC的输入必须不同;
在将MAC的输入同时放入HK的输入的前提下,将部分或全部MAC去掉,只用哈西函数HK进行绑定;
(4).在协议-1和协议-2中,用户“A”或“B”不进行事先计算;此时,在会话密钥和MAC密钥计算之前所保留的内部状态仅包括x或y,并且一旦会话密钥计算完毕,除用户私钥和会话密钥之外的所有在本次协议执行中所生成的内部状态数据立即被删除;
在协议-1中,当d=1且不进行事先计算时,KA=BdxYex的计算顺序为先计算BYe再计算(BYe)x;
(5).在协议-2中,客户“A”在第一轮不发送HK(sid,IA,IB,B,X,Bx,pub);此时,在第二轮,当服务器“B”发现X不是Z*p中的阶q的非1元素时,中止协议执行,而不是返回一个随机数;
(6).在协议-2的实际应用中,定义DH-密钥成分的群,记为(p*,g*,q*),与定义服务器公钥B的群可能不同,即(p*,g*,q*)≠(p,g,q);此时,X=g*xmod p*、Y=g*y mod p*,其中x和y在Zq*中随机选取;对于这种情况,客户“A”在第一轮除了发送定义在(p*,g*)上的DH-密钥成分X外,客户“A”在第一轮额外发送C=gc mod p,并将HK(sid,IA,IB,B,X,Bx,pub)换为HK(sid,IA,IB,B,X,C,Bc,pub)或不发送HK(sid,IA,IB,B,X,C,Bc,pub);将第二轮中的Xb换为Cb mod p;在这种情况,不需要对DH-密钥成分X和Y进行阶q检查;
(7).在协议-2中,令Km=HK(sid,IB,B,IA,Y,X,Xy,Xb)或Km=HK(Xy,Xb),将第二轮的HK(sid,IB,B,IA,Y,X,Xy,Xb)换为MACKm(0)或MACKm(sid,IB,B,IA,Y,X,pub);将第三轮的HK(sid,IA,IB,B,X,Y,Yx)换为MACKm(1);将第一轮中的HK(sid,IA,IB,B,X,Bx,pub)换为MACHK(Bx)(sid,IA,IB,B,X,pub);
将0,1以及sid,IA,IB,B,X,Y,pub的部分或全部作为MAC和HK的输入,其要点为在第一轮Bx或Bc必须作为HK的输入,在第二轮Xy和Xb必须作为HK的输入,在第三轮Xy必须作为HK的输入;当第二轮和第三轮使用相同的MAC-密钥时,第二轮中的MAC的输入与第三轮中的MAC的输入必须不同;
将哈西函数HK的输入中的元素的顺序进行变化;
(8).在协议-2中,会话密钥的其它计算方式K=H′K(sid,IB,B,IA,Y,X,Xy,Xb),其中H′K是一个与HK不同的哈西函数;
将HK(gxy)或HK(gxy,gxb)作为一个伪随机函数的密钥,将0、1、以及sid,IA,IB,B,X,Y,pub的部分或全部作为伪随机函数的输入来导出会话密钥和MAC-密钥;将0,1、以及sid,IA,IB,B,X,Y,pub的部分或全部作为HK的输入;
将哈西函数HK的输入中的元素的顺序进行变化;
(9).如果客户“A”与服务器“B”已经事先共享一个口令w,那么第一轮的X=gx可以换为X′=XBw mod p,其中X=gx;在第二轮,服务器计算出X=X′/Bw mod p,其它计算不变;
(10).在协议-1和协议-2中,客户“A”的DH-密钥成分X或服务器“B”的DH-密钥成分Y在一定时间内保持不变;此时,客户“A”的x及DH-密钥成分X存储在一个安全的存储设备中;服务器“B”的y存储在服务器的安全模块中或与服务器“B”的私钥b存储在一起。
全文摘要
本发明属于密码协议技术领域,具体为一种高效、不可锻造、不需数字签名的SSH运输层认证协议。本发明协议基于服务器具有适于数字签名标准的离散对数公钥B=gb。会话密钥由Xdb+ey=BdxYex导出,其中e承诺绑定与协议运行相关的公开信息,d为1或其输入不包含Y;或者,会话密钥由(gxy,gxb)导出。本发明协议提供比目前SSH运输层认证协议工业标准更优的(在线)计算复杂性和通讯复杂性。
文档编号H04L29/06GK101217549SQ20081003277
公开日2008年7月9日 申请日期2008年1月17日 优先权日2008年1月17日
发明者赵运磊, 姚期智, 枫 储 申请人:赵运磊, 姚期智, 枫 储
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1