digestpp 1.0
C++11 header-only message digest library
Loading...
Searching...
No Matches
Streebog

Streebog Algorithm More...

Typedefs

typedef hasher< detail::streebog_provider<> > digestpp::streebog
 Streebog hash function.
 
template<size_t N>
using digestpp::static_size::streebog = hasher<detail::streebog_provider<N>>
 Streebog hash function (static-size version)
 

Detailed Description

Streebog Algorithm

Typedef Documentation

◆ streebog [1/2]

Streebog hash function (static-size version)

Variant of Streebog with output size specified as template parameter.

Warning
S-box Design Controversy

In 2019, cryptographer Léo Perrin (INRIA) discovered that Streebog's S-box has a hidden mathematical structure that was not disclosed by its designers [1][2]. Key concerns:

  • Undisclosed structure: The S-box generation process was never publicly explained
  • Contradictory claims: Designers claimed they avoided strong algebraic structure, but analysis revealed the S-box has "extremely strong algebraic structure" [1]
  • Backdoor concerns: The discovered properties are similar to those that could enable backdoors in block ciphers [2][3]
  • Unknown designers: It remains unclear who exactly designed the S-box and why [1]

At IETF CFRG Meeting 105, Perrin stated: "the designers of these algorithms have provided misleading information" and recommended that "these algorithms cannot be trusted and should be deprecated" [3].

References:

  • [1] Perrin, L. (2019). "On the S-Box of Streebog and Kuznyechik" https://who.paris.inria.fr/Leo.Perrin/pi.html
  • [2] Vice/Motherboard (2024). "Experts Doubt Russian Claims That Cryptographic Flaw Was a Coincidence"
  • [3] IETF CFRG Meeting 105 Slides: "Streebog and Kuznyechik - Inconsistencies in the Claims"
Type:
Cryptographic hash function.
Output size:
256 / 512 bits
Example:
// Output a 256-bit Streebog digest of a string
hasher.absorb("The quick brown fox jumps over the lazy dog");
std::cout << hasher.hexdigest() << '\n';
Main class template implementing the public API for hashing.
Definition hasher.hpp:38
std::string hexdigest() const
Return hex digest of absorbed data.
Definition hasher.hpp:372
hasher & absorb(const T *data, size_t len)
Absorbs bytes from a C-style pointer to character buffer.
Definition hasher.hpp:86
Example output:
3e7dea7f2384b6c5a3d0e24aaa29c05e89ddd762145030ec22c71a6db8b2c1f4
See also
hasher, kupyna, digestpp::streebog

◆ streebog [2/2]

Streebog hash function.

Russian national standard hash function (GOST R 34.11-2012).

Designed by the Russian Federal Security Service (FSB) and CryptoPro. Streebog is the successor to GOST R 34.11-94 and is mandatory for use in Russian government digital signature systems.

Based on a Merkle-Damgård construction with an AES-like compression function. The algorithm uses a large 512-bit block size and S-boxes derived from the Kuznyechik block cipher.

Standardized as RFC 6986 (Informational, August 2013). Also in ISO/IEC 10118-3:2018.

Warning
S-box Design Controversy

In 2019, cryptographer Léo Perrin (INRIA) discovered that Streebog's S-box has a hidden mathematical structure that was not disclosed by its designers [1][2]. Key concerns:

  • Undisclosed structure: The S-box generation process was never publicly explained
  • Contradictory claims: Designers claimed they avoided strong algebraic structure, but analysis revealed the S-box has "extremely strong algebraic structure" [1]
  • Backdoor concerns: The discovered properties are similar to those that could enable backdoors in block ciphers [2][3]
  • Unknown designers: It remains unclear who exactly designed the S-box and why [1]

At IETF CFRG Meeting 105, Perrin stated: "the designers of these algorithms have provided misleading information" and recommended that "these algorithms cannot be trusted and should be deprecated" [3].

References:

  • [1] Perrin, L. (2019). "On the S-Box of Streebog and Kuznyechik" https://who.paris.inria.fr/Leo.Perrin/pi.html
  • [2] Vice/Motherboard (2024). "Experts Doubt Russian Claims That Cryptographic Flaw Was a Coincidence"
  • [3] IETF CFRG Meeting 105 Slides: "Streebog and Kuznyechik - Inconsistencies in the Claims"
Type:
Cryptographic hash function.
Output size:
256 / 512 bits
Default size:
none
Exceptions
std::runtime_errorif the requested digest size is not supported
Example:
// Output a 256-bit Streebog digest of a string
hasher.absorb("The quick brown fox jumps over the lazy dog");
std::cout << hasher.hexdigest() << '\n';
Example output:
3e7dea7f2384b6c5a3d0e24aaa29c05e89ddd762145030ec22c71a6db8b2c1f4
See also
hasher, kupyna, digestpp::static_size::streebog