远程访问的一次性口令技术

郭瑜

——在一般情况下,远程用户用FTP、TELNET等命令访问服务器时,需向服务器提供用户名和口令,用户名和口令都是以明文(cleartext)方式在网上传输。一旦黑客在网上截获了这些用户名和口令,他们就可以利用截获的信息获取系统的访问权,对系统造成严重的威胁。因此在80年代初,美国科学家LeslieLamport首次提出了利用散列函数产生一次性口令的思想,即用户每次同服务器连接过程中使用的口令在网上传输时都是加密的密文,而且这些密文在每次连接时都是不同的,也就是说口令密文是一次有效的。

——1991年贝尔通信研究中心(Bellcore)首次研制出了基于一次性口令思想的身份认证系统S/KEY。S/KEY最初使用DES(DataEncryptionStandard)作为散列算法,后因安全问题改用MD4作为其加密算法。现在,基于更安全的MD5散列算法的一次性口令验证系统已开发出来,如美国海军研究实验室的OPIE2.31、荷兰WietseVenemaofEindhoven理工大学项目中的LogDaemon5.0等。

口令的基本原理

----我们要了解加密的原理,就必须从散列函数谈起。单向散列函数(OnewayHashFunction)是这样的函数:

----y=f(x)

----其中,给一个x,很容易求出y;但是给出y,却很难求出x。这就是说,求散列函数的逆函数在计算上是不可行的。

----近年来,一种报文鉴别码的变种得到了广泛的关注,这就是报文摘要(MD,MessageDigest)。它是将可变长度的报文M作为单向散列函数输入,然后得出一个固定长度的标志H(M)。H(M)通常称为报文摘要(MD),它主要用于下面三种情况。

  1. 通信双方共享一个常规的密钥。发送端先将报文M输入给散列函数H,计算出H(M)即MD,再用常规的密钥对MD进行加密,将加密的MD追加在报文M的后面,发送到接受端。接收端先除去追加在报文M后面加密的MD,用已知的散列函数计算H(M),再用自己拥有的密钥K对加密的MD解密而得出真实的MD;比较计算出得H(M)和MD,若一致,则收到的报文M是真的。

  2. 和第一种情况类似,但此时对MD的加密是使用公开密钥密码体制中的秘密钥匙,接收端使用公开密钥将加密的MD解密。这样做的好处在于省去了密钥分配给网络带来的负担。

  3. 通信的双方共享一小段其他人不知道的秘密数据块。发送端先将此秘密数据块追加在报文M的前面,然后输入到散列函数H,计算出MD;接着将MD追加在报文M的后面,同时去除一开始加上的秘密数据块,发送给接收端。接收端则先将加密的MD去除,然后在报文M的前面加上自己拥有的秘密数据块后,输入给散列函数H,计算H(M);比较H(M)和MD,若一致,就认为收到的报文M是真的。

----报文摘要除提供鉴别外,还提供数据完整性的检测。在传输过程中,报文里的任一比特出了差错,发送端和接收端的MD代码就会不一样。

MD5报文摘要算法

----MD5报文摘要算法是由R.Rivest于1992年提出的MD算法的第五个版本。此算法可对任意长的报文进行运算,然后得出128位的MD代码。该算法的实现过程如下。

  1. 先将任意长的报文(M位)按模264计算出余数(64位),追加在报文的后面。即:最后得出得MD代码已包含了报文长度信息;

  2. 在报文和余数之间填充1~512位,填充后的总长度是512的整数倍。填充位序列的首位为1,后面的其他位为0;

  3. 将追加和填充后的报文分割成一个个512位的数据块,进行复杂的处理。

----如图1所示,H就是在计算中最为关键的散列函数。ABCD是4个32位的寄存器,其16进制初始值(低字节在前)为:

----A=01234567

----B=89ABCDEF

----C=FEDCBA98

----D=76543210

----512位的报文数据分成4个128位的数据块,依次被送到不同的散列函数进行4轮计算;每一轮都按32位的小数据块进行复杂的运算,计算完成后全部写入ABCD寄存器,用于下一轮的计算。等到最后计算完毕,在寄存器ABCD中的数据就是我们要求的MD5代码。

----依照上述方法计算出的MD5代码中的每一个比特,都与报文中的每一个比特有关。

口令的使用过程

----当一个用户在服务器上首次注册时,系统给用户分配一个种子值(seed)和一个迭代值(iteration),这两个值就构成了一个原始口令,同时在服务器端还保留有仅用户自己知道的通行短语。

----当用户每次向服务器发出连接请求时,服务器把用户的原始口令传给用户。用户接到原始口令以后,利用口令生成程序,采用MD4或MD5散列算法,结合通行短语计算出本次连接实际使用的口令,然后再把口令传回服务器;服务器先保存用户传来的口令,然后调用口令生成器,采用MD4或MD5散列算法,利用用户存在服务器端的通行短语和它刚刚传给用户的原始口令自行计算生成一个口令;服务器把这个口令与用户传来的口令进行比较,进而对用户进行身份确认;每一次身份成功认证后,原始口令中的迭代值数自动减1。这里要指出的是,用户主机上采用的散列算法和服务器上采用的散列算法必须是一样的。

----我们可以看出,用户通过网络传给服务器的口令是利用原始口令和通行短语经MD4或MD5散列算法生成的密文,用户本身的通行短语并没有在网上传播;在服务器端,因为每一次成功的身份认证后,用户原始口令中的迭代值就自动减1。这样,下一次用户连接时使用的原始口令同上一次使用的原始口令是不一样的,因此,两次生成的口令也是不同的,从而有效地保证了用户口令的安全。


以上文章转摘自中国电信(http:\\www.chinatelecom.com.cn)

关闭窗口