混合型数字签名技术在Java中的实现

2020-07-04 18:24曹虎山刘国彦曾小舟
科学与财富 2020年14期
关键词:数字签名面向对象网络安全

曹虎山 刘国彦 曾小舟

摘 要:数字签名技术建立在数据加密的基础上,目前常用的加密方式有对称加密和非对称加密,对称加密使用同一把密钥加解密,而非对称加密技术使用私钥和公钥实现加密过程,两种加密技术各有优缺点。在互联网应用中,信息的完整性和传递的时效性同等重要,在保证数据可靠性的同时兼顾好用户体验,提出混合型数字签名技术,并简单介绍其实现原理,并且通过面向对象编程语言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)阶段性成果。

猜你喜欢
数字签名面向对象网络安全
浅析计算机安全防护中数字签名技术的应用
网络安全
网络安全人才培养应“实战化”
面向对象的计算机网络设计软件系统的开发
上网时如何注意网络安全?
面向对象的数据交换协议研究与应用
基于数字签名的QR码水印认证系统
数字签名简述
面向对象Web开发编程语言的的评估方法
我国拟制定网络安全法