@@ -95,3 +95,32 @@ are done, it always returns an immediate error with code -28 to all calls.
95
95
This new behaviour can be useful for clients to know that a server is already
96
96
started and will be available soon (for instance, so that they do not
97
97
have to start it themselves).
98
+
99
+ Improved signing security
100
+ =========================
101
+
102
+ For 0.10 the security of signing against unusual attacks has been
103
+ improved by making the signatures constant time and deterministic.
104
+
105
+ This change is a result of switching signing to use libsecp256k1
106
+ instead of OpenSSL. Libsecp256k1 is a cryptographic library
107
+ optimized for the curve Bitcoin uses which was created by Bitcoin
108
+ Core developer Pieter Wuille.
109
+
110
+ There exist attacks[ 1] against most ECC implementations where an
111
+ attacker on shared virtual machine hardware could extract a private
112
+ key if they could cause a target to sign using the same key hundreds
113
+ of times. While using shared hosts and reusing keys are inadvisable
114
+ for other reasons, it's a better practice to avoid the exposure.
115
+
116
+ OpenSSL has code in their source repository for derandomization
117
+ and reduction in timing leaks, and we've eagerly wanted to use
118
+ it for a long time but this functionality has still not made its
119
+ way into a released version of OpenSSL. Libsecp256k1 achieves
120
+ significantly stronger protection: As far as we're aware this is
121
+ the only deployed implementation of constant time signing for
122
+ the curve Bitcoin uses and we have reason to believe that
123
+ libsecp256k1 is better tested and more thoroughly reviewed
124
+ than the implementation in OpenSSL.
125
+
126
+ [ 1] https://eprint.iacr.org/2014/161.pdf
0 commit comments