摘要:提出一種智能卡寫保護的實現方法,該方法將一次數據寫入分成兩步進行,在保證正常讀寫功能的同時,重點討論了如何在意外掉電的情況下完成可靠的寫操作。同時利用該機制實現了事務回滾功能,為卡片應用提供了更大的靈活性。通過對已實現系統的掉電測試,分析了應用該方法后的系統性能的變化及對電力業務的影響。本文網絡版地址:http://www.eepw.com.cn/article/266050.htm
關鍵詞:cos;寫保護;事務回滾
DOI: 10.3969/j.issn.1005-5517.2014.11.007
引言
隨著微電子技術的發展,各種各樣的智能卡開始進入人們的生活。不論是手機卡、銀行卡、水卡、電卡還是社保卡、門禁卡甚至是身份證都是智能卡在不同行業的應用。由于智能卡的應用非常廣泛,應用環境千差萬別,因此在各種惡劣環境下保證卡片業務進行的正確性是十分重要的。
早期的智能卡由于處理速度慢、存儲空間小,業務數據都直接寫入存儲區。但是,卡片應用直接操作存儲區容易造成存儲區數據混亂。而且不符合卡片操作系統(cos)分層設計的趨勢。為此新一代智能卡普遍采用文件來保存數據,通過文件系統來隔離應用和底層讀寫存儲區的操作。
智能卡cos系統根據其功能可以劃分為四個層次:底層固件、存儲管理系統、文件系統、應用系統如表1所示。其中應用系統又可以細分為基本指令系統和專有系統,基本指令是指不同行業應用都會用到的apdu指令例如文件選擇等符合7816規范的指令。專有指令則是不同行業根據自身業務需要而設計的指令。

1 智能卡寫保護的策略分析
處理卡片的意外掉電事件是寫保護機制的用途之一。考慮到卡片的使用者可能對卡片的操作規范并不了解,一個用戶使用電卡給電表充值,在等待兩秒后將電卡拔出,如果卡片在拔出的瞬間正在進行存儲區的寫操作,在意外掉電的情況下業務數據可能一半寫成功而其余數據仍然是舊數據,導致業務數據的混亂。在系統重新上電后,利用寫保護機制可以將數據恢復到文件中,保證業務數據的正確性。
另一種情況稱為事務回滾,表示一項應用進行了一半,如果客戶希望取消該應用,則卡片操作系統應該提供一種機制消除該業務已經完成部分的影響。例如,一項業務由三個步驟組成,用戶在完成前兩步后不愿意進行第三步的操作決定放棄該業務,此時系統需要消除前兩步完成后產生的影響。寫保護滿足了這種應用需求。
2 寫保護的設計
寫保護主要涉及存儲區的鏡像讀寫技術、鏡像區的空間管理、鏡像區初始化以及數據恢復。其中對存儲區的鏡像讀寫是寫保護的核心功能。
存儲區的鏡像讀寫是指在寫存儲區時不將數據直接寫入,而是將數據先寫入一個鏡像區,當寫入完成后將鏡像區數據導入實際存儲區地址。當讀取數據時,目標數據可能在實際地址,也可能在鏡像區尚未提交,此時讀操作應該對不同情況分別判定。
寫操作的參數主要有源地址、目的地址和長度。每次寫入操作需要在鏡像區申請空間來保存這些數據,同時,為了便于檢索鏡像區數據需要對已經分配的空間進行管理。因此設計了寫保護的管理鏈表對這些關鍵數據進行管理,如表2所示。
表中保護標記用來標識鏡像區是否有數據需要導入存儲區。可用地址和長度用來進行鏡像區的空間分配。在數據項中,目標地址是數據將要寫入存儲區的地址,而源地址是數據在鏡像區中的地址。
加入鏡像讀寫機制后,對存儲區的讀寫流程如下:
卡片的一般寫入流程如圖1所示,圖2為業務向文件中寫重要數據時的寫入流程。
業務應用中會有一些文件的寫操作,其中有一些數據比較重要,需要確保數據寫入的安全可靠。此時應用應該采用以下操作:
(1)設置鏡像寫保護標志位,此標志為全局變量。
(2)業務數據的寫入,這些業務可能分若干次寫入不同的文件。
(3)完成鏡像保護。該操作由三個過程組成,首先清除寫保護標志位,然后設置鏡像數據恢復標志,最后提交鏡像區數據將數據寫入實際物理地址并清除鏡像數據恢復標志。
應用在寫操作1、寫操作2和寫操作3過程中隨時可以放棄此次寫操作,已經完成的寫操作不會對系統產生任何影響。這種寫操作的處理方法為系統實現事務回滾提供了基礎。
卡片在上電后會檢查鏡像數據恢復標志,決定是否回寫鏡像區數據。
現分析卡片斷電對系統的影響。
假設斷電發生在寫操作1和寫操作2之間,重新上電檢查鏡像數據恢復標志后,沒有數據需要恢復,系統對鏡像區初始化后正常工作。雖然數據寫入失敗但是保證了業務數據的不會混亂。

如果斷電發生在數據提交階段,此時鏡像數據恢復標志已經置位,重新上電后系統會重新提交,成功后清除標志并初始化鏡像區。這樣保證數據在斷電情況下寫入成功。
以上描述了鏡像寫及掉電后數據恢復的過程。考慮這種情況,在業務進行中,如果數據寫了兩次,還沒有從鏡像區提交到實際地址區,此時如果應用需要讀取文件內容,該內容如果恰好在鏡像區尚未提交,直接從對應物理地址讀數則會產生錯誤。所以鏡像機制還需要提供鏡像讀功能。
對于鏡像讀,根據目標數據的地址在數據讀取分三種情況處理:
(1)數據全部都在實際地址,直接從目標地址讀取數據。
(2)數據全部在鏡像區,在鏡像區讀取數據。
(3)數據部分在鏡像區,部分在實際地址。分別在不同位置讀取數據。
為了分辨數據所處位置,需要遍歷表2中所定義的寫保護管理表。
以上討論了鏡像讀寫的實現機制。下面說明加入該機制對系統性能的影響。
3 鏡像讀寫的應用效果

作為保證智能卡數據安全的重要手段,鏡像讀寫機制在某款電力卡中得到了應用。為了測試鏡像讀寫機制的有效性,分別對卡片進行掉電測試。下面簡易描述測試方法。
應用晶體管控制對讀卡器的供電,在業務進行的過程中對讀卡器斷電。第一次在Δt時刻對卡斷電,系統上電后業務重新進行第二次斷電發生在2Δt時刻。這樣斷電時刻不斷遞增,第n次斷電發生在業務進行到nΔt時刻,這樣,當n足夠大、Δt足夠小時可以認為斷電均勻地發生在業務進行的任意時刻。如果任意時刻的掉電都沒有影響業務的進行,即可認為卡掉電測試通過。
寫記錄文件掉電測試次數:超過16176次數據正常。寫透明文件掉電測試次數:超過27961次數據正常。
在不加鏡像機制的卡片中,掉電測試中數據混亂的情況發生了千次左右。
由以上結果可以看出鏡像讀寫是可以保證數據安全的。
然而由于加入了額外的數據讀寫,會對系統的執行速度產生一些影響。下面通過更新透明文件來驗證鏡像機制的時間特性。
如圖3所示,從指令發送完畢到卡片返回狀態字,無鏡像寫透明文件耗時18.64ms,而在圖4中,鏡像寫文件耗時72.06ms。可以看到加入鏡像后寫文件的速度明顯變慢,這是由于鏡像機制中增加了寫數據、寫保護表、初始化鏡像區三次對存儲區的操作過程。
雖然加入鏡像機制后對指令的執行速度有影響,但是系統運行的速度仍然令人滿意,可以滿足電力卡的各項業務要求。
4 結論
本次鏡像機制的實現為智能卡異常工況下的數據安全提供了一種解決方案。首先保證了系統在意外掉電的情況下數據的正確性,其次在此基礎上應用可以實現事務回滾,滿足了不同應用的需求。雖然付出指令執行時間變長的代價,但系統的時間性能仍然令人滿意。
下一步工作可以圍繞優化鏡像區的遍歷方法展開,讓系統時間性能得到提升。
參考文獻:
[1]王愛英. 智能卡技術[M].大學出版社,2009。
[2]尹偉,代平等.基于Flash智能卡文件系統的設計[J].微計算機信息.2009(1-2):99
[3]徐平江,娜等.基于鏈表方式的智能卡文件系統設計[J].微計算機信息.2011(1-2)2-55
[4]朱兆優,王耀南.非接觸IC卡應用系統設計.計算機自動測量與控制,2001(5)
[5]張紅霞,凌蘭蘭. 智能卡技術及其應用[N] .洛陽大學學報,2002(2)
[6]劉玉珍,涂航,張煥國,等.實用智能卡操作系統的設計與實現[N].武漢大學學報(自然科學版),2000(3)
[7]黃健.智能卡COS的研究與設計[N] .廣東工業大學,2008