ECDSA 具有常見的隨機數?
我是密碼學新手,我正在搜尋 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 及其安全性的文章。