網上有很多關于pos機安全攻擊, 探討一下區塊鏈中隨機數安全問題的知識,也有很多人為大家解答關于pos機安全攻擊的問題,今天pos機之家(www.tonybus.com)為大家整理了關于這方面的知識,讓我們一起來看下吧!
本文目錄一覽:
1、pos機安全攻擊
pos機安全攻擊
前言
“隨機數”在計算機程序中并不少見,開發人員也會經常使用隨機數進行數值的模擬、預測。在C++程序里,我們經常使用一定的種子來進行隨機數的生成過程。在計算機程序中,隨機數可以被分為真隨機數與偽隨機數。而真隨機數是十分難實現的,例如使用篩子、轉輪等等。對于偽隨機數來說,我們又分為:
強偽隨機數:難以預測的隨機數,常用于密碼學。弱偽隨機數:易于預測的隨機數。隨機數有3個特性,具體如下:
隨機性:不存在統計學偏差,是完全雜亂的數列,即分布均勻性和獨立性不可預測性:不能從過去的數列推測出下一個出現的數不可重現性:除非將數列本身保存下來,否則不能重現相同的數列隨機數的特性和隨機數的分類有一定的關系,比如,弱偽隨機數只需要滿足隨機性即可,而強位隨機數需要滿足隨機性和不可預測性,真隨機數則需要同時滿足3個特性。
上述是宏觀上隨機數的情況,然而在區塊鏈的場景下,隨機數又有了不同。對于分布式的APP,區塊鏈先天就在隨機數的生成中有了弊端。要領所有的用戶都能夠得到相同的隨機數數值并且還不能讓延時過高確實是個很難的挑戰。
在區塊鏈中,隨機數有很多的應用場景,例如抽獎活動、驗證碼、Token、密碼應用場景(生成秘鑰、生成鹽)等。
隨機數的安全也是一個由來已久的問題。一個廣泛的原則是:隨機性的生成最好不被任何個體所控制。如從比特幣的未來某區塊的數據來獲取隨機性的方式是不能使人信服的,因為這些隨機性最終實際上是由某個個體決定的,無法證明這個相關人沒有作惡等等。
下面我們就針對區塊鏈中的隨機數生成進行詳細分析,并對現在的隨機數安全進行代碼實現。
區塊鏈中的隨機數
我們都知道PoW的方案是讓全網共同進行哈希計算,并在出題時設置一個計算哈希的難題,誰先算出來誰就獲勝。所以這就意味著算力高的贏的概率高,算力低的贏的概率低,以這樣的方式保證勝出者是隨機的。而在計算難題的設置上也存在的隨機數的設置,這個隨機數需要所有的節點均能夠查看到,并且能夠做到無法預測。
對于Pos來說,它為了解決Pow中存在的浪費電力的情況,它選擇了了隨機選舉一個節點來出塊,并且被選中的概率和它擁有的份額相關。倘若系統能夠保證隨機這個過程是無法預測且真實的,那么惡意節點只能通過增加自己的份額,增加自己被選中的概率,從而增加雙花攻擊的成功概率。比較Pow,Pos攻擊者要實現攻擊,先得成為持幣大戶,如果因為攻擊而導致幣價大跌,攻擊者也會承受最大的損失。
根據我們的分析,上述兩種情況均涉及到隨機數的產生。我們假設此處的隨機數存在問題,例如存在可預測的情況。那么攻擊者就可以無限的進行作惡。在Pow中,他就會比別的節點提前知道隨機數的內容,并且能夠先人一步提前進行計算,也就意味著他能夠有更大的概率獲得記賬權。對于Pos來說,攻擊者就能根據隨機數的生成機制,更改某些條件以達到使的選擇到自己為記賬人的概率加大,從而提升自己記賬的權利。
傳統地PoS方案嘗試從鏈上的數據入手,比如使用上一個區塊的哈希值,上一個區塊的時間戳等等來作為隨機數的來源,但這些會帶來額外的安全風險。 因為區塊本身的信息就是節點寫進去的,然后又要根據里面的信息來選舉后續的出塊者,存在循環論證的嫌疑,安全性不會太好。 這也是傳統地認為PoS方案不如PoW可靠的部分原因。
區塊鏈是一個分布式的系統,它要求各個節點的運算結果是可驗證、可共識的。然而傳統的偽隨機數生成算法與單臺機器的物理狀態或運算狀態相關,不同的機器或者節點會展現出不同的運算結果,然而區塊鏈上不能這么進行設計。
所以針對DAPP,有一下三種解決方案供參考:
第一種是引入第三方,并讓可信第三方為合約提供隨機數;第二種是通過合約的設定進行多方協作從而實現偽隨機數的生成,為其他合約提供一致性的隨機數。第三種是讓所有節點上的合約可以采集到相同的種子,再通過偽隨機算法計算出相同的隨機數序列。
下面我們具體來看:
1 可信第三方參與生成
在區塊鏈系統中,為了使所有的節點的隨機數同一,我們可以將區塊鏈的所有節點接入第三方的平臺上來。簡單來說,我們可以可以找一個應用幫助我們生成隨機數,而所有的節點均對這個應用信任。
雖然這樣可以解決隨機數生成的問題,但是我們知道區塊鏈作為去中心化的代表,倘若引入了中心化的應用來幫助是有些違背理論的。 然而該第三方是否值得信任,能否能提供高質量的隨機數均是問題。倘若這個應用于其他攻擊者聯手或者被黑客攻破,那帶來的威脅也是巨大的。
不過還是有一些落地的DAPP使用了這種設計思維。例如:External oracles: Oraclize。
Oraclize 提供了一個連接以太坊與互聯網的橋梁。通過 Oraclize,智能合約能夠通過 web API 請求數據。如當前的兌換率,天氣預報或股票價格。其中一個最大的作用是能提供偽隨機數。一些合約通過 Oraclize 中的 URL 連接器來連接 來獲取偽隨機數。如下圖所示:
在這個應用中,Oracle是提供數據的一方。由于區塊鏈應用程序(如比特幣腳本和智能合約)無法直接獲取所需數據,因此需要這樣的數據:資產和金融應用程序的價格供給。此應用多用于點對點保險的天氣相關信息。賭博的隨機數生成。Oraclize是一個預言機,獨立于區塊鏈系統之外,智能合約發送請求給Oraclize,當Oraclize監聽到鏈上相關請求后,生成隨機數并將結果返回區塊鏈。
下面代碼是在以太坊中接入的函數:
基礎合約參與生成
第二種方法是在區塊鏈中最符合分布式思想的一種,他需要區塊鏈系統中不同的參與者進行合作才能生成偽隨機數。具體的算法我們講解如下:
首先,在隨機數生成時,為了能夠達到生成隨機數的安全特性,我們需要使用密碼學的理論來充實我們的概念。首先我們來看承諾和打開((Commitment & Open)。
在承諾與打開的應用場景下,倘若此處存在兩個用戶A與B。他們兩個人并沒有面對面,但是他們想進行一個石頭剪刀布的游戲,并決出獲勝者。那我們應該怎么做呢?倘若時間不同步,那么一個人就能看到另一個人的情況,這也就意味著他們無法公平的競爭。所以我們要對每個人的結果采取一些措施:
他們先自行做出選擇,然后把自己的選擇做個哈希;(H(A)、H(B))交換這個哈希;等雙方都收到對方的哈希后,再交換雙方的選擇;驗證對方的選擇和之前的哈希一致;這個過程中也可以添加入自己的公鑰以做證據,防止以后反悔。
這樣雙方都知道了對方的選擇,也能確認對方的選擇是提前就做好的。 這個哈希值就叫做承諾,因為它里面包含了保密信息,但又沒有泄漏保密信息,而最終發送對應的保密信息,就叫做打開承諾。
下面我們講述一下如何在生產隨機數的過程中記錄作惡節點并對其進行懲罰。下面我們介紹下秘密共享方案:
秘密共享是說,一個人可以把一個需要保密的信息,拆分成n份,分別發送給n個人,只要惡意節點不超過一定數量,最終大家可以綜合各自的信息片段把原始信息還原出來。 并且就算分發者如果作弊,大家也可以檢查出來。比如密碼共享方案(3,9)即將一個秘密分為九份,然后分配給9個人,只要九份中的三份放在一起就可以恢復出秘密。
例如下面的直接坐標系,我們都知道y = ax +b直線坐標需要兩個點可以確定這個直線。所以我們可以用此方程做(2,n)的共享方案。我們可以在圖像上尋找n個點并分發給n個用戶,之后倘若有兩個用戶將點放在一起便可以恢復成直線,也就可以得出b的值。而b的值就是我們隱藏的秘密。
知道了這些,倘若作惡節點不發送隨機數的打開方式,那么我們也可以利用合理數量的用戶來打開秘密。保證系統的正常運行。如果他想在拆分信息上作弊,大家也能檢查出來并把他踢掉。
最后,因為我們本來就是個區塊鏈,所以協議過程中需要廣播的信息,我們可以直接寫到鏈上去, 這樣可以簡化實現,并且也不需要所有投票節點同時在線,并且如果有人作弊,作弊的記錄將會永遠保存在鏈上。采取相應的懲罰措施也會使惡意節點收手。
在講完密碼學基礎后,我們引用一張圖來表示這個過程:
公共種子采集生成
在第三種方式,合約采用了公共區塊上面的信息進行隨機數的seed值,由智能合約根據種子生成偽隨機數。這種方法最大的缺陷就是一旦黑客知道了隨機數的生成算法,也能獲取正確的種子,就能輕易地對智能合約發起隨機數攻擊。
然而不同于傳統的中心化系統,區塊鏈上的信息是所有人都能看到的,區塊鏈上的種子幾乎是“透明”的。它是鏈上的區塊信息,所有節點上的智能合約都能夠取到,那么從原理上講,黑客用于攻擊的惡意合約同樣可以獲得這些數值。
下面我們列舉幾個危險的隨機數生成函數”:
在實例中,我們看到使用了block.number這個函數。而在我們的實驗中,我們可以看到:
除此之外,我們還可以使用困難度進行隨機數產生,然而這也是不安全的。
由此可見,這種方法也是需要更深刻的進行設計的。當黑客獲取到隨機數算法后,他就能根據算法的內容進行百分百預測從而進行作惡。
而在我們的的時候發現,許多合約使用了block.blockhash(block.number)這個函數作為生成隨機數的種子。這是十分危險的。block.number 變量可以獲取當前區塊區塊高度。但是還沒執行時,這個“當前區塊”是一個未來區塊,即只有當一個礦工把交易打包并發布時,這個未來區塊才變為當前區塊,所以合約才可以可靠地獲取此區塊的區塊哈希。
所以這個信息不論怎么運行都只會返回0值。
pos機系統安全已觸發怎樣維修?
這種情況有兩種解決方式:
一、遠程解鎖。
一般情況下出現“PED鎖定”“受到攻擊”等等是可以遠程解鎖的,您需要聯系客服人員,提供您的機器品牌和名稱,然后根據客服人員的提示輸入密碼,按照提示流程操作即可。
二、走正常售后流程來清除緩存。
您可以電話聯系售后服務人員,讓他上門為您解決或者返廠進行維修。
以上就是關于pos機安全攻擊, 探討一下區塊鏈中隨機數安全問題的知識,后面我們會繼續為大家整理關于pos機安全攻擊的知識,希望能夠幫助到大家!
