亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        DPAPI與RSA混合加密算法①

        2020-11-24 05:46:30金美玉湯亞玲張學鋒
        計算機系統應用 2020年11期
        關鍵詞:數字簽名私鑰加密算法

        金美玉,湯亞玲,張學鋒

        (安徽工業(yè)大學 計算機科學與技術學院,馬鞍山 243002)

        軟件授權是指軟件開發(fā)者利用相關加密算法及計算機技術來維護軟件知識產權,增加軟件被惡意復制盜用的難度、延長軟件被暴力破解的時間的一種技術手段[1].利用軟件授權來控制用戶對軟件的使用是目前維護軟件知識產權最普遍的方式.隨著互聯網技術的發(fā)展,計算機軟件與人們日常生活的聯系越來越緊密,伴隨而來的軟件知識產權保護問題也越來越重要[2].目前互聯網上已經出現很多未授權用戶可以非法使用軟件甚至惡意復制軟件的行為,說明軟件授權的安全性還有待提高.為了防止軟件被惡意復制及非法盜用,針對軟件授權的安全問題,提出一種新的軟件授權加密方法即DPAPI 加密算法與RSA 數字簽名算法混合的加密算法.為以后軟件授權技術的研發(fā)提供一個新的授權思路,進一步提高軟件授權過程中的安全性.

        1 DPAPI 加密算法

        DPAPI (Data Protection API)是Microsoft 隨Windows操作系統一起提供的對數據進行加解密的一種特殊保護接口,又稱為數據保護應用程序編程接口[3],具有快速加密解密,不用管理密鑰,防止離線暴力破解等優(yōu)點.DPAPI 加密算法提供兩種加密機制,分別是加密內存流機制和加密硬盤數據機制[4].本文采用第二種加密機制.DPAPI 加密算法的硬盤數據加密機制由加密函數CryptProtectData()和解密函數CryptUnProtectData()進行實現[5],且其與Windows 系統用戶緊密關聯.若用系統用戶調用加密函數,則加密后的數據只能由調用加密函數的同一系統用戶進行解密,且系統用戶不能調用解密函數解密其他系統用戶的DPAPI 加密數據[6],這也是DPAPI 加密算法能防止離線暴力破解的原因.本文也是利用DPAPI 加密算法的這一特性作為軟件是否正確授權的參考.DPAPI 加密算法的流程如圖1所示.

        圖1 DPAPI 加解密流程圖

        2 RSA 數字簽名算法

        RSA 加密算法是目前應用廣泛、影響較大的公鑰密碼算法[7],它能抵抗迄今為止已知的大多數密碼攻擊,已被ISO 推薦為公鑰數據加密標準[8].其安全性是基于數論中大整數(兩個素數的乘積)因式分解的困難程度,即素數取值越大,對大整數做因式分解的難度就越高,密鑰破解難度相對也就越大,算法也就更安全.換一句話說,分解大數因式愈困難,RSA 算法也就愈安全.除此之外,RSA 算法的通信雙方不需要提前傳遞密鑰,安全性能高,且其數學原理簡單,在工程應用中比較容易實現,既可以用來對數據進行加密又可以用來對信息發(fā)送方進行身份的認證,常與其他加密算法結合使用.

        RSA 數字簽名算法是經由RSA 公鑰密碼算法發(fā)展而來的[9],RSA 數字簽名算法使用私鑰對數據進行簽名(也可稱之為加密),使用公鑰對數據進行驗證(也可稱之為解密),如圖2所示.進行RSA 數字簽名有以下3 種目的,一是為了確定接收方接收的數據確實是由發(fā)送方對數據進行簽名并發(fā)送的,即發(fā)送方身份認證.二是經過數字簽名的數據可保證自身的數據完整性,即不可篡改偽造.三是數據經過數字簽名之后,發(fā)送方不能拒絕承認數據及簽名是己方發(fā)送的,即不能抵賴不承認.因為數字簽名的特性就是表征數據特點的,如果數據被篡改或偽造,同樣也會致使簽名的更改,不同的數據將得到不同的簽名結果(因簽名是私鑰及哈希加密數據后的結果),所以數字簽名在保證數據的安全、完整及真實性等方面有著非常重要的作用.對數據進行RSA 數字簽名的過程[10]如圖2.

        圖2 RSA 數字簽名過程

        (1)生成密鑰:(發(fā)送方即服務器端)取大素數p和q,兩者互質且保密;計算大整數n=p?q及歐拉函數φ(n)=(p?1)?(q?1);取整數e,使得e滿足條件1

        (2)簽名:服務器端發(fā)送簽名消息M到客戶端,先計算S=S ig(M)=Md(modn)再將S作為服務器端的數字簽名附加到消息M上.

        (3)驗證:若客戶端(即接收方)需要驗證服務器端對消息M的數字簽名S,則計算:M′=Se(modn),比較M'與M是否相等,若M′=M,則表明簽名S確實是服務器端對消息M的簽名,否則簽名S不是由服務器端生成的,是偽造的.

        3 DPAPI 與RSA 混合加密算法

        3.1 DPAPI 與RSA 混合加密算法的提出

        從Windows 2000 到更高版本的操作系統中都提供DPAPI 加密算法,用戶或操作系統程序都可以直接調用DPAPI 接口函數來對數據進行加密解密.由于DPAPI 加密算法具有簡單易用、加密強度大、不用管理密鑰(操作系統管理密鑰)的特性使得大量應用程序都采用DPAPI 加密算法來加密用戶的重要數據.如遠程桌面及IE 瀏覽器的自動登錄密碼、郵箱(Outlook)賬號密碼等[6].其次在進行DPAPI 加密的過程中,若加密之前與計算機關聯,并使用用戶口令或計算機憑據加密數據,則解密操作只能在實施加密操作的計算機上執(zhí)行,即使傳輸的數據被攔截,第三方也很難實現離線的暴力破解[4].最后,DPAPI 加密算法的內部結構及操作原理一直處于封閉狀態(tài)并未在微軟官方公布,這也在一定程度上保證了DPAPI 加密算法的安全性.因此,使用DPAPI 加密算法加密數據相當于使用了Windows、應用程序兩個級別的數據保護[4].

        RSA 數字簽名算法的安全性高、理論性簡單、易于實現,是目前應用最為廣泛的數字簽名算法.因其公鑰和私鑰的不同,無法由其中一個密鑰推斷出另一個密鑰[11],這是RSA 算法的安全性所在.目前攻擊RSA數字簽名算法的方法主要有算法攻擊和存在性偽造攻擊[9].其中算法攻擊的本質是指破解RSA 的私鑰,也就是對大整數進行因式分解,而大整數因式分解的安全性到目前為止還沒有得到理論上的完全證明,許多專家一致認為RSA 算法的安全性等同于分解大整數的難度,并且與RSA 相關的變體算法也已經被證明相當于大數分解[12],所以為了防止該類攻擊,通常使用較長的模數長度;而存在性攻擊是指攻擊者或通信雙方之外的第三方仿冒數據的有效簽名,以此來謀取公鑰和私鑰,從而達到破解數字簽名的目的.為了防止數字簽名遭受以上攻擊,RSA 數字簽名算法通常采用RSA 填充技術進行抵抗,該技術又稱為概率簽名標準技術.RSA 填充技術是一種基于RSA 密碼體制的簽名方案,它可以很好的防范上述攻擊,在RSA 數字簽名算法中應用廣泛[9].

        綜上所述,DPAPI 加密算法和RSA 數字簽名算法的安全性及保密性都有一定的保證.若兩種加密算法能夠很好地結合,就可以設計出一個DPAPI 與RSA混合的加密算法,既能保證數據接收方的正確性,又可以保證數據發(fā)送方的信息不會被仿冒.將該混合算法應用于軟件的授權過程,更好地保證授權安全,是本文研究的目的所在.DPAPI 與RSA 混合加密算法的架構圖如圖3.

        圖3 DPAPI 與RSA 混合算法協同工作示意圖

        3.2 DPAPI 與RSA 混合加密算法的原理

        DPAPI 加密算法一機一用的特點對于軟件授權來說是判斷是否正確授權的重要參考,其次,利用RSA數字簽名算法的私鑰對授權信息進行加密可以保證通信雙方之外的第三方無法偽造該信息,也是證明發(fā)送方信息真實性的依據[13].本文將DPAPI 加密算法與RSA 數字簽名算法進行混合并應用于軟件授權上.DPAPI 與RSA 混合應用示意圖如圖4所示.

        圖4 混合加密算法示意圖

        具體實現原理如下:

        (1)客戶端通過自定義函數隨機生成隨機串M1和隨機密鑰M2,長度均為256 位.

        (2)客戶端通過CryptProtectData()函數對隨機串M1進 行DPAPI 加密得到密文C1,密文長度為402 位.

        (3)拼接隨機串M1、隨機密鑰M2、密文C1,得到客戶端拼接串M3,長度為256+256+402=914 位.

        (4)客戶端將拼接串M3發(fā)送給服務器,服務器端在客戶端拼接串M3中 加入授權信息M4,此處的授權信息為軟件使用截止日期,如:2088-08-08,得到服務器端拼接串M5:M3+M4,長度為914+10=924 位.

        (5)服務器端將拼接串M5通過RSA 私鑰進行加密,實驗中RSA 相關函數的使用來自OpenSSL 軟件庫包.其中服務器端使用RSA_private_encrypt()函數來對拼接串M5進行私鑰加密,從而獲得密文C5.

        (6)服務器端將密文C5與 RSA 公鑰M6拼接成字符串M7:C5+M6,并通過BASE64 編碼得到字符串C7.

        (7)服務器端發(fā)送授權文件(字符串C7)到客戶端,客戶端接收并進行授權認證,執(zhí)行BASE64 解碼,得到C7′:C5′+M6′,再由RSA 公鑰M6′通過RSA_public_decrypt()函數對C5′進行解密得到服務器端拼接串M5′:M3′+M4′.

        (8)客戶端拆分M3′+M4′得到M1′+M2′+C1′+M4′,由隨機密鑰M2′通過CryptUnprotectData()函數對密文C1′進行解密得到明文隨機串M.比較隨機串M和M1′,若相等,寫入授權信息M4′,否則授權失敗.

        4 DPAPI 與RSA 混合加密算法的實現

        利用實驗室工程應用中的軟件對本文設計的混合加密算法進行驗證(使用3 臺機器進行驗證).機器A 和B 分別作為客戶端1 和2 來安裝軟件并利用客戶端1 進行軟件授權的申請,機器C 作為服務器端用于返回授權文件.如果在客戶端1 上進行了加密,那么在客戶端1 上能夠解密且在客戶端2 上解密失敗,則視為驗證通過.3 臺機器之間通過傳送授權文件進行通信,進而驗證混合加密算法的正確性及可行性,其中授權文件中包含用于比較驗證的密文數據及授權信息.

        由于DPAPI 加密算法在Windows 2000 及以上的操作系統中都有函數功能接口,用戶及操作系統程序都可以直接使用它.例如在VC 環(huán)境下,引用頭文件,就可以調用DPAPI 的加密解密函數.對于RSA 相關函數,該實驗通過引用OpenSSL 軟件庫包來提供.搭建過程如下:在Windows環(huán)境下安裝和編譯OpenSSL,編譯成功后再配置VC的OpenSSL 開發(fā)環(huán)境,即把OpenSSL 庫中include文件下的OpenSSL 文件拷貝至VC 安裝目錄下的include文件夾中,再將lib 文件夾下的庫文件拷貝至VC 的lib文件夾中,最后,在VC 的項目工程里設置工程屬性將庫添加進去,測試成功就可以使用RSA 的相關函數了.如圖5所示,客戶端生成隨機串和隨機密鑰.

        圖5 隨機串與隨機密鑰

        根據圖4可知,混合加密算法主要有DPAPI 加密、RSA 私鑰加密、BASE64 編碼、BASE64 解碼、RSA 公鑰解密、DPAPI 解密操作6 個步驟.因此在實現DPAPI 與RSA 混合加密算法時,要用到相應加密算法的函數,具體有以下4 個核心函數(由于參數較多此處省略介紹,詳情可查看官方文檔):

        1) DPAPI_IMP BOOL CryptProtectData();

        2) int RSA_private_encrypt();

        3) int RSA_public_decrypt();

        4) DPAPI_IMP BOOL CryptUnprotectData().

        函數1 的作用是將參數pDataIn 的實參值轉換為DPAPI 加密的密文,即客戶端提交的明文(隨機串M1)轉換成DPAPI 加密后的密文C1.同時設置參數dwFlags的取值為CRYPTPROTECT_LOCAL_MACHINE,將加密的數據與當前計算機關聯,而不是與單個用戶關聯.關聯后,該加密數據只能在該機器上進行解密操作,否則解密出的數據與原先的明文數據不同,進而不能獲得授權.

        函數2 的功能是對服務器端的拼接串M5(圖6)進行RSA 私鑰加密,即進行數字簽名.服務器端先接收客戶端發(fā)送的信息M3并通過字符串拼接函數將授權信息M4與M3進行拼接,然后再進行RSA 私鑰加密.本文通過調用PEM_write_bio_RSAPrivateKey()函數來生成私鑰(圖7),再利用PEM_read_bio_RSAPrivateKey()函數將RSA 私鑰信息存儲在參數rsa 中.在進行RSA私鑰加密之前需將字符串進行分割,因padding 參數采用RSA_PKCS1_PADDING 填充方式,采用該模式進行RSA 加密對密文的長度存在限制,密文最大長度為117 位.此處采用分段加密,將服務器端拼接串M5分成924÷117=8段 ,其中表示不小于x的最小整數.最后,對RSA 私鑰加密后的信息再進行二次處理,通過Base64 編碼得到字符串C7,增加了字符串的安全性.

        圖6 服務器端拼接串

        圖7 PEM_write_bio_RSAPrivateKey()函數生成私鑰

        客戶端對字符串C5′進行RSA 公鑰解密操作即函數3 的功能.客戶端接收授權文件(C7)并進行授權認證,利用Base64 執(zhí)行解碼操作,再利用RSA 公鑰對解碼后的信息C5′進行解密操作(圖8).本文通過調用PEM_write_bio_RSAPublicKey()函數來生成公鑰(如圖9),再利用PEM_read_bio_RSAPublicKey()函數將RSA 公鑰存儲在函數3 的參數rsa 中,且參數padding的取值與RSA 私鑰加密函數的padding 參數相同,也采用RSA_PKCS1_PADDING 填充方式.本文中對RSA公鑰解密后的字符串再進行拆分操作,便于進行DPAPI解密操作.

        圖8 RSA 公鑰解密結果

        圖9 PEM_write_bio_RSAPublicKey()函數生成公鑰

        客戶端對字符串C1′進行DPAPI 解密操作即函數4 的功能.函數3 執(zhí)行過后,客戶端再利用字符串拆分函數對RSA 公鑰解密后的信息進行字符串拆分保存,將拆分后的信息通過函數4 進行解密,解密后的信息再與拆分保存的字符串通過驗證函數進行對比驗證(如圖10),驗證函數返回值為true 時才可進行軟件授權信息的寫入.

        圖10 驗證結果

        基于上述對混合加密算法的驗證可知,相較于單獨使用DPAPI 或者RSA 加密算法進行軟件授權,該混合加密算法的安全性是增大的,且混合加密算法的兩層加解密過程是分別調用官方庫函數進行的,不會過多的消耗計算資源,還進一步增大了第三方破解該加密方案的復雜度.其次,因DPAPI 和RSA 加密算法本身具有較強的抗攻擊特性,理論上對于常見的攻擊方式,混合加密算法可做到很好的抵御.最后,本文提出的混合加密方案是在服務端加密和客戶端加解密過程來完成一次軟件授權的,通過實驗可知,兩層加密解密過程是有效的,即該混合加密算法是可行的.

        5 結束語

        首先,文章介紹了DPAPI 加密算法和RSA 數字簽名算法的原理及安全性依據.其次,介紹了DPAPI與RSA 混合加密算法在軟件授權過程中的應用原理.最后,在VC 環(huán)境下實現并驗證了這一混合算法.該算法結合了二者的優(yōu)點.DPAPI 加密算法用于對客戶端申請授權的信息進行加密,在一機一用的前提下保證授權的正確性;再用RSA 算法的私鑰加密服務器端的授權信息保證了授權信息不會被仿冒.由此可見,DPAPI加密算法與RSA 數字簽名算法的混合,能更好的保證軟件在授權過程中的正確性和安全性,同時,該混合算法在實驗室的工程應用中得到了驗證,表明該算法具有一定的可行性,可以作為一種軟件授權方案進行推廣和使用.

        猜你喜歡
        數字簽名私鑰加密算法
        比特幣的安全性到底有多高
        基于改進ECC 算法的網絡信息私鑰變換優(yōu)化方法
        淺析計算機安全防護中數字簽名技術的應用
        一種基于虛擬私鑰的OpenSSL與CSP交互方案
        基于數字簽名的QR碼水印認證系統
        基于小波變換和混沌映射的圖像加密算法
        Hill加密算法的改進
        對稱加密算法RC5的架構設計與電路實現
        基于數字簽名和HSM的數據庫篡改檢測機制
        基于Arnold變換和Lorenz混沌系統的彩色圖像加密算法
        波多野吉衣av无码| 日韩av一区二区网址| 亚洲婷婷久久播66性av| 日本国产精品久久一线| 色爱情人网站| 香蕉视频在线精品视频| 国内精品人妻无码久久久影院94 | 伊人精品无码AV一区二区三区| 99久久亚洲国产高清观看| 扒开双腿操女人逼的免费视频| 加勒比日韩视频在线观看| 久久亚洲中文字幕精品一区| 国产精品亚洲综合色区| 丰满多毛的大隂户视频| 99精品国产兔费观看久久| 色小姐在线视频中文字幕| 精品露脸国产偷人在视频| 插b内射18免费视频| 国产精品麻豆成人AV电影艾秋| 日本最新一区二区三区视频| 人成综合视频在线播放| 激情第一区仑乱| 亚洲AV成人无码久久精品四虎| 一区二区在线观看视频亚洲| 亚洲国产精品18久久久久久| 国产性生交xxxxx免费| 欧美在线日韩| 人妻少妇激情久久综合| 日韩高清不卡一区二区三区| 中文在线中文a| 女人色毛片女人色毛片18| 国产哟交泬泬视频在线播放| 亚洲国产精品成人一区二区三区 | 精品久久久久久午夜| 日韩美女av一区二区三区四区| 轻点好疼好大好爽视频| 亚洲人成综合网站在线| 国产成人啪精品视频免费网 | 天堂一区二区三区在线观看视频| 青青草原精品99久久精品66| 亚洲AV秘 无码一区二区三|