diff options
| author | schwarze <> | 2018-04-29 15:58:21 +0000 |
|---|---|---|
| committer | schwarze <> | 2018-04-29 15:58:21 +0000 |
| commit | 0cafa356a8c4c7fcd0ceea551f687c5d7fbef24e (patch) | |
| tree | f067081374e9045588229a0f9af9373361fb2cbe /src/lib/libcrypto/man/BN_set_flags.3 | |
| parent | 1c03f31f80d0bb4684aefa980cad2bd45fccb749 (diff) | |
| download | openbsd-0cafa356a8c4c7fcd0ceea551f687c5d7fbef24e.tar.gz openbsd-0cafa356a8c4c7fcd0ceea551f687c5d7fbef24e.tar.bz2 openbsd-0cafa356a8c4c7fcd0ceea551f687c5d7fbef24e.zip | |
In view of the recent BN_FLG_CONSTTIME vulnerabilities in OpenSSL,
carefully document constant time vs. non-constant time operation
of BN_div(3), BN_mod_exp(3), and BN_mod_inverse(3).
Until the work that is required on the ill-designed BN_exp(3) and
BN_gcd(3) interfaces can be undertaken, also document the imperfections
in their behaviour, for now. Finally, mention BN_mod_exp(3) behaviour
for even moduli.
Delete the vague statement about some functions automatically
setting BN_FLG_CONSTTIME. It created a false sense of security.
Do not rely on it: not all relevant functions do that.
Topic brought up by beck@, significant feedback and OK jsing@.
Diffstat (limited to 'src/lib/libcrypto/man/BN_set_flags.3')
| -rw-r--r-- | src/lib/libcrypto/man/BN_set_flags.3 | 59 |
1 files changed, 38 insertions, 21 deletions
diff --git a/src/lib/libcrypto/man/BN_set_flags.3 b/src/lib/libcrypto/man/BN_set_flags.3 index a998037534..9b1647cd31 100644 --- a/src/lib/libcrypto/man/BN_set_flags.3 +++ b/src/lib/libcrypto/man/BN_set_flags.3 | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | .\" $OpenBSD: BN_set_flags.3,v 1.2 2018/03/21 09:03:49 schwarze Exp $ | 1 | .\" $OpenBSD: BN_set_flags.3,v 1.3 2018/04/29 15:58:21 schwarze Exp $ |
| 2 | .\" | 2 | .\" |
| 3 | .\" Copyright (c) 2017 Ingo Schwarze <schwarze@openbsd.org> | 3 | .\" Copyright (c) 2017 Ingo Schwarze <schwarze@openbsd.org> |
| 4 | .\" | 4 | .\" |
| @@ -14,7 +14,7 @@ | |||
| 14 | .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | 14 | .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
| 15 | .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | 15 | .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
| 16 | .\" | 16 | .\" |
| 17 | .Dd $Mdocdate: March 21 2018 $ | 17 | .Dd $Mdocdate: April 29 2018 $ |
| 18 | .Dt BN_SET_FLAGS 3 | 18 | .Dt BN_SET_FLAGS 3 |
| 19 | .Os | 19 | .Os |
| 20 | .Sh NAME | 20 | .Sh NAME |
| @@ -47,6 +47,8 @@ together: | |||
| 47 | .It Dv BN_FLG_CONSTTIME | 47 | .It Dv BN_FLG_CONSTTIME |
| 48 | If this flag is set on the divident | 48 | If this flag is set on the divident |
| 49 | .Fa a | 49 | .Fa a |
| 50 | or the divisor | ||
| 51 | .Fa d | ||
| 50 | in | 52 | in |
| 51 | .Xr BN_div 3 , | 53 | .Xr BN_div 3 , |
| 52 | on the exponent | 54 | on the exponent |
| @@ -59,27 +61,14 @@ or the modulus | |||
| 59 | .Fa n | 61 | .Fa n |
| 60 | in | 62 | in |
| 61 | .Xr BN_mod_inverse 3 , | 63 | .Xr BN_mod_inverse 3 , |
| 62 | these functions prefer algorithms with an execution time independent | 64 | these functions select algorithms with an execution time independent |
| 63 | of the respective numbers, to avoid exposing sensitive information | 65 | of the respective numbers, to avoid exposing sensitive information |
| 64 | to timing attacks. | 66 | to timing side-channel attacks. |
| 65 | .Pp | 67 | .Pp |
| 66 | If this flag is set on the exponent | 68 | This flag is off by default for |
| 67 | .Fa p | 69 | .Vt BIGNUM |
| 68 | in | 70 | objects created with |
| 69 | .Xr BN_exp 3 | 71 | .Xr BN_new 3 . |
| 70 | or if the modulus | ||
| 71 | .Fa m | ||
| 72 | is even for | ||
| 73 | .Xr BN_mod_exp 3 , | ||
| 74 | an error occurs. | ||
| 75 | .Pp | ||
| 76 | Various functions automatically set this flag on sensitive data. | ||
| 77 | For example, the default implementations of | ||
| 78 | .Xr DH_generate_key 3 , | ||
| 79 | .Xr DSA_generate_key 3 , | ||
| 80 | and | ||
| 81 | .Xr RSA_generate_key_ex 3 | ||
| 82 | set it on the generated private key. | ||
| 83 | .It Dv BN_FLG_MALLOCED | 72 | .It Dv BN_FLG_MALLOCED |
| 84 | If this flag is set, | 73 | If this flag is set, |
| 85 | .Xr BN_free 3 | 74 | .Xr BN_free 3 |
| @@ -148,3 +137,31 @@ first appeared in SSLeay 0.9.1 and have been available since | |||
| 148 | No public interface exists to clear a flag once it is set. | 137 | No public interface exists to clear a flag once it is set. |
| 149 | So think twice before using | 138 | So think twice before using |
| 150 | .Fn BN_set_flags . | 139 | .Fn BN_set_flags . |
| 140 | .Sh BUGS | ||
| 141 | Even if the | ||
| 142 | .Dv BN_FLG_CONSTTIME | ||
| 143 | flag is set on | ||
| 144 | .Fa a | ||
| 145 | or | ||
| 146 | .Fa b , | ||
| 147 | .Fn BN_gcd | ||
| 148 | neither fails nor operates in constant time, potentially allowing | ||
| 149 | timing side-channel attacks. | ||
| 150 | .Pp | ||
| 151 | Even if the | ||
| 152 | .Dv BN_FLG_CONSTTIME | ||
| 153 | flag is set on | ||
| 154 | .Fa p , | ||
| 155 | if the modulus | ||
| 156 | .Fa m | ||
| 157 | is even, | ||
| 158 | .Xr BN_mod_exp 3 | ||
| 159 | does not operate in constant time, potentially allowing | ||
| 160 | timing side-channel attacks. | ||
| 161 | .Pp | ||
| 162 | If | ||
| 163 | .Dv BN_FLG_CONSTTIME | ||
| 164 | is set on | ||
| 165 | .Fa p , | ||
| 166 | .Fn BN_exp | ||
| 167 | fails instead of operating in constant time. | ||
