曹虎山 刘国彦 曾小舟
摘 要:数字签名技术建立在数据加密的基础上,目前常用的加密方式有对称加密和非对称加密,对称加密使用同一把密钥加解密,而非对称加密技术使用私钥和公钥实现加密过程,两种加密技术各有优缺点。在互联网应用中,信息的完整性和传递的时效性同等重要,在保证数据可靠性的同时兼顾好用户体验,提出混合型数字签名技术,并简单介绍其实现原理,并且通过面向对象编程语言Java来实现。
关键词:混合型;数字签名;网络安全;面向对象
随着信息技术的飞速发展,互联网技术渗透到当今社会的每个角落,“互联网+”概念的推广,传统产业加快了信息化建设的脚步,网络作为信息传递的途径,信息的安全和保密越发变得重要。目前,为了保证数据在互联网传递时的保密性,常用的技术手段有訪问控制、身份认证及安全审计等。但是这些手段主要是从外部保护数据在传递过程中的安全性,一旦数据在发送前或接收后遭到攻击,则不能验证信息的完整性。因此,数字签名技术因此诞生,数字签名技术是在数据加密的基础上演化而来,目前加密的方式主要有两种:一种是对称加密,另一种是非对称加密。对称加密指的是加密和解密使用的是同一把密钥,它的优点是加密速度快,效率高,缺点是密钥分发及管理比较困难;而非对称加密分为公钥和私钥,公钥解决了密钥分发的问题,但是公钥的加解密操作速度较慢。因此,结合两种加密方式的优缺点,提出混合数字签名技术,在保证信息完整性的同时,提高数据加密的效率,对当前各类互联网应用有积极的促进作用。
1.加密技术
1.1对称加密技术
对称加密也称单密钥加密,指的是通信双方使用的同一个密钥,既可以加密又可以解密。对称加密通常在消息发送方需要加密大量数据时使用,具有加密速度快、计算量小、加密效率高、算法公开等特点。但是在数据传送前,发送方和接收方必须约定好密钥,且双方都能保管好密钥,否则只要一方的密钥泄露,那么信息也就不安全了。此外,每次通信双方都需要使用其他人不知道的唯一密钥,多次通信则意味收、发双方所拥有的密钥变得越来越多,密钥的管理成为双方的负担。常用的对称加密算法有DES、AES等。
1.2非对称加密技术
非对称加密的密钥由公钥和私钥组成,并且可以使用多对密钥。通常有以下几种加解密方式:私钥解密公钥加密,公钥解密私钥加密数据,私钥公钥可以互相加密解密。私钥只能由一方保管,公钥交给请求方。非对称加密速度较慢,但密钥的管理较方便,也更安全。常见的非对称加密算法有RSA等。
1.3混合型加密技术
在实际的网络环境中,通常是将两者混合使用,这样即解决了密钥管理的问题,也保证了在非安全信道中密钥交换的安全性,同时大大提高了加解密的速度。尤其是在安全性与用户体验同等重要的互联网应用中,混合型加密技术是一种非常有效的数字签名技术。
1.4数字签名
不管是对称加密还是非对称加密,都只能保证数据的完整性,在网络通信中,数据的不可抵赖性则要借助证书中心(Certificate Authority,简称CA)来实现,证书中心的作用是为公钥作认证,CA通过自己的私钥,对通信双方的公钥和一些相关信息一起加密,生成“数字证书”。该证书能使通信接收方确认数据的来源和数据完整性,防止被他人伪造。当通信双方发生争议时,CA根据消息上的签名来判定这条消息是否确实由发送方发出,因为数字签名的本质是签名只能通过签名者的私钥才能产生,从而保证数据在传输过程中的不可抵赖性。
2.混合型数字签名技术在Java中的实现
Java作为最热门的Web应用开发语言,在网络安全编程中实现数字签名具有很大的优势,它提供了两种API实现数据的加密与解密,即JCA和JCE。在此我们采用混合密钥算法实现数字签名,不仅可以提高信息在传输过程中的保密性,也使服务器端的工作效率大大提高。例如针对客户机/服务器模型(C/S架构),实现过程如下:
(1)服务器Server使用 Hash 算法对所发送的数据内容进行计算得到信息摘要,用自己的私钥ServerPrivateKey对其加密形成数字签名;
(2)服务器Server生成对称密钥 ServerSingleKey,使用客户端Client的公钥ClientPublicKey对其加密;
(3)服务器Server使用对称密钥ServerSingleKey对信息内容进行加密;
(4)服务器Server将加密后的对称密钥和加密后的密文打包;
(5)服务器Server将打包后的数据和数字签名发送至客户端Client;
(6)客户端Client收到加密的数据包后,用客户端的私钥ClientPrivateKey解密得到ServerSingleKey;
(7)客户端Client使用解密后的对称密钥ServerSingleKey对密文数据包解密,得到明文内容;
验证数字签名过程:
(1)客户端Client获取数字签名;
(2)客户端Client采用相同的Hash算法对解密后的数据内容进行计算得到信息摘要,并使用服务器Server的公钥ServerPublicKey检验数字签名;
(3)如果数字签名相同,那么就可以确认该数字签名是来自服务器Server,并且数据在传输过程中没有遭到破坏或篡改。
服务器Server实现密钥生成和签名的部分代码:
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");//初始化参数
keyPairGenerator.initialize(512);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
RSAPublicKey ServerPublicKey = (RSAPublicKey)keyPair.getPublic();//服务器公钥
RSAPrivateKey ServerPrivateKey = (RSAPrivateKey)keyPair.getPrivate();//服务器私钥
//执行签名
PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(ServerPrivateKey.getEncoded());
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
Signature signature = Signature.getInstance("MD5withRSA");
signature.initSign(privateKey);
signature.update(src.getBytes());
byte[] result = signature.sign();
客户端Client验证签名的部分代码:
X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(ServerPublicKey.getEncoded());
keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
signature = Signature.getInstance("MD5withRSA");
signature.initVerify(publicKey);
signature.update(src.getBytes());
boolean bool = signature.verify(result);//驗证签名
3.结束语
在网络通信过程中,数字签名技术是保障信息安全的重要手段。混合型加密算法不仅实现了数字签名,而且保证了数据在传输过程中的保密性与可靠性,以及通信双方的不可抵赖,同时提高了加解密过程的效率,在保证信息安全的基础上对用户体验的影响也降到最小,是一项值得推广的互联网安全应用技术。
参考文献:
[1]王方鑫.基于RSA签名方案的研究[J].电脑知识与技术,2018,14(36):28-29.
[2]段镇源.探究网络安全技术中数字签名的基本原理[J].通讯世界,2019,26(04):31-32.
[3]赵悦. 基于RSA加密解密的即时通讯系统的设计与实现[D].吉林大学,2016.
[4]郑鸿雁. 移动数字签名关键技术研究[D].北京邮电大学,2014.
[5]李瑞俊.基于混合密码体制的数据加密模型的研究[J].赤峰学院学报(自然科学版),2014,30(18):10-11.
作者简介:
曹虎山(1967—),男,汉族,湖南益阳,教授,湖南生物机电职业技术学院,研究方向:信息技术。
刘国彦(1978—),男,汉族,湖南益阳,副教授,湖南生物机电职业技术学院,研究方向:软件测试。
曾小舟(1986—),男,汉族,湖南常德,讲师,湖南生物机电职业技术学院,研究方向:软件工程。
基金项目:
湖南省教育厅科学研究项目《混合型数字签名技术在O2O电子商务网络安全中的应用研究》(项目编号:15C0810)阶段性成果。