1. 程式人生 > >scrypt演算法的前世今生(從零開始學區塊鏈 192)

scrypt演算法的前世今生(從零開始學區塊鏈 192)

當我們談論某某幣使用某演算法時,大部分是指其使用的hash演算法,hash演算法在工作量證明中是核心演算法,工作量證明是維護公鏈免於中心化傾向的重要保證,今天介紹一下scrypt這種記憶體依賴型hash演算法

hash演算法想必大家都不陌生,以前的文章有介紹,也稱為雜湊演算法,是資訊科技領域非常基礎也非常重要的技術。它能將任意長度的二進位制值(明文)對映為較短的固定長度的二進位制值(Hash 值),並且不同的明文很難對映為相同的 Hash 值。

hash演算法最早的用途是將一段資料進行簽名,並公佈hash運算後的值,接受者通過對收到的資料進行同樣hash操作,對比hash後的值以證明該資料在傳遞過程中是否被修改過,比較常見的演算法有MD5,SHA等,我們經常會在正規的官方下載網站發現某個下載檔案的MD5值,這就是告訴使用者自行驗證你從其他網站下載的檔案是否有沒有被動過手腳

scrypt的誕生

由於比特幣將hash演算法作為pow工作量證明的重要手段,後續的各種採用pow的數字貨幣也延續了這個設計,以SHA256、MD5(MD5後來被證明不具備強碰撞性數字貨幣一般不用)為代表演算法在設計之初屬於演算法都是算力敏感型,意味著計算資源是瓶頸,主頻越高的 CPU 進行 Hash 的速度也越快。這個設計直接導致後來的礦機出現,採用ASIC晶片的礦機更是將這種運算能力成倍提升,更多礦場的出現使得當時的比特幣面臨算力中心化的威脅(關於礦場這個爭論現在依舊)

為了限制計算能力的依賴,人們開始尋求新的演算法,我們說過現代計算機是“儲存轉發結構”,既然要限制轉發CPU的能力,目光自然投向儲存依賴,也就是記憶體依賴,萊特幣率先使用記憶體依賴型的scrypt演算法作為pow核心,因此奠定了第一山寨幣的地位。

scrpyt演算法是由著名的FreeBSD黑客 Colin Percival為他的備份服務 Tarsnap開發的,當初的設計是為了降低CPU負荷,儘量少的依賴cpu計算,利用CPU閒置時間進行計算,因此scrypt不僅計算所需時間長,而且佔用的記憶體也多,使得平行計算多個摘要異常困難,因此利用rainbow table進行暴力攻擊更加困難。scrypt沒有在生產環境中大規模應用,並且缺乏仔細的審察和廣泛的函式庫支援。所以scrpyt一直沒有推廣開,但是由於其記憶體依賴的設計特別符合當時對抗專業礦機的設計,成為數字貨幣演算法發展的一個主要應用方向。

後來有人在SCRYPT的基礎上稍作修改形成Scrypt –N演算法,改進思路都一樣,都是追求更大的記憶體消耗和計算時間,以有效阻止ASIC專用礦機。

scrpyt後續影響

雖然後來誕生的FPGA礦機可以有效執行scrpyt演算法進行大規模挖礦,(FPGA和ASIC類似,FGPA板每塊有高達24.8GB/s或以上的記憶體頻寬,屬於專用可程式設計晶片,其實顯示卡挖礦也是利用了顯示卡GPU計算能力和記憶體頻寬能力),但是scrpyt演算法的使用開啟了人們對於hash計算去中心化安全的探索。

後來誕生過序列演算法,並行演算法等等,其中X11就是使用了11種加密演算法(BLAKE, BMW, GROESTL, JH, KECCAK, SKEIN, LUFFA, CUBEHASH, SHAVITE, SIMD, ECHO)

不要被這些演算法嚇到,其實就是對一段資料進行了11次不同演算法的運算,通過運算複雜度增強安全性和加大計算資源消耗,一方面更安全,另一方面抵抗專業硬體程式設計礦機。後來認為這種序列方式一個演算法被攻破實際上會導致整個體系安全性受到攻擊,又發展出並行演算法。

所謂並行就是將資料進行分塊,比如切分成11份,每一份使用不同演算法計算,再拼接不同的結算結果而已。

由於pow演算法依賴計算資源,不論是CPU或者是記憶體依賴,到後期總會有更專門的硬體出現,這是計算機體系結構決定的,後期誕生的幣種或相關專案將目光投向pos證明機制,不再依賴算力,這也是發展的必然結果,雖然目前pos機制還在發展中,但是未來這是抵禦中心化算力更好的方式。

scrpyt的價值在於提醒了人們對於算力中心化的認識,促進了區塊鏈系統向更好的方向發展,我認為這是一個里程碑式的演算法,估計該演算法的發明人也沒有想到scrpyt在區塊鏈世界是那麼的重要。

關於本文

scrpyt演算法的論文我沒有找到,萊特幣官網關於scrpyt的介紹也非常少,可以檢視原文連結,喜歡就關注吧,您也可以轉發到群和朋友圈中讓更多人瞭解,您的支援和鼓勵是我最大的動力

640?wx_fmt=jpeg
長按關注,學習更多

相關內容閱讀

相關推薦

scrypt演算法前世今生開始區塊 192

當我們談論某某幣使用某演算法時,大部分是指其使用的hash演算法,hash演算法在工作量證明中是

理解去中心化思維的幾個要素開始區塊 198

區塊鏈技術是去中心化的重要基石,只有具備去中心化思想才能更好的理解這項技術,所以今天我們討論一下

白話hash和數字簽名,保證你看得懂開始區塊 195

最近有朋友在後臺問為啥最近老介紹hash相關文章,其實hash演算法在資訊保安中非常重要,尤其是

開始學習區塊技術--原始碼編譯比特幣

寫在開始之前,為什麼你一定要學習區塊鏈技術? 技術的變革和迭代一直在飛速發展中,作為有著15年程式開發經驗的我,常常在思考現在的我們到底改如何做,到底應該學習些什麼,才能跟上新的時代變革,保持自身的競爭力,並且能為這個世界帶來更好的改變呢? 答案是,學習

開始學習區塊1

定義1:區塊鏈(Blockchain)技術是維護一個不斷增長的資料記錄的分散式資料庫,這些資料通過密碼學的技術和之前被寫入的所有資料關聯,使得第三方甚至是節點的擁有者難以篡改。區塊(Block)包含有資料庫中實際需要儲存的資料,這些資料通過區塊組織起來被寫入資料庫。

開始學習區塊技術--如何接入比特幣網路以及其原理分析

如何接入比特幣網路以及原理分析 1、如何接入比特幣網路? 其實接入比特幣網路是非常簡單的,我說了你一定不信,啟動比特幣客戶端即可: 在命令列終端輸入啟動命令:./src/bitcoind -testnet 輸入之後會有一個和網路同步資料的過程,

第92章、廣播之三通過廣播啟動服務開始Android

  Service(服務)在Android中地位是至關重要的,我們可以通過Activity與Broadcast(廣播)啟動Service(服務),我們本章學習如何通過廣播Broadcast啟動服務Service。   也許你會說,能用Activity啟動,幹嘛要用廣播呢?—

Android studio開發環境搭建教程與軟體安裝教程開始android

學習Android開發的第一步是java環境搭建和android studio軟體的安裝。本文主要講解如何從零開始學android。 Android程式開發用的是java語言,所以我們要先在電腦上配置jdk(java development kit)環境,也即java開

Android筆記:Android後臺介面教程一開始學習Android後臺介面Android 前後臺通訊

前言: 作為一名android開發人員,網路資料都是web開發人員提供,每次讓他們寫一個介面都跟求神拜佛一樣,與其求別人還不如自己動手,經過將近一天的研究,參考了很多的資料。總算研究出來了,寫下來有的人可能會用到。也算是自己做個筆記。文章有些長。請細心看完。

第3章、第一個“Hello,world!”之Android App開始Android

  幾乎所有中、英、法、德、美等版本的程式設計教材中,“hello,world!”程式總是作為開篇之作,可謂經典之中的經典!我本打算用“Hello,android!”替代它,但網上有240種語言都在寫這個“Hello,world!“,所以我想想之後,還是保留吧!   良好的

第25章、OnTouchListener觸控事件開始Android

  在Android App應用中,OnTouch事件表示觸控事件,本章我們通過滑過影象獲取當前位置理解其具體用法。   知識點:OnTouch    一、設計介面   1、首先把c.jpg圖片複製到res/drawable-hdpi資料夾內。      2、開啟“re

第52章、Bitmap影象處理開始Android

1、Drawable → Bitmap public static Bitmap drawableToBitmap(Drawable drawable) { Bitmap bitmap = Bitmap .createBitmap( drawable.getIntrinsicWidth(), drawabl

帶你挖礦之旅!Python開始建立區塊!提供原始碼哦!月薪十萬

環境準備 確保已經安裝Python3.6+, pip , Flask, requests,安裝方法: pip install Flask==0.12.2 requests==2.18.4 同時還需要一個HTTP客戶端,比如Postman,cURL或其它客戶端。參考

用spring boot 2開始建立區塊

一、區塊鏈物件模型的基礎屬性(BlockChain) @ApiModelProperty(value = "當前交易列表", dataType = "List<Transaction>") @JSONField(serialize = false) @Js

用Python開始建立區塊

本文主要內容翻譯自Learn Blockchains by Building One 本文原始連結,轉載請註明出處。 作者認為最快的學習區塊鏈的方式是自己建立一個,本文就跟隨作者用Python來建立一個區塊鏈。 對數字貨幣的崛起感到新奇的我們,並且想知道其背後的技術——區塊鏈是怎樣實現的。 但是完全搞懂區塊鏈

看完此文再不懂區塊算我輸,用Python開始建立區塊

如果你還沒有聽說過 3 點鐘區塊鏈群,說明你還不是鏈圈的人;如果你還沒有加入 3 點鐘區塊鏈群,

開始學習區塊技術

區塊鏈技術被認為是繼蒸汽機、電力、網際網路之後,下一代顛覆性的核心技術。 一句話解釋區塊鏈 有一天,你答應你的女朋友要給她買個迪奧的包包,她立刻記下這句話,還發了朋友圈、微信群,並告訴了你們的所有朋友,讓你完全無法抵賴,你女朋友還給這些人發了幾個紅包,好

用 Python 開始建立區塊

本文主要內容翻譯自 Learn Blockchains by Building One 本文原始連結 , 轉

開始演算法歸併排序

從零開始學演算法(四)歸併排序 歸併排序 演算法介紹 演算法原理 演算法簡單記憶說明 演算法複雜度和穩定性 程式碼實現 歸併排序 程式碼是Javascript語言寫的(幾乎是虛擬碼) 演算

開始演算法插入排序

從零開始學演算法(三)插入排序 插入排序 演算法介紹 演算法原理 演算法簡單記憶說明 演算法複雜度和穩定性 程式碼實現 插入排序 程式碼是Javascript語言寫的(幾乎是虛擬碼) 演算