譚德林,李均利
(四川師范大學,四川 成都 610068)
二維碼技術最早是由日本在20世紀70年代提出的,它使用某種特定的二維圖形按一定的規律在二維平面上繪制黑白相間的二維條形碼圖形來保存和記錄信息。而二維碼在存儲數據時,一般使用二進制對其進行編碼。也即使用“0”和“1”的信息串來表示二維碼中存儲的信息,這也符合計算機的信息表示方式。二維碼中存儲的數據只有被相應的設備掃描后,方可獲取其所存儲的信息。二維碼的種類很多,其相應的編碼和讀取方式也不同,常見的有堆疊式二維碼和矩陣式二維碼[1]。其中堆疊式二維碼也稱為行排式二維碼,主要有Code 16K、Code 49、PDF417等編碼方式;矩陣式二維碼主要有QR Code、Code One、MaxiCode、Data Matrix[2]、HanXinCode、GridMatrix等編碼方式[3]。在以上編碼方式中,QR碼的使用最為廣泛。
隨著二維碼的應用越來越廣泛,特別是二維碼制作過程的簡單和開放[4],許多不法分子瞅準機會,將二維碼作為其犯罪作案的新途徑[5]。如利用二維碼傳播病毒、植入木馬;利用二維碼引導用戶訪問釣魚網站等惡意網站;利用二維碼訪問吸費軟件等。這不但影響了人們的日常生活,同時也造成了一定的社會經濟損失。而究其原因,主要是用戶在掃描二維碼時,無法識別該二維碼來源的真偽,從而導致在掃描時不能對二維碼制作者進行識別,也無法在出問題后追究二維碼制作者的責任[6-7]。
鑒于上述問題,文中提出了基于RSA數字簽名的二維碼技術,并通過實驗對該技術進行驗證。
QR碼于1994年由日本的Denso-Wave公司發明,其主要支持文本、圖片、網址鏈接、音頻、視頻等,并通過掩膜技術對存儲的信息進行保密,其編解碼過程[8]如圖1和圖2所示。

圖1 編碼過程

圖2 解碼過程
數字簽名是眾多密碼學工具中最重要的一種,目前已經得到了廣泛應用。數字簽名與不安全信道上的密鑰簡歷共同構成了公鑰密碼學中最重要的內容。數字簽名與手寫簽名一樣,能夠提供對簽名內容的識別。尤其是它們都提供了一種能保證每個用戶驗證消息的方法,即能夠確認消息來源于何處,有誰可傳遞等。
數字簽名如同手寫簽名一樣,用來證明某個人的確生成了某個消息。但是與手寫簽名不同的是,數字簽名只適用于數字信息中。數字簽名的基本原理是對消息簽名的一方使用私鑰,而對消息接收的一方使用公鑰。此時,只有擁有私鑰的一方才能對數字消息進行簽名,進而保證了數字簽名的正確性。數字簽名與密碼學一樣,也具有安全服務要求,其種類也較多。主要包括保密性、完整性、消息驗證、不可否認性、身份驗證/實體驗證、訪問控制、可用性、審計、匿名等。
目前能作為數字簽名算法的主要是公鑰密碼算法,如RSA公鑰密碼算法、Elgamal數字簽名算法及其變體DSA。為了方便和易于理解,對RSA數字簽名方案進行介紹。RSA數字簽名是由RSA公鑰密碼方案演變過來的,而RSA公鑰密碼體制由Rivest,Shamir和Adleman等于1977年提出,以它的發明者們的名字首字母命名[9]。其算法思想如下:
密鑰生成:p,q是兩個大素數,且有n=pq,根據歐拉定理,φ(n)=(p-1)(q-1)。隨機選擇整數d,e,使得gcd(d,φ(n))=1,ed≡1(φ(n)),則公鑰pk=(n,e),私鑰sk=d。
加密:明文空間M中的任意消息m,對應密文為c=Epk(m)=me(modn)。
解密:m=Dsk(c)=cd(modn)。
而RSA數字簽名與加解密過程剛好相逆。假設用戶A發送一個簽名的消息x給用戶B,且密鑰與上面RSA密碼方案相同,則數字簽名過程為:
s=sigkpr(x)≡xdmodn
驗證過程為:
x'≡verkpub(x,s)≡semodn
x'≡xmodn,表示簽名有效,否則表示簽名無效。
安全性是密碼學方案或數字簽名的首要考慮因素。一個不安全的密碼學方案是無實用價值的。與其他所有非對稱方案一樣,數字簽名也需要保證其公鑰是可信的,也即驗證方所擁有的公鑰的確是與簽名所用的私鑰相對應的。目前針對RSA數字簽名的攻擊主要包括:算法攻擊和存在性偽造攻擊。其中算法攻擊,也即通過計算私鑰來破解底層的RSA方案,其所面對的困難性是基于大整數因式分解,為了單純地防止該類攻擊,則要求有較長的模長度。對于智能手機,明顯是不理想的,因而實際使用RSA數字簽名時,都不是使用單純的RSA數字簽名,而是使用RSA的概率簽名標準,也即PSS;而存在性攻擊,也即允許攻擊者生成隨機消息x的有效簽名,以冒充正常簽名,從而獲得相應的公鑰或者從中破解出私鑰,最后達到攻擊數字簽名的目的。
為了解決以上攻擊,一般方案是使用RSA填充技術,也即概率簽名標準技術。粗略地講,即是對消息格式化。所謂消息格式化,就是使用一定規則,讓消息驗證者能夠區分消息的有效性和無效性。RSA填充技術是基于RSA密碼體制的簽名方案,它結合了消息驗證、消息編碼以及數字簽名技術。應該說,RSA填充技術能夠很好地防止以上各種攻擊,在目前的RSA數字簽名中應用廣泛。
為了解決目前二維碼技術無法對二維碼制作者進行認證以及無法追究制作者責任的現狀[10],文中提出了具有數字簽名的二維碼技術。該技術主要是借助RSA數字簽名的工作原理來完成對二維碼制作者的驗證。其工作過程如圖3所示。
由圖3(a)可知,具有數字簽名的QR碼編碼階段與普通QR碼編碼相比,增加了“數字簽名”步驟。也即具有數字簽名的QR碼編碼是在其編碼階段的數據碼字序列的首部加上數字簽名和明文,也即相應的簽名和明文,即s和x。其中s=xd,x即為明文,然而該明文卻并不是具有隱私性的明文,而是經過哈希函數H摘要后的信息。

圖3 具有數字簽名的QR碼編解碼過程
由圖3(b)可知,具有數字簽名的QR碼解碼分為很多步驟。與普通QR解碼端相比,其增加了“驗證數字簽名”步驟。該步驟通過獲取數據碼字序列中存儲的數字簽名s以及與簽名相對應的明文x,然后利用公布的公鑰e進行計算,也即e.s=(xd)emodn。如果以上運算結果與明文x相等,則表示通過數字簽名驗證,掃描者可以繼續掃描二維碼中的數據碼字序列以讀取二維碼中存儲的信息;如果以上運算結果與明文x不相等,則表示沒通過驗證,掃描者將停止掃描二維碼中的數據碼字序列。
實驗操作平臺為Windows 7旗艦版,二維碼生成平臺使用Visual C++ 6.0對開源的QR二維碼生成算法源碼進行編輯與運行[11],也即在其數據碼字序列生成后,再在其序列首加上需要簽名的明文x以及對應的簽名s,并生成最終的二維碼,且以圖像形式進行存儲。在源代碼中,生成二維碼的函數原型為BOOL EncodeData(int nLevel, int nVersion, BOOL bAutoExtent, int nMaskingNo, LPCSTR lpsSource, int ncSource)。只需在生成的數據碼字序列的首部加上要簽名的明文x以及對應的簽名s即可。
然后使用Android模擬器pc版模擬微信掃描功能[12-14]。具體做法是將上述生成的二維碼圖像導入模擬器相冊,并在模擬器中點擊登錄微信,再點擊掃一掃功能,并選擇模擬器相冊中相應二維碼圖像,即可以進行掃描。在掃描過程中,首先分別獲取要簽名的明文x以及對應的簽名s,然后根據獲取的簽名s與公鑰e進行模指數運算,并得到一個值x',最后將x'與x進行比較。如果x'與x相等,則繼續掃描下面的數據碼字序列并獲得其中所存儲的信息;如果x'與x不相等,則掃描端停止掃描。
針對二維碼存在的安全隱患,提出了一種具有數字簽名的二維碼技術。該技術使得在掃描二維碼數據之前,先對二維碼的來源進行識別。只有當識別通過后,才能繼續讀取二維碼中的相應信息;如果二維碼識別未通過,則停止讀取二維碼中的信息。實驗測試表明,該技術可以有效防止用戶去掃描一些非法二維碼,如通過二維碼訪問吸費軟件、非法網站、木馬或感染病毒等,進而提高了二維碼技術的安全性。然而,該技術也存在一些問題,如其掃描速度比普通的二維碼掃描速度低。因此,接下來的工作就是在保證二維碼制作者身份認證的同時,提高二維碼掃描的速度。
[1] 黃文培.一種基于信息隱藏的圖像二維碼設計[D].成都:西南交通大學,2015.
[2] 漢信碼[S].北京:中國標準出版社,2008.
[3] 婁良宇,張 健,梅 鋒,等.二維碼應用與安全[J].通信管理與技術,2014(3):60-61.
[4] 鄭 君,李海霞.基于動態二維碼的安全身份認證方案的研究[J].湖北理工學院學報,2015,31(2):35-38.
[5] 馬立林.云計算環境下基于二維碼的移動終端身份認證方案[J].微電子學與計算機,2016,33(1):140-143.
[6] 張新文,李華康,楊一濤,等.基于二維碼技術的個人信息隱私保護物流系統[J].計算機應用研究,2016,33(11):3455-3459.
[7] 凌康杰,岳學軍,劉永鑫,等.基于移動互聯的農產品二維碼溯源系統設計[J].華南農業大學學報,2017,38(3):118-124.
[8] 張 豐,施 勇,薛 質.二維QR碼在電子商務中應用的安全性研究[J].計算機技術與發展,2017,27(3):131-135.
[9] MERKLE R C,HELLMAN M.Hiding information and signatures in trapdoor knapsacks[J].IEEE Transactions on Information Theory,1978,24(5):525-530.
[10] 馬尚寅,高關心,劉嘉吉,等.基于微信的考勤管理系統身份認證及位置識別方法的實現機制[J].計算機與現代化,2017(3):8-12.
[11] 祁 慧.基于Android系統的QR碼識別技術研究與實現[D].南京:東南大學,2015.
[12] 羅春玲.二維條碼QR的糾錯改進研究[D].武漢:武漢理工大學,2013.
[13] 韓 芳.主動式二維碼考勤系統研究[J].網絡安全技術與應用,2017(1):134-135.
[14] 周平平.微信小程序會殺死APP嗎[J].計算機與網絡,2017,43(1):47.