付鈺,孫連亮,吳曉平
(海軍工程大學(xué)信息安全系,湖北 武漢 430033)
二維碼(QR code),也稱快速響應(yīng)碼,作為一種編碼方式,近年來在移動設(shè)備上非常流行,具有存儲容量大、可靠性高、保密防偽性強(qiáng)、成本低等優(yōu)點[1~3]。二維碼既是一種信息載體,也是搜索信息、存儲數(shù)據(jù)的重要措施和方法。它在物流管理、移動支付和工業(yè)自動化等領(lǐng)域有普遍的運用。但是,隨著二維碼技術(shù)的大力推廣,其安全問題也日益凸顯,特別是在移動支付中的安全問題與每個使用者的切身利益息息相關(guān)。針對二維碼存在的安全問題,2015年12月29日,商務(wù)部中國電子商會與中國質(zhì)量認(rèn)證中心聯(lián)合發(fā)布了《二維碼安全規(guī)范應(yīng)用評價體系》,舉行了戰(zhàn)略合作簽約儀式,討論了二維碼行業(yè)安全標(biāo)準(zhǔn)的發(fā)展[4]。其目的在于從頂層設(shè)計層面解讀“互聯(lián)網(wǎng)+”時代的二維碼標(biāo)準(zhǔn)規(guī)范建設(shè)、信息安全及產(chǎn)業(yè)發(fā)展趨勢。
在理論研究方面,國內(nèi)學(xué)者的研究成果主要集中分布在二維碼的機(jī)密性方面,對惡意二維碼監(jiān)控技術(shù)的研究尚不多見。2016年,蔣溢等[5]提出一種基于混沌 Z-映射的 QR碼加密機(jī)制。通過基于混沌Z-映射的QR碼密鑰特征算法生成密鑰序列,利用密鑰對 QR碼的像素矩陣進(jìn)行加密,實現(xiàn)對QR碼信息的加密保護(hù)。2017年,馬峰等[6]提出了一種將信息隱藏技術(shù)應(yīng)用到二維碼中的算法。該算法的核心思想是:通過改變二維碼中黑白圖像塊像素行程的奇偶性來嵌入信息,達(dá)到保護(hù)二維碼內(nèi)容的目的。在實際應(yīng)用方面,一些手機(jī)提供了對惡意二維碼進(jìn)行監(jiān)控的安全防護(hù)軟件,如十分流行的騰訊手機(jī)管家、360手機(jī)衛(wèi)士等,其工作原理主要通過自身的大數(shù)據(jù)平臺,基于黑白名單機(jī)制進(jìn)行匹配,這種模式時效性較差,只能控制危害繼續(xù)擴(kuò)大[7]。綜合上述,針對二維碼安全問題,目前安全防御技術(shù)的研究內(nèi)容主要分為2方面:一是通過密碼技術(shù)、信息隱藏技術(shù)等實現(xiàn)對二維碼內(nèi)容的安全保護(hù);二是通過建立大數(shù)據(jù)平臺,結(jié)合安全軟件對掃描出來的信息做安全性評估,實現(xiàn)對惡意二維碼的檢測。以上的研究都不能夠驗證二維碼的來源是否可信,也不能實現(xiàn)事后的責(zé)任追究。
因此,如何防范二維碼信息被偽造或被篡改、實現(xiàn)對二維碼來源的可信性驗證、建立一整套的責(zé)任追溯機(jī)制已成為世界領(lǐng)域?qū)<覍W(xué)者研究的熱點課題之一。WPKI(wireless public key infrastructure)技術(shù)遵循移動網(wǎng)絡(luò)環(huán)境中所建立的標(biāo)準(zhǔn),是PKI技術(shù)在無線網(wǎng)絡(luò)環(huán)境中的應(yīng)用,主要用來管理移動網(wǎng)絡(luò)環(huán)境中使用的公鑰和數(shù)字證書。WPKI并不是一個全新的PKI規(guī)范,它是傳統(tǒng)的PKI技術(shù)應(yīng)用于無線環(huán)境的優(yōu)化擴(kuò)展,采用了優(yōu)化的橢圓曲線加密(ECC, elliptic curve cryptography)和壓縮的X.509數(shù)字證書[8~10]。在WPKI中同樣采用證書管理公鑰,通過第三方的可信任機(jī)構(gòu)——認(rèn)證中心(CA, certificate authority)驗證用戶的身份。研究表明,采用合適的虹膜識別算法,人的虹膜信息出現(xiàn)誤識和錯誤拒絕的概率相當(dāng)微小。相比于其他生物特征識別技術(shù),虹膜識別技術(shù)的精確度要高出數(shù) 10個數(shù)量級。因此,在生物特征識別方面,本文主要就虹膜識別技術(shù)展開研究。
QR碼由許多正方形模塊組成,結(jié)構(gòu)特征明顯,如圖1所示。
圖1 QR碼結(jié)構(gòu)
一個QR碼由功能圖形和編碼區(qū)格式組成。功能圖形的作用是幫助解碼程序解碼得到編碼數(shù)據(jù)的輔助圖形,包括位置探測圖形、分隔符、定位圖形以及校正圖形;編碼區(qū)格式則包含格式信息、版本信息、數(shù)據(jù)和糾錯碼字[11]。二維碼的編碼過程分為數(shù)據(jù)分析、數(shù)據(jù)編碼、糾錯編碼、碼字填充、布置功能圖形、添加掩模和添加版本信息7個步驟,其流程如圖2所示。
圖2 QR碼編碼過程
二維碼的解碼過程主要包括圖像預(yù)處理、確定位置版本信息、消除掩模、恢復(fù)數(shù)據(jù)和糾錯碼字、數(shù)據(jù)碼字譯碼等步驟,具體流程如圖3所示。
從系統(tǒng)的功能出發(fā),將二維碼安全管理系統(tǒng)分為公安戶籍管理系統(tǒng)、WPKI/CA系統(tǒng)、服務(wù)端和移動客戶端4個子系統(tǒng)。其中,公安戶籍管理系統(tǒng)主要用來提供實名認(rèn)證服務(wù),WPKI/CA是對二維碼來源進(jìn)行可信性認(rèn)證的可信第三方,服務(wù)端主要用來申請數(shù)字證書和制作二維碼,移動客戶端用來對二維碼進(jìn)行安全識別。系統(tǒng)整體功能模塊如圖4所示。
公安戶籍管理系統(tǒng)是建立一整套責(zé)任追溯機(jī)制的重要保障,主要管理公民的身份信息和虹膜特征信息,并且能夠通過虹膜識別技術(shù)提供實名認(rèn)證服務(wù)。在系統(tǒng)自身的安全防護(hù)方面,本系統(tǒng)設(shè)計了基于靜態(tài)口令的身份認(rèn)證模塊。通過對用戶口令和用戶信息多次執(zhí)行 Hash運算得到認(rèn)證信息,這種方式既保證了較長的密鑰長度,又實現(xiàn)了密鑰相對隨機(jī)和用戶口令的加密存儲。
圖3 QR碼解碼過程
圖4 系統(tǒng)功能結(jié)構(gòu)
WPKI/CA系統(tǒng)是實現(xiàn)對二維碼來源可信性驗證的可信第三方,該系統(tǒng)的核心是認(rèn)證機(jī)構(gòu)CA模塊,實現(xiàn)對證書的簽發(fā)、修改、撤銷等功能。為了保護(hù)私鑰的安全,本系統(tǒng)通過基于口令加密(PBE,password based encryption)算法對私鑰信息進(jìn)行加密。PBE算法并不是簡單地直接通過口令對內(nèi)容進(jìn)行加密[12],而是通過某種變換將口令轉(zhuǎn)換成加密的密鑰。這個變換過程具體是由KDF函數(shù)完成的,其實現(xiàn)流程為:首先通過“鹽”來擾亂用戶口令,產(chǎn)生準(zhǔn)密鑰,然后用散列函數(shù)對準(zhǔn)密鑰進(jìn)行多次迭代生成用來加密的密鑰,最后利用對稱加密算法對數(shù)據(jù)進(jìn)行加密,可選擇的對稱加密算法有DES、3DES、RC5等。
服務(wù)端是整個二維碼安全管理系統(tǒng)的核心,是實現(xiàn)責(zé)任追究的重要環(huán)節(jié)。服務(wù)端主要實現(xiàn)兩大功能。一是扮演注冊機(jī)構(gòu)RA的角色——向認(rèn)證機(jī)構(gòu)發(fā)送證書申請、修改、撤銷的請求,并且能夠查詢和下載數(shù)字證書等;二是利用數(shù)字證書制作二維碼,供其他用戶進(jìn)行掃描。用戶在申請數(shù)字證書前,通過虹膜識別進(jìn)行實名認(rèn)證,這樣做的目的是實現(xiàn)數(shù)字證書與用戶物理身份信息的間接綁定,從而使虛擬的數(shù)字證書能夠代替用戶的真實身份。同時,服務(wù)端保存數(shù)字證書與用戶物理身份的對應(yīng)關(guān)系。
移動客戶端是面向掃碼用戶的二維碼安全識別軟件,主要用來識別二維碼內(nèi)容,并對二維碼來源進(jìn)行可信性驗證。當(dāng)出現(xiàn)安全問題時,還可以通過查詢掃碼歷史,獲取該二維碼的簽名證書,然后向服務(wù)端舉報。服務(wù)端可以通過查詢數(shù)字證書與用戶身份的對應(yīng)關(guān)系表,查詢出該證書的申請者,實現(xiàn)責(zé)任追究。
在各子系統(tǒng)之間的保密通信方面,本系統(tǒng)采用基于PKI雙證書機(jī)制的加密傳輸。雙證書包括簽名證書和加密證書。簽名證書使用在簽名中,僅為了驗證身份,其中,公鑰和私鑰由用戶自己產(chǎn)生和保管,CA不負(fù)責(zé)其保管任務(wù)。加密證書用來在傳遞數(shù)據(jù)時進(jìn)行加密,其私鑰和公鑰由CA產(chǎn)生,并由CA保存。
二維碼的可信性驗證主要通過 WPKI/CA系統(tǒng)、服務(wù)端和移動客戶端3個子系統(tǒng)來實現(xiàn)。用戶向 WPKI/CA系統(tǒng)申請到數(shù)字證書后,對編碼信息進(jìn)行Hash運算,得到Hash值;然后利用數(shù)字證書的私鑰,通過ECDSA算法對Hash值進(jìn)行簽名,得到簽名值,最后將信息、簽名值和數(shù)字證書一起制作成QR碼,供其他用戶掃描。
用戶通過移動客戶端對QR碼進(jìn)行掃描,得到掃碼信息,并對掃碼信息進(jìn)行分割,提取其中的信息、簽名值和數(shù)字證書。然后對證書進(jìn)行4個方面的驗證:QR碼圖片中有沒有加入證書、證書是否過期、證書有沒有被撤銷、證書上的簽名是否正確。只有這4個方面的驗證都通過,才能證明證書有效。之后利用證書上的公鑰完成對簽名的驗證,如果驗證通過,則認(rèn)為QR碼的來源是可信的;否則認(rèn)為QR碼來源不可信。二維碼可信性驗證流程如圖5所示。
圖5 QR碼可信驗證流程
責(zé)任追究的關(guān)鍵是實現(xiàn)數(shù)值證書與用戶物理身份的綁定,因此在用戶申請數(shù)字證書過程中需要通過虹膜識別進(jìn)行實名認(rèn)證。實名認(rèn)證流程如圖6所示,將身份信息(姓名、身份證號)、虹膜特征信息和時間參數(shù)一起用簽名證書和加密證書進(jìn)行簽名加密,然后發(fā)送給公安戶籍管理系統(tǒng)。公安戶籍管理系統(tǒng)接收到信息后,進(jìn)行解密認(rèn)證,然后查詢生物特征數(shù)據(jù)庫進(jìn)行特征匹配,將匹配結(jié)果反饋給服務(wù)端。通過實名認(rèn)證后服務(wù)端才向WPKI/CA系統(tǒng)申請數(shù)字證書。用戶通過移動客戶端對QR碼進(jìn)行識別,如果經(jīng)過5個方面的驗證(具體內(nèi)容在4.3節(jié)中介紹)仍然出現(xiàn)安全問題,就可以通過查詢掃碼歷史獲提取該QR碼,并向服務(wù)端發(fā)出舉報請求,要求服務(wù)端索賠損失。服務(wù)端接收到請求后,經(jīng)驗證該QR碼存在安全問題,就會提取QR碼中的數(shù)字證書,查詢數(shù)據(jù)庫中數(shù)字證書與用戶身份的對應(yīng)關(guān)系表,獲取該證書的申請者,然后向有關(guān)部門進(jìn)行舉報,為打擊二維碼網(wǎng)絡(luò)犯罪提供第一手資料。
圖6 實名認(rèn)證流程
公安戶籍管理系統(tǒng)是使用 Eclipse開發(fā)的Java項目,頂層設(shè)計包如圖7所示。
圖7 公安戶籍管理系統(tǒng)頂層包
其中,com.gahj.dao包放置的是訪問數(shù)據(jù)庫的方法,同時管理數(shù)據(jù)庫的鏈接和關(guān)閉;com.gahj.dao.model包中放的是數(shù)據(jù)模型公共類,它們對應(yīng)數(shù)據(jù)庫中不同的數(shù)據(jù)表;com.gahj.iframe包放的是內(nèi)部窗體類,包括系統(tǒng)登錄、戶口登記、戶籍管理和虹膜識別窗體;com.gahj.security包中放置的是ECC加解密以及ECDSA簽名認(rèn)證程序,主要用來實現(xiàn)與服務(wù)端之間的安全通信;com.gahj.tcp包放置的是利用ServerSocket類編寫的雙向通信類程序;com.gahj.OkHttp包中放置的是實現(xiàn)虹膜識別的方法,checking類檢測圖片(Image)中的虹膜(Iris),match_verify類進(jìn)行虹膜識別,people_creat類創(chuàng)建用戶,people_delete類刪除用戶。
本系統(tǒng)在實現(xiàn)虹膜識別時主要利用天誠盛業(yè)公司提供的生物識別云服務(wù)平臺。借助于OkHttp庫發(fā)送HTTP請求,獲取虹膜識別的返回結(jié)果。首先,需要創(chuàng)建一個OkHttpClient的實例和一個RequestBody對象來存放待提交的參數(shù)。其次,需要創(chuàng)建一個Request對象,用來發(fā)起一條HTTP請求。之后,調(diào)用OKHttpClient的newCall()方法來創(chuàng)建一個Call對象,并調(diào)用它的execute()方法發(fā)送請求并獲取服務(wù)器返回數(shù)據(jù)[12]。發(fā)送虹膜識別請求的具體代碼如下所示。
WPKI/CA系統(tǒng)主要利用OpenSSL來實現(xiàn)證書的簽發(fā)。OpenSSL是一個開放源代碼軟件包,是最常用的證書管理工具。利用OpenSSL簽發(fā)數(shù)字證書首先要建立 CA,即簽發(fā)自簽名證書。然后產(chǎn)生密鑰和證書請求,由根證書根據(jù)證書請求簽發(fā)證書。
首先,要創(chuàng)建根證書。然后,利用 openssl ecparam 命令生成ECDSA密鑰;利用openssl req命令產(chǎn)生證書請求,證書請求用來生成證書(其中,請求信息包括國家、城市、組織名、主題名等);最后,利用openssl x509命令簽發(fā)數(shù)字證書。
簽發(fā)用戶證書和創(chuàng)建根證書一樣,只是在執(zhí)行openssl命令時簽名私鑰為根證書的私鑰。
服務(wù)端的實名認(rèn)證功能主要通過安全通信模塊向公安戶籍管理系統(tǒng)發(fā)送虹膜識別請求,實現(xiàn)程序與com.gahj.tcp和com.gahj.securuty相同。在二維碼制作方面,先通過 PBECoder類中的decrypt()方法對加密后的私鑰進(jìn)行解密,然后利用ECDSACoder類中的sign()方法對要編碼內(nèi)容進(jìn)行簽名,最后利用 CreateQRCode類中的encoder()方法將要編碼內(nèi)容、簽名值、數(shù)字證書的Base64編碼值一起制作成二維碼圖片。
移動客戶端是使用 Android Studio開發(fā)的Android項目。該項目主要實現(xiàn)對二維碼的識別并進(jìn)行可信性驗證。掃描QR碼解碼數(shù)據(jù)的基礎(chǔ)工作是利用Google的開源包ZXing來實現(xiàn)的,掃碼過程在CaptureActivity中進(jìn)行。該類中啟動了二維碼識別編碼線程DecodeThread、相機(jī)獲取焦點及相機(jī)預(yù)覽回調(diào)的一個循環(huán)過程,直至返回二維碼識別的結(jié)果,得到識別結(jié)果后對二維碼來源進(jìn)行可信性驗證。
移動客戶端對掃碼得到的數(shù)據(jù)做了5個方面的驗證。
1) 掃碼方通過分割數(shù)據(jù)判斷是否含有證書。
2) 利用 CertUtils類中的checkValidity()方法判斷證書是否過期。
3) 向服務(wù)器發(fā)送 request請求,設(shè)置該證書的序列號,利用 getRevokedCertificate()方法,查看該證書是否在證書撤銷列表中。
4) 利用 getPublicKey()方法,獲取根證書中的公鑰信息,然后利用verify()方法驗證證書中的簽名是否正確。
5) 同樣利用 getPublicKey()方法,獲取數(shù)字證書中的公鑰信息,然后利用verify()方法驗證二維碼的簽名是否正確。
當(dāng)這5個方面的驗證全部通過后,即可認(rèn)為該QR碼安全可信。
本文設(shè)計并實現(xiàn)了基于WPKI和虹膜識別的二維碼安全管理系統(tǒng),該系統(tǒng)能通過對二維碼來源進(jìn)行可信性驗證確保掃碼安全,避免安全隱患,即使出現(xiàn)安全問題,也能夠?qū)崿F(xiàn)責(zé)任追究,實現(xiàn)對二維碼的安全管理,促進(jìn)了二維碼技術(shù)的安全推廣與健康發(fā)展。然而,責(zé)任追究機(jī)制的建立還需要公安局等部門的配合,以及法律法規(guī)的保障。為更好地促進(jìn)該系統(tǒng)的應(yīng)用與推廣,一方面需要虹膜識別技術(shù)的進(jìn)一步發(fā)展,另一方面可以采用較為成熟的指紋識別或人臉識別技術(shù)。
參考文獻(xiàn):
[1]王飛, 賈玉文. 二維碼在移動信息服務(wù)中的應(yīng)用探析[J].學(xué)理論,2013(35):7 2-73.WANG F, JIA Y W. Application of two-dimensional code in mobile in formation service[J]. Theory, 2013 (35): 72-73.
[2]楊森.二維碼應(yīng)用及安全分析[J]. 信息安全與技術(shù), 2015, 6(8): 64-65.YANG S. Application and security analysis of two dimensional code[J]. Information Security and Technology, 2015,6 (8): 64-65.
[3]張豐, 施勇, 薛質(zhì). 二維 QR碼在電子商務(wù)中應(yīng)用的安全性研究[J].計算機(jī)技術(shù)與發(fā)展, 2017, 27(3): 131-135.ZHANG F, SHI Y, XUE Z. Research on the security of two-dimensional QR codes in electronic commerce[J]. Computer Technology and Development, 2017,27 (3): 131-135.
[4]馬文生. 我國發(fā)布首個二維碼安全規(guī)范應(yīng)用評價體系[J]. 中國防偽報道, 2016(3):45.MA W S. Releases the first releases code safety standard application evaluation system in China[J]. China Anti-Counterfeiting Report,2016(3): 45.
[5]蔣溢, 劉雨龍, 羅宇豪. 基于混沌 Z-映射的 QR 碼加密機(jī)制[J].計算機(jī)工程與設(shè)計, 2016, 37(9): 2361-2365.JIANG Y, LIU Y L, L Y H. QR code encryption mechanism based on chaotic Z-map[J]. Computer Engineering and Design, 2016, 37(9):2361-2365.
[6]馬峰, 張碩.一種基于信息隱藏的安全二維碼技術(shù)[J].科學(xué)技術(shù)創(chuàng)新, 2017(32): 83-84.MA F, ZHANG S. A secure two-dimensional code technology based on information hiding[J]. Science and Technology Innovation,2017(32): 83-84.
[7]逯全芳, 唐杰, 文紅. Android移動智能終端操作系統(tǒng)安全機(jī)制的安全性評估[J]. 信息安全與技術(shù), 2013, 4(8): 54-58.QUAN Q F, TANG J, WEN H. Android mobile intelligent terminal operating system security mechanism security assessment[J]. Information Security and Technology, 2013,4 (8): 54-58.
[8]張舉. WPKI在移動電子商務(wù)中的應(yīng)用研究[J]. 現(xiàn)代信息科技,2017, 1(4): 99-100.ZHANG J. WPKI applied research in mobile electronic commerce[J]. Modern Information Technology, 2017,1 (4): 99-100.
[9]明海波. 移動商務(wù)安全工作模式中 WPKI技術(shù)的應(yīng)用[J].電腦知識與技術(shù),2016,12(35):43-45.MING H B. Application of WPKI technology in mobile commerce security work mode[J]. Computer Knowledge and Technology,2016, 12(35): 43-45.
[10]徐曉寧. WPKI關(guān)鍵技術(shù)的設(shè)計與實現(xiàn)[D]. 西安: 西安電子科技大學(xué),2015.XU X N. Design and implementation of the key technology of WPKI[D]. Xi’an: Xidian University,2015.
[11]伊恩澤, 佟新, 魏震, 等. Android智能終端二維碼安全檢測系統(tǒng)的設(shè)計與實現(xiàn)[J]. 電腦知識與技術(shù), 2017, 13(8): 61-64.YI E Z, TONG X, WEI Z, et al. Design and implementation of Android intelligent terminal QR code security detection system[J].Computer Knowledge and Technology, 2017, 13(8): 61-64.
[12]梁棟. Java加密與解密的藝術(shù)[M]. 北京: 機(jī)械工業(yè)出版社, 2014.LIANG D. Java encryption and decryption art[M]. Beijing: Mechanical Industry Press, 2014.