一种二维码解码库与配套摄像头绑定的方法及其系统的制作方法_2

文档序号:8226287阅读:来源:国知局
br>[0048]步骤3、对摄像头是否与二维解码库是配套的进行判断;不是,则结束流程,是,则对图像数据进行加密签名,并进入步骤4 ;
[0049]步骤4、对加密签名的图像数据进行校验;校验成功,则对图像数据进行解码,进入步骤5,不成功则返回步骤2 ;
[0050]步骤5、获取解码结果,把结果反馈给客户端应用程序,并继续获取下一张图像数据进行循环操作,直至解码完所有图像数据。
[0051]所述二维解码库和厂商自制的摄像头进行绑定处理,且必须配套使用;客户若更换成自己的摄像头,则无法对图像数据进行正确的解码。
[0052]如果按照明文的格式传递或者是传递固定的信息,那么就很容易被客户跟踪破解,每次都返回正确的信息。所以本申请中步骤3每次返回的信息必须不相同,而且必须加密。这样才能增加破解的难度。步骤3中按照如下步骤生成加密信息。
[0053]所述对图像数据进行加密签名,具体为:对图像数据进行SHA256计算,生成一个256位的HASH值;对所述256位的HASH值做3DES加密;生成一个256位的密文数据;
[0054]所述3DES要进行加密的24字节密钥,按照如下规则生成:
[0055]预先设定一个固定的2048字节随机数据(以这个为基础按一定的规则,推导出一个24字节的密钥);
[0056]把图像数据的256位HASH值的前三个字节的值分别做为偏移,从固定的2048字节数据中拷贝连续的8个字节数据,组成一个24字节数据;
[0057]获取系统开机到加密签名的时间(精度可以到纳秒级),所述时间为一个4字节的整数;
[0058]把4个字节的时间值放在所述24字节数据的后面,总共28字节数据做SHA256运算,生成一个256位HASH数据;
[0059]取所述256位HASH数据的中间24字节作为所述24字节密钥(中间192位);
[0060]把所述4个字节的时间值,插入到所述256位的密文数据的中间,形成一 288位的数据(即4个字节=32位,32位+256位=288位)。
[0061]所述对摄像头是否与二维解码库是配套的进行判断,具体为:CPU通过I2C接口与摄像头进行交互,对摄像头内部的寄存器进行读写操作,通过读取摄像头的ID以及寄存器的一些默认值来判断摄像头是否合法;如果客户更换了摄像头,那么摄像头的ID以及寄存器的一些默认值就会和二维解码库中设定的预期值不同,这样摄像头不是配套的摄像头;所述CPU是直接控制GP1管脚,产生I2C的时序来与摄像头进行交互。这里还需要注意的是不能通过操作系统标准的I2C接口来访问摄像头。因为标准的I2C驱动的源码,用户可见的。用户在这些源码里面添加日志,就可以跟踪到CPU与摄像头之间交互的所有数据,用户就可以修改I2C接口驱动的源码,发送的数据直接截留,然后直接返回期望的数据。这样用户就骗过了摄像头合法性检测,然后更自己的摄像头,无需再向厂商购买相应的配套摄像头。
[0062]所以CPU必须直接控制GP1管脚,产生I2C的时序来与摄像头来交互。这样客户就没办法从软件上来跟踪CPU与摄像头直接交互的数据。只能通过示波器抓取硬件信号线上的信息来跟踪,这样就加大了客户破解的难度。
[0063]所述步骤4中对图像数据的签名进行校验,具体为:获取288位的数据,根据所述24字节密钥的生成规则,从288位的数据中把4字节的时间值提取出来,然后再根据生成规则生成一新密钥,并且执行3DES加密;判断生成的新密文是否和传递进来的256位的密文数据相同;如果相同就进行解码,否则就拒绝解码。
[0064]因此,根据规则定时与摄像头交互,检测摄像头的合法性,如果发现摄像头是不合法的,只要随机返回288位的密文数据就可以。这样校验签名的时候就会失败。从而达到绑定摄像头的目的。
[0065]以上规则有两个因子会影响到最终生成的密文数据,图像数据和当前时间值。所以可以保证每次生产的密文都是变化的,客户跟踪到这个密文也没有意义,只要上面的规则不被客户知道。
[0066]从前面的规则知道,通过判断摄像头内部寄存器的值来判断摄像头是否合法的,因为不同摄像头内部的传感器一般是不一样的,所以摄像头的I2C地址,内部寄存器的值也都不一样。而且为了提高二维码的识别率,厂商自制的摄像头一般都会选择一些特殊的传感器,比如这些传感器只支持黑白不支持彩色,分辨率只有30W像素等等。所以市面上是基本买不到相同传感器的摄像头的。除非客户采购相同的传感器芯片,然后自己自制摄像头。但是自己制作摄像头成本很高,涉及到光学,镜头制作等等方面的东西。所以这无形中增加了客户破解的成本。
[0067]可见虽然本方法没有摄像头里面再添加一颗芯片来得安全,但是在成本,安全性方面找到了一个折中的方法。
[0068]上述以LINUX平台说明,其他平台类似。
[0069]请参阅图2所示,本发明的一种二维码解码库与配套摄像头绑定的系统,所述系统包括连接模块、摄像头驱动模块、安全驱动模块、二维码解码模块以及接口反馈模块;
[0070]所述连接模块,用于将摄像头通过Camera接口和I2C接口与一 CPU相连,所述Camera接口用于传输图像数据,I2C接口用来传输摄像头配置控制命令;
[0071]所述摄像头驱动模块,为CPU通过I2C接口传输摄像头配置控制命令,CPU通过Camera接口接收图像数据;
[0072]所述安全驱动模块,用于对摄像头是否与二维解码库是配套的进行判断;不是,则结束流程,是,则对图像数据进行加密签名,并进行二维码解码模块;
[0073]所述二维码解码模块,用于对加密签名的图像数据进行校验;校验成功,则对图像数据进行解码,并进行接口反馈模块,不成功,则进行摄像头驱动模块;
[0074]所述接口反馈模块,获取解码结果,把结果反馈给客户端应用程序,并继续获取下一张图像数据进行循环操作,直至解码完所有图像数据。该接口反馈模块是直接与客户的应用程序交互的模块。提供相应接口供具体的应用程序调用,同时负责触发以上所有模块的初始化工作。
[0075]其中,所述二维解码库和厂商自制的摄像头进行绑定处理,且必须配套使用;客户若更换成自己的摄像头,则无法对图像数据进行正确的解码。
[0076]所述对图像数据进行加密签名,具体为:对图像数据进行SHA256计算,生成一个256位的HASH值;对所述256位的HASH值做3DES加密;生成一个256位的密文数据;
[0077]所述3DES要进行加密的24字节密钥,按照如下规则生成:
[0078]预先设定一个固定的2048字节随机数据(以这个为基础按一定的规则,推导出一个24字节的密钥);
[0079]把图像数据的256位HASH值的前三个字节的值分别做为偏移,从固定的2048字节数据中拷贝连续的8个字节数据,组成一个24字节数据;
[0080]获取系统开机到加密签名的时间(精度可以到纳秒级),所述时间为一个4字节的整数;
[0081]把4个字节的时间值放在所述24字节数据的后面,总共28字节数据做SHA256运算,生成一个256位HASH数据;
[0082]取所述256位HASH数据的中间24字节作为所述24字节密钥(中间192位);
[0083]把所述4个字节的时间值,插入到所述256位的密文数据的中间,形成一 288位的数据(即4个字节=32位,32位+256位=288位)。
[0084]所述对摄像头是否与二维解码库是配套的进行判断,具体为:CPU通过I2C接口与摄像头进行交互,对摄像头内部的寄存器进行读写操作,通过读取摄像头的ID以及寄存器的一些默认值来判断摄像头是否合法;如果客户更换了摄像头,那么摄像头的ID以及寄存器的一些默认值就会和二维解码库中设定的预期值不同,这样摄像头不是配套的摄像头;所述CPU是直接控制GP1管脚,产生I2C的时序来与摄像头进行交互。这里还需要注意的是不能通过操作系统标准的I2C接口来访问摄像头。因为标准的I2C驱动的源码,用户可见的。用户在这些源码里面添加日志,就可以跟踪到CPU与摄像头之间交互的所有数据,用户就可以修改I2C接口驱动的源码,发送的数据直接截留,然后直接返回期望的数据。这样用户就骗过了摄像头合法性检测,然后更自己的摄像头,无需再向厂商购买相应的配套摄像头。
[0085]所以CPU必须直接控制GP1管脚,产生I2C的时序来与摄像头来交互。这样客户就没办法从软件上来跟踪CPU与摄像头直接交互的数据。只能通过示波器抓取硬件信
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1