李 帥,宋海燕
(山西農業大學農業工程學院,山西 晉中 030800)
二維碼技術是農產品溯源系統中最為關鍵的技術,二維碼技術的不斷進步可以讓消費者更加放心地選購農產品,降低人們對農產品質量的擔憂,并且還能讓農戶享受到技術進步帶來的便利。二維碼設計之初是作為信息傳遞、識別、存儲的載體,隨著市場經濟的發展,二維碼己應用于人們生活的方方面面,從大到商場,小到一個“蒼蠅小館”都可以見到各種二維碼,從二維碼名片到二維碼支付都在證明著一件事情,二維碼己成為信息時代發展應用最廣泛的技術之一[1]。
很久之前,二維碼的一些基本原理就已經被提出,但真正進入我們的生活之中還是近幾年的事,因此對于二維碼的應用與管制還并不完善,存在許多漏洞[2]。在日常中為了節約成本和方便使用,人們大多數會選擇把二維碼打印出來使用,使得二維碼在使用過程中被污染、損壞,因此需要二維碼具有一定的糾錯能力,來保證二維碼中存儲的信息還能被正常讀取,減少一定的經濟損失[3]。這部分也是二維碼的核心部分,即Reed-Solomon編碼。不僅如此,二維碼作為移動互聯網常用的信息載體,在廣泛使用的同時也帶來了巨大的安全隱患,主要表現在其存儲的內容不是直接可見的,為不安全網站的傳播提供了更多的可能,因此在享受著二維碼帶來的便利同時,也需要考慮其潛在的安全隱患[4]。
在國外,由于食品安全法問題在歐洲地區頻發,因此國外的學者通常在抵御二維碼被污染上做了許多研究。有學者提出了一種新型二維碼Holographic Barcode碼(HB碼)。HB碼在受到外界作用發生損壞的時候,不會像普通的條碼一樣無法識別,它可以通過自身的修復能力,正確的識別出存儲的信息[5]。相對于國外,我國的溯源起步較晚,因此我國的溯源研究相對滯后于發達國家,但我國仍然取得了不小的成就。有學者結合SHA-256算法、加密技術和二維碼技術,設計開發了一套具有三重身份認證信息的證件認證系統,此系統比傳統的認證系統更加可靠穩定[6]。目前,對于農產品及食品的需求和關注也正從數量向質量轉變,設計一套完整的農產品溯源系統對于整個農業行業來說都是意義重大的。
在二維碼的溯源系統中,加密技術主要針對監管部門,有了監管部門的監督,生成的二維碼也會更加安全可靠,而糾錯技術的應用則讓二維碼對錯誤的信息有檢測和恢復的能力,增強數據的可靠性,本研究主要是實現溯源二維碼的糾錯和加密功能。
二維碼以黑白圖像形式展現信息,具有信息量大、識別率高等優點,已得到廣泛應用。在產品防偽、溯源等應用領域,不同于LOGO圖像加入,把加密技術應用到二維碼中可以防止有人篡改二維碼的信息,隨意修改農產品的信息[7]。常見的加密技術有對稱加密、非對稱加密和哈希加密算法,本研究選用破解難度較高的哈希加密算法[8]。
哈希加密算法也叫摘要算法或者散列算法,該算法可以把任意長度或類型的數據變成一串不可逆且長度固定的數字編碼序列。而且該編碼序列只有在原始文本相同的情況下,才能得到相同的結果,重復的情況很少,可以忽略。哈希加密算法主要比較原始數據是否發生了變化,因為只要數據源發生變化,得到的摘要信息必然不同,通常用于簽名校驗[9]。哈希加密算法的特點如下。
(1)輸入的信息可以是任意長度、任意類型,但經過計算后得到的都是固定長度的消息摘要數字。
(2)信息摘要并非真正意義上的隨機,因為對于同一個消息,使用同一種算法,得到的結果必然相同。
(3)消息摘要函數是一種單方向函數,即只能對信息進行正向摘要,而不能從摘要中獲取到信息,甚至不可能找到與原信息相關的任何信息。
常見的哈希加密算法有SHA-1、MD5、MAC等,其中SHA-1(Secure Hash Algorithm-1,中文名為安全散列算法1)是一種常見散列算法,常用于數字簽名,其已成為公認的最安全的散列算法之一,其安全性在于SHA-1算法產生散列值的操作過程具有較強的單向性。因此本研究選擇使用SHA-1加密技術。相較于MD5算法,SHA-1算法修改了MD5中的分組處理函數,分組字節序等部分,該算法安全性高,運行效率較高,目前互聯網環境中應用十分廣泛[10]。SHA-1加密技術的基本思想是將一段明文以一種不可逆的方式將它轉換成一段密文。
糾錯技術主要是針對日常使用時被污染或者被損壞的二維碼,而這部分也是二維碼的核心部分Reed-Solomon碼,Reed-Solomon碼(RS碼)是BCH碼(循環糾錯碼)的一個重要子類,是一種極大最小距離可分碼(MDS碼),具有較強的糾錯能力,特別是在較短和中等碼長下,其性能幾乎接近于理論值[11]。在二維碼中,黑白相間的正方形格子中儲存著成百上千的信息,黑色的格子表示1,白色的格子表示0,黑白格子的不同排列組合就構成了數字、字母等,如4321對應的二進制數據是01101100000001,把0和1換成白色和黑色的格子就是不完全的二維碼了。這些信息可能會因為二維碼的損壞而發生變化,但由于Reed-Solomon的存在,它可以實現把一定數量的錯誤信息自動還原成原來正確的數據。還是4321這串數字,任意修改其中兩個數據,都可以找到被修改數據的位置和修改數據的值。而想要還原一開始輸入的原本數據,首先必須讓機器識別出這串數字有誤。
使用除法可以判斷這串數字是否有誤,如果計算后得到的余數等于0,證明這串數字是正確的,如果不為零,就是錯誤的;但只有一個輸入值m是不夠的,當輸入值m不是因為損壞而改變的時候,得到的余數同樣不為0,還需要有一個糾錯碼p,用來保證余數能得到正確的結果,把輸入值m和糾錯碼p組合起來,如43210000,前4位是輸入值,后4位是糾錯碼。然而光有這些準備還是不夠,仍無法通過除法找到發生錯誤的位置和錯誤的大小,所以需要使用伽羅瓦域來改變計算規則,以GF(23)域為例,這個域內只有0、1、2、3、4、5、6、7這8個數字,而原始的輸入值為43210000,所以需要將輸入值用多項式來表示,即m(x)=4x7+3x6+2x5+1x4+0x3+0x2+0x1+0x0,同樣的固定值也需要變成多項式的形式,即g(x)=x4+4x3+7x2+7x1+5x0,然后用m(x)除以g(x),得到多項式h(x)=4x3+5x2+x1+2x0,余數p(x)=0x3+5x2+0x1+1x0。整個過程用表達式的形式描述為
(1)
兩邊同時乘以g(x),得到的結果是
m(x)=g(x)h(x)+p(x)
(2)
將p(x)移到左邊,得到的結果是
m(x)-p(x)=g(x)h(x)
(3)
又由于在伽羅瓦域中,加減后得到的結果相同,因此上面的式子還可以寫成
m(x)+p(x)=g(x)h(x)
(4)
由此可以看出,p(x)是計算得到的糾錯碼。此時,把輸入值m(x)和糾錯碼g(x)合并在一起,得到多項式M(x)
M(x)=g(x)h(x)
(5)
將計算后得到的糾錯碼帶入到多項式中,得到M(x)=4x7+3x6+2x5+1x4+0x3+5x2+0x1+1x0。現在,修改輸入值中的任意兩位數,4變成6,2變成5,此時M(x)=6x7+3x6+5x5+1x4+0x3+5x2+0x1+1x0,用M(x)除以g(x),得到多項式h(x)=6x3+6x2+4x1+7x0,余數為7x3+4x2+1x1+7x0,余數不為零,所以可以判斷輸入值已經被修改過了,此時只需要計算出錯誤的位置和錯誤大小就可以實現糾錯。接下來看g(x),通過計算可以知道g(x)在x等于20、21、22、23這4種情況下為零,而因為M(x)=g(x)h(x),當g(x)等于0的時候,M(x)也會等于0,將g(x)在等于0的4個值帶入到M(x)中M(20)=5,M(21)=1,M(22)=0,M(23)=7,得到4個式子的結果中有3個不等于0,這是因為有兩個位置上的輸入值有錯,用出錯的大小y乘以2n后相加,就是這4個方程組的結果,所以將上面得到的4個結果代入到y12n1+y22n2中解方程,可以得到4個方程組:
(6)
解這4個方程組,得到e1=1,e2=3;y1=2,y2=3。而e1和e2是出錯的位置,y1和y2是出錯的大小。修改后的輸入值是6351,在對應的位置上減去計算所得的出錯大小,就可以得到正確的輸入值4321了。雖然二維碼具有很強的糾錯能力,但其糾錯能力也是有極限的,如今,二維碼擁有4類糾錯等級,具體為H級、Q級、M級和L級,而且可以恢復數字碼分別是30%、25%、15%和7%[12]。相信在未來科研人員的不斷努力下,二維碼的糾錯能力會越來越強。
本系統采用的二維碼加密過程主要是首先將農產品的產品編號、生產日期編號、產品種類編號、生產地編號整合到一起后,用SHA-1加密技術對其進行第1次加密處理,生成一個固定長度的數字編碼。但僅僅一次SHA-1加密還是會存在被暴力破解的風險,所以還需要進行加鹽處理,加鹽處理是用一段自己規定的特定字符串和需要加密的內容融合到一起,再進行一次加密處理,達到讓數據更加安全的目的。接下來把第1次的加密結果進行加鹽處理,生成一段固定長度的數字編碼,最后再在加密后生成的數字編碼上再次加鹽和進行SHA-1加密處理,經過兩次加密后,數據也就會更加安全,同時由于SHA-1算法只會在加密的內容相同的情況下得出相同的加密結果,實現了一個農產品可以對應一個二維碼。主要代碼如圖1所示。

圖1 SHA-1加密代碼Fig.1 SHA-1 encryption code
在溯源系統中加密技術主要應用在監管部門。監管部門在登錄本系統后可以對農產品進行抽樣檢查,根據農產品的產品批號來選擇抽取哪些農產品,還能對農產品的品質進行認證,只有質量合格過關的農產品,才會被貼上二維碼進行銷售。操作如圖2所示。
糾錯部分主要是用RS算法(Reed-Solomon算法),當溯源二維碼被損壞或者污染后,首先經過除法識別出二維碼已經被污染,將發生錯誤的信息和糾錯碼組合在一起變成多項式的形式,在伽羅瓦域的計算規則下,除以同樣以多項式表達的一個固定值,如果余數不為零,那么就可以識別二維碼已經被污染,然后將固定值的多項式等于0的幾種結果代入到錯誤信息和糾錯碼組合形成的多項式中,算出結果,最后將得到的結果代入到y12e1+y22e2中解方程,就可以得到二維碼出錯的位置e1,e2和大小y1,y2了。主要代碼如圖3所示。

圖2 溯源查詢Fig.2 Traceability query

圖3 RS糾錯代碼Fig.3 RS error correction code
糾錯技術主要針對消費者。由于這些二維碼在銷售過程中是需要貼在農產品上的,所以損壞和污染的情況比較多,因此需要二維碼有一定的糾錯能力。當消費者掃描了農產品上的二維碼后,就可以知道農產品的生產日期、保質期、營養成分等信息。二維碼掃描結果如圖4所示。生成的糾錯二維碼如圖5所示。

圖4 二維碼溯源Fig.4 QR code traceability

圖5 糾錯二維碼Fig.5 Error correcting QR code
本文主要實現了二維碼的糾錯和加密,可以為農產品的產品質量和溯源二維碼的安全提供一定的保障。采用SHA-1加密技術的二維碼可以有效地減少假冒偽劣農產品流入市場,而RS算法的應用又讓二維碼變得更加智能,同時也節約了成本。結合這兩種技術的二維碼,就能實現農產品的來源可追溯,去向可查證,責任可追究,保證農產品的食用安全。但隨著本技術的不斷推廣與使用,二維碼糾錯能力有限的問題就會越加的明顯,在后期研究中可以結合Hopfield神經網絡的圖像復原技術,對一些污染更加嚴重的二維碼作進一步的研究,提高二維碼的糾錯能力。