Description:
This is NOT a vulnerability but an intentional design decision in feldman_vss.py
.
The _refresh_shares_additive
function uses random.Random()
seeded with cryptographically strong material. While random.Random()
alone is not suitable for cryptographic purposes, its use here is secure because:
- It's seeded with a cryptographically strong value derived from
self.hash_algorithm(master_seed + str(party_id).encode()).digest()
- The purpose is to generate deterministic but unpredictable values for zero-sharing polynomials
- The security comes from the cryptographic seed, not the PRNG algorithm itself
- This design enables verification with reduced communication overhead
This design pattern is a known technique in cryptographic protocols requiring deterministic randomness.
Impact:
No practical impact. The current implementation maintains security through the use of a cryptographically secure seed. The random values generated are both unpredictable to attackers and deterministically reproducible given the same seed, which is necessary for the protocol to function correctly.
References:
- File:
feldman_vss.py
- Function:
_refresh_shares_additive
Remediation:
No remediation needed. The current implementation is intentional and secure.
If absolute assurance is desired, an alternative would be to implement a custom deterministic CSPRNG that accepts a seed and produces values deterministically, such as:
- Use a stream cipher (ChaCha20) with the cryptographic seed
- Implement HMAC-DRBG as described in NIST SP 800-90A
- Use a cryptographic hash function in counter mode with the secure seed
Any replacement must maintain the deterministic property while providing cryptographic security.
Description:
This is NOT a vulnerability but an intentional design decision in
feldman_vss.py
.The
_refresh_shares_additive
function usesrandom.Random()
seeded with cryptographically strong material. Whilerandom.Random()
alone is not suitable for cryptographic purposes, its use here is secure because:self.hash_algorithm(master_seed + str(party_id).encode()).digest()
This design pattern is a known technique in cryptographic protocols requiring deterministic randomness.
Impact:
No practical impact. The current implementation maintains security through the use of a cryptographically secure seed. The random values generated are both unpredictable to attackers and deterministically reproducible given the same seed, which is necessary for the protocol to function correctly.
References:
feldman_vss.py
_refresh_shares_additive
Remediation:
No remediation needed. The current implementation is intentional and secure.
If absolute assurance is desired, an alternative would be to implement a custom deterministic CSPRNG that accepts a seed and produces values deterministically, such as:
Any replacement must maintain the deterministic property while providing cryptographic security.