操作票是保证电力系统安全运行的重要措施之一,随着计算机及网络技术的飞速发展,电子操作票系统在电力企业中的广泛使用,使“无纸化”作业目标的实现变得日渐轻松,但是信息安全的问题也越来越突出。仅靠一个口令来把守着数据库的安全大门,已经变得越来越力不从心。因此,引人数据文件加密与解密手段,来进一步加强电网的数据信息安全,成了势在必行的一大措施。

一、电子操作票原理

目前企业面临的计算环境和过去有很大的变化,许多数据资源能够依靠网络来远程存取,而且越来越多的通信依赖于公共网络,而这些环境并不保证实体问的安全通信,数据在传输过程可能被其他人读取或篡改。

加密将防止数据被查看或修改,并在原本不安全的信道上提供安全的通信信道,达到以下目的:

(1)保密性:防止用户的标识或数据被读取;

(2)数据完整性:防止数据被更改;

(3)身份验证:确保数据发自特定的一方。

1、加密算法

加密算法是一些公式和法则,它规定了明文和密文之间的变换方法。例如:明文是“Cood mom-ing",将字母的顺序颠倒一下,密文是“gninromdooG",解密时只要将密文字母的顺序颠倒回来就可以了;又如:明文是“Hello”,加密算法是将每个字符的ASCII码加1,也就是取字母表中的后一个字符,得到的密文就是“Ifkkp”。解密时,只要将每个字符的ASCII码减1,就能得到明文“Hello"了。当然,这些只是最基本的加密思想,离实际应用还有很大的距离。

2、XOR算法原理

由于加密系统的反复使用,仅靠加密算法已难以保证信息的安全了。

经研究发现,异或运算最适合用于简易加密、解密运算,这种方法的原理是:当一个数A和另一个数B进行异或运算会生成另一个数C,如果再将C和B进行异或运算则C又会还原为A。

例如:

16480 XOR 35791=52143

52143 XOR 35791=16480

相对于其他的简易加密算法,XOR算法的优点如下:

(1)加密算法简单,对于高级语言很容易能实现;

(2)速度快,可以在任何时候、任何地方使用;

(3)对任何字符都是有效的,不像有些简易加密算法,只对西文字符有效,对中文加密后再解密无法还原为原来的字符。

3、密钥管理

事实上,加密系统的2个基本要素是加密算法和密钥管理。

加密信息的安全可靠依赖于密钥系统,密钥是控制加密算法和解密算法的关键信息,它的产生、传输、存储等工作是十分重要的。

一个加密系统S可以用数学符号描述如下:

S={P,C,K,E,D}

其中:

P:明文空问,表示全体可能出现的明文集合;

C:密文空间,表示全体可能出现的密文集合;

K:密钥空问,密钥是加密算法中的可变参数;

E:加密算法,由一些公式、法则或程序构成;

D:解密算法,它是E的逆。

当给定密钥K时,各符号之问有如下关系:

C= EK(P),对明文P加密后得密文C

P= DK(C)=DK(EK(P)),对密文C解密后得明文P

如用E表示E的逆,D表示D的逆,则有:

Ek=(DK)’Dk=(EK)’

因此,加密设计主要是确定E、D、K。

4、常用的加密算法

DES( Data Encryption Standard):数据加密标准,速度较快,适用于加密大虽数据的场合;

3DES( Triple DES):是基于DES,对一块数据用3个不同的密钥进行3次加密,强度更高;

RC2和RC4:用变长密钥对大量数据文件进行加密,比DES快;

IDEA(lntemational Data Encryption Algorithm)国际数据加密算法,使用128位密钥提供非常强的安全性;

RSA由RSA公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件快的长度也是可变的;

DSA(Digital Signature Algorithm)数字签名算法,是一种标准的DSS(数字签名标准);

AES( Advanced Encryption Standard)高级加密标准,是下一代的加密算法标准,速度快,安全级别高,目前AES标准的一个实现是Rijndael算法;

BLOWFISH,它使用变长的密钥,长度可达448位,运行速度很快;

MD5( Message Digest Algonthm 5)是RSA数据安全公司开发的一种单向散列算法,MD5被广泛使用,可以用来把不同长度的数据块进行暗码运算成—个128位的数值;

SHA(Secure Hash Algorithm)这是一种较新的散列算法,可以对任意长度的数据运算生成一个160位的数值;

MAC(Message Authentication Code)消息认证代码,是一种使用密钥的单向函数,可以用它们在系统上或用户之间认证文件或消息。HMAC(用于消息认证的密钥散列法)就是这种函数的一个例子。

CRC( Cyclic Redundancy Check)循环冗余校验码,CRC校验由于实现简单,检错能力强,被广泛使用在各种数据校验应用中。占用系统资源少,用软硬件均能实现,是进行数据传输差错检测地一种很好的手段(CRC并不是严格意义上的散列算法,但它的作用与散列算法大致相同,所以归于此类)。

二、电子操作票的加密实际应用

1、编程环境

原来的电子操作票系统是采用VB6.0进行编写的,对数据文件加密解密的支持不是很理想。这次采用了Microsoft Visual Studi0 2005来开发,编程语言使用了Microsoft Visual Basic 2005,即VB. NetoMicrosoft Visual Basic 2005从Visual Basic语言演变而来,是一种较为高效地生成类型安全和面向对象的应用程序而设计的语言。Visual Basic允许开发人员开发而向Windows、Web和移动设备的程序。与所有面向Microsoft.NET Framework的语言开发人员开发而向Windows、Web和移动设备的程序。与所有面向Microsoft.NET Framework的语言一样,使用Visual Basic编写的程序都具有安全性和语言互操作性方面的优点。

Microsoft.NET Framcwork应用程序建立在公共语言运行库的服务之上,并利用了.NET Frame-work类库。常见的加密和编码算法都已经在。NETFramework中得到了实现,为编码人员提供了极大的便利性,实现这些算法的名称空间是:System. Se-curity.Cryptography 。System.Security.Cryptography命名空间提供加密服务,包括安全的数据编码和解码,以及许多其他操作,例如散列法、随机数字生成和消息身份验证。

2、电子操作票的加密实际应用中的问题

(1)空密码

许多运行人员为了贪图方便,将自己的密码设为空密码。当密文为空字符串时,普通的加密运算方法,运算后得到的还是空字符串。因此,当攻克了数据库,并且把密码密文都清空后,在前台,人员的密码就是空的了。事实上,用普通的加密算法,如移位法、替换法等,甚至是XOR算法,明文是空字符串,由于没有任何字符参与加密运算,因此得到的密文也是空字符串。这样就给密码加密带来了安全隐患,如图1所示。

电子操作票的加密方法

(2)相同密码

由于程序中采用了同一种加密算法,因此,相同的密码明文通过加密运算后会得到相同的密码密文。假设某人打开了数据库密码列表,虽然他人的密码经过加密,无法识别密码明文,但是,可以将自己的密码密文复制替换掉他人的密码密文,这样,就能用别人的身份加上自己的密码在系统中通过验证。因此,这也是一个安全隐患,如图
2所示。

电子操作票的加密方法

(3)电子操作票的加密实际应用中的问题解决方法

鉴于以上的问题,制定以下解决方法:

首先,在解决空密码的问题时,利用MD5码加密的原理,对输入的数据进行补位操作。就是把1个任意长度的字符串变换成一定长的字符串,例如:将5位长度的字符串补到16位,空位全部用0补满,直至成为kx16位,k为正整数。

然后,将该字符串按字节拆分开,放人变量数组中,然后再分别对每一字节进行加密运算。

最终将结果拼合成一个完整的字符串,这样就得到了完整的加密文本。这样的好处是,无论明文是什么长度,密文总是以16的整数倍出现。一般在16位以下的明文,加密后都是16位的密文,这样也掩盖了明文的长度信息,提高了安全性。

另外,根据不同的用户,设置了不同的密钥。或者说,为每个用户在加密运算时,增加了一个不同的参数。一般是以用户名作为密钥,由于不同的用户,经过不同的密钥加密,即使用了相同的明文和相同的加密算法,加密后也会得到不同的密文。

这样,即使有人打开了数据库,将自己的密码密文复制替换掉别人的密码密文,也不能在系统使用他人的账号通过验证。而且大多情况下,这种替换会使系统在解密运算就产生错误。从而告知用户密码被非法修改。解决方案如图3所示。

电子操作票的加密方法

(4)程序代码

电子操作票的加密方法

以上代码是2个加密和解密的全局函数,在程序中只要引用该函数就可以了。

密文= Enc(明文,密钥)

明文= Dec(密文,密钥)

以上代码在Microsoft Visual Basic 2005中编译通过。

在系统的关键信息上,运用了加密解密的方法,是保障电力企业信息安全的重要技术手段。利用了加密手段,防止了操作票的重要数据被读取或修改,确保了数据来自特定的用户,保障了操作票数据的真实性和严肃性,在原本不甚安全的环境下,创造了一片安全的空间。虽然,这些技术理论还是一门新兴的理论,但通过全面研究与积极应用,将更加完善,为保障电力企业的信息安全发挥其应有的作用。

小知识之散列法

散列法(Hashing)或哈希法是一种将字符组成的字符串转换为固定长度(一般是更短长度)的数值或索引值的方法,称为散列法,也叫哈希法。由于通过更短的哈希值比用原始值进行数据库搜索更快,这种方法一般用来在数据库中建立索引并进行搜索,同时还用在各种解密算法中。