为解决当前农产品追溯码安全性不高,难以保证一品一码等问题,以水产品为研究对象,提出了一种水产品追溯码加密算法。在深入分析各种追溯码编码方案和AES加密算法的基础上,对水产品监管码进行编码、压缩和十进制等长加密生成水产品追溯码。

一、AES加密算法

1、AES加密算法原理

AES加密算法是美国的数据加密国家标准,是由比利时学者Vincent Rijmen和Joan Daemen设计的Rijndael算法,是对称加密算法中加密性能和速度等各项性能指标最好的加密算法。它的原形是Square算法,设计策略采用的是宽轨迹策略,从而可以提高算法抗击差分密码分析及线性密码分析的能力。

AES加密算法的数据分组长度定为128位,密钥长度可为128、1 92或256位,并由密钥长度决定加密轮变换次数ⅣN,为10、12或14。加密算法中的128比特的分组信息被分成16个字节,按顺序排列成一个4x4的矩阵,称为状态(state)。AES的所有变换都是基于状态的变换,数据处理最小单元是字节。

AES加密算法对数据的加密是通过把输入的明文和密钥由轮函数经Nr+1轮迭代来实现的,初始轮和结尾轮与中间的Nr-1轮不同。初始轮只对明文和密钥进行异或操作;中间的Nr-1轮依次进行字节代换、行移位变换、列混合变换和轮密钥加;结尾轮与中间轮相比去掉了列}昆合变换,以使加密和解密算法在结构上更加接近。

2、加密算法加密与解密

AES加密算法核心思想是经过多轮置换迭代操作,使数字信息尽可能地散列和混淆。为方便起见,用C代表轮密钥控制,B代表S盒置换,S代表行移位变换,M代表列混合变换,加密过程如图1所示。

水产品追溯码加密算法设计与应用

由于该加密运算中采用的每一种运算都是可逆的,所以对于上面的加密过程只需要对每一种运算求逆即可解密。解密过程如图2所示。

水产品追溯码加密算法设计与应用

图2中,C-1为轮密钥控制的逆运算,S-1为行移位逆运算,B-1为S盒逆置换,M-1为列混合逆运算。

然而计算机适宜处理十六进制数(即二进制),AES加密算法是针对十六进制数进行加密。而目前研究的农产品追溯码编码大部分都是由0—9之间的十进制数字构成,而且要求追溯码位数和加密后密文位数相对应,即没有密文扩展,基于十六进制的AES加密算法就不能满足上述要求。

二、水产品追溯码加密方案

1、基于监管模式的水产品追溯编码

水产品监管追溯编码从政府监管的角度出发,以批次作为追溯单元,以同一养殖主体、同一池塘内、同一时间出池、同一品种的产品作为编码单元。水产养殖品追溯监管码由行政区划代码、企业顺序号、产品分类代码、源实体参考代码、生产日期代码和校验码构成,具体结构如表1所示。

水产品追溯码加密算法设计与应用

厂商识别代码10位数字:行政区划代码可具体到县级,具体可参考GB/T2260-2007的编码,企业顺序号由1位企业类型识别代码和3位企业顺序流水号组成。产品批号代码16位数字,由6位产品分类代码、4位源实体参考代码和6位生产日期代码组成。产品分类代码按照层次码的设计,详见SC3001-1989水产品名称分类。

2、水产品追溯码加密算法

采用上述按水产品、按辖区生成的水产品追溯码编码,对于消费者来说,存在着易于被仿制、安全性低的问题,以及长度过长,不利于产品追溯等缺点。同时为了防止追溯码被私自修改,在设计追溯码时还要采取专用加密算法对水产品追溯码进行压缩、加密。

(1)水产品追溯码压缩

根据上述编码规则,采用分组的方法对每一码段进行重新编码压缩。编码压缩的基本思想是采用穷举法对每一码段按照最大取值范围进行重新编码设计。其中,校验码由厂商识别代码、产品批号代码计算得到,在压缩时可忽略;县级行政区划数量有2 800个左右,因此,采用4个十进制位表示;企业顺序号保持不变;水产品分类代码采用3个十进制位表示1000个主流养殖品种完全可满足水产品应用需求;源实体代码即企业池塘编号保持不变;根据《中华人民共和国农产品质量安全法》规定,农产品记录保存时间一般为2年,这里生产日期代码时间跨度按100年计算,足以满足对农产品质量追溯的要求,以2000年1月1日为基准,采用5位十进制数即可表示当前生产日期与基准日期相差的天数。具体编码转换如图3所示。

水产品追溯码加密算法设计与应用

(2)追溯码加密算法过程

经压缩的水产品追溯编码采用分组压缩方法,实现了编码长度的减少,但其安全性和防伪性能较差。需要对其进行加密,而且加密前、后需要保持长度不变。通过对AES算法分析可知,AES加密算法无法满足对十进制数据的加密,在参考刘连浩等设计方法基础上,对AES算法进行改进,重新设计AES加密算法中的4种加密运算,以适应十进制数直接加密的要求。同时为增强加密强度,保证生成追溯码的唯一性,使同一明文生成无规律的密文,实现一次一密防伪效果,采用动态密钥对水产品追溯码进行混沌随机加密。具体的加密、解密流程,如图4、5所示。

水产品追溯码加密算法设计与应用

 

水产品追溯码加密算法设计与应用

该加密算法对数据进行分组迭代操作,分组长度和密钥长度可独立指定,密钥轮数可任意,轮数越多,加密程度越高,运算时间越长。本方案采用1 2轮加密策略。每一轮变换由3层组成:

(1)线性混合层:

包含追溯码状态位行移位和列}昆合,目的是为了确保多轮迭代运算的高度扩散。

(2)非线性层:

由一个1 0进制S盒组成,起到追溯码数字位置换混淆的作用。

(3)轮密钥控制层:

根据不同的条件,对轮密钥和追溯码状态各个对应的数字进行取模运算,实现密钥和追溯码字的混合。

加密算法主要包括以下几个关键步骤:

(1)追溯码动态密钥生成

动态密钥是根据初始密钥、编码生成次数、企业顺序号生成32位十进制数密钥口生成过程如图6所示。其中Sbox运算为S盒置换操作。

水产品追溯码加密算法设计与应用

(2)追溯码数字位置换盒

追溯码十进制数字位置换盒,如图7所示。反置换盒如图8所示。每一轮的数字位置换中,能够达到一半的十进制位发生变化。

水产品追溯码加密算法设计与应用

 

水产品追溯码加密算法设计与应用

(3)追溯码状态位行移位

追溯码状态位是指需要加密的追溯码每位数字,比如20位追溯码:26347411750000131203,其状态表如图9所示。

水产品追溯码加密算法设计与应用

状态位行移位规则:第1行不移动,第2行循环左移1位,第3行循环左移2位,第4行循环左移3位口图9行移位后的结果如图10所示。

水产品追溯码加密算法设计与应用

(4)追溯码状态位列混合

追溯码状态位列混合操作,是用一个可逆正整数矩阵左乘追溯码状态位矩阵,然后对10进行取模运算,将得到的结果放回原来的矩阵中。这里的可逆正整数矩阵采用的是刘连浩等设计的矩阵M。

水产品追溯码加密算法设计与应用

式(1)为列混合操作的矩阵表示,式(2)为列混合逆操作矩阵表示。

水产品追溯码加密算法设计与应用

(5)追溯码状态位与轮密钥取模运算

在AES加密算法中,轮密钥加利用密钥与状态对应的字节作异或运算。但是对于十进制数来说异或运算没有可逆性。为了使追溯码状态位与轮密钥混淆,并且具有可逆性,将AES加密算法中的二进制异或改成十进制的轮密钥控制运算,根据每一轮的密钥不同,分别进行4种运算中的1种。入口由每一轮加密所有使用的密钥各位之和对4取模来确定。

每一轮运算步骤简述如下:

(1) 32位动态密钥求和,记为Sum。

(2)入口参数Enter=Sum mod 4。

(3)根据步骤(2)的结果,进入不同的状态位和轮密钥加减运算。

(3)追溯码加密算法实现

在上述的加、解密算法中,动态密钥是根据初始密钥、编码生成次数、企业顺序号生成的32位十进制数密钥,编码生成次数每生成一次加1,利用密钥对生成次数敏感的特点,产生新的动态密钥和密文,从而实现以编码生成次数为混沌参数的混沌加密。使用C#语言,在Visual Studi0 2005开发环境下编程实现,初始密钥为长度小于32位的0—9数字组成,由用户自由设置,以广东省茂名市某企业为例,27位的追溯码为44090210010101220001101 1200。压缩、加解密结果如图11、12所示。

水产品追溯码加密算法设计与应用

从图11可以看出,在初始密钥和追溯编码一样的情况下,随着加密次数的不同,密钥也随着变化,得到的追溯码也不同,实现了一次一密和追溯码的唯一性。从图12可以看出,实现了在知道初始密钥的情况下,对压缩后的加密追溯码成功解密,得到追溯编码明文。

三、应用示例

将本文的加密、解密算法移植到自主开发的混合条码水产品追溯监管标签打印和追溯系统中,实现了加密标签的打印和追溯码解密追溯。以系统在广东省水产品追溯中的应用为例,广东省茂名市广东绿卡实业有限公司2010年11月20日生产的某一批次绿卡牌中华鳖的信息为:企业的行政区划代码:440902;企业类型:养殖企业(1);企业顺序流水号:001;水产品大类:鲜、活品类;水产品种类:淡水鱼;水产品名称:绿卡牌中华鳖;出池日期:2010年11月20日。

根据水产养殖品追溯监管码编码规则,计算得到6位行政区划代码为440902;4位企业顺序号为1OO1;6位产品分类代码为0101 22;4位源实体参考代码,即水产养殖企业产品出池的池塘编号,由企业内部编码,这里假如池塘编号位O001;6位生成日期代码为101120;校验码为0,综合以上信息,该企业该批次产品的27位追溯编码为:440902100101012200011011200。当出池日期为2010年11月21日时,该批次产品的27位追溯码为:440902100101012200011011211。

广东绿卡实业有限公司养殖生产管理系统打印出具有一维条码和二维条码组成的混合标签。其中,一维条码采用EAN- 128码制,由水产品追溯监管码经本文的加密算法生成,如图13所示。例如2010年11月20日出池的中华鳖的27位追溯监管码为:440902100101012200011011200,经压缩后为:22231001221000103976,加密后为:7788842734712323156202010年11月21日出池的中华鳖的27位追溯监管码为:440902100101012200011011211,经压缩后为:22231001221000103977,加密后为:09404382050494370518。

水产品追溯码加密算法设计与应用

经过压缩后,在保证实用和扩展的条件下缩短了码长,满足了编码导则的要求之一;每个产品上的标签,具有不同的追溯码,满足了编码导则的唯一性要求,杜绝了仿制标签的现象。从追溯码数字表面看不出它所包含的任何含义,而且即使在得知追溯码的编码规则后,也无法获取里面的信息,安全性得到了很大的提高。

图14a为广东绿卡实业有限公司生产管理软件打印出来加载于中华鳖包装上的追溯标签;图14b为广东省省级水产品监管平台,将追溯标签上的追溯码输入该系统,就可以进行产品追溯;图14c为经过对追溯码解密后,消费者进行网络追溯的结果,消费者可以追溯出责任主体信息、养殖过程信息等。

水产品追溯码加密算法设计与应用

四、结论

(1)针对目前农产品追溯编码设计以及农业部追溯码编码导则存在的不足和问题,以水产品为研究对象,详述了水产品追溯监管码的设计与压缩方法。

(2)以AES加密算法为基础,对压缩后的追溯编码进行了加、解密算法设计与实现,达到了一次一密的防伪效果。

(3)加密生成的追溯码具有一次一码的特点,即每加密一次,生成的追溯码是不同的,做到了追溯码的唯一性,杜绝了仿制同一标签的现象。一方面,当市场上出现大量同一标签时,可以断定是假冒伪劣产品;另一方面,追溯结果会显示追溯码被追溯过的次数和时间,顾客若发现追溯码已被追溯过,就有可能是假货的嫌疑,可以进行举报。

(4)给出了加密算法在水产品追溯系统中的应用,验证了该算法的可行性与安全性。加密算法的应用增强了追溯系统的安全性,为农产品的可靠追溯提供了保障。

(5)本文加密算法的实现和应用都是在基于Intel处理器和微软操作系统的PC机上完成的。随着嵌入式系统的发展,利用手持等便携式设备进行水产品追溯监管也有广泛的应用需要,因此在下一步的工作中,将对水产品追溯码加密算法在嵌入式手持设备上的移植进行研究。

小知识之S-box

S-box, 即“substitution box”, 是密码学领域的一个基本组件,其功能是实现数据的非线性置换。
S-box主要应用于对称加密算法中,如DES (Data Encryption Standard)、AES (Advanced Encryption Standard)。