Dsa
使 ECDSA 公鑰短一點
在壓縮形式中,ECDSA 公鑰比曲線大小大一點。在某些情況下,這個額外的位是非常不雅的。所以我有以下想法作為刪除它的方法。
- 對於公鑰,額外的位始終為零,因此不需要發送。
- 如果私鑰在公鑰中產生了一個額外的位,則不會使用它。(在 SECP256K1 中,無論如何都必須折疊一些私鑰,所以這只會折疊更多的密鑰。)一種合適的折疊方法是生成一個新的隨機私鑰。另一種可能稍微不太理想的方法是不斷增加私鑰,直到找到有效的私鑰。
我對這樣做的安全後果很感興趣。以下是我有根據的猜測,按照我對它們的信任順序:
- 這絕對不比選擇一個同樣安全的小一到兩位的曲線更糟糕。所以它不能比 SECP224K1 更安全,除非 SECP256K1 損壞或 SECP224K1 異常強大。
- 這實際上比這更強大,因為儘管只有一半的私鑰是有效的,但攻擊者可能無法真正利用這一事實。
- 事實上,它根本不會削弱算法。如果我們願意,我們甚至可以強制公鑰的前 4 個字節為零,唯一真正的成本是找到一個有效的私鑰會變得更加困難。私鑰搜尋空間實際上並沒有小,只是碰撞密鑰的機會更高,實際上仍然為零。只有以攻擊者可以利用的方式減少私鑰空間,才能降低算法的安全性。
我對麼?
我認為您的問題可以簡化為您提到的任何 EC 組中是否存在大量弱公鑰/私鑰對的問題。我不知道有任何這樣的弱點,但如果它存在,它將大大削弱橢圓曲線密碼學的整體安全性。
如果沒有重大風險,您將獲得低於預期安全性的密鑰對,如果您按照相關標準隨機均勻生成,但不丟棄具有不需要屬性的公鑰的密鑰對,則風險將即使您僅根據公鑰的屬性平均丟棄每個其他隨機選擇的密鑰對,它仍然是微不足道的。重申這一點很重要,僅當您不以任何方式修改私鑰生成,而僅丟棄僅基於公鑰屬性的密鑰對時,此論點才成立。
這個論點是基於純邏輯的。如果您從1000 個統一生成的密鑰對中的每一個中獲得預期的安全性,並且攻擊者看到了每個密鑰對的公鑰,那麼您從每 ~500 個擁有所需屬性的公鑰的人中獲得預期的安全性。如果後者是假的,顯然前者也不可能是真的。減少荒謬。