## 8.?**非對稱簽名**
應該使用NaCl,Ed25519,或者RFC6979
應用場景:如果你在設計一種新的比特幣,或者一個給Ruby Gems或者Vagrant imges文件簽名的系統,或者數字版權保護系統(DRM),其中一系列的文件需要離線做認證; 或者你在設計一個加密消息傳輸層
上一條的內容在此處全部適用。
在10+年做付費軟件安全評估的工作經歷中,我只有屈指可數的幾次,遇到使用RSA-PSS的用戶,RSA-PSS是一個學術界的推薦算法。
過去10年,非對稱簽名最主要的應用場景是比特幣,和前向安全的密鑰協商(TLS協議里面的ECDHE)。 其中最主要的算法全都是基于橢圓曲線體制的。務必警惕新出現的使用RSA簽名的系統,很有可能有問題。
在過去幾年中,業界有一種趨勢:放棄傳統DSA簽名,改為難以誤用的**確定性簽名體制**,其中的EdDSA(不要和ECDSA搞混了喂!)和RFC6979是最好的例子。這種趨勢的主要是受到2010年索尼PlayStation 3的 ECDSA私鑰被破解事件的影響,在這個案例中,索尼公司的碼農錯誤地把一個隨機數重復使用來做ECDSA簽名,形成了漏洞,使得破解者據此直接把私鑰算出來了。**確定性簽名體制**在設計中不再依賴隨機數生成器,因此徹底避開此類誤用。所以你應該優先使用確定性簽名體制。
* 避免RSA-PKCS1v15,避免RSA,避免ECDSA,避免DSA
* 特別要避免常規的DSA和ECDSA