隨著信息時代的到來,人們希望能通過網絡信息傳輸對文
件、契約、合同、信件和賬單等進行數字簽名來代替以往的手寫
簽名。數字簽名的目的是提供壹種手段,使得壹個實體把他的身
份與某個信息捆綁在壹起。壹個消息的數字簽名實際上是壹個
數,它僅僅依賴於簽名者知道的某個秘密,也依賴於被簽名信息
本身。所以,將數字簽名看成是壹種證明簽名者身份和所簽署內
容真實性的壹段信息。
1、RSA算法描述
RSA算法是Rivest,Shamir和Adleman於1977年提出的比
較完善的公鑰密碼系統。RSA算法是壹個既能用於加密又能用
於數字簽名的公開密鑰算法。RSA算法是基於這樣壹個數論事
實:將兩個大素數相乘十分容易,但是想分解它們的乘積卻是困
難的。
RSA公鑰加密的整個算法可以通過以下步驟來描述。
1)生成兩個大的素數p和q,p≠q;
2)計算n=p×q,!(n)(p-1)(q-1);
3)隨機選擇壹個整數(公開的加密密鑰),0<e<!(n),使得
gcd(e,!(n))=1;
4)計算滿足下列條件(保密的解密密鑰),ed=1mod!(n);
5)對明文的加密運算是:c=E(m)=memodn;
6)對密文的解密運算是:m=D(c)=cdmodn。
此時公開(e,n)作為加密密鑰E,自己保密(d,n)作為解密密鑰
D。隱藏p和q。
2、RSA的保密性
假設用戶A獲得了壹對密鑰變換(EA、DA),其中EA是可以
公布於眾的加密密鑰,DA是由用戶A自行秘密保管的解密密
鑰。當用戶B要向用戶A發送消息M時,B只需要找到EA,用它
對消息M進行加密,C=EA(M),然後把密文C在公***信道上傳
送給A。當A收到密文C後,就用A秘密保管的解密密鑰DA解
密,DA(C)=DA(EA(M))=M,恢復出明文M。利用上述加密解密
過程可使用戶A和B之間達到保密傳輸。因為即使有竊聽者獲
得了密文C,但是他沒有解密密鑰DA,所以不能恢復出明文M
例如:
如果用戶A取p=7,q=71則n=pq=3337,!(n)(p-1)(q-1)=46×
70=3220隨機選取加密密鑰e=79,則d=79-1。公開e和n,將d保
密,隱藏p和q。設用戶B要發給A的信息為m=688,用戶B對m
進行如下加密:c=68879mod3337=1570然後將密文c發給用戶A
用戶A則利用保密的解密密鑰進行如下解密:15701019mod3337=
688=m。
雖然這解決了用戶A和B之間的保密傳輸,但是並沒有解
決可靠性,當A收到密文C時,並不能確定密文C就是用戶B
發來得。因為主動攻擊的擾亂者也是知道用戶A的加密密鑰的
因此擾亂者可以冒充B發壹條假消息給A,這時A是無法判斷
該消息是否B發來的。這個問題可以利用數字簽名來解決。
3、RSA數字簽名方案
3.1公鑰加密體制的數字簽名原理
其原理是:用戶B用妳的私鑰來"加密"壹組信息,用戶A用公鑰來解密,如果"解密"成功,說明這組信息就是用戶B加密
的,用戶B無法否認這個事實,這就是數字簽名。
假設用戶B獲得了壹對密鑰變換(EB、DB),其中EB是可以公
布於眾的加密密鑰,DB是由用戶B自行秘密保管的解密密鑰。
當用戶B要向用戶A發送消息M時,如果用戶B首先用自己保
管的解密密鑰DB作變換,C'=DB(M),然後把C'傳送給A,當A
收到密文C'後,可以用B的公開密鑰EB作逆變換,EB(C')=EB
(DB(M))=M,恢復出原始信息M。這樣A就可以判斷該消息壹
定是B發來的,因為只有B才知道秘密密鑰DB,除B外,任何
人都不能仿造信息C',因此C'可以作為用戶B的數字簽名,A可
以通過EB來驗證B的合法性,B對消息C'的確定性也是無法否
認的。這樣的應用只解決了消息的可靠性,可以防止第三者插
入、偽造和篡改消息,但是並不能解決消息M的保密性,因為除
了A以外,其他人也能收到,並恢復消息M。
3.2保密性和可靠性的解決方案
為了同時解決信息的保密性和可靠性這兩個問題,我們可
以對消息作如下處理:
用戶A和B分別獲得了各自的密鑰對(EA、DA)和(EB、DB),
如果B要向A發送壹條消息M,則可以先把消息M用B的秘
密密鑰DB處理,再用A的公開密鑰EA加密,即C=EA(DB(M)),
然後把C發送給A,A收到信息C後,先用自己的秘密密鑰DA
解C,再用B的公開密鑰EB恢復,即
EB(DA(C))=EB(DA(EA(DB(M))))=EB(DB(M))=M。
把這兩種方法如此地結合起來,用於加密信息,這樣就可以
到達人們預期的目的。使公***信道上傳輸的信息,即具有保密
性,有具有可靠性,即可以防止第三者的被動竊取,又可以防止
第三者的主動破壞,同時還具有認可和公證的能力。
4、RSA安全性分析
RSA的安全性依賴於大數分解的難度,目前因子分解速度
最快的算法,其時間復雜性為exp(sqrt(n)1n1n(n))。若和為100位
的十進制數,這樣為200位十進制數,按每秒107次運算的超高
速計算機,也要108年才能破解。因此,在壹定有效期內,RSA數字
簽名是安全可靠的。2002年成功分解了158位的十進制數,故
選取的素數p和q應該是長度為100的十進制數(相當於332
位二進制數)。為了達到長期安全應該至少使用1024位。
RSA的安全性受到的最大威脅就是整數素因子分解技術的
發展,如果因素分解技術有了突破性發展,那麽RSA的破解將會
變得非常簡單,可以直接計算出私鑰。
5、結束語
數字簽名有很多實現方法,目前廣泛應用的主要有Hash簽
名,DSS簽名,RSA簽名,ElGamal簽名。其中RSA簽名是最流行
的壹種數字簽名算法,盡管數字簽名技術還不夠完善,如簽名後
的文件可能被接收者重復使用,公開密鑰加密算法的效率相當
低,不易用於長文件的加密等。我們可以把RSA算法與其他算
法(如DES算法)結合起來使用,既提高了他它的運行速度,又保
證了壹定的安全性。隨著Internet的快速發展及其算法的不斷改
進和完善,其應用領域會日益廣泛,有著廣闊的發展前景。