Implementation

ECDSA 具有常見的隨機數?

  • November 27, 2019

我是密碼學新手,我正在搜尋 ECDSA,因為我正在嘗試解決 CTF。

我已經檢查了這個網站和Google,我認為我在正確的道路上,但可能我錯過了一些東西。

我可以訪問消息和它們生成的 ECDSA 簽名。格式始終相同:

消息範例:

{"session_id": "6621a96c7db568374f2885d6d135f395010e75a94ec2233a433ff8e2", "user": peter}

並且簽名總是相同的前半部分。

znnlVaDhCokfqzU5figrY2cZ1nk87rH/

兩個簽名範例:

znnlVaDhCokfqzU5figrY2cZ1nk87rH/+Zc/DvAEIyjZ4pv8SVmCsWLtq+yJrtFJ znnlVaDhCokfqzU5figrY2cZ1nk87rH/zcCHDV2rLJ6nhdjE9vzblfpkzrhqzVjY

這看起來像用NIST192p曲線生成的簽名(因為大小)?

有類似的 CTF 使用與此相同的東西,以及類似的解決方案:http ://ropnroll.co.uk/2017/05/break-ecdsa/

但是新生成的簽名並沒有以與上述相同的部分開頭。

他們似乎是基於這個,https: //antonio-bc.blogspot.com/(你可以尋找ECDSA)。

這又是另一個有類似問題的 CTF,但曲線不同。http://itemize.no/2016/08/26/IceCTF-contract-task/

我還查看了來自 LiveOverflow 的解決相同問題的影片,https://www.youtube.com/watch?v= -UcCMjQab4w

由於這些是以前 CTF 的解決方案,我認為我創建消息的方式與伺服器不同。

這個 ECDSA 實施應該是脆弱的,對吧? 是我現在擁有的修改後的程式碼。

你說的對。過去在 PS3 和比特幣錢包事件中已經利用了這一點。

簽名的前半部分是 x 座標 $ k \times G $ , 和 $ k $ 是生成的每個簽名必須唯一的臨時密鑰。如果它是靜態的,則以下公式將恢復私有簽名密鑰:

$ k = {{z_1 - z_2} \over {s_1 - s_2}} $ 和 $ d = {{sk-z} \over r} $ 在哪裡 $ z_1 $ 和 $ z_2 $ 是截斷的雜湊位串, $ s_1 $ 和 $ s_2 $ 是兩個對應的簽名分量, $ r $ 作為兩個簽名中的固定部分,並且 $ d $ 我們尋找的私鑰。

更多資訊,維基百科有一篇涵蓋 ECDSA 及其安全性的文章。

引用自:https://crypto.stackexchange.com/questions/64167