【客座】您所使用行動金融應用程式真的安全嗎?

市面上各式各樣的金融軟體,有證券的、有銀行的,其中證券下單已經是大家生活中習慣的功能,而銀行的app也逐漸開放可以透過手機交易,但您可有想過,您在手機上面所執行的交易真的安全嗎?
評論
評論

本文為客座文章,作者為 Techmemo 的 Ethan,後列是他的自我簡介:攝影/美食/電影/以開發 iOS 財務軟體為職業/資訊碩士。

市面上各式各樣的金融軟體,有證券的、有銀行的,其中證券下單已經是大家生活中習慣的功能,而銀行的 app 也逐漸開放可以透過手機交易,但您可有想過,您在手機上面所執行的交易真的安全嗎?

筆者曾任職於專門開發智慧型手機金融軟體的公司,主要的工作就是介接各券商、銀行的交易平台,並透過某些安控機制發送交易,可就一般開發者以及使用者的角度看目前金融軟體在智慧型手機上的應用。

針對手機上的金融交易,又泛指網路上的所有金融交易而言,不論加密演算法如何先進,不論 SSL 簽章的位元數不斷的加倍,依然呈現兩種對立的立場:
  • 沒有拿著實體的憑證轉帳我就是不放心,網路銀行已經夠危險了,現在竟然手機也可以買賣股票、非約定轉帳,哪天手機不見了怎麼辦?
  • 現在的手機就是一台小型的電腦,能在電腦做的事情為什麼不能在手機上做?智慧型手機帶給我們的方便我們應該好好利用才是。

現在各大券商幾乎都有配合的手機看盤下單廠商,讓有開戶的客戶都可以免費透過廠商提供的 APP 看盤下單,這個產業從最早的股票機、單純看盤,到現在的證券甚至期貨選擇權下單已經近乎成熟,但其實不論是在電腦透過 AP 下單、或是在手機透過 APP 下單,資安部分都只靠一張單純的 SSL 憑證,這張憑證會由券商向憑證廠商申請,每個客戶每年都會重新申請一張新的憑證,該憑證在客戶開戶且完成電子下單認證後會發到客戶端(電腦、手機),但因為憑證成本甚高,所以目前大部分在電腦及手機皆使用同一張憑證,差別在電腦下單是用完整的憑證簽章(也就是 P7),而因早期手機運算能力有限,所以在手機上簽章是用精簡的憑證簽章(也就是 P1),至於這個演算法的風險,大概會有下面幾個部分:

  • 憑證被竊取 -- 這個是滿容易發生的,畢竟大部分的客戶並不清楚憑證到底幹嘛用,只知道要透過網路下單就需要它,因此對於保存憑證並不是那麼在意,雖然憑證在電腦上通常會透過 IE 憑證庫儲存,要匯出要經過還算繁瑣的步驟,但是其實只要有心,要取得週邊朋友的憑證並不困難。
  • Client 端與 Server 端的交易模式被破解 -- 原則上所有內含交易的 APP 都會需要登入,但登入後的交易行為都只靠登入當時所產生的 session 來驗證來源,雖然各廠商還是會有自己的格式來打亂交易內容,甚至是透過各種編碼方式來混淆封包格式,但說有心人要透過竊取封包來變造客戶交易依然是有機會的,尤其在證券下單的連線並沒有透過複雜的加密機制做保護的情況下。
不過有個好處是,券商通常為了服務好客戶,通常在部分下單出現錯誤的情況下,都會盡量吸收客戶的損失,但是羊毛出在羊身上,要嘛是廠商吸收,要嘛就是你真的下單量很大,他能從手續費賺回來,當然也有很不錯的公司願意無條件吸收,但畢竟在少數就是了。

那銀行呢?

目前各家銀行因為中國信託(最早提供非約定轉帳的行動銀行)的關係,紛紛也加入推展行動銀行的產業,老實說,大家都知道要從行動銀行獲利有困難,但是畢竟算是成本低廉的另類行銷,對銀行來說宣示大於實質意義,那站在客戶的角度呢? 行動銀行的確帶給我們非常多的方便,但交易風險是否也跟著提高? 以下就來探討這個部分的安全機制:

一般來說,台灣各金融機構都必須受到主管機關(金管會)的管轄,任何新辦業務都必須報部核可,尤其是官股銀行更有如此限制,私人銀行雖然一樣有規定,但總是會想辦法鑽些漏洞跳過這關,或是待主管機關行文通知才補申報業務,不管怎樣,有主管機關把關在安全機制上多少較為嚴謹。

但是在手機銀行的交易是怎麼做的呢?安全機制有特別做過處理嘛?真的安全嘛?

在手機上的行動銀行通常視為網銀的延伸,畢竟各家銀行在這時代可以說一定有網路銀行,視為網銀的延伸在報請主管機關核可上較不會有問題,而在交易行為上也通常會透過網銀或是網銀的中後台去執行,簡單的說就是不論在業務面或是實作面都會與網銀掛勾,但是對於消費者來說,我網路銀行是在家裡電腦使用,要偷走我家用電腦不是很容易,即使我用筆記型電腦在外遺失,真的歹徒要當下轉帳給自己也是需要時間的(總要把電腦先移到安全的地方吧,屆時 session 也已經 timeout 了),風險相對較低; 但是在行動銀行上,客戶大部分都帶著手機在身邊,一不小心遺失可能當下就會被有心人士做無法挽回的交易,風險較高,所以主管機關在對手機銀行的審核上會特別要求縝密,因此,針對高風險交易衍生出了以下幾項安控機制:

  • SSL 加密:所有交易電文均會透過 SSL 加密,這是基本的,沒有這個就不用談了。
  • 簡訊 OTP (One-Time-Password) : 最早開始使用已不可考,但最早申請專利為中國信託,主要是透過該次交易的內容在主機上產生特定的交易序號以及密碼,並透過非網際網路的方式傳送到第二平台,並在產生交易的第一平台輸入該密碼達成驗證目的,此方法為目前主管機關接受且最符合使用者行為的方式,但是,當初主管機關認可此方式時並沒有所謂的行動銀行,目前的行動銀行會造成雖然傳送通道不同,但平台會相同的情形,還是有隱憂在,且傳送簡訊所產生之費用有可能會由客戶所吸收,例:彰化銀行(2011.06.21 資料)。
  • 實體 OTP:實體 OTP 的成本對銀行/客戶來說初期成本相對較高,主要是因為當客戶申請實體 OTP 時,銀行會配發一個類似 bbCall 的小機器,或是透過有螢幕顯示的讀卡機來顯示 OTP,當客戶要執行交易的時候,按下產生按鈕,螢幕則會顯示一組動態產生的密碼,藉由此密碼給伺服器比對交易來源的可靠性。那很多人會有疑惑,我手上的小機器並沒有連接網路,到底伺服器是為什麼知道我這組密碼是否正確呢? 這就要從 OTP 演算法的角度來看了,實體 OTP 有分兩種:
1. Time-based OTP
Time-based OTP 顧名思義就是用時間當做產生密碼的依據,OTP 載具與伺服器採用同一組演算法,該演算法與時間以及使用者資訊相關,該次產生的密碼會在特定時間內有效,因為使用的演算法及計算參數一致,所以產生出來的密碼也會是一致的,但是會遇到一個問題,就是 OTP 載具內建的 clock 與伺服器不同不,導致無法同步的問題,通常發生在 OTP 載具電源耗弱時,這時候就需要將該載具送回去銀行做同步的動作,才能再次使用。

2. Event-based OTP
Event-based OTP 就沒有 Time-based OTP 的同步問題,因為他所使用的演算法不採用時間當做依據,而是有一定的規則,該規則只有伺服器跟 OTP 載具知道,可以想像一下,OTP 載具在出廠的時候就內建了一組演算法,假設該演算法連續產生一百萬組不同的號碼,而伺服器對應該組載具也可以產生一百萬組不同的號碼,但是伺服器上多了一個 index 以及一個最大錯誤容許值 maxTolerance,當伺服器與該載具配對時,index 預設為 0,maxTolerance 預設為 10,那我今天要打一筆交易到主機的時候,會請客戶用載具產生一組密碼,將密碼帶到主機上,主機就會用以下的演算法比對密碼是否正確:
for( int i=index; i<index+maxTolerance; i++ )
{
if( allOTP[i] == userOTP )
return SUCCESS;
}
return FAILED;

當演算法比對錯誤時,主機會將該 OTP 載具鎖住,並請該客戶回到銀行做重新設定的動作,通常發生在客戶按了太多次密碼但卻沒有做交易,才會超出 maxTolerance 的限制。

那為什麼實體 OTP 的初期成本較高呢,主要是因為要配發 OTP 載具,該載具價格不匪,以目前第一銀行來說,該載具要價 400 元,且客戶必須隨身攜帶,因此雖然大大提高交易安全性,卻也<del> 增加</del> 降低了客戶的使用意願。

  • 圖形驗證碼:有點類似論壇註冊或發文時會要求使用者填入的一組密碼,而該圖型是動態產生且機器難以辨識的。老實說,這個安控方式一點用都沒有,因為只要你眼睛沒有太大問題,照著輸入就好,一點把關的效果都沒有。

其實在手機銀行上,主管機關會明確要求一定要高風險交易(轉帳類似交易)必須要提供雙因子認證,因此其實還有很多可以發展出來的安控方式,這就有待各家銀行的 IT 單位與廠商去傷腦筋了。

至於手機銀行的交易使否安全,以我們上述的幾項安控方式看來,其實控管是相當嚴密的,但中國信託的簡訊 OTP 相對來說是相對較不安全的(跟實體載具比較起來),畢竟大部分透過手機銀行交易的客戶該簡訊 OTP 設定的通知號碼也是該手機,所以只要手機及帳號密碼遺失,交易風險就會相對大大提昇,雖然這種情況不高就是了。

不管怎樣,在這個行動裝置崛起的年代,行動商務勢必成為生活的一部分,與其抱著不信任或是逃避的態度面對,不如了解所有安控的概念後選擇風險較低的方式進行交易,相信隨著時間的推進的以及市場的擴大,行動裝置的交易也會越來越安全。