是否存在已知的特殊情況,其中 keccak256 的前 160 位可以為 null ?還是需要尋找碰撞?
在 Tronix合約程式碼(在許多交易所上市的大型 ICO)中有這個修飾符,用於所有代幣轉移:
modifier validAddress { assert(0x0 != msg.sender); _; }
程式碼是由嚴肅的專業人士編寫的:不是那種龐氏騙局編碼員留下無用的程式碼,在處理交易時每個人都需要花錢。由於契約不再維護,開發人員不再回复此類問題(mailto:service@tron.network)。
關鍵是
msg.sender
由網路設定:合約不能作用於該值。大多數時候,我得到的非官方答案是確實可以將事務發送為
0x0
:即使用的Keccak256(ECDSASIGN(transaction_data_to_sign,e, c, v)[1:])[12:]
地方Secp256k1
將返回 NULL。所以……首先,是否有已知的 keccak256 值一旦被截斷就會返回 NULL 或者 NULL 是否像所有其他值一樣涉及暴力破解?
不,SHA-2、Keccak 和這兩者的重要替代品都被假定為可建模為隨機預言機。給定一個有效的輸入,它將返回一個從均勻隨機分佈中選擇的位串。
任何一個以全零 160 位前綴開頭的字元串的機率是 $ 2^{-160} $ . 這太小了,不能偶然找到。因此,搜尋這樣一個字元串的工作量應該大約相當於 $ 2^{160} $ 雜湊評估。這將消耗大量時間和大量電力。如此之多,以至於我們任何一個地球人都無法實現。
如果有一種方法可以搜尋其輸出具有比蠻力更快的特定屬性的輸入,那麼這意味著該算法被破壞了。讓您輕鬆找到導致輸出位設置為特定值的輸入的攻擊稱為(部分)原像攻擊。
編輯:我只回答了問題的密碼學部分。不是加密貨幣。這是本網站的主題。契約程式碼也是題外話。程式碼中可能存在一些微妙(或明顯)的問題,這些問題會導致問題或導致詐騙。也許有一些類型轉換規則混合了零值、空指針、無值。也許錯誤會作為空指針或零返回值傳播。不要將我不涉及非密碼學材料解釋為對產品的認可。