本申請涉及計算機領域,尤其涉及一種用于密鑰安全的加密技術。
背景技術:
移動終端密鑰的攻擊模型分為三種:惡意軟件,申請所有可用的系統權限,比如發短信、打電話、讀取聯系人、獲取地理位置等隱私信息;越獄攻擊,獲取設備最高權限,掃描文件系統,獲取系統敏感數據;監聽Root攻擊,監聽用戶鍵盤輸入,獲取輸入內容。
目前針對移動終端密鑰保護方式主要有如下幾種:第一,ARM TrustZone技術,從系統總線、處理器等方面的設計將嵌入式設備劃分為兩個獨立的運行環境,Normal Word負責Android OS(安卓系統)運行,Secure word負責處理敏感進程與數據。非授權程序無法獲取到存儲在Secure Word硬件中的數據,在Android系統中提供運行在Normal World的Android KeyStore Service進程,移動應用可以調用此進程獲取到存儲在Secure World硬件中密碼等敏感數據。使用上述密碼針對存儲在系統私有空間data/misc/keystore/目錄下的密鑰文件進行加解密。因Secure word中的密碼獲取困難,所以使用ARM TrustZone技術能夠增強密碼加密后的密鑰庫文件的安全性。在ARM TrustZone技術中,密鑰庫文件命名為UID_USRPKEY_KeyAlias,UID是系統分配給應用的用戶賬號,UID_USRPKEY是固定字符串,KeyAlias是密鑰別名。在移動終端被獲取最高權限后,惡意軟件可以拷貝上述密鑰庫文件并進行重命名,將上述UID變更成惡意軟件自身UID,此時調用Android KeyStore Service進程讀取Secure word密碼解密密鑰庫文件獲得密鑰。ARM TrustZone技術的缺陷是移動終端被越獄后密鑰可以安裝在同一個終端上的其他應用獲取。
第二,移動應用私有空間方式。移動操作系統為每一個應用分配私有存儲空間,將用于加密密鑰庫的密碼直接存儲在上述私有空間目錄下,因其他非授權應用無法訪問此應用的私有空間數據,所以增強使用上述密碼加密后的密鑰庫文件的安全性。在私有目錄下,密鑰庫密碼存儲在文件系統的文件或數據庫,在移動終端被獲取最高權限后,惡意軟件可以針對文件系統進行全面掃描獲取到密鑰庫密碼。移動應用私有空間存儲密鑰庫的缺陷是密鑰可以被同一個終端上的應用獲取,也可以被拷貝到其他終端上使用。
第三,用戶手動輸入的方式。密鑰庫密碼不存儲在移動終端上,移動應用啟動時,要求用戶輸入密碼,使用此密碼加密密鑰庫文件,移動應用進程關閉后,清除內存中密碼數據。因惡意軟件無法直接通過掃描文件系統獲取到密碼,所以增強使用上述密碼加密后的密鑰庫文件的安全性。此方法的缺陷是用戶輸入的密碼安全強度低,很容易被暴力破解。在移動終端被獲取最高權限的情況下,鍵盤輸入內容可以被監聽。這樣,密鑰可以被同一個終端上的應用獲取,也可以被拷貝到其他終端上使用。
技術實現要素:
本申請的目的是提供一種用于密鑰安全的加密方法與設備,以解決用戶設備端的密鑰安全問題。
根據本申請的一個方面,提供了一種用于密鑰安全的加密方法,該方法包括:
基于從服務設備中獲取移動應用的唯一標識字符串,生成所述移動應用的數據密鑰;
根據加密算法及宏定義對所述數據密鑰進行靜態加密,并根據預設的散列函數及所獲取的用戶設備的MAC地址和用戶密碼對所述數據密鑰進行動態加密。
進一步地,從服務設備中獲取移動應用的唯一標識字符串,包括:
判斷移動應用啟動時本地是否存有密鑰,若沒有,則通過加密傳輸協議接口從服務設備中獲取所述移動應用的唯一標識字符串,
若有,則對存儲在用戶設備的所述移動應用的加密的密鑰進行解密,得到所述移動應用的唯一標識字符串。
進一步地,基于從服務設備中獲取移動應用的唯一標識字符串,生成所述移動應用的數據密鑰,包括:
根據預設的散列函數對從服務設備中獲取到的移動應用的唯一標識字符串進行哈希運算,生成所述移動應用的數據密鑰。
進一步地,根據加密算法及宏定義對所述數據密鑰進行靜態加密包括:
分別對所述數據密鑰、加密密鑰函數及對應的解密函數進行宏定義,基于所述宏定義得到靜態加密后的數據密鑰。
更進一步地,分別對所述數據密鑰、加密密鑰函數及對應的解密函數進行宏定義,基于所述宏定義得到靜態加密后的數據密鑰,包括:
分別對所述數據密鑰、加密密鑰函數及對應的解密函數進行宏定義,得到宏定義常量的字符;
將每個宏定義常量的字符填入函數執行棧的連續地址中,得到字符串;
提取所述連續地址的首地址對應的字符串,作為參數傳給對應的函數;
調用所述參數的對應的函數,得到靜態加密后的數據密鑰。
進一步地,所述方法還包括:將所述靜態加密后的數據密鑰存儲至所述用戶設備的本地文件系統的私有目錄下。
進一步地,所述用戶設備的MAC地址包括用戶設備上的無線網絡MAC地址和藍牙MAC地址。
進一步地,根據預設的散列函數及所獲取的用戶設備的MAC地址和用戶密碼對所述數據密鑰進行動態加密,包括:
從所述用戶設備中獲取無線網絡MAC地址、藍牙MAC地址及用戶密碼,得到拼接字符串;
根據預設的散列函數對所述拼接字符串進行散列計算,得到對應的哈希值;
將所述對應的哈希值作為所述數據密鑰的動態加密密碼,得到動態加密后的數據密鑰,并將所述動態加密密碼存儲在所述用戶設備中。
進一步地,所述方法還包括:將所述動態加密密碼及所述動態加密后的數據密鑰存儲至所述用戶設備的本地文件系統的私有目錄下。
進一步地,從用戶設備中獲取用戶設備的無線網絡MAC地址、藍牙MAC地址及用戶密碼,得到拼接字符串,包括:
通過調用對應的應用程序編程接口從用戶設備中獲取無線網絡MAC地址、藍牙MAC地址;
獲取所述移動應用對應的用戶密碼;
分別提取所述無線網絡MAC地址、所述藍牙MAC地址及所述用戶密碼中的多個字節,進行拼接得到拼接字符串。
進一步地,根據預設的散列函數及所獲取的用戶設備的MAC地址和用戶密碼對所述數據密鑰進行動態加密之后,包括:
根據所述移動應用的啟動操作獲取當前輸入的用戶密碼,并獲取所述移動應用所在當前用戶設備上的MAC地址;
根據預設的散列函數對所述MAC地址和所述用戶當前輸入的用戶密碼進行散列計算,得到待驗證結果;
將所述待驗證結果與所述用戶設備中存儲的動態加密密碼進行匹配,若不匹配,則未成功解密所述數據密鑰的動態加密密碼,若匹配,則成功解密所述數據密鑰的動態加密密碼。
根據本申請的另一方面,還提供了一種用于密鑰安全的加密的設備,所述設備包括:
生成裝置,用于基于從服務設備中獲取移動應用的唯一標識字符串,生成所述移動應用的數據密鑰;
加密裝置,用于根據加密算法及宏定義對所述數據密鑰進行靜態加密,并根據預設的散列函數及所獲取的用戶設備的MAC地址和用戶密碼對所述數據密鑰進行動態加密。
進一步地,所述生成裝置用于:
判斷移動應用啟動時本地是否存有密鑰,若沒有,則通過加密傳輸協議接口從服務設備中獲取所述移動應用的唯一標識字符串,
若有,則對存儲在用戶設備的所述移動應用的加密的密鑰進行解密,得到所述移動應用的唯一標識字符串。
進一步地,所述生成裝置用于:
根據預設的散列函數對從服務設備中獲取到的移動應用的唯一標識字符串進行哈希運算,生成所述移動應用的數據密鑰。
進一步地,所述加密裝置用于:
分別對所述數據密鑰、加密密鑰函數及對應的解密函數進行宏定義,基于所述宏定義得到靜態加密后的數據密鑰。
更進一步地,所述加密裝置用于:
分別對所述數據密鑰、加密密鑰函數及對應的解密函數進行宏定義,得到宏定義常量的字符;
將每個宏定義常量的字符填入函數執行棧的連續地址中,得到字符串;
提取所述連續地址的首地址對應的字符串,作為參數傳給對應的函數;
調用所述參數的對應的函數,得到靜態加密后的數據密鑰。
進一步地,所述設備還包括:
存儲裝置,用于將所述靜態加密后的數據密鑰存儲至所述用戶設備的本地文件系統的私有目錄下。
進一步地,所述用戶設備的MAC地址包括用戶設備上的無線網絡MAC地址和藍牙MAC地址。
進一步地,所述加密裝置用于:
從所述用戶設備中獲取無線網絡MAC地址、藍牙MAC地址及用戶密碼,得到拼接字符串;
根據預設的散列函數對所述拼接字符串進行散列計算,得到對應的哈希值;
將所述對應的哈希值作為所述數據密鑰的動態加密密碼,得到動態加密后的數據密鑰,并將所述動態加密密碼存儲在所述用戶設備中。
進一步地,所述設備還包括:存儲裝置,用于將所述動態加密密碼及所述動態加密后的數據密鑰存儲至所述用戶設備的本地文件系統的私有目錄下。
進一步地,所述加密裝置用于:
通過調用對應的應用程序編程接口從用戶設備中獲取無線網絡MAC地址、藍牙MAC地址;
獲取所述移動應用對應的用戶密碼;
分別提取所述無線網絡MAC地址、所述藍牙MAC地址及所述用戶密碼中的多個字節,進行拼接得到拼接字符串。
進一步地,所述設備還包括:
獲取裝置,用于根據所述移動應用的啟動操作獲取當前輸入的用戶密碼,并獲取所述移動應用所在當前用戶設備上的MAC地址;
計算裝置,用于根據預設的散列函數對所述MAC地址和所述用戶當前輸入的用戶密碼進行散列計算,得到待驗證結果;
匹配裝置,用于將所述待驗證結果與所述用戶設備中存儲的動態加密密碼進行匹配,若不匹配,則未成功解密所述數據密鑰的動態加密密碼,若匹配,則成功解密所述數據密鑰的動態加密密碼。
與現有技術相比,本申請通過基于從服務設備中獲取移動應用的唯一標識字符串,生成所述移動應用的數據密鑰;接著,根據加密算法及宏定義對所述數據密鑰進行靜態加密,并根據預設的散列函數及所獲取的用戶設備的MAC地址和用戶密碼對所述數據密鑰進行動態加密。通過對移動應用的數據密鑰進行靜態加密,保證移動應用的數據密鑰只能被包含宏定義加密過程的應用獲取,實現了數據密鑰的應用綁定;進一步地,通過對移動應用的數據密鑰進行動態加密,實現了數據密鑰的用戶設備綁定和用戶贊同,即使用戶設備的MAC地址被篡改成兩個用戶設備一致,用戶密碼不一致,則也無法破解數據密鑰獲取到移動應用中的業務數據,可以實現數據密鑰的用戶感知。
附圖說明
通過閱讀參照以下附圖所作的對非限制性實施例所作的詳細描述,本申請的其它特征、目的和優點將會變得更明顯:
圖1示出根據本申請一個方面的一種用于密鑰安全的加密方法流程示意圖;
圖2示出本申請一實施例中密鑰生成以及安全保護過程的示意圖;
圖3示出本申請一實施例中密鑰安全保護的方法流程示意圖;
圖4示出示出根據本申請另一個方面的一種用于密鑰安全的加密的設備結構示意圖。
附圖中相同或相似的附圖標記代表相同或相似的部件。
具體實施方式
下面結合附圖對本申請作進一步詳細描述。
圖1示出根據本申請一個方面的一種用于密鑰安全的加密方法流程示意圖;所述方法包括步驟S11和步驟S12,
在步驟S11中,基于從服務設備中獲取移動應用的唯一標識字符串,生成所述移動應用的數據密鑰;在此,服務設備隨機生成移動應用的唯一字符串,用戶設備端從服務設備中獲取到該唯一標識字符串后進行哈希運算得到固定長度的唯一值,將該固定長度的唯一值作為該移動應用的數據密鑰。在此,用戶設備端優選為移動終端。
在步驟S12中,根據加密算法及宏定義對所述數據密鑰進行靜態加密,并根據預設的散列函數及所獲取的用戶設備的MAC地址和用戶密碼PWD對所述數據密鑰進行動態加密。在此,移動應用在無網絡情況下使用時,用戶依然有瀏覽密文數據的需求,因此,需要對密文數據的數據密鑰進行安全保護,在本申請實施例中,根據加密算法及宏定義對數據密鑰進行靜態加密,保證移動應用的數據密鑰只能被包含宏定義加密過程的應用獲取,實現了密鑰的應用綁定,其中,加密算法可以包括國密SM4算法。在本申請一實施例中,將靜態加密后的數據密鑰直接存儲在用戶設備端A,當用戶設備端A被越獄后移動應用的業務數據及移動應用的數據密鑰同時被遷移到用戶設備端B上的安裝與用戶設備端A相同的移動應用(APP)時,用戶設備端B與用戶設備端A有一樣的宏定義的函數,可以成功解密從用戶設備端A中拷貝的業務數據,若僅是通過靜態加密處理數據密鑰是不能滿足數據密鑰的設備綁定的要求,因此還需要使用動態加密進行處理。動態加密處理是使用散列算法對用戶設備的MAC地址和用戶密碼PWD進行散列,得到動態加密密碼。需要說明的是,靜態加密處理和動態加密處理的過程是相互獨立的,順序先后不影響最終的數據密鑰安全保護的效果。
通過上述本申請所述的對數據密鑰進行靜態加密和動態加密的處理,使得數據密鑰僅能被一個特定應用訪問,不能被其他應用或終端訪問,滿足應用綁定與設備綁定的要求,實現用戶設備端的密鑰保護。
優選地,在步驟S11中,判斷移動應用啟動時是否本地存有密鑰,若沒有,則通過加密傳輸協議接口從服務設備中獲取所述移動應用的唯一標識字符串,若有,則對存儲在用戶設備的所述移動應用的加密的密鑰進行解密,得到所述移動應用的唯一標識字符串。在此,服務設備會給每個移動應用分配一個唯一的字符串,用來唯一標識移動應用,在用戶端需要判斷啟動某一移動應用時是否本地存有密鑰,若沒有,則從加密傳輸協議接口(https接口)獲取到服務設備給該移動應用分配的唯一標識字符串,若有,則從保存在用戶端的加密的密鑰解密后獲取,以獲取到的移動應用的唯一標識字符串進行生成密鑰。
接著,在步驟S11中,根據預設的散列函數對從服務設備中獲取到的移動應用的唯一標識字符串進行哈希運算,生成所述移動應用的數據密鑰。獲取到移動應用的唯一標識字符串后,使用預設的散列函數對該唯一字符串進行哈希算法,其中,預設的散列函數如對sm3算法進行修改,例如算法中將迭代條件改為滿足多少輪,和哪些字符進行混淆迭代等,使得經過散列算法后的字符串能夠成為具有一定安全性的數據密鑰。
優選地,在步驟S12中,分別對所述數據密鑰、加密密鑰函數及對應的解密函數進行宏定義,基于所述宏定義得到靜態加密后的數據密鑰。函數式宏定義可以嵌入到程序代碼中,沒有明確的入口,增加靜態分析難度。具體地,在步驟S12中,分別對所述數據密鑰、加密密鑰函數及對應的解密函數進行宏定義,得到宏定義常量的字符;將每個宏定義常量的字符填入函數執行棧的連續地址中,得到字符串;提取所述連續地址的首地址對應的字符串,作為參數傳給對應的函數;調用所述參數的對應的函數,得到靜態加密后的數據密鑰。在此,使用國密SM4算法對移動應用中的業務數據的數據密鑰進行靜態加密。靜態加密是指數據密鑰的加密的密碼在不同設備上是一致的,靜態加密的密碼(簡稱StaticKey)實際以密文字符串的形式定義在代碼中,使用時需要進行解密。StaticKey以及解密StaticKey函數均采用宏定義,例如,數據密鑰為:0x26,0x67,0x3b,0x31,0x3f,0x66,0x30,0x57,0x2f,0x3d,0x52,0x38,0x36,0x66,0x40,0x2a;對該數據密鑰進行靜態加密,具體如下所示的程序代碼:
#define PRIMARYKEY
((uint8_t[]){'a','b','c','d','e','f','g','h','1','2','3','4','5','6','7','8'})
#define SECRETKEY
((uint8_t[]){0x48,0x5d,0xcc,0xfd,0x68,0x34,0x0b,0xbb,0x59,0x26,0xe7,0xb2,0xf4,0x39,0x4f,0xeb})
#define GETSECRET
({
unsigned char originKey[16];
sm4_context ctx;
sm4_setkey_dec(&ctx,PRIMARYKEY);
sm4_crypt_ecb(&ctx,0,16,SECRETKEY,originKey);
originKey[16]='\0';
originKey;
})
在上述代碼中,SECRETKEY為加密后的StaticKey,PRIMARYKEY為加密密鑰,GETSECRET為解密函數,返回解密后的StaticKey,通過反匯編得知PRIMARYKEY、SECRETKEY不直接存儲在數據(data)段,被打散到多個指令中,成為指令的一部分,增加靜態分析的難度。上述宏定義常量的每個字符被逐個壓進函數執行棧的連續地址中組裝成字符串,然后取寄存器對應連續地址的首地址,作為參數傳給對應的函數,這使得每次調用時傳入的字符串地址都不同。函數執行完成后,它的執行棧被清空,PRIMARYKEY、SECRETKEY原始信息一并從棧中清除,重要信息不會常駐內存,僅在用到時才進入內存,用完立即清除,有效預防內存掃描,達到應用綁定的效果,數據密鑰僅被一個特定的移動應用訪問,不能被其他移動應用訪問。
優選地,所述用戶設備的MAC地址包括用戶設備上的無線網絡MAC地址和藍牙MAC地址。在本申請一實施例中,步驟S12包括:從所述用戶設備中獲取無線網絡MAC地址、藍牙MAC地址及用戶密碼PWD,得到拼接字符串;根據預設的散列函數對所述拼接字符串進行散列計算,得到對應的哈希值;將所述對應的哈希值作為所述數據密鑰的動態加密密碼,得到動態加密后的數據密鑰,并將所述動態加密密碼存儲在所述用戶設備中。在此,動態加密與靜態加密的區別是動態加密的密碼不寫死在代碼中,而是使用用戶設備的MAC地址和用戶密碼PWD拼接成一字符串,將該字符串進行散列運算,得到對應的哈希值,并存儲至用戶設備中,該哈希值為動態加密的密碼。由上述可知,動態加密是通過用戶設備的MAC地址和用戶密碼PWD拼接成的字符串散列后得到的,用戶設備不一致導致MAC地址不一致,不能破解數據密鑰,獲取到移動應用的業務數據,用戶密碼PWD輸入不正確表示用戶不贊同,同樣也不能破解數據密鑰。因此,通過對數據密鑰進行動態加密,可實現設備綁定和用戶贊同的密鑰安全需求。
優選地,在步驟S12中,通過調用對應的應用程序編程接口從用戶設備中獲取無線網絡MAC地址、藍牙MAC地址;獲取所述移動應用對應的用戶密碼PWD;分別提取所述無線網絡MAC地址、所述藍牙MAC地址及所述用戶密碼PWD中的多個字節,進行拼接得到拼接字符串。在本申請一實施例中,使用“6字節無線網絡MAC地址+6字節藍牙MAC地址+4字節用戶密碼PWD”拼接成的字符串進行SM3散列后的哈希值存放在用戶設備上,作為動態加密的密碼,其中MAC地址通過調用系統API獲取。需要說明的是,動態加密時使用的“6字節無線網絡MAC地址+6字節藍牙MAC地址+4字節用戶密碼PWD”拼接成的字符串僅為舉例,當用戶設備的MAC地址不為6字節時,也可以使用滿足此時MAC地址的字節對應的字符串。
優選地,所述方法還包括:根據所述移動應用的啟動操作獲取當前輸入的用戶密碼PWD,并獲取所述移動應用所在當前用戶設備上的MAC地址;根據預設的散列函數對所述MAC地址和所述用戶當前輸入的用戶密碼PWD進行散列計算,得到待待驗證結果;將所述待驗證結果與所述用戶設備中存儲的動態加密密碼進行匹配,若不匹配,則未成功解密所述數據密鑰的動態加密密碼,若匹配,則成功解密所述數據密鑰的動態加密密碼。
在此,使用用戶設備的MAC地址與用戶密碼PWD對數據密鑰進行動態加密之后,在每次啟動移動應用時要求用戶輸入用戶密碼PWD,并調用系統API獲取用戶設備的MAC地址,包括獲取無線網絡MAC地址和藍牙MAC地址,將所獲取到的用戶設備的MAC地址與用戶輸入的PWD進行拼接,利用預設的散列函數如SM3進行散列運算,得到待驗證結果,將該待驗證結果與之前已存儲在用戶設備的哈希值進行對比,若不匹配,則未成功解密所述數據密鑰的動態加密密碼,若匹配,則成功解密所述數據密鑰的動態加密密碼。若在同一用戶設備上,動態加密使得滿足用戶贊同的安全需求,在獲取到的用戶設備MAC地址和用戶輸入PWD密碼作為散列對象,對散列運算結果驗證是驗證PWD是否輸入正確,若輸入正確則表示用戶贊同,若輸入不正確,則表示用戶不贊同,保護數據密鑰;需要說明的是,PWD不存儲到用戶設備的本地,只存在內存中,移動應用進程殺死后,PWD自動銷毀,不保留任何痕跡。若用戶設備A的業務數據與業務密鑰同時被遷移到用戶設備B中,因在用戶設備上對密鑰進行了動態加密的安全保護,則即使用戶輸入PWD是對的,因用戶設備A與用戶設備的B的MAC地址不一致,致使最后的散列運算后的結果也與之前的動態加密密碼不一致,同樣不能成功破解到從用戶設備A拷貝的業務數據,因此通過動態加密也實現了設備綁定的密鑰安全需求。綜上所述,業務數據與業務數據密鑰文件從用戶設備A遷移到用戶設備B時,設備MAC地址不一致,無法破解密鑰文件,可以實現密鑰的設備綁定。即使MAC地址被篡改成兩個設備一致,PWD不一致,無法破解密鑰文件,可以實現密鑰的用戶感知。
優選地,所述方法還包括:步驟S13,將所述靜態加密后的數據密鑰存儲至所述用戶設備的本地文件系統的私有目錄下,在步驟S13中,還將所述動態加密密碼及所述動態加密后的數據密鑰存儲至所述用戶設備的本地文件系統的私有目錄下。在本申請實施例中,將動態加密處理得到的SM3散列運算后的哈希值以及靜態加密后的數據密鑰、動態加密后的數據密鑰存儲至用戶設備的本地系統的私有目錄下,在此,每一個用戶設備的操作系統為每一個移動應用分配私有存儲空間,將兩次加密后的數據密鑰存儲在上述分配的私有存儲空間的目錄下,即存儲在用戶設備的本地系統的私有目錄下,因其他非法授權應用無法訪問此應用的私有空間數據,所以增強使用了靜態加密和動態加密后的數據密鑰的安全性。
圖2示出本申請一實施例中密鑰生成以及安全保護過程,其中,server為服務設備,client為用戶設備,優選為移動終端,在服務設備端生成移動應用的一個唯一的字符串(str),判斷移動終端的對應的移動應用啟動時本地是否存有密鑰,若沒有,通過https接口獲取str,若有,則從保存在移動終端上的加密的密鑰解密后獲取;使用修改過的sm3算法對str進行散列得到數據密鑰(KEY),完成密鑰的生成過程,接著,進行密鑰的加密存儲,包括靜態加密和動態加密,在靜態加密過程中使用宏定義的方式,即#definePRIMARYKEY,#define SECRETKEY,#define GETSECRET,其中,SECRETKEY為加密后的靜態加密的密碼,PRIMARYKEY為加密密鑰,GETSECRET為解密函數,經過宏定義后得到靜態密鑰;使用國密sm4算法對靜態密鑰進行加密,得到靜態加密后的數據密鑰sm4str1,實現應用綁定(app bingding);通過用戶輸入(user input)獲取到用戶密碼PWD,并獲取用戶設備的MAC地址,將MAC地址+PWD的拼接字符串作為動態密鑰,使用sm3散列上述拼接字符串(MAC地址+PWD),使用sm4算法對該動態密鑰進行運算,得到動態加密后的數據密鑰sm4str2,實現設備綁定(device binding)和用戶贊同(user consent),最后,將sm4str2和散列運算得到的哈希值寫入(fwrite)密鑰數據庫文件,存儲至移動終端的本地文件系統的私有目錄下。圖2的密鑰安全保護過程的具體方法流程如圖3所示,通過圖3所示的對數據密鑰進行靜態加密和動態加密的過程,使得移動應用的業務數據密鑰只能被包含宏定義加密過程的應用獲取,實現了密鑰的應用綁定;業務數據與業務數據密鑰文件從移動終端A遷移到移動終端B時,設備MAC地址不一致,無法破解密鑰文件,可以實現密鑰的設備綁定,即使MAC地址被篡改成兩個設備一致,PWD不一致,無法破解密鑰文件,可以實現密鑰的用戶感知。
圖4示出根據本申請另一個方面的一種用于密鑰安全的加密的設備結構示意圖;所述設備1包括生成裝置11和加密裝置12,其中,生成裝置11基于從服務設備中獲取移動應用的唯一標識字符串,生成所述移動應用的數據密鑰;加密裝置12根據加密算法及宏定義對所述數據密鑰進行靜態加密,并根據預設的散列函數及所獲取的用戶設備的MAC地址和用戶密碼PWD對所述數據密鑰進行動態加密。
在此,所述設備1包括但不限于任何一種可與用戶通過觸摸板進行人機交互的移動電子產品,例如智能手機、PDA等,所述移動電子產品可以采用任意操作系統,如android操作系統、iOS操作系統等。優選地,設備1還可以是運行于所述用戶設備、或用戶設備與網絡設備、觸摸終端或網絡設備與觸摸終端通過網絡相集成所構成的設備上的腳本程序。當然,本領域技術人員應能理解上述用戶設備1僅為舉例,其他現有的或今后可能出現的設備1如可適用于本申請,也應包含在本申請保護范圍以內,并在此以引用方式包含于此。
上述各裝置之間是持續不斷工作的,在此,本領域技術人員應理解“持續”是指上述各裝置分別實時地或者按照設定的或實時調整的工作模式要求。
具體地,生成裝置11用于基于從服務設備中獲取移動應用的唯一標識字符串,生成所述移動應用的數據密鑰;在此,服務設備隨機生成移動應用的唯一字符串,用戶設備端從服務設備中獲取到該唯一標識字符串后進行哈希運算得到固定長度的唯一值,將該固定長度的唯一值作為該移動應用的數據密鑰。在此,用戶設備端優選為移動終端。
具體地,加密裝置12用于根據加密算法及宏定義對所述數據密鑰進行靜態加密,并根據預設的散列函數及所獲取的用戶設備的MAC地址和用戶密碼PWD對所述數據密鑰進行動態加密。在此,移動應用在無網絡情況下使用時,用戶依然有瀏覽密文數據的需求,因此,需要對密文數據的數據密鑰進行安全保護,在本申請實施例中,根據加密算法及宏定義對數據密鑰進行靜態加密,保證移動應用的數據密鑰只能被包含宏定義加密過程的應用獲取,實現了密鑰的應用綁定,其中,加密算法可以包括國密SM4算法。在本申請一實施例中,將靜態加密后的數據密鑰直接存儲在用戶設備端A,當用戶設備端A被越獄后移動應用的業務數據及移動應用的數據密鑰同時被遷移到用戶設備端B上的安裝與用戶設備端A相同的移動應用(APP)時,用戶設備端B與用戶設備端A有一樣的宏定義的函數,可以成功解密從用戶設備端A中拷貝的業務數據,若僅是通過靜態加密處理數據密鑰是不能滿足數據密鑰的設備綁定的要求,因此還需要使用動態加密進行處理。動態加密處理是使用散列算法對用戶設備的MAC地址和用戶密碼PWD進行散列,得到動態加密密碼。需要說明的是,靜態加密處理和動態加密處理的過程是相互獨立的,順序先后不影響最終的數據密鑰安全保護的效果。
通過上述本申請所述的對數據密鑰進行靜態加密和動態加密的處理,使得數據密鑰僅能被一個特定應用訪問,不能被其他應用或終端訪問,滿足應用綁定與設備綁定的要求,實現用戶設備端的密鑰保護。
優選地,生成裝置11用于判斷移動應用啟動時是否本地存有密鑰,若沒有,則通過加密傳輸協議接口從服務設備中獲取所述移動應用的唯一標識字符串,若有,則對存儲在用戶設備的所述移動應用的加密的密鑰進行解密,得到所述移動應用的唯一標識字符串。在此,服務設備會給每個移動應用分配一個唯一的字符串,用來唯一標識移動應用,在用戶端需要判斷啟動某一移動應用時是否本地存有密鑰,若沒有,則從加密傳輸協議接口(https接口)獲取到服務設備給該移動應用分配的唯一標識字符串,若有,則從保存在用戶端的加密的密鑰解密后獲取,以獲取到的移動應用的唯一標識字符串進行生成密鑰。
接著,生成裝置11用于根據預設的散列函數對從服務設備中獲取到的移動應用的唯一標識字符串進行哈希運算,生成所述移動應用的數據密鑰。獲取到移動應用的唯一標識字符串后,使用預設的散列函數對該唯一字符串進行哈希算法,其中,預設的散列函數如對sm3算法進行修改,例如算法中將迭代條件改為滿足多少輪,和哪些字符進行混淆迭代等,使得經過散列算法后的字符串能夠成為具有一定安全性的數據密鑰。
優選地,加密裝置12用于分別對所述數據密鑰、加密密鑰函數及對應的解密函數進行宏定義,基于所述宏定義得到靜態加密后的數據密鑰。函數式宏定義可以嵌入到程序代碼中,沒有明確的入口,增加靜態分析難度。具體地,加密裝置12用于:分別對所述數據密鑰、加密密鑰函數及對應的解密函數進行宏定義,得到宏定義常量的字符;將每個宏定義常量的字符填入函數執行棧的連續地址中,得到字符串;提取所述連續地址的首地址對應的字符串,作為參數傳給對應的函數;調用所述參數的對應的函數,得到靜態加密后的數據密鑰。在此,使用國密SM4算法對移動應用中的業務數據的數據密鑰進行靜態加密。靜態加密是指數據密鑰的加密的密碼在不同設備上是一致的,靜態加密的密碼(簡稱StaticKey)實際以密文字符串的形式定義在代碼中,使用時需要進行解密。StaticKey以及解密StaticKey函數均采用宏定義,例如,數據密鑰為:0x26,0x67,0x3b,0x31,0x3f,0x66,0x30,0x57,0x2f,0x3d,0x52,0x38,0x36,0x66,0x40,0x2a;對該數據密鑰進行靜態加密,具體如下所示的程序代碼:
#define PRIMARYKEY
((uint8_t[]){'a','b','c','d','e','f','g','h','1','2','3','4','5','6','7','8'})
#define SECRETKEY
((uint8_t[]){0x48,0x5d,0xcc,0xfd,0x68,0x34,0x0b,0xbb,0x59,0x26,0xe7,0xb2,0xf4,0x39,0x4f,0xeb})
#define GETSECRET
({
unsigned char originKey[16];
sm4_context ctx;
sm4_setkey_dec(&ctx,PRIMARYKEY);
sm4_crypt_ecb(&ctx,0,16,SECRETKEY,originKey);
originKey[16]='\0';
originKey;
})
在上述代碼中,SECRETKEY為加密后的StaticKey,PRIMARYKEY為加密密鑰,GETSECRET為解密函數,返回解密后的StaticKey,通過反匯編得知PRIMARYKEY、SECRETKEY不直接存儲在數據(data)段,被打散到多個指令中,成為指令的一部分,增加靜態分析的難度。上述宏定義常量的每個字符被逐個壓進函數執行棧的連續地址中組裝成字符串,然后寄存器取對應連續地址的首地址,作為參數傳給對應的函數,這使得每次調用時傳入的字符串地址都不同。函數執行完成后,它的執行棧被清空,PRIMARYKEY、SECRETKEY原始信息一并從棧中清除,重要信息不會常駐內存,僅在用到時才進入內存,用完立即清除,有效預防內存掃描,達到應用綁定的效果,數據密鑰僅被一個特定的移動應用訪問,不能被其他移動應用訪問。
優選地,所述用戶設備的MAC地址包括用戶設備上的無線網絡MAC地址和藍牙MAC地址。在本申請一實施例中,加密裝置12用于:從所述用戶設備中獲取無線網絡MAC地址、藍牙MAC地址及用戶密碼PWD,得到拼接字符串;根據預設的散列函數對所述拼接字符串進行散列計算,得到對應的哈希值;將所述對應的哈希值作為所述數據密鑰的動態加密密碼,得到動態加密后的數據密鑰,并將所述動態加密密碼存儲在所述用戶設備中。在此,動態加密與靜態加密的區別是動態加密的密碼不寫死在代碼中,而是使用用戶設備的MAC地址和用戶密碼PWD拼接成一字符串,將該字符串進行散列運算,得到對應的哈希值,并存儲至用戶設備中,該哈希值為動態加密的密碼。由上述可知,動態加密是通過用戶設備的MAC地址和用戶密碼PWD拼接成的字符串散列后得到的,用戶設備不一致導致MAC地址不一致,不能破解數據密鑰,獲取到移動應用的業務數據,用戶密碼PWD輸入不正確表示用戶不贊同,同樣也不能破解數據密鑰。因此,通過對數據密鑰進行動態加密,可實現設備綁定和用戶贊同的密鑰安全需求。
優選地,加密裝置12用于,通過調用對應的應用程序編程接口從用戶設備中獲取無線網絡MAC地址、藍牙MAC地址;獲取所述移動應用對應的用戶密碼PWD;分別提取所述無線網絡MAC地址、所述藍牙MAC地址及所述用戶密碼PWD中的多個字節,進行拼接得到拼接字符串。在本申請一實施例中,使用“6字節無線網絡MAC地址+6字節藍牙MAC地址+4字節用戶密碼PWD”拼接成的字符串進行SM3散列后的哈希值存放在用戶設備上,作為動態加密的密碼,其中MAC地址通過調用系統API獲取。需要說明的是,動態加密時使用的“6字節無線網絡MAC地址+6字節藍牙MAC地址+4字節用戶密碼PWD”拼接成的字符串僅為舉例,當用戶設備的MAC地址不為6字節時,也可以使用滿足此時MAC地址的字節對應的字符串。
優選地,所述設備1還包括:獲取裝置14(未示出),用于根據所述移動應用的啟動操作獲取當前輸入的用戶密碼PWD,并獲取所述移動應用所在當前用戶設備上的MAC地址;計算裝置15(未示出),用于根據預設的散列函數對所述MAC地址和所述用戶當前輸入的用戶密碼PWD進行散列計算,得到待待驗證結果;匹配裝置16(未示出),用于將所述待驗證結果與所述用戶設備中存儲的動態加密密碼進行匹配,若不匹配,則未成功解密所述數據密鑰的動態加密密碼,若匹配,則成功解密所述數據密鑰的動態加密密碼。
在此,使用用戶設備的MAC地址與用戶密碼PWD對數據密鑰進行動態加密之后,在每次啟動移動應用時要求用戶輸入用戶密碼PWD,并調用系統API獲取用戶設備的MAC地址,包括獲取無線網絡MAC地址和藍牙MAC地址,將所獲取到的用戶設備的MAC地址與用戶輸入的PWD進行拼接,利用預設的散列函數如SM3進行散列運算,得到待驗證結果,將該待驗證結果與之前已存儲在用戶設備的哈希值進行對比,若不匹配,則未成功解密所述數據密鑰的動態加密密碼,若匹配,則成功解密所述數據密鑰的動態加密密碼。若在同一用戶設備上,動態加密使得滿足用戶贊同的安全需求,在獲取到的用戶設備MAC地址和用戶輸入PWD密碼作為散列對象,對散列運算結果驗證是驗證PWD是否輸入正確,若輸入正確則表示用戶贊同,若輸入不正確,則表示用戶不贊同,保護數據密鑰;需要說明的是,PWD不存儲到用戶設備的本地,只存在內存中,移動應用進程殺死后,PWD自動銷毀,不保留任何痕跡。若用戶設備A的業務數據與業務密鑰同時被遷移到用戶設備B中,因在用戶設備上對密鑰進行了動態加密的安全保護,則即使用戶輸入PWD是對的,因用戶設備A與用戶設備的B的MAC地址不一致,致使最后的散列運算后的結果也與之前的動態加密密碼不一致,同樣不能成功破解到從用戶設備A拷貝的業務數據,因此通過動態加密也實現了設備綁定的密鑰安全需求。綜上所述,業務數據與業務數據密鑰文件從用戶設備A遷移到用戶設備B時,設備MAC地址不一致,無法破解密鑰文件,可以實現密鑰的設備綁定。即使MAC地址被篡改成兩個設備一致,PWD不一致,無法破解密鑰文件,可以實現密鑰的用戶感知。
優選地,所述設備1還包括:存儲裝置13(未示出),用于將所述靜態加密后的數據密鑰存儲至所述用戶設備的本地文件系統的私有目錄下,存儲裝置13還用于將所述動態加密密碼及所述動態加密后的數據密鑰存儲至所述用戶設備的本地文件系統的私有目錄下。在本申請實施例中,將動態加密處理得到的SM3散列運算后的哈希值以及靜態加密后的數據密鑰、動態加密后的數據密鑰存儲至用戶設備的本地系統的私有目錄下,在此,每一個用戶設備的操作系統為每一個移動應用分配私有存儲空間,將兩次加密后的數據密鑰存儲在上述分配的私有存儲空間的目錄下,即存儲在用戶設備的本地系統的私有目錄下,因其他非法授權應用無法訪問此應用的私有空間數據,所以增強使用了靜態加密和動態加密后的數據密鑰的安全性。
圖2示出本申請一實施例中密鑰生成以及安全保護過程的示意圖,其中,server為服務設備,client為用戶設備,優選為移動終端,在服務設備端生成移動應用的一個唯一的字符串(str),判斷移動終端的對應的移動應用是否啟動時本地是否存有密鑰,若沒有,通過https接口獲取str,若有,則從保存在移動終端上的加密的密鑰解密后獲取;使用修改過的sm3算法對str進行散列得到數據密鑰(KEY),完成密鑰的生成過程,接著,進行密鑰的加密存儲,包括靜態加密和動態加密,在靜態加密過程中使用宏定義的方式,即#define PRIMARYKEY,#define SECRETKEY,#define GETSECRET,其中,SECRETKEY為加密后的靜態加密的密碼,PRIMARYKEY為加密密鑰,GETSECRET為解密函數,經過宏定義后得到靜態密鑰;使用國密sm4算法對靜態密鑰進行加密,得到靜態加密后的數據密鑰sm4str1,實現應用綁定(app bingding);通過用戶輸入(user input)獲取到用戶密碼PWD,并獲取用戶設備的MAC地址,將MAC地址+PWD的拼接字符串作為動態密鑰,使用sm3散列上述拼接字符串(MAC地址+PWD),使用sm4算法對該動態密鑰進行運算,得到動態加密后的數據密鑰sm4str2,實現設備綁定(device binding)和用戶贊同(user consent),最后,將sm4str2和散列運算得到的哈希值寫入(fwrite)密鑰數據庫文件,存儲至移動終端的本地文件系統的私有目錄下。圖2的密鑰安全保護過程的具體方法流程如圖3所示,通過圖3所示的對數據密鑰進行靜態加密和動態加密的過程,使得移動應用的業務數據密鑰只能被包含宏定義加密過程的應用獲取,實現了密鑰的應用綁定;業務數據與業務數據密鑰文件從移動終端A遷移到移動終端B時,設備MAC地址不一致,無法破解密鑰文件,可以實現密鑰的設備綁定,即使MAC地址被篡改成兩個設備一致,PWD不一致,無法破解密鑰文件,可以實現密鑰的用戶感知。
需要注意的是,本申請可在軟件和/或軟件與硬件的組合體中被實施,例如,可采用專用集成電路(ASIC)、通用目的計算機或任何其他類似硬件設備來實現。在一個實施例中,本申請的軟件程序可以通過處理器執行以實現上文所述步驟或功能。同樣地,本申請的軟件程序(包括相關的數據結構)可以被存儲到計算機可讀記錄介質中,例如,RAM存儲器,磁或光驅動器或軟磁盤及類似設備。另外,本申請的一些步驟或功能可采用硬件來實現,例如,作為與處理器配合從而執行各個步驟或功能的電路。
另外,本申請的一部分可被應用為計算機程序產品,例如計算機程序指令,當其被計算機執行時,通過該計算機的操作,可以調用或提供根據本申請的方法和/或技術方案。而調用本申請的方法的程序指令,可能被存儲在固定的或可移動的記錄介質中,和/或通過廣播或其他信號承載媒體中的數據流而被傳輸,和/或被存儲在根據所述程序指令運行的計算機設備的工作存儲器中。在此,根據本申請的一個實施例包括一個裝置,該裝置包括用于存儲計算機程序指令的存儲器和用于執行程序指令的處理器,其中,當該計算機程序指令被該處理器執行時,觸發該裝置運行基于前述根據本申請的多個實施例的方法和/或技術方案。
對于本領域技術人員而言,顯然本申請不限于上述示范性實施例的細節,而且在不背離本申請的精神或基本特征的情況下,能夠以其他的具體形式實現本申請。因此,無論從哪一點來看,均應將實施例看作是示范性的,而且是非限制性的,本申請的范圍由所附權利要求而不是上述說明限定,因此旨在將落在權利要求的等同要件的含義和范圍內的所有變化涵括在本申請內。不應將權利要求中的任何附圖標記視為限制所涉及的權利要求。此外,顯然“包括”一詞不排除其他單元或步驟,單數不排除復數。裝置權利要求中陳述的多個單元或裝置也可以由一個單元或裝置通過軟件或者硬件來實現。第一,第二等詞語用來表示名稱,而并不表示任何特定的順序。