二維碼支付原理分析及安全性的探究

「二維碼支付」安全麼?

1   引言

隨時支付寶和微信的線下不斷推廣,目前使用手機進行二維碼支付已經逐漸成爲一種時尚了。git

可是你們有沒有思考過:這種便捷的支付方式到底安不安全呢?今天咱們就針對這個話題來進行一些探討吧。github

2   二維碼簡介

先來簡單說說二維碼:二維碼是用必定規則排布的點陣的圖像來編碼信息的方式。與二維碼對應的是傳統的「條碼」(一維碼)。數據庫

和「條碼」同樣,二維碼具備以下特色:安全

  1. 容易生成
  2. 容易被機器識別

可是「二維碼」具備更多的優勢:微信

  1. 高容錯性
  2. 搞污損能力
  3. 高密度的信息承載能力

二維碼曾被騰訊公司總裁 馬化騰 譽爲:鏈接線上和線下的通道。網絡

隨着支付寶,微信,微博等廠商的大力支持和推廣,二維碼的應用已經逐漸成爲生活中隨處可見的應用圖案了。app

固然,你們最熟悉的使用場景確定是:移動支付。也是本期重點討論的領域。學習

3   支付場景

  • 身份二維碼
  • 收款二維碼
  • 付款二維碼

你們可使用第三方應用掃描微信或者支付寶提供的二維碼,能夠獲取其中表明的含義。好比:兩種應用互掃二維碼。動畫

3.1   身份二維碼

微信 身份二維碼:編碼

http://weixin.qq.com/r/L-rg_G-EbIITrZub0097

支付寶 身份二維碼:

https://qr.alipay.com/apa2uu7j3tpjyxlr00

不難看出,身份二維碼實際上有用的信息就是指定的URL後面的一個串號。這個串號具備以下特色:

  1. 一直固定不變
  2. 沒法經過此串號獲取用戶信息
  3. 僅能被本身的app識別其深層含義(自家app查詢自家數據庫),客戶app掃碼後,將彈出相應的顯示詳細身份或者加好友的界面

這樣很好地兼顧了 隱私性 和 開放性 。

3.2   收款二維碼

使用UC來掃微信和支付寶的收款二維碼。

微信:

https://wx.tenpay.com/f2f?t=AQAAAEBfhXKNRIQUrs6fy4XO8p879

支付寶:

https://d.alipay.com/i/index.htm?b=RECEIVE_AC&u=mGnPJ/rNBfKKKKKDcQlNGn1mthWAVDa7vw00ow5sM4o=

明顯看出,換了一個API,同時後面帶上一串和用戶帳號無關串號。此串號具備以下特色:

  1. 一直固定不變
  2. 沒法經過此串號獲取用戶信息
  3. 僅能被本身的app識別其深層含義(自家app查詢自家數據庫),被客戶app掃描後,客戶app直接調出向對方帳號付款的界面

3.3   付款二維碼

在付款二維碼上,微信 和 支付寶 是差很少的,都是一串每分鐘就會變一次的一串數字:

284308793673642130

此二維碼信息具備以下特色:

  1. 是一串不帶API的純數字串
  2. 每分鐘變一次
  3. 經過指定的SDK以此數字爲參數進行接口調用能夠完成扣款

其實上本質上就是一個付款帳號。而後掃碼時自動輸入這個串號,經過第三方客戶端調用支付平臺SDK便可以完成扣款。

此扣款場景及規則以下:支付平臺默認只要用戶主動出具了二維碼,就代表進行了受權扣款,這有點相似於在校園卡在食堂的做用同樣,小額交易免除了繁瑣的受權流程了。

關於付款二維碼和以前的二維碼的區別以下:

  1. 永久不變 和 每分鐘必變
  2. API+參數 和 純參數

關於第一點的解釋,筆者在此插播一個現實生活中的小故事:

在某早餐店, 筆者問店主:爲什麼不作個二維碼放牆上? 店主說:那玩意常常變,咱們就不知道怎麼弄了。 筆者笑:你說的是付款二維碼,那東西若是不變,傳播出去後,你的錢會被人隨便扣,可是你的收款二維碼,你是否是還會擔憂別人隨便給你轉錢呢? 店主馬上明白了,笑:固然不會,別人不斷給我匯款,我高興都還來不及呢。

因此,用戶只是擔憂本身的錢可能被不知情的狀況下被划走,可是確定是不會擔憂別人給本身匯款的,這就很好的解釋了 「不變」 和 「變」 的區別了。

關於第二點的解釋:

  1. app上的掃碼所對應的場景衆多,必需要作必定的區分,因此帶上API名稱
  2. 條碼槍對應的場景單一,僅僅只是扣款,因此二維碼只須要對參數進行編碼便可

4   本節小結

經過本文的實驗和介紹,你們應該對本身手機中的支付app的二維碼是怎麼回事有大體的瞭解了吧,後面一節將從安全性上對它們進行分析,敬請期待。。。

5   概述

前面的章節咱們講了支付寶和微信的二維碼的主要信息載體,本部分則開始討論其安全風險問題。

6   安全風險

關於二維碼的風險問題主要從以下幾個方面來講:

  1. 隱私問題

    是否出現用戶的私有信息隨着二維碼的傳播而被泄露,給用戶千萬困擾的問題

  2. 越權問題

    是否出現違反用戶意途的越權操做問題

7   隱私問題

在前面對二維碼承載的信息的分析如此能夠看出,用戶私有的一些信息:

  1. 真實姓名
  2. 帳號明文
  3. 手機號碼

都並無體如今相應的參數當中,黑客很難根據那一串無心義的數據獲悉二維碼背後的真實的用戶信息。固然,除非黑客攻陷了微信或者支付寶的數據庫了,這基本上不太可能。經過這些串號獲取到的用戶暱稱和頭像也僅僅限制在當前app中。

8   越權問題

身份二維碼。這個由於單方面加了好友後,是須要二維碼身份主人進行驗證,因此不存在越權問題。

收款二維碼。正如上一文中提到的,若是有人未經當事人贊成「越權」給當事人轉帳,你會有意見麼?

付款二維碼。有過在超市支付寶付款經歷的人確定知道,掏出手機,亮出二維碼,收銀員條碼槍一過,一秒事後,錢就被扣走了。若是要說有直接的金錢損失,可能就是這個地方了吧。下面咱們來細說此場景。

9   越權扣款

在前面的文章中提到,付款二維碼具備以下特色:

  1. 一分鐘強制變一次
  2. 能且只能被使用一次

設想這樣的場景:

超市裏面,收銀員A在零售系統中核算出商品價格,顧客B亮出付款二維碼,A拿起條碼槍掃碼,完成扣款,錢從B的帳號進入到A所屬的公司中。

那麼這裏面是否存在 越權扣款 的漏洞?

個人回答是:有,可是這須要咱們大開腦洞才能想到。

因爲二維碼是一種經過光線視覺來傳遞信息的方式,並且二維碼出示的時候,並不會指定要扣款給誰,因此在顧客B出示二維碼到被收銀員A掃碼之間的空檔裏面,可能會被別人截獲。

固然,咱們如今都不考慮一些網絡通路被攻破,數據通信被劫持和篡改的狀況,就按照正常的流程來走。顧客B出示了二維碼,而後由C經過設備直接提早識別了二維碼,並完成了扣款。

這個C有以下可能:

  1. 隱藏在旁邊某人衣帽裏面的針孔攝像頭
  2. 附近大廳上方的某個已經「叛變」的監控攝像頭
  3. 旁邊某個玩手機的路人甲乙丙丁
  4. 帶着眼鏡的斯文四眼仔

他們的共同特色就是:

  1. 快速識別二維碼。經過光學識別設備(即攝像頭)便可。
  2. 擁有扣款的資格,黑客有各類辦法使用冒牌身分獲取到此資格。
  3. 能快速完成識別和扣款。目前的機器視覺和後續的自動化扣款程序能夠實現。

假如咱們這個腦洞成真了,那麼就是這樣的場景了:

  1. 顧客B掏出手機展現付款碼
  2. 在收營員A掃碼前B已經被扣款
  3. 環顧周邊的購物的人山人海,並沒發現可疑的人
  4. 找相關機構報案,數額太少,浪費本身的時間不划算
  5. 若是本身時間不值錢,堅持報案,數額很多,不予以立案
  6. 顧客B不相信社會了,不再用這種付款方式了

10   小結

本節的腦洞開得有點大了。可是究竟是不是聳人聽聞了,還真不必定。雖然這兩家公司的開發人員和產品人員也並非吃白飯的,可是黑客和黑產從業人員也更不是吃白飯的。

11   概述-3

在上一章節裏面,咱們提到過,其實支付廠商和技術人員和黑產從業人員技術孰高孰低,還真很差說。可是咱們目前仍是盡力相信暫時正方是佔據上風的吧,那麼支付服務廠商到底作了哪些措施來保證這個安全呢?咱們能夠來分析一下。固然,本文的定位仍是給技術小白的簡譜吧,技術大牛面前仍是屬於獻醜了。

12   風險控制

雖然確實存在以上漏洞,可是其實細心的用戶可能注意到了,微信和支付寶盡力地作了相應的措施:

  1. 對申請扣款資格主體身份進行嚴格審覈,雖說不能百分百,可是仍是能夠極大增長假冒門檻。固然厲害的黑客仍是有辦法過。
  2. 設立資金保險。固然,估計並無多少人去投保了。
  3. 限額。將這種扣款方式進行限定,將其侷限在小額場景。可是每次被扣除個幾百塊,也仍是有點心疼的吧。

直接出示付款碼,讓對方掃碼扣款,這種方式確實是本身目前體會到的最便捷的支付方式了。可是這種方式存也確實存在必定的安全風險,因此用戶在使用時,請養成良好的習慣,讓二維碼暴露在公衆視野下的時間儘可能短,看到的人儘可能少。不然,稍微的疏忽就成了黑客們線下薅羊毛髮家致富的場景了。

13   方案建議

關於此「安全漏洞」,在技術流程上的解決方案是:

在掃碼以後,加入「用戶確認」環節, 要求用戶在本身的app上作一個簡單的交互,表示本身 知曉 並 承認 當前的扣款行爲。

固然,這個「簡單」 最後加一道確認環節,關於這個環節,咱們能夠頭腦風暴一下,我先說下本身的「腦洞」:

  1. 加一個相似蘋果開機的滑動解鎖確認
  2. 指紋確認(對於有指紋模塊的手機來講不錯)
  3. 作一個按鈕圖標,須要用戶長按2s確認
  4. 要求用戶搖一搖把錢甩出去(掃碼後,作個圖片:錢一半在口袋外面了)
  5. 要求用戶對着手機吹一口氣把錢吹出去(吹氣後,加個錢被吹走的動畫)

你們有看到這幾個構想的,若是以爲比較好,請轉達給微信或者支付寶的產品經理,若是被採用了,請給我發個紅包哦(手動齜牙表情)。

14   結論

雖然本文有點腦洞大開,只是但願你們能明白:咱們享受到了新型的便捷的付款方式的同時,實際上是犧牲了必定的安全性的。在商場使用刷卡支付,刷卡後輸入密碼,雖然麻煩,可是卻有一個重要的「用戶確認環節」,仍是能避免掉意外扣款。固然這也是產品的權衡了,看這個風險出現的機率是否值得提供商犧牲掉好的付款體驗了。

如今尚未出現那種被機器視覺薅羊毛的扣款事件吧,也不知道從此會不會有,但願是我杞人憂天了吧。


做者: Harmo哈莫
做者介紹: https://zhengwh.github.io
技術博客: http://www.cnblogs.com/beer
Email: dreamzsm@gmail.com
QQ: 1295351490
時間: 2017-05
版權聲明: 歡迎以學習交流爲目的讀者隨意轉載,可是請 【註明出處】
支持本文: 若是文章對您有啓發,能夠點擊博客右下角的按鈕進行 【推薦】
相關文章
相關標籤/搜索