陳明忠
(汕頭職業(yè)技術(shù)學(xué)院 機電工程系,廣東 汕頭 515078)
多年來,偽造仿制正規(guī)商品的現(xiàn)象大量存在,因此各種防偽技術(shù)應(yīng)運而生。傳統(tǒng)的防偽技術(shù)主要有序列號、一維條碼、二維碼等,但它們?nèi)菀妆粡?fù)制盜用或揭下復(fù)用。RFID(無線射頻識別)技術(shù)克服了傳統(tǒng)防偽技術(shù)的不足,RFID 標簽ID 為出廠時寫入,當其附著在防偽對象后具有揭下自毀功能。而UHF(超高頻)RFID 由于其讀寫距離較遠,讀取速度較快,標簽成本較低,目前已成為市場主流[1],被廣泛應(yīng)用到商品的防偽溯源系統(tǒng)(包括物流管理、防偽追蹤)中。
一種典型的RFID 系統(tǒng)由電子標簽、讀寫器、上位機和遠程服務(wù)器組成[2],讀寫器一般由天線、射頻模塊、控制模塊和接口組成,遠程服務(wù)器的數(shù)據(jù)庫存放商品編號、商品基本信息和溯源信息,如圖1 所示。電子標簽與讀寫器間采用無線連接,讀寫器與上位機間采用COM/USB 口連接。
圖1 RFID 系統(tǒng)的組成
現(xiàn)行的RFID 讀寫系統(tǒng)存在如下問題:1)現(xiàn)行的讀寫器是以8 位的8051 單片機作為控制模塊的核心,這種讀寫器的功率較低,發(fā)送的信號衰減較快,標簽的讀寫速度較慢。當連續(xù)讀取多個標簽時,容易發(fā)生碰撞而造成漏讀和誤讀[3]。2)標簽數(shù)據(jù)容易被不法份子非法讀取、竊聽或位置跟蹤,從而導(dǎo)致隱私信息泄露。3)無法檢查包裝內(nèi)的貨物是否被不法份子替換或調(diào)包過。電子標簽一般是附著在貨物的包裝上的,當不法份子在不損壞包裝的前提下,將包裝內(nèi)的貨物替換成仿造貨物時,現(xiàn)行的RFID系統(tǒng)是檢查不出來的。
為了解決現(xiàn)行RFID 系統(tǒng)存在的問題,本文以基于ARM 架構(gòu)的STM32 單片機為控制模塊的核心,RLM100 作為射頻模塊,設(shè)計了一種改進型的讀寫器系統(tǒng),為商品的防偽溯源研究和實踐提供一定的借鑒價值。
前面已談到,讀寫器一般由天線、射頻模塊、控制模塊和接口組成。
射頻模塊主要由發(fā)送電路和接收電路組成,功能是:產(chǎn)生高頻發(fā)射功率,并接收和解調(diào)來自電子標簽的射頻信號[4-5],本讀寫器采用睿芯聯(lián)科公司研制的RLM100 作為射頻模塊。RLM100 模塊集成了PLL、發(fā)射、接收、耦合器以及MCU 等部件,同時定義了一系列的命令幀和響應(yīng)幀。
控制模塊由ASIC 組件和微控制器組成,微控制器是控制模塊的核心部件,本讀寫器采用STM32 作為微控制器[6]。STM32 是意法半導(dǎo)體集團(ST)推出的一種高性能、低成本、低功耗的基于ARM Cortex-M 架構(gòu)的微控制器(MCU)。
上位機與STM32 之間、STM32 與RLM100 之間的媒介稱為接口,本讀寫器采用UART(串口)作為接口。STM32 模塊通過USART1 與上位機連接,通過USART2 與射頻RLM100 模塊連接,如圖2 所示。
圖2 上位機-STM32-RLM100 串口聯(lián)接圖
單片機是將多種接口芯片集成到一片芯片的微控制器,目前有51 單片機和STM32 單片機兩種[7]。STM32 是基于ARM Cortex-M 內(nèi)核的32 位閃存微控制器,相對于51 單片機,STM32 單片機具有如下特性:
(1)處理速度快。STM32 的處理速度大約是51 單片機的幾十倍。
(2)儲存容量大。片上集成32~512 KB 的Flash 存儲器,6~64 KB 的SRAM 存儲器。
(3)外設(shè)接口數(shù)量多,功能強大。為用戶擴容、升級、改造提供方便。
(4)低功耗控制多。提供睡眠模式、停止模式、待機模式三種低功耗供用戶選擇。
(5)升級維護方便。用戶程序在PC 端開發(fā),然后編譯、生成hex 文件后,通過ARM 仿真器(含JTAG和SWD 端口)就可方便地?zé)龑懙絊TM32 的存儲器中。
總之,STM32 融高性能、實時性、低功耗于一體,為用戶提供一個全新的自由開發(fā)空間和各種簡單易用的軟硬件輔助工具,讓STM32 成為各類智能型產(chǎn)品開發(fā)的理想選擇。將STM32 應(yīng)用到讀寫器中,可以明顯提高標簽的讀寫速度,避免標簽信息的漏讀和誤讀。
為了防止標簽數(shù)據(jù)被非法讀取,本系統(tǒng)設(shè)計了一種改進的RFID 雙向安全認證協(xié)議,如圖3 所示。
圖3 改進的RFID 雙向安全認證協(xié)議
每一個RFID 標簽在出廠時,廠商都會寫入一個標識ID、密鑰K、Hash 函數(shù)和隨機數(shù)生成器,其中ID 和K 具有唯一性,不同點是ID 可被讀取,K 不能被讀取,并禁止標簽被“讀寫”。讀寫器存儲一個隨機數(shù)生成器。后臺服務(wù)器中的數(shù)據(jù)庫存儲將要使用的所有標簽的ID 和K 值對以及Hash 函數(shù)[8]。認證過程如下:
(1)當讀寫器對準電子標簽時,讀寫器產(chǎn)生一個隨機數(shù)r1,并向標簽發(fā)送讀寫請求Query 和r1;
(2)當標簽收到Query 和r1后,立即產(chǎn)生一個隨機數(shù)r2,并計算r2和K 異域后的哈希函數(shù),即H(r2⊕K),然后將r2,H(r2⊕K)發(fā)送給讀寫器;
(3)讀寫器向后臺數(shù)據(jù)庫轉(zhuǎn)發(fā)r1,r2,H(r2⊕K);
(4)在后臺數(shù)據(jù)庫中遍歷標簽的K值。每取出一個標簽的K 值,計算H(r2⊕Ki),并將H(r2⊕Ki)與H(r2⊕K)比較,若不等,則取出下一個標簽的K 值;若相等,則表示被請求的標簽為有效標簽,停止取K 值,繼續(xù)計算H(r1⊕r2⊕Ki),并向讀寫器發(fā)送H(r1⊕r2⊕Ki)。若遍歷完畢時,不存在H(r2⊕Ki)=H(r2⊕Ki),表示認證失?。?/p>
(5)讀寫器向標簽發(fā)送H(r1⊕r2⊕Ki),標簽將自己的K 代替式中的Ki,并計算H(r1⊕r2⊕K),然后比較H(r1⊕r2⊕K)和H(r1⊕r2⊕Ki),若兩者是相等的,則標簽判斷讀寫器為有效讀寫器,這時標簽允許被“讀寫”。
當RFID 標簽與讀寫器雙向認證之后,能有效防止標簽信息被非法讀取、竊聽和位置跟蹤[9]。
(1)在上位機中,根據(jù)RLM100 命令幀的數(shù)據(jù)格式和操作目的,構(gòu)造上位機的相應(yīng)命令幀,向讀寫器發(fā)送相應(yīng)命令;
(2)在讀寫器中,對STM32 模塊的RCC 系統(tǒng)時鐘、NVIC(嵌套中斷向量控制器)、TIM2 定時器、Systick 定時器進行初始化[10];
(3)配置USART1(串口1),實現(xiàn)STM32 與上位機的連接。然后調(diào)用USART1 的中斷處理函數(shù),接收上位機發(fā)送過來的命令幀;
(4)對Ucos 的系統(tǒng)時鐘、定時器、延時、串口等進行初始化,并創(chuàng)建起始任務(wù)。同時對刷卡中斷、LED、蜂鳴器信號量進行初始化[11];
(5)根據(jù)RLM100 通信協(xié)議和操作目的,構(gòu)造出STM32→RLM 各個具體的命令幀和響應(yīng)幀;
(6)在上位機中,根據(jù)RLM100 響應(yīng)幀的數(shù)據(jù)格式和操作目的,構(gòu)造上位機的相應(yīng)響應(yīng)幀,接收讀寫器返回的數(shù)據(jù)。
STM32 發(fā)給RLM100 的數(shù)據(jù)幀稱為命令幀,RLM100 返回給STM32 的數(shù)據(jù)幀稱為響應(yīng)幀[12]。數(shù)據(jù)幀是一種結(jié)構(gòu)變量,由若干域名組成,STM32 和RLM100 之間通過Usart2(串口2)傳遞數(shù)據(jù)幀。由于每次傳遞一個字節(jié),因此在一方傳遞給另一方之前,要將數(shù)據(jù)幀存入字節(jié)數(shù)組中。根據(jù)RLM 數(shù)據(jù)幀格式的規(guī)定,數(shù)據(jù)幀存入字節(jié)數(shù)組時需要進行格式處理,如表1 所示。
表1 數(shù)據(jù)幀與字節(jié)數(shù)組的關(guān)系
(1)將上位機發(fā)送的“寫卡”命令幀各域的值存入全局數(shù)組usart1_rev_buff 中[13];
(2)利用RLM_GET_STATUS(詢問狀態(tài))命令測試上位機-STM32-RLM100 的連接狀態(tài);
(3)利用RLM_INVENTORY_SINGLE(單標簽識別—單步模式)命令讀取標簽的UII 區(qū)信息;
(4)利用RLM_BLOCK_WRITE_DATA(寫入標簽數(shù)據(jù)_多字長模式<指定UII>)命令向RFID 標簽的指定分區(qū)寫入數(shù)據(jù);
(5)利用RLM_READ_DATA(讀取標簽數(shù)據(jù)<指定UII>)命令從指定的存儲分區(qū)讀取數(shù)據(jù),檢查讀取的數(shù)據(jù)與用戶寫入的數(shù)據(jù)是否一致。
(1)將上位機發(fā)送的“讀卡”命令幀各域的值存入字節(jié)數(shù)組usart1_rev_buff 中;
(2)利用RLM_GET_STATUS(詢問狀態(tài))命令測試上位機-STM32-RLM100 的連接狀態(tài);
(3)利用RLM_INVENTORY_SINGLE(單標簽識別—單步模式)命令讀取標簽的UII 區(qū)信息[14];
(4)定義字節(jié)數(shù)組TxDatatemp,用于存放RLM_READ_DATA(讀取標簽數(shù)據(jù)<指定UII>)命令幀的PAYLOAD 域的值;
(5)把字節(jié)數(shù)組usart1_rev_buff 的5~8 號元素(上位機輸入的標簽密鑰)存入TxDatatemp 數(shù)組的0~3 號元素中;把usart1_rev_buff 的9~10 號元素分別存入TxDatatemp 數(shù)組的4~5 號元素中;把usart1_rev_buff[11]/2 存入TxDatatemp 數(shù)組的6 號元素中;
(6)利用UII 區(qū)信息的前5 位算出UII 區(qū)的總長度,并存入lentemp 中。把UII 區(qū)信息從左邊開始拷貝lentemp 個字節(jié)到TxDatatemp 數(shù)組的7 號元素開始的字節(jié)中;
(7)STM32 把RLM_RE AD_DATA 命令幀中各域按表1 進行處理后,依次存入字節(jié)數(shù)組UHF_TX_Buf 中。然后,STM32 將UHF_TX_Buf 數(shù)組逐個字節(jié)發(fā)送給RLM100;
(8)RLM100 讀取目標存儲區(qū)的數(shù)據(jù)后向STM32 發(fā)回響應(yīng)幀,STM32 收到響應(yīng)幀之后,首先存入字節(jié)數(shù)組UHF_RX_Buf 中,然后根據(jù)表1 對數(shù)組元素進行處理,獲取響應(yīng)幀的各個域;
(9)將響應(yīng)幀的PAYLOAD 域(即目標存儲區(qū)數(shù)據(jù))通過串口上傳到上位機;
(10)在上位機中,檢查目標存儲區(qū)是哪一個?如果讀取的是TID 區(qū),還要完成以下兩步:
1)從標簽User 區(qū)讀取前7 個字節(jié)的數(shù)據(jù)(格式:“第××次,”),并對其中的××加1,然后讀取上位機當前的日期和時間(格式:YYYY-MM-DD,HH:MM:SS),組建26 個字節(jié)的字符串(格式:“第××次,YYYY-MM-DD,HH:MM:SS ”),以反映標簽ID 被讀取信息;
2)將標簽ID 被讀取信息寫入標簽User 區(qū),同時將標簽ID、標簽ID 被讀取信息通過Fttp 方式寫入數(shù)據(jù)庫相應(yīng)的商品編號中。終端用戶通過標簽ID、商品編號訪問商品信息。
終端用戶只要讀取User 區(qū),就能知道標簽ID 被讀取次數(shù)。一般地,商品在生產(chǎn)、包裝、貼標簽后,廠商會讀取一次標簽ID,終端用戶購買商品時,也會讀取一次標簽ID,即標簽ID 一般被讀兩次。不法份子在將假貨替換真貨之前,為了獲取真貨信息,也可能要讀取標簽ID。因此,標簽ID 被讀取次數(shù)越多,商品被偽造的可能性就越大[15]。通過將標簽ID 被讀取次數(shù)和讀取時間寫入標簽User 區(qū)的方法,有效解決包裝內(nèi)的貨物無法檢查真?zhèn)蔚膯栴}。
(1)寫卡:當商品貼上電子標簽以后,商品生產(chǎn)商要向標簽的User 區(qū)寫入“第01 次”和讀取時間。
操作步驟為:在標簽密鑰中輸入:“0-0-0-0”,存儲分區(qū)選擇“User”,地址偏移量輸入:0,“寫卡”按鈕后面的編輯框輸入“第01 次”和讀取時間,并單擊“寫卡”按鈕,如圖4 所示。
圖4 向User 區(qū)寫入數(shù)據(jù)
(2)讀卡:終端用戶在購買商品時,要從標簽TID 區(qū)讀取標簽ID,從User 區(qū)讀取“標簽被讀取次數(shù)和讀取時間”,并通過Fttp 方式寫入遠程服務(wù)器的數(shù)據(jù)庫相應(yīng)的商品編號中。
操作步驟:在標簽密鑰中輸入:“0-0-0-0”,存儲分區(qū)選擇“TID”,地址偏移量輸入:0,讀出的數(shù)據(jù)長度輸入:16,商品編號輸入:abc(假定事先在數(shù)據(jù)表中輸入商品編號為abc 的記錄),并單擊“讀卡”按鈕,如圖5 所示。
圖5 向TID 區(qū)讀取數(shù)據(jù)
本文以STM32 單片機作為控制模塊,RLM100 作為射頻模塊,設(shè)計了一種改進型的RFID 讀寫系統(tǒng),該讀寫系統(tǒng)具有三大優(yōu)點:一是讀寫器能快速對RFID 標簽進行正確讀寫;二是基于讀寫器與RFID標簽之間設(shè)計了一種雙向安全認證協(xié)議,有效防止標簽信息被非法讀取、被竊聽和位置跟蹤;三是在讀取標簽TID 區(qū)時,自動將標簽ID 被讀取次數(shù)和讀取時間實時寫入標簽User 區(qū),終端用戶只要讀取User 區(qū),就能判斷包裝內(nèi)的貨物的真?zhèn)螁栴}。本文還對STM32 與RLM100 之間的數(shù)據(jù)傳送、寫卡操作、讀卡操作的流程進行詳細設(shè)計,最后通過實驗,驗證本文設(shè)計的寫卡操作、讀卡操作的正確性。
佛山科學(xué)技術(shù)學(xué)院學(xué)報(自然科學(xué)版)2021年6期