再見了,接碼平台:互動式語音驗證碼
和傳統意義上的驗證碼(CAPTCHA)專治「人機識別」有些不一樣,有時我們需要確認用戶是否正在持有某個特定的設備(當然也可以順便做一下人機識別)。
此時,我們通常採用簡訊驗證碼來進行這個確認過程。由於接碼平台的存在,會使得這條期望的信任鏈斷裂,用一個應景的稱呼就是「共享手機號」。
(有些接碼平台還有海外手機號)
這樣很煩,我們需要想一種方法,使得「共享手機號」的方式無法繼續維繫或成本變得畸高。
在接下來的文章中,我將用「驗證碼」這個簡稱來特指「通過手機號下發的驗證字元串」;如果要指代單純圖靈測試的驗證碼,我將用「CAPTCHA」這個單詞。
一、接碼平台的「弱點」
前面剛「懟完」打碼平台,現在又有一個艱巨的懟接碼平台的任務,感動的一夜無法入睡。哎……等等,這倆者會不會有點關聯?
接碼平台負責接收數據,打碼平台負責處理和響應數據。它們兩者割裂開來看都是單工的,即接碼負責單向接收數據,打碼負責單向處理數據。而我們的驗證碼(包括CAPTCHA)通常也是單工的,並沒有進一步雙向交互的設計。這會不會就是接碼平台的弱點呢?
這裡順便提一下上行簡訊。上行簡訊驗證碼的思路是要求用戶以簡訊的形式主動發送某些特定字元到特定號碼的方式完成驗證,其實質仍然是單工或者半雙工的。
當然了,上行簡訊其實很壞。卡商的手機卡數以萬計,每卡的平均餘額每多1元,就要付出上萬倍的資金沉澱。所以卡商不太喜歡卡里有很多錢,只希望每張手機卡跑完全部業務後剛好餘額小於等於0。
眾所周知,發簡訊是要付錢的!在流量費用這麼低的情況下每條簡訊是毛錢你還不能說髒話。卡里欠費了的後果自然是停機。停機什麼概念,那就是連簡訊都收不到了啊。卡商的卡還等著收碼呢,你這停機了生意還做不做的啊?
所以,上行簡訊出來之後,收效一時間很不錯。不過,最近在集團卡、物聯網卡出現之後(統一付費),上行簡訊也逐漸要被呵呵了。
(某著名軟體的上行簡訊驗證碼)
二、IVR登場
大家應該都有撥打客服熱線的經驗,接通之後往往會有個甜美的女聲「普通話請按1,For english press 2…」,我們在手機鍵盤上按下對應的按鍵之後,後端的話務系統就會按照設定完成相關任務。
等等,話務系統是怎麼知道我們按下按鍵的?
死神小學生劇場版「戰慄的樂譜」講了一位萬年不老的黑框眼鏡男子與一位如花似玉面容姣好的妙齡女子,用他們最擅長的音樂合唱「遠程」撥打了報警電話這麼一件事情。故事中,死神小學生不小心告訴了遠程撥號的原理——DTMF(Dual-Tone Multi-Frequency),雙音多頻信號。
(死神小學生劇場版對DTMF的解說)
DTMF是電話系統中用戶信令的一部分,用來傳遞某些特定的用戶信號。主叫話機向電信交換機發起撥號請求時,攜帶的號碼信號一般就通過DTMF傳遞。而我們常見的話務系統叫你按這鍵按那鍵也是依靠DTMF傳遞這個關鍵信號的。有個術語稱呼這個「話務系統」——IVR(Interactive Voice Response),互動式語音應答。
(DTMF信號的聲紋)
DTMF的具體原理大家可以去看《他改變了……》,哦不對,應該去看《戰慄的樂譜》,學習一點人生的經驗,這裡就不再展開。
如果我們把IVR用在驗證碼上,會變得怎樣?
系統要求用戶驗證手機 -> 用戶輸入手機號 -> 系統發起主叫 -> 用戶接聽語音提示 -> 手機鍵盤輸入驗證碼 -> 驗證通過,美滋滋。
在這個過程中,用戶脫離了傳統的前台介面提交驗證碼。也就是說,除非用戶主動在手機上輸入驗證碼,否則是無法通過其他的過程向伺服器表達其希望進行驗證的意圖。
換句話說,我們把原先驗證碼「非同步」的過程「同步」了,從多個環節的單向流動整合到了一個環節的雙向流動。
三、對抗語音識別
正當我美滋滋的時候,一旁的小夥伴給我潑了瓢冷水——這還有語音識別呢,咋整?
大部分的語音驗證碼非常蠢蛋,電話那頭的小姐姐巴不得用字正腔圓普通話一甲的播音腔嘴把嘴地教你漢字的發音。除去性別歧視和什麼女權男權平權概念外,這對STT(語音轉文字)也太友好了吧?
我拿某個友商的一段語音驗證碼做了個試驗。你看看,你看看人家,多麼清晰的波紋啊!這也別他喵STT了,直接多抓幾次,把0-9的發音波紋都記下來,對後頭幾個波做個簡單匹配不就好了?
(某友商的語音驗證碼聲紋圖,大家可以猜猜驗證碼是啥)
這樣可不行,我們這麼騷包的思路豈能被區區STT懟了回去?
校驗環境音。
語音識別出來的結果要通過DTMF傳遞迴「伺服器」,那自然不能掛斷通話。同志們,通話是雙向的,思路是交互的。你在YY電話那頭播音腔小姐姐的時候,你的喘息聲正在通過麥克風傳遞過去!
有人會抬杠,說我輸入驗證碼的時候從不喘息,連屁都不敢放一個,這樣不就可以混淆正常用戶與STT自動提交的區別啦?
馬克思主義哲學告訴我們,實踐是檢驗真理的唯一標準。為了打這種接電話不出聲的傢伙的臉,我決定花費整整5毛錢,通過手機進行各種環境之下不同環境音的採樣。
(歡樂的辦公室)
(孤獨的走廊)
(只有一個人的會議室)
(蹲坑超過30分鐘的衛生間)
(錄音室)
女士們先生們,各位家長各位來賓,五個地方只有錄音室沒有環境音(但是仍然有白噪音)。正常人接電話至於跑到錄音室接么?還真有啊,那活該被斃(商務微笑臉.jpg)。
經過上麵價值5毛錢的科學的實驗證明了,對環境音的識別在某些程度上是可以足夠與自動STT對抗的。
四、對抗實時人肉識別
自動對抗看起來是沒問題了,那人肉識別怎麼辦?我國還有一大堆家庭主婦、大學生、靈活就業人群長期盤踞在打碼平台上。
理論上,語音實時雙向傳輸對基礎設施和技術積累的要求很高(參考各種直播平台、各種直播雲),在實踐中往往會被弱化為延遲若干秒的「偽直播」方式。那樣的話,我們可以通過播報完畢語音與獲取到輸入之間的時間差來識別這些明顯存在問題的「驗證請求」。
先不說打碼平台和接碼平台如何完成語音傳輸的實施雙向對接,假使真有這麼一個實時的打碼平台提供人肉的識別,我們怎麼辦?
當然選擇原諒……
咳,當然選擇提升問題難度啦。
某打碼平台上一個「20漢字識別」的題目價值200題分,約合人民幣0.2元。一般來說,常年活躍在打碼平台上的小夥伴都具有單身數十年練出來的手速,保守估計一分鐘這樣的題能做3道,也就是說每分鐘打碼收益約0.6元。
(某打碼平台上題分最高的題目)
如果我們把驗證碼語音提示變成:
(前面一曲15秒的致愛麗絲)……歡迎您使用XXXX驗證系統,為了您的信息安全,現在,請您依照語音提示進行驗證……請您按下5號鍵,然後按下井號鍵……(等待輸入)……請您再按下9號鍵,然後按下井號鍵……(等待輸入,可以重複N次)……驗證完成。
這麼折騰下來,單次驗證時長如果算上等待電話呼入的3秒鐘,起碼1分鐘起步。這樣的話,打碼平台上題分的設置就會變高。羊毛黨花上幾萬塊錢屯了幾萬個賬號,回頭被廠商發現一下子全給封了,要我我也瘋了。
等到收碼、打碼付出的代價或者承擔的風險超過薅羊毛帶來的業務盈利後,這條路自然會被堵上。
五、互動式語音驗證碼的弱點
要說這個方案的弱點吧,當然有。沒有弱點的那是吳京。
很顯然,互動式語音驗證碼對用戶體驗的下降是很厲害的。尤其是啟用了分段驗證時,用戶需要花費一到兩分鐘才能完成一次驗證過程。這樣用戶會很氣,業務指標就會下降;業務老大就很氣,往往你的年終獎水平也會隨著下降。
而且,語音驗證碼是具有成本的。每次通話都需要以分鐘數對服務供應商付費,一般來說這樣的費用會在幾分錢每分鐘左右。不過,比簡訊好的地方在於,語音不接通不收費,美滋滋。
另外,縱觀全文,我們似乎沒有找到一家使用了這樣的驗證方式的廠子。沒有買賣就沒有殺害,自然也就沒有接碼平台願意去做這個方向的技術研究。如果哪一天,BAT或者其他大廠採用了這方案,或許會在巨大的利潤誘惑下,迅速產生互動式驗證碼的接碼服務。有理由相信,金錢是技術最好的驅動力,這天可能遲早會到來。
要不然,乾脆改一改標題,祈禱懇求拜託希望大廠千萬用上這個玩意兒,放我們小廠一條生路如何?
本文原創作者:idapro,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載
※利用忘記密碼功能繞過Windows auth & BitLocker
※大疆的漏洞獎勵計劃來了,美國的「安全控訴」是不是可以歇會兒了?
※特別企劃 | 銀行業木馬黑產報告
TAG:FreeBuf |