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