随着信息技术在我国的昔及,各类信息技术不断的应用于备单位中,极大的提高了办公效率。过去的公文处理过程十分复杂,经常由于个人原因对公文管理不当,导致公文丢失或未及时审批。因此,需要开发公文流转系统,让工作人员从复杂的公文处理事务中解放出来,从而提高工作效率,降低成本,实现办公自动化。但是现在的公文流转系统安全系数又比较低,为此,我们迎合办公信息化的实际需求,在系统中采用了公开密钥加密以及秘密密钥加密算法,实现了公文流转系统的安全要求。

一、信息安全的关键技术

信息安全的关键技术包括加密技术和数字签名技术,加密技术通常分为两类:“对称式”和“非对称式”;数字签名是涉及签名信息和签名人私匙的计算结果。

二、加密技术在公文流转系统中的应用

1、一对多的公开发文模型

在公文流转中,若上级向下级分发文件,并且该文件可以公开,则在这种情况下,公文以明文发送,系统采用的模型如图1所示。

模型描述的过程如下:

①发送者S采用消息摘要算法对公文P生成消息摘要D;

②S使用其私钥SK2对摘要进行签名得DC;

③S将P、DC发送给接收者R。至此,发送者S完成了其签名过程,将签名过的公文传送给了R;

④R将接收到的明文用消息摘要算法计算出摘要;

⑤R用R的公钥SK1对A的签名进行解密;

⑥R将解密得到的摘要同算出的摘要进行比较,若摘要相同,则S的发文证明为真实、有效的,反之发文则无效。

2、一对一的秘密发文模型

在公文流转过程中,若发文者和收文者以一对一的方式发送,即公文既要以加密形式发送,又要实现发文人的签名,则系统采用一对一的秘密发文模型,其模型如图2所示。

模型描述的过程如下:

①发送者S用消息摘要算法对公文P产生摘要D;

②S使用其私钥SK2对摘要进行签名得D1;

③S随机产生一对对称密钥K;

④S使用AES算法对公文P进行加密得P1;

⑤S使用R的公钥RK1对K进行加密得K1;

⑥S将K1、P1、D1发送给接收者R。至此,公文的加密和签名已经完成;

⑦R将取到的K1用其私钥RK2进行解密得AES密钥K;

⑧R用K将P1解密得明文P。R用消息摘要算法对明文P产生摘要。R用S的公钥SK1对S的签名进行解密;

⑨R将解密得到的摘要同计算出的摘要进行比较,若摘要相同,则公文为S所发为真,否则为假。另外根据比较摘要便能发现公文是否在传输过程中被篡改。

三、公文流转系统中加密算法和解密算法的研究与实现

1、秘密密钥加密

加密与解密密钥是相同的,或者可以在一定时间内用加密密钥算出解密密钥,具备这种特征的算法称为秘密密钥算法、私有密钥算法或对称算法。

(1)秘密密钥加密的基本步骤:

①javax.crypto包导入;

②SecretKey接口封装密钥;

③SecretKey对象由KeyGenerator类产生,将算法名传给static getlnstance()方法;

④通过将密码参数传给Cipher类的staticgetlnstance()方法生成Cipher对象;

⑤通过调用init()方法并指定加密方式和Secret-Key对象,初始化Cipher对象;

⑥CipherOutputStream对象进行加密并将密文写入输出流。CipherOutputStream构造器取输出流名和Cipher对象作为变元。

(2)主要对称算法有:DES(实际密钥只用到56位)

和AES(支持三种密钥长度:128、192、256位),通常首先128位,其他的还有DESede等,JDK1.5种也提供了对对称算法的支持。由于AESE-效率比非对称的效率高,因而本系统采用该加密算法对公文进行加密、解密。加密实现的部分代码如下:

//将算法名AES传给getlnstance()方法

KeyGenerator keyGen=KeyGenerator.getlnstance(“AES”);

keyGen.init(128);//采用128位长度的密钥

key=keyGen.generateKey();

//获得一个私钥加密类Cipher,ECB是加密方式,

PKCS5Padding是填充方法

cipher=Cipher.getInstanceC'AES/EC B/PKCS5Padding");

cipher.init(Cipher.ENCRYPT_MODE, key);

由于秘密密钥加密算法运行速度相对较慢,因此选择秘密密钥算法对公文的摘要进行加密,加密用的密钥由系统产生,为了使接收方能对密文进行解密,需将密钥传给对方。为防止密钥被截获,传输前首先对这个秘密密钥进行非对称加密,如图3所示。

2、公开密钥加密

RSA加密算法作为一种非对称密码算法在信息安全领域得到了广泛的应用,其既可以用于数据加密也可以用于数字签名。本系统将用RSA加密算法来对秘密密钥进行加密,使用公开密钥对文件进行加密传输的实际过程包括四步:

①发送方生成一个自己的私有密钥并用接收方的公开密钥对自己的私有密钥进行加密,然后通过网络传输到接收方;

②发送方对需要传输的文件用自己的私有密钥进行加密,然后通过网络把加密后的文件传输到接收方;

③接收方用自己的公开密钥进行解密后得到发送方的私有密钥;

④接收方用发送方的私有密钥对文件进行解密得到文件的明文形式。

下面是产生RSA密钥对的代码实现:

KeyPairGenerator keyGen=KeyPairGenerator.getlnstance(“RSA”);

keyGen.initialize(1024);

keypair=keyGen.generateKeyPair();

PublicKey publickey=key.getPublic();

PrivateKey privatekey=key.getPrivate();

当发文给多个对象时,系统首先让发送方下载自己的私钥,对公文进行非对称加密,然后发送给下一个接收者。接收方收到密文,需要首先到密钥数据库下载发送方对外公布的公开密钥,才能对密文进行解密,如图4所示。

小知识之公文

公文是各级各类国家机构、社会团体和企事业单位在处理公务活动中有着特定的效能和广泛的用途的文书,它能够超越时空的限制,为国家管理提供所需的信息。