针对协同开发环境的特点,我们结合Lamport提出的一次性口令方案给出了在协同开发环境下的一种高效加密传输机制。该加密机制中借鉴了滑动窗口协议的思想,并揉进了一个能够对客户和服务器进行相互认证的加密认证算法。

一、数据安全快速传输

为解决应用环境下的数据安全快速传输问题,我们结合Lamport提出的一次性口令方案和一个已有的加密算法,本文给出了一种数据传输机制。

1、Lamport方案

Lamport提出的一次性口令方案不需要使用特殊硬件便可实施。假设存在某个函数F很容易进行正向计算,而不可能有效地进行逆向计算(密码散列函数就是一个很好的候
选算法)。进一步假设用户有某个秘密或许是一个口令x,为了保证用户以某个次数进行登录,主机计算出次数F(x)。因此,假设在口令改变前允许100次登录,那么主机应计算出F100( x),并只存储该值。用户第一次登录时,它应提供F99(x)。系统通过计算F( F99(x))=F100(x)进行验证。如果登录正确,所提供的口令F99( x)就变成新的存储值,它又被用于对F98(x)进行验证,它是用户下一次提供的口令。

2、滑动窗口协议

滑动窗口协议可以解决传输中的数据包受损、数据包丢失和过早超时等情况下的数据同步问题。滑动窗口协议分为三类,即1位滑动窗口协议、退后N帧协议和选择性重传协议。在滑动窗口协议中,为每个数据包分配一个序列号,范围从0到某个最大值,代表已发送但尚未确认的数据包。当接收到来自应用的数据请求后,发送方将其打包并分配一个最大的序列号,随后将窗口的上限加1,在确认到达时,将窗口的下限加1。采用这种方法,窗口可持续维持一系列未确认的数据包。因为发送方窗口内的当前数据包可能在传输中丢失或损坏,所以发送方必须保存所有未经确认的数据包,以备重传。

接收方的窗口对应着允许接收的数据包,对于任何落在窗口以外的数据包都不加说明地丢弃。当序列号等于窗口下限的数据包收到后,就产生一个确认,且窗口整个向前移动一个位置。滑动窗口协议一般采用所谓的捎带确认技术,以提高数据传输的效率。其处理过程为,当一个数据包到达之后,接收方不是立即发送一个独立的确认,而是维持等待,直到上层向其传送下一个分组,确认被附加到即将发送的数据包上,也就是说,确认是附加在下一个将发送的数据包上进行传送的。这种技术既能有效地利用带宽,又能减少数据通信次数。

3、一种一次性口令相互认证方案

用户U和服务器S共享信息为:U的对称密钥k:单钥加密算法、解密算法Ek( m),Dk( m),安全单向的Hash函数H;用户的标识符Uid。并且服务器S中存放着用户H( Uid)处理后的用户列表List。协议流程如下:

(1)客户端

begin:

计算h= H( Uid),将h发送给S,并启动超时计数器。

若超时收不到S的应答,则退出会话。

若收到S的应答,使用k解密(x,hs)=Dk( es)得到x,hs,并判断hs=H(x,k)是否成立;

若不成立,则证明S是假冒的,终止与S的会话。

若成立,则S的身份得到了验证,计算a= H(x,h,k),加密eu=Ek(a),然后发送eu给S。

end

(2)服务器端

begin:

监听是否有客户请求链接:

若无则转其他任务。

若有请求到来,判断h是否属属于list:

若是,表明Uid合法。则由随机数生成器生成随机数x=randan(),使用对称密k计算hs =H(x,k):es=Ek(x.hs),然后将es发送给U,并启动超时计数器。

否则,说明U为非法用户,终止与U的会话。

若超时,则结束本次会话。

若未超时并收到客户的应答则对收到的eu进行解密,a=Dk( eu),并计算b=H(x,h,k),然后验证a=b是否成立:

若成立则U的身份得到了验证。

否则,说明U为非法用户,终止与U的会话。

end

二、CSCW数据安全传输机制

结合以上基础和引言所述的特定工作环境,现给出CSCW集中一复制式环境下的数据安全快速传输机制如下:以客户机向服务器申请上传资源为例来描述实现机制。初始客户U向服务器注册时,提供了共享口令密钥k和资源初始密钥文件Fuo,服务器批准用户Uid’并把H( Uid)加入list。资源初始密钥文件Fuo是这样一个流文件,其大小要与客户首次上传的资源文件Fui的大小满足len( Fu1)/len( Fu1≈1,由各注册用户指定并提供以确保这一条件。假定每一次传输都正确无误码,且客户与服务器无冒充,则客户向服务器传送的资源系列文件为Fu1......Fun;。为保证传送安全,客户在首次上传时,上传F1=f(Fu1Fuo),其中f函数满足f(ff(x,y)y)=x即f运用与明文等大的密钥加密文件,在密码保密条件下不可破译。服务器在接收到F.后,进行F'1=f( F1,Fuo)运算,把F1'作为新版资源加入到系统中并更新本地Fu0为F1',作为下一次接收的密钥文件,后续传送以此类推。

上述前提是在理想状况下,然而网络传输总是有错误的可能发生,并且客户与服务器需彼此验证,为此,引入一种类似滑动窗口协议的机制来保证在传输失败的条件下确保数据的一致性。服务器和客户维持一个大小为1的滑动窗口,窗口的上下限为[0,N],Ⅳ为一大数。与标准滑动窗口不同的是,本文所述在检测某次传输是否成功不是在发送方发出后等待接收方发送响应的方式,而是利用下一次传输数据开始前的相关认证过程来检测上一次传输是否成功,即数据包是大粒度的,两次传输的间隔时间也是大粒度的。而且一旦检测到上一次传输失败,也不再进行本次传输,而且是立即调整本次传输的密钥,然后重新启动本次传输,以防脏数据形成。初始时服务器端和客户端的窗口号分别为Ws =0,Wu =0;在每一次传输起始相互认证阶段,服务器向客户发送自己的窗口号,客户检测服务器发送的窗口号是否与自身相等,若相等则继续本次会话,否则通知服务器调整密钥,重新启动本次会话。客户端完成数据传送后,更新Wu=Wu+1。服务器在成功向系统提交上传资源后更新Ws=Ws+1;在某次传送中Wu或Ws =N,则置Wu =1或Ws =1。加密算法的完整描述如下:

(1)客户端

begin:

计算h= H( uid),将h发送给S,并启动超时计数器。

若超时收不到S的应答,则退出会话。

若收到S的应答,使用对称密钥k解密(x,hs)=Dk( es),得到(x,hs),并判断hs =H(x,k):

若不成立,则证明S是假冒的,终止与S的会话。

若成立,则计算a= H(x,h,k),且eu=Ek(a)和计算标志Ws=Wu。

若Ws=Wu则c=0,将eu和c传送给S,然后开始向S传送数据包,送毕置Wu= Wu+1。

若Wu =N,则Wu=1。

若Ws=Wu不成立则置c=1,将Fuo置为初始化资源密钥,且Wu =0,将eu和c传送给S,并重新启动会话。

end

(2)服务器端

begin:

监听是否有客户请求链接:

若无则转其他任务。

若有请求到来,判断h是否属于list:

若是,表明Uid合法,则由随机数生成器生成随机数x=randan(),使用对称密k计算hs=H(x,k):es=Ek(x,hs),然后将es和Ws发送给U,并启动超时计数器。

若不是,则证明U是假冒的,终止与U的会话若超时,则结束本次会话。

若未超时并收到客户的应答则对收到的eu和c计算a=Dk( eu),并且计算b=H(X'h,k),然后验证a=b是否成立:

若不成立,终止与U的会话。

若成立,则判断是否c为o:

若为0,则等待接收U端的数据包,接收后将其解密为FI,传送给系统且将F更新为Fr,Ws =Ws+l,若Ws=N,则Ws =1。

若c为1,则置Fuo为初始化资源密钥,且Ws =0,返回。

End

三、协同开发环境下的信息加密传输机制的特点

(1)协同开发环境下的信息加密传输机制充分利用了在前文所述的特定环境,并把Lamport方案和这种环境结合起来。在这种应用环境下,服务器与客户持有与对方身份高度内聚的相关信息,并且这种信息是动态变化的,为加密的安全性提供了保障。

(2)采用上述数据传送机制,实现了认证的基本功能,认证是安全的,有效的。

(3)将窗口滑动机制的确认阶段放在下一次传输的起始阶段,简化了加密算法,可靠性也通过相互认证得到保证。

(4)口令加密解密和数据包解密,都采用了一次性口令机制,口令的一次性是由x= random()随机数的采用而保证的,数据包的一次性口令是由在传送序列F1…Fn中,由F是Fi+i的密钥的条件保证的。

(5)数据包的加解密是安全高效的,由于数据包明文和密钥等长,因而可以采取计算复杂性为O(n),(n为数据包的长度)的简单函数f(f(x,y),y)=x来进行加密和解密。

小知识之Lamport算法

Lamport算法:又称面包房算法,先来先服务算法。跟很多银行采用的排队机制一样。客户到了银行,先领取一个服务号。一旦某个窗口出现空闲,拥有最小服务号的客户就可以去空闲窗口办理业务。Lamport算法利用前述的事件定序方案统一定序所有对临界段的请求,按先来先服务的原则让请求临界资源的进程进入其临界段,进/出临界段1次需要3×(n-1)条消息。