APP下载

非对称加密技术在电力数据传输中的应用

2020-08-13丁建球金锋庄健

科技创新与应用 2020年24期

丁建球 金锋 庄健

摘  要:电力行业数据由于涉及到敏感信息及能源安全等非常重要的数据,数据传输安全就显得尤为重要。目前常用数据传输安全手段就是对数据设置密码,设置密码是为了保护传输数据的安全性,提高了数据保护技术,为数据传输提供可靠保证。文章通过对非对称加密技术进行探讨,为传输电力数据的安全策略提供参考和借鉴。

关键词:电力数据;非对称加密;数据传输安全

中图分类号:TP393.08 文献标志码:A         文章编号:2095-2945(2020)24-0157-03

Abstract: Data transmission security is particularly important in power industry because it involves sensitive information, energy security and other very important data. At present, data encryption is commonly used as the security means of data transmission. Data encryption is recognized as the only practical method to protect data transmission security and the effective method to protect storage data security. It is the most important defense line of data protection in technology. In this paper, asymmetric encryption technology is discussed to provide reference for the security strategy of power data transmission.

Keywords: power data; asymmetric encryption; data transmision security

1 概述

现代社会信息化高度发达,电力系统作为民生支柱型能源供应与输送系统一直走在信息化发展的前端。随着社会的发展电力系统纷纷加大了网络技术应用力度。信息系统建设与网络的应用促进了企业管理的创新和改革,但是在具体的应用过程当中也会给企業带来困扰,如果对互联网进行安全保护,也会带来严重风险。电力系统也可以根据信息系统的具体情况,采用合理的方法对软硬件数据设置密码,提高原始数据的安全性和可靠性,避免因为保护不完善遭受客户的侵入。还可以采用指纹认证方法将用户的指纹输入到系统当中,用户们在使用数据的时候就可以指纹认证,提高了信息使用的安全性。只有做好安全防护工作才能保障电力系统安全,提高电力系统的经济效益。

2 电力系统数据传输通道介绍

通信技术在电力生产和管理各个方面发挥着重要的作用,促进了电力系统的快速发展。电力系统在具体的运行过程当中可以根据不同的形式分为以下几种类型:第一,因为进行业务过程当中有不同的属性,所以要选择生产和管理两种形式。第二,电力系统在具体应用过程当中会有统一的监测体系,根据区域的差异性来对其进行科学合理划分。第三,开展业务过程当中还会根据不同的需求采用语言和多媒体等不同形式业务。第四,不同的系统应用时间有所差别,根据实际情况采用实时或非实时业务。第五,根据业务的运行状态分为集中性、相邻性的业务形式。第六,根据用户们的需求选择不同形式的供电场所。

2.1 对称加密技术

对称加密技术在具体的应用过程当中,主要应用一种密钥对两种算法进行应用。因为对称加密技术的应用速度比较快,所以在具体的应用过程当中要对大量的数据进行加密。对称方法主要就是加密双方要使用相同的方式对其进行加密。密钥主要是对加密的过程进行有效的控制。算法主要是对加密和解密的过程进行规定。所以加密的安全性不仅取决于算法的本身,还需要加强管理。因为加密和解密的密钥相同,所以在传递数据过程当中如何才能够将密钥安全的输送到另一方,已经成为了目前最需要解决的问题。

2.2 非对称加密技术

(1)它与对称加密算法有一定的不同,主要是加密和解密使用两个密钥。在对数据设置密码的过程当中,要根据数据的不同性质使用不同的密钥方法。如果只应用其中的一种密钥对数据进行设置密码,那么只能应用另一种密钥才能够获得密码。所以在设置密码的过程当中,是采用不同的密钥对其进行设置的,这样的加密方式不仅能够提高密码设置的安全性,还能够提高数据的传输速度。

(2)在对数据进行设置密码的过程当中,主要是通过密钥来对其进行控制的。密钥的整体安全程度对密码有着十分重要的作用。现代密码不仅对加密保密特征进行考虑,还需要完善加密的算法。这样侵入者就能够在不知道密钥的情况下,找到嵌入的突破口。根据密钥在加密和解密使用过程当中是否相同,判断加密和解密的密钥。密码体制在具体的应用过程当中可以分为对称密码体制和非对称型密码体制。

(3)非对称性密码体制主要是利用公钥来对数据进行加密。在传统的私钥密码体制应用过程当中存在许多的问题,此项技术是对这些问题进行改善和创它有对称密码体制的不同点,表现在工业系统在最初就进行设置密码的过程当中,设置密码与解密是独立的,加密和解密会使用两种不同的密钥,加密密钥在这些使用过程当中是公之于众谁都可以进行使用的,解密密钥只有解密人自己才能使用,这样的方法不仅能够对信息进行有效保护,还能够解决密钥分配在具体应用过程当中存在的问题,提高保护数据的手段。

3 对称与非对称算法比较

在管理方面:非对称加密技术不需要太多的资源就可以实现目标,但是它不能够在广域网当中使用,更主要的是它不能使用数字签名。

关于安全方面:因为非对称加密的应用主要是为了解决数学问题,不能够对其解决。因为对称加密技术,用到了AES,理论上是不能够得到解决的,但是随着科学技术的进步和发展,能够对传统的技术进行突破和创新。

关于速度方面:AES得到了快速的发展,突破了传统的软件传播速度,促进了信息数据的传播稳定性。

密钥的管理:加密密钥管理是一种涉及到密钥保护、共享、备份和组织管理的管理任务。随着加密业务的应用与延伸,可能会有数以千亿的密钥,所有这些都要安全地存储、充分地保护并且确保取用简便。为了达到妥善管理密钥的目标需设立密钥管理系统,该系统必须做到如下几个方面要求:

3.1 密钥生成与保存

密钥在具体的生成过程当中需要对数据进行采集和整理,根据数据量的多少选择合适的算法,完全是在系统内部完成的,外界是无法对其进行干扰的,充分保证了密钥产生的安全和密钥的质量。密钥在生成之后,通过系统对其进行设置密码,然后存储到数据库当中。

3.2 密钥分发

密钥生成后安全的存储在预生成密钥库中,在认证中心需要时发送密钥给认证中心,密钥传输过程采用SSL协议,保证需求方取得属于自己的私钥。

3.3 密钥的撤消

密钥由于某些原因(暂时不使用、怀疑泄密等)需要对密钥进行撤消,做密钥更新操作时原有的密钥也被撤消。

3.4 密钥的恢复

当密钥由于下述原因之一而导致丢失时,可使用密钥的恢复功能:

(1)忘记了存储密钥的口令。

(2)存储密钥的智能设备遭到破坏。

系统接到认证中心转发的密钥恢复申请后,系统将密钥从数据库中取出并以安全的方式发送给需求方。

只有撤消时标示原因为暂时不使用的密钥才能被恢复。

3.5 密钥的更新

如果证书到达一定的日期或者需求方需要根据实际需求对其进行改善时,需求方需要到认证中心当中提出请求,密钥系统在接受到请求之后才能够形成新的密钥形式。

3.6 密钥的备份

为了保证重要数据不丢失,需要对加密证书的私钥进行备份。密钥对生成并被需求方使用后,密钥管理系统自动将密钥对存入该系统的已使用数据库,供以后恢复及查询使用。另外系统提供数据备份的功能,可以将所有密钥信息备份到指定设备上(硬盘文件、磁带等),在需要時可以重新导入后使用。

4 基于JAVA的电力数据传输非对称加密实现

完成加密算法选择及密钥管理体系建设后,电力系统在具体的运行过程当中需要保证数据的安全有效性,也就是需要对用户们的签名证书和加密证书进行有效的核对,保证需求方身份与证书一致,还需要向认证中心对身份进行核实和认证。对证书当中的信息设置密码,是需求方向密钥管理系统申请获取。通常认证中心包含上述两类业务应用。

4.1 密钥生成

生成公钥私钥是基于主流的RSA算法来实现。这种算法在具体应用过程中主要是采用素数的相乘进行计算,虽然运算过程十分简单,但是需要对成绩的结果进行因式分解,才能够生产密钥。

算法逻辑:

(1)选择两个不同的大素数p和q。

(2)计算乘积n=pq和Φ(n)=(p-1)(q-1)。

(3)选择大于1小于Φ(n)的随机整数e,使得gcd(e,Φ(n))=1;注:gcd即最大公约数。

(4)计算d使得d*e=1mod Φ(n);注:即d*e mod Φ(n) =1。

(5)对每一个密钥k=(n,p,q,d,e),定义加密变换为Ek(x)=xe mod n,解密变换为Dk(x)=yd mod n,这里x,y∈Zn。

(6)p,q销毁,以{e,n}为公开密钥,{d,n}为私有密钥。

参考JAVA代码如下:

/**

* 随机生成密钥对

* @throws NoSuchAlgorithmException

*/

public static void genKeyPair() throws NoSuchAlgorithmException {

// KeyPairGenerator类用于生成公钥和私钥对,基于RSA算法生成对象

KeyPairGenerator keyPairGen=KeyPairGenerator.getInst

ance("RSA");

// 初始化密钥对生成器,密钥大小为96-1024位

keyPairGen.initialize(1024,new SecureRandom());

// 生成一个密钥对,保存在keyPair中

KeyPair keyPair = keyPairGen.generateKeyPair();

RSAPrivateKey privateKey=(RSAPrivateKey)keyPair.getPrivate(); // 得到私钥

RSAPublicKey publicKey =(RSAPublicKey)keyPair.get

Public(); // 得到公钥

String publicKeyString = new String(Base64.encodeBase64(publicKey.getEncoded()));

// 得到私钥字符串

String privateKeyString = new String(Base64.encodeBase64((privateKey.getEncoded())));

// 将公钥和私钥保存到Map

keyMap.put(0,publicKeyString); //0表示公钥

keyMap.put(1,privateKeyString); //1表示私钥

}

/**

* RSA公钥加密

*/

public static String encrypt(String str, String publicKey) throws Exception{

//base64编码的公钥

byte[] decoded = Base64.decodeBase64(publicKey);

RSAPublicKey pubKey = (RSAPublicKey)KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeyS

pec(decoded));

//RSA加密

Cipher cipher = Cipher.getInstance("RSA");

cipher.init(Cipher.ENCRYPT_MODE, pubKey);

String outStr = Base64.encodeBase64String(cipher.doFinal(str.getBytes("UTF-8")));

return outStr;

}

/**

* RSA私钥解密

*/

public static String decrypt(String str, String privateKey) throws Exception{

//64位解码加密后的字符串

byte[] inputByte = Base64.decodeBase64(str.getBytes("UTF-8"));

//base64编码的私钥

byte[] decoded = Base64.decodeBase64(privateKey);

RSAPrivateKey priKey = (RSAPrivateKey)KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded));

//RSA解密

Cipher cipher = Cipher.getInstance("RSA");

cipher.init(Cipher.DECRYPT_MODE, priKey);

String outStr = new String(cipher.doFinal(inputByte));

return outStr;

}

4.2 签名证书

签名证书主要是指需求方在申请密钥的过程当中需要向认证中心提供自己的信息得到满足和规定标准之后得到签名证。签名证书主要是用来接收者验证信息。接收者在收到签名证书之后,可以向认证中心申请得到密钥,满足自身需求。

参考JAVA代码如下:

public String initSignAndRetData(String signature, Str

ing data) throws RuntimeException{

//先验证

if(StringUtils.isBlank(signature)) {

throw new RuntimeException(“数据在传输过程中被篡改,请联系管理员”);

}else{

//RSA验证密码

byte[] decodedData = new byte[0];

try {

decodedData=RSACoder.decryptByPrivateKey(data, Constants.PRIVATE_KEY);

data = new String(decodedData);

System.out.println(“RSA解密处理——”+ data);

} catch (Exception e) {

throw new RuntimeException(“数据在传输过程中被篡改,请联系管理员”);

}

//验证MD5

String key = Constants.KEY_CODE + "&&" + data;

System.out.println(key);

String md5Hex1 = DigestUtil.md5Hex(key);

System.out.println(md5Hex1);

System.out.println(signature);

//MD验证成功

if(!md5Hex1.equals(signature)){

throw new RuntimeException(“數据在传输过程中被篡改,请联系管理员”);

}

return data;

}

5 结束语

电力系统安全性在信息化时代中是极为重要的,通信过程中加密技术已应用于整个电力行业的各个角落。本文从各类加密技术的介绍及其对比,加密算法的选择,密钥的管理等方面阐述了对于加密技术的认识与选择,结合电力系统要求,融合加密相关理论于基于JAVA的电力数据传输非对称加密实现的应用中,为电力数据传输的加密防护提供了理论与实践支撑。

参考文献:

[1]风继林,高焕芝.网络安全技术[M].北京:清华大学出版社,2009.

[2]张仕斌,万武南,张金全.应用密码学[M].陕西:西安电子科技大学出版社,2009.

[3]王海燕,李晓辉,汤佩林.用电信息采集系统的建设与应用[J].电力信息化,2012,10(09):69-73.

[4]朱彬若,杜卫华,李蕊.电力用户用电信息采集系统数据分析与处理技术[J].华东电力,2011,39(10):1682-1686.

[5]邓安文.密码学:加密演算法[M].北京:中国水利水电出版社,2006.