周佳華,李福山
(福州大學 物理與信息工程學院,福建 福州 350108)
由于二維碼具有價格低、信息量大、容錯度高、持久性高等特點[1],目前已被我國廣泛應用于在線交易、食品追溯、電子票務等許多領域。其中,QR(Quick Response)二維碼具有能夠全方位識別、識別速度快、可以表示漢字等優(yōu)點,因此,我國采用的二維碼編碼方式大部分為QR編碼。但是,由于二維碼的編解碼算法是開源的,往往有一些不法分子會通過篡改二維碼信息或者往二維碼中植入病毒來獲取利益。在應用于交易或者電子票務等領域,不法分子的這些行為對用戶信息的安全性、用戶的利益造成一定的威脅。因此,二維碼信息的安全性和防偽也就逐漸成為了關注的焦點之一。
為了解決上述問題,本文將信息加密技術加入到二維碼的編碼中,增強二維碼信息的安全性,并設計了基于嵌入式的二維碼加密系統(tǒng)。本文通過友善之臂提供的Tiny4412平臺來設計QR碼加密系統(tǒng),實現(xiàn)圖像采集、解碼、加密、編碼,從而得到加密二維碼圖像。
QR碼是矩陣條碼,它由幾個方形模塊組成,每個模塊代表著不同的意義,包括定位圖形、位置檢測、校正圖形和分隔符[2],如圖1所示。QR碼版本信息共有40種。格式信息代表校正水平,校正水平分為L,M,Q,H 4個等級。通常,校正水平越高,信息量越少,因此一般來說,M級是優(yōu)先的。QR碼根據可容納的數據信息大小分為版本1~40,其中版本1可容納的信息量最小,而版本40可容納的信息量最大。
圖1 QR二維碼結構圖
二維碼的編碼[3],即通過編碼將二維碼的原始信息進行編碼從而生成二維碼。二維碼的形成過程主要包括數據編碼、糾錯編碼及在矩陣中布置模塊從而得到二維碼圖形[4],其主要步驟如圖2所示。
圖2 二維碼生成流程
對二維碼進行加密的方式有很多種,通常根據二維碼形成的過程在各個環(huán)節(jié)上加密。主要是通過以下幾種方式進行:
(1)將二維碼信息先加密再通過QR編碼最后生成二維碼,解碼后得到的是加密過的信息,需要對其進行解密才能夠讀取到其原本的信息[5]。加密流程如圖3所示。
圖3 二維碼加密方式1流程圖
(2)對二維碼信息先進行編碼得到數據碼字,然后加密[6],再對其進行糾錯最后得到二維碼。加密流程如圖4所示。
圖4 二維碼加密方式2流程圖
另外還有一種方式是在輸出二維碼圖形后再對二維碼圖形加密,這種方式容易破壞二維碼圖像的結構,僅適用于一些特別的應用。本系統(tǒng)采用的是第一種方式對二維碼信息進行加密。
圖5 不同加密算法在不同等級下可傳遞的信息容量
而加密算法也是多種多樣,如圖5所示,不同的加密算法在不同糾錯等級下可傳遞的信息容量的差別。糾錯等級越低,需要加入的糾錯信息量越少,可傳遞的信息容量就越多。相反,糾錯水平越高,可傳遞的信息容量也就越少。由圖5可以看出,使用不同加密算法對信息容量的影響不大,而AES(Advanced Encryption Standard)算法安全性高,運算效率較高,算法簡單靈活,因此本文采用高級加密標準AES加密算法來對二維碼信息進行加密。
在AES算法中,其數據分組長度為128 bit,每組128 bit的數據被分成16 B,并映射到4×4的狀態(tài)矩陣中。不同的密鑰長度128 bit、192 bit、256 bit所對應的輪變換次數Nr分別為10次、12次、14次。每次的輪變換都有4個不同的運算操作,如圖6所示。AES算法的加密流程是先用擴展密鑰與映射成狀態(tài)矩陣的信息數據進行輪密鑰加運算,然后再進行Nr-1次的循環(huán)輪變換,最后進行Nr次循環(huán)輪變換運算的時候去掉列混合變換再將得到的狀態(tài)矩陣映射成密文。在除第一次以外的其他輪密鑰加運算過程中,需要的密鑰是初始密鑰的擴展密鑰。由于AES算法是對稱加密算法,加密和解密屬于互逆過程[10]。
圖6 AES加密流程圖
考慮到二維碼信息的安全,本文改進了AES加密算法初始密鑰的形成,從圖6我們看出,擴展密鑰是由初始密鑰得來的[7],可知初始密鑰對加密算法的安全性具有關鍵性的作用。因此,本文采用隨機生成器隨機生成128 bit的初始密鑰,再用AES加密算法對二維碼源信息進行加密后得到二維碼。相比傳統(tǒng)的固定密鑰的方式,改進方法更具有隨機性,二維碼信息的安全性也相應得到了提高。設計流程圖如圖7所示。
圖7 QR二維碼AES加密流程圖
本文將二維碼加密做成嵌入式系統(tǒng),本系統(tǒng)設計是基于Qt應用程序平臺和Qzxing解碼庫用C/C++編程語言來實現(xiàn)的,并在信息前端用改進的AES算法進行加密。
本系統(tǒng)的硬件部分主要由三星四核微處理器、通信端口、調試端口、存儲器、LCD顯示屏和USB攝像頭6個結構構成,如圖8所示。本系統(tǒng)采用的微處理器是三星公司ARM Cortex-A9 Exynos 4412四核處理器。圖像采集部分采用的是支持V4L2驅動框架和YUV圖像格式的羅技公司c270i-USB攝像頭。本系統(tǒng)就是通過該USB攝像頭進行二維碼圖像的采集,并通過處理器解密和識別二維碼圖形。
圖8 系統(tǒng)硬件結構框圖
本系統(tǒng)的軟件組成如圖9所示。為了系統(tǒng)的安全性、可維護性以及運行的流暢度,本系統(tǒng)采用安全性較高且可移植性較強的Linux操作系統(tǒng),并在Linux上設計驅動程序以及QR碼的編解碼和加密算法,為應用層提供接口。應用程序的主要功能就是開啟USB攝像頭捕捉二維碼圖像,然后解碼獲得信息[9],再用改進的AES加密算法對信息進行加密和編碼后獲得加密后的二維碼,從而實現(xiàn)二維碼加密的整個過程。
圖9 系統(tǒng)軟件結構圖
本文采用AES加密算法對QR二維碼信息進行加密,對于其抗密鑰攻擊能力,已知DES(Date Encryption Standard)的密鑰長度為56 bit,假如破解DES加密算法的密鑰需要10-2s,那么就需要2(128-56)×10-2s才能破解AES加密算法128 bit的密鑰,即將近2 300年。況且,本文采用密鑰隨機生成器隨機生成128 bit的初始密鑰來改進AES算法,這無疑對二維碼信息又多了一層保護,增強其安全性。
圖10所示分別為二維碼信息加密前后的二維碼圖像。通過含有QR二維碼解碼模塊的掃描器掃描這兩個二維碼,可以發(fā)現(xiàn),掃描加密前(即沒有對二維碼做任何處理)的二維碼,可得到該二維碼所含的信息,而用同樣的方法掃描加密后的二維碼得到的是一串亂碼。這就說明普通的解碼器無法識別加密后的二維碼,需要嵌有與加密模塊相對應的解密模塊才可識別,這就保證了二維碼信息的安全性。
圖10 加密前后的二維碼圖像
本文針對當今QR二維碼在使用中的信息安全問題和防偽問題,設計了一種基于嵌入式的二維碼加密系統(tǒng),即在嵌入式平臺上,將隨機生成器產生的初始密鑰與AES加密算法相結合的方法對二維碼信息進行加密,保證了二維碼信息的安全性。通過測試發(fā)現(xiàn),掃描加密前的二維碼可得到二維碼信息,而用同樣的方法掃描加密后的二維碼得到的是一串亂碼,需要對加密后的二維碼進行解密才可解碼出其源信息。本設計具有可行性和可操作性,同時也提高了二維碼信息的安全性,并增強其防偽功能。
[1] 楊絮. 扭曲二維碼的識別算法研究與實現(xiàn)[D].上海:復旦大學,2013.
[2] 陳威兵,楊高波,馮璐. 一種QR碼識別的低復雜度圖像預處理方法[J]. 湖南大學學報(自然科學版),2012,39(10):93-97.
[3] 盛秋康. 二維碼編解碼技術的研究與應用[D].南京:南京理工大學,2012.
[4] 謝仁康. 非對稱加密二維碼防偽系統(tǒng)的設計[D].成都:電子科技大學,2013.
[5] 滕旭. 基于偽指紋特征密鑰的二維碼加密算法研究[J]. 軟件導刊,2013,12(8):135-137.
[6] 王宏波,蔣淑玲. 基于二維碼的身份驗證技術研究[J]. 科技尚品,2016(4):186-187.
[7] 龍建明,鄭瑩娜,肖本海. QR二維碼電子保單信息加密與防偽應用研究[J]. 計算機與數字工程,2015,43(8):1475-1480.
[8] WAKAHARA T, YAMAMOTO N, OCHI H. Image processing of dotted picture in the QR code of cellular phone[C]// 2010 International Conference on P2P, Parallel,Grid, Cloud and Intemet Computing, 2010, 10(1): 454-458.
[9] 李逢玲,鄭飛. RSA加密算法在QR二維碼上的應用探討[J]. 中小企業(yè)管理與科技, 2014(31):207-208.
[10] 林洋. 基于B/S結構的數據庫加密技術的研究與設計[D]. 廣州:華南理工大學, 2012.