Factom(公证通)--基于区块链的存证系统
生活随笔
收集整理的這篇文章主要介紹了
Factom(公证通)--基于区块链的存证系统
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Factom這個Solution在2014年的時候就已經推出了,現在已經2018年了,我才來寫這一篇分析文章可能有些遲了,但是它是十分具有參考價值的。因為現階段來開區塊鏈雖然炒得火熱--養貓、養狗、草泥馬之類的,但是真正成熟的應用比較少,有很多連基本的鏈平臺都沒有開發完全。而bitcoin作為區塊鏈的1.0時代的代表,也是區塊鏈行業的標桿存在,它的生態是最完整的--礦池、錢包、交易所。但是相對于區塊鏈2.0Ethereum來講功能就比較單一了,它的智能合約--公鑰腳本功能單一,不是圖靈完備的。基于bitcoin開發的應用就比較少,而ethereum上面的應用就多達800多個(養貓應該是最火的了)。 但bitcoin不是說不能基于它去做一些事情,它也有一些擴展協議可以讓bitcoin Blockchain來發揮更大的作用,比如說 OP_RETRUN 擴展交易。而Factom就是基于這個協議,如果換做此時此刻的話,Factom的創始人可能會選擇更加方便的Ethereum,而不是Bitcoin,但在14年的時候以太坊還不是很成熟,而Bitcoin則更加的穩定可靠,時至今日Bitcoin很少會因為本身的漏洞而造成財產損失,大多數都是因為交易所遭受攻擊而導致大量的Bitcoin被黑客盜取。這一點一要歸功于 pow這個被人‘詬病’的協議,二、它沒有支持圖靈完備的智能合約,功能單一也有好處,有時越簡單粗暴的越可靠,像以太坊就因為智能合約sdk的漏洞造成過兩次大規模的ether泄露。 一、Bitcoin的 OP_RETRUN協議介紹 OP_RETURN是一個腳本操作碼,用于將事務輸出標記為無效。由于任何帶有OP_RETURN的輸出可證明是不可靠的,OP_RETURN輸出可以用來燒毀比特幣。 比特幣社區的許多成員認為使用OP_RETURN是不負責任的,部分原因是比特幣旨在為金融交易提供記錄,而不是任意數據的記錄。此外,對于外部大規模復制數據存儲的需求本質上是無限的,這一點顯而易見。盡管如此,與在區塊鏈中存儲數據的一些其他方式相比,OP_RETURN具有不會創建虛假UTXO條目的優勢。 從比特幣核心版本0.9.0: 這種變化并不意味著將數據存儲在區塊鏈中。 OP_RETURN類型的交易請求創建了一個可證明的可修剪txo,以避免數據存儲方案(其中一些已經部署)將諸如圖像之類的任意數據存儲為永遠不可用的TX輸出,從而膨脹了比特幣的UTXO數據庫。 在區塊鏈中存儲任意數據仍然是一個壞主意,在其他地方存儲非貨幣數??據的成本更低,效率更高。 二、Factom的基本原理 在闡述基本原理之前,我先說幾個有關于Factom的關鍵詞: Factoids : factom發行的代幣,使用factom的服務時要消耗代幣,而且不可以交易。 Entry Credits:提交Entry時要消耗 Credits,而Credits是用Factoids換取的,可以交易。 Entry:提交到Factom上存儲的文件 Entry Block:記錄Entry完整性(Hash值)證明的區塊 Directory Block:記錄Entry Block塊完整性(Hash值)證明的區塊 ChainID:APPlication的賬本ID APPlication:基于Factom服務開發的應用 Federated Servers:用來管理運行Factom的分布式服務集群 Auditing Servers:審查節點,這些審查節點負責審查Federated Servers的生成的賬本是否合法 看到這,你想必應該猜測到了,Factom是有自己的賬本--chain的,不光Factom有每一個App都有自己對應的chain。 factom存證充分的利用了Merkle Hash tree,它的最基本原理就是: 首先將一段時間內上傳的數據都納入到Merkle Hash tree(間接或者直接);然后每隔10min中Root Hash加入到OP_RETRUN交易中,錨定到bitcoin區塊鏈。 稍微了解過bitcoin原理的老鐵應該都知道Merkle tree的精妙之處--假定root hash是正確的,則在不知道其他葉子節點的情況下,仍然能證明單個葉子結點的完整性。這樣做的好處就是你可以不需要關心其他葉子結點(在Bitcoin中是Utxo,在factom中是Entry數據),也能證明自己的完整性,有老鐵可能就問了這么費勁干啥?咋不直接把Entry的Hash錨定到Bitcoin上?貴啊!現在一個Bitcoin市值$14,000左右,礦工費最低要0.0009(不同礦池收費標注不同),而且十分鐘才能添加一塊,還要等待6個塊確認,不說礦工費開銷大,效率也低啊。利用Merkle tree可以上傳最少的數據 32bytes(上面說過一個OP_RETURN最多40),同時又能證明大量的數據完整性,何樂而不為? 本圖將Factom大致的邏輯關系已經呈現的很清楚了: 1.APP的運營者先去Factom上買Factoids,然后將Factoids兌換成Entry Credit 2.APP將數據提交到Factom Servers,加入該APP對應的Entry Chain 3.將 當前周期內上傳 Entry 打包成 EntryBlocks(白皮書上顯示 1min鐘生成一個塊); 4.將 當前周期內生成的EntryBlocks 打包成 Directory Blocks; 5.間隔一段時間(白皮書顯示是10min,正好是比特幣生成區塊的平均時間)將未錨定的Diretory Blocks加入到一個Merkle tree中(按照白皮書說法應該是10塊); 6.將root hash 錨定到Bitcoin中 APP參照了中本聰在bitcoin白皮書中提到的SPV原理,只要關心和自己相關的數據就好了。 三、Factom的組織架構 Factom整個架構體系中有三層,如下: APPLication --------------------------------------- FACTOM Server| Audis Server --------------------------------------- BItcoin Miners Factom 的賬本有四層,如下: APP Entry Chains | FactorId Chain | Credit Chain ------------------------------------------------------ Entry Blocks ------------------------------------------------------ Directory Blocks ----------------------------------------------------- Bitcoin Blocks 3.1 我們先按照架構體系來說: ?所有服務器重設其進程列表(Process List)為空。 用戶通與其Entry信用的積分(Entry Credit)相關的公鑰提交付款 根據用于支付的公鑰,輪值服務器接受該付款。 該服務器向網絡廣播該支付被接受。 用戶看到支付被接受, 然后提交Entry。 根據Entry的ChainID,其中一臺服務器把Entry加入其進程列表,并添加進入到相應鏈的區塊中(如果這是該鏈的第一個Entry, 那就創建這個新鏈)。 服務器對網絡廣播該Entry的確認,內容含有Entry在Process list 中的位置(Index) + Hash(Entry)(鏈接到Entry付款)+ Hash(process list)。 所有其他服務器更新該服務器的process list,驗證該列表,并更新該鏈的區塊。 只要用戶可以驗證到相關的 process list 中包含自己的提交的數據Entry,那么他們就可以有相當的信心相信它會被成功地被錄入到Factom上。 在一分鐘結束時,所有服務器確認process list 的 高度,揭示一個確定性的秘密數值(該值為一個Reverse Hash 值,即一條較長的,連續的區塊鏈哈希值的原像值),還有被處理區塊的一系列哈希值(將與 process list 中的最后一項相匹配)。 那一分鐘的目錄區塊(Directory Block)是由所有服務器中定義的所有Entry區塊(Entry Block)組合到一起建造而生成的。因此,每個服務器都擁有所有的Entry區塊(Entry Block),所有的目錄區塊(Directory Block),和所有Entry(all Entries)。 使用Reverse Hash值的集合來創造一個種子,為下一輪的ChainIDs重新分配服務器。 在完成10個目錄區塊后,請執行以下操作: 對最后一分鐘的Entry塊創建梅克爾根(Merkle Root),按ChainID排序。 創建最后一分鐘的目錄區塊,并計算其梅克爾根(Merkle Root)。 用10個目錄區塊的梅克爾根(Merkle Root)創建一個錨定。 用服務器的反向哈希值集合來創建一個種子,再用其選擇下一個服務器來把錨定寫到比特幣區塊鏈 .重復。 (又從第1部開始循環) Factom 為了防止腐敗發生,所以它的Servers集群中記賬的服務器是會不斷變化的,每隔4個小時進行一次選舉,由user投票來決定哪些服務器能夠成為Factom的記賬服務器,用戶投票的權重是根據Weighted Number of Entry Credits和Weighted Number of Entries計算出來的,所有的服務器都會參選最后進行一個排名,然后選擇前n名成為Federated Servers 其余的為Auditing Servers。 為了防止被選擇的服務器發生故障,每隔四秒就要廣播心跳包(Entry 確認信息),如果一臺服務器沒有收到 X 的心跳包就會發送一個SFM信息認為X是故障的,如果大多數(沒有給出閾值)認為X服務器是故障的,那么X服務器就會降級,由第n+1名服務器升級為Federated Servers,X 降級為Auditing Servers。 ps0:大家可能會困惑既然合法性校驗放在了client side,那么Auditing Servers有個卵用?Auditing Servers 有兩個作用: 一、審查Federated Servers生成塊是否符合規則;二、為Entry 提供存在性證明(Proof of existence)(這是從Factom社區里面得到的回復)。 ps1:Weighted Number of Entry Credits: 加權最近六個月購入的入場券數量(每月購買金額,當月加權6次,前5次加權等) ;Weighted Number of Entries: 加權最近六個月使用的條目數量(每月使用的條目數量,當前月份加權6個,前一個加權5個)。 https://www.factom.com/devs/docs/guide/factom-white-paper-1-0 http://www.8btc.com/factombaipishu https://en.bitcoin.it/wiki/OP_RETURN https://www.cnblogs.com/fengzhiwu/p/5524324.html ---------------------------------------------------分割線----------------------------------------------------- 以上的內容一部分來自我自己從白皮書中的翻譯,一部分引用于上面的網址,其中還有一些不確定性,我在注釋中已經指出,如果哪位老鐵知道答案的話請在評論區留言,我會及時改正。下面我闡述一個自己并不成熟的觀點,就是基于pow鏈的存證系統有多大價值?我們知道現在數據存證常用的是數字簽名,既可以保證數據的完整性,又能保證數據的合法性。最多我再多云備份幾份,你這個存證系統到底有什么存在的必要? 從密碼學破解的角度來看,篡改Factom中的Hash證明要比篡改簽名難度等級要高。因為Factom錨定到了bitcoin上,這是一種信任的傳遞,你如果要想篡改出來一個合法的Hash證明首先要從bitcoin區塊下手。而且隨著時間的推移,后續塊的增多篡改的難度越大,這相比從公鑰推導出私鑰的難度要更大!(當然這是在私鑰沒有被竊取的條件下,如果你的用戶私鑰被竊取,或者說你的Factom賬號被竊取,你仍然可以去篡改Entry的Hash證明。) 但是,從現階段來看,這兩者都是基本“零”可能。然而當量子計算機出現的時候情況就不一樣了,量子計算理論上可以暴力破解非對稱加密,雖然格密碼理論上能夠抵御量子計算,但現有的PKI體系還是難免會收到沖擊。而這個時候Factom的作用就體現出來了,你可以去破解ecc和rsa的證書去偽造證明,但是你依然很難篡改Bitcoin賬本。因為區塊鏈賬本是靠強大的hash算力保護的,而量子計算機在破解hash算法上并沒有什么優勢,所以偽造區塊依舊很難,只要是已經存在的賬本正確性依舊難以動搖。 附,量子計算機維基百科: 歷史 隨著計算機科學的發展,史蒂芬·威斯納在1969年最早提出“基于量子力學的計算設備”。而關于“基于量子力學的信息處理”的最早文章則是由亞歷山大·豪勒夫(1973)、帕帕拉維斯基(1975)、羅馬·印戈登(1976)和尤里·馬尼(1980)年發表[2][3][4] [5]。史蒂芬·威斯納的文章發表于1983年[6]。1980年代一系列的研究使得量子計算機的理論變得豐富起來。1982年,理查德·費曼在一個著名的演講中提出利用量子體系實現通用計算的想法。緊接著1985年大衛·杜斯提出了量子圖靈機模型[7]。人們研究量子計算機最初很重要的一個出發點是探索通用計算機的計算極限。當使用計算機模擬量子現象時,因為龐大的希爾伯特空間而數據量也變得龐大。一個完好的模擬所需的運算時間則變得相當長,甚至是不切實際的天文數字。理查德·費曼當時就想到如果用量子系統所構成的計算機來模擬量子現象則運算時間可大幅度減少,從而量子計算機的概念誕生。半導體靠控制集成電路來記錄及運算信息,量子計算機則希望控制原子或小分子的狀態,記錄和運算信息。 量子計算機在1980年代多處于理論推導狀態。1994年彼得·秀爾(Peter Shor)提出量子質因數分解算法后[8],證明量子計算機能做出離散對數運算[9],而且速度遠勝傳統電腦。因為量子不像半導體只能記錄0與1,可以同時表示多種狀態。如果把半導體比喻成單一樂器,量子計算機就像交響樂團,一次運算可以處理多種不同狀況,因此,一個40比特的量子計算機,就能在很短時間內解開1024位電腦花上數十年解決的問題。因其對于現在通行于銀行及網絡等處的RSA加密算法可以破解而構成威脅之后,量子計算機變成了熱門的話題,除了理論之外,也有不少學者著力于利用各種量子系統來實現量子計算機。 基本概念 傳統計算機即對輸入信號序列按一定算法進行變換的機器,其算法由計算機的內部邏輯電路實現。 輸入態和輸出態都是傳統信號,用量子力學的語言來描述,也即是:其輸入態和輸出態都是某一力學量的本征態。如輸入二進制序列用量子記號 0110110,用量子記號則為| 0110110> 。所有的輸入態均相互正交。對傳統計算機不可能輸入如下疊加態:c1 |0110110> + c2|1001001> 傳統計算機內部的每一步變換都演化為正交態,而一般的量子變換沒有這個性質,因此,傳統計算機中的變換(或計算)只對應一類特殊集。 量子計算機分別對傳統計算機的限制作了推廣。量子計算機的輸入用一個具有有限能級的量子系統來描述,如二能級系統(稱為量子比特(qubits)),量子計算機的變換(即量子計算)包括所有可能的正變換。 量子計算機的輸入態和輸出態為一般的疊加態,其相互之間通常不正交; 量子計算機中的變換為所有可能的正變換。得出輸出態之后,量子計算機對輸出態進行一定的測量,給出計算結果; 傳統計算是一類特殊的量子計算,量子計算對傳統計算作了極大的擴充,其最本質的特征為量子疊加性和量子相干性。量子計算機對每一個疊加分量實現的變換相當于一種經典計算,所有這些傳統計算同時完成,并按一定的概率振幅疊加起來,給出量子計算機的輸出結果。這種計算稱為量子并行計算。
- APPlication :由開發者開發面向用戶的應用,它們都使用了Factom的服務來做數據存儲證明。我們下面描述一下APP加入Factom的過程:
- Factom Servers: factom有一個分布式的服務集群,每一個服務器都會負責一維護部分APP的賬本,同時將更新同步到其他服務器中。Factom中服務器有兩種類型,一種是記賬服務器,一種是審查服務器。
- bitcoin miner:這一層我就不多說了。
上面就是按照體系架構來講述一下它工作的基本流程,Factom的實現比較復雜。
3.2 我們再按照賬本層次來說:- Directory Blocks
- Entry Blocks
- Entrys
轉載于:https://www.cnblogs.com/cnblogs-wangzhipeng/p/8270075.html
總結
以上是生活随笔為你收集整理的Factom(公证通)--基于区块链的存证系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL和PostgreSQL的常用语
- 下一篇: java信息管理系统总结_java实现科