本發(fā)明涉及計(jì)算機(jī)加密技術(shù)領(lǐng)域,具體的來說涉及一種動(dòng)態(tài)認(rèn)證的加密方法。
背景技術(shù):
業(yè)內(nèi)現(xiàn)有方法一般是依靠IMEI或SN號(hào)來生成密碼的,一般設(shè)備只能用固定密碼解鎖,不能做到動(dòng)態(tài)密碼解鎖,無法防止窮舉法暴力破解。當(dāng)密碼或算法被破解后,無法通過升級(jí)來反破解。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明所要解決的技術(shù)問題在于,克服現(xiàn)有技術(shù)中存在的問題,提供一種基于隨機(jī)算法與加密算法的動(dòng)態(tài)認(rèn)證方法。
為了解決上述問題本發(fā)明的技術(shù)方案是這樣的:
一種基于隨機(jī)算法與加密算法的動(dòng)態(tài)認(rèn)證方法,包括:生成加密碼、計(jì)算解密碼、驗(yàn)證密碼三個(gè)接口,所述生成加密碼接口與驗(yàn)證密碼接口部署在被加密設(shè)備上,計(jì)算解密碼接口部署在解密器上;
被加密設(shè)備調(diào)用生成加密碼會(huì)生成一個(gè)由字母和數(shù)字組成的字符串,解密設(shè)備將該字符串傳入計(jì)算解密碼接口,可得到一個(gè)新的字符串;該新字符串可被驗(yàn)證密碼接口驗(yàn)證通過;
在同一被加密設(shè)備上,生成加密碼接口每次產(chǎn)生的字符串都不相同,解密串也不同;驗(yàn)證密碼接口一旦驗(yàn)證失敗,則正確密碼也會(huì)驗(yàn)證失敗,只能重新生成加密碼。
所述算法在模塊中使用過程為,從模塊獲取加密字符串,然后將該字符串輸入另外的解密軟件,由解密軟件生成一個(gè)驗(yàn)證碼,最后將該驗(yàn)證碼輸入模塊。
所述生成加密碼其算法步驟如下:
1)從已加入算法中隨機(jī)選擇加密算法
2)隨機(jī)生成原始數(shù)據(jù)并保存
3)從已選擇加密算法中獲取一對(duì)秘鑰并保存
4)使用3中選擇的解密算法加密原始數(shù)據(jù),并放入結(jié)構(gòu)容器中
5)加密4中容器,生成加密碼。
所述計(jì)算解密碼其算法為生成加密碼算法的反過程。
所述驗(yàn)證密碼,其算法步驟如下:
1)解密參數(shù),解出結(jié)構(gòu)數(shù)據(jù)中的加密數(shù)據(jù)
2)使用保存的秘鑰中的私鑰解密加密數(shù)據(jù),得到原始碼
3)與保存的原始碼比較,相同則成功,否則失敗。
有益效果,本發(fā)明所述的方法是一種隨機(jī)算法與加密算法的動(dòng)態(tài)認(rèn)證方法,具有不綁定某個(gè)固定碼,如MAC、IMEI、SN等特點(diǎn)。同一設(shè)備每次認(rèn)證,認(rèn)證碼都不相同,不易暴力破解。認(rèn)證碼本身經(jīng)過多次不同加密算法的加密,安全性強(qiáng)。主算法中集成多種加密算法,加密時(shí)隨機(jī)選取,降低了算法被破解的幾率。
具體實(shí)施方式
為了使本發(fā)明實(shí)現(xiàn)的技術(shù)手段、創(chuàng)作特征、達(dá)成目的與功效易于明白了解,進(jìn)一步闡述本發(fā)明。
1.算法特點(diǎn)
我們的模塊的DIAG口與ADB口是調(diào)試端口,權(quán)限比較大,考慮到安全問題需要在正式版本中封閉,同時(shí)又需要在升級(jí)與內(nèi)部調(diào)試時(shí),解封這些端口。而封閉與解封如果只簡單的使用一條at命令,則很容易流傳出去,達(dá)不到封閉效果,而如果簡單使用設(shè)備IMEI號(hào)碼或SN號(hào)碼加解密,一則容易被破解,二則研發(fā)同事調(diào)試的設(shè)備上這些號(hào)碼是可能不存在的,解密不通用。所以,我們就需要選擇一套算法對(duì)解封操作進(jìn)行加密,只有輸入正確密碼,才能解封。
我們需要算法具備以下特性:
1.不綁定IMEI或SN號(hào)
2.同一個(gè)設(shè)備每次解密時(shí)使用的解密碼不同
3.算法可以升級(jí),可加入新的加密,
4.加入新算法后,還能兼容舊設(shè)備使用舊算法解密
2.算法概述
該算法涉及三個(gè)接口,分別是“生成加密碼”、“計(jì)算解密碼”、“驗(yàn)證密碼”,其中“生成加密碼”接口與“驗(yàn)證密碼”接口部署在被加密設(shè)備上,“計(jì)算解密碼”接口部署在解密器上。
被加密設(shè)備調(diào)用“生成加密碼”會(huì)生成一個(gè)由字母和數(shù)字組成的字符串,解密設(shè)備將該字符串傳入“計(jì)算解密碼”接口,可得到一個(gè)新的字符串。該新字符串可被“驗(yàn)證密碼”接口驗(yàn)證通過。
在同一被加密設(shè)備上,“生成加密碼”接口每次產(chǎn)生的字符串都不相同,所以解密串也不同?!膀?yàn)證密碼”接口一旦驗(yàn)證失敗,則正確密碼也會(huì)驗(yàn)證失敗,只能重新生成加密碼。
3.使用方法
3.1模塊上使用方法
算法的使用分為三個(gè)步驟,依次是從模塊獲取加密字符串,然后將該字符串輸入另外的解密軟件,由解密軟件生成一個(gè)驗(yàn)證碼,最后將該驗(yàn)證碼輸入模塊。假設(shè)模塊中該加密功能的接口是AT+LSHENCR,則具體操作方法如下。
(1)向模塊下發(fā)AT+LSHENCR=0命令,模塊返回字符串(每次得到的不同)如:D4F6A67EF058E73656750590
(2)在解密軟件中輸入該字符串,單擊解密按鈕,生成獲取到解密字符串
(3)向模塊下發(fā)AT+LSHENCR=1,”DF12DA61”
如果解密成功,AT+LSHDIAG=1可正常打開DIAG口,否則不可以。
3.2解密軟件LongsungDecryptor管理
LongsungDecryptor軟件是基于Windows的一款圖形界面軟件,其主要功能是將加密碼轉(zhuǎn)換成解密碼,這個(gè)軟件是需要保密的,否則模塊加密毫無意義。
該軟件使用上有如下需求:
1.研發(fā)人員在公司使用,在公司網(wǎng)絡(luò)環(huán)境內(nèi)
2.技術(shù)支持工程師在客戶現(xiàn)場使用,不在公司網(wǎng)絡(luò)環(huán)境內(nèi),可連接vpn,也可能沒有網(wǎng)絡(luò)
3.其他人員通過特殊渠道拿到該軟件,將不能正常使用
為滿足需求,LongsungDecryptor軟件做了如下功能:
1.將LongsungDecryptor軟件內(nèi)部公開,不過加密算法會(huì)持續(xù)周期性更新,使用人獲取到最新版本LongsungDecryptor軟件,可解密所有密碼。
2.對(duì)LongsungDecryptor軟件進(jìn)行限制,使用人需要在公司局域網(wǎng)或APN環(huán)境下才能使用,在公司局域網(wǎng)中搭建專用服務(wù)器支持。
3.對(duì)LongsungDecryptor軟件進(jìn)行限制,如果不在公司局域網(wǎng)環(huán)境內(nèi),不能使用。
4.在公司環(huán)境網(wǎng)絡(luò)環(huán)境內(nèi),具有破解功能,破解后,離開網(wǎng)絡(luò)環(huán)境也可使用,但是每次破解只可使用1天。
3.3升級(jí)工具集成解密算法
我們知道,如果封閉端口后,一件升級(jí)工具需要解封才能升級(jí)模塊,這樣,一件升級(jí)工具就需要集成加密算法。但是有個(gè)問題,如果算法更新了,舊的一件升級(jí)工具就不能對(duì)新版本模塊升級(jí)了。
一件升級(jí)工具通過dll方式集成加密算法,如果遇上算法升級(jí)的情況,獲取最新版本的加密算法dll,替換進(jìn)去即可。
4.外部接口描述
外部接口是用來移植算法的接口,如將算法加入模塊源代碼,升級(jí)工具調(diào)用集成該算法的dll等,都需要調(diào)用這些接口。外部接口共有3個(gè),分別是生成加密碼,加密碼轉(zhuǎn)換成解密碼,驗(yàn)證解密碼。
4.1生成加密碼
接口名稱:lsh_crypto_create_string
接口描述:生成加密碼。
返回值:枚舉類型,0為成功,其他為失敗,每個(gè)值有各自含義。成功時(shí),生成的加密碼由參數(shù)1傳出。
參數(shù)1:char*code,出參,用于存放生成的加密碼,由調(diào)用者申請(qǐng)與釋放空間。
參數(shù)2:const unsigned int sz,調(diào)用者申請(qǐng)的code的大小。
算法描述:
1.從已加入算法中隨機(jī)選擇加密算法
2.隨機(jī)生成原始數(shù)據(jù)并保存
3.從已選擇加密算法中獲取一對(duì)秘鑰并保存
4.使用3中選擇的解密算法加密原始數(shù)據(jù),并放入結(jié)構(gòu)容器中
5.加密4中容器,生成加密碼
4.2加密碼轉(zhuǎn)換成解密碼
接口名稱:lsh_crypto_decrypt_string
接口描述:加密碼轉(zhuǎn)換成解密碼。
返回值:枚舉類型,0為成功,其他為失敗,每個(gè)值有各自含義,成功時(shí),轉(zhuǎn)換的解密碼由參數(shù)1傳出。
參數(shù)1:char*decrypted_code,出參,成功時(shí),傳出解密碼,由調(diào)用者申請(qǐng)與釋放空間。
參數(shù)2:const unsigned int decrypted_code_size,調(diào)用者申請(qǐng)的解密碼的空間大小。
參數(shù)3:const char*raw_code,入?yún)?,傳入加密碼。
參數(shù)4:const unsigned int siraw_code_len,傳入的加密碼的實(shí)際長度。
算法描述:
算法4.1的反過程,不再詳述。
4.3驗(yàn)證解密碼
接口名稱:lsh_crypto_verify_string
接口描述:驗(yàn)證解密碼。
返回值:枚舉類型,0為成功,其他為失敗,每個(gè)值有各自含義。
參數(shù)1:char*code,入?yún)?,傳入解密碼。
參數(shù)2:unsigned int len,傳入的解密碼實(shí)際長度。
算法描述:
1.解密參數(shù)1,解出結(jié)構(gòu)數(shù)據(jù)中的加密數(shù)據(jù)
2.使用4.1中保存的秘鑰中的私鑰解密加密數(shù)據(jù),得到原始碼
3.與4.1中保存的原始碼比較,相同則成功,否則失敗。
5.內(nèi)部接口描述
內(nèi)部接口是向算法中添加新的加密算法的接口,包含三個(gè),分別是加密算法、解密算法和獲取秘鑰。
主算法遵循OC原則,新增的算法只需要實(shí)現(xiàn)這三個(gè)內(nèi)部接口,即可加入主算法,已加入的算法之間互不干擾,加密時(shí),主算法會(huì)隨機(jī)挑選已加入的算法進(jìn)行加密,解密時(shí),主算法也可自動(dòng)識(shí)別所用加密算法,進(jìn)行解密。
加入的加密算法可以是對(duì)稱加密算法,也可以是非對(duì)稱加密算法。對(duì)稱加密算法只有秘鑰,不區(qū)分公鑰與私鑰,適配對(duì)稱加密算法時(shí),需要將接口5.3中的公鑰與私鑰同時(shí)寫入相同的秘鑰即可。
5.1加密算法
接口名稱:lsh_encryption_algorithm
接口描述:加密算法,使用秘鑰,把原始數(shù)據(jù)加密,生成加密數(shù)據(jù)。
返回值:枚舉類型,0為成功,其他為失敗,每個(gè)值有各自含義。成功時(shí),加密數(shù)據(jù)由參數(shù)1傳出。
參數(shù)1:unsigned char*crypto_data,出參,成功時(shí),傳出加密數(shù)據(jù),由調(diào)用者申請(qǐng)與釋放空間。
參數(shù)2:const unsigned int crypto_data_size,調(diào)用者申請(qǐng)的加密數(shù)據(jù)的空間大小。
參數(shù)3:const unsigned char*key,入?yún)?,傳入秘鑰。
參數(shù)4:const unsigned int key_len,傳入的秘鑰的實(shí)際長度。
參數(shù)5:const unsigned char*raw_data,入?yún)?,傳入原始?shù)據(jù)。
參數(shù)6:const unsigned int raw_data_len,傳入的原始數(shù)據(jù)的實(shí)際長度。
5.2解密算法
接口名稱:lsh_decryption_algorithm
接口描述:解密算法,使用秘鑰,把加密數(shù)據(jù)解密,生成原始數(shù)據(jù)。
返回值:枚舉類型,0為成功,其他為失敗,每個(gè)值有各自含義。成功時(shí),原始數(shù)據(jù)由參數(shù)1傳出。
參數(shù)1:unsigned char*crypto_data,出參,成功時(shí),傳出原始數(shù)據(jù),由調(diào)用者申請(qǐng)與釋放空間。
參數(shù)2:const unsigned int crypto_data_size,調(diào)用者申請(qǐng)的解密數(shù)據(jù)的空間大小。
參數(shù)3:const unsigned char*key,入?yún)?,傳入秘鑰。
參數(shù)4:const unsigned int key_len,傳入的秘鑰的實(shí)際長度。
參數(shù)5:const unsigned char*raw_data,入?yún)?,傳入加密?shù)據(jù)。
參數(shù)6:const unsigned int raw_data_len,傳入的加密數(shù)據(jù)的實(shí)際長度。
5.3獲取秘鑰
接口名稱:lsh_get_public_and_private_key
接口描述:獲取秘鑰,同時(shí)獲取公鑰與私鑰。
返回值:枚舉類型,0為成功,其他為失敗,每個(gè)值有各自含義。成功時(shí),公鑰由參數(shù)1傳出,私鑰由參數(shù)3傳出。
參數(shù)1:unsigned char*public_key,出參,成功時(shí),傳出公鑰,由調(diào)用者申請(qǐng)與釋放空間。
參數(shù)2:const unsigned intpublic_key_size,調(diào)用者申請(qǐng)的公鑰的空間大小。
參數(shù)3:unsigned char*private_key,出參,成功時(shí),傳出私鑰,由調(diào)用者申請(qǐng)與釋放空間。
參數(shù)4:const unsigned intprivate_key_size,調(diào)用者申請(qǐng)的私鑰的空間大小。
參數(shù)5:const int additional,附加參數(shù),保留,傳0。
6.使用特點(diǎn)及效果
一種隨機(jī)算法與加密算法的動(dòng)態(tài)認(rèn)證方法,具有不綁定某個(gè)固定碼,如MAC、IMEI、SN等,的特點(diǎn)。同一設(shè)備每次認(rèn)證,認(rèn)證碼都不相同,不易暴力破解。認(rèn)證碼本身經(jīng)過多次不同加密算法的加密,安全性強(qiáng)。主算法中集成多種加密算法,加密時(shí)隨機(jī)選取,降低了算法被破解的幾率。
以上顯示和描述了本發(fā)明的基本原理、主要特征和本發(fā)明的優(yōu)點(diǎn)。本行業(yè)的技術(shù)人員應(yīng)該了解,本發(fā)明不受上述實(shí)施例的限制,上述實(shí)施例和說明書中描述的只是說明本發(fā)明的原理,在不脫離本發(fā)明精神和范圍的前提下本發(fā)明還會(huì)有各種變化和改進(jìn),這些變化和改進(jìn)都落入要求保護(hù)的本發(fā)明范圍內(nèi)。本發(fā)明專利要求保護(hù)的范圍由所附的權(quán)利要求書及其等同物界定。