通過ECDSA簽名獲取以太坊上其他賬戶私鑰的思路

2021-09-28 13:53:51 字數 2250 閱讀 4799

前段時間看了一篇文章`利用隨機數衝突的ecdsa簽名恢復以太坊私鑰`

講的是同一交易傳送者和接收者的兩筆交易的隨機數k相同的時候,可以推斷出交易傳送者的私鑰。

我想著能不能通過遍歷整個以太坊上面所有交易的簽名資訊裡的r值來找出滿足上述條件的兩筆或者多筆交易。

思路是:從第0個區塊開始到最新的區塊讀取每個區塊裡面的交易裡面的r值,然後儲存到資料庫裡。然後通過檢視資料庫的工具來輕易的找到兩個r為一樣的資料。資料庫裡記錄r的值和當前r所在區塊的值。然後還原出私鑰。相信整個鏈上到目前為止800w個區塊還是有可能找到滿足上面條件的。

下面附上**:

)//區塊高度

var height string

//當前區塊交易數量

var blocktransactioncountbynumber string

//10進製顯示區塊高度因為獲取到的區塊高度為16進製制,方便列印檢視

var decheight uint64

//每個區塊的結構

type blocktransactionobject struct

//每筆交易的結構

type transaction struct

//例項化區塊物件

var blocktransactionobjects blocktransactionobject

//宣告乙個資料庫控制代碼,接受後面的操作賦值

var conn *sql.db

func main()

//進入資料庫ethsig

_,err = conn.exec("use ethsig")

if err != nil

//連線以太坊主網介面,沒有的可以自己去申請

client,err:=rpc.dial("")

if err!=nil

defer client.close()

decheight=getheight(client)

fmt.println("當前區塊高度:",decheight,"十六進製制:",height)

for i:=3750;i<=int(decheight);i++

}//獲取以太坊最新區塊高度,轉成10進製返回

func getheight(client *rpc.client)(uint64)

n, _ := strconv.parseuint(height[2:],16,32)

return n

}//獲取當前區塊交易數

func getblocktransactioncountbynumber(client *rpc.client,j string)()

heights, _ := strconv.parseuint(j[2:],16,32)

blocktransactioncountbynumbers, _ := strconv.parseuint(blocktransactioncountbynumber[2:],16,32)

fmt.println("當前塊:",heights,"當前塊交易數量:",blocktransactioncountbynumbers)

getblockbynumber(client,j)

}//依次遍歷區塊裡交易資訊並且寫入資料庫

func getblockbynumber(client *rpc.client,heights string)

for key,_ :=range blocktransactionobjects.transactions

fmt.println()

}//寫資料庫操作,儲存r值和當前r所在區塊高度

func setdatabases(conn *sql.db,r string,index string)

res, err := stmt.exec(r,index)

id, err := res.lastinsertid()

fmt.println(id)

if err != nil

defer conn.close()

}如果有大佬的話可以幫我優化下**,感激不盡

以太坊交易簽名

以太坊的transcation結構如下 以下為交易本身資料資訊 let accountnonce uint64 let price bigint let gaslimit bigint let recipient address let amount biguint var payload data...

理解以太坊上的代幣

如果你對以太坊的世界有一些了解,你很可能聽過人們聊到代幣 尤其是 erc20 代幣.乙個 代幣 在以太坊基本上就是乙個遵循一些共同規則的智慧型合約 即它實現了所有其他代幣合約共享的一組標準函式,例如 transfer address to,uint256 value 和 balanceof addr...

以太坊上搭建自己的私有鏈

首先介紹一下什麼是公有鏈和私有鏈 公有鏈 世界上任何乙個人都可以參與的區塊鏈。使用者可以檢視,可以傳送交易,也可以參與保持資料一致性的運算等。私有鏈 完全的私有鏈是指寫許可權是由乙個人或乙個單個組織控制的鏈。私有鏈的讀許可權是可以公開的或者是有限度的在一定範圍公開的。比如私有鏈可以用在資料庫的管理,...