余勇
(河南經(jīng)貿職業(yè)學院,河南 鄭州 450053)
淺析RSA數(shù)字簽名算法的軟件加密應用
余勇
(河南經(jīng)貿職業(yè)學院,河南 鄭州 450053)
軟件是一種非常特殊的商品,其凝結了開發(fā)人員的智慧、精力和時間。但軟件本身極易被復制,同時軟件版權也非常容易被盜。為維護開發(fā)人員利益,其在開發(fā)軟件的過程當中不斷研發(fā)新的加密技術,以維護開發(fā)者的版權,同時也提高了軟件的安全性。文章簡單闡述了RSA數(shù)字簽名算法的基本概念和原理,并對RSA數(shù)字簽名算法在軟件加密當中的具體應用進行了詳細探討。
RSA數(shù)字簽名算法軟件加密;秘鑰;安全性
隨著社會及計算機技術的不斷發(fā)展,軟件行業(yè)也得以迅速發(fā)展,社會軟件需求量不斷增加。軟件的開發(fā)成本較高、周期較長且具高風險性,但同時軟件又極易被復制和被盜,為維護開發(fā)者的知識產(chǎn)權及開發(fā)商的合法權益,就有必要采取相應措施以對軟件進行加密保護。RSA是一種非對稱加密算法,將其應用于軟件加密當中不僅可保護軟件的私密性,而且還可提高軟件的安全性,有利于軟件行業(yè)的健康、有序發(fā)展。
1.RSA數(shù)字簽名算法的基本概念
RSA數(shù)字簽名算法是一種非對稱加密算法,產(chǎn)生于1978年,創(chuàng)始人為Ron Rivest、AdiShamirh和Len Adleman。此算法是以三人名字而命名的,其數(shù)論思想非常簡單,即“兩個素數(shù)相乘容易,但分解難”。
傳統(tǒng)的加密方法其加密密鑰及解密密鑰通常一致,密文的安全性不高,另密鑰的生成、注入、管理及分發(fā)等過程相對復雜。隨著計算機的不斷推廣和應用,計算機使用者數(shù)量迅速加大,傳統(tǒng)加密方法的缺陷越來越明顯。但是公開密鑰密碼體制當中,加密密鑰完全不同于解密密鑰,加密密鑰是公開的,但是解密密鑰為秘密密鑰,是實施了相應的加密保護措施的,這種加密密鑰不同于解密密鑰密碼體制被稱為非對稱加密方法,其有效彌補了傳統(tǒng)加密方法的不足之處。另外,雖解密密鑰由加密密鑰決定,但卻無法根據(jù)加密密鑰進行推導所得,因此此加密方式具很高的安全性能。
2.RSA數(shù)字簽名算法的基本原理
RSA現(xiàn)已成為使用范圍最為廣泛的一種非對稱算法加密技術,其不僅可用于數(shù)據(jù)加密,同時也可用于數(shù)字簽名。RSA最大的特征在于其加密密鑰與解密密鑰不同,且解密密鑰無法通過加密密鑰進行計算所得??傮w而言,RSA數(shù)字簽名算法的基本原理主要包括以下三步:
第一,產(chǎn)生加密密鑰和解密密鑰。選擇兩個大素數(shù),分別記為p、q,計算其乘積,并記為n,n=pq;然后再隨機選擇一個正整數(shù)作為加密密鑰,記為e,e與(p-1)(q-1)的關系為互素;利用歐幾里得擴展算法進行計算,以得到解密密鑰,記為d。d所要滿足的條件如下:
d=e-1mod[(p-1)(q-1)]
式中的d與n的關系也為互素,e與n為公開密鑰,d為私人密鑰,剛開始所選擇的p與q在計算完成之后就不需要了,可舍棄,但要注意的p與q的取值決不可泄露。
第二,加密過程。加密過程,即軟件注冊碼的產(chǎn)生過程。以計算機ID為明文信息,即公開信息,記作m,同時利用私人密鑰d加密信息m,從而得到密文s。s的計算公式如下:
s=mdmodn。式中的s即為擁有上述計算機ID的軟件注冊碼。
第三,解密過程。解密過程,即校驗軟件注冊碼的過程。用戶可直接將注冊碼輸入相應界面或是從軟件包的注冊文件當中提取注冊碼s,然后再利用公開密鑰e來解密密文,從而獲取明文信息。其計算公式如下:m'=semodn。
將計算所得的m'與原始明文m進行比較,若相等,則表明s為軟件開發(fā)人員所承認的合法注冊碼,軟件可正常運行;若不等,則表明s不為軟件開發(fā)員的承認,軟件會拒絕運行。
通過分析加密過程可知,軟件注冊碼的長度主要由n來決定,n的位數(shù)越多,軟件就越安全。理論上來說,破解人員若能通過n來推導出p和q,通過加密密鑰e,其就可獲取解密密鑰d,進而破解密文。然而實際上,300多年以來,很多數(shù)學家在不斷研究因式分解的基礎上也未能取得有效的進展,因此要想通過n來得知所選取的素數(shù)p和q是非常困難的。而且通常來說,在實際的軟件加密應用當中,RSA數(shù)字簽名算法的密鑰保持在1024位以上,具有足夠的安全性能,可有效保障軟件注冊碼的安全性。
本文采取“一機一碼”制軟件保護方案,分析了RSA數(shù)字簽名算法在軟件加密當中的具體應用。
1.序列號的產(chǎn)生
本文所采取的是“一機一碼”制軟件保護方案,也就是說,每臺計算機的序列號是唯一的。計算機的硬盤序列號、網(wǎng)卡MAC地址混合形成計算機的標志碼,再利用本機的消息摘要及哈希算法則可將所形成的標志碼轉變?yōu)楸緳C的序列號,此序列號是唯一且固定的。在序列號的生成過程當中可自行加入任何數(shù)據(jù),同時利用RSA數(shù)字簽名算法將所加入數(shù)據(jù)進行加密,從而形成軟件的注冊序列號。
2.注冊碼的生成
序列號生成之后,用戶下一步就需獲取注冊碼。首先,用戶可采取網(wǎng)絡或是電話等方式將所生成的序列號以及版本信息和電子郵箱等基本信息向開發(fā)商提供,然后開發(fā)商利用RSA數(shù)字簽名算法當中的私鑰來加密用戶信息,從而獲得軟件注冊碼;接著開發(fā)商將注冊碼利用各種方法將所得的密文進行轉化,如Base64、Uuencode編碼等,將所得密文轉變?yōu)榭梢宰址M行輸入的數(shù)據(jù),然后提供給用戶。
3.引入RSA數(shù)字簽名算法
利用RSA數(shù)字簽名算法加密軟件時,密鑰的長度越長,加密的計算量就會越大,軟件的保密程度也會越深。本方案當中,利用RSA數(shù)字簽名算法進行軟件加密的密鑰長度設定為1024bit。RSA公鑰的算法如下:第一,將計算機的序列號及網(wǎng)卡的MAC地址提取出來以形成公開信息m;第二,利用RSA數(shù)字簽名算法當中的私人密鑰d來加密公開信息m,從而得到密文s;第三,利用RSA數(shù)字簽名算法當中的公開密鑰e來解密密文s,從而得到明文m'。此過程當中的部分代碼如下:
//讀取硬盤序列號
上述代碼為讀取計算機硬盤序列號及利用RSA數(shù)字簽名算法進行解密的過程。解密之后,將通過以計算機的序列號及網(wǎng)卡的MAC地址提取出來以形成公開信息m與解密所得明文m'進行比較,若兩者一致,則說明注冊信息為合法信息,軟件可正常運行;若不一致,則說明注冊信息不合法,軟件無法運行。
4.密鑰數(shù)據(jù)庫管理
就理論而言,不管是哪種加密方法都是有可能被破解的,只是不同加密方法的破解難度有所不同。為加強軟件的破解難度,可利用數(shù)據(jù)庫存來存儲公開密鑰及私密密鑰,并定期更換,同時利用Access數(shù)據(jù)庫以對用戶信息進行保存,并存儲各版本軟件加密密鑰,從而達到更新密鑰的目的,進而提高軟件的破解難度。
在這種情況下,用戶若想獲取加密密鑰,則可通過編寫相應的SQL語言以讓系統(tǒng)在數(shù)據(jù)庫存當中進行查詢即可,系統(tǒng)會依照相關用戶信息自動查找并提取出相應的加密密鑰。
5.驗證用戶合法性
程序在進行運行時會自動彈出注冊碼輸入框,用戶輸入正確注冊碼,即可注冊成功;若所輸入注冊碼錯誤,則提示注冊失敗。
要注意的是,每臺計算機的識別碼都是唯一的,軟件也是通過識別碼來辨別各計算機的。但是當計算機升級或是某些部件被更換之后,其識別碼也會產(chǎn)生變化。在這種情況下,用戶若要再次使用軟件,則可能需重新申請注冊碼,這在很大程度上加大了用戶和開發(fā)者或開發(fā)商的負擔。為此,在設計識別碼時應注意有一定的變化空間。如WindowsXP,其識別碼為64位,其中有10項硬件信息,如CPU序列號、RAM容量、網(wǎng)卡MAC地址等,若識別碼有變化并保持在3位以內,則軟件會默認為系統(tǒng)硬件更換或是軟件升級等狀況。在此情況下,軟件程序在校驗注冊碼時會與本機的識別碼進行比較,若完全匹配或是硬件變化較小,則軟件仍可正常運行。
利用RSA數(shù)字簽名算法對軟件進行加密,同時采取數(shù)據(jù)庫管理方式定期更新密鑰,可有效提高軟件的破解難度,避免軟件被非法復制或傳播,保障了開發(fā)者及開發(fā)商的合法權益。但就理論而言,RSA數(shù)字簽名算法也不能保證軟件的絕對安全,因此對于RSA數(shù)字簽名算法在軟件加密當中的應用還需進行深入研究,以不斷完善現(xiàn)有加密方法,同時開發(fā)新的軟件保護技術,以將防止盜版工作做得更好,促進軟件行業(yè)的健康發(fā)展。
[1]董燦鈞.注冊碼軟件加密保護中的RSA算法的應用[J].信息安全與技術,2013(9):15-16.
[2]劉心聲.RSA算法在共享軟件加密技術中的應用機制研究[J].計算機光盤軟件與應用,2012(24):170-171.
[3]卜曉燕,張根耀.組合算法在軟件加密系統(tǒng)中的實現(xiàn)[J].計算機與數(shù)字工程,2012(8):77-79.
[4]趙鑫.RSA文件加密軟件的設計與開發(fā)[J].數(shù)字技術與應用,2014(8):173-174.
TP
A
1673-0046(2016)8-0187-02