郭建明,王嘉寧
(甘肅機(jī)電職業(yè)技術(shù)學(xué)院 甘肅 天水 741001)
近年來,頻頻暴發(fā)的數(shù)據(jù)泄露安全事件,已經(jīng)為數(shù)據(jù)安全問題敲響了警鐘,數(shù)據(jù)全鏈路保護(hù)的現(xiàn)狀仍然不容樂觀。 在加密環(huán)節(jié),傳統(tǒng)的字符串加密技術(shù)已經(jīng)不再適應(yīng)當(dāng)今的網(wǎng)絡(luò)生產(chǎn)環(huán)境。 各種各樣先進(jìn)的竊密技術(shù)、竊密軟件、暴力破解、彩虹表、撞庫等時刻威脅著人們的隱私安全[1]。 在通信環(huán)節(jié),常見的通信安全威脅有多途徑竊取用戶數(shù)據(jù)、分析竊取到的數(shù)據(jù),從而對攔截到的數(shù)據(jù)進(jìn)行修改并再次發(fā)送,以此達(dá)到冒充用戶的目的,甚至對用戶和企事業(yè)單位財產(chǎn)造成重大損害。
為了最大程度防止用戶隱私數(shù)據(jù)泄露,保障數(shù)據(jù)在全生命周期(存儲周期、傳輸周期、處理周期及運(yùn)行周期)中的安全性已然成為迫切需要解決的問題。 為了保障運(yùn)行周期中的數(shù)據(jù)安全,要求做到數(shù)據(jù)的“可用”但“不可見”。這不僅有助于抵御來自外部或內(nèi)部泄漏造成的數(shù)據(jù)安全風(fēng)險,達(dá)到數(shù)據(jù)的縱深安全防護(hù)保障,也能夠最大程度地保留原始數(shù)據(jù)的結(jié)構(gòu)和意義,提高數(shù)據(jù)作為生產(chǎn)要素的原生價值[2]。
對稱加密采用了單密鑰的加密方法,對于同一個密鑰可以同時用作信息的加密和解密,這種加密方法稱為對稱加密,也稱為單密鑰加密。 加密時將數(shù)據(jù)通過密鑰轉(zhuǎn)換為密文,將密文進(jìn)行廣播,廣播區(qū)域內(nèi)任何人可以接收密文,但由于大家沒有密鑰,所以無法對其進(jìn)行解密,只有真正的接收者(密鑰擁有者)接收到密文才可以對其進(jìn)行解密[3]。 這種加密方式操作簡便,效率極高,破譯較為困難。但由于加密解密都采用相同密鑰,密鑰的丟失即意味著密文的原文被公開,所以,密鑰的安全傳輸也成為一個棘手難題。
不同于對稱加密算法在加密和解密時使用的是同一個密鑰,非對稱加密算法需要兩個密鑰分別來進(jìn)行加密和解密,這兩個密鑰分別是公開密鑰和私有密鑰。 公開密鑰與私有密鑰是一對,如果用公開密鑰對數(shù)據(jù)進(jìn)行加密,只有用與之對應(yīng)的私有密鑰才能解密;如果用私有密鑰對數(shù)據(jù)進(jìn)行加密,那么只有用與之對應(yīng)的公開密鑰才能解密。由于非對稱加密中加密和解密的密鑰不同,所以安全性同比對稱加密算法更高。
信息摘要算法(message digest algorithm 5, MD5)散列函數(shù),可以產(chǎn)生出一個128 位(16 字節(jié))的散列值(hash value)。 MD5 算法以512 位的分組來處理輸入的信息,且每一分組又被劃分為16 個32 位的子分組,經(jīng)過了一系列的處理后,算法的輸出由4 個32 位分組組成,將這4 個32位分組級聯(lián)后將生成一個128 位散列值[4]。 MD5 算法如今常作為一種電子簽名來使用,使用MD5 算法可以為任意字符串或文件生成一個全球獨(dú)一無二的“數(shù)字指紋”,通過檢查MD5 值的變動便可輕松驗證現(xiàn)字符串或文件與原字符串或文件是否為同一個。
SHA256 隸屬于Secure Hash Algorithm 2(SHA-2 族),對于任意長度的數(shù)據(jù),SHA256 都會產(chǎn)生一個256 位(32字節(jié))的哈希值(hash function),稱作消息摘要。 同MD5一樣,SHA256 亦可以為字符串或文件生成全球獨(dú)一無二的“數(shù)字指紋”。
Homomorphic Encryption 同態(tài)加密是基于數(shù)學(xué)難題的計算復(fù)雜性理論的密碼學(xué)技術(shù)。 對經(jīng)過同態(tài)加密的數(shù)據(jù)進(jìn)行處理得到一個輸出結(jié)果,將這一輸出結(jié)果進(jìn)行解密,這一結(jié)果與用同一種方法處理但未經(jīng)過加密的原生數(shù)據(jù)得到的輸出結(jié)果是一樣的。 本質(zhì)上,同態(tài)加密同樣是一種加密函數(shù),對明文進(jìn)行環(huán)鏈上的加法或乘法運(yùn)算再加密,加密后對密文進(jìn)行相應(yīng)的處理或運(yùn)算,運(yùn)算的最終結(jié)果應(yīng)該是與原數(shù)據(jù)的逆向運(yùn)算結(jié)果是相等的[5]。 由于這個良好的“可用”但“不可見”性質(zhì),人們可以輕易地委托任何第三方機(jī)構(gòu)對數(shù)據(jù)進(jìn)行處理而不泄露原始數(shù)據(jù)信息,具有良好的數(shù)據(jù)脫敏處理性質(zhì)。
同態(tài)性質(zhì)的加密函數(shù)是指兩個明文a、b 滿足Dec(En(a)7En(b))=a ⊕b 的加密函數(shù),其中En 為加密運(yùn)算,Dec 為解密運(yùn)算,7和⊕分別對應(yīng)明文和密文域上的運(yùn)算。 當(dāng)⊕代表加法時,稱該加密為加同態(tài)加密:當(dāng)⊕代表乘法時,稱該加密為乘同態(tài)加密[4]。
1978 年之前,還沒有人提出過公鑰密碼學(xué)的概念,此前的加密體制只有對稱加密,因此對稱加密也被稱為傳統(tǒng)加密[6]。 但時至今日對稱加密的使用已非常廣泛。 造成這種局面的主要原因是,一般企業(yè)單位對于重構(gòu)現(xiàn)有的加密體系是非常抵觸的,一是現(xiàn)在數(shù)據(jù)資料價值較大,暫未出現(xiàn)數(shù)據(jù)泄露事件時重構(gòu)非必然,二是重構(gòu)將耗費(fèi)大量人力、物力和財力,市面上暫時沒有最好的加密和加密傳輸替代方案。
而對稱加密在加密和解密過程中使用了相同的密鑰,并且在加解密過程中使用了兩種傳統(tǒng)加密技術(shù):代替和置換。 文章首先對于對稱密碼作一些概述,然后通過生動的古典密碼來闡述這兩種加密技術(shù),在這一過程中將展示密碼設(shè)計的思想,并對密碼系統(tǒng)進(jìn)行分析。
目前密碼體系的高安全性主要取決于計算加密的復(fù)雜度和困難性,密碼復(fù)雜度越高、困難性越強(qiáng),需要的計算算力也就越高,理論上就越不容易破解。 一方面,隨著2017 年RSA-1024 被宣告破解,德國密碼學(xué)家Claus Peter Schnorr 又宣稱已經(jīng)破解目前網(wǎng)絡(luò)安全主流的加密標(biāo)準(zhǔn)RSA-2048,頓時,整個互聯(lián)網(wǎng)的安全體系被烏云籠罩,顯得岌岌可危[7]。 另一方面,隨著量子計算的發(fā)展,計算機(jī)運(yùn)算能力得到了顯著的提升,它也極大地威脅到了當(dāng)前的公鑰密碼體系的安全。
雖然量子計算距離成熟還需要一定的時間,但需要始終做到未雨綢繆,考慮其將來對計算機(jī)網(wǎng)絡(luò)及數(shù)據(jù)安全的威脅也并非杞人憂天。 當(dāng)今科技進(jìn)步日新月異,量子計算也在不斷刷新極限,取得突破性進(jìn)展,隨著各國政府、企業(yè)不斷投入量子計算機(jī)研發(fā),并且明顯看到顯著成果。 各方對于現(xiàn)有安全體系的安全性隱患的研究也在逐步提上日程,仿佛達(dá)摩克利斯之劍一直懸在現(xiàn)代密碼學(xué)體系的頭頂。
一次加密可能造成的嚴(yán)重后果是,竊取者可以利用計算機(jī)暴力枚舉一個任意集合,對集合內(nèi)的元素依次求值后存入數(shù)據(jù)庫(為方便理解可稱其為“枚舉庫”),待成功截獲用戶數(shù)據(jù)的加密字符串后,比對枚舉庫是否與之匹配,若匹配成功則通過逆推集合內(nèi)元素順序獲得用戶真實(shí)的明文字符串。
為了防止傳統(tǒng)一次加密所帶來的諸多不安全因素,可以引入Token 和Salt 值(鹽值)的概念,即在時間這個不可逆自變量和自定義Salt 值的雙重不確定因素下,外加用戶自主定義的排列組合的隨機(jī)值,相同的字符串使用相同的加密方式計算密文后結(jié)構(gòu)也會不同,這將大大提升用戶數(shù)據(jù)安全性,落實(shí)系統(tǒng)的網(wǎng)絡(luò)安全防護(hù)要求,具體加密過程見圖1。
圖1 加密過程實(shí)現(xiàn)示意
在本加密實(shí)現(xiàn)過程中,為了使用最簡便的方法獲得最安全可靠的加密方式, 采用了Unix 時間戳(Unix Timestamp)作為Token 值。 Unix 時間戳是從1970 年1 月1 日開始所經(jīng)過的秒數(shù),在計算過程中不考慮閏秒。 字符串“Password” 進(jìn)行如下運(yùn)算: 明文字符串和當(dāng)前Timestamp 拼接(Password1607874715),求SHA256 得到“7dde9e1da6582b82d79ee6ac71f3883696b5ce08021ea6e70a 7d2d90c4a0bbb4”,將此值再次拼接當(dāng)前Timestamp 值和Salt 值(這里假設(shè)“Salt”為Salt 值)并再次作為字符串(7dde9e1da6582b82d79ee6ac71f3883696b5ce08021ea6e70a 7d2d90c4a0bbb41607874725Salt),求得散列值“f84d28252 bf28b0fe718ec8b12399cbf”。
在真實(shí)開發(fā)環(huán)境中,企事業(yè)可再根據(jù)本單位內(nèi)對當(dāng)前開發(fā)項目的排序,按照內(nèi)部方法生成對應(yīng)的app_id 和app_key。 將這兩個或更多的元素進(jìn)行單次加密,從而生成sign,將sign 值也通過上述加密方法參與加密,則可以在指數(shù)級別上增加破譯難度,進(jìn)而增加安全性[8-9]。
雖然本加密方式已經(jīng)不可能存在逆向破譯的可能性,但需要在傳輸過程中做到盡可能的安全。 為了使數(shù)據(jù)不會被緩存和保存,本研究采用POST 請求對加密數(shù)據(jù)進(jìn)行提交,見表1。
表1 GET 請求與POST 請求對比
為了使服務(wù)器可以進(jìn)行正確驗證數(shù)據(jù),需要將必要的信息(元素)與加密數(shù)據(jù)(如果有計算sign 值,則也需要發(fā)送sign 值的計算元素)同時發(fā)往服務(wù)器協(xié)助驗證[10]。 傳輸可采用非對稱加密過程實(shí)現(xiàn)。 服務(wù)器先向客戶端分發(fā)證書(公鑰A),客戶端驗證證書是否合法且有效,如果證書安全則將加密元素和加密求得的散列值“f84d28252bf28b0fe718ec8b12399cbf”通過公鑰A 加密發(fā)送至服務(wù)器。 服務(wù)器通過私鑰B 進(jìn)行解密,獲得元素與散列值。
由于本加密方法存在單向不可逆性,所以不存在所謂的“解密”方法,只能使服務(wù)器對加密字符串驗證,從而起到所謂“解密”的作用。 為使服務(wù)器明白用戶上傳的加密數(shù)據(jù)是否正確,服務(wù)器可采取與客戶端相同的加密方式對用戶上傳的元素進(jìn)行加密,如果元素正確且計算求得的散列值與用戶上傳(或數(shù)據(jù)庫已有的)的值匹配,則驗證成功,否則驗證失敗,申報為非法驗證,回傳相應(yīng)錯誤信息[11]。 該方法重要的前提是需要提前將用戶(客戶端)的系統(tǒng)時間與服務(wù)器(服務(wù)端)的時間設(shè)置一致,由于時間是一種公開文本,為減輕服務(wù)器負(fù)載,可直接通過明文傳輸或廣播。 由于服務(wù)器需要計算和客戶端相同的密鑰用于比對,其中參數(shù)必須和客戶端高度一致,否則可能造成密鑰生成不一致。
綜上所述,通過制造多種常量元素和變量元素,引入了Token 和Salt 值(鹽值)的概念,改進(jìn)了目前的字符串加密和傳輸方式,便可以輕松解決撞庫和彩虹表的安全隱患,從而進(jìn)一步保護(hù)用戶安全,避免企事業(yè)單位遭受不必要的損失。 將加密的散列值通過較為安全的傳輸方式并再次配合非對稱加密算法,更進(jìn)一步杜絕數(shù)據(jù)在傳輸過程中遭受攔截和篡改,從而建立一個更加可靠的通信環(huán)境。但是,本文只考慮了信息加密傳輸?shù)膸讉€基本思路及方案,并未在安全性統(tǒng)計等方面進(jìn)行深入,使得系統(tǒng)只考慮了一些實(shí)驗理論情況,如何應(yīng)對復(fù)雜生產(chǎn)情況,還值得加強(qiáng),后期將應(yīng)用于模擬生產(chǎn)環(huán)境,收集大量數(shù)據(jù),并用于矯正。 隨著量子計算技術(shù)全球化的發(fā)展,傳統(tǒng)加密算法會受到嚴(yán)重威脅。 因此,全球各個安全部門研究人員也正在積極尋找新的量子安全加密算法,以應(yīng)對未來的新挑戰(zhàn)。