焦利杰
(河南质量工程职业学院,河南 平顶山,467000)
一维条形码一般是指水平方向存储信息的条码条和空的排列规则,它的数据容量较小只能容纳30 个左右包含字母和数字的字符,由一维条形码发展演变而来的二维码是利用一些黑白相间的几何图形按照一定规则在水平和垂直方向的二维空间存储记录数据符号信息的条形码,使用特定的扫码软件通过二维码图像进行读取信息并自动处理信息。二维码(Quick Response Code)起源于20 世纪70 年代日本Denso Wave 公司的Masahiro Hara,由于当时的汽车零部件需要追踪和匹配大量不同的信息,传统的条形码信息容量和编码范围非常有限,二维码的发明应时而生,解决了如何在产品标签上存储更多的产品信息的问题。中国对二维码技术的研究始于1993 年,随着中国市场经济的不断完善和信息技术的迅速发展,中国物品编码中心在国家的大力支持下,制定了两个二维码的国家标准,二维码网格矩阵码和二维码紧密矩阵码,促进了我国自主知识产权的二维码研发[1]。随着我国网络技术和移动终端的不断发展,二维码已经广泛应用于生活之中,因其制作简单、成本低廉、使用方便等特点,使得许多不法分子利用二维码作为新的犯罪工具,进行病毒和木马的传播导致隐私或者身份信息的泄露,或者诱导用户进入钓鱼网站导致财产的损失。鉴于此,本文依托二维码的生成原理对二维码的应用领域以及面临的安全问题进行了深入分析,以提高二维码技术应用和安全方案的可行性。
随着中国市场经济的不断完善,二维码技术的应用弥补了条形码信息存储能力弱和空间利用率低的缺点,提高了信息数据容量的存储能力,促进了商品经济和移动终端金融支付的发展。
(1)数据容量存储能力大
最多可达1850 个大写字母或2710 个数字或1108 个字节或500 多个汉字。
(2)编码范围广
二维码可以使用图片、文字、声音等信息进行编码。
(3)容错能力高
局部污损不影响信息的识别。
(4)纠错和译码可靠性高
译码错误率不超过千万分之一。
(5)制作过程简单,成本低廉
(6)条码尺寸相对小,符号形状和尺寸比例可以调节
(7)可以使用光耦合装置(Charge Coupled Device)扫描器识读
按编码模式进行分类的话,二维码可以分为矩阵式二维码和行排式二维码,它们具有不同的编码原理。矩阵式二维码通过黑白像素分布在一个矩形空间不同的位置进行编码,在元素位置上用方点或圆点来表示二进制的1,空白表示二进制的0[2]。矩阵式二维码是一种图形符号自动识读技术,主要依托计算机图形技术和组合编码技术。行排式二维码可以从字面上理解为多个一维码按需堆积而成,编码、解码和识读方式也具有一维码的特点,而且识别设备和条码印刷也与一维码相兼容[3]。
二维码尺寸的官方称谓是Version,最高具有40 个尺寸,Version1 是21×21 的矩阵,每增加一个版本就会增加4 个模块,计算版本的公式是(Version-1)*4+21。
示 例:Version2 的 计 算 方 法 就 是(2-1)*4+21=25,即Version2 是25×25 的矩阵。
数字编码的区间是从0 到9,把需要编码的数字分成每三位一组,然后转换为10bits 的二进制,不足三位的单独一组。字符编码包括0 到9,大写的A 到Z 以及符号$、%、*、+、-、.、/、:和空格,字符需要先两两分组,然后转换成字符索引表中(表1)相对应的45 进制的数,再转成11bits 的二进制,然后进行二进制转换[4]。如有尾部有单数,需要转换成6bits 的二进制。
表1 字符索引表
表2 模式指示符
举例一:在Version1 版本下,数字编码12345
(1)把12345 每三位分成一组,不够三位的单独成组,结果是123 45
表3 字符计数指标的字节位数
(2)Version1 的数字编码需要转换为10bits 的二进制,把123 和45 分别转换为二进制,结果是0001111011 101101
(3)根据表3,Version1 数字长度用10bits,把数字编码12345 的数字个数5 转换成二进制是0000000101
(4)根据表2,数字编码的模式指示符为0001,然后把模式指示符和数字个数的二进制加到前边,结果为0001 0000000101为0001111011 101101
举例二:在Version1 版本下,字符编码QR-C
(1)从表1 字符索引表检索QR-C 的值,分别为(26 27 41 12)
(2)把值每两位分为一组,(26,27),(41,12)
(3)先转换为45 进制,然后再转换为11bits的二进制
(26,27)转换为45 进制,26*45+27=1197,转换为二进制是10010101101
(41,12)转换为45 进制,41*45+12=1857,转换为二进制是11101000001
(4)根据表3,字符个数4 应转换为9bits 的二进制,结果为000000100
(5)根据表2,字符编码的模式指示符为0010,然后把模式指示符和字符个数的二进制加到前边, 结果为0010 000000100 10010101101 11101000001
结束符为0000,我们还需要在尾部添加结束符。示例(表4):
表4 结束符
所有编码的位加起来如果不是8 的倍数,还需要在尾部不足8 位的补0,最后按8bts 每组进行分组。示例:00100000 00100100 10101101 1101000 00100000(表5):
表5 不同等级数据容量
Version1 H 级纠错级别最大需要72 个bits,如果没有达到还需要用Padding bytes(补齐码11101100 00010001)补足。示例只有40 个bits,因此还需要补足32 个bits。
正是有了纠错机制才使一些污损残缺的二维码能够正确的识读出来。纠错水平分为L、M、Q、H四个级别,在对数据码添加纠错码时,需要先对数据码进行分组(表6):
表6 Version5 纠错特性
纠错码块(c,k,r)中c 为码字总数,k 为数据码个数,r 为纠错码容量。以Version5 H 级为例,表6中指出有两组码,每组码又被分为两块,第一组每块码字总数都是33,包含11 个数据码,22 个纠错码,第二组每块码字总数都是34,包含12 个数据,22 个纠错码(表7):
表7 纠错码块
最终编码需要把数据码和纠错码按照块从上到下从左到右的顺序组合到一起。先把每块的第一个数据取出来然后按照从上到下的顺序排列,然后取每块的第二个数据按照从上到下的顺序排在之前数据的后边,最后依序排列至结束。纠错码也是采取同样的方法,然后排列在数据码后边就组成了数据区。
图1 二维码信息
定位图案是一个7×7 的矩阵,位于二维码的三个角。对齐图案是一个5×5 的矩阵。不同版本的对齐图案的个数也不相同。例如version8 在行列值6,24,42 的几个点都会有对齐图案,一共有6个。时序图案是两条用于连接三个定位图案的线(图1)。
格式信息是一个固定15bits 的信息,其中数据位占5bits,纠错位占10bits(图2)。
图2 格式信息
Version7 及以上版本需要加入版本信息,大小固定为18bits。图1 中指向阴影部分的版本信息填充方式如图3。
图3 版本填充方式
数据填充按照先数据码后纠错码的顺序,从二维码的右下角开始按蛇行方向上下移动填充,遇到非填充区域时需要避开。
最后一步使用蒙版图案进行掩码,如果出现大面积的空白或黑块会影响扫描识读,所以蒙版图案是为了避免黑白模块的不均衡。蒙版图案共有8 种,原图数据区域与蒙版进行异或操作后更容易识读(表8)。
表8 蒙版公式
二维码整套编码流程如图4 所示[5]。
图4 编码流程
(1)智能终端及操作系统
智能终端包括手机、平板等一系列嵌入操作系统的设备,同时也是用户使用二维码扫码支付的一类设备。智能终端的操作系统一般包含安卓、windows phone 和苹果移动操作系统,操作系统为应用软件APP 提供了运行环境,如硬件软件支持、存储空间等,同时也为应用软件运行的安全提供了保障基础。
(2)支付软件
支付应用软件是支付系统的重要环节之一,主要应用于存储交易信息、账户信息、购物和支付的平台信息,它主要有认证性、隐私性、完整性和机密性等特点。二维码的读取、支付指令以及处理结果都是通过软件完成的,以上二维码的特点能够保证用户的个人信息和支付信息在未授权的情况下不被盗取或泄露,在最大程度上确保了用户支付安全。
(3)网络
网络设备和通道是二维码支付的基础,也是必要条件。
(4)支付接入平台
接入平台是处理用户软件支付请求的软件系统,它主要包括交易系统、商品管理系统和结算系统等。
支付流程是指在智能终端上的二维码的识别、支付平台的访问方式、支付平台的接入、交易的处理以及结果的反馈等一系列操作(图5)[6]。支付平台的接入包括支撑系统、商品管理系统、交易系统、支付系统以及结算系统等操作的处理。支撑平台包括软件硬件、用户的账户处理信息、用户资金管理以及统计分析等处理。商品管理系统包括商品信息、用户信息、交易信息、支付平台的接入、交易的处理、商品的反馈等操作。交易系统包括订单的管理、交易管理、支付接入等操作。结算系统包括支付接入、生成电子凭证、结果处理等操作。
图5 支付流程图
二维码的支付可以分为商品二维码和支付二维码。商品二维码通过二维码的识别直接指向商品管理系统的商品销售,跟支付系统平台没有直接发生关系。支付二维码是通过应用软件直接接入支付平台生成支付指令。它们的区别在于生成支付指令的环节是直接还是间接。
(1)获取数据信息
识读设备可以获取由小程序、资料、密码、地图和名片等数据生成的二维码信息。
(2)网页跳转
可以通过扫描二维码实现网页的跳转浏览。
(3)电商移动支付
通过银行或第三方支付app 扫描商品二维码完成下单和支付。
(4)超市收银
通过CCD 扫描器获取商品信息并通过移动终端支付。
(5)商品防伪溯源
通过扫描二维码追溯从原材料的采购过程、原材料到成品的制作过程以及成品到客户手中的物流信息过程。
(6)名片和广告推送
通过二维码配送名片和广告信息。
(7)医学领域
对药品、检验和人员等信息进行编码可以实现高效管理。
二维码给人们带来便利的同时也带来了安全隐患,它本身是没有安全威胁的,但是不法分子会利用二维码链接病毒造成用户损失。任何新技术的应用都是有利有弊的,这也是互联网发展的一个必经阶段,我们需要做的就是把过程中存在的风险隐患降到最低点。解决安全问题的对策有很多,例如:
(1)建立健全相关法律法规和管理制度
(2)加强用户安全意识和安全教育
(3)采用加密技术。
1)基于公钥基础设施(Public Key Infrastructure)技术基础之上的数字证书能够保证信息传输的机密性、真实性、完整性和不可否认性,能够保证信息的安全传输。原理是通过把需要传输的数字信息进行签名并利用用户的公约对二维码进行加密,所以扫描二维码时需要利用用户的私钥解密否则不能使用二维码[1]。
2)Diffie-Hellman 密钥交换技术解决了实际密码学中非对称密码方案的密钥分配问题,允许通信双方通过不安全的通信信道来传输密钥而不会导致密钥丢失[7]。基本思想是保证二维码来源识别通过后才能继续读取二维码中的信息,有效解决了扫描非法二维码的问题。
3)使用属性加密算法对用户定义的密码及用户的属性进行处理,保证一人一密的同时,满足不同权限用户对不同权限输入信息的获取需求,防止了权限信息的私钥的泄露,从而保证了信息的安全传输[8]。
4)Advanced encryption standard(高级加密标准)是加密和解密使用相同密钥的一种对称加密算法。AES 算法是一种简单、高效和可靠的加密算法,它的数据块和密钥长度相同,且有16 字节、24字节和32 字节三种,主要有密钥扩展、轮密钥加、字节替换、行移位、列混淆等加密步骤,同时密钥越长,加密轮数越多,安全性也就越强[9]。使用AES算法先对二维码数据进行加密,然后对密文进行二维码编码,可以保障二维码传输过程不被截获和破译,等需要获取二维码信息时再输入与加密时相同的密钥,从而保证了信息安全。
Rijndael 是AES 中使用的一种基本密码算法,利用Rijndael 加密算法和SHA512 哈希函数数字签名技术混合加密的方法,对Rijndael 第一次加密密钥系统随机分配并对系统随机分配密钥采取二次Rijndael 加密防护方法,然后通过SHA512 对二维码内部信息防篡改校验,达到对二维码信息及其加密密钥的安全保护,在生成二维码之前实现了信息加密,提高了二维码信息的安全性并达到对密钥高效管理和对信息的保护[10]。
5)RSA 是一种能够同时用于加密和数字签名且使用不同的加密密钥和解密密钥的非对称加密算法。RSA 的密钥长度随着保密级别的提高而增长,所以其安全性很高,但在同等数据量下,因其进行的都是大数计算,所以不论在软件还是硬件实现上,加密速率一直是其缺陷[11]。基于优化后的RSA 二维码加密技术不仅安全性高而且加密速率有较大的提高,能够有效保障二维码数据信息存储、传播、识别,是一种快速简单高效的解决方案[12]。
非对称密钥的公钥对外公开,私钥个人保密存储,公钥用于加密会话密钥和验证数字签名,私钥用来解密,RSA 就是非对称加密算法的典型代表。基于非对称加密技术对服务端和移动客户端二维码制作识别过程进行规范化和制度化管理,并且结合虹膜生物特征识别技术对用户进行实名认证,间接实现数字证书与用户物理身份绑定,从而满足二维码安全管理的规范要求[13]。
随着互联网和移动终端的快速发展,二维码已经广泛应用到各行各业,本文在对二维码生成原理和应用安全进行分析研究后发现,二维码的价值绝不仅仅局限于信息存储、信息展示和网页跳转,信息安全始终都是关注的焦点,应着力研究和解决二维码应用中存在的安全问题,从而提高互联网总体安全性能。