基于嵌入式的QR二维码加密系统设计与实现
2018-03-29周佳华李福山
周佳华,李福山
(福州大学 物理与信息工程学院,福建 福州 350108)
0 引言
由于二维码具有价格低、信息量大、容错度高、持久性高等特点[1],目前已被我国广泛应用于在线交易、食品追溯、电子票务等许多领域。其中,QR(Quick Response)二维码具有能够全方位识别、识别速度快、可以表示汉字等优点,因此,我国采用的二维码编码方式大部分为QR编码。但是,由于二维码的编解码算法是开源的,往往有一些不法分子会通过篡改二维码信息或者往二维码中植入病毒来获取利益。在应用于交易或者电子票务等领域,不法分子的这些行为对用户信息的安全性、用户的利益造成一定的威胁。因此,二维码信息的安全性和防伪也就逐渐成为了关注的焦点之一。
为了解决上述问题,本文将信息加密技术加入到二维码的编码中,增强二维码信息的安全性,并设计了基于嵌入式的二维码加密系统。本文通过友善之臂提供的Tiny4412平台来设计QR码加密系统,实现图像采集、解码、加密、编码,从而得到加密二维码图像。
1 QR二维码
QR码是矩阵条码,它由几个方形模块组成,每个模块代表着不同的意义,包括定位图形、位置检测、校正图形和分隔符[2],如图1所示。QR码版本信息共有40种。格式信息代表校正水平,校正水平分为L,M,Q,H 4个等级。通常,校正水平越高,信息量越少,因此一般来说,M级是优先的。QR码根据可容纳的数据信息大小分为版本1~40,其中版本1可容纳的信息量最小,而版本40可容纳的信息量最大。
图1 QR二维码结构图
二维码的编码[3],即通过编码将二维码的原始信息进行编码从而生成二维码。二维码的形成过程主要包括数据编码、纠错编码及在矩阵中布置模块从而得到二维码图形[4],其主要步骤如图2所示。
图2 二维码生成流程
2 二维码加密设计
对二维码进行加密的方式有很多种,通常根据二维码形成的过程在各个环节上加密。主要是通过以下几种方式进行:
(1)将二维码信息先加密再通过QR编码最后生成二维码,解码后得到的是加密过的信息,需要对其进行解密才能够读取到其原本的信息[5]。加密流程如图3所示。
图3 二维码加密方式1流程图
(2)对二维码信息先进行编码得到数据码字,然后加密[6],再对其进行纠错最后得到二维码。加密流程如图4所示。
图4 二维码加密方式2流程图
另外还有一种方式是在输出二维码图形后再对二维码图形加密,这种方式容易破坏二维码图像的结构,仅适用于一些特别的应用。本系统采用的是第一种方式对二维码信息进行加密。
图5 不同加密算法在不同等级下可传递的信息容量
而加密算法也是多种多样,如图5所示,不同的加密算法在不同纠错等级下可传递的信息容量的差别。纠错等级越低,需要加入的纠错信息量越少,可传递的信息容量就越多。相反,纠错水平越高,可传递的信息容量也就越少。由图5可以看出,使用不同加密算法对信息容量的影响不大,而AES(Advanced Encryption Standard)算法安全性高,运算效率较高,算法简单灵活,因此本文采用高级加密标准AES加密算法来对二维码信息进行加密。
2.1 AES加密算法
在AES算法中,其数据分组长度为128 bit,每组128 bit的数据被分成16 B,并映射到4×4的状态矩阵中。不同的密钥长度128 bit、192 bit、256 bit所对应的轮变换次数Nr分别为10次、12次、14次。每次的轮变换都有4个不同的运算操作,如图6所示。AES算法的加密流程是先用扩展密钥与映射成状态矩阵的信息数据进行轮密钥加运算,然后再进行Nr-1次的循环轮变换,最后进行Nr次循环轮变换运算的时候去掉列混合变换再将得到的状态矩阵映射成密文。在除第一次以外的其他轮密钥加运算过程中,需要的密钥是初始密钥的扩展密钥。由于AES算法是对称加密算法,加密和解密属于互逆过程[10]。
图6 AES加密流程图
2.2 改进的二维码加密算法
考虑到二维码信息的安全,本文改进了AES加密算法初始密钥的形成,从图6我们看出,扩展密钥是由初始密钥得来的[7],可知初始密钥对加密算法的安全性具有关键性的作用。因此,本文采用随机生成器随机生成128 bit的初始密钥,再用AES加密算法对二维码源信息进行加密后得到二维码。相比传统的固定密钥的方式,改进方法更具有随机性,二维码信息的安全性也相应得到了提高。设计流程图如图7所示。
图7 QR二维码AES加密流程图
3 嵌入式系统设计
本文将二维码加密做成嵌入式系统,本系统设计是基于Qt应用程序平台和Qzxing解码库用C/C++编程语言来实现的,并在信息前端用改进的AES算法进行加密。
3.1 硬件设计
本系统的硬件部分主要由三星四核微处理器、通信端口、调试端口、存储器、LCD显示屏和USB摄像头6个结构构成,如图8所示。本系统采用的微处理器是三星公司ARM Cortex-A9 Exynos 4412四核处理器。图像采集部分采用的是支持V4L2驱动框架和YUV图像格式的罗技公司c270i-USB摄像头。本系统就是通过该USB摄像头进行二维码图像的采集,并通过处理器解密和识别二维码图形。
图8 系统硬件结构框图
3.2 软件设计
本系统的软件组成如图9所示。为了系统的安全性、可维护性以及运行的流畅度,本系统采用安全性较高且可移植性较强的Linux操作系统,并在Linux上设计驱动程序以及QR码的编解码和加密算法,为应用层提供接口。应用程序的主要功能就是开启USB摄像头捕捉二维码图像,然后解码获得信息[9],再用改进的AES加密算法对信息进行加密和编码后获得加密后的二维码,从而实现二维码加密的整个过程。
图9 系统软件结构图
4 性能测试与分析
本文采用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二维码解码模块的扫描器扫描这两个二维码,可以发现,扫描加密前(即没有对二维码做任何处理)的二维码,可得到该二维码所含的信息,而用同样的方法扫描加密后的二维码得到的是一串乱码。这就说明普通的解码器无法识别加密后的二维码,需要嵌有与加密模块相对应的解密模块才可识别,这就保证了二维码信息的安全性。
图10 加密前后的二维码图像
5 结束语
本文针对当今QR二维码在使用中的信息安全问题和防伪问题,设计了一种基于嵌入式的二维码加密系统,即在嵌入式平台上,将随机生成器产生的初始密钥与AES加密算法相结合的方法对二维码信息进行加密,保证了二维码信息的安全性。通过测试发现,扫描加密前的二维码可得到二维码信息,而用同样的方法扫描加密后的二维码得到的是一串乱码,需要对加密后的二维码进行解密才可解码出其源信息。本设计具有可行性和可操作性,同时也提高了二维码信息的安全性,并增强其防伪功能。
[1] 杨絮. 扭曲二维码的识别算法研究与实现[D].上海:复旦大学,2013.
[2] 陈威兵,杨高波,冯璐. 一种QR码识别的低复杂度图像预处理方法[J]. 湖南大学学报(自然科学版),2012,39(10):93-97.
[3] 盛秋康. 二维码编解码技术的研究与应用[D].南京:南京理工大学,2012.
[4] 谢仁康. 非对称加密二维码防伪系统的设计[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]. 中小企业管理与科技, 2014(31):207-208.
[10] 林洋. 基于B/S结构的数据库加密技术的研究与设计[D]. 广州:华南理工大学, 2012.