◆黃 碩
?
RSA數字簽名算法在軟件加密中的應用
◆黃 碩
(武警吉林省總隊 吉林 130012)
互聯網發展速度過快,軟硬件更新換代的周期越來越短,智能化手機的不斷普及給我們生活帶來方便的同時,也給我們個人信息帶來了泄露風險。正因為如此,相關專家對加密算法進行著不斷深入的研究。數字簽名算法是目前保護軟件信息最有效的算法,它能夠給用戶提供多種加密方式,當用戶在進入軟件的時候不僅需要注冊碼和密碼,另外還需要用戶自己瞬時的數字簽名,這種方式大大地增加了算法的可靠性,在防止軟件非法注冊方面有著得天獨厚的優勢。本文將從數字簽名算法的原理出發,介紹數字簽名算法的幾大種類,對數字簽名算法在實際中的應用案例進行分析,為用戶能夠更好理解數字簽名算法提供理解思路。
注冊碼軟件;加密;數字簽名算法
計算機軟件是一個能夠讓用戶借助計算機進行操作實現自己想法的一個數據庫集合。但是隨著網絡的快速發展,計算機軟件在安全方面的更新速度相對就比較緩慢了,這就給了許多網絡黑客一個可乘之機,他們通過一系列非法手段對軟件的注冊進行破解,然后再將這些破解后的軟件賣給用戶,從中謀取暴力,給軟件開發企業帶來了巨大損失。但是當前新型的數字簽名算法可以有效地解決這個問題,當用戶在進行軟件的購買時,軟件供應廠商會給用戶提供注冊碼和使用碼,同時也會要求用戶寫下自己的親筆簽名,當用戶在進行軟件使用的時候,軟件會定期要求用戶輸入自己的簽名,內部程序對前后的簽名進行對比,如果融合率在85%以上,用戶就可以放心使用,如果融合率低于85%就會給用戶三次輸入機會,三次機會在一次校驗中如果全部是低融合率,那么軟件就會自動鎖定。這個算法能夠很好地避免黑客的入侵破解,另外在很大程度上也為用戶的信息提供了強有力的安全保障。
數字簽名是一個帶有密鑰的消息摘要算法,這個密鑰包括了公鑰和私鑰,用于驗證數據完整性、認證數據來源和抗否認,遵循OSI參考模型、私鑰簽名和公鑰驗證。也是非對稱加密算法和消息摘要算法的結合體,常見的數字簽名算法主要有RSA、DSA、ECDSA三種,密鑰的產生和轉換都是一樣的,包括在售的所有SSL數字證書、代碼簽名證書、文檔簽名以及郵件簽名大多都采用RSA算法進行加密。
如果把密碼學里的數字簽名看成有兩個輸入、一個輸出的函數,那么私鑰是x,被簽名的消息是y, 得出來的簽名z是跟x和y同時綁定的,注意是“同時”。所以,用同樣的私鑰給不同的文件或者消息簽名,得出來的簽名是不同的。如果函數內部在每次執行簽名的時候還會產生一個隨機數的話,那么這個隨機數通常也會直接或者間接成為z的一部分,這樣的話,即使文件相同,在不同時間進行的簽名也會不同。否則,簽名就很容易被偽造到另一份文件上了。簡單來說,就可以理解為,即使是你自己用同一支筆給文件簽名,簽在兩份文件上的簽名也并不是完完全全相同。
詳細來說,簽名用的是一個算法非常復雜的鑰匙函數(d,e)。而范本N是可變的,是不斷改變著的兩個素數的乘積。假設d是用戶自己設置數字簽名所獲得的一把鑰匙,用戶在使用軟件的時候會用d來驗證簽名。e是軟件本身程序用來驗證簽名的另一把鑰匙,也就是公鑰。e、d兩者滿足公式:

產生簽名 Sign(m, d),對于消息m來說,簽名是驗證公式:

如果用戶給出的數字簽名能夠達到一定的契合度,那么這個數字簽名就是合法的簽名了,反之,這個數字簽名就不能被軟件使用,需要另外的簽名組合。那么怎么保證簽名信息的安全呢?軟件內部的應用程序會根據用戶給出的合法簽名用上面的公式進行復雜的計算,形成一個公鑰和一個私鑰。這兩個密鑰的范本相當大,且驗證的時間非常短,所以目前的計算機處理器速度根本無法進行破解。RSA的橢圓曲線主要是提供了更難計算離散對數問題的群和對B Map的支持。原則上來說,驗證一個簽名,就是用一個函數把公鑰、消息、簽名當輸入,計算一個特定的“等于”關系。
RSA數字簽名算法經常會采用一對一匹配的方式對軟件進行加密,每個軟件會生成不同的序列號,將這個序列號輸入軟件自帶的解碼器,可以生成一套注冊碼,用這個注冊碼就能夠將軟件激活,同時RSA還會將軟件如用戶計算機的物理地址連接起來,由于物理地址的唯一性,軟件的使用者也就變得唯一了。另外,軟件也會向用戶索要數字簽名,這是該算法最核心的部分,用戶進行數字簽名之后,軟件后臺程序會自動運行,形成一個公鑰和一個私鑰,一個保存在軟件本身的應用程序中,另一個則由用戶保存,形成一把鑰匙開一把鎖的局面,不僅能夠保證軟件的安全,也能夠保證用戶創作的安全。
序列號的產生是通過RSA獨有的算法改進計算得來的,這個算法需要用戶計算機的物理地址和某一硬件編碼作為樣本,所以得到的序列號是唯一且固定的。序列號是通過軟件自動生成的,這樣的優勢在于可以節省用戶的時間,另外利用RSA數字簽名算法將所加入數據進行加密,從而形成軟件的注冊序列號。
序列號生成之后,用戶下一步就需獲取注冊碼。首先,用戶可采取網絡或是電話等方式將所生成的序列號以及版本信息和電子郵箱等基本信息向開發商提供,然后開發商利用RSA數字簽名算法當中的私鑰來加密用戶信息,從而獲得軟件注冊碼。
首先將計算機的序列號及網卡的MAC地址提取出來以形成公開信息m,然后利用RSA數字簽名算法當中的私人密鑰d來加密公開信息m,從而得到密文s;最后利用RSA數字簽名算法當中的公開密鑰e來解密密文s,從而得到明文m。
就理論而言,不管是哪種加密方法都是有可能被破解的,只是不同加密方法的破解難度有所不同。為加強軟件的破解難度,可利用數據庫存來存儲公開密鑰及私密密鑰,并定期更換,同時利用Access數據庫以對用戶信息進行保存,并存儲各版本軟件加密密鑰,從而達到更新密鑰的目的,進而提高軟件的破解難度。
利用RSA數字簽名算法對軟件進行加密,同時采取數據庫管理方式定期更新密鑰,可有效提高軟件的破解難度,避免軟件被非法復制或傳播,保障了開發者及開發商的合法權益。但就理論而言,RSA數字簽名算法也不能保證軟件的絕對安全,因此對于RSA數字簽名算法在軟件加密當中的應用還需進行深入研究,以不斷完善現有加密方法,同時開發新的軟件保護技術,將防止盜版工作做得更好,促進軟件行業的健康發展。
[1]佟曉筠,王翥,郭長勇等.基于RSA等算法軟件加密技術的研究與實現[J].微處理機,2003.
[2]閆樂林,蔡平勝,梁晨.基于RSA的雙重加密技術在軟件注冊中的應用研究[J].網絡安全技術與應用,2006.
[3]劉傳領,范建華.RSA非對稱加密算法在數字簽名中的應用研究[J].通信技術,2009.