加密技術(shù)在公文流轉(zhuǎn)系統(tǒng)中的應(yīng)用

隨著信息技術(shù)在我國(guó)的昔及,各類信息技術(shù)不斷的應(yīng)用于備單位中,極大的提高了辦公效率。過(guò)去的公文處理過(guò)程十分復(fù)雜,經(jīng)常由于個(gè)人原因?qū)墓芾聿划?dāng),導(dǎo)致公文丟失或未及時(shí)審批。因此,需要開(kāi)發(fā)公文流轉(zhuǎn)系統(tǒng),讓工作人員從復(fù)雜的公文處理事務(wù)中解放出來(lái),從而提高工作效率,降低成本,實(shí)現(xiàn)辦公自動(dòng)化。但是現(xiàn)在的公文流轉(zhuǎn)系統(tǒng)安全系數(shù)又比較低,為此,我們迎合辦公信息化的實(shí)際需求,在系統(tǒng)中采用了公開(kāi)密鑰加密以及秘密密鑰加密算法,實(shí)現(xiàn)了公文流轉(zhuǎn)系統(tǒng)的安全要求。

一、信息安全的關(guān)鍵技術(shù)

信息安全的關(guān)鍵技術(shù)包括加密技術(shù)和數(shù)字簽名技術(shù),加密技術(shù)通常分為兩類:“對(duì)稱式”和“非對(duì)稱式”;數(shù)字簽名是涉及簽名信息和簽名人私匙的計(jì)算結(jié)果。

二、加密技術(shù)在公文流轉(zhuǎn)系統(tǒng)中的應(yīng)用

1、一對(duì)多的公開(kāi)發(fā)文模型

在公文流轉(zhuǎn)中,若上級(jí)向下級(jí)分發(fā)文件,并且該文件可以公開(kāi),則在這種情況下,公文以明文發(fā)送,系統(tǒng)采用的模型如圖1所示。

模型描述的過(guò)程如下:

①發(fā)送者S采用消息摘要算法對(duì)公文P生成消息摘要D;

②S使用其私鑰SK2對(duì)摘要進(jìn)行簽名得DC;

③S將P、DC發(fā)送給接收者R。至此,發(fā)送者S完成了其簽名過(guò)程,將簽名過(guò)的公文傳送給了R;

④R將接收到的明文用消息摘要算法計(jì)算出摘要;

⑤R用R的公鑰SK1對(duì)A的簽名進(jìn)行解密;

⑥R將解密得到的摘要同算出的摘要進(jìn)行比較,若摘要相同,則S的發(fā)文證明為真實(shí)、有效的,反之發(fā)文則無(wú)效。

2、一對(duì)一的秘密發(fā)文模型

在公文流轉(zhuǎn)過(guò)程中,若發(fā)文者和收文者以一對(duì)一的方式發(fā)送,即公文既要以加密形式發(fā)送,又要實(shí)現(xiàn)發(fā)文人的簽名,則系統(tǒng)采用一對(duì)一的秘密發(fā)文模型,其模型如圖2所示。

模型描述的過(guò)程如下:

①發(fā)送者S用消息摘要算法對(duì)公文P產(chǎn)生摘要D;

②S使用其私鑰SK2對(duì)摘要進(jìn)行簽名得D1;

③S隨機(jī)產(chǎn)生一對(duì)對(duì)稱密鑰K;

④S使用AES算法對(duì)公文P進(jìn)行加密得P1;

⑤S使用R的公鑰RK1對(duì)K進(jìn)行加密得K1;

⑥S將K1、P1、D1發(fā)送給接收者R。至此,公文的加密和簽名已經(jīng)完成;

⑦R將取到的K1用其私鑰RK2進(jìn)行解密得AES密鑰K;

⑧R用K將P1解密得明文P。R用消息摘要算法對(duì)明文P產(chǎn)生摘要。R用S的公鑰SK1對(duì)S的簽名進(jìn)行解密;

⑨R將解密得到的摘要同計(jì)算出的摘要進(jìn)行比較,若摘要相同,則公文為S所發(fā)為真,否則為假。另外根據(jù)比較摘要便能發(fā)現(xiàn)公文是否在傳輸過(guò)程中被篡改。

三、公文流轉(zhuǎn)系統(tǒng)中加密算法和解密算法的研究與實(shí)現(xiàn)

1、秘密密鑰加密

加密與解密密鑰是相同的,或者可以在一定時(shí)間內(nèi)用加密密鑰算出解密密鑰,具備這種特征的算法稱為秘密密鑰算法、私有密鑰算法或?qū)ΨQ算法。

(1)秘密密鑰加密的基本步驟:

①javax.crypto包導(dǎo)入;

②SecretKey接口封裝密鑰;

③SecretKey對(duì)象由KeyGenerator類產(chǎn)生,將算法名傳給static getlnstance()方法;

④通過(guò)將密碼參數(shù)傳給Cipher類的staticgetlnstance()方法生成Cipher對(duì)象;

⑤通過(guò)調(diào)用init()方法并指定加密方式和Secret-Key對(duì)象,初始化Cipher對(duì)象;

⑥CipherOutputStream對(duì)象進(jìn)行加密并將密文寫入輸出流。CipherOutputStream構(gòu)造器取輸出流名和Cipher對(duì)象作為變?cè)?/p>

(2)主要對(duì)稱算法有:DES(實(shí)際密鑰只用到56位)

和AES(支持三種密鑰長(zhǎng)度:128、192、256位),通常首先128位,其他的還有DESede等,JDK1.5種也提供了對(duì)對(duì)稱算法的支持。由于AESE-效率比非對(duì)稱的效率高,因而本系統(tǒng)采用該加密算法對(duì)公文進(jìn)行加密、解密。加密實(shí)現(xiàn)的部分代碼如下:

//將算法名AES傳給getlnstance()方法

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

keyGen.init(128);//采用128位長(zhǎng)度的密鑰

key=keyGen.generateKey();

//獲得一個(gè)私鑰加密類Cipher,ECB是加密方式,

PKCS5Padding是填充方法

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

cipher.init(Cipher.ENCRYPT_MODE, key);

由于秘密密鑰加密算法運(yùn)行速度相對(duì)較慢,因此選擇秘密密鑰算法對(duì)公文的摘要進(jìn)行加密,加密用的密鑰由系統(tǒng)產(chǎn)生,為了使接收方能對(duì)密文進(jìn)行解密,需將密鑰傳給對(duì)方。為防止密鑰被截獲,傳輸前首先對(duì)這個(gè)秘密密鑰進(jìn)行非對(duì)稱加密,如圖3所示。

2、公開(kāi)密鑰加密

RSA加密算法作為一種非對(duì)稱密碼算法在信息安全領(lǐng)域得到了廣泛的應(yīng)用,其既可以用于數(shù)據(jù)加密也可以用于數(shù)字簽名。本系統(tǒng)將用RSA加密算法來(lái)對(duì)秘密密鑰進(jìn)行加密,使用公開(kāi)密鑰對(duì)文件進(jìn)行加密傳輸?shù)膶?shí)際過(guò)程包括四步:

①發(fā)送方生成一個(gè)自己的私有密鑰并用接收方的公開(kāi)密鑰對(duì)自己的私有密鑰進(jìn)行加密,然后通過(guò)網(wǎng)絡(luò)傳輸?shù)浇邮辗剑?/p>

②發(fā)送方對(duì)需要傳輸?shù)奈募米约旱乃接忻荑€進(jìn)行加密,然后通過(guò)網(wǎng)絡(luò)把加密后的文件傳輸?shù)浇邮辗剑?/p>

③接收方用自己的公開(kāi)密鑰進(jìn)行解密后得到發(fā)送方的私有密鑰;

④接收方用發(fā)送方的私有密鑰對(duì)文件進(jìn)行解密得到文件的明文形式。

下面是產(chǎn)生RSA密鑰對(duì)的代碼實(shí)現(xiàn):

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

keyGen.initialize(1024);

keypair=keyGen.generateKeyPair();

PublicKey publickey=key.getPublic();

PrivateKey privatekey=key.getPrivate();

當(dāng)發(fā)文給多個(gè)對(duì)象時(shí),系統(tǒng)首先讓發(fā)送方下載自己的私鑰,對(duì)公文進(jìn)行非對(duì)稱加密,然后發(fā)送給下一個(gè)接收者。接收方收到密文,需要首先到密鑰數(shù)據(jù)庫(kù)下載發(fā)送方對(duì)外公布的公開(kāi)密鑰,才能對(duì)密文進(jìn)行解密,如圖4所示。

小知識(shí)之公文

公文是各級(jí)各類國(guó)家機(jī)構(gòu)、社會(huì)團(tuán)體和企事業(yè)單位在處理公務(wù)活動(dòng)中有著特定的效能和廣泛的用途的文書(shū),它能夠超越時(shí)空的限制,為國(guó)家管理提供所需的信息。