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