Click*3續觀察 : 圖形驗證與網路分工

Posted by Mr. Friday

前情提要: 看不懂我這一篇在寫什麼的, 請先參照這篇: ClickClickClick的中忍考試 : 民族主義與網路安全?

這幾天, 台灣, 日本與德國的網路好不平靜, 為什麼? 因為點點點大戰啊 ! XD

(網友Hollowcorpse繪)

隨著ClickClickClick網站Game 6的開打, 為了爭取自己國家能在排行榜上獲得冠軍, 台灣與日本兩個科技強國各自召集了大量鄉民投入這場”戰爭”, 更吸引了眾多網路駭客開發破解程式來灌自己國家的票, 這當中的技術演進之快, 網路攻防戰之精采, 還有鄉民24小時全天候持續不斷的熱情投入, 在我的印象當中, 應該還真的是前無古人, 想不出有哪個活動可堪比擬, 諸位看官應該要鼓掌致意一下才是!

(註: 駭客hacker是褒意, 指電腦技術高超的人, cracker才是專門去破壞別人網站的作亂份子)

接下來呢, 我們再來看看這幾天之內, Click*3上的技術攻防戰又有哪些新變化, 以及這些又給我們什麼啟發.

還記得上回我在技術方面講到圖形驗證碼的問題嗎? 圖形驗證碼是網路上常用來防止機器灌票的一種方法. 在這系列比賽中, 日本人是率先做出自動灌票程式的國家. 前一篇文章有提到

那麼, 這麼厲害的圖形驗證碼為啥卻被日本破解了呢? 說來也不能說日本是真正破解了驗證碼的機制, 而應該說日本是集眾人之力蒐集”考古題”來應答. 怎麼說呢? 其實Click*3是可以每開一次網頁就隨機生出一張圖形驗證碼來考大家, 然而因為網站流量太高, 這樣做太浪費網站資源, 所以Click*3就跟其他網站一樣, 先在本地端生出了一大堆圖片, 然後每當一個網友開網頁, 就隨機從圖庫中抽一張來考人.也因為這樣, 所以日本方面有人傾網友之力, 蒐集了幾乎所有出現過的圖形驗證碼和答案, 再依此為根據做了一個”自動應答機”…有了這個工具, 電腦就可以一直開著讓他灌票下去, 完全全自動!

原理知道以後就好辦. 跟隨著日本的腳步, 台灣沒多久也立刻做了一個功能差不多的自動灌票程式, 也就是α (alpha; 俗稱阿法)系列, 能夠自動判讀圖形驗證碼的程式; 不過沒多久, Click*3的德國官方維護工程師Ian就立刻換了一批新圖片, 然而因為台日兩地網友太多, 新圖片出來沒多久就又立刻”考古題蒐集完畢”, 各種灌票程式依然肆虐著, 於是到最後, Ian使用了釜底抽薪的方法, 那就是

隨機產生驗證碼, 讓這些仰賴考古題作答的自動灌票程式通通失效.

此招一出日本台灣鄉民立刻唉唉叫, 因為這代表自動灌票機沒用了, 遇到驗證碼大家還是得自己動手輸入. 其實呢, 這是一招七傷拳 : 不但傷到敵人, 也傷到自己. 各位想想看, 光是台灣日本, 每分鐘就有成千上萬的網友進行投票, 而Click*3每遇到一個網友就要動態生出一張圖片, 這當中所耗費的CPU與記憶體的量是相當驚人的, 這也難怪Ian (Click*3官網維護者) 的主機後來三不五時就會BUSY或當機一下, 導致網友怨聲四起.

(何謂圖形驗證碼? 這篇的後半段有介紹)

(網友Hollowcorpse繪)

關於圖形驗證碼在這場網路大戰中的角色, vgod的”clickclickclick與人力資源運用“一文倒是提供了一點非常好的建議:

身為human computation的研究者,看到這麼多人在瘋狂地解CAPTCHA,實在很想建議clickclickclick.com趕快把驗證圖換成reCAPTCHA(請參考我之前的介紹)。這樣一來能把產生驗證圖對主機帶來的負擔全部轉給reCAPTCHA去煩惱,二來還能集合這些熱血鄉民們的力量,讓大家在愛國之餘還能為這個世界順便做一點貢獻

CAPTCHA就是圖形驗證碼的英文名. CAPTCHA的全名是”Completely Automated Public Turing test to tell Computers and Humans Apart”, 也就是專門用來判斷使用者是人類還是電腦的機制, 而圖形驗證碼正是當中最常被用到的方法. 那reCAPTCHA又是什麼東西呢? 其實reCAPTCHA是圖形驗證碼原創者Luis von Ahn的新作, 一樣是圖形驗證碼的延伸. 就他的觀察, 現在網友每天會輸入6千萬次的圖形驗證碼, 如果平均解一張圖形驗證碼要10秒鐘的話, 那全世界人類每天總共會花去總計150000小時的時間在解圖形驗證碼上. 他想到的是, 把這些功夫用在對人類有益的事情上, 那就是: 書籍的數位化.

書籍的數位化是近幾年常被討論的話題. 但是我們都知道, 電腦的流行也不過就這幾十年間的事情, 但是書籍的歷史卻可以往回追溯幾千年. 如果要一一輸入電腦實在是很耗時, 所以就有人發展了OCR (Optical Charater Reconition)技術, 可以把掃描機讀到的圖案轉換為文字. 可惜的是, OCR概念雖好, 但是它的圖形辨識能力仍然不盡理想, 舉例來說:

第一行是從書本掃下來的字: “This aged portion of society were distinguished from”

第二行是OCR自動判讀結果: “niis aged pntkm at society were distinguished frow”

很明顯有將近一半的字判讀錯誤. 這些被劃紅線的字還需要人工手動重新輸入, 仍然是很浪費時間. 所以Luis von Ahn想到一個好方法, 那就把這些機器判讀不出來的字作成圖形驗證碼給網友辨識如何? 於是就看到我們的reCAPTCHA了:

這當中有兩個從書本上掃描下來的字, 它們都是機器判讀失敗的字句. 網友要做的就是把你看到的字母輸進下面那個對話框就可以了. 等等, 既然這兩個字都是機器判讀失敗的字句, 那電腦怎麼知道網友輸入的答案是對還是錯呢? 其實, 電腦已經知道其中一個字(不一定是左邊或右邊) 的正確答案了. 如果網友輸入的那個字是正確的, 那麼電腦會假設另外一個字也是正確的, 並判定網友通過驗證碼.

有的人會問說, 如果我故意把左邊的字打對, 右邊的字打錯, reCAPTCHA還是有一半的機率會讓我通過驗證碼啊, 那這樣是不是會影響到網站的運作, 或是書籍的數位化正確度呢? 這個答案倒是不必太擔心, 因為:

  1. 對reCAPTCHA來說, 他不會只採信一個網友的答案, 也就是每個新字繪重複出現在不同網友的圖形驗證碼好幾次, 然後reCAPTCHA再採信最多人輸入的答案, 因此單一網友的輸入錯誤並不會影響整體翻譯.
  2. 對於一般使用圖形驗證碼的blog或程式而言, 它的功用就是拿來確定輸入答案的是真人而不是程式, 而reCAPTHCA已經做到這點了.

reCAPTCHA的概念很好, 有效地轉換網友花在圖形驗證碼的功夫為書籍的數位化, 值得大家大力推廣. 另外, vgod推薦Click*3改採reCAPTCHA來當認證圖的原因還有一點:

因為reCAPTCHA官網提供頻寬, 幫你生驗證碼, 所以Ian (Click*3官網維護者)可以不必再為圖形驗證碼被破解或是流量太大系統不穩所擔心, 各位網友也可以更順暢的連上Click*3官網, 還能幫忙達成書籍的數位化, 豈不是一舉數得? 趕快找個人去建議Ian把圖案換成reCAPTCHA吧 XD ! 另外, reCAPTCHA也提供程式碼, 給自己架站的網友使用, 有興趣的人可以到reCAPTCHA官網看看.

好, 再回到Click*3比賽現場. 自從Ian改採隨機產生圖形驗證碼後, 各國網友一陣哀鴻遍野. 不過, 難道你以為網友的灌票程式開發就此終結了嗎? 不! 除了持續的除臭蟲, 協助被Ban IP的網友換ip外, 還有人想出了以P2P方式接力解圖形驗證碼的方法! 曾經研究P2P技術一陣子的我, 也不禁要說這些網友的創意真是太有趣了! 據說這個idea也是來自於日本, 而台灣則有代號為θ 的外掛程式沿用了這個概念. (θ 為α灌票程式的外掛模組, 須配合.Net架構安裝.)

所謂的P2P接力解圖形驗證碼是怎麼回事呢? 這個外掛程式把參加的網友分為兩種, 一種稱為”打字兵”, 工作就是專門接收別人電腦裡出現的圖形驗證碼, 然後不斷的幫忙解答; 另外一類的網友稱為”攻擊兵”, 電腦開著一直灌票, 遇到圖形驗證碼就丟給打字兵去解決, 也是變相的全自動灌票程式. 另外, 這程式還有以下特點:

  1. 由於有些網友之前灌票太兇被Click*3 ban IP, 這些網友可以改參加打字兵的工作, 一樣能為比賽貢獻;
  2. 為了怕打字兵一直打字很無聊, 作者還另外做了第二個外掛Enigma, 讓人一邊打字一邊玩俄 羅 斯 方 塊 !

如果θ 配合起前面reCAPTCHA的程式, 到時候Click*3的活動最後可能會變成集網友之力接力完成線上翻譯書籍! 真是意想不到吧!

可惜目前θ 還是必須仰賴一個中心的server, 負責媒合打字兵與攻擊兵…(白話來說, 好像104網站之於企業&求職者的角色). 以程式設計師的角度, 這應該可以改成完全P2P的程式, 少掉中心server (可減輕網站負載), 讓打字與攻擊兵自行尋找對方. 不過程式的改寫以及媒合機制的設計, 顯然還需要一段時間的開發.

看到這裡有沒有覺得這個遊戲所激起的技術戰, 從自動灌票, 圖形驗證, 甚至還最新的引入了P2P的概念, 整個很有趣呢? 其實我覺得更有趣的, 是整個活動裡面網友自發性的工作分配, 這本身就隱含了P2P的意念: 網友自發性的組成程式開發班(一開始的ward被尊稱為元帥), 外交班, 應援班, 戰情回報班, 甚至攻擊兵與打字兵; 這當中都不是由特定網友發號施令, 而是網友相互推舉與腦力激盪而成; 不管從哪個角度來看, 網友的分工與向心力都非常的讓人敬佩. 以前曾在管理學課本中讀到什麼要讓組織決策去中心化(de-centralize), 就應該要更有效的讓員工互相溝通, 增進員工的知識, 加強員工對公司整體營運目標的認同…等等 . 本來以為這些東西只會在企業營運中見到, 沒想到在Click*3的活動裡面, 卻明顯可見到這樣的脈絡, 實在是太讓人驚訝了!

這篇文章完成時, Game 6已經結束了, 而且還正在台日纏鬥不休之際突然完結, 讓許多網友傻眼(尤其是台灣剛剛被日本追過沒多久就結束比賽, 實在…)

附上網友DongROD對於Click*3以及維護者Ian畫的抱怨圖:

喜歡這篇文章嗎? 分享出去給作者一點鼓勵吧!