TMT观察网_独特视角观察TMT行业

hashcash算法:從你最熟悉的“驗證碼”來解釋區塊鏈的意義區塊鏈

橙皮書 2018-07-03 12:15
分享到:
導讀

這篇文章會先稍微介紹下hashcash的原理,然后從技術的角度來討論下hashcash代表了比特幣之于傳統互聯網的意義。

寫在前面

比特幣并不是一種新技術。

但比特幣絕對是一款創新的產品。在中本聰提出比特幣的構想之前,有很多相關的密碼學技術已經完成了不少的積累。中本聰的厲害之處在于,他把這幾種不同的技術結合起來,針對 P2P 電子現金系統的需求創造出了一款新的產品。從這個意義上來說,中本聰是一個天才的設計師。他是區塊鏈行業里第一個、也是最出名的產品經理。

比特幣借鑒了很多現有技術。其中,POW (工作量證明)代表的共識機制,借鑒的是 hashcash 算法。hashcash 是一種很有趣的設計,從 hashcash 本身的設計結構來看,我們還可以瞥見比特幣很多的思想和理念。在這篇文章里,橙皮書會先稍微介紹下 hashcash 的原理,然后從技術的角度來討論下 hashcash 代表了比特幣之于傳統互聯網的意義。

從驗證碼開始談起

在解釋 hashcash 是什么東西之前,我們先來聊點群眾們比較熟悉的東西,一個你每天上網都會碰到的、有時還挺招人煩的——驗證碼。

在我們進行一些安全性比較高的操作時,比如賬號登陸、移動支付、購買車票,系統會通過手機短信等驗證方式,確認當前操作者的真實身份。

而在另一些安全性不那么高的操作時,比如在貼吧里發個帖子、查詢某個數據,有時候也會出現一個驗證碼。這個驗證碼通常是一個模糊的圖片,讓你識別圖片里的字母或者漢字,也有技術復雜一點的,可以通過鼠標橫滑、鼠標單擊的方式來驗證。

這種驗證碼最主要的目的,是判定你是人還是機器。

雖然發帖、查詢這些操作本身不具備高安全性要求,但是系統不希望這些操作被不懷好意的人利用,通過大量機器代理賬號進行批量操作,發動DDoS攻擊,或者爬蟲等等。

通過驗證碼,你把每次操作的成本都往上增加了1%,這對單個用戶來說雖然有點不方便,但總體上還是可以忍受的,但對機器來說,想要進行批量操作,每次識別驗證碼都要浪費一些時間,這樣每次操作疊加起來,想在短時間內批量完成就不可能了。

但讀到這里,你可能會跟我有同一種想法:有人會利用機器批量干壞事,但那是他們的問題,為什么我作為一個遵守規則的用戶要為此支付額外的成本?

為什么人們需要因為機器的原因承擔驗證碼的操作成本呢?即使這個操作成本對用戶體驗的影響很小,但本質上,這還是一個系統設計的問題。

再換個方式想,如果直接讓機器像人一樣,在每次操作前都進行驗證碼識別,判斷它自己是合法的機器還是非法的機器,這樣一來,機器產生的問題不就由機器自己解決了嗎?人們完全可以省去驗證碼的煩惱。

timg.jpg

hashcash 的設計原理,簡單點說就是這樣干的 

為了判斷進行操作的機器究竟是合法的還是非法的,最直接的做法,就是讓機器自己證明自己的身份。

機器要怎么證明自己呢?

很簡單,通過付出一定的成本,來表示自己的“可信度”。

我們可以認為,如果一個機器愿意付出多少級別的成本,那么它就是“真心”想進行多少級別的操作。不懷好意的攻擊者則會因為機器進行這項操作的成本與收益不合算,從而放棄利用機器進行批量操作的意圖。

這個想法應該是可行的。但可行還不夠,這套驗明機器真身的系統,它的運作效率還應該盡可能更高一些。

所以,如果我們讓每臺機器在進行操作前都需要計算一個非常復雜的數學問題,通過算力作為機器付出的成本,算出答案的就可以證明自己,那么,系統檢驗這臺機器提交的答案是不是正確答案,這個驗證的過程應該盡可能高效。

有什么數學問題是“計算的時候非常麻煩、但是驗證的時候非常簡單”的?

因數分解算一個。如果你要因數分解一個很大的數字,你可能要花上不少時間去找到它的一組因數。但如果你想知道這組因數是不是正確的答案,把這組數字相乘一下就行了。

hash(哈希)

hash (哈希)函數的作用,跟因數分解是差不多的。

hash 是一種映射函數,簡單來說,它把輸入轉換成一串特定 ID 輸出,這個過程是不可逆的。

比如,如果你用的是比特幣的 SHA-256 哈希函數,輸入“dog”這個單詞,就會輸出:

cd6357efdd966de8c0cb2f876cc89ec74ce35f0968e11743987084bd42fb8944

但如果你把這個單詞稍微改成“doge”, 那么哈希的結果就會變成:

c4e793c81ee40370d827d0cbe748d246cffca2cbe959383edf0976d041ece9e5

輸入數據即使只改變一個字節,它的hash值也會大不相同。

對于一個數據來說,它的hash值是唯一的,最重要的是,你沒有辦法從輸出的這串數字里面推導破解出原始的輸入值。

這樣一來,如果給定一臺機器一串哈希值,讓這臺機器去找出符合某些特點的哈希值的原始輸入值,你手工計算的話估計找一輩子也找不出來,機器也只能一個值一個值反復去試。如果機器不斷窮舉,最終碰運氣試到了正確答案,那么,機器提交答案時,我想知道你這個答案是不是正確的,只要把這個答案 hash 一下,看輸出值是不是和要求的一樣就行了。也就是說,檢驗的過程是很簡單的。

hashcash 就利用了 hahs 函數的這些特點,讓機器不斷地嘗試不同的數字,找出題目要求的那個值。在實際應用中,我們不需要機器找出某一個特定的哈希值,因為這是不可能的事情(從概率上來說),我們只要求機器找出符合某些條件的哈希值就行,比如,這個條件可以是:哈希值的前二十位都是零。

在比特幣里,這個條件則是不斷動態變化的,隨著時間和礦工的增多,算力要求也越來越多,通過調整題目的難度,我們可以控制機器找到答案的速度,最終保持平均每 10 分鐘產出一個區塊的速度。

hashcash

hashcash 的基本原理,抽象出來就是上面所說的那套做法。

在比特幣之前,hashcash 最廣泛的應用是反垃圾郵件。

我們希望,如果需要的話,每個人只要知道 emial 地址,就可以直接方便地給我們發郵件。但同時,我們又不希望,一旦自己的 email 地址暴露出去,會被壞人拿去群發垃圾郵件和廣告郵件。

如果能讓機器在發郵件之前,都需要付出一定的算力來找到正確的哈希數字,那么,每個人依然可以自由的通過 email 發郵件,但那些想用機器批量發垃圾廣告的人,就得付出不少代價了。

你可能會問,如果一旦找到正確的哈希數字,機器不就可以一直使用這個數字來群發郵件了?

為了防止這個問題,hashcash 要求哈希數字必須包含一個時間戳。

時間戳就像郵戳一樣,它代表了這個答案是在什么時候被計算出來的,如果超過一定的時限,這個答案將過期作廢。

hashcash 讓機器在發郵件的時候,需要在發送郵件的數據頭部里加入一個字符串“X-Hashcash” ,這個字符串長這個樣子:1:bits:date:resource:ext:salt:suffix

“X-Hashcash” 其實就是提交答案的戳記,它包括 7 個域: 

版本號(版本 0 更簡單,但是有一些局限性)。 

聲明的比特值。如果戳記沒有真正地使用聲明的前導零比特進行散列,那么它就是非法的。 

生成戳記的日期(和時間)。可以認為當前時間之后的戳記以及那些在很久以前的戳記是非法的。

戳記為哪個資源而生成。可能是一個電子郵件地址,但是也可能是一個 URI 或者其他命名的資源。

特定應用程序可能需要的擴展。任何附加的數據都可以放置在這里,但是,在到目前為止的使用中, 這個域通常是空的。

將該戳記與其他所有人為相同的資源在同一日期生成的戳記區別開來的隨機因子(salt)。例如,兩個不同的人 可以合情合理地在同一天向我的同一個地址發送電子郵件。他們不應該由于我使用了 double spend 數據庫而無法 發送成功。但是,如果他們每個人都使用一個隨機因子,那么完整戳記將是不同的。

后綴是算法真正起作用的部分。假定給出了前 6 個域,為了生成一個通過期望數目的前導零 進行散列的的戳記,minter 必須嘗試很多連續的后綴值。 

我們讓郵件加上了證明機器合法性的戳記,這樣別人想給你發郵件,他只要像以前那樣正常寫郵件就行了,機器會自動在后臺生成一個戳記附在郵件上,對方接收時只要檢查這個戳記是不是合法的,就能決定要不要接收這封郵件了。

hashcash 的意義

hashcash 能讓我們知道發送郵件的是一個真實的用戶、還是一個群發郵件的廣告營銷機器。這套方法擴展開來,不止可以應用在反垃圾郵件里,同樣,它也可以用在服務器的應答機制里。

我們知道,你通過瀏覽器輸入一串地址,之所以能返回一個固定的網頁,得益于 http 通信協議的設計。http 規定,瀏覽器發起一個請求,那么服務器就響應這個請求,返回瀏覽器指定的內容。這個協議本質上非常簡單,它不做太多的額外的狀態判斷,只遵循簡單的“一問一答”。

因為 http 協議設計太簡單,服務器就像一個 email 地址一樣,一旦我們知道輸入一個網址就可以返回某個資源或者對服務器進行某項操作,我們就可以利用機器批量地給一臺服務器連續不斷地“寫信”。服務器對每個請求都做出回應,最終會消耗大量的服務器資源,從而影響正常用戶的訪問。這就是 DDoS 攻擊。

在現實生活中,我們花費了大量的力氣來修補類似 DDoS 攻擊這樣的安全問題。我們發明了各種各樣的服務器防御機制來判斷請求的合法性。但這些方法,都是通過封裝一些其他層面的數據和函數來保護服務器,比如反爬蟲可能會通過判斷短時間內連續訪問的 IP 是不是同一個、每次請求的時間是不是小于人們肉身可以操作的速度,從而判定是不是有人借助機器進行批量操作。

這些方法,相當于額外在 http 這層協議上再造了一個“安檢通道”, http 協議本身并不具備“安檢”的能力。如果我們能通過 hashcash,讓 http 請求本身自帶機器自我證明的信息,這樣一來,我們就可以在協議本身的設計上避免類似 DDoS 這樣的漏洞和攻擊。

而這也是區塊鏈技術相比于傳統互聯網技術最重要的不同點之一。通過區塊鏈、通過 hashcash、通過比特幣的共識機制,我們讓機器在底層傳輸協議上活動時都附帶上了一些額外的信息,這些額外的信息將被用來證明機器自身的合法性,從而在協議層創造出一個機器與機器之間可以彼此信任的網絡環境。

一旦機器與機器之間是可信的,我們就將創造出一個新的互聯網。

在這個新的互聯網里,機器可以判斷其他機器進行請求是否合法,從而使得服務器懂得如何更合理地分配資源。

在這個新的互聯網里,我們可以編寫新的應用,也就是智能合約,然后把智能合約放心地交給機器自動執行。這套智能合約可以穩定地運作下去,而不必擔心網絡中有機器不執行智能合約、或者對智能合約進行篡改、出現機器叛徒。這是以太坊誕生的基礎。

總結:區塊鏈的本質

總而言之,從 hashcash 的設計原理出發,我們擁有了另一種對區塊鏈的見解:

比特幣和區塊鏈本質上是為了解決機器與機器之間的信任問題。通過保證機器是可信的,從而保證網絡的可信度;通過保證網絡的可信度,從而使得加入網絡的人們能在互信的環境里共同遵守規則,借助 token 和激勵機制的設計,最終讓人們的個人利益與群體共同利益貼合在一起,最終使得網絡的群體都往同一個方向發展。

參考

https://zhangli1.gitbooks.io/dummies-for-blockchain/content/chapter1/gong-zuo-liang-zheng-ming/hashcashsuan-fa.html

https://www.ibm.com/developerworks/cn/linux/l-hashcash.html

http://www.hashcash.org/

https://cloud.tencent.com/developer/article/1061358

https://legacy.gitbook.com/book/zhangli1/dummies-for-blockchain/details

https://www.jianshu.com/p/1971c474ecef

機器 hashcash 操作 進行 比特幣
分享到:

1.TMT觀察網遵循行業規范,任何轉載的稿件都會明確標注作者和來源;
2.TMT觀察網的原創文章,請轉載時務必注明文章作者和"來源:TMT觀察網",不尊重原創的行為TMT觀察網或將追究責任;
3.作者投稿可能會經TMT觀察網編輯修改或補充。


專題報道

主站蜘蛛池模板: 国际线缆连接网 - 连接器_线缆线束加工行业门户网站 | 广东高华家具-公寓床|学生宿舍双层铁床厂家【质保十年】 | 环讯传媒,永康网络公司,永康网站建设,永康小程序开发制作,永康网站制作,武义网页设计,金华地区网站SEO优化推广 - 永康市环讯电子商务有限公司 | 岛津二手液相色谱仪,岛津10A液相,安捷伦二手液相,安捷伦1100液相-杭州森尼欧科学仪器有限公司 | 蓝米云-专注于高性价比香港/美国VPS云服务器及海外公益型免费虚拟主机 | 高效复合碳源-多核碳源生产厂家-污水处理反硝化菌种一长隆科技库巴鲁 | 提升海外网站流量,增加国外网站访客UV,定制海外IP-访客王 | 辐射色度计-字符亮度测试-反射式膜厚仪-苏州瑞格谱光电科技有限公司 | 点焊机-缝焊机-闪光对焊机-电阻焊设备生产厂家-上海骏腾发智能设备有限公司 | 韦伯电梯有限公司 | 快干水泥|桥梁伸缩缝止水胶|伸缩缝装置生产厂家-广东广航交通科技有限公司 | 拉卡拉POS机官网 - 官方直营POS机办理|在线免费领取 | 防锈油-助焊剂-光学玻璃清洗剂-贝塔防锈油生产厂家 | 制氮设备-变压吸附制氮设备-制氧设备-杭州聚贤气体设备制造有限公司 | 钣金加工厂家-钣金加工-佛山钣金厂-月汇好 | 不锈钢复合板厂家_钛钢复合板批发_铜铝复合板供应-威海泓方金属复合材料股份有限公司 | 管家婆-管家婆软件-管家婆辉煌-管家婆进销存-管家婆工贸ERP | 周易算网-八字测算网 - 周易算网-宝宝起名取名测名字周易八字测算网 | 湖南教师资格网-湖南教师资格证考试网 | 工业铝型材-铝合金电机壳-铝排-气动执行器-山东永恒能源集团有限公司 | 壹作文_中小学生优秀满分作文大全| 大_小鼠elisa试剂盒-植物_人Elisa试剂盒-PCR荧光定量试剂盒-上海一研生物科技有限公司 | 新材料分散-高速均质搅拌机-超声波分散混合-上海化烁智能设备有限公司 | 产业规划_产业园区规划-产业投资选址及规划招商托管一体化服务商-中机院产业园区规划网 | 淬火设备-钎焊机-熔炼炉-中频炉-锻造炉-感应加热电源-退火机-热处理设备-优造节能 | 深圳市八百通智能技术有限公司官方网站 | 旋振筛_不锈钢旋振筛_气旋筛_旋振筛厂家—新乡市大汉振动机械有限公司 | 烽火安全网_加密软件、神盾软件官网 | 华禹护栏|锌钢护栏_阳台护栏_护栏厂家-华禹专注阳台护栏、楼梯栏杆、百叶窗、空调架、基坑护栏、道路护栏等锌钢护栏产品的生产销售。 | 珠光砂保温板-一体化保温板-有釉面发泡陶瓷保温板-杭州一体化建筑材料 | 磷酸肌酸二钠盐,肌酐磷酰氯-沾化欣瑞康生物科技 | 小型手持气象站-空气负氧离子监测站-多要素微气象传感器-山东天合环境科技有限公司 | 福州时代广告制作装饰有限公司-福州广告公司广告牌制作,福州展厅文化墙广告设计, | 【甲方装饰】合肥工装公司-合肥装修设计公司,专业从事安徽办公室、店面、售楼部、餐饮店、厂房装修设计服务 | 福建自考_福建自学考试网 | 压砖机、液压制砖机、静压砖机、环保砖机生产厂家—杜甫机械 | 山东臭氧发生器,臭氧发生器厂家-山东瑞华环保设备 | 智能化的检漏仪_气密性测试仪_流量测试仪_流阻阻力测试仪_呼吸管快速检漏仪_连接器防水测试仪_车载镜头测试仪_奥图自动化科技 | C形臂_动态平板DR_动态平板胃肠机生产厂家制造商-普爱医疗 | 陕西自考报名_陕西自学考试网 | 翅片管换热器「型号全」_厂家-淄博鑫科环保 |