当前位置:首页 期刊杂志

Beller-Yacobi协议的研究与模拟实现

时间:2024-09-03

刘城霞

北京信息科技大学计算机学院 北京 100101

0 引言

在无线通信中随着移动用户对信息服务的需求越来越多,对移动通信系统安全的要求也越来越高,这不仅包括数据通信的安全性,还要求身份认证的合法性。目前实现身份认证最可行最安全的方式是设计基于密码技术的认证协议,并将其运用于认证系统中,Beller-Yacobi认证协议便是实现该功能的协议之一。

1 Beller-Yacobi传输协议

Beller-Yacobi密钥传输协议被称为混合密钥传输协议,它同时使用了对称加密技术和非对称加密技术,也就是说除了使用公钥加密和数字签名外,还使用了对称加密技术。

1.1 信息安全的模型

信息安全的基本模型可以用图1表示。

图1 信息安全的基本模型

通信双方欲传递某个消息,则需要考虑通信的安全性。安全传输技术有以下两个基本成分:①消息的安全传输,包括对消息的加密和认证。②通信双方共享的某些秘密信息,如加密密钥。为了消息的安全传输,还需要一个可信的第三方,其作用可能是负责向通信双方发布秘密信息或者在通信双方有争议时进行仲裁。所以安全的网络通信必须考虑4个方面:①加密算法。②用于加密算法的秘密信息。③秘密信息的分布和共享。④使用加密算法和秘密信息以获得安全服务所需的协议。

1.2 Beller-Yacobi传输协议的描述

Beller-Yacobi协议实现密钥的传输,提供相互的实体认证和显式的密钥认证。首先介绍一下简化的Beller-Yacobi协议:

(1) 系统参数的选择。模ns整数的乘法群中,适当的素数ns和生成元a被确定为ElGamal系统参数。可信服务器T选择适当的素数p和q来为RSA签名生成公开模数nT =pq,然后为公开指数eT=3计算一个私钥dT,使得eT dT=1mod(p-1)(q -1)。

(2) 系统参数分发。T给每个参与方(A和B)分发一个可信副本,包括T的公钥和系统参数nT,(ns,α),并为每个参与方X制定一个惟一的可辨别名称或识别串IX(如X的名称和地址)。

(3) 终端的初始化。每个充当A(终端)的参与方都随机选择一个整数a,1<a≤ns-2,并且计算其ElGamal签名公钥uA =αamodnS。A保密相应的私钥a,并将uA的一个可信副本传送给T,通过带外方式(安全信道或者是亲自送交)来向T识别它自己。T生成公钥证书并返回给A:certA=(IA, uA, GA)(此证书包含A的身份和ElGamal签名公钥 , 以 及 由GA=ST( IA, uA)=(h( IA, uA))dTmodnT 产 生 的T的RSA签名GA)。

(4) 服务器端的初始化。每个充当B(服务器)的参与方都产生一个加密私钥和一个基于公开指数eB=3的RSA的相应公钥。B选择一个公钥模数nB,为两个适当的秘密素数的乘积,并自己计算相应的RSA私钥dB。B将nB传送给v,通过所谓的带外(安全信道)方式来向T识别它自己。T产生公钥证书并返回给B:certB=(IB,nB,GB)(此证书包含B的身份核RSA加密公钥nB,以及由GA=ST(IA,uA)=(h(IA,uA))dTmodnT产生的T的RSA签名GB)。

其中EK(y)表示使用密钥K和算法E对y进行对称加密。PX(y)表示应用X的公钥函数对y加密后的结果。SX(y)表示应用X的私钥函数对y签名后的结果。IX表示参与方X的一个识别串。h(y)表示y的杂凑,它与签名方案一同使用。如果y=(y1,...,yn),则输入为这多个值的级联。

协议执行过程如图2所示。

图2 Beller-Yacobi协议描述图

可信服务器T负责分发统一的参数,并且针对接收到的关于 A,B,产生相应的签名,然后发送相应的公钥证书。可信服务器T的所有操作都是该协议的系统设置准备阶段,也就是又可信第三方分发密钥的阶段,协议的关键在与A,B之间的信息交流,以达到传送密钥K的目的。每当A,B要将信息传送给对方的时候都要将由可信服务器T生成的公钥认证一并传送,让对方验证自己的身份。其中 A使用ElGamal签名用来产生会话密钥K(协议传输对象)。而B对ElGamal签名的认证确定密钥的来源,以及密钥的正确性。

2 RSA算法原理

可信服务器T要进行RSA公钥的生成及生成公钥认证,那么就有必要了解一下RSA的算法原理和密钥是如何生成的。

2.1 RSA密钥生成算法

每个实体产生一个RSA公钥以及一个相应的私钥。每个实体A执行如下操作:

① 随机生成两个不同的大素数p和q。

② 计算n=pq和φ=(p-1)(q-1)。

③ 随机选择整数e,1<e<φ,使得gcd(e,φ)=1

④ 使用扩展的欧几里得算法计算满足ed≡1modφ的惟一整数d,1<d<φ。

⑤A的公钥为(n,e),私钥为d。

RSA密钥生成中的整数e,d分别称为加密指数和解密指数,n称为模数。

2.2 RSA公钥加密

B为A对消息m加密,A进行解密。

(1) 加密,B执行如下操作:

① 获得A的可信公钥(n,e)。

② 把消息表示成区间[0,n-1]内的整数m。③ 计算c=memodn。

④ 将密文c发送给A。

(2) 解密,为了从c中恢复明文m,A执行:用私钥d恢复m=cdmodn。

2.3 RSA签名认证

实体A签署消息m∈Μ。任何实体B都可验证A的签名,并从中恢复消息m。

(1) 签名生成,实体A执行如下操作:

① 计算取值在区间[0,n-1]内的整数=R(m)。

② 计算s=modn。

③A对m的签名s。

(2) 验证,为验证A的签名s且恢复消息m,实体B应当:

① 获得A的可信公钥(n,e)。

② 计算=semodn。

③ 验证∈ΜR;否则拒绝接收签名。

④ 恢复

签名验证可行性证明。若s是消息m的签名,则有s=modn, 其 中=R(m)。 因 为ed≡1modφ, 故

2.4 RSA加解密算法.NET实现

(1) RSA公钥产生

调用.NET环境下的类可直接产生由XML封装的公钥。将公钥发给A,B,自己保留私钥,用以后来的签名和解密。代码如下:

public void RSAKey(out string xmlKeys, out string xmlPublicKey)

{RSACryptoServiceProvider rsa = new RSACryptoService Provider();//初始化对象

xmlKeys=rsa.ToXmlString(true);//产生私钥

xmlPublicKey=rsa.ToXmlString(false);//公钥 }

RSA参数实际存储在两个字段中,一个是xmlKeys,存储公开的RSA参数,另一个是xmlPublicKey,存储公开和私有的RSA参数。系统产生的公钥和私钥都由XML封装,形式如:

(2) RSA公钥加密

public string RSAEncrypt(string xmlPublicKey, string m_strEncryptString)

{RSACryptoServiceProvider rsa = new RSACryptoService Provider();//产生对象

rsa.FromXmlString(xmlPublicKey); //初始化

PlainTextBArray = (new UnicodeEncoding()).GetBytes(m_strEncryptString);//转字节序列

CypherTextBArray = rsa.Encrypt(PlainTextBArray, false);//加密

Result = Convert.ToBase64String(CypherTextBArray);return Result; }

算法将所要机密的明文字符串转换成一个字节序列,存储在PlainTextBArray中。再调用RSA类的Encrypt方法对经过处理的密文进行加密,以字符串的类型返回。

(3) RSA签名

RSA签名需要关键的两个步骤,求哈希(杂凑)值和签名。下面是GetHash实现代码:

public bool GetHash(string m_strSource, ref string strHashData)

{HashAlgorithm MD5 = HashAlgorithm.Create("MD5");/产生Hash算法

Buffer

=System.Text.Encoding.GetEncoding("GB2312").GetBytes(m_strSource);

HashData = MD5.ComputeHash(Buffer);//计算Hash值

strHashData = Convert.ToBase64String(HashData);

return true; }

这里首先对要求哈希值的字符串进行处理,转换成字节序列,然后计算指定字节数组的哈希值,最后将哈希值以字符串的形式输出。获得哈希描述后,对该哈希值进行签名。代码如下:

public bool SignatureFormatter(string p_strKeyPrivate, byte[]HashbyteSignature, ref byte[] EncryptedSignatureData)

{ RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider();

RSA.FromXmlString(p_strKeyPrivate);//用已有的私钥初始化对象

SignatureFormatter RSAFormatter = new SignatureFormatter(RSA);

RSAFormatter.SetHashAlgorithm("MD5");//得到Hash算法

EncryptedSignatureData = RSAFormatter.CreateSignature(HashbyteSignature);//产生签名

return true; }

首先用之前产生的公钥进行初始化,然后将签名的算法设置为 MD5,最后对之前求得的哈希值进行签名。有关ElGamal签名和DES对称加密方法在系统中也实现了,篇幅原因这里不再赘述。

3 系统运行和测试

3.1 系统设置阶段

首先由可信服务器T产生各个参数,如图3。公钥(nt,e)显示的是系统产生的RSA公钥,ElGamal参数是由系统产生的一个随机大素数及其本原根。随后,将参数发送给A,B,两方接收并存储参数,以备后用。

图3 可信服务器T的系统设置

接着,终端A和可信服务器B产生各自的识别串和参数,然后传送给可信服务器T。如图4所示,Ib为B的识别串,nb是可信服务器用于RSA加密的公钥。

终端A的系统设置与B类似,不在赘述。A和B设置后,可信服务器T接收A,B的参数,通过RSA签名产生Ga,Gb,再送给A,B。A,B接收各自签名,即公钥认证,则准备阶段完成。

图4 服务器端B的系统设置

3.2 协议执行阶段

这里只描述A与B之间的信息传输和发送。系统设置完成后,首先由服务器端B产生一个随机数发送给终端A,发送的同时将准备阶段时T产生的公钥认证一起发送,用于A方对于信息来源的检测。如图5所示,终端A通过RSA认证,来检验来自B方的信息。

图5 终端A认证信息

认证成功之后,终端 A计算其 ElGamal签名,并和 A的公钥认证一同发送给 B。发送前首先对签名进行相应的RSA公钥加密,以及DES对称加密。由此,B方首先接收到的是加密之后的签名以及认证,然后B方再对加密结果进行解密,最后便是服务器端B对来自A的信息的认证,如图6所示。

图6 服务器B的最终验证结果

认证中首先进行公钥认证,通过RSA认证来检验信息的来源,而后是ElGamal认证,认证传输的密钥K的真确性,两者均验证成功才能说明协议执行成功。

4 总结

本文分析了Beller-Yacobi协议的每一个步骤以及所涉及的加密、签名算法。并以RSA加密算法及签名算法为例做了详细的介绍,并用C# 语言在.NET平台下编写了相应的算法程序,实现了整个Beller-Yacobi密钥传输协议的过程。

[1] 徐胜波,武传坤,王新梅.移动通信网中的认证与密钥分配[J].电子学报.1996.

[2] Alfred J.Menezes, PaulC.van Oorschot, Scott A.Vanstone著,胡磊,王鹏译.应用密码学手册[M].北京:电子工业出版社.2005.

[3] 王亚弟,束妮娜,韩继红编著.密码协议形式化分析[M].北京:机械工业出版社.2006.

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!