一種離線解析dpapi加密數據的方法
【專利摘要】本發(fā)明公開一種離線解析DPAPI加密塊數據的方法,包括步驟:S1.加載待分析設備數據源,確定待分析設備數據源磁盤Windows操作系統(tǒng)分區(qū);S2.獲取系統(tǒng)賬號主密鑰文件、System文件和Security文件;S3.通過掃描DPAPI加密塊特征值獲取待解密文件的DPAPI加密塊;S4.解析System文件和Security文件獲取Pbkdf2密鑰明文;S5.獲取解密系統(tǒng)賬號主密鑰文件所需的關鍵信息,使用Pbkdf2密鑰解密系統(tǒng)賬號主密鑰文件得到主密鑰明文;S6.使用主密鑰解密DPAPI加密塊得到數據明文。本發(fā)明的有益效果為:本發(fā)明無需依賴于目標數據源所在的操作系統(tǒng),也無需知道計算機的用戶名和密碼,即可對DPAPI系統(tǒng)存儲區(qū)的加密數據進行解密,同時也滿足對證據源只讀操作和跨平臺解密的需求。
【專利說明】—種離線解析DPAPI加密數據的方法
【技術領域】
[0001]本發(fā)明涉及數據加解密領域,特別是涉及一種離線解析DPAPI加密數據的方法?!颈尘凹夹g】
[0002]美國微軟公司的Windows操作系統(tǒng)是目前最流行的PC操作系統(tǒng),其數據安全性一直備受關注。從WindoWS2000開始,微軟提供了一組簡單易用的系統(tǒng)級數據保護接口(Data Protection Application Programming Interface,即 DPAPI,包含加密函數CryptProtectData和解密函數CryptUnprotectData),為應用程序和操作系統(tǒng)提供數據保護服務。該組接口的顯著特點是加密和解密操作必須在同一臺計算機上進行,由操作系統(tǒng)內部完成密鑰的產生、存儲和使用,消除了應用程序密碼密鑰的管理問題。DPAPI的應用范圍十分廣泛,如遠程桌面密碼、FTP賬號密碼、無線上網密碼、EFS的私鑰加密、部分郵箱賬號密碼、常見瀏覽器的上網自動表單、以及國內外的一些即時通訊軟件,在密碼密鑰的保護上也用到了該組接口。所以離線解析DPAPI加密數據,在電子取證行業(yè)有著不小的現實意義。
[0003]目前,大部分的取證軟件都是采用現場在線的方式解析DPAPI加密數據,即通過直接啟動或動態(tài)仿真數據源所在的操作系統(tǒng),登錄對應的賬戶,安裝并啟動取證軟件,軟件內部通過調用CryptUnprotectData函數來解密DPAPI的加密數據塊,最后在界面上展示結果。這種方法直接依賴于目標源操作系統(tǒng),如果系統(tǒng)遭破壞無法啟動則數據無法解密,且操作過程中容易污染數據源,破壞證據的只讀性。
[0004]另外,國內雖有一專利提出了針對用戶存儲區(qū)的DPAPI加密數據的解密,該方法能夠解析用戶賬戶級的加密數據,但需要事先知道用戶登錄賬戶對應的SID和明文密碼,否則無法解密,同時該方法只針對DPAPI用戶存儲區(qū)的加密數據,無法針對系統(tǒng)存儲區(qū)、也就是本機系統(tǒng)級的DPAPI加密數據進行解密。
【發(fā)明內容】
[0005]為解決上述技術問題,本發(fā)明提供了一種無需依賴于目標數據源所在的操作系統(tǒng),且無需知道待解密數據源操作系統(tǒng)用戶登錄賬戶密碼,即可對DPAPI系統(tǒng)存儲區(qū)的加密數據進行解密的離線解析DPAPI加密數據的方法。
[0006]一種離線解析DPAPI加密數據的方法,包括步驟:S1、加載待分析設備數據源,確定待分析設備數據源磁盤Windows操作系統(tǒng)分區(qū);S2、根據所述操作系統(tǒng)分區(qū)獲取系統(tǒng)賬號主密鑰文件、System文件和Security文件;S3、通過掃描DPAPI加密塊特征值獲取待解密文件的DPAPI加密塊;S4、解析System文件和Security文件獲取Pbkdf2密鑰明文;S5、獲取解密系統(tǒng)賬號主密鑰文件所需的關鍵信息,使用Pbkdf2密鑰解密系統(tǒng)賬號主密鑰文件得到主密鑰明文;S6、使用主密鑰解密DPAPI加密塊得到數據明文。
[0007]本發(fā)明的有益效果為:本發(fā)明通過Pbkdf2密鑰解密系統(tǒng)賬號主密鑰文件得到主密鑰明文,由主密鑰解密DPAPI加密塊得到數據明文,實現對DPAPI系統(tǒng)存儲區(qū)加密數據進行離線解析,并且本發(fā)明無需直接啟動或動態(tài)仿真數據源所在設備的操作系統(tǒng)就能實現以只讀方式讀取數據源DPAPI加密數據,無需登錄用戶的賬號和明文密碼即可進行數據解密。進一步地,本發(fā)明不依賴于WindowsCryptAPI庫,無需調用CryptAPI函數接口,可滿足跨平臺使用的要求。
【專利附圖】
【附圖說明】
[0008]圖1為本發(fā)明實施方式一種離線解析DPAPI加密數據的方法的流程圖。
【具體實施方式】
[0009]為詳細說明本發(fā)明的技術內容、構造特征、所實現目的及效果,以下結合實施方式并配合附圖詳予說明。
[0010]一、對本發(fā)明涉及的縮略語和關鍵術語進行定義和說明:
[0011]DPAPI:(Data Protection Application Programming Interface)
[0012]加密函數CryptProtectData:微軟Windows操作系統(tǒng)提供的加密接口 ;
[0013]解密函數CryptUnprotectData:微軟Windows操作系統(tǒng)提供的解密接口 ;
[0014]DPAPI加密塊:用加密函數CryptProtectData加密過的數據;
[0015]Pbkdf2運算:一種基于迭代復雜度保證密碼安全的加密算法(Password-BasedKey Derivation Function2),首先,它需要選取一種傳統(tǒng)的加密算法,通常為單向散列算法,如SHA-1算法做為它的基礎加密算法;其次,它需要指定迭代次數和干擾值,這個迭代次數是用來確定基礎加密算法被執(zhí)行的次數,次數越多則密碼被暴力破解的可能性越低,數據越安全;
[0016]MD5哈希運算:單向散列算法,產生長度為128位的消息摘要;
[0017]SHA-1哈希運算:單向散列算法,產生長度為160位的消息摘要;
[0018]SHA256哈希運算:單向散列算法,產生長度為256位的消息摘要;
[0019]SHA-512哈希運算:單向散列算法,產生長度為512位的消息摘要;
[0020]DES-3:三重數據加密標準(Triple Data Ecryption Standard),一種對稱密鑰加密算法,衍生于DES加密算法;
[0021]AES-256:高級加密標準(Advanced Entryption Standard),在密碼學中又稱Rijndael加密法,也是一種對稱密鑰加密算法,安全性高于DES ;
[0022]HMAC算法:加密散列函數,又叫做基于散列的消息認證代碼(Hash-basedMesssage Authentication Code),使用加密散列函數需要一個密鑰,同時還需指定一個散列函數,可以是MD5或SHA-1等,HMAC主要用來確定加密的數據不被篡改;
[0023]主密鑰文件唯一標識masterKeyGuid:主密鑰文件的文件名,是一個全局唯一標識的Guid字符串,存放在系統(tǒng)賬號目錄;
[0024]數據塊加密算法標識dwCryptoAlgld:算法標識(ALG_ID)是微軟定義的一系列32位整數類型值,用于指明運算過程中所采用的加密或哈希算法。其中,以0x66開頭的標識通常標識對稱加密算法,以0x80開頭的標識通常標識哈希算法。例如加密算法標識CALG_3DES,其對應值為0x6603,表示為三重數據加密標準算法;
[0025]加密密鑰長度dwCryptoAlgldKeyBitLen:加密算法的密鑰位數,例如DES-3加密算法的密鑰長度是168位;
[0026]加密算法干擾值pbyCryptoAlgSalt:干擾值(Salt Value),也叫做“鹽”,通常也是隨機數,算法中加入干擾值可以有效防止預先計算好的彩虹表的攻擊;
[0027]數據塊哈希算法標識dwHashAlgld:算法標識(ALG_ID)是微軟定義的一系列32位整數類型值,用于指明運算過程中所采用的加密或哈希算法。其中,以0x66開頭的標識通常標識對稱加密算法,以0x80開頭的標識通常標識哈希算法。例如哈希算法標識CALG_MD5,其對應值為0x8003,表示為MD5哈希散列算法;
[0028]消息摘要長度dwHashDigestBitLen:哈希算法計算后得到的散列值長度,如MD5哈希算法的消息摘要長度是128位;
[0029]密文長度dwDpapiCipherLen:Dpapi加密數據塊的大??;
[0030]主密鑰干擾值pbkSalt:干擾值(Salt Value),也叫做“鹽”,通常也是隨機數,算法中加入干擾值可以有效防止預先計算好的彩虹表的攻擊;
[0031]Pbkdf2算法迭代次數dwPbkdf2Num:Pbkdf2算法的迭代次數,該值越高也不容易被破解,但運算速度也會相應受影響;
[0032]主密鑰哈希算法標識dwHmacAlgld:算法標識(ALG_ID)是微軟定義的一系列32位整數類型值,用于指明運算過程中所采用的加密或哈希算法。其中,以0x66開頭的標識通常標識對稱加密算法,以0x80開頭的標識通常標識哈希算法。例如哈希算法標識CALG_MD5,其對應值為0x8003,表示為MD5哈希散列算法;
[0033]主密鑰加密算法標識dwCryptoAlgld:算法標識(ALG_ID)是微軟定義的一系列32位整數類型值,用于指明運算過程中所采用的加密或哈希算法。其中,以0x66開頭的標識通常標識對稱加密算法,以0x80開頭的標識通常標識哈希算法。例如加密算法標識CALG_3DES,其對應值為0x6603,表示為三重數據加密標準算法;
[0034]主密鑰密文pbyMasterCipher:主密鑰經過加密后生成的密文;
[0035]SID:安全標識符(Security Identifiers),是標識用戶、組和計算機賬號的唯一號碼;
[0036]JD:注冊表當前使用的系統(tǒng)安全策略的子鍵之一;
[0037]Skewl:注冊表當前使用的系統(tǒng)安全策略的子鍵之一;
[0038]GBG:注冊表當前使用的系統(tǒng)安全策略的子鍵之一;
[0039]Data:注冊表當前使用的系統(tǒng)安全策略的子鍵之一;
[0040]System文件:Windows的注冊表文件之一,存儲計算機硬件和系統(tǒng)的信息;
[0041]Security文件:Windows的注冊表文件之一,存儲安全性設置信息;
[0042]Syskey:用來保護系統(tǒng)SAM文件的一個密鑰,長度一般為16個字節(jié);
[0043]二、對本發(fā)明的技術方案進行詳細闡述如下:
[0044]請參閱圖1,為本發(fā)明一實施方式一種離線解析DPAPI加密數據的方法的流程圖,該方法包括步驟:
[0045]S1、加載待分析設備數據源,確定待分析設備數據源磁盤Windows操作系統(tǒng)分區(qū);
[0046]S2、根據所述操作系統(tǒng)分區(qū)獲取系統(tǒng)賬號主密鑰文件、System文件和Security文件;
[0047]S3、通過掃描DPAPI加密塊特征值獲取待解密文件的DPAPI加密塊;[0048]S4、解析System文件和Security文件獲取Pbkdf2密鑰明文;
[0049]S5、獲取解密系統(tǒng)賬號主密鑰文件所需的關鍵信息,使用Pbkdf2密鑰解密系統(tǒng)賬號主密鑰文件得到主密鑰明文;
[0050]S6、使用主密鑰解密DPAPI加密塊得到數據明文。
[0051]所述步驟SI具體包括步驟:
[0052]S11、通過寫保護設備加載待分析設備數據源;
[0053]S12、通過識別Windows文件夾、注冊表文件、休眠文件和頁面交換文件的路徑確定待分析設備數據源磁盤Windows操作系統(tǒng)的系統(tǒng)分區(qū)。
[0054]所述寫保護設備可以是只讀鎖設備也可以是只讀設備,采用寫保護設備進行數據讀取可以防止對待分析設備數據源造成數據破壞。
[0055]以真機環(huán)境下C盤為系統(tǒng)分區(qū)為例,所述步驟S2中操作系統(tǒng)賬號的主密鑰文件、System文件和Security文件的完整路徑如表一所示:
[0056]表一、主密鑰文件、System文件和Security文件的路徑
[0057]
【權利要求】
1.一種離線解析DPAPI加密數據的方法,其特征在于,包括步驟: 51、加載待分析設備數據源,確定待分析設備數據源磁盤Windows操作系統(tǒng)分區(qū); 52、根據所述操作系統(tǒng)分區(qū)獲取系統(tǒng)賬號主密鑰文件、System文件和Security文件; 53、通過掃描DPAPI加密塊特征值獲取待解密文件的DPAPI加密塊; 54、解析System文件和Security文件獲取Pbkdf2密鑰明文; 55、獲取解密系統(tǒng)賬號主密鑰文件所需的關鍵信息,使用Pbkdf2密鑰解密系統(tǒng)賬號主密鑰文件得到主密鑰明文; 56、使用主密鑰解密DPAPI加密塊得到數據明文。
2.根據權利要求1所述的離線解析DPAPI加密數據的方法,其特征在于,所述步驟SI具體包括步驟: 通過寫保護設備加載待分析設備數據源; 通過識別Windows文件夾、注冊表文件、休眠文件和頁面交換文件的路徑確定待分析設備數據源磁盤Windows操作系統(tǒng)的系統(tǒng)分區(qū)。
3.根據權利要求1所述的離線解析DPAPI加密數據的方法,其特征在于,所述步驟S3中DPAPI加密塊特征值為DPAPI加密塊頭部20個固定字節(jié):{0x01, 0x00, 0x00, 0x00, OxDO,0x8C, 0x9D, OxDF, 0x01, 0x15, OxDI, 0x11, 0x8C, 0x7A, 0x00, OxCO, 0x4F, 0xC2, 0x97, OxEB}。
4.根據權利要求1所述的離線解析DPAPI加密數據的方法,其特征在于,所述步驟S3還包括記錄DPAPI加密塊在待解密文件中的偏移量。`
5.根據權利要求1所述的離線解析DPAPI加密數據的方法,其特征在于,所述步驟S4具體包括步驟: 解析System文件獲取操作系統(tǒng)當前使用的控件組; 根據操作系統(tǒng)當前使用的控件組計算操作系統(tǒng)的syskey ; 解析Security文件獲取本地安全認證子系統(tǒng)服務的相關配置信息,從相關配置信息中讀取系統(tǒng)安全策略版本號值PolRevision,判斷PolRevision是否大于0x00010009 ; 當PolRevision小于0x00010009時,讀取系統(tǒng)安全策略加密密鑰PolSecretEntryptionKey,并讀取 Pbkdf2 密鑰的密文內容 CurrVal ; 判斷CurrVal的第八個字節(jié)的值是否為1,當為I時,使用Keyl對Pbkdf2密文進行DES解密得到Pbkdf2密鑰明文,否則,使用key2對Pbkdf2密文進行DES解密得到Pbkdf2密鑰明文, 所述keyl為用Unicode編碼字符串“823543”做為密碼,字符串“823543”的長度和內容做為明文,進行DES加密得到的一個24字節(jié)的密文; 所述key2為對syskey進行一次MD5哈希運算,并將該運算結果做為參數對系統(tǒng)安全策略加密密鑰PolSecretEntryptionKey的60~76字節(jié)進行1000次的MD5哈希運算得到散列值Kl,再將散列值Kl做為RC4算法的解密密鑰對PolSecretEncryptionKey的12~60字節(jié)進行RC4解密得到的明文; 當PolRevision大于或等于0x00010009時,讀取系統(tǒng)安全策略加密密鑰鏈表PolEKList,對syskey進行一次SHA256哈希運算,并將該運算結果做為參數對PolEKList的28~60字節(jié)進行1000次SHA256哈希運算得到散列值K2,將散列值K2做為AES-256算法的解密密鑰對PolEKList60字節(jié)之后的內容進行AES-256解密得到PolEKList中密鑰的個數、索引值和對應的密鑰值; 構建一個內容為索引值與密鑰值對應的Pbkdf2密鑰鏈表KeyList,將解密后PolEKList中的索引值和對應的密鑰值導入密鑰鏈表KeyList中; 讀取Pbkdf 2密鑰的密文內容CurrVal,在CurrVal的4~20字節(jié)中取得PolEKList的密鑰值的索引值,根據該索引值從Pbkdf2密鑰鏈表KeyList中獲取PolEKList的密鑰; 對PolEKList的密鑰進行一次SHA256哈希運算,并將該運算結果做為參數對CurrVal的28~60字節(jié)進行1000次SHA256哈希運算得到散列值K3,將散列值K3做為AES-256算法的解密密鑰對CurrVal的60字節(jié)之后的內容進行AES-256解密得到Pbkdf2密鑰明文。
6.根據權利要求5所述的離線解析DPAPI加密數據的方法,其特征在于,所述步驟S5具體包括步驟: 獲取解密系統(tǒng)賬號主密鑰文件所需的關鍵信息,該關鍵信息包括主密鑰文件唯一標識masterKeyGuid、加密算法干擾值pbyCryptoAlgSalt、數據塊哈希算法標識dwHashAlgld、額外熵參數pOptionalEntropy和數據塊哈希算法標識dwHashAlgld ; 根據主密鑰文件唯一標識masterKeyGuid得到DPAPI加密塊的主密鑰文件,所述主密鑰文件共包含5個數據單元,分別為主密鑰頭部單元、用戶主密鑰單元、本地加密密鑰單元、歷史憑據標識單元和域密鑰備份單元; 解析用戶主密鑰單元獲取主密鑰干擾值pbkSalt、Pbkdf2算法迭代次數dwPbkdf2Num以及主密鑰哈希算法標識dwHmacAlgld ;` 以Pbkdf2算法迭代次數dwPbkdf2Num、主密鑰哈希算法標識dwHmacAlgld和主密鑰干擾值pbkSalt做為輸入參數,對Pbkdf2密鑰明文進行Pbkdf2運算,得到運算結果bySessionKeyAndIV ; 判斷 PolRevision 是否大于 0x00010009 ; 當PolRevision小于0x00010009時,所述結果bySessionKeyAndIV長度為32字節(jié),將bySessionKeyAndIV的前24字節(jié)和后8字節(jié)分別做為DES-3算法的解密密鑰和初始化向量對用戶主密鑰單元的主密鑰密文進行DES-3解密,得到的明文最后64字節(jié)即為主密鑰明文byMasterKey; 當PolRevision大于或等于0x00010009時,所述結果bySessionKeyAndIV長度為48字節(jié),將bySessionKeyAndIV的前32字節(jié)和后16字節(jié)分別做為AES-256算法的解密密鑰和初始化向量對用戶主密鑰單元的主密鑰密文進行AES-256解密,得到的明文最后64字節(jié)即為主密鑰明文byMasterKey。
7.根據權利要求6所述的離線解析DPAPI加密數據的方法,其特征在于,所述步驟S6具體包括步驟: 根據所述數據塊哈希算法標識dwHashAlgld對主密鑰明文byMasterKey進行哈希運算得到主密鑰哈希byMasterKeyHash ;根據所述加密算法干擾值pbyCryptoAlgSalt、數據塊哈希算法標識dwHashAlgld、額外熵參數pOptionalEntropy,以主密鑰哈希byMasterKeyHash做為輸入進行HMAC哈希運算,得到散列值hmacMasterkey ; 根據數據塊哈希算法標識dwHashAlgld和數據塊加密算法標識dwCryptoAlgld,以散列值hmacMasterkey做為輸入,生成對稱解密密鑰IastSessionKey ; 根據數據塊加密算法標識dwCryptoAlgld,以對稱解密密鑰IastSessionKey為解密密鑰、初始化向量為空,對DPAPI加密塊密文內容pbyDpapiCipher進行解密,獲得DPAPI加密塊明文。
8.根 據權利要求7所述的離線解析DPAPI加密數據的方法,其特征在于,所述對稱解密密鑰lastSessionKey使用完后立即從內存中清除。
【文檔編號】H04L9/06GK103701829SQ201410004313
【公開日】2014年4月2日 申請日期:2014年1月3日 優(yōu)先權日:2014年1月3日
【發(fā)明者】蘇再添, 吳少華, 林藝濱 申請人:廈門市美亞柏科信息股份有限公司