八達通卡餘額閱讀器

<<八達通卡餘額閱讀器>>(前稱<<八達通卡閱讀器>>)是網主於8月初所推出的一個android 程式。 由於程式本身原為網主對 android NFC 技術的學習成果,因此推出時較隨意,並沒有附上詳細說明(當然也沒有華麗的介面作包裝),以致後來引起了始料不及的一些擔憂,實非本人原意。 為避免將來可能出現更多的誤解,因此我將大部份由網路以及記者的疑問在此加以說明清楚,希望藉此消除對程式不必要的誤會。

起緣

我雖為學生,因常常留意科技新聞,因此從早就了解到應用 NFC 技術所能帶來的好處並不小。但礙於學業以及生活情況下,關於NFC的應用研究只能擱在一旁。 直到去年Google Nexus S 發佈以後,我就再次被其內置的NFC 閱讀器所吸引。加上今年Google IO 2011 後,Google 加強了 android 和 NFC 的協作,因此決定稍後為興趣自學相關技術。

程式開放的目的和過程

就在七月末一次由八達通負結餘而引起的不便,令我感覺巴士站如能增設餘額閱讀器,就能在上車前就知道餘額能否繳付足夠車資,免卻了借錢、阻礙輪候隊伍或需要下車增值再等車的麻煩。 回家後想起那個因自我學習 NFC 而寫成的程式,再聯想起八達通正是最貼身最易找到的NFC 應用,便意識到將程式稍加修改,就能解決這個每個香港人都有可能遇過的困境。本著以科技助人以及自我學習的精神,我決定為此再作多一點研究。 除了期望能夠助人外,亦同時希望將android 靈活多變的好處,以及NFC 技術所帶來的方便在香港推廣出去。

程式的限制

本著科技助人以及不為惡的原則,本人從起初就沒有任何破解或擾亂系統的想法。 因八達通收費系統為香港以至全世界最廣為人知而又運作順暢的大型智能卡系統,從程式編寫前已能大約估計當中必然有著十分安全的保密和認證系統。 及後從公開資料中,亦證明了一切。 在系統設計允許之下,卡內餘額是唯一一個能夠被讀出來的資料,亦因為讀出的過程是經由卡內已設計好的機制幫助之下達成的,所以研究和讀取過程並沒有任何暴力破解的成份。 至於加密和認證的方式,因沒有公開公佈,本人並無法得知亦不認識,而這也不是程式必要的部份以及學習重點,因此沒有深入研究。

私隱安全

就我有限的理解,所有個人資料,使用記錄等一律被加密。卡內儲存了而又能在設計下不需認證而被讀出的資料,就只有餘額。 加上我寫的程式碼本身根本就沒有認證解密的部份,因此無論是我本人,又或是將我程式解拆出來的人,均無法利用我編寫的程式碼讀出任何除了餘額以外的東西,更遑論是其他個人私隱相關的資料。 亦因此能推斷,做一張假的八達通卡是不可能的。

關於程式如何處理資料及所需權限說明

本程式需要4個權限。分別為

  • android.permission.VIBRATE(震動機體以作讀取提示)
  • android.permission.NFC(使用NFC讀卡器)
  • android.permission.INTERNET(Google AdMob需要從網路下載網告以顯示)
  • android.permission.ACCESS_NETWORK_STATE(Google AdMob需要檢查網路情況以決定是否下載廣告)

另外,如使用餘額記錄功能,記錄時需要的資料,即卡餘額,號碼及執行編號,將會儲存在手機裡,使用者亦可以手動刪除所有記錄,程式已提供了相應選擇。 程式並不會將任資料(包括手機和卡資料)傳送到任何地方。程式的原意就是方便大家享受科技的便利,並非暗地裡收集個人資料並將之賣出,這不但不乎合編寫原意,也是極不道德的行為。

 

結語

我希望經過以上詳細的說明以及經歷分享,能夠喚起大家對android 及 NFC 等等新科技的興趣,並發開出更多更實用更有趣的android程式,造福香港以致全世界。將不為惡,樂於研究,敢於嘗新的精神發揚出去,慢慢改變這個常以個人利益為先的社會。 如對拙作有任何功能上的建議,亦歡迎提出。