• 沒有找到結果。

智慧卡的應用

N/A
N/A
Protected

Academic year: 2021

Share "智慧卡的應用"

Copied!
79
0
0

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

全文

(1)

逢 甲 大 學

資 訊 工 程 學 系 專 題 報 告

智慧卡的應用

洪 秋 韻 (四甲)

生: 林 蕙 琪 (四甲)

陳 律 均 (四甲)

授 : 陳 德 生 老師

中華民國九十一年十二月

(2)

目 錄

圖表目錄………..III 第一章 前 言………..1 1.1 動機………..1 1.2 目的………..1 1.3 工作分配………..1 第二章 智慧卡的歷 史………..2 第三章 應用的範 圍………..4 3.1 記憶卡(memory card)………4 3.2 微處理器卡(microprocessor card)………5 第四章 智慧卡檔案………..8 4.1 檔案種類……….10 4.2 檔案名稱……….13 4.3 檔案選擇……….15 4.4 EF 檔案結 構………17 第五章 智慧卡資料傳輸(Smart Card Data

(3)

Transfer) ………24 5.1 序 言………..24 5.2 實體傳輸層……….26 第六章 ATR(Answer to Reset) ………29 6.1 ATR 字 元………31 第七章 邏輯模 型………37 7.1 一般描述………37 7.2 檔案辨別………37 7.3 專檔………38 7.4 基本檔………38 7.4.1 空白的基本檔………..…38 7.4.2 線性固定的基本檔……….……39 7.4.3 環式基本檔……….…39 7.5 選取檔案的方式………40 7.6 保留的檔案辨識號碼………42 第八章 命令的描 述………43 8.1 對映原 則………..43 8.2 命令的編碼………46 8.3 定義及編碼………49 8.4 卡片傳回的狀態情形………51

(4)

第九章 實 作………54 9.1 系統要求……….54 9.2 SCardServer………..54 9.3 SCARD 介 面………55 9.4 讀取電話簿的流程圖……….58 9.5 程式碼………58 9.6 展示……….67 附錄一 參考資料………74

圖 表 目 錄

圖 3.2.1 接觸式微處理器卡的典型結構………...…6 圖 4.1.1 智慧卡檔案管理系統的檔案內部結 構………9

(5)

構………....11 圖 4.1.3 邏輯檔案的組 織………...……..12 圖 4.2.1 ISO/IEC 7816-4 的智慧卡作業系統檔案名稱.……….……13 圖 4.4.1 智慧卡 OS 的 EF 檔案結構的種 類.………...18 圖 4.4.2 空白檔案結 構……….….19 圖 4.4.3 從空白檔案裡讀出位移量 3 個位元組的 5 個位元組資 料……..19 圖 4.4.4 線性固定的檔案結 構………..20 圖 4.4.5 線性可變動的檔案結 構………..21 圖 4.4.6 循環的檔案結 構………..22 圖 5.1.1 終端機端和智慧卡端的傳輸過 程………..……25 圖 5.1.2 在終端機和智慧卡間的 OSI 通訊模 式……….26 圖 5.2.1 資料傳輸字元的結 構……….……27 圖 6.1.1 重設訊號和 ATR 開始的時脈 圖………30 圖 6.1.2 ATR 字 元……….………31

(6)

圖 6.1.3 T0 的編 碼………32 圖 6.1.4 TD(i)的編 碼………33 圖 6.1.5 時率 Fi 的轉 換………34 圖 6.1.6 時率 Fi 的轉 換………34 圖 6.1.7 鮑率 Di 的調 整………34 圖 6.1.8 鮑率 Di 的調整………...………34 圖 6.1.9 最大程式電流 I...………35 圖 6.1.10 TA(2)的編 碼………...35 圖 6.1.11 X 時脈的停 止……….………36 圖 6.1.12 U class 的參 考…….………...36 圖 7.4.1 Transparent EF 的結 構………38 圖 7.4.2 線性固定的基本檔之結 構 ………39 圖 7.4.3 環式基本檔的結 構 ………40 圖 7.5.1 GSM 應用的邏輯結

(7)

構………..…………..………41 圖 8.1.1 APDU 格 式………43 圖 8.1.2 無輸入/無輸 出………...……….…………44 圖 8.1.3 無輸出/已知長度的輸 出………...……….………44 圖 8.1.4 無輸入/未知長度的輸 出………44 圖 8.1.5 輸入/無輸 出………45 圖 8.1.6 輸入/已知或未知長度的輸 出………45 圖 8.3.1 檔案狀 態………..………49 圖 9.4.1 讀取電話簿的流程圖………58 圖 9.5.1 電話號碼排列順 序……….………61 圖 9.6.1 顯示第一 筆……….………67 圖 9.6.2 顯示出下一筆資 料……….………68 圖 9.6.3 最近撥出的電 話……….………69 圖 9.6.4 錯誤訊 息……….………70

(8)

圖 9.6.5 密碼正 確………..………71 圖 9.6.6 顯示出紀 錄……….………72 圖 9.6.7 查詢下一 筆……….………73 表 8.2.1 指令的編 碼………..47 表 8.4.1 卡片傳回的狀態情 形……….…..…53

第一章 前言

1.1 動機 每位逢甲大學學生的學生證正面左上方,都有一個電子錢包的晶片, 當你先由亞太銀行的戶頭轉帳到電子錢包後,就可以在學校的福利社用學 生證來刷卡買東西和打公共電話,這對學生來說,不需要自己掏錢拿現金

(9)

來作交易的確是蠻方便的一件事,所以我們就對 Smart Card 產生好奇, 想經由專題的研究,藉此了解 Smart Card 的結構特性然後進而可以實作 出有關 Smart Card 的應用。

1.2 目的

Smart Card 的應用其實蠻多的,例如:(看 smart card

handbook!),原本本組想做可以讀取學生證裡頭電子錢包的金額的應 用,但是因為有點複雜以及參考資料來源的一些問題,我們就退而求其 次。在台灣現在幾乎人人手上都有一支手機,而手機中的 SIM 卡也是 Smart Card 的應用,所以我們決定做讀取 SIM 卡中所存之電話簿的功能。 1.3 工作分配

陳律均:介紹 Smart Card 林蕙琪:Smart Card 的協定 洪秋韻:Smart Card 實作

(10)

第二章 智慧卡的歷史

智慧卡的發展起源於為了解決電子化資料處理的膨脹這個問題而創 造出完善的新的可能性。1970 年代微電子學有大規模的進步,實現了在 一個測量只有幾平方公釐大小的矽晶片上整合資料儲存和邏輯運算。早在 1968 年已由德國發明家 Jürgen Dethloff 及 Helmut Götrupp,將積體電路 併入身分證的想法,包含其中應用申請了專利。 隨後在 1970 年日本的 Kunitaka Arimura 製作相似的專利應用。然而智慧卡第一次真正的進步 發展是在 1974 年法國,由 Roland Moreno 在當時登記他的智慧卡 的專 利。在那一次之後半導體工業可提供合理價格的必要積體電路。雖然如此, 在第一個雛形做出來之前仍有許多技術上的問題需要解決,其中包含一些 積體電路晶片必須被轉換作成可靠的產品,並且可用機器大量製造又有令 人滿意的品質和合理的價格。因為智慧卡的技術基礎發明是由德國和法國 而來,所以由這兩個國家在智慧卡的發展及市場推廣扮演著領導的地位並 不會令人感到特別驚訝。

當法國 PTT(郵政及電信服務處;postal and telecommunications services)在 1984 年,成功地實現一張試驗性的電話卡,達成這個偉大 的突破。在這張試驗性的卡片上,智慧卡立即被證實符合所有預期,有著 顧及防護抗纂改及高度可靠性。智慧卡在新的應用上有重大的突破,而非 在傳統卡片已經使用的區域。而後,智慧卡被改善成理想的導體。它被製 成每個人獲得高層級的安全(基於密碼編制),因為它可以安全地儲存祕 密文字且亦可執行密碼的演算法。 電子錢系統被證實成特別的能夠吸引顧客對於國際間金融交易使用 智慧卡。第一個這樣的系統稱為 Danmønt 於 1992 年在丹麥加入交易中。

(11)

的規格 prEN 1546。這類系統的使用於歐洲以外的地區也正在增加中。甚 至在美國,直到現在對智慧卡 系統難以接受其根源的地方,智慧卡電子 錢系統由 Visa 在 1996 年於亞特蘭大舉辦的奧林匹克夏季競賽(Olympic Summer Games)中測試。經由網際網路付款提供了電子錢的使用一個 新且大有可為的領域。然而問題伴隨著要將小額付款變得安全,但匿名者 遍及世界經由公開的網際網路,還尚未有令人滿意的方法能解決。智慧卡 能在解決這些問題上扮演一個關鍵的角色。 智慧卡的體積小容易攜帶,重要的是在功能上高度的機動性。甚至允 許一張已經在服務卡,可以為了新的應用而重新編製程式,在使用上達到 優於傳統卡片的應用也展開了全新的領域。

第三章 應用的範圍

3.1 記憶卡(memory card) 智慧卡最早的廣泛應用就是記憶卡,用於在電話卡的使用, 當它被使用時,儲存在卡片中的數值會依據時間來收費而減少數 值。這種類型的卡片不只有電話卡的應用而已,舉例來說可以事 先付費,使用時不需要現金交易的服務都可以用記憶卡來做,舉 例最可能的使用在:區域公共傳輸系統、各式的販賣機、咖啡廳、 游泳池和停車場等等的地方。 這種卡片的優點是它的技術簡單,所以成本也低,缺點則是 當它的內容空了之後,就不能再被使用,此時就要做卡片的收集 或者是將它丟棄。另一個最典型的應用就是健保卡,最早從 1994 年,在德國的健康保險計畫下,每人都有一張健保卡,可將病人 的病歷資訊都存放在卡片之中,用簡單的儀器便可以重新讀取資 料。

(12)

擾,它可以用在相當於現金的一張卡片或身分認證的卡片,只要 是低成本為考量的系統都可以用記憶卡來做。 3.2 微處理器卡(microprocessor card) 微處理器卡的第一個應用是法國的金融卡,它們儲存密碼和 執行現代密碼學演算法的功能,使得它高度地實作在安全的離線 金融系統。 由於微處理器是自由地並可程式化的建構在卡片中,微處理 器卡的功能會被可用的儲存空間和計算單元的能力所限制,當一 個人想像實作智慧卡系統時,便需要廣泛及新的 IC 的製作,就變 成是技術問題。 隨著 1990 年之後,由於大量生產使得智慧卡的成本減少,新 的應用也逐年出現,智慧卡用於手機上的應用在國際間擴散便使 得它特別地重要。在德國國內的 C 網路(analogue cellular telephone network)用於可攜帶式的使用者設備成功地測試之 後,智慧卡被指定為歐洲數位電話系統(GSM)的存取媒體。 另一方面,智慧卡賦予完成存取電話網路的高度安全性的能 力,同時,它提供了可能性,即銷售手機的優點,它讓網路的操 作者和服務的提供者,將手機的買賣和服務的機構分隔開的新的 作風,如果沒有智慧卡,手機絕不可能跨越歐洲這麼快地變成全 世界的規範。 微處理器卡晶片的心臟是一個處理器。其如同一規則被四個 附加功能的區塊包圍:mask ROM, EEPROM,,RAM and an I/O port。下圖展示出此格式的一個典型元件之結構。

(13)

Mask ROM 包含了晶片在其製作時已燒入(burned in)的 作業系統。 ROM 的內容對於生產運作的所有晶片是如此相同 Coprocessor + processor Working memory Operating system CLK I/O RST Vcc GND EEPROM ROM RAM CPU NPU Data memory + operating system routines <圖 3.2.1 這是一個處理器的接觸式微處理器卡的典型結構。此 圖只展示出基本能量及資料流,並非細部的線路圖表。>

(14)

的,且其在晶片的使用期間無法被改變。

EEPROM 是晶片的穩定記憶體(non-volatile memory)。資 料及程式碼可在作業系統的控制之下從 EEPROM 做寫入和讀取 的動作。

RAM 是處理器的工作記憶體(working memory)。此記憶體 是不穩定的,且當此晶片的電源被關掉後,所有儲存於其中的資料 將會全部遺失。 串聯的 I/O 介面通常由一個單一暫存器組成,藉由以字元為 單位的方法傳送資料。 微處理器卡在使用上是非常富有彈性的。舉一最簡單的例 子,微處理器卡包含對於單一應用的程式最佳化,因此只能在這個 應用中使用。然而近代智慧卡的作業系統允許一些不同的應用合成 一體到單一的卡中。在此情況下,ROM 只包含作業系統中的基本 指令,同時程式的應用特性部份(application-specific)在卡已生 產後,被載入到 EEPROM。最近的發展甚至允許應用程式可被載 入到能

溯及既往的

卡中,即便此卡已經被個人化並分發給持卡 者。特殊的硬體和軟體被測量以確保個別的應用藉由此性能不妨礙 多變的安全需求。 另外, 最佳化的微處理器晶片最近發展出有著 高度執行能力以及超大記憶容量。因此我們可以預期在不久的將來 能取得更適合的卡。

(15)

第四章 智慧卡檔案

除了認證的機制外,所有資料都儲存在智慧卡之上;智慧卡在這 有一個關於其它儲存媒體(如:軟磁片)的關鍵性條件,就是會取得資料再 組合成某些條件。 在剛開始的智慧卡只有很多或很少的直接定址記憶體的區域,是 被使用在寫或讀資料;詳述著記憶體地址的資料會被執行。到了現代,各 種智慧卡的新種類都已經完成了,包括有符號且硬體獨立定址的多階層檔 案管理系統。 這些檔案管理系統在智慧卡型態上有某些特定的特徵,其中最值 得注意的一點是它沒有人機介面;裡頭的檔案都是定址為十六進制碼,且 所有的命令皆嚴格得在這定址法的基礎下,即使只發生在兩台電腦間的通 訊裡;相同特別的一點就是,這些檔案管理系統是被指定用於一個小範圍

(16)

用者”是台電腦的話,是不會反應出任何缺點的。 通常沒有那種精巧的記憶體管理來使記憶體使用量盡其可能得變 小;假如說有一檔案被刪除了,這個空出來的空間是不會因為有下個新的 檔案而自動變成可用的;當智慧卡被初始化或個人化後,所有創造出來的 檔案才會被載入智慧卡裡,接下來若要改變檔案的內容則是有限的了。 記憶體的特性也比較偏於使用在記憶體管理的那方面;在 EEPROM 裡的記憶體分頁不能夠寫入或消去無限次,例如:PC 的硬碟。 這也就表示說,有特別的檔案屬性可讓資料被重覆儲存,以至於任何的錯 誤有可能發生。 內部檔案結構 某些智慧卡的檔案管理系統有物件導向結構;這就是說,有 關一個檔案的所有資料都會被自己存在檔案裡;一條結果的原則就是說, 在任何動作運作之前,檔案必須被選擇;在這些物件導向系統裡的檔案總 是會被分為兩部份,第一部份是檔案頭,裡面有包含 layout 和檔案結構 的資料,與執行的條件;另一部份就是檔案內容(file body),很多資料會 儲存在這部份;而檔案頭和檔案內容則是用一個指位器連結著。 檔案頭 檔案 管理的資料

(17)

<圖 4.1.1 智慧卡檔案管理系統的檔案內部結構> 除了提供更好的資料結構化,對資料項目來說,配置也要有較好 的實體安全優點;能抓住所有檔案的調頁導向(page-oriented) EEPROM 只允許有限數目的寫入/消除 cycle;檔案頭和檔案內容也常分配在不同的 記憶體分頁中;從不會改變的檔案頭負責儲存執行條件,對檔案內容有寫 或消除的錯誤並不會影響到這些執行條件;若檔案頭和檔案內容被分派在 同一個記憶體的分頁,就有可能會特意產生寫入的錯誤,而去改變執行條 件,以導致從檔案內容裡的機密資料會被讀到。 4.1 檔案種類 在 7816-4 標準下的智慧卡,跟 Unix 系統或 DOS 的檔案結構滿相像 的;其中最大的不同是在於智慧卡不包含特殊應用的檔案,如:對特殊 word 程式的特別檔案;在智慧卡中,只有標準化的檔案結構會被使用到。 在智慧卡裡,有兩項基本的檔案;第一項是 directory files,也稱為

(18)

DF(Dedicated Files);第二項則是 EF(Elementary Files),擁有真實可使 用資料的檔案;DF 是扮演一種包含其它資料與低 level DFs 和 EFs 的檔 案空間;EF 則被分類到外部和作業系統裡。 <圖 4.1.2 ISO/IEC7816-4 智慧卡檔案結構> a. MF: 在智慧卡重設後,會被優先選取;其檔案包含所有其他指令集和 所有檔案;MF 是屬於 DF 的特殊型態,其說明了在智慧卡記憶體的整體 延伸;在每張智慧卡裡都會出現 MF。 7816-4的檔案樹 directories 資料檔案 MF(Master File) DF(Dedicated File) EF(Elementary File) 內部 EF 工作 EF

(19)

b. DF:是一個可以把其他檔案組織起來的指令集,一個 DF 可能又包含 其他的 DF,原則上,並沒有限制 DF 層次的數目,但倒很少在 MF 下有 超過兩層 DF 的實例,以至於在智慧卡中記憶體有非常有限的數量。 c. EF:在 EF 裡,需要有用資料來分配應用,EF 會被直接分配在 MF 或 DF 底下;EF 通常在內部檔案結構裡,去允許在最小記憶體儲存資料, 並且邏輯最佳化資料結構;在 PC 裡,EF 和檔案最主要的不同在於內部 資料結構是應用層決定,而不是作業系統決定。 (i)工作 EF:所有應用的資料都是在終端機寫入或讀出的,也就是 說,在外部的所有資料都會分配至工作 EF 裡。 (ii)內部 EF:除了應用的 EF 外,也有作業系統自己儲存,應用的執 行資料,機密的重點,或者是程式碼;作業系統會對執行的資料做特 別的保護,而這些系統檔案會用兩種不同的方式結合成檔案管理系 統,由於在 ISO/IEC 標準下有詳細說明著,這些檔案會被配置到有意 義的應用 DF 中,且是看不見的,所以這些檔案都不能被選擇到;智 慧卡的作業系統會完全且清楚地管理這些檔案,就像 Mac OS 的資源 檔案管理一樣,其實也像是在 DOS 下使用的檔案管理。 MF DF DF DF DF EF EF EF EF EF EF EF

(20)

<圖 4.1.3 邏輯檔案的組織> d. 應用檔案:所有包含有用資料的檔案總會結合在同一個單一的 DF 裡, 就會產生一個清晰且容易了解的結構,然而也會使得輸入一個新的應用進 入智慧卡這個動作更簡單,且創造出適當的 DF。 4.2 檔案名稱 <圖 4.2.1 ISO/IEC 7816-4 的智慧卡作業系統檔案名稱> 從占有確切定義記憶體區域的簡易應用來說,直接實體的執行可以省 去很多記憶體空間;也就是可以從終端機的電腦裡去執行所有檔案,不過 也是會有缺點出現,就像是直接實體執行並不能滿足每種軟體設計的規 格,它也會產生對軟體週邊和對智慧卡的微程式有不同定址空間的重大問 題。 使用邏輯檔案名稱的觀念是比較好的,且也會比較容易延伸下去;也 可以說,在未來世界裡,記憶智慧卡的實體檔案定址法會持續被使用著。 7816-4 的檔案名稱 MF DF EF FID FID DF 名稱 Short FID FID

(21)

a. FID(The File Identifier) 在 ISO/IEC 7816-4 的標準下,每個包含指令集的檔案會有 2 個位 元組 FID,用來選擇檔案。 在指令集結構的 FID 會被選擇,檔案才會被正確得選擇,也就會 阻止讓有相同的 DF 的不同檔案去使用到一樣的 FID;DF 也不會有相 同 FID,因為這種情形可能會讓 OS 決定不了要先選擇 DF 或 EF。 下列的規則提供確切 FID 的選擇: 規則 1:有單一指令集的所有 EF 都必須有不同的 FID。 規則 2:巢狀指令集不會有相同的 FID。 規則 3:有 MF 或 DF 的 EF 不會有相同的 FID,例如在下個更高 或下個更低的指令集中。

b. Short FID(Short File Identifier)

在命令的立即情況下,Short FIDs 會被使用在固有檔案選擇中; 對 EF 來說,Short FIDs 是最佳化的,所以不必再被指派;Short FIDs 會和有檔案選擇的命令一起被傳送;若選擇是固定的話,Short FIDs 只有 5 個位元長。 c. DF name DF 包含著被分開的應用使用的檔案;DF 是一種目錄,其包括了 EFs 和其它的 DFs;對未來而言,提供 2 位元組的定址空間會變得很 小;基本上,每個 DF 除了有 FID 外,還會有 DF 名稱,其長度為 1 到 16 個位元組;而 DF 名稱會提供適當的位址空間,讓每張智慧卡 可以透過外界來明確得定義;當 DF 名稱是可以隨意選擇時,就有可 能發生兩個不同 DF 有一樣的 DF 名稱;因此在 IEC/ISO 7816-5 標準 下,就定義 DF 名稱只能在 AIDs(application identifier)下一起被使用。 d.AID(Structure and coding of the application identifier)

(22)

AID 包括兩個資料單元,第一個資料單元是 RID(registered idientifier),有固定五個位元組長度;一個國家或國際登記依據會指派 且包含一個區碼,讓一個應用的種類和一個數目就可以指往應用的主 方;這個數字碼說明每個 RID 都只能被指派一次,所以它可以廣泛得 被使用於定義一個特別的應用;不過很不幸的,至少在德國,被指派 的 RIDs 的列表是屬於機密的,所以 80RIDs 就不能現在建立出來。 而在必須的情況下,一個應用主方會在 RID 後安置一個

PIX(proprietary application identifier extension);PIX 可能有 11 個位 元組以上的長度,是 AID 最佳化的第二部份。 4.3 檔案選擇 物件導向檔案系統會在執行檔案前先選擇檔案;檔案選擇會告訴 OS 檔案隨後將要被執行;一個新檔案的選擇成功會讓之前的選擇變成無效 的,也就是說在任何一個時間內,只有一個檔案會被選擇到;因為 FIDs 可能會被任意選取,某些限制就會被強加於檔案的自由定址上;否則,就 很容易發生在一棵檔案樹上,有相同 FID 的數個檔案都是有效的,然而 OS 就必須去決定究竟是哪個檔案被指到;為了避免這樣的情形發生,OS 檔案管理的搜尋演算法是獨立的,就可以有效對檔案選擇做最佳化。 假如在檔案樹下,所有使用的 FIDs 是唯一的,就會有所不一樣;若 從數個目錄亞去選擇所要的檔案是很容易的,不過這個情形是不能永遠被 保證的;同理,在某些邊際下,選擇都是唯一的,不然所要檔案的確切選 擇就有可能不確定了;MF 總是可以從檔案樹中的任何地方被選取,而它 的 FID 在檔案樹中也是唯一的;選擇 MF 下第一層的 DF 只可能從同一層 的 DF 或從 MF。

a.Selecting directories(MF and DF)

(23)

值,在檔案樹上可能從任何地方選擇 MF,都只可能在樹上發生一次;因 為在重設後,OS 會確切得選擇一個 MF,而當 MF 被選擇,智慧卡重設 後就會立即儲存所存在的選擇狀態;經過 DF 的 FIDs 或經過 DF 名稱, DF 就會被選擇出來。 b.明顯的 EF 選擇(Explicit EF selection) 在真正執行檔案之前,SELECT FILE 會被送至智慧卡裡,這個命令 包含了如同參數一樣的 2 個位元組 FID,而當選擇完後,所有後來的命令 就會開始執行下去。 c.絕對的 EF 選擇(Implicit EF selection)

被充當執行檔案的命令參數的 Short FID 會選擇檔案過程的 Implicit 選擇名稱,有一串的規定是用來說明 Implicit EF 選擇使用;從目錄邊緣 裡,選擇絕對的檔案是不可能發生的;另外,絕對的選擇只可能發生在允 許 Short FID 被當成參數的某些執行命令;絕對選擇的優點是,它可以讓 一個檔案和一個單一的命令一起選擇和執行,這樣子會讓一個 SELECT FILE 命令在很多情況下變成不必要的,也就是簡化了命令的順序;由於 要減少通訊的需要,絕對的選擇會讓執行速度明顯地變高。 d.從路徑名稱選擇 除了直接選擇外,ISO/IEC 標準也允許兩種從檔案名稱來做明顯檔案 選擇的補充方法;第一種方法是,從現在的選擇檔案到目的檔案的路徑必 須通到 OS;第二種方法是讓從 MF 開始的路徑通過;這兩種方法都會完 整地被結合進智慧卡的 OS 裡。 4.4 EF 檔案結構 相反於 DOS 系統的檔案,在智慧卡裡的 EFs 有內部檔案結構;根據 檔案使用的每個 EF,結構會被分開選擇;這對外部世界有很大的優點可 言,因為這些內部結構會讓資料單元結合起來,以致於他們可以非常快且

(24)

直接得執行檔案。 這個資料結構的管理會要求在智慧卡裡有相當數量的程式碼,這就是 為什麼資料結構並非所有都是互相對稱的,但是可能只發生在實際例子裡 總被需要的表格中。 <圖 4.4.1 智慧卡 OS 的 EF 檔案結構的種類> a.空白的檔案結構 這個資料結構通常是兩選一結構或是無特定結構;也就是說,空白的 資料結構沒有內部結構。檔案裡的資訊可以加上位移值的使用,而用位元 組或區塊來做讀或寫的執行;例如:READ BINARY,WRITE BINARY 和 UPDATE BINARY。 空白檔案結構最少只有一個位元組,倒是在任何標準下並沒有最大尺 寸的規定,最大數目的位元組可以在短格式(255)下或是在長格式(65,536) 下被讀出,結合最大的位移值(32,767),會使各別的最大尺寸到達 65,791 EF 結構 空白的 記錄導向的 分離的 空白的 執行的 線性固定的 線性可變動的 資料庫 資料物件 程序控制 循環的

(25)

理所當然是虛構的; <圖 4.4.2 空白檔案結構> <圖 4.4.3 從空白檔案裡讀出位移量 3 個位元組的 5 個位元組資料> 這個檔案結構主要是要使用在沒有內部結構的資料,或是非常小 的資料;一個典型的應用例子就是,從終端機可讀出智慧卡中儲存的 數位化的通行證照片;如果可能的話,線性和一維的資料結構就會被 使用在模擬其它資料結構上;理所當然,這樣的終端機會執行一個較 複雜的型態,因此有關檔案構造的參數會被存在檔案本身裡。 b.線性固定的檔案結構 這個檔案結構是建立在連結固定長度的記錄上,一個記錄會包含一串 分散的位元組;有資料結構的分散位元組是可以隨意被執行的;執行的最 小單位是一個記錄,也就是說,不可能只執行一個記錄的單一部份;像 READ RECORD,ERITE RECORD 和 UPDATE RECORD 都可以在這種 資料結構下讀或寫。 1 2 3 4 5 … … … m 1 2 3 4 5 6 7 8 9 10 位移量 資料 length

(26)

<圖 4.4.4 線性固定的檔案結構> 執行命令決定單一記錄,而其範圍是從 1 至 254 個位元組;不過檔案 裡的所有記錄都有一樣的長度;這種資料結構的典型範例就是”電話簿”, 首先是出現姓名,接著在固定地方放著相關的電話號碼。 c.線性可變動的檔案結構 在線性固定的檔案結構裡的所有記錄會造成記憶體空間的浪費,因此 記錄導向的資料會有可變動長度的記錄,每筆記錄都會有分別定義的長 度;而其不可避免的結果就是,每筆記錄會有包含資料長度的補充區域。 1 2 3 4 5 … … … m 位元組數目 1 2 … … n 記錄數目

(27)

<圖 4.4.5 線性可變動的檔案結構> 當有高度變動長度的記錄被儲存或是智慧卡記憶體被儲存,這個檔案 結構是很適合使用的;管理檔案結構不但會要求在智慧卡 OS 的程式碼, 而且額外的記憶體會儲存記錄長度的資料;由於這個因素,有小記憶體的 微程式 OS 通常不會用這種資料結構,所以在 ISO/IEC 7816-4 標準下有 一些部份是要考量到這些限制的。 d.循環的檔案結構 1 2 3 4 5 … … … m 記錄長度 1 2 … … n 記錄數目

(28)

<圖 4.4.6 循環的檔案結構> 循環的檔案結構是建構在線性固定的檔案結構下,其包含了有固定長 度的記錄;除此之外,在 EF 裡,有一個指位器會指出最後被寫入的記錄, 這個記錄通常是被編號為記錄 1;當下次寫入的執行發生,若這個指位器 到達在 EF 中最後一筆記錄,OS 會自動設定,去指到第一筆記錄。這一 種檔案結構通常使用在智慧卡的對數檔案中,其最新的輸入會重疊在舊的 輸入上。 e.執行的檔案結構 這一種檔案結構是建立在空白的檔案結構下;在 EN 7826-3 標準有敘 述,且提供了數種 OS 延伸的可能性;這檔案結構並不偏用在儲存資料, 但是卻偏用於儲存執行的程式碼;有執行結構的檔案會使用和空白的檔案 一樣的命令;當然的,這種結構創造出一種”後門”,因此會寫這種檔案的 某些人可以去下載他/她所擁有的程式碼到智慧卡裡,其中也包括了木馬 程式。 f.資料庫的檔案結構 1 2 3 4 5 … … … m 位元組數目 1 2 … … n 記錄數目

(29)

Query Language)的智慧卡的 SQL 子集合;為了儲存在智慧卡裡檔案系 統的資料,以至於 SCQL 命令會讀到,提供一種適當的檔案結構是必要 的;這種結構的 layout 是沒被標準化的,取而代之的是它的設計與分散 的 OS 製造者是可以相提並論的;一個資料庫檔案儲存真正有使用到的資 料,很多種資料庫的觀點,執行的特權和使用者簡介。 g.資料物件的檔案結構

7816-4 的命令—PUT DATA 和 GET DATA 使用於儲存在智慧卡裡的 TLV 碼的資料物件,且讀出這種被存起來的物件;不是檔案管理系統的 完全獨立,就是檔案管理系統為了儲存資料物件而使用一種特別的結構會 被完成;若這種工具有檔案管理系統的,一個少量變動得空白檔案或線性 固定檔案就會被當成資料物件的儲存體位置。 h.程序控制的檔案結構 假如智慧卡的 OS 有命令順序的程序控制器,有關被接受命令的資訊 也會被存在記憶體裡;這也不是被標準化的,若無例外的話,每個有程序 控制的 OS 有它自己的格式,這會跟其他 OS 有所矛盾。

第五章 智慧卡資料傳輸(Smart Card Data Transfer)

5.1 序言

在智慧卡和終端機端的傳送過程中,是屬於單向溝通的。數位資料在 這兩端間傳送,當一方傳送資料時,則另一方當接收者的角色。而輪流被 接收和傳送的過程稱為半雙工(half-duplex procedure)。

(30)

智慧卡的通訊功能通常是在終端機端就被初使化了,所以說智慧卡會 從終端機端回應一些命令來說明外部要求已經送資料進來了。這也就說明 了終端機端和智慧卡端的主僕關係,終端機端是扮演 master 的角色,而 智慧卡端則是當 slave。 把一張智慧卡插入終端機端後,智慧卡的接腳會連結至終端機端的接 腳;第五支接腳會啟動正確的順序,接著智慧卡會自動執行 power-on 的 reset 動作,同時送 ATR(Answer To Reset)給終端機端;終端機端會評估 這個 ATR,看出智慧卡裡面紀錄的各項參數資訊和資料傳送內容,並且 送出第一個命令出去。而當智慧卡這邊收到這個命令後,會執行此命令且 送回應給終端機端;這項來回的命令和回應會持續直到 card 不再有任何 外部要求為止。

在 ATR 和第一個送回到智慧卡的命令之間,終端機端也能送出一個 PTS(Protocol Type Select)命令;所謂的 PTS 像 ATR 一樣是獨立於傳輸 協定的,且會在智慧卡的協定中設定各種不同的傳送參數。以上所說終端 機端和智慧卡端的傳輸過程由<圖 5.1.1>做說明。

從智慧卡傳出和輸入智慧卡的整個資料傳輸過程會使用到 OSI 層 (Open System Interconnection layer)的模式。從 I/O 線上的電子訊號可 以區別出在實際傳輸協定中的邏輯資訊和利用到這些資料的相關應用;在 這些層中的相關性和相互作用都已經被一些國際標準的機構詳細得規定 住,而這些關係會在<圖 5.1.2>中看到。 全部的參數和設定會在接下來的內容中討論到;通常智慧卡會因為有 限的記憶體空間,而不會接受所有傳輸協定的規則。從機能的觀點來說, 很多功能在一個特殊應用或智慧卡中可以選擇出一小段簡易範圍的最佳 設定;因為考慮到這張卡必須在各種不同的終端機端都可以正常的使用, 所以選擇到的參數不能太古怪少用。

(31)

<圖 5.1.1> <圖 5.1.2> OSI第七層 應用層 OSI第二層 鍵結層 OSI第一層 實體層 ISO/IEC 7816-4 ISO/IEC 7816-7 EN 726-3 prEN 1546-3 GSM 11.11 ISO/IEC 7816-3 (T=0) ISO/IEC 7816-3 Amd 1 (T=1) ISO/IEC 10 536-4 (T=2)

ISO/IEC 7816-3 (contact-type cards) ISO/IEC 10 536-3 (contactless cards)

智慧卡 終端機端 需要 PTS? yes no Reset ATR PTS要求 PTS回應 命令 1 回應 1

(32)

5.2 實體傳輸層 在實體層裡頭的所有參數都在國際智慧卡標準化 ISO/IEC 7816-3 中 詳細敘述著。整個智慧卡的資料交換是屬於數位的,也就是說使用邏輯 值”0”和”1”來表示;若用伏特來表示的話,就是 0V 和 5V,在新的微程式 中則會提供 3V 來做表示;到底要選擇 0V 或 3V/5V 就要看智慧卡傳出第 一個 ATR 位元組時的指示,其中有分「直接規則」是指說邏輯 1 表示 +3V/+5V,「反向規則」則是當邏輯 0 時才表示+3V/+5V;當沒有資料傳 輸的時候,I/O 通常會在等待狀況中顯示 high 的狀態。 智慧卡和外部要求的通訊是連續性的;資料通常是一串位元字串,是 由八個位元所組合而成的,而位元的順序是有規定所尋的,像在「直接規 則」裡,在”開始位元”後的第一個位元是位元組中最不重要的位元;而在 「反向規則」中則是在”開始位元”後的第一個位元就放最重要的位元。如 <圖 5.2.1>。

(33)

<圖 5.2.1> 在智慧卡和終端機之間所做的資料轉換是非同步的,所以說兩端都會 提供額外補充的同步位元給每個傳送的位元組;”開始位元”會加在每個位 元組的前頭,讓接收端知道傳輸位元組的先後順序;而傳送端也會加上一 個 parity 位元來做錯誤確認,且會在位元組後面放一個會兩個”停止位元” 來說明此位元組的結束;在 T=0 的協定中,分派到”停止位元”的這段時間 稱為”guard time”,接收端和發送端會利用這段時間來準備下一次的位元 組傳輸;每個位元組的 parity 位元通常是偶數的(位元組的數目是奇數的 話,parity 位元為`1`;當位元組數目是偶數的話,parity 位元則為`0`。) High low 開始位元 八個資料位元 Parity位元 t

(34)

第六章 ATR(Answer to Reset)

提供電壓後,clock 端和重設訊號就會被請求,接著智慧卡經過 I/O 領導來送出 ATR。這個最多可包含 33 個位元組的資訊串通常在 ISO/IEC 7816-3 標準要求下被送出 372 的分離值,它包括了很多給傳輸協定和智 慧卡的資料;ATR 很少有到達最大長度的時候,通常只包括很少的位元 組。 ATR 傳輸的開始必需在終端機送出 reset 訊號後,發生

400~40,000 clock cycle;當在 4.9152MHz 這個區段是 81.38us~8.14ms 時, ATR 傳輸開始會回應給 112u~11.20ms 這個區段(3.5712MHz 的 clock rate);假如終端機沒有回應這個區段的 ATR 開始值,它會一直重覆 這個動作順序很多次,試著去檢測這個 ATR;若全都試過且失敗的話, 終端機就會把智慧卡視為錯誤的,相對回應回去。

(35)

<圖 6.1.1>

根據 ISO/IEC 7816-3 標準,在兩個連續位元組邊緣分界的時間會達 到 9600etu,這段時間稱為初始等待時間(initial waiting time);其一秒是 3.5712 的 clock rate;這就表示這個標準允許在 ATR 分離的位元組間有 一秒的延遲時間;在一些智慧卡的作業系統裡,這段時間是用來做內部計 算和 EEPROM 寫入執行的。 在 ISO/IEC 7816-3 標準下有詳細地說明和定義 ATR 的資料字串和資 料單元;前兩個位元 TS 和 T0 定義著很多種基本的傳輸參數以及結果位 元;介面字元(interface characters)詳述著協定裡,接下來對於資料傳輸 中的特別且重要傳輸參數;歷史字元(historical characters)敘述著智慧卡 基本功能的範圍;而確認字元(check characters)就是前面位元組的確認 總和,可以依據傳輸協定而隨意當成 ATR 的最後位元組來送出。 6.1 ATR 字元 Reset t 未定義地區 I/O T1 開始位元 t High Low

(36)

<圖 6.1.2> TS: 設定編碼字元的規定,有兩種可能的情況: - 收到的訊號 0 與 1 要反過來,表示 0 其實是代表 1,1 代表 0, 此時 TS 是 3F。 - 收到的訊號 0 就是 0,1 就為 1,此時 TS 是 3B。 T0:可分成兩部分。

(37)

-右邊四位元為 K,代表 historical bytes 的個數(至多 16 個)。

b8 b7 b6 b5 b4 b3 b2 b1

<圖 6.1.3> Y(1)... interface bytes 的出現

如果 b5=1,TA(1)就會出現. 如果 b6=1,TB(1)就會出現. 如果 b7=1,TC(1)就會出現. 如果 b8=1,TD(1)就會出現. K….. historical bytes 的個數. TA(i)TB(i)TC(i):分成兩種類型。 -Global bytes 表示卡片 IC 的參數。 -Specific bytes 表示卡片所提供的傳輸協定的參數。

TA(1)TB(1)TC(1)TA(2)TB(2)是 global bytes,TC(2) 由 T=0 所定義,所以為 specific。 TD(i):分成兩部分。 -左邊高四位元為 Y(i+1)哪一個位元為 1,指示著之後 interface bytes 的出現。 -右邊低四位元為 T,代表協定的參考。 b8 b7 b6 b5 b4 b3 b2 b1 < 圖 6.1.4>

Y(i+1)…. interface bytes 的出現

Y(i+1) T Y(1) K

(38)

若 b5=1,則 TA(i+1)就會出現. 若 b6=1,則 TB(i+1)就會出現. 若 b7=1,則 TC(i+1)就會出現. 若 b8=1,則 TD(i+1)就會出現. T….. 協定的參考.

note:如果 TD(i)為 0 的話,則 TA(i+1)TB(i+1) TC(i+1)和 TD(i+1)也都不會出現。

Historical bytes T1 T2… TK

放置了一些廠商紀錄的資訊,例如:卡片的製造商、卡片中的 chip、在 chip 中的 ROM、和卡片在生命週期的狀態。如果 K 不 等於零,那麼 K 的數目就是 historical bytes 的個數。

Check byte TCK

如果 T=0 的協定,則沒有 TCK,但在其他的情況下,應該要有 TCK。

Global interface bytes 的內容 TA(1)

- FI 從 b8 到 b5 的 bits,代表 clock rate 的參考。 (參照圖 6.1.5)

- DI 從 b4 到 b1 的 bits,代表 baud rate 的參考。 (參照圖 6.1.6) FI 0000 0001 0010 0011 0100 0101 0110 0111 Fi 372 372 558 744 1116 1488 1860 RFU f (max.)MHz 4 5 6 8 12 16 20 -

(39)

<圖 6.1.5>

FI 1000 1001 1010 1011 1100 1101 1110 1111

Fi RFU 512 768 1024 1536 2048 RFU RFU

f (max.)MHz - 5 7.5 10 15 20 - - <圖 6.1.6> DI 0000 0001 0010 0011 0100 0101 0110 0111 Di RFU 1 2 4 8 16 32 RFU <圖 6.1.7> DI 1000 1001 1010 1011 1100 1101 1110 1111

Di 12 20 RFU RFU RFU RFU RFU RFU

<圖 6.1.8> TB(1)預設在 b8=0 的情況下編碼

- II 為 b7 b6 的 bits,代表最大 programming 的電流。(參照圖 6.1.9)

- PI1 為 b5 到 b1 的 bits,代表 programming 的電壓。

II 00 01 10 11

I 25 50 RFU RFU

<圖 6.1.9> TC(1)編碼

(40)

TA(2)特有的模式 byte(參照圖 6.1.10) b8 b7 b6 b5 b4 b3 b2 b1 <圖 6.1.10> b8…..指示是否有改變操作模式的能力 b8=0,可改變;b8=1,不可改變。 b7-b6….RFU(00 未用到)

b5…..由 interface bytes 定義的話則 b5=0,不是由 interface bytes,而是隱性定義則為 b5=1。

TB(2)是 PI1 的替代

- PI2 的 8 個位元也是代表 programming 電壓的值。 TA(i)當 T=15 在 TD(i-1)且 i>2 的情況下

- XI,在 b8 b7 兩個 bits 指示出 clock stop 的參考。 (參照圖 6.1.11)

- UI,在 b6-b1 這些 bits 指示出 class 的參考。 (參照圖 6.1.12)

XI 00 01 10 11 X Not supported State L State H Not preference

<圖 6.1.11>

UI 00 0001 00 0010 00 0011 Other value U A only B only A and B RFU

Note:Class 代表介面裝置所提供的電源: <圖 6.1.12>

(41)

Class B:5 V

第七章 邏輯模型

這裡描述 SIM 卡的邏輯結構,和它相關的編碼,及檔案使用的結構。 7.1 一般描述 檔案被組織成階層的結構,並且是三種類型 MF、DF 和 EF 的其中 一種。 這些檔案不是用於管理,就是特別的應用。 作業系統處理在不同 檔案中儲存之資料的存取。 檔案是由 SIM 卡內部管理的一個開頭 (header)所組成,及選擇性地內容部分(body)。 開頭的資訊與結構、檔案的屬性有關聯,使用 GET RESPONSE 或 STATUS 指令可獲得。 這個資訊在管理階段是固定的。 內容部分包含 檔案的資料。 7.2 檔案辨別 一個檔案的認證(ID)用於定址或辨別各個特殊的檔案。檔案認證有 兩個位元組而且應該是十六進位符號的編碼。 每一個檔案都是獨一的辨 別。 第一個位元組辨別檔案的型態,對 GSM 為: - ‘3F’ : 主檔(Master File); - ‘7F’ : 專檔(Dedicated File); - ‘2F’ : 主檔下的基本檔(Elementary File); - ‘6F’ : 專檔下的基本檔。 7.3 專檔 專檔只包含一個開頭部份。 有兩個專檔在此定義: - DFGSM 包含 GSM 的應用; - DFTELECOM 包含電信服務的特色。 這兩個檔案是 MF 的直接子檔,共存在一張多應用的卡片中。

(42)

7.4 基本檔 GSM 使用下列三種基本檔的結構 7.4.1 空白的基本檔(Transparent EF) 空白基本檔第一個位元組的相對位址是 ’00 00’,基本檔的內容總資料 長度在 EF 的開頭就指明。 <圖 7.4.1 Transparent EF 的結構> Note: GSM 事先認為這個結構是二進位制

7.4.2 線性固定的基本檔(Linear fixed EF)

第一個紀錄被記載成第一筆,紀錄的長度就是紀錄數目的乘積,在基 本檔的開頭有指明。 Sequence of bytes Header Body

(43)

<圖 7.4.2 線性固定的基本檔之結構> Note: GSM 事先認定這種結構為格式化的 7.4.3 環式基本檔 環式檔案用於儲存依時間先後順序的紀錄。 當所有的紀錄都已用於 儲存,下一個新資料的儲存會覆寫在最老舊的資料上。 環式結構的基本檔包含相同長度、固定數目的紀錄。 這種檔案結構 在最後一筆紀錄及第一個紀錄之間有連結(link)。最新更變的紀錄包含最 新的資料是第一筆,而最老舊的資料是存放在第 n 筆紀錄中。 Header Body Record 1 Record 2 : : Record n

(44)

<圖 7.4.3 環式基本檔的結構>

對於讀取的操作,定址的方式有 Next , Previous, Current 和 Record Number. 7.5 選取檔案的方式 在 ATR 之後, MF 就暗中地被選擇變成目前的目錄,其後每一個檔 案可用 SELECT 功能依照下列的規則來選擇。選取一個 DF 或 MF 設定 所在的目錄,再來選取 EF,目前所在的 EF 總是目錄的子檔。 以下這些檔案可自上次選取的檔案來選擇: - 目前目錄子檔中的所有檔案; - 目前 DF 子檔中的所有檔案; - 目前目錄的父檔(parent); - 目前的 DF; - 主檔。 這裡特殊的意義是 DF 必須在任何 EFs 被選取前先被選擇。所有的選取 Header Body Record 1 Record 2 : : Record n

(45)

定義在 MF 下只有一層 DFs。 <圖 7.5.1> 7.6 保留的檔案辨識號碼 GSM 保留以下這些檔案辨識碼 專檔: - 管理使用: ‘7F 4X’; - 操作上的使用: ‘7F 10’(DFTELECOM),’7F 20’(DFGSM), and ‘7F 2X’, where X ranges from ‘2’ to ‘F’.

基本檔: - 管理使用: ‘6F XX’ in the DFs ‘7F 4X’; MF DF1 DF2 EF1

(46)

‘2F 01’, ‘2F EX’ in the MF ‘3F 00’; - 操作上的使用:

‘6F 2X’,’6F 3X’,’6F 4X’ in the ‘7F 10’ and ‘7F 2X’;

‘2F 1X’ in the MF ’3F 00’.

In all the above X ranges, unless otherwise stated, from ‘0’ to ‘F’.

第八章 命令的描述

這裡闡述對映應用協定資料單元(Application Prococol Data Unit) 的功能到傳輸協定使用的一般原則。

8.1 對映原則

一個 APDU 可以是一個命令 APDU 或一個回應 APDU。

<圖 8.1.1 APDU 格式> APDU 被 T=0 傳輸協定所傳送並無任何改變。

位元組有下列的意義:

- CLA 是指令的類別位元組,GSM 的應用是用 ‘A0’ ;

CLA INS P1 P2 P3 DATA

回應 APDU 之普遍格式:

DATA SW1 SW2

(47)

- INS 是指令碼; - P1,P2,P3 指令的參數; - SW1 和 SW2 為狀態字組說明指令的結果成功或不成功。 不同類型的命令: 案例一:無輸入/無輸出 <圖 8.1.2> 案例二:無輸出/已知長度的輸出 CLA INS P1 P2 P3 lgth (=’ 00 ’) SW1 SW2 ‘ 90 ‘ ‘ 00 ‘ CLA INS P1 P2 P3 lgth (注意:lgth= ‘00’ 因為 256 bytes 轉變成一個資料)

(48)

<圖 8.1.3> 案例三:無輸入/未知長度的輸出 <圖 8.1.4> 案例四:輸入/無輸出 CLA INS P1 P2 P3 lgth (=’ 00 ’) SW1 SW2 ‘ 9F ‘ lgth1 CLA INS P1 P2 P3 lgth2 SW1 SW2 ‘ 90 ‘ ‘ 00 ‘

DATA with length lgth2 ≦ lgth1

GET RESPONSE

CLA INS P1 P2 P3

lgth

(49)

<圖 8.1.5> 案例五:輸入/已知或未知長度的輸出

<圖 8.1.6>

CLA INS P1 P2 P3

lgth

DATA with length lgth

SW1 SW2 ‘ 9F ‘ lgth1 CLA INS P1 P2 P3 lgth2 SW1 SW2 ‘ 90 ‘ ‘ 00 ‘

DATA with length lgth2 ≦ lgth1

(50)

8.2 命令的編碼 表 8.2.1 秀出命令的編碼。 資料的方向有兩種(S)和 (R),(S) 表示由 ME 送出資料;(R)表示 ME 收到資料。 位移編在兩個位元組上, P1 是高位元 P2 是低位元。 除了表 8.2.1 指明的指令編碼,下列的編碼被保留: GSM 操作上的階層: ‘1X’ with X even. 管理的階層: ‘2A’,’D0’,’D2’,’DE’,’C4’,’C6’,’C8’,’CA’,’CC’,’B4’,’B6’,’B8’,’BA’ and ‘BC’. <表 8.2.1 指令的編碼> COMMAND INS P1 P2 P3 S/R SELECT ‘A4’ ‘00’ ‘00’ ‘02’ S/R STATUS ‘F2’ ‘00’ ‘00’ lgth R

(51)

READ BINARY ‘B0’ offset high

offset low lgth R

UPDATE BINARY ‘D6’ offset

high

offset low lgth S

READ RECORD ‘B2’ rec No. mode lgth R

UPDATE RECORD ‘DC’ rec No. mode lgth S

SEEK ‘A2’ ‘00’ type/mode lgth S/R

INCREASE ‘32’ ‘00’ ‘00’ ‘03’ S/R

VERIFY CHV ‘20’ ‘00’ CHV No. ‘08’ S

CHANGE CHV ‘24’ ‘00’ CHV No. ‘10’ S

DISABLE CHV ‘26’ ‘00’ ‘01’ ‘08’ S

ENABLE CHV ‘28’ ‘00’ ‘01’ ‘08’ S

UNBLOCK CHV ‘2C’ ‘00’ see NOTE ‘10’ S

INVALIDATE ‘04’ ‘00’ ‘00’ ‘00’ - REHABILITATE ‘44’ ‘00’ ‘00’ ‘00’ - RUN GSM ALGORITHM ‘88’ ‘00’ ‘00’ ‘10’ S/R SLEEP ‘FA’ ‘00’ ‘00’ ‘00’ - GET RESPONSE ‘C0’ ‘00’ ‘00’ lgth R (注意:若 UNBLOCK CHV 指令用於 CHV1 則 P2 被編碼成’00’;若將它 運用在 CHV2 則 P2 被編碼成’02’)

(52)

8.3 定義及編碼

以下定義和編碼使用在回應參數/資料命令上 編碼

每一位元組表示成位元 b8 到 b1, b8 是 most significant bit(MSB)

和 b1 是 atest significant bit(LSB),在每個表示法中最左邊的位元為 MSB. RFU 在 GSM 卡所有的位元組,RFU 應該被設定為 ‘00’ 。 檔案狀態 <圖 8.3.1> 檔案結構 - ‘00’ 空白的(transparent); - ‘01’ 線性固定(linear fixed); - ’03’ 環狀(cyclic)。 檔案種類 - ‘00’ RFU; - ‘01’ MF; b8 b7 b6 b5 b4 b3 b2 b1 B1=0 invalidated; B1=1 not invalidated RFU

(53)

- ’02’ DF; - ’04’ EF. 編碼 CHVs 和 UNBLOCK CHVs CHV 編碼成 8 位元組,只有十進位制應被使用,b8 設為 0。最小的 位元數目是 4,如果使用者設定的位元數目小於 8,則 ME 應該在送到 SIM 之前,多加上 ‘FF’ 。 UNBLOCK CHV 的編碼與 CHVs 相同,但位元數 目永遠是 8。

8.4 卡片傳回的狀態情形 這一小節指明 SW1 和 SW2 的編碼狀態 回應已正確執行的指令 SW1 SW2 說明 ‘90’ ‘00’ 正常結束的指令 ‘9F’ ‘XX’ 回應資料的長度 ‘XX’ 記憶體管理 SW1 SW2 錯誤說明 ‘92’ ‘0X’ 更新成功但之後使用一內部重試例行程式’X’次 ‘92’ ‘40’ 記憶體問題 參考資料管理 SW1 SW2 錯誤說明

(54)

‘94’ ‘02’ 超出範圍(未知的位址) 找不到檔案的 ID ‘94’ ‘04’ 找不到型式 ‘94’ ‘08’ 檔案指令矛盾 安全管理 SW1 SW2 錯誤說明 ‘98’ ‘02’ 無最初化 CHV 執行條件未完成

CHV 確認不成功,at least one attempt left UNBLOCK CHV 確認不成功,at least one attempt left

‘98’ ‘02’

Authentication failed

‘98’ ‘08’ In contradiction with CHV status

‘98’ ‘10’ In contradiction with invalidation status

Unsuccessful CHV verification, no attempt left UNBLOCK CHV 確認不成功,at least one attempt left

CHV 被堵塞

‘98’ ‘40’

UNBLOCK CHV 被堵塞

(55)

SW1 SW2 錯誤說明 ‘67’ ‘XX’ 不正確的參數 P3 ‘6B’ ‘XX’# 不正確的參數 P1 或 P2 ‘6D’ ‘XX’# 在命令中有未知的指令碼 ‘6E’ ‘XX’# 在命令中有錯誤的指令種類 ‘6F’ ‘XX’# 有技術上無法判斷的問題 <表 8.4.1>

第九章 實作

9.1 系統要求

軟體:Windows 95, 98, ME, NT and 2000 硬體 :PC、讀卡機

9.2 SCardServer

SmartCards、終端機、和驅動程式有許多家不同的製作廠商,對 於卡片的協定許多企業也有不同的標準。而 SCardServer 提供了下 列的功能:

(56)

連接終端機的管理 * 支援即插即用 * 每個終端機的狀態資訊:智慧卡的狀態,連接 port 號碼 連接應用的管理 * SCardServer 允許終端機存取單一的應用 微處理機智慧卡的管理 * 自動偵測卡片的種類和 ATR * 支援傳送指令 * T0 和 T1 依據 ISO7816-3 實作並包含錯誤處理 * T0 和 T1 的協定參數依據 ATR 事先設定 * 根據 ISO7816-4, GSM 11.11 支援 APDU 9.3 SCARD 介面 所有的存取皆經由一個 DLL 函式的呼叫,Window message 會負 責應用的事件處理. DLL Function

(57)

對此介面的所有呼叫直接傳送給 SCardServer,此函式呼叫只有在處

理過 SCardServer 的命令之後才回傳,其他 Windows messages 在

命令執行時正常地進行。

32 位元的 SCARD32.DLL 輸出下列的命令:

Response = ScardComand( Handle,

Cmd, CmdLen, DataIn,DataInLen, DataOut, DataOutLen);

LPINT Handle /* pointer to a 32 bit signed integer */ LPSTR Cmd /* pointer to a zero terminated string */ LPINT CmdLen /* pointer to a 32 bit signed integer */ LPSTR DataIn /* pointer to an array of byte or a string */ LPSTR DataInLen /* pointer to a 32 bit signed integer */ LPSTR DataOut /* pointer to a zero terminated string */ LPSTR DataOut Len /* pointer to a 32 bit signed integer */ INT Response /* 32 bit signed integer */

Handle 如果只有單一實體被使用,此值可設定為零。 SCardServer 會經由所應用的 thread 處理來作設定的 動作。 Cmd SCardServer 命令 CmdLen 命令字串的長度 DataIn 輸入資料的指標 DataInLen 輸入資料的長度 DataOut 輸出資料的指標 DataOutLen 傳回的資料之最大長度 Response 全域傳回值,成功執行命令後設定為零

(58)

指令集 Card, Info

傳回卡片特殊資訊的表列

Command: Str(“Card, Info [Field]”)

DataIn: nil

DataOut: Str(“Data”)

<InfoField>

“Status” Card State:

“error” 終端機/卡片錯誤 “wait” 無卡片插入 “detect” 插入卡片和進行偵測 “invalid” 卡片無效或無法辨識 “valid” 卡片有效,可作任何應用 “active” 卡片有效,正在動作 “locked” 卡片有效,正被其他應用利用

“Baudrate” 卡片當時的 baud rate “Protocol” 卡片當時的協定 “AtrBinary” 二進位制格式 ATR Card, APDU 此命令送出一個 APDU 給卡片並接收卡片的回應,對 T0/T1 協 定的轉譯是依據 ISO7816-4,而 GSM 傳回的編碼(9FXX, 61XX and 67XX)並未解釋。

(59)

<CLA><INS><P1><P2>[<LC><DataIn][<LE>] DataOut: <SW1><SW2>[<DataOut>] <CLA><INS> 類別碼(Class)和指令(Instruction),各別一位元 組 <P1><P2> 參數 1 和 2,各別一位元組 <LC><DataIn> 可選擇的,<LC> 指示卡片送出多少位元組的資料 數目,<DataIn> 資料的內容. <LE> 可選擇的,一位元組,指示<DataOut> 的長度 <SW1><SW2> 狀態字組,byte1and 2. <DataOut> 可選擇的,如果<LE>有設定這裡就會有資料 9.4 讀取電話簿的流程圖

(60)

<圖 9.4.1 > 9.5 程式碼

void CSCardTestDlg::OnBtnLen() {

// TODO: Add your control notification handler code here m_strCommand="Card, APDU";

unsigned char buf[64]; m_Command.MakeUpper(); int nOut=64;

CString strTemp,strTemp2,strData; int nPos=16;

(61)

m_CardServer.ScardCommand (m_strCommand, "﹨xa0﹨xa4﹨x00﹨x00﹨x02﹨x6f﹨x3a", 7, (char *)buf, nOut);

m_CardServer.ScardCommand (m_strCommand, "﹨xa0﹨xb2﹨x01﹨x04﹨xff", 5, (char *)buf, nOut);

m_strResult=_T(""); for (int i=0;i<nOut-1;i++) {

strTemp.Format ("%02X ", buf[i]); if (buf[i]==0x06 && buf[i+1]==0x81)

nPos=i;

m_strResult+=strTemp; }

unsigned char strSend[22]; memset (&strSend[0],0,22); strSend [0]=0xa0; strSend [1]=0xb2; strSend [2]=nIndex; strSend [3]=0x04; strSend [4]=buf[1];

m_CardServer.ScardCommand (m_strCommand, (char *)&strSend[0], 5, (char *)buf, nOut);

m_strResult=_T(""); for ( i=0;i<nOut-1;i++) { strTemp.Format("%02X ",buf[i]); m_strResult+=strTemp; } //假設長度為 1c.

if (buf[0]==0x67 && buf[1]==00) {

(62)

strSend [1]=0xb2; strSend [2]=nIndex; strSend [3]=0x04; strSend [4]=0x1c;

m_CardServer.ScardCommand (m_strCommand,(char *)&strSend[0], 5, (char *)buf, nOut);

}

if (buf[0]==0x67 && buf[1]!=00) { strSend [0]=0xa0; strSend [1]=0xb2; strSend [2]=nIndex; strSend [3]=0x04; strSend [4]=buf[1];

m_CardServer.ScardCommand (m_strCommand, (char *)&strSend[0], 5, (char *)buf, nOut);

}

m_strResult=_T(""); for (i=0;i<nOut-1;i++) {

strTemp.Format("%02X ",buf[i]); if (buf[i]==0x06 && buf[i+1]==0x81)

nPos=i; m_strResult+=strTemp; } m_Name = CString(&buf[2]).Left(nPos-2); m_Name.Remove (0xff); m_PhoneNumber=_T("");

(63)

{

unsigned char ch=buf[nPos+2+i]; if (ch == 0xff)

break;

if ((ch & 0x0f) < 10)

m_PhoneNumber+= CString((ch & 0x0f)+0x30); if (((ch & 0xf0) >> 4) < 10)

m_PhoneNumber+= CString(((ch & 0xf0) >> 4) +0x30); } UpdateData(FALSE); } 說明: 關於 m_CardServer 此變數,它是 CMyCardServer(繼承自 CCardServer)類別的實體(instance),呼叫成員函式ScardComand(Handle,

Cmd, CmdLen, DataIn,DataInLen,DataOut, DataOutLen),我們設定其中的 Cmd

為 "Card,APDU" 來選擇所要用的命令是 Card 送出 APDU 的指令,雙引

號中十六進位表示 DataIn,用於選擇 GSM DFTELCOM(7F 10)、EFADN

(6F 3A)、讀取線性固定檔案的指令,再根據 GSM 送出的指令字串長度 設給 DataInLen,資料輸出到 buf 一維陣列,共可以有 nOut 這麼多的長 度。 因為每家廠商所用之電話簿的長度不同,所以中間多了藉由智慧卡所 回應之正確長度(67 XX),進而調整長度的動作。之後的程式就是將 SIM 卡中所存的個人電話簿顯示出來,GSM 內姓名與電話號碼的分隔是以 06 81 作為分界,在 06 81 之前為姓名,之後為電話號碼。 值得注意的是, 電話號碼在 EFADN中是以十六進位儲存內容,放置順序左右對調為: b8 b7 b6 b5 b4 b3 b2 b1 MSB LSB MSB LSB

(64)

<圖 9.5.1>

故對 m_PhoneNumber 多了一個轉換的動作。

void CSCardTestDlg::OnBtnNext() {

// TODO: Add your control notification handler code here //下一筆 if(nIndex+1 < 100) { nIndex++; OnBtnLen(); } } void CSCardTestDlg::OnBtnPre() {

// TODO: Add your control notification handler code here //上一筆 if(nIndex > 1) { nIndex--; OnBtnLen(); }

(65)

}

說明:

其中 nIndex 的意義代表選擇上一筆或下一筆電話簿之紀錄。

void CSCardTestDlg::OnBtnPrevious() {

// TODO: Add your control notification handler code here //上次打出的電話

m_strCommand="Card,APDU"; CString strTemp;

unsigned char buf[64]; unsigned char strSend[22]; m_Command.MakeUpper(); int nOut=64;

m_CardServer.SCardCommand(m_strCommand, "﹨xa0﹨xa4﹨x00﹨x00﹨x02﹨x7f﹨x10", 7, (char *)buf, nOut);

m_CardServer.SCardCommand(m_strCommand, "﹨xa0﹨xa4﹨x00﹨x00﹨x02﹨x6f﹨x44", 7, (char *)buf, nOut);

m_CardServer.SCardCommand(m_strCommand, "﹨xa0﹨xb2﹨x01﹨x04﹨xff", 5, (char *)buf, nOut);

m_strResult=_T(""); CString strTemp2,strData; int nPos=16; for(int i=0;i<nOut-1;i++) { strTemp.Format("%02X ",buf[i]);

(66)

nPos=i;

m_strResult+=strTemp; }

if(buf[0]==0x67 && buf[1]==00) { strSend[0]=0xa0; strSend[1]=0xb2; strSend[2]=nIndex; strSend[3]=0x04; strSend[4]=0x1c;

m_CardServer.ScardCommand (m_strCommand,(char *)&strSend[0], 5, (char *)buf, nOut);

} else { strSend[0]=0xa0; strSend[1]=0xb2; strSend[2]=nIndex; strSend[3]=0x04; strSend[4]=buf[1];

m_CardServer.SCardCommand(m_strCommand,(char *)&strSend[0], 5, (char *)buf, nOut); } m_Len=CString(&buf[0]).Left(nPos); m_Len.Remove(0xff); m_strResult=_T(""); for(i=0;i<nOut-1;i++) { strTemp.Format("%02X ",buf[i]);

(67)

nPos=i; m_strResult+=strTemp; } m_Name=CString(&buf[2]).Left(nPos-2); m_Name.Remove(0xff); m_PhoneNumber=_T(""); for(i=0;i<12;i++) {

unsigned char ch=buf[nPos+2+i]; if (ch == 0xff)

break;

if ((ch & 0x0f) < 10)

m_PhoneNumber+= CString((ch & 0x0f)+0x30); if (((ch & 0xf0) >> 4) < 10)

m_PhoneNumber+= CString(((ch & 0xf0) >> 4) +0x30); } UpdateData(FALSE); } 說明: 與 OnBtnLen() 的內容相同,但顯示的內容是最近上次所撥出之電話 號碼。 void CSCardTestDlg::OnBtnChv() {

// TODO: Add your control notification handler code here UpdateData();

CString strTemp; int b;

(68)

unsigned char InBuf[64]; int nLen=0; memset(&InBuf[0],0,sizeof(InBuf)); m_Command.Remove(' '); m_Command.Remove(','); //將命令轉成 16 進位 for(int i=0;i<m_PinNum.GetLength();i++) { /* if (m_Command.GetAt(i*2) >= 'A') a=m_Command.GetAt(i*2)-'A'+10; else a=m_Command.GetAt(i*2)+32; */ if (m_PinNum.GetAt(i) >= 'A') b=m_PinNum.GetAt(i)-'A'+10; else b=m_PinNum.GetAt(i)-'0'+48; InBuf[nLen]=(unsigned char)(b); nLen++; } int nOut=64;

unsigned char CHVBuf[20]; CHVBuf[0]=0xa0; CHVBuf[1]=0x20; CHVBuf[2]=0x00; CHVBuf[3]=0x01; CHVBuf[4]=0x08; CHVBuf[5]=InBuf[0]; CHVBuf[6]=InBuf[1]; CHVBuf[7]=InBuf[2];

(69)

CHVBuf[9]=0xff; CHVBuf[10]=0xff; CHVBuf[11]=0xff; CHVBuf[12]=0xff;

m_CardServer.SCardCommand(m_strCommand, (char *)&CHVBuf[0], 13, (char *)buf, nOut);

m_strResult=_T(""); CString strTemp2; for(i=0;i<nOut-1;i++) { strTemp2.Format("%02X ",buf[i]); m_strResult+=strTemp2; } UpdateData(FALSE); } 說明: 當手機擁有者設有 PIN 碼時,印證密碼的功能。

(70)

9.6 展示

未設定 PIN 碼的 SIM 卡

(71)
(72)

2.按下

下一筆

的鈕,顯示出下一筆資料

(73)

3.按下

最近撥出的電話

(74)

有設定 PIN 碼的 SIM 卡

(75)

<圖 9.6.4>

(76)
(77)

3. 再按下紀錄一,顯示出紀錄

(78)

4. 繼續查詢

下一筆

(79)

附錄一 參考資料

【1】W. Rankl & W. Effing, “Smart Card Handbook”, Page2-21, Page175-276, John Wiley & Sons, 2000

【2】”Smart Card International Standard” , Page4-42, 1998

【3】 European Telecommunications Standards Institute

(ETSI),”Global system for mobile communications” version 5.0.0(GSM 11.11),Page 21-26, 33-46,

http://www.ttfn.net/techno/smartcards/gsm11-11.pdf, December 1995

數據

圖 6.1.3      T0 的編 碼…………………………………………………………32  圖 6.1.4      TD(i)的編 碼……………………………………………………33  圖 6.1.5      時率 Fi 的轉 換……………………………………………………34  圖 6.1.6      時率 Fi 的轉 換……………………………………………………34  圖 6.1.7      鮑率 Di 的調 整……………………………………………………34  圖 6.1.8     鮑率 Di 的調整……
圖 9.6.5    密碼正 確………………..…………………………………………71  圖 9.6.6      顯示出紀 錄……………….………………………………………72  圖 9.6.7      查詢下一 筆………………………………….……………………73  表 8.2.1    指令的編 碼………………………………………………………..47  表 8.4.1  卡片傳回的狀態情 形……………………………………….…..…53  第一章  前言  1.1 動機  每位逢甲大學學生的學生證正面左上方,

參考文獻

相關文件

上傳後的資料。倘若 於上傳初選檔案截止 日(2/24)前,仍有必 要更換評選檔案,請

以上技能的 技能的 技能的發展 技能的 發展 發展和應用 發展 和應用 和應用皆可以 和應用 皆可以 皆可以 皆可以獨立 獨立 獨立 獨立或綜合 或綜合

 不過以上所提的內容幾乎都會被現在的智慧型手機取 代,因此我們覺得這些功能能夠運用在一個沒有網路

 培養具有檔案學基礎知識與文化知識,掌握現代資訊技術的基 本技能,能在檔案館、國家機關和企事業單位的檔案機構、資

多年以來,我們發現同學針對交換生或訪問學生的規劃有幾種類 型:(1) 選擇未來行將深造的國家與學校; (2) 選擇一個可以累積壯遊行 旅的大陸; (3)

 活用建築物本身擁有的磁場特性進行定位 ,因此可用來解決 上述問題。利用實驗型App取得智慧型手機地磁場感應器的數據,接著

是當舖業的生存利基所在。典當人的信用借貸選擇,在一般效用

值得一提的是,Add-in 在 Inventor 運行時會自動加載的特性是一個非常實用的功 能。使用者可以在執行 Inventor 前選擇所需要加載的 Add-in,而沒有選擇的