Add Double Public Key Signing Function Oracle Attack on ed25519-dalek (#1744)

Closes #1360
This commit is contained in:
Tony Arcieri
2023-08-14 11:12:30 -06:00
committed by GitHub
parent 15e3b1b071
commit 9012b65f10

View File

@@ -0,0 +1,29 @@
```toml
[advisory]
id = "RUSTSEC-0000-0000"
package = "ed25519-dalek"
date = "2022-06-11"
categories = ["crypto-failure"]
url = "https://github.com/MystenLabs/ed25519-unsafe-libs"
[versions]
patched = [">= 2"]
```
# Double Public Key Signing Function Oracle Attack on `ed25519-dalek`
Versions of `ed25519-dalek` prior to v2.0 model private and public keys as
separate types which can be assembled into a `Keypair`, and also provide APIs
for serializing and deserializing 64-byte private/public keypairs.
Such APIs and serializations are inherently unsafe as the public key is one of
the inputs used in the deterministic computation of the `S` part of the signature,
but not in the `R` value. An adversary could somehow use the signing function as
an oracle that allows arbitrary public keys as input can obtain two signatures
for the same message sharing the same `R` and only differ on the `S` part.
Unfortunately, when this happens, one can easily extract the private key.
Revised public APIs in v2.0 of `ed25519-dalek` do NOT allow a decoupled
private/public keypair as signing input, except as part of specially labeled
"hazmat" APIs which are clearly labeled as being dangerous if misused.