Rainbow-I
Rainbow Ia, the round-three parameter set over GF(16) with 36 vinegar variables and layers of 32 and 32 oil variables. A two-layer unbalanced oil and vinegar signature: the secret central map is inverted one layer at a time, the public key is that map composed with two affine transforms. Broken by Beullens in 2022 and withdrawn from standardisation; kept for its construction and its published test vectors only.
Properties
| Property |
Value |
| Category |
Asymmetric Ciphers |
| Sub-category |
Multivariate Digital Signature |
| Security status |
β Broken |
| Complexity |
Expert |
| Inventor |
Jintai Ding, Dieter Schmidt |
| Year |
2005 |
| Origin |
π International |
| Source |
algorithms/asymmetric/rainbow.js |
Parameters
| Parameter |
Supported values |
| Key sizes |
32 bytes (256 bits) to 64 bytes (512 bits) in steps of 32 bytes |
Parameter set details
| Name |
Value |
name |
Rainbow-I |
gfSize |
16 |
v1 |
36 |
o1 |
32 |
o2 |
32 |
hashLen |
32 |
v2 |
68 |
n |
100 |
m |
64 |
v1b |
18 |
v2b |
34 |
o1b |
16 |
o2b |
16 |
nb |
50 |
mb |
32 |
saltBytes |
16 |
seedBytes |
32 |
sigBytes |
66 |
triV1 |
666 |
triO1 |
528 |
triO2 |
528 |
triN |
5050 |
skSeed |
0 |
skSeedSize |
32 |
s1 |
32 |
s1Size |
512 |
t1 |
544 |
t1Size |
576 |
t4 |
1120 |
t4Size |
576 |
t3 |
1696 |
t3Size |
512 |
l1F1 |
2208 |
l1F1Size |
10656 |
l1F2 |
12864 |
l1F2Size |
18432 |
l2F1 |
31296 |
l2F1Size |
10656 |
l2F2 |
41952 |
l2F2Size |
18432 |
l2F3 |
60384 |
l2F3Size |
18432 |
l2F5 |
78816 |
l2F5Size |
8448 |
l2F6 |
87264 |
l2F6Size |
16384 |
skSize |
103648 |
pkSeed |
0 |
pkSeedSize |
32 |
cQ3 |
32 |
cQ3Size |
18432 |
cQ5 |
18464 |
cQ5Size |
8448 |
cQ6 |
26912 |
cQ6Size |
16384 |
cQ9 |
43296 |
cQ9Size |
8448 |
cl2Q9 |
51744 |
cl2Q9Size |
8448 |
cpkSize |
60192 |
cskSize |
64 |
pkSize |
161600 |
eL1Q1 |
0 |
eL1Q1Size |
10656 |
eL1Q2 |
10656 |
eL1Q2Size |
18432 |
eL1Q3 |
29088 |
eL1Q3Size |
18432 |
eL1Q5 |
47520 |
eL1Q5Size |
8448 |
eL1Q6 |
55968 |
eL1Q6Size |
16384 |
eL1Q9 |
72352 |
eL1Q9Size |
8448 |
eL2Q1 |
80800 |
eL2Q1Size |
10656 |
eL2Q2 |
91456 |
eL2Q2Size |
18432 |
eL2Q3 |
109888 |
eL2Q3Size |
18432 |
eL2Q5 |
128320 |
eL2Q5Size |
8448 |
eL2Q6 |
136768 |
eL2Q6Size |
16384 |
eL2Q9 |
153152 |
eL2Q9Size |
8448 |
extSize |
161600 |
Security
Status: β Broken
Known vulnerabilities
| Issue |
Description |
Mitigation |
| Key recovery in a weekend |
Beullensβ rectangle MinRank attack finds the secret subspace of the second layer directly from the public key. The published attack recovers a Rainbow-I private key in about 53 hours on a laptop, against a claimed 2^128 of security, and the same method reduces the larger parameter sets well below their claims |
None. The scheme is broken as specified; NIST dropped it at the end of the third round. Use a signature that is still standing |
| Withdrawn from standardisation |
Rainbow was a third-round finalist and was not selected. No parameter set was raised to restore the claimed levels, and the scheme has no successor here |
Use ML-DSA (FIPS 204), SLH-DSA (FIPS 205) or Falcon |
| Published demonstration keys |
The seeds in the test vectors are printed in this file, derive from published Known Answer Test data and confer no secrecy whatever |
Nothing here is usable as a key. The scheme itself is broken, so there is no safe way to supply a real one either |
Documentation
References
Test vectors
3 vectors ship with this algorithm and run in the test suite. Byte values are hexadecimal.
Vector 1 β Rainbow-I Ia Circumzenithal KAT entry 0
| Field |
Value |
key |
8626ed79d451140800e03b59b956f821 0e556067407d13dc90fa9e8b872bfb8f 7c9935a0b07694aa0c6d10e4db6b1add 2fd81a25ccb148032dcd739936737f2d |
input |
d81c4d8d734fcbfbeade3d3f8a039faa 2a2c9957e835ad55b22e75bf57bb556a c8 |
expected |
d81c4d8d734fcbfbeade3d3f8a039faa 2a2c9957e835ad55b22e75bf57bb556a c88847ec401b4b72631083a138e29d23 23d1759d7268af6b3edb06762722491f a2bc3e93dd9a10a995f9b38ab6c65b60 8ac9fe4b9a9e38ee4622d5bc61d8e1fe 912433 |
Vector 2 β Rainbow-I Ia Circumzenithal KAT entry 1
| Field |
Value |
key |
e82fcc97ca60ccb27bf6938c975658ae b8b4d37cffbde25d97e561f36c219ade 4b622de1350119c45a9f2e2ef3dc5df5 0a759d138cdfbd64c81cc7cc2f513345 |
input |
225d5ce2ceac61930a07503fb59f7c2f 936a3e075481da3ca299a80f8c5df922 3a073e7b90e02ebf98ca2227eba38c1a b2568209e46dba961869c6f83983b17d cd49 |
expected |
225d5ce2ceac61930a07503fb59f7c2f 936a3e075481da3ca299a80f8c5df922 3a073e7b90e02ebf98ca2227eba38c1a b2568209e46dba961869c6f83983b17d cd4992f541ac65b6f3240547be53b796 eb3581385f9d4a0ef041c833feae4403 5730493c10ceefe90bfc61cc58d8eff7 12232740d0bd6e49bd95099f3cfa73ed ae6777a8 |
Vector 3 β Rainbow-I Ia Circumzenithal KAT entry 2
| Field |
Value |
key |
f333d36590910e7a5a6cbe567bcdd154 137eef62b92bf8dc1fdc900e7c194e5f 1d836e889e46259bcd1ccd2b369583c5 b47cfbb919ec2b72c280247cb15a5569 |
input |
2b8c4b0f29363eaee469a7e33524538a a066ae98980eaa19d1f10593203da214 3b9e9e1973f7ff0e6c6aaa3c0b900e50 d003412efe96deece3046d8c46bc7709 228789775abdf56aed6416c90033780c b7a4984815da1b14660dcf34aa34bf82 cebbcf |
expected |
2b8c4b0f29363eaee469a7e33524538a a066ae98980eaa19d1f10593203da214 3b9e9e1973f7ff0e6c6aaa3c0b900e50 d003412efe96deece3046d8c46bc7709 228789775abdf56aed6416c90033780c b7a4984815da1b14660dcf34aa34bf82 cebbcfa7d2035a4219d6accf47a7a974 78f1b48c3e5eb9fb69b323fe3b14f9b8 7c45dc3650ddc23c09f010234f14c0f4 9f6cadc6d919ccf0912ae76f9bdb0d8d 0ac37e7473 |
β All algorithms