• 沒有找到結果。

利用NFC技術及數位簽章實作產品資訊防仿冒之應用

N/A
N/A
Protected

Academic year: 2021

Share "利用NFC技術及數位簽章實作產品資訊防仿冒之應用"

Copied!
106
0
0

加載中.... (立即查看全文)

全文

(1)國立台灣師範大學. 資訊工程研究所碩士論文. 指導教授:葉耀明 博士. 利用 NFC 技術及數位簽章實作 產品資訊防仿冒之應用. 研究生: 中華民國. 李冠緯 101. 撰. 年 6 月.

(2)

(3) 摘 要 利用 NFC 技術及數位簽章實作 產品資訊防仿冒之應用 李冠緯 近年來國內外食品安全問題的發生日漸頻繁,黑心食品充斥等事件層出不 窮,包括近期比較嚴重的塑化劑事件、三氯氰氨毒奶事件、過期品標籤重貼等 等;日常生活用品上的安全問題也時有所聞。 目前,國際防偽領域逐漸興起了一股利用電子技術防偽的潮流,而射頻識 別技術正引起了防偽專業的廣泛關注。射頻識別技術由電子標籤、讀寫器和應 用軟體系統這三個部分組成,是一種非接觸式的自動識別技術,通過射頻信號 自動識別目標對象並獲取相關數據,能夠有效解決產品假冒偽造的現象。 本研究利用 NFC 技術及數位簽章發展產品資訊防仿冒技術,其防偽概念 並不是利用單純的防偽標籤設計,而是利用電子標籤的加密資訊配合後台的一 整套跟蹤、追溯系統來達到防偽效果。本系統可透過電子標籤上產品資訊的追 溯,並利用 NFC 技術和智慧型手機的操作,使產品資訊方便、即時的呈現在 消費者面前。我們透過三種加密技術和數位簽章的處理,能防止電子標籤上的 資料被竄改,不但可以提升產品情報資訊的可靠性及產品的防偽能力,更可讓 消費者買得安心。. 關鍵字:Android、NFC、ECC、RSA、DSA、防仿冒、生產履歷.

(4) Abstract The application of product information anti-counterfeiting using NFC technology and digital signature Kaung-Wei Lee Recently, food safety issues are on the increase nationally and globally. Unsafe food events are all over the place, including the plasticizer food scandal, melamine-tainted milk powder scandal, and re-labeling of expired food, etc. The safety issues of everyday items also prevail in our life. So far, there is a rising trend in the international anti-counterfeit field which employs electronic technique in defending against fakes and radio-frequency identification technology receives attention from anti-counterfeit professionals. Radio-frequency identification technology is made up of electronic label, reader, writer, and application software. It’s a non-contact auto-identification technology that acquires relevant data using Radio-frequency signal to automatically identify the target object, which effectively solves the problem of counterfeit. This research takes advantage of NFC and digital signature to develop product information anti-counterfeit technology. The concept is to utilize not only the simple design of anti-counterfeit labeling but also the encrypted information in electronic label with a tracing system at backend to anti-counterfeiting. This system can get the product information through electronic label by using NFC and the operations of smart phones which display the product information to the customers easily and immediately. We can use three kind of encrypt technology and digital signature to protect the information of electronic label from being tampered. It can not only increase the reliability of the information and the security capabilities of the products but also allow the customers to shop without worry. Keyword:Android、NFC、ECC、RSA、DSA、Anti-Counterfeiting、Production Resumes. 2.

(5) 誌謝 經過兩年的學習與努力,終於完成本論文,在此感謝葉耀明教授於研究上 的啟發與指導,老師自由開放的教導方式對學生有莫大的影響。這兩年來參與 老師帶領的校內外研究計畫,讓學生有機會接觸業界和不同的人、事、物,並 獲得寶貴的實務經驗。 感謝葉耀明教授、呂永和教授、張芳仁教授,能夠在百忙之中抽空前來擔 任口試委員,並且不厭其煩的指正缺漏,提出良好的建議,讓本論文更加完整。 感謝實驗室博士班陳政龍的指導,政龍學長真的是一位熱心和善的好學長, 給我很多論文上的靈感;感謝實驗室同學芝華、瀧濱、永倫、惠迪、孝倫、慶 瑞、明憲、韋德、鏞年,於就讀研究所期間,共同的討論研究、一同趕作業也 培養了良好的感情,讓實驗室的氣氛活潑愉悅,讓研究上能增添許多生活趣事; 也感謝學長姐,謹至、冠廷、培然、汝怡、建廷、欣培、國隆、威傑、尚儒的 帶領,碩一時經由他們的帶領讓我很快地熟悉實驗室的環境,也留下了完善的 資料供我參考;還有感謝學弟妹,書銘、昱賢、哲維、隘同、皓中、志忠、禮 衛、文寬、雨曄在計畫上面的協助,讓我可以擁有更多時間來完成本研究,我 很高興能夠是本實驗室的一份子,更高興能和大家一起分享研究的喜悅和困 難。 最後要感謝的是我的父母和家人,支持我念書,並提供我在求學上的協助, 讓我能夠順利的完成研究所的學業,在這邊誠心感謝以上所有的人。. 3.

(6) 目錄 第一章 緒論.................................................................................................................. 1 1.1 研究背景................................................................................................ 1 1.2 研究動機與目的.................................................................................... 1 1.3 論文架構................................................................................................ 2 第二章 文獻探討.......................................................................................................... 4 2.1 防仿冒.................................................................................................... 4 2.2 密碼學.................................................................................................... 5 2.2.1 對稱性密碼學................................................................................ 6 2.2.2 非對稱性密碼學............................................................................ 6 2.3. 數位簽章................................................................................................ 7. 2.4 2.5 2.6. QR-Code ............................................................................................... 10 產銷履歷.............................................................................................. 12 智慧型手機(Smart Phone)............................................................. 14. 2.7 Android................................................................................................. 17 2.8 NFC ....................................................................................................... 19 第三章 產品防仿冒系統............................................................................................ 21 3.1 3.2. 系統架構.............................................................................................. 21 數位簽章技術...................................................................................... 22 3.2.1 DSA(Digital Signature Algorithm) ........................................... 22. 3.2.2 RSA ............................................................................................... 23 3.2.3 ECC(Elliptic Curve Cryptography) ........................................... 24 3.3 Android 與 MySQL 資料庫連結模組 .................................................. 25 Android 生產者端設計....................................................................... 26 Android 消費者端設計....................................................................... 28 Server 端設計 ...................................................................................... 28 3.6.1 Joomla 內容管理系統 ................................................................. 29 3.6.2 系統模組...................................................................................... 30 第四章 系統開發與實作............................................................................................ 33 3.4 3.5 3.6. 系統開發及開發環境.......................................................................... 33 4.1.1 系統開發...................................................................................... 33 4.1.2 開發環境...................................................................................... 33 4.1.3 使用者案例圖(Use Case Diagram) ........................................ 35 4.1.4 循序圖(Sequence Diagram) ................................................... 37 4.2 Android 與 MySQL 資料庫連結模組實作 .......................................... 40 4.1. 4.3. Android 生產者端實作....................................................................... 46 4.3.1. UID 讀取模組 .............................................................................. 46.

(7) 4.3.2 4.3.3. 新增產品模組.............................................................................. 49 加密模組...................................................................................... 50. 4.3.3.1. DSA ....................................................................................... 51. 4.3.3.2 RSA ....................................................................................... 53 4.3.3.3 ECC ....................................................................................... 55 4.3.4 NFC 寫入模組 .............................................................................. 59 4.4 Android 消費者端實作....................................................................... 61 4.4.1 解密模組...................................................................................... 61 4.4.2 NFC 讀取模組 .............................................................................. 64 4.5 Server 端實作 ...................................................................................... 70 4.6 QR-Code 實作和測試 .......................................................................... 82 4.6.1 實作.............................................................................................. 82 4.6.2 測試.............................................................................................. 84 4.7 QR-Code 與 NFC Tag 比較 ................................................................... 86 4.8 數位簽章加密技術比較...................................................................... 87 第五章 結論與未來發展............................................................................................ 90 5.1 結論...................................................................................................... 90 5.2 未來發展.............................................................................................. 90 參考文獻...................................................................................................................... 92 附錄.............................................................................................................................. 93. II.

(8) 圖目錄 圖 2-1 圖 2-2 圖 2-3. 數位簽章的實際應用流程.................................................................. 10 QR-Code 的使用方式 ......................................................................... 11 QR-Code 的範例 ................................................................................. 11. 圖 圖 圖 圖 圖 圖. 2-4 2-5 2-6 2-7 2-8 2-9. TAP 標章.............................................................................................. 12 產銷履歷農產品標籤與其意涵.......................................................... 13 2011 第三季手機市占率調查 ........................................................... 15 2010 第三季北美手機市占率調查 ................................................... 16 2011 第三季北美手機市占率調查 ................................................... 16 Android 系統架構圖........................................................................... 17. 圖 圖 圖 圖 圖 圖 圖. 3-1 3-2 3-3 4-1 4-1 4-2 4-3. 系統架構圖.......................................................................................... 21 Android 手機透過 PHP 網頁與 MySQL 資料庫作連結 ..................... 26 NFC Forum 定義的 NFC Tag Memory Structure ................................ 27 系統流程圖.......................................................................................... 33 Android Emulator ................................................................................. 34 使用者案例圖...................................................................................... 36 新增產品循序圖.................................................................................. 37. 圖 圖 圖 圖 圖 圖. 4-4 4-5 4-6 4-7 4-8 4-9. 更新產品資訊循序圖.......................................................................... 38 讀取 Database 資料循序圖 ................................................................ 39 讀取 NFC Tag 資料循序圖 ................................................................... 40 程式一開始的畫面.............................................................................. 46 讀取 NFC Tag 的執行畫面 ................................................................... 47 顯示此 NFC Tag 已經使用過的畫面 ................................................... 49. 圖 圖 圖 圖 圖 圖. 4-10 4-11 4-12 4-13 4-14 4-15. 新增產品頁畫面.................................................................................. 50 加密技術選擇畫面.............................................................................. 51 起始畫面.............................................................................................. 60 寫入成功畫面...................................................................................... 60 起始畫面.............................................................................................. 65 讀取 NFC Tag 後的執行畫面 ............................................................... 66. 圖 圖 圖 圖 圖 圖. 4-16 4-17 4-18 4-19 4-20 4-21. 從資料庫抓取下來的資料.................................................................. 66 直接讀取 NFC Tag 中的資料 ............................................................... 67 前台產品清單模組.............................................................................. 73 後台產品清單模組.............................................................................. 74 後台編輯產品模組.............................................................................. 76 前台產品詳細資訊模組...................................................................... 76. 圖 4-22. QR-Code 模組 ...................................................................................... 81 III.

(9) 圖 圖 圖 圖. 4-23 4-24 4-25 4-26. Google Code Zxing 掃描器程式畫面 ................................................. 83 QR-Code 解碼後的畫面 ...................................................................... 83 QR-Code 測試 ...................................................................................... 85 NFC Tag 測試 ........................................................................................ 85. IV.

(10) 表目錄 表 2-1 表 2-2 表 2-3. 對稱式加密法與非對稱式加密法的比較............................................ 7 QR-Code 資料容量 ............................................................................. 11 產銷履歷資料範例.............................................................................. 14. 表 表 表 表 表. 相同安全性時 RSA 與 ECC 金鑰長度比較 ..................................... 24 Client 端開發環境 ............................................................................... 35 Server 端建置環境 .............................................................................. 35 QR-Code 與 NFC Tag 比較 ................................................................... 87 在 80 bits 的安全強度下所需要的金鑰長度和產生時間 ................. 88. 3-1 4-1 4-2 4-3 4-4. V.

(11) 第一章 緒論 1.1 研究背景 近年來國內外食品安全問題的發生日漸頻繁,黑心食品充斥等事件層出不 窮,包括近期比較嚴重的塑化劑事件、三氯氰氨毒奶事件、過期品標籤重貼等 等;日常生活用品上的安全問題也時有所聞,例如國際組織綠色和平跨國抽查 大品牌服飾,發現包括耐吉、愛迪達、日本優衣庫等 14 家國際知名品牌,運 動衣和運動鞋含有化學物質 NPE,這種物質是環境荷爾蒙,可能會毒害生殖系 統。這類的報導層出不窮,讓一般大眾對於市面上所販賣的各式各樣的物品, 不知道是否還有黑心物質,使用後是否會對人體產生影響,都是所有消費者所 希望知道的資訊。 這幾年智慧型手機的興起也大大改變了人們的日常生活習慣,智慧型手機 讓人們隨時隨地也能跟網際網路接軌,再透過許多針對智慧型手機開發的軟體, 手機能完成的工作遠比想像中的多。目前智慧型手機的市占率越來越高,所擁 有智慧型手機的人也越來越多,透過智慧型手機,人們就能隨時隨地的查詢資 料和得到新知。 NFC(Near Field Communication,近距離無線通訊)技術一直以來都被外界 著眼於其在電子交易上的應用,如手機結合悠遊卡、結合小額付款等,但是隨 著越來越多廠商把 NFC 技術加入新手機,讓越來越多人認識了 NFC,大家也了 解到 NFC 的方便性,進而越來越多的軟體廠商願意去製作 NFC 相關的軟體。 把智慧型手機和 NFC 技術導入產銷履歷,不但可以提升情報資訊的可靠性、 產品的安全性,更可讓消費者使用的更安心。. 1.2 研究動機與目的 透過產銷履歷的執行,並利用 NFC 技術和智慧型手機,可以讓資訊更方便、 更即時的呈現在消費者面前,讓消費者在購買之前,就能了解該產品是否是真 1.

(12) 品,生產過程中是否有不肖業者加入目前已知對人體有危害的物質進去,讓使 用者更安心。 目前產銷履歷使用的是 QR-Code 儲存該產品的履歷 ID,當貼紙上的資料不 清楚時,使用智慧型手機去讀取 QR-Code,卻只能讀取到一段數字,不能夠即 時的了解消費者所想要知道的資訊,本系統希望做到利用 NFC Tag 儲存所有使 用者想知道的資訊,目前產銷履歷已經在農產品上執行,但是其他日常生活用 的產品並沒有導入產銷履歷,所以本系統就是希望產銷履歷不只是限定在農產 品上,並且透過加密技術和數位簽章,防止資料被竄改,增加資料的正確性, 讓消費者能得到正確的資訊,消費上能更安心。. 1.3 論文架構 本論文一共分為五個章節,各章節敘述如下: 第一章 緒論 介紹研究背景、研究目的和論文架構。 第二章 文獻探討 本系統下的相關研究,包含:防仿冒、密碼學、數位簽章、QR-Code、產 銷履歷、智慧型手機、Android 及 NFC。 第三章 系統 在 Android 智慧型手機上開發產品資訊系統的規劃,其中包含系統架構、 數位簽章技術、Android 與 MySQL 資料庫連結模組設計、Android 生產者端 設計、Android 消費者端設計及 Server 端設計。 第四章 系統實作 本章節將會說明本研究之系統功能與其使用者端介面操作方式,透過實作 並搭配上圖文的方式讓使用者更加了解整個系統。 第五章 結論與未來發展 2.

(13) 總結本研究之成果,並提出未來系統延伸發展之建議。. 3.

(14) 第二章 文獻探討 2.1. 防仿冒 長期以來,假冒偽劣商品不僅嚴重影響著國家的經濟發展,還危及著企業. 和消費者的切身利益。為保護企業和消費者利益,保證市場經濟健康發展,國 家和企業每年都要花費大量的人力和財力用於防偽打假。然而,國內市場上的 防偽產品,其採用的防偽技術絕大部分仍然是在紙基材料上做文章,常見的防 偽技術有:全息圖案、變色墨水、產品和包裝上面的隱蔽標記。其技術不具備 唯一性和獨佔性,易複製,從而不能起到真正防偽的作用。目前,國際防偽領 域逐漸興起了一股利用電子技術防偽的潮流,尤其是射頻標籤的運用,其優勢 已經引起了廣泛的關注。 根據國際商業總會(The International Chamber of Commerce, ICC)的估計, 2004 年仿冒品的總金額佔全球貿易總額的 7%,總值約 5,000 億美元。其中, 仿冒名牌精品銷售的金額,每年就超過 2,000 億美元。很明顯的,仿冒品對企 業造成無以估計的損失,而企業及政府執法單位也越來越體認到偽造及仿冒問 題的嚴重性。防止偽造問題必須從四個方面著手,即立法單位、執法單位、反 仿冒政策及科技手段等。本論文只從科技手段為出發點,根據 Staake 等將現有 的防偽方法大略區分為:光學、生物、化工及微電子等四類科技。 光學科技:應用最廣泛的首推「全像術」(hologram)。就是利用全像科技 在標籤、信用卡、貼紙、證件等物品上,製作很漂亮的立體影像。過去仿製這 樣的圖像需要花費很高的代價,但是現在的印刷科技已經可以很容易加以複製, 而且因為大量使用,已經很少有人會去注意它的存在,所以它的防偽的效果已 經非常有限。至於在鈔票上所製作的特殊反光影像,則是高難度的技術,偽造 的門檻很高,至今仍被大多數國家用在有價票證的防偽手段上。 生物科技:最為大家所熟知的就是指紋辨識技術,更進一步還有瞳孔辨識 4.

(15) 技術。但是,這些技術都需要高成本,而且不是針對物品,所以不太適用於物 品的防偽技術上。另外,尚有 DNA 防偽技術,是利用 DNA 防偽辨識棒,在 DNA 防偽標籤上來回塗抹,使標籤瞬間改變顏色,以辨識標籤的真偽。但是成本偏 高且辨識過程需要人工介入,無法成為自動辨識的應用方案。 化工科技:最常用的是具有防偽功能的油墨,主要是利用油墨中特殊功能 的色料和連結料來達到防偽的目的。在防偽印刷的領域,防偽印刷油墨的使用 非常廣泛,如在各種票證、單據、商標及 標識等的防偽印刷上,都使用防偽印 刷油墨。由於防偽印刷油墨具有防偽技術實施方便、成本低廉、隱蔽性較好、 色彩鮮艷等特點。但是防偽油墨的技術門檻低,複製容易,很難達到防偽的功 能。 微電子科技:目前正快速應用在防偽科技上,解決方案從簡單的辨識功能 到複雜的數位驗證機制都有;製作上有看得見的也有隱藏的;一般都具有不易 磨損及自動辨識的特性。無線射頻辨識就是這類防偽領域的主要產品,目前成 本高是其缺點,不過專家預期不久將會達到經濟可接受的價格。如果要將無線 射頻辨識應用於防偽功能上,應該具有以下特點:每個標籤都可以有一個全球 唯一的編碼(例如:產品電子碼[EPC])。這唯一的編碼可以在製作標籤時就 放在其內的 ROM 中,既無法修改、也無機械磨損、更有防污損等特性。無線 射頻辨識系統具有不需接觸(contactless)、不需直線視野(line of sight)的特 性,所以可以遠距離識讀。. 2.2. 密碼學 密碼學為一種利用數學方法來對資料加密和解密的科學,是由明文、加密. 演算法、金鑰、解密演算法及密文組合而成,明文(Plaintext)指的是加密前 的原始資料,而密文(Ciphertext)則是加密之後的資料。為什麼我們需要密碼 學?主要有四個原因:確保資訊的私密性(Confidentiality)、提供驗證識別 5.

(16) (Authentication) 、偵測資料是否被不當的竄改(Integrity) 、提供資訊傳送來源、 接收目的或交易的證明(Non-repudiation) ,所以我們需要使用密碼學來保護我 們的資料。 密碼學所使用的加密技術強度指的是密碼破解所需要花費的時間與資源, 不管多強大的密碼都有被破解的一天,所以我們利用加密技術強度來增加破解 的困難度,那些困難度就是所需要的時間和資源,透過延長破解密碼的時間, 我們就可以確保在這段時間內資料是安全的,如果強度夠強,這段時間可以是 有生之年,甚至是幾個世代都有可能。加密技術強度的高低通常牽涉到下列的 因素:演算法強度、金鑰保護機制、金鑰的長度,密碼系統的安全性不在演算 法的保密,而是取決於金鑰的保密機制,因為金鑰是用來和密碼演算法產生特 定密文的符號字串。本質上,金鑰是一組相當長度的數字或符號字串,其大小 通常以位元(bit)為單位,通常是演算法則內的一個變數,所以不同的金鑰會 產生不一樣的密文,所以就密碼學而言,金鑰長度越長,密文就越保密。. 2.2.1 對稱性密碼學 對稱性密碼學指的就是加密與解密使用同一把金鑰,又稱為單一或私密鑰 匙(secret-key),或傳統加密系統,因為是同一把金鑰,所以訊息的加密和解 密採用相同的金鑰,傳送端使用此金鑰加密訊息,把加密後的訊息傳送給接收 端,接收端再使用相同的金鑰解密即可得到訊息,對稱性密碼學最重要的關鍵 是保證密鑰的安全。優點是較快速,所以在處理大量資料的時候被廣泛使用, 而且只要使用足夠大的金鑰,將難以破解;缺點則是需要有一個安全性機制將 金鑰安全性的分送至交易的雙方,因為只有一個金鑰,所以通常只能一對一傳 送。典型的演算法有 DES、3DES、IDEA、AES 等等。. 2.2.2 非對稱性密碼學 非對稱性密碼學指的就是每個使用者擁有一對金鑰-公開金鑰(public key) 6.

(17) 和私密金鑰(private key),訊息由其中一把金鑰加密後,必需由另一把金鑰予 以解密,公開金鑰可以被廣泛的發佈,而私密金鑰必需隱密的加以保存。優點 是公開鑰匙可以公開分送,所以可以是一對多傳送,或是多對一傳送;缺點則 是效率較差,因為金鑰的不同,他需要兩個不同的演算法來做不可逆的加解密, 因此需要比較複雜的運算。典型的演算法有 RSA、背包密碼,Elliptic Curve 等等。 表 2-1. 對稱式加密法與非對稱式加密法的比較 對稱式加密法. 非對稱式加密法. 其它名稱. 秘密金鑰加密法. 公開金鑰加密法. 加解密的 key 是否相同. 相同. 不同. key 可否公開. 不可公開. 開鑰匙可以公開,私有鑰 匙不可公開. key 保管問題. 如果與 N 個人交換訊息,. 無論與多少人交換訊. 需保管好 N 把加解密鑰匙. 息,只需保管自己的私密 鑰匙. 加解密速度. 快. 慢. 應用. 常用於加密長度較長的資. 常用於加密長度較短的. 料,例:email. 資料、數位簽章. 2.3. 數位簽章 數位簽章(Digital Signature)的用途主要就是確保資訊的正確性,當接收. 方收到資訊,只要確認該資訊的數位簽章是否正確,就能確定該資訊是正確的, 並未竄改過的,增加資訊安全性。 數位簽章的使用情境大概如下: 1.. A 要傳訊息給 B。. 2.. A 在發送前利用自己的 private key 將訊息加密,再傳給 B。 7.

(18) 3.. B 再利用 A 的 public key 進行解密。. 4.. 如果訊息可以正確解密,就可以確定訊息是由 A 所發出。. 5.. 即使訊息在傳送過程中被 C 所攔截,再使用 A 的 public key 還原 成原本的訊息,還是沒辦法偽裝成 A 所發送的訊息(因為這需要 A 的 private key)。. 如果訊息太大的時候,訊息加密運算的時間就會過長,這時候就需要訊息 摘要(Message Digest)來幫忙。訊息摘要顧名思義,即是一段訊息的摘要,類 似於 fingerprint(指紋)的概念。理論上,不同的訊息所產生出來的訊息摘要 都不會是相同的,因此可以用來驗證訊息在傳輸的過程中是否有被竄改過。在 目前的作法中,訊息摘要的產生是以複雜的雜湊函數(hash function)所計算 出來。 雜湊函數(Hash Function)在許多地方都有其應用,目前常用的雜湊函數 有 MD5(Message-Digest algorithm 5)、SHA(Secure Hash Algorithm)、MAC (Message Authentication Code)、HMAC(Hash-based Message Authentication Code)等等。不論是何種雜湊函數,都具備以下幾點特性: . 要計算出一段訊息的訊息摘要不需要花太多時間,因此演算法的設計 上必須考量到效率。. . 針對相同訊息進行計算,都要產生出相同的結果。. . 只有訊息摘要是無法還原成原訊息,因此演算法的設計上必須是不可 逆。. . 不同的訊息所計算出來的訊息摘要必須是不同的。. 一般來說,目前的演算法都具備了上述幾種特性,但還是有可能會發生所 計算出來的訊息摘要會重複,以 MD5 為例,MD5 所計算出來的訊息摘要長度 為 128 Bits,因此表示不同的訊息還是有 1/2^128 的可能性會發生重複。雖然 這些演算法發生重複性的機率已經算是極低,到了幾乎可以忽略的地步了,因 8.

(19) 此實際應用上常常都還是會用這些演算法來作計算;此外,MD5 和 SHA 這兩種 演算法計算訊息摘要時,只需要原訊息即可,不需要額外的資訊,所以這兩種 演算法是目前最常用的。 在實際應用上,為了確保數位簽章的安全與可靠,一般會加上非對稱式加 密演算法的機制,嚴謹一點就會在 PKI 的架構下,加入可信任第三方的認證, 以下是實際應用的流程,如圖 2-1 所示: 1.. A 將所要傳遞的資訊透過雜湊函數加密以產生訊息摘要。. 2.. A 使用自己的 private key 將訊息摘要加密,結果即為數位簽章。. 3.. 此時 A 將原始資訊與數位簽章一起傳送給 B。. 4.. B 使用相同的雜湊函數,計算出原始資訊的訊息摘要。. 5.. B 使用 A 的 public key 將數位簽章解密,取出訊息摘要。. 6.. 比對兩個訊息摘要,若是相同,則表示資訊來源的確為 A,並沒 有被修改過。. 9.

(20) 圖 2-1. 2.4. 數位簽章的實際應用流程. QR-Code QR-Code 是二維條碼的一種,1994 年由日本 Denso-Wave 公司發明,QR 是. 「Quick Response」的縮寫,即快速反應的意思,源自於發明者希望 QR-Code 可以讓所編碼的內容快速被解碼。QR-Code 比普通一維條碼可以儲存更多資料, QR-Code 資料容量如表 2-2 所示,也不需要像普通一維條碼在掃描時需要直線 對準掃描器才能讀取到內容資料,QR-Code 的使用方式如圖 2-2 所示。. 10.

(21) 表 2-2. QR-Code 資料容量. 數字. 最多 7,089 字元. 字母. 最多 4,296 字元. 二進位數(8 bit). 最多 2,953 位元組. 日文漢字/片假名. 最多 1,817 字元(採用 Shift JIS). 中文漢字. 最多 984 字元(採用 UTF-8). 中文漢字. 最多 1,800 字元(採用 BIG5). 圖 2-2. QR-Code 的使用方式. QR-Code 的形狀是正方形的,如圖 2-3 所示,顏色通常只有黑白兩色,不 過顏色並不會對裡面的資訊產生影響,所以也是有人用別的顏色來製作。在 3 個角落會印有較小而且像「回」字一樣的正方圖案,這 3 個正方圖案是幫助解 碼軟體定位的圖案,所以使用者不需要對準 QR-Code,無論以任何角度掃描, 資料仍然可以正確的被讀取。另外,QR-Code 具有抗彎曲性,解決一般一維條 碼最常遇到毀損無法判讀的缺點,通常一般的一維條碼,遇水容易造成部分條 碼毀損就掃不出資訊來的問題,QR-Code 只要不要毀損的太嚴重,都能讀取到 裡面的資料。. 圖 2-3. QR-Code 的範例 11.

(22) 常見的 QR-Code 儲存格式可分成兩大類: 1.. 文字格式:一般的應用有文字、郵件、電話、簡訊(SMS)及簡訊(MMS) 等等,使用者只需要解讀 QR-Code,就能得到相關的資訊。. 2.. 快速連結格式:一般的應用有網站網址和網站書籤,使用者只需要解 讀 QR-Code 就能連結到相關的網址,或者是直接利用相關網址下載影 片、圖片或音樂。. 利用有照相功能的手機,搭配手機內的 QR-Code 解碼軟體,對著 QR-Code 一照,解碼軟體會自動解讀此訊息,顯示於手機螢幕上面。目前 QR-Code 比較 流行於日本,不過由於智慧型手機的發展,QR-Code 也越來越多業者使用, QR-Code 的應用也越來越多元化了,包括報章雜誌上常見的廣告或是高鐵的「台 灣高鐵 T Express」QR-Code 車票。. 2.5. 產銷履歷 自民國 96 年下半年起,在市面上開始看到有些蔬菜、水果、魚肉等包裝. 袋上,貼有綠色底的小標章(稱 TAP 標章) ,如圖 2-4 所示。這些貼有特殊標籤 如圖 2-5 所示的農漁產品,大部分會出現在大賣場專門設置的「產銷履歷農產 品專櫃」中,價錢上也較同類產品稍高。. 圖 2-4. TAP 標章(資料來源:行政院農業委員會). 12.

(23) 圖 2-5. 產銷履歷農產品標籤與其意涵(資料來源:行政院農業委員會). 當我們在「臺灣農產品安全追溯資訊網」網站上,鍵入產品的「追溯號碼」, 便可以知道這產品是哪一個地區、哪一位農友所生產,它的栽種或飼養歷程, 何時收穫或宰殺,何時包裝出貨,以及更重要的產品農藥或其他藥物殘留檢測 結果等資料,都能一覽無遺。這些資料就像是記載個人家庭、教育、工作歷程 的履歷表,因此稱為農產品的「產銷履歷」。 「產銷履歷」或是一般大眾習稱的「生產履歷」 ,源自歐盟使用的「食品可 追溯性系統」一詞,它的意涵是將各類農漁畜產品與其加工品,在生產、加工、 流通、銷售各階段所經的歷程,都有紀錄可以供購買的消費者查詢,如此做法 充分賦予消費者知的權利,以消除大眾對黑心食品、來源不明食品的憂心與疑 慮。. 13.

(24) 表 2-3. 產銷履歷資料範例(資料來源:臺灣農產品安全追溯資訊網) 履歷編號:. 03100791231130. 農業經營業者:. 漢光果菜生產合作社. 簡稱:. 保證責任雲林縣漢光果菜生產合作社. 組織代碼:. 100791. 產品名稱:. 九層塔. 產地:. 雲林縣 斗六市 西平段 15/15-01. 生產者姓名:. 廖祥宏. 生產者照片:. 包裝日期/出貨日期: 2012/5/30. 2.6. 驗證機構:. 暐凱國際檢驗科技股份有限公司. 驗證有效期限:. 2013/05/31. 智慧型手機(Smart Phone) 智慧型手機(Smart Phone)是一種運算能力及功能比傳統手機更強的手機,. 使用者可以隨意在手機內安裝其它應用程式,目前智慧型手機所使用的作業系 統包括 iOS、Android、bada OS、MeeGo、Palm OS、WebOS、Windows Mobile、 14.

(25) Symbian OS 及 BlackBerry OS 等,他們之間的應用軟體互不兼容。大多數的作業 系統都支援軟硬體擴充,支援原有軟體移植,並提供豐富的開發介面以供開發 商與第三方軟體供應方的使用。 「智慧型手機」這個說法主要是針對「功能手機」 (Feature phone)而來的, 智慧型手機的功能結合了掌上電腦、PDA 和手機功能,搭配行動上網、無線網 路可以進行網頁瀏覽和電子郵件功能,同時也具備多媒體影音、照相錄影、GPS 導航、觸控螢幕等多種功能。因此,開發者可以根據以上智慧型手機擁有的功 能為基底,在此開放性平台上開發出五花八門的應用程式。 根據 Gartner 調查報告指出,2011 年第三季 Android 智慧型手機市占率已 經從 2010 年的 25.3%急速成長至 52.5%,全球的智慧型手機出貨量也是爆炸 性的成長,從 81.1 百萬台成長至 115.1 百萬台,如圖 2-6 所示。. 圖 2-6. 2011 第三季手機市占率調查(資料來源:Gartner). 根據 Nielsen 調查報告指出,2011 年第三季北美智慧型手機市占率也已經 從 2010 年的 29.7%成長至 40%,如圖 2-7、圖 2-8 所示。. 15.

(26) 圖 2-7. 2010 第三季北美手機市占率調查(資料來源:Nielsen). 圖 2-8. 2011 第三季北美手機市占率調查(資料來源:Nielsen). 16.

(27) 2.7. Android Android 是基於 Linux 核心的軟體作業平台和作業系統,最初是由 Andy. Rubin 所創辦,最初主要支援手機,後來被 Google 所收購,之後由 Google 領導 並開發,後來 Google 和其他 84 家硬體製造商、軟體開發商及電信運營商組成 開放手持設備聯盟(Open Handset Alliance)來共同開發改良 Android 操作系統 並生產搭載 Android 的智能手機。Android 採用軟體層疊(software stack)的架 構,主要分為三個部分,最底層以 Linux 核心為基礎,只提供基本功能,其他 應用軟體則由各公司自行開發。 Android 系統的完整結構如下圖 2-9 所示:. 圖 2-9. Android 系統架構圖(資料來源:Android Developers). 從圖中可看出 Android 的系統架構分為四層,從高到低分別為應用層 (Applications) 、應用層框架(Application Framework) 、系統運行函式庫(Libraries) 以及 Linux 核心層(Linux Kernel),以下分別對這四個層級做介紹。 17.

(28) 1. 應用層(Applications) 所有應用程序都是用 Java 語言所撰寫的,然而 Google 在最開始的時候就 有在 Android 綁定一些基本的核心應用程式,例如電話、E-mail、地圖、日曆、 SMS 簡訊程式、瀏覽器以及聯絡人等等。 2. 應用層框架(Application Framework) 這一層是撰寫 Google 發佈的核心應用時所使用的 API 框架,開發程式時可 以直接使用這些框架以簡化繁複的架構設計。下列是 Android 提供的內建框架: . 檢視(Views) :可以用來建構應用程式的 Layouts,它包括清單(List)、 網格(Grid) 、文字方塊(Text box) 、按鈕(Button) ,並且可以嵌入 Web 瀏覽器。. . 內容提供器(Content Providers):它可以讓應用程式之間的資料共用 與傳遞。. . 資源管理器(Resource Manager) :提供程式碼以外的存取,例如本機 字串、圖形與版面配置。. . 通知管理器(Notification Manager):可以在狀態列中提供訊息。. . 活動管理器(Activity Manager):用來管理程式 Activity 的生命週期。. . 視窗管理器(Window Manager):管理視窗程式。. . 封包管理器(Package Manager):Android 系統內部的管理。. 3. 執行函式庫層(Libraries) 當使用 Android 應用框架時,Android 系統會過一些 C/C++的函式庫來支援 我們所使用的各項元件。常見的核心函式庫有: . System C library:標準的 C 語言系統函式庫,常用於嵌入式 Linux-based 的設備。. . Media Libraries:支援常見影音格式和靜態圖片格式的函式庫,包括 MPEG4、H.264、MP3、AAC、AMR、JPG 以及 PNG 等等。 18.

(29) . Surface Manager:管理並合成 2D 和 3D 圖層的函式庫。. . LibWebCore:網頁瀏覽器引擎。. . SGL:2D 影像引擎。. . 3D libraries:基於 OpenGL ES 1.0 APIs,用於硬體 3D 加速或優化 3D 光 柵掃描程式。. . FreeType:向量圖片或向量文字顯示引擎。. . SQLite:強大且輕量級的資料庫引擎。. 4. Linux 核心層(Linux Kernel) 目前 Android 的核心服務包括安全,記憶體管理,程序管理,網路堆疊, 驅動程式模型等。Linux 核心同時也作為軟體與硬體間的抽象層。 Android 擁有以下兩個優點: 1.. 系統開放程度高:Android 是一款基於 Linux 的作業系統,而 Linux 的 特性就是必須將系統原碼完全開放。. 2.. 跨平台可移植性:Android 應用程式撰寫的語言是使用 Oracle 的 Java 語言,其中 Java 具備跨平台的功能,可讓 Android 系統在不同的平台 中執行。. 2.8. NFC NFC(Near Field Communication),中文稱作近場通訊,又稱短距離無線通. 訊,是一種短距離的高頻無線通訊技術,允許有 NFC 晶片的電子設備之間進行 非接觸式點對點資料傳輸。這個技術由免接觸式射頻識別(RFID)演變而來, 由 Philips 和 Sony 共同研製開發,其基礎是 RFID,並加入互連技術而發展出來 的技術。NFC 運作的頻率是 13.56 MHz,其運行距離只有 10 公分,超過就無法 傳輸;傳輸速度有 106 Kbit/秒、212 Kbit/秒或者 424 Kbit/秒三種。目前近場通 訊已通過成為 ISO/IEC IS 18092 國際標準、EMCA-340 標準與 ETSI TS 102 190 標 19.

(30) 準。 NFC 主要分為主動和被動兩種讀取模式,主動讀取模式就類似一般的讀卡 機,利用電力去讀取其他 NFC Tag 或是其他的 NFC 裝置;而被動模式就是變成 一般的 NFC Tag,需要靠其他的 NFC 裝置來讀取。NFC 的工作模式主要有下面三 種模式: . Card mode(卡模式):這個模式其實就是相當於一張採用 RFID 技術的 IC 卡,目前所有用 IC 卡所達到的功能,都能用此模式來代替,包括信用卡、 悠遊卡、身份辨識卡、門禁管制、車票、門票等等。此種模式下,有一個 極大的優點,那就是可以通過非接觸讀卡器的來供電,即便是寄主設備(如 手機)沒電的情況下也可以工作。. . P2P mode(點對點模式) :這個模式可用於兩個具備 NFC 功能的設備做數 據交換,類似紅外線數據傳輸的方式,只是傳輸距離較短,傳輸配對建立 速度較快,傳輸速度也較快,功耗很低(比藍芽低)。使用方式是將兩個 具備 NFC 功能的設備連結,就能將資料點對點傳輸,常見的應用有下載音 樂或影片、訊息交換、遊戲對戰等等。. . Reader/Writer mode(讀卡機模式) :作為非接觸讀卡器使用,比如從海報 或者展覽信息電子標籤上讀取相關信息,使用者只須要把有 NFC 功能的設 備靠近 NFC Tag,即可讀取 Tag 內的資料。. 20.

(31) 第三章 產品防仿冒系統 3.1. 系統架構 本研究中提出的系統架構整體分為三個部分,分別為 Client、Server 以及. Database,如圖 3-1 所示。Client 端主要分成兩種類型,第一種是消費者所使用 的 APP,而另一種則是生產者所使用的 APP,利用不同的 APP 來區隔功能,讓 使用者就只能使用特地部分的功能,以免導致生產者的產品資料被惡意竄改。 Server 端主要是由 Joomla 所架設的一個 HTTP Server,是利用網站的形式,透過 前台的部份讓使用者可以利用網頁形式來瀏覽各個產品的相關資訊,後台的部 分則是讓生產者可以管理所有產品的資訊,並且透過多個 component 的形式, 讓手機可以直接存取 Database。. 圖 3-1. 系統架構圖. 本研究中的 Database 是採用 MySQL 資料庫,主要原因是因為目前 Joomla 只支援 MySQL 資料庫,並且透過 Wamp Server 的架設,透過 Joomla 的 JDatabase 語法與資料庫做連結。 21.

(32) 3.2. 數位簽章技術 數位簽章(Digital Signature)的用途主要就是確保資訊的正確性,當接收. 方收到資訊,只要確認該資訊的數位簽章是否正確,就能確定該資訊是正確的, 並未竄改過的,本研究就是利用數位簽章的特性來達到防仿冒的功能。 本研究所使用到的數位簽章加密技術有:DSA、RSA、ECC 這三種技術,以 下分別對這三種加密技術作說明。. 3.2.1 DSA(Digital Signature Algorithm) DSA(Digital Signature Algorithm,數位簽章演算法)為 1994 年美國正式公 佈數位簽章標準(Digital Signature Standard,DSS),他只能拿來作數位簽章, 無法用來加解密或進行金鑰交換,是個最基本的數位簽章演算法,在相同金鑰 長度進行數位簽章產生時,DSA 會比 RSA 快速,所以一般安全性沒有要求很高 的話,都是使用 DSA 演算法來作數位簽章。 這個演算法主要有四個重要的參數,分別是 p、q、g 和 h,以下分別介紹 這四個參數: . p:512 至 1024 位元的大質數. . q:160 位元的p − 1之質因數. . g:g = w (p−1)/q mod 𝑝,其中w < p − 1且w (p−1)/q mod p > 1. . h:一個單向雜湊函數(one-way hash function) ,輸出值為 160 位 元,通常搭配 DSA 的單向雜湊函數標準為 SHA-1(Secure Hash Algorithm). 再來就是要來產生金鑰了,使用者先任選一個整數x ∈ Zq 為私鑰,並另用 演算法計算y = g x mod p,公鑰即為(p, q, g, y)。產生完金鑰以後,接下來就 是產生數位簽章的步驟了,數位簽章主要有下面四個步驟(欲簽署訊息為 m): (i). 任選一數k < q。 22.

(33) (ii). 計算r = (g 𝑘 mod p) mod q。. (iii). 計算s = k −1 (h(m) + xr) mod q。. (iv). (r, s)為 m 的數位簽章。. 而驗證的部分則主要分成兩個步驟: (i). 計算: a = s −1 mod q b = ah(m) mod q c = ra mod q d = (g 𝑏 × y 𝑐 mod p) mod q. (ii). 若d = r,則(r, s)通過驗證。. 3.2.2 RSA RSA 加密系統是世界上第一套符合公開鑰匙加密條件的密碼系統,於 1977 年由瑞維斯特(R. Rivest) 、薛米爾(A. Shamir)及艾多曼(L. Adleman)三人所 研發出來,故稱為 RSA。RSA 基於數學難題,需要極大整數因數分解,因此整 數越大,分解的難度就越高,決定了 RSA 演算法的可靠性,到目前為止,世界 上還沒有任何可靠的攻擊 RSA 演算法的方式,所以在電子商業中 RSA 被廣泛的 使用。 RSA 的數位簽章演算法叫作 RSA-PSS,是由 Mihir Bellare 和 Phillip Rogaway 所發表的,RSA-PSS 的金鑰對是利用原本 RSA 的演算法去計算出來的,另外再 定義出數位簽章的演算法。 首先先產生 RSA 的金鑰對,產生步驟如下: (i). 隨意選擇兩個很大的質數 p 和 q,p 不等於 q,並計算N = pq。. (ii). 選擇一個整數 e 與(p − 1)(q − 1)互質,並且 e 小於(p − 1)(q − 1)。 23.

(34) (iii). 計算 d:(d ∗ e) ≡ 1(mod ((p − 1)(q − 1))). (iv). 將 p 和 q 的記錄銷毀。. 所產生出來的(N, e)是公鑰,而(N, d)則是私鑰。有了公鑰和私鑰之後, 我們就可以產生數位簽章了。數位簽章主要只有一個公式,s = md mod N(m 為使用 SHA-1 運算過後的訊息摘要) ,所產生出來的 s 就是數位簽章,使用者只 要把 s 和原訊息傳送出去即可。 接下來介紹驗證的部分,驗證主要有兩個步驟,第一個步驟是利用公鑰 (N, e)運算出新的訊息摘要,使用的公式為v = s e mod N,第二個步驟是把 送來的資料重新運算出訊息摘要,最後比對兩個訊息摘要是否一樣即可。. 3.2.3 ECC(Elliptic Curve Cryptography) ECC(Elliptic Curve Cryptography,橢圓曲線密碼學)是基於橢圓曲線數學 的一種公鑰密碼的方法。橢圓曲線在密碼學中的使用是在 1985 年由 Neal Koblitz 和 Victor Miller 分別獨立提出的。ECC 的主要優勢是在某些情況下它比 起其他的方法可以使用更小的密鑰,譬如 RSA,能提供相當的或更高等級的安 全,如表 3-1 所示,這使得 ECC 非常適合使用於如智慧卡或手機無線行動裝置 等記憶體有限的環境中,不過缺點是加密和解密操作的實現比其他機制花費的 時間長。 表 3-1. 相同安全性時 RSA 與 ECC 金鑰長度比較 安全性. 𝟐𝟖𝟎. 𝟐𝟏𝟏𝟐. 𝟐𝟏𝟐𝟖. 𝟐𝟏𝟗𝟐. 𝟐𝟐𝟓𝟔. 演算法 RSA 長度(位元). 1024. 2048. 3072. 7680. 15360. ECC 長度(位元). 160. 224. 256. 384. 512. RSA:ECC 金鑰長度比. 6:1. 9:1. 12:1. 20:1. 30:1. 橢圓曲線的通用格式為y2 + a1 xy + a3 y = x 3 + a2 x 2 + a4 x + a6 。用於密碼 24.

(35) 學技術的橢圓曲線是由滿足上述方程式的所有點(x, y)及一個無限遠點(point at infinity)O 所形成的集合,其中座標 x 與 y 屬於某個有限體(finite field) 。目 前軟硬體具體實現的橢圓曲線有限體為質數體(prime field,GF(p))、二元體 (binary field,GF(2n )) 、最佳擴展體(optimal extension field,GF(pn ))等三種。 ECC 的數位簽章演算法叫作 ECDSA,接下來說明數位簽章的產生與檢驗方 法。假設 G 是橢圓曲線系統基點且其級數為 n,正整數 d 為簽署者的私密金鑰, 而Q = d‧G則為簽署者的對應公開金鑰,h(m)為訊息 m 的雜湊函數值。在 ECDSA 標準中,對應於訊息 m 的簽章(r, s)產生步驟如下: (i). 挑選一亂數 k,n– 1 ≥ k ≥ 1。. (ii). 計算k‧G = (x1 , y1 )且r = x1 mod n,如果r = 0,則回到步 驟 1。. (iii). 計算s = k −1 {h(m) + dr} mod n。. (iv). 如果s = 0,則回到步驟 1。. ECDSA 簽章檢驗的步驟如下: (i). 計算w = s −1 mod n。. (ii). 計算u1 = h(m) w mod n與u2 = r w mod n。. (iii). 計算u1 ‧G + u2 ‧Q = (x0 , y0 )與v = x0 mod n,如果v = r,則 簽章正確。. 3.3. Android 與 MySQL 資料庫連結模組 本研究透過 Anroid 手機來顯示 NFC Tag 裡面的資料,但是資料驗證都必須. 透 過 網路 來跟 MySQL 資料 庫作 連結 , 這個 時候 就需 要用 到 HttpPost 和 HttpResponse 來和 PHP 網頁來作連結,再透過 PHP 網頁和 PHP 語法跟 MySQL 作 SELECT、INSERT 和 UPDATE 的動作,PHP 網頁當作中繼,達到 Android 端和 資料庫的連結,如圖 3-2 所示。 25.

(36) 圖 3-2. 3.4. Android 手機透過 PHP 網頁與 MySQL 資料庫作連結. Android 生產者端設計 Android 生產者端是本研究重點之一,主要由四個模組所組成,第一個模組. 是 UID 讀取模組,透過 NFC 的 UID 來確保每個 Tag 的唯一性;第二個模組是新 增產品模組,用來新增新生產出來產品的履歷編號和產品名稱;第三個模組是 加密模組,透過此模組來產生數位簽章;第四個模組是 NFC Tag 寫入模組,用 來把資訊和數位簽章寫入 NFC Tag 中。詳細的模組規劃與說明如下。. . UID 讀取模組 NFC Forum 定義 NFC 的 UID 有 7 個 bytes,如表 3-2 所示,但是 NXP's Mifare. Classic Tag 並沒有照著 NFC Forum 所定義的格式製作,因此,他的 UID 只有 4 個 bytes 的長度,本研究所使用的 NFC Tag 是 NXP's Mifare Classic 1K 的 Tag,所 以所讀取出來的 UID 只有 4 個 bytes 的長度,但是這樣已經有232 個 UID,足夠 26.

(37) 履歷號碼的使用。. 圖 3-3. . NFC Forum 定義的 NFC Tag Memory Structure. 新增產品模組 透過新增產品模組,生產者可以直接新增履歷編號和產品名稱到 Database. 裡,履歷編號所使用的是 NFC Tag 的 UID,利用 UID 的唯一性達到履歷編號的唯 一性,可以讓履歷編號不會重複,就能確保不會有兩個不同的產品卻有相同履 歷的情況發生。. . 加密模組 透過加密模組,生產者即可產生數位簽章,透過數位簽章的使用,可以確. 保 NFC Tag 中的資料是否有被竄改過,本系統所使用的加密演算法有 DSA、RSA、 ECC 這三種,生產者可以自行決定所要使用的加密演算法。. . NFC Tag 寫入模組 這個模組就是用來把資料和數位簽章寫入 NFC Tag 中,當生產者生產出一. 個新的產品時,製造過程中把 NFC Tag 嵌在產品上或產品中,再透過此模組把 27.

(38) 相關的產品資訊和數位簽章寫入 NFC Tag 中。. 3.5. Android 消費者端設計 消費者端主要就是顯示 NFC Tag 中的資料,或是直接從資料庫抓取資料來. 顯示,此設計有兩個模組,一個是解密模組,把 NFC Tag 中的資料解密成我們 所能閱讀的資料,並且驗證數位簽章是否正確;另一個模組是 NFC 讀取模組, 主要就是用來把 NFC Tag 的資料讀取出來。以下是詳細的說明。. . 解密模組 利用此模組可以驗證 NFC Tag 中的訊息是否正確,有無遭到竄改過。此模. 組會利用 Hash Function(本系統使用 SHA-1) ,將資料雜湊出訊息摘要,再透過 生產者的 Publie Key 去做運算,比對數位簽章後即可判斷是否是原資料,如果 是,就顯示 NFC Tag 中的資料,如果不是,就發出警訊。. . NFC 讀取模組 透過此 NFC 讀取模組,可以將 NFC Tag 中的資料讀取出來,並且解析成 String. 的格式,最後再把解析出來的 String 在格式化成我們所想要的方式呈現,消費 者即可直接在手機上顯示出 NFC Tag 中的資料,並且了解該產品的相關資訊, 確保該產品的來龍去脈等等。. 3.6. Server 端設計 本系統的 Server 端的設計主要是透過 Joomla 內容管理系統來作呈現,透過. Joomla 的前後台設計,可以讓生產者透過後台做資料的編輯和維護,而消費者 則可以透過前台來獲得產品資訊。前台除了上述的功能之外,最主要的部份是 本系統透過前台元件的開發,讓 Android 手機可以直接使用前台網頁來存取資 料庫,並且可以驗證 UID 和履歷編號是否相同,確保資料的一致性。. 28.

(39) 3.6.1 Joomla 內容管理系統 Joomla 是一套自由、開放原始碼的內容管理系統(Content Management System, CMS),所撰寫的網頁語言是 PHP,可用於發佈內容在全球資訊網與內 部網。Joomla 的功能包含可提高效能的頁面快取、RSS 饋送、頁面的可列印版 本、新聞摘要、部落格、投票、網站搜尋、與語言國際化等等,一般人對這類 型的內容管理系統可能會有以下的別名來稱呼: . 架站程式(架站軟體). . 快速架站程式(軟體). . 網站整合程式. Joomla 最早於 2001 年由澳洲 Miro 公司所開發,之前的名稱叫作 Mambo, 但在 2005 年 8 月後由於開發小組與原公司理念不合,因此從 Mambo 分裂,自 行出來成立 Joomla 開發小組,在早期的版本中,有許多 Joomla 的擴充元件與 Mambo 仍然是相容的,兩者之間差異不大。第一個發行版本的 Joomla! (1.0.0) 發佈於 2005 年 9 月 16 日,是由 Mambo 4.5.2.3 版加上安全性修正後所分支發 展的版本,到了 Joomla 1.5 版的時候則是以 PHP 5 為基礎完全重寫整個程式碼, 因此兩者之間的差異性必定會越來越大。 Joomla 是使用 PHP 程式語言加上 MySQL 資料庫所開發的軟體系統,可以 在 Linux、Windows、MacOSX 等各種不同的作業系統平台上執行,幾乎涵蓋市 場上 99%的電腦作業系統,即使像 Windows 系統中没有內建 PHP 及 MySQL 資 料庫,使用者也可以簡單的加裝一個軟體套件後就可以執行。而 Joomla 所做出 來的網站,只要使用者可以連上網路,用一般的瀏覽器就可以檢視,網頁相容 性相當地高。 Joomla 的特色,簡單列舉如下: . 屬於多國語言化的介面。 29.

(40) . 備有線上說明文件,方便網站管理者查閱相關網站操控的方法。. . 對於網站的程式開發者和美工設計者,保留相當大的客製化彈性及整 合能力。. . 可以使用瀏覽器將檔案上傳智媒體管理中(支援所有的 PNG、PDF、 DOC、XLS、GIF…等檔案格式)。. . 採用了網站快取的技術,可以加速網站的反應與效能。. . 控制台的物件層次分明,方便新增單元、分類和頁面。. . Joomla 內建 SEO 搜尋引擎最佳化的功能,能讓更多人在搜尋引擎上找 到使 用者製作的網站,可增加更高的曝光率,帶來更多的人潮。. 3.6.2 系統模組 . 資料庫寫入模組 Joomla 連接資料庫所使用自己特定的 API,稱作 JDatabase,他的寫法類似. PHP 的 query,不過他自己定義了許多 class 來做特定的動作,例如它可以透過 JFactory::getDBO()這個語法來直接連結資料庫,不用先用 mysql_connect(資料庫 網址, 使用者名稱, 使用者密碼)來設定連線資訊,再用 mysql_select_db(資料庫 名稱)連結相關資料庫,非常的方便。 這個模組主要利用到 JDatabase 的 insertObject(資料表名稱, object 變數)來 做資料的寫入,這裡的 object 變數所使用到的是 JObject()這個 class,並且利用 set(資料表欄位名稱, 變數)這個 function 把變數資料塞到 JObject 中,最後再用 insertObject()把資料寫入資料庫中。. . 資料庫讀取模組 這個模組主要利用到 JDatabase 的 loadObjectList ()來做資料的讀取,透過這. 個 class 即可直接把資料庫的資料讀取成一個 array,再透過這個 array 分解,把 裡面的資料逐一讀出,再去做表格的顯示。 30.

(41) . UID 驗證模組 這個模組主要的功能就是驗證該 NFC Tag 的 UID 是否已經存在資料庫中,. 透過抓取資料庫的資料,判斷是否為 NULL,如果不為 NULL 就代表這個 UID 已 經註冊在某商品中了,就無法再用這個 UID 去做產品註冊,但是可以去後台更 新相關資訊。. . 產品清單模組 這個模組分成了兩個部分,第一個部分是後台的模組,生產者透過此模組. 可以看到目前的所有產品,和目前所有的產品分類,生產者可以很清楚地了解 到他已經註冊了哪些產品,還有有哪些種類的產品,必要時也可以透過產品細 節模組來做做適當的修改;第二個部分的產品清單模組是前台顯示的模組,這 個部分的產品清單模組主要是透過網頁來做顯示,一般民眾可以直接透過網頁 來瀏覽該公司有哪些產品,所有已經發布的產品都會在上面做顯示,而透過前 台的產品細節模組就能看到該產品的詳細資訊。. . 產品細節模組 這個模組分成了三個部分,第一個部分事後台的產品細節模組,這個部分. 的模組主要是用來編輯產品的相關資料,因為產品剛生產出來時,只會透過 Android 生產者端模組新增產品履歷、產品名稱和出貨日期,其他的相關資訊必 須透過後台的產品細節模組來做更新;第二個部分則是前台網頁的產品細節模 組,透過此部分的模組,一般消費大眾可以直接透過網頁的形式來看到該產品 的所有相關資訊;第三個部分的產品細節模組則是顯示到 Android 上的模組, 當手機去讀取 NFC Tag 時,如果 UID 驗證無誤,而且該手機有上網功能的時候, 就會直接透過此模組連結資料庫,把此 UID 所對應到的產品履歷抓取出來,並 透過 Android 消費者端的顯示模組把產品資訊顯示到 Android 手機上。. 31.

(42) . QR-Code 模組 透過此模組可以在前台網頁上顯示 QR-Code 圖形,這個模組是本研究主要. 在探討 QR-Code 和 NFC Tag 的一些比較所製作出來的,所以 QR-Code 內的資料 跟 NFC Tag 裡的資料是一模一樣的,詳細的比較會在下一章作說明。. 32.

(43) 第四章 系統開發與實作 4.1. 系統開發及開發環境. 4.1.1 系統開發 本系統主要分為兩個部分的流程,如圖 4-1 所示,第一個流程是消費者端 的流程,使用者利用 Android 手機讀取 NFC Tag 來得到相關的資訊;第二個流程 則是生產者端的流程,使用者一樣透過 Android 手機來新增或更新產品資訊到 NFC Tag 中。與資料庫和網站的連結都是以 PHP 來撰寫的,手機端與資料庫的 連結主要是靠 Joomla 前台元件來執行,而 Server 端與資料庫的連結主要是靠 Joomla 的 JDatabase API 來執行。最後 Database 端所儲存的都是產品的相關資 訊。. 圖 4-1. 系統流程圖. 4.1.2 開發環境 本研究使用 Eclipse 作為開發工具,並以 Android SDK 和其包含的 Android 33.

(44) 手機模擬器(Emulator) ,如圖 4-1 所示,為程式開發套件進行開發,NFC 實作 部分則是使用 Samsung Galaxy Nexus 進行開發和測試,詳細的開發環境如表 4-1。. 圖 4-1. Android Emulator. 34.

(45) 表 4-1. Client 端開發環境. 名稱. 用途. 版本. 作業系統. 系統開發平台. Windows 7. JDK. Java 開發環境. 7.0. Eclipse IDE. 開發工具. 3.7.0. ADT. Android 擴充套件. 18.0.0. Android SDK. Android 程式開發套件. 2.3. Web Application 及各項服務使用 Apache 2.2.21 和 PHP 5.3.10 作為開發環境, 詳細資料如表 4-2。 表 4-2. Server 端建置環境. 名稱. 版本. 作業系統. Windows 7. Apache. 2.2.21. PHP. 5.3.10. MySQL. 5.5.20. XDebug. 2.1.2. XDC. 1.5. PhpMyadmin. 3.4.10.1. SQLBuddy. 1.3.3. webGrind. 1.0. 4.1.3 使用者案例圖(Use Case Diagram) 生產者和消費者端的 APP 系統功能設計如圖 4-2 所示,消費者端主要有兩 35.

(46) 種讀取資料的方式,第一種就是 Off-line 的設計,當使用者沒有網路功能的時 候,就直接讀取 NFC Tag 中的資料,直接顯示在螢幕上;另一種是 On-line 的設 計,當使用者有網路功能的時候就直接讀取資料庫裡面的資料,並把所有資料 顯示在螢幕上。而生產者端也有兩種主要的功能,第一種是新增產品,當一個 產品剛生產出來的時候,這個 NFC Tag 並沒有使用過,所以它的 UID 尚未登錄, 生產者就可以使用新增產品的功能,對 UID 作登錄的動作;第二種則是更新產 品資訊,不管是新產品的第一次寫入,或者是舊產品資料的更新,都可以透過 更新產品資訊的功能來把新的產品資訊寫入 NFC Tag 之中。. 圖 4-2. 使用者案例圖. 36.

(47) 4.1.4 循序圖(Sequence Diagram) . 新增產品循序圖. 圖 4-3. 新增產品循序圖. 如圖 4-3 所示,使用者透過讀取 NFC Tag 的動作就會來到 UID 的驗證畫面, 如果 UID 驗證為沒有登錄過的話,就會進到新增產品頁面,使用者編輯完產品 資訊後送出即可存入資料庫,並且完成 UID 登錄的動作。. 37.

(48) . 更新產品資訊循序圖. 圖 4-4. 更新產品資訊循序圖. 如圖 4-4 所示,使用者透過讀取 NFC Tag 的動作就會來到 UID 的驗證畫面, 如果 UID 驗證為已經登錄過的話,就會進到選擇動作頁面,使用者可以選擇更 新產品資訊或者離開,當使用者選擇更新產品資訊,就會來到選擇加密技術的 頁面,這裡使用者可以選擇加密的技術,有 DSA、RSA、ECC 三種,選擇完加密 技術後就會從資料庫讀取此 UID 的產品資訊,接著再對此產品資訊作加密的動 作,最後寫入 NFC Tag 中。. 38.

(49) . 讀取 Database 資料循序圖. 圖 4-5. 讀取 Database 資料循序圖. 如圖 4-5 所示,使用者透過讀取 NFC Tag 的動作就會來到產品資訊頁面, 這時會先判斷是否有上網功能,如果有上網功能則去資料庫抓取產品資訊,傳 回後再對資料作解碼的動作,最後再把解碼完的資訊顯示在螢幕上。. 39.

(50) . 讀取 NFC Tag 資料循序圖. 圖 4-6. 讀取 NFC Tag 資料循序圖. 如圖 4-6 所示,使用者透過讀取 NFC Tag 的動作就會來到產品資訊頁面, 這時會先判斷是否有上網功能,如果沒有上網功能則把 NFC Tag 中的產品資訊 讀取出來,並對資料作解碼的動作,最後再把解碼完的資訊顯示在螢幕上。. 4.2. Android 與 MySQL 資料庫連結模組實作 本模組是利用 HttpPost 和 HttpResponse 來和 PHP 網頁來作連結,再透過. PHP 網頁和 PHP 語法跟 MySQL 作連結,PHP 網頁只是中繼用的,原理上就是 Android 的手機透過執行 PHP 網頁上的語法,來作相關的動作,所以只要把我 們要的功能全部寫在 PHP 網頁上,再透過 HttpResponse 去執行 PHP 網頁,就可 以達到我們要的作用了。 本研究所運用到的連結語法都大同小異,只有一些功能上的差異,所以這 節會照著執行流程作說明。 40.

(51) . AndroidManifest.xml 的設定 AndroidManifest.xml 必須加入可以存取網路的權限才能連結到 PHP 網頁,. 否則會出現 WARN/System.err(503): java.net.SocketException: Permission denied 的錯誤訊息,加入的程式碼如下: <uses-permission android:name="android.permission.INTERNET" />. . 連結 PHP 網頁 這個功能最重要的語法就是 HttpPost,利用 HttpPost 我們可以直接連結到. 該網頁,才有辦法作接下來的動作,程式碼範例如下: //宣告連結網址 private String uriAPI = "http://localhost/Test.php"; //利用 HttpPost 與 Test.php 作連結. HttpPost httpRequest = new HttpPost(uriAPI);. . 傳送變數給 PHP 網頁 以 Post 運作傳送變數必須用 NameValuePair[]陣列儲存,所以我們利用 List. 物件來產生 ArrayList,再透過 BasicNameValuePair()語法把變數和變數名稱配對, 最後再用 add()語法把變數配對加到陣列中,等變數配對都加進去陣列後,我們 先用 UrlEncodedFormEntity()語法設定變數的編碼方式,再利用 setEntity()把變數 傳送出去,發出 HTTP request。詳細的程式碼範例如下: //Post 運作傳送變數必須用 NameValuePair[]陣列儲存. List<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("biographical_no", biographical_no)); //發出 HTTP request httpRequest.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));. . 執行 PHP 網頁的語法 透過 HttpResponse 的 DefaultHttpClient()產生一個新的物件,再透過 execute() 41.

(52) 去執行網頁上的 PHP 語法,最後再用 getEntity()來取得回傳的值,程式碼範例 如下: /* 取得 HTTP response */. HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequest); /* 若回傳的狀態碼為 200,表示回應正常 */ if (httpResponse.getStatusLine().getStatusCode() == 200) { /* 取出回應字串 */ String strResult = EntityUtils.toString(httpResponse.getEntity()); // 回傳回應字串. return strResult; }. . PHP 網頁寫法 PHP 網頁的寫法跟一般的表單傳送後接收的 PHP 網頁寫法差不多,一樣要. 有個接收變數的語法,再來就是要把運算後的結果印出來,這樣 Android 手機 才能接收到回傳的資訊,一般最基本的程式碼範例如下: <?php //宣告 utf-8 的編碼 header("Content-Type:text/html; charset=utf-8"); //用 POST 接受變數叫 data 的值 $data=$_POST['data']; //印出變數 echo "data=".$data; ?> 但是在 Joomla 中語法寫法就不一樣了,因為 Joomla 必須遵守 MVC 的架構 去實作,而且必須使用它自己的 API,所以寫法也不盡相同,就剛剛的範例改 寫成 Joomla 的寫法如下:. 42.

(53) 宣告 Joomla Model: <?php // 宣告為 Joomla 頁面. defined('_JEXEC') or die('Restricted access'); jimport('joomla.application.component.model'); class ProductModelAndroid extends JModel { function getData() { //以 POST 接收變數名為 data 的值 $data = JRequest::getVar('data'); return $data; } }?> 宣告 Joomla Veiw 的 view.html.php: <?php // 宣告為 Joomla 頁面 defined('_JEXEC') or die('Restricted access'); jimport('joomla.application.component.view'); class ProductViewAndroid extends JView { function display($tpl = null) { //取得 Model $model = $this->getModel(); //執行 Model 中的 getData() $showdata = $model-> getData(); //利用 assignRef 把變數塞到變數名稱中 $this->assignRef('showdata', $showdata); parent::display($tpl); } }. 43.

(54) 宣告 Joomla Veiw 的 default.php: <?php // 宣告為 Joomla 頁面. defined('_JEXEC') or die('Restricted access'); echo $this->showdata; ?> 雖然都會回傳值給 Android,但是 Joomla 卻會多回傳其他 HTML 的標頭, 例如<head>裡的所有資訊,所以我們必須在對所回傳的 String 去作處理,詳細 的處理會在第 4.4 節作說明。. . Thread Android 4.0 ( ICS ) 在 網 路 的 部 份 多 了 一 個 新 的 Exception 叫 做. android.os.NetworkOnMainThreadException,意思就是網路的活動必須跑在主要 執行緒上,ICS 說明因為這樣子 APP 可能會因為等待回應太久(超過 5 秒)而 會被系統強制關閉(收到 ANR),所以必須把所有的程式修改成使用 Thread 來 執行。程式碼如下: 要使用 Thread 必須先宣告訊息代碼,宣告如下: /** 「要更新版面」的訊息代碼 */ protected static final int REFRESH_DATA = 0x00000001; 啟動一個 Thread: // 啟動一個 Thread(執行緒),將要傳送的資料放進 Runnable 中,讓 Thread 執 行 Thread t = new Thread(new sendPostRunnable(msg)); t.start();. 44.

(55) sendPostRunnable 宣告如下: class sendPostRunnable implements Runnable { //宣告變數 String strTxt = null; // 建構子,設定要傳的字串 public sendPostRunnable(String strTxt) { this.strTxt = strTxt; } //執行動作 public void run() { String result = sendPostDataToInternet(strTxt); mHandler.obtainMessage(REFRESH_DATA, result).sendToTarget(); }. } 宣告 Handler: /** 建立 UI Thread 使用的 Handler,來接收其他 Thread 來的訊息 */ Handler mHandler = new Handler(){ public void handleMessage(Message msg){ switch (msg.what){ // 顯示網路上抓取的資料 case REFRESH_DATA: String result = null; if (msg.obj instanceof String) result = (String) msg.obj; if (result != null) // 印出網路回傳的文字 Toast.makeText(Main.this, result, Toast.LENGTH_LONG).show(); break; } }. }; 45.

(56) 4.3. Android 生產者端實作 生產者透過此 APP,可以把剛生產出來的產品直接把產品資訊寫入資料庫. 和 NFC Tag 中,利用 UID 讀取模組就能即時了解此 NFC Tag 是否有使用過,並且 數位簽章及加密技術,可以確保裡面的資料未來如果有人竄改的話,知道內容 是錯的,而不會破壞自家的名譽。接下來說明此 APP 的相關模組。. 4.3.1 UID 讀取模組 因為本研究利用 NFC Tag 的 UID 來作產品的履歷號碼,所以這個模組就是 在抓取 NFC Tag 的 UID,之後再利用所抓出來的 UID 號碼來作接下來的動作。一 開始進入程式後會要求使用者讀取 NFC Tag,如圖 4-7 所示,當使用者讀取 NFC Tag 之後,就會開始執行 UID 的抓取及判斷,如圖 4-8 所示。. 圖 4-7. 程式一開始的畫面. 46.

(57) 圖 4-8. 讀取 NFC Tag 的執行畫面. 本研究是使用 NXP's Mifare Classic 1K 的 Tag,UID 只有 4 個 bytes 的長度, 利用 getId()這個 function 來讀取 NFC Tag 的 UID 資料到 byte[]裡面,詳細程式碼 如下: // 1) 從 Intent 抓得到現在的 Action 動作 String action = intent.getAction(); // 2) 判斷是否讀取到 NFC Tag if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action)) { // 3) 利用 NfcAdapter 抓取 NFC Tag 的資訊 Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); // 4) 利用 getId()把 UID 存入 byte[]中 byte[] id = tagFromIntent.getId();. } 所抓取到的 byte[]再利用另外兩個 function 把它轉成 10 進位來表示,作為 履歷編號的表示,第一個 function 是 getHexString(),可以把輸入的 byte[]轉換 成 16 進位的 String,再透過第二個 function getUIDString(),把 16 進位轉換成 10 進位數字,再透過 format()把原本的 10 進位數字補滿 10 位數,這樣我們所 47.

(58) 要的履歷編號就這樣完成了。詳細的 function 程式碼如下: //取得 16 進位的 String public static String getHexString(byte[] b) throws Exception { String result = ""; for (int i = 0; i < b.length; i++) { result += Integer.toString((b[i] & 0xff) + 0x100, 16).substring(1); } return result; } //轉換為 10 進位的 10 位數 String public static String getUIDString(String str) { String formatStr = "%010d"; String UID = String.format(formatStr, Long.parseLong(str, 16)); return UID; } 得到 10 位數的 UID 後,我們就可以把它當作履歷編號來去跟 Server 端作 認證,本研究所用的機制是讀取 UID 後去 Server 端判斷這 UID 是否使用過,如 果使用過就會顯示這個 NFC Tag 已經使用過,並請使用者選擇接下來的動作, 如圖 4-9 所示;如果沒有使用過則會顯示新增產品資訊的頁面,詳細的新增產 品資訊介紹會在下一節作說明。. 48.

(59) 圖 4-9. 顯示此 NFC Tag 已經使用過的畫面. 4.3.2 新增產品模組 當讀取 NFC Tag 後判斷出此 UID 尚未使用過,就會進入新增產品的頁面, 如圖 4-10 所示,此頁面會顯示出這個 NFC Tag 的 UID 號碼,這個 UID 號碼就是 履歷號碼,除了頁面顯示出的產品名稱表格外,也會送出當天的日期當作出貨 日期,這三個值在 Server 端是無法修改的,所以這裡必須要輸入正確,也因為 不能任意修改,所以能確保這個 NFC Tag 只能使用在這個產品上。主要的新增 產品程式碼如下:. 49.

(60) //取得 EditText 中的值為產品名稱 EditText product_name_editText = (EditText)findViewById(R.id.product_name_editText); String product_name = product_name_editText.getEditableText().toString(); //履歷編號由 UID 取得 String biographical_no = UID; //目前時間 Date date = new Date(); //設定日期格式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); //進行轉換,轉換後的值為出貨日期 String date_of_dispatch = sdf.format(date);. 圖 4-10 新增產品頁畫面. 4.3.3 加密模組 當使用者輸入完新產品資料後就會來到此模組,此加密模組使用了三個不 同的加密技術可供使用者選擇,有 DSA、RSA 和 ECC,如圖 4-11 所示,使用者 可以依照自己的喜好選擇想要使用的加密技術,選擇完後點選確定按鈕就會執 行數位簽章加密動作,接下來分別介紹三種數位簽章技術。 50.

(61) 圖 4-11 加密技術選擇畫面 本研究所用的機制是把 Private Key 和 Public Key 分別存在 privatekey.dat 和 publickey.dat,再從 privatekey.dat 和 publickey.dat 中讀取出 Private Key 和 Public Key 來作運算。使用 Private Key 所運算出來的數位簽章最後會和原資料一起用 Base64 加密,然後存到 NFC Tag 中。. 4.3.3.1. DSA. 在 java.security.Signature 中就已經有定義 DSA 的相關 API,所以我們可以直 接利用內建的一些 API 來執行,首先先利用 KeyPairGenerator()來生成 DSA 的 Private Key 和 Public Key,利用 getInstance()來決定生成哪個加密技術的金鑰對, 接下來用 getPrivate()和 getPublic()分別取得 Private Key 和 Public Key,最後再用 writeObject()分別把 Private Key 和 Public Key 存入 DAT 檔案中,詳細程式碼如下:. 51.

參考文獻

相關文件

在數位系統中,若有一個以上通道的數位信號需要輸往單一的接收端,數位系統通常會使用到一種可提供選擇資料的裝置,透過選擇線上的編碼可以決定輸入端

Content and format of Investigational New Drug applications (INDs) for Phase I studies of drugs, including well-characterized, therapeutic,

傳播藝術系 應用英語系 幼兒保育系 社會工作系. 資訊

[r]

public static double calculate(int i, int j) throws ArithmeticException,

 駭客集團「Gameover Zeus」被指自 2006 年起就散播病毒,入侵企業及個人 電腦,並利用儲存於電腦內的使用者密 碼與私人資料 登入銀行戶頭盜取資 金 ;此外,Gameover

健康及道德議題 (3 小時) • 辨別使用資訊及通訊科技對健康造成的 威脅;建議在使用資訊及通訊科技時,實

• 利用資訊科技解決問題:停課期間,學校利 用Zoom視像教學,並以Google Classroom作