水產(chǎn)品追溯碼加密算法設(shè)計(jì)與應(yīng)用

為解決當(dāng)前農(nóng)產(chǎn)品追溯碼安全性不高,難以保證一品一碼等問題,以水產(chǎn)品為研究對(duì)象,提出了一種水產(chǎn)品追溯碼加密算法。在深入分析各種追溯碼編碼方案和AES加密算法的基礎(chǔ)上,對(duì)水產(chǎn)品監(jiān)管碼進(jìn)行編碼、壓縮和十進(jìn)制等長(zhǎng)加密生成水產(chǎn)品追溯碼。

一、AES加密算法

1、AES加密算法原理

AES加密算法是美國(guó)的數(shù)據(jù)加密國(guó)家標(biāo)準(zhǔn),是由比利時(shí)學(xué)者Vincent Rijmen和Joan Daemen設(shè)計(jì)的Rijndael算法,是對(duì)稱加密算法中加密性能和速度等各項(xiàng)性能指標(biāo)最好的加密算法。它的原形是Square算法,設(shè)計(jì)策略采用的是寬軌跡策略,從而可以提高算法抗擊差分密碼分析及線性密碼分析的能力。

AES加密算法的數(shù)據(jù)分組長(zhǎng)度定為128位,密鑰長(zhǎng)度可為128、1 92或256位,并由密鑰長(zhǎng)度決定加密輪變換次數(shù)ⅣN,為10、12或14。加密算法中的128比特的分組信息被分成16個(gè)字節(jié),按順序排列成一個(gè)4x4的矩陣,稱為狀態(tài)(state)。AES的所有變換都是基于狀態(tài)的變換,數(shù)據(jù)處理最小單元是字節(jié)。

AES加密算法對(duì)數(shù)據(jù)的加密是通過把輸入的明文和密鑰由輪函數(shù)經(jīng)Nr+1輪迭代來實(shí)現(xiàn)的,初始輪和結(jié)尾輪與中間的Nr-1輪不同。初始輪只對(duì)明文和密鑰進(jìn)行異或操作;中間的Nr-1輪依次進(jìn)行字節(jié)代換、行移位變換、列混合變換和輪密鑰加;結(jié)尾輪與中間輪相比去掉了列}昆合變換,以使加密和解密算法在結(jié)構(gòu)上更加接近。

2、加密算法加密與解密

AES加密算法核心思想是經(jīng)過多輪置換迭代操作,使數(shù)字信息盡可能地散列和混淆。為方便起見,用C代表輪密鑰控制,B代表S盒置換,S代表行移位變換,M代表列混合變換,加密過程如圖1所示。

水產(chǎn)品追溯碼加密算法設(shè)計(jì)與應(yīng)用

由于該加密運(yùn)算中采用的每一種運(yùn)算都是可逆的,所以對(duì)于上面的加密過程只需要對(duì)每一種運(yùn)算求逆即可解密。解密過程如圖2所示。

水產(chǎn)品追溯碼加密算法設(shè)計(jì)與應(yīng)用

圖2中,C-1為輪密鑰控制的逆運(yùn)算,S-1為行移位逆運(yùn)算,B-1為S盒逆置換,M-1為列混合逆運(yùn)算。

然而計(jì)算機(jī)適宜處理十六進(jìn)制數(shù)(即二進(jìn)制),AES加密算法是針對(duì)十六進(jìn)制數(shù)進(jìn)行加密。而目前研究的農(nóng)產(chǎn)品追溯碼編碼大部分都是由0—9之間的十進(jìn)制數(shù)字構(gòu)成,而且要求追溯碼位數(shù)和加密后密文位數(shù)相對(duì)應(yīng),即沒有密文擴(kuò)展,基于十六進(jìn)制的AES加密算法就不能滿足上述要求。

二、水產(chǎn)品追溯碼加密方案

1、基于監(jiān)管模式的水產(chǎn)品追溯編碼

水產(chǎn)品監(jiān)管追溯編碼從政府監(jiān)管的角度出發(fā),以批次作為追溯單元,以同一養(yǎng)殖主體、同一池塘內(nèi)、同一時(shí)間出池、同一品種的產(chǎn)品作為編碼單元。水產(chǎn)養(yǎng)殖品追溯監(jiān)管碼由行政區(qū)劃代碼、企業(yè)順序號(hào)、產(chǎn)品分類代碼、源實(shí)體參考代碼、生產(chǎn)日期代碼和校驗(yàn)碼構(gòu)成,具體結(jié)構(gòu)如表1所示。

水產(chǎn)品追溯碼加密算法設(shè)計(jì)與應(yīng)用

廠商識(shí)別代碼10位數(shù)字:行政區(qū)劃代碼可具體到縣級(jí),具體可參考GB/T2260-2007的編碼,企業(yè)順序號(hào)由1位企業(yè)類型識(shí)別代碼和3位企業(yè)順序流水號(hào)組成。產(chǎn)品批號(hào)代碼16位數(shù)字,由6位產(chǎn)品分類代碼、4位源實(shí)體參考代碼和6位生產(chǎn)日期代碼組成。產(chǎn)品分類代碼按照層次碼的設(shè)計(jì),詳見SC3001-1989水產(chǎn)品名稱分類。

2、水產(chǎn)品追溯碼加密算法

采用上述按水產(chǎn)品、按轄區(qū)生成的水產(chǎn)品追溯碼編碼,對(duì)于消費(fèi)者來說,存在著易于被仿制、安全性低的問題,以及長(zhǎng)度過長(zhǎng),不利于產(chǎn)品追溯等缺點(diǎn)。同時(shí)為了防止追溯碼被私自修改,在設(shè)計(jì)追溯碼時(shí)還要采取專用加密算法對(duì)水產(chǎn)品追溯碼進(jìn)行壓縮、加密。

(1)水產(chǎn)品追溯碼壓縮

根據(jù)上述編碼規(guī)則,采用分組的方法對(duì)每一碼段進(jìn)行重新編碼壓縮。編碼壓縮的基本思想是采用窮舉法對(duì)每一碼段按照最大取值范圍進(jìn)行重新編碼設(shè)計(jì)。其中,校驗(yàn)碼由廠商識(shí)別代碼、產(chǎn)品批號(hào)代碼計(jì)算得到,在壓縮時(shí)可忽略;縣級(jí)行政區(qū)劃數(shù)量有2 800個(gè)左右,因此,采用4個(gè)十進(jìn)制位表示;企業(yè)順序號(hào)保持不變;水產(chǎn)品分類代碼采用3個(gè)十進(jìn)制位表示1000個(gè)主流養(yǎng)殖品種完全可滿足水產(chǎn)品應(yīng)用需求;源實(shí)體代碼即企業(yè)池塘編號(hào)保持不變;根據(jù)《中華人民共和國(guó)農(nóng)產(chǎn)品質(zhì)量安全法》規(guī)定,農(nóng)產(chǎn)品記錄保存時(shí)間一般為2年,這里生產(chǎn)日期代碼時(shí)間跨度按100年計(jì)算,足以滿足對(duì)農(nóng)產(chǎn)品質(zhì)量追溯的要求,以2000年1月1日為基準(zhǔn),采用5位十進(jìn)制數(shù)即可表示當(dāng)前生產(chǎn)日期與基準(zhǔn)日期相差的天數(shù)。具體編碼轉(zhuǎn)換如圖3所示。

水產(chǎn)品追溯碼加密算法設(shè)計(jì)與應(yīng)用

(2)追溯碼加密算法過程

經(jīng)壓縮的水產(chǎn)品追溯編碼采用分組壓縮方法,實(shí)現(xiàn)了編碼長(zhǎng)度的減少,但其安全性和防偽性能較差。需要對(duì)其進(jìn)行加密,而且加密前、后需要保持長(zhǎng)度不變。通過對(duì)AES算法分析可知,AES加密算法無法滿足對(duì)十進(jìn)制數(shù)據(jù)的加密,在參考劉連浩等設(shè)計(jì)方法基礎(chǔ)上,對(duì)AES算法進(jìn)行改進(jìn),重新設(shè)計(jì)AES加密算法中的4種加密運(yùn)算,以適應(yīng)十進(jìn)制數(shù)直接加密的要求。同時(shí)為增強(qiáng)加密強(qiáng)度,保證生成追溯碼的唯一性,使同一明文生成無規(guī)律的密文,實(shí)現(xiàn)一次一密防偽效果,采用動(dòng)態(tài)密鑰對(duì)水產(chǎn)品追溯碼進(jìn)行混沌隨機(jī)加密。具體的加密、解密流程,如圖4、5所示。

水產(chǎn)品追溯碼加密算法設(shè)計(jì)與應(yīng)用

 

水產(chǎn)品追溯碼加密算法設(shè)計(jì)與應(yīng)用

該加密算法對(duì)數(shù)據(jù)進(jìn)行分組迭代操作,分組長(zhǎng)度和密鑰長(zhǎng)度可獨(dú)立指定,密鑰輪數(shù)可任意,輪數(shù)越多,加密程度越高,運(yùn)算時(shí)間越長(zhǎng)。本方案采用1 2輪加密策略。每一輪變換由3層組成:

(1)線性混合層:

包含追溯碼狀態(tài)位行移位和列}昆合,目的是為了確保多輪迭代運(yùn)算的高度擴(kuò)散。

(2)非線性層:

由一個(gè)1 0進(jìn)制S盒組成,起到追溯碼數(shù)字位置換混淆的作用。

(3)輪密鑰控制層:

根據(jù)不同的條件,對(duì)輪密鑰和追溯碼狀態(tài)各個(gè)對(duì)應(yīng)的數(shù)字進(jìn)行取模運(yùn)算,實(shí)現(xiàn)密鑰和追溯碼字的混合。

加密算法主要包括以下幾個(gè)關(guān)鍵步驟:

(1)追溯碼動(dòng)態(tài)密鑰生成

動(dòng)態(tài)密鑰是根據(jù)初始密鑰、編碼生成次數(shù)、企業(yè)順序號(hào)生成32位十進(jìn)制數(shù)密鑰口生成過程如圖6所示。其中Sbox運(yùn)算為S盒置換操作。

水產(chǎn)品追溯碼加密算法設(shè)計(jì)與應(yīng)用

(2)追溯碼數(shù)字位置換盒

追溯碼十進(jìn)制數(shù)字位置換盒,如圖7所示。反置換盒如圖8所示。每一輪的數(shù)字位置換中,能夠達(dá)到一半的十進(jìn)制位發(fā)生變化。

水產(chǎn)品追溯碼加密算法設(shè)計(jì)與應(yīng)用

 

水產(chǎn)品追溯碼加密算法設(shè)計(jì)與應(yīng)用

(3)追溯碼狀態(tài)位行移位

追溯碼狀態(tài)位是指需要加密的追溯碼每位數(shù)字,比如20位追溯碼:26347411750000131203,其狀態(tài)表如圖9所示。

水產(chǎn)品追溯碼加密算法設(shè)計(jì)與應(yīng)用

狀態(tài)位行移位規(guī)則:第1行不移動(dòng),第2行循環(huán)左移1位,第3行循環(huán)左移2位,第4行循環(huán)左移3位口圖9行移位后的結(jié)果如圖10所示。

水產(chǎn)品追溯碼加密算法設(shè)計(jì)與應(yīng)用

(4)追溯碼狀態(tài)位列混合

追溯碼狀態(tài)位列混合操作,是用一個(gè)可逆正整數(shù)矩陣左乘追溯碼狀態(tài)位矩陣,然后對(duì)10進(jìn)行取模運(yùn)算,將得到的結(jié)果放回原來的矩陣中。這里的可逆正整數(shù)矩陣采用的是劉連浩等設(shè)計(jì)的矩陣M。

水產(chǎn)品追溯碼加密算法設(shè)計(jì)與應(yīng)用

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

水產(chǎn)品追溯碼加密算法設(shè)計(jì)與應(yīng)用

(5)追溯碼狀態(tài)位與輪密鑰取模運(yùn)算

在AES加密算法中,輪密鑰加利用密鑰與狀態(tài)對(duì)應(yīng)的字節(jié)作異或運(yùn)算。但是對(duì)于十進(jìn)制數(shù)來說異或運(yùn)算沒有可逆性。為了使追溯碼狀態(tài)位與輪密鑰混淆,并且具有可逆性,將AES加密算法中的二進(jìn)制異或改成十進(jìn)制的輪密鑰控制運(yùn)算,根據(jù)每一輪的密鑰不同,分別進(jìn)行4種運(yùn)算中的1種。入口由每一輪加密所有使用的密鑰各位之和對(duì)4取模來確定。

每一輪運(yùn)算步驟簡(jiǎn)述如下:

(1) 32位動(dòng)態(tài)密鑰求和,記為Sum。

(2)入口參數(shù)Enter=Sum mod 4。

(3)根據(jù)步驟(2)的結(jié)果,進(jìn)入不同的狀態(tài)位和輪密鑰加減運(yùn)算。

(3)追溯碼加密算法實(shí)現(xiàn)

在上述的加、解密算法中,動(dòng)態(tài)密鑰是根據(jù)初始密鑰、編碼生成次數(shù)、企業(yè)順序號(hào)生成的32位十進(jìn)制數(shù)密鑰,編碼生成次數(shù)每生成一次加1,利用密鑰對(duì)生成次數(shù)敏感的特點(diǎn),產(chǎn)生新的動(dòng)態(tài)密鑰和密文,從而實(shí)現(xiàn)以編碼生成次數(shù)為混沌參數(shù)的混沌加密。使用C#語言,在Visual Studi0 2005開發(fā)環(huán)境下編程實(shí)現(xiàn),初始密鑰為長(zhǎng)度小于32位的0—9數(shù)字組成,由用戶自由設(shè)置,以廣東省茂名市某企業(yè)為例,27位的追溯碼為44090210010101220001101 1200。壓縮、加解密結(jié)果如圖11、12所示。

水產(chǎn)品追溯碼加密算法設(shè)計(jì)與應(yīng)用

從圖11可以看出,在初始密鑰和追溯編碼一樣的情況下,隨著加密次數(shù)的不同,密鑰也隨著變化,得到的追溯碼也不同,實(shí)現(xiàn)了一次一密和追溯碼的唯一性。從圖12可以看出,實(shí)現(xiàn)了在知道初始密鑰的情況下,對(duì)壓縮后的加密追溯碼成功解密,得到追溯編碼明文。

三、應(yīng)用示例

將本文的加密、解密算法移植到自主開發(fā)的混合條碼水產(chǎn)品追溯監(jiān)管標(biāo)簽打印和追溯系統(tǒng)中,實(shí)現(xiàn)了加密標(biāo)簽的打印和追溯碼解密追溯。以系統(tǒng)在廣東省水產(chǎn)品追溯中的應(yīng)用為例,廣東省茂名市廣東綠卡實(shí)業(yè)有限公司2010年11月20日生產(chǎn)的某一批次綠卡牌中華鱉的信息為:企業(yè)的行政區(qū)劃代碼:440902;企業(yè)類型:養(yǎng)殖企業(yè)(1);企業(yè)順序流水號(hào):001;水產(chǎn)品大類:鮮、活品類;水產(chǎn)品種類:淡水魚;水產(chǎn)品名稱:綠卡牌中華鱉;出池日期:2010年11月20日。

根據(jù)水產(chǎn)養(yǎng)殖品追溯監(jiān)管碼編碼規(guī)則,計(jì)算得到6位行政區(qū)劃代碼為440902;4位企業(yè)順序號(hào)為1OO1;6位產(chǎn)品分類代碼為0101 22;4位源實(shí)體參考代碼,即水產(chǎn)養(yǎng)殖企業(yè)產(chǎn)品出池的池塘編號(hào),由企業(yè)內(nèi)部編碼,這里假如池塘編號(hào)位O001;6位生成日期代碼為101120;校驗(yàn)碼為0,綜合以上信息,該企業(yè)該批次產(chǎn)品的27位追溯編碼為:440902100101012200011011200。當(dāng)出池日期為2010年11月21日時(shí),該批次產(chǎn)品的27位追溯碼為:440902100101012200011011211。

廣東綠卡實(shí)業(yè)有限公司養(yǎng)殖生產(chǎn)管理系統(tǒng)打印出具有一維條碼和二維條碼組成的混合標(biāo)簽。其中,一維條碼采用EAN- 128碼制,由水產(chǎn)品追溯監(jiān)管碼經(jīng)本文的加密算法生成,如圖13所示。例如2010年11月20日出池的中華鱉的27位追溯監(jiān)管碼為:440902100101012200011011200,經(jīng)壓縮后為:22231001221000103976,加密后為:7788842734712323156202010年11月21日出池的中華鱉的27位追溯監(jiān)管碼為:440902100101012200011011211,經(jīng)壓縮后為:22231001221000103977,加密后為:09404382050494370518。

水產(chǎn)品追溯碼加密算法設(shè)計(jì)與應(yīng)用

經(jīng)過壓縮后,在保證實(shí)用和擴(kuò)展的條件下縮短了碼長(zhǎng),滿足了編碼導(dǎo)則的要求之一;每個(gè)產(chǎn)品上的標(biāo)簽,具有不同的追溯碼,滿足了編碼導(dǎo)則的唯一性要求,杜絕了仿制標(biāo)簽的現(xiàn)象。從追溯碼數(shù)字表面看不出它所包含的任何含義,而且即使在得知追溯碼的編碼規(guī)則后,也無法獲取里面的信息,安全性得到了很大的提高。

圖14a為廣東綠卡實(shí)業(yè)有限公司生產(chǎn)管理軟件打印出來加載于中華鱉包裝上的追溯標(biāo)簽;圖14b為廣東省省級(jí)水產(chǎn)品監(jiān)管平臺(tái),將追溯標(biāo)簽上的追溯碼輸入該系統(tǒng),就可以進(jìn)行產(chǎn)品追溯;圖14c為經(jīng)過對(duì)追溯碼解密后,消費(fèi)者進(jìn)行網(wǎng)絡(luò)追溯的結(jié)果,消費(fèi)者可以追溯出責(zé)任主體信息、養(yǎng)殖過程信息等。

水產(chǎn)品追溯碼加密算法設(shè)計(jì)與應(yīng)用

四、結(jié)論

(1)針對(duì)目前農(nóng)產(chǎn)品追溯編碼設(shè)計(jì)以及農(nóng)業(yè)部追溯碼編碼導(dǎo)則存在的不足和問題,以水產(chǎn)品為研究對(duì)象,詳述了水產(chǎn)品追溯監(jiān)管碼的設(shè)計(jì)與壓縮方法。

(2)以AES加密算法為基礎(chǔ),對(duì)壓縮后的追溯編碼進(jìn)行了加、解密算法設(shè)計(jì)與實(shí)現(xiàn),達(dá)到了一次一密的防偽效果。

(3)加密生成的追溯碼具有一次一碼的特點(diǎn),即每加密一次,生成的追溯碼是不同的,做到了追溯碼的唯一性,杜絕了仿制同一標(biāo)簽的現(xiàn)象。一方面,當(dāng)市場(chǎng)上出現(xiàn)大量同一標(biāo)簽時(shí),可以斷定是假冒偽劣產(chǎn)品;另一方面,追溯結(jié)果會(huì)顯示追溯碼被追溯過的次數(shù)和時(shí)間,顧客若發(fā)現(xiàn)追溯碼已被追溯過,就有可能是假貨的嫌疑,可以進(jìn)行舉報(bào)。

(4)給出了加密算法在水產(chǎn)品追溯系統(tǒng)中的應(yīng)用,驗(yàn)證了該算法的可行性與安全性。加密算法的應(yīng)用增強(qiáng)了追溯系統(tǒng)的安全性,為農(nóng)產(chǎn)品的可靠追溯提供了保障。

(5)本文加密算法的實(shí)現(xiàn)和應(yīng)用都是在基于Intel處理器和微軟操作系統(tǒng)的PC機(jī)上完成的。隨著嵌入式系統(tǒng)的發(fā)展,利用手持等便攜式設(shè)備進(jìn)行水產(chǎn)品追溯監(jiān)管也有廣泛的應(yīng)用需要,因此在下一步的工作中,將對(duì)水產(chǎn)品追溯碼加密算法在嵌入式手持設(shè)備上的移植進(jìn)行研究。

小知識(shí)之S-box

S-box, 即“substitution box”, 是密碼學(xué)領(lǐng)域的一個(gè)基本組件,其功能是實(shí)現(xiàn)數(shù)據(jù)的非線性置換。
S-box主要應(yīng)用于對(duì)稱加密算法中,如DES (Data Encryption Standard)、AES (Advanced Encryption Standard)。