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