hyperledger/fabric · critical

error getting random bytes

Error message

error getting random bytes

What it means

GetRandomBytes reads len bytes from crypto/rand and wraps any read failure with 'error getting random bytes'. This means the OS CSPRNG failed, which is nearly fatal for security-sensitive operations like nonce generation.

Source

Thrown at common/crypto/random.go:36

import (
	"crypto/rand"

	"github.com/pkg/errors"
)

const (
	// NonceSize is the default NonceSize
	NonceSize = 24
)

// GetRandomBytes returns len random looking bytes
func GetRandomBytes(len int) ([]byte, error) {
	key := make([]byte, len)

	_, err := rand.Read(key)
	if err != nil {
		return nil, errors.Wrap(err, "error getting random bytes")
	}

	return key, nil
}

// GetRandomNonce returns a random byte array of length NonceSize
func GetRandomNonce() ([]byte, error) {
	return GetRandomBytes(NonceSize)
}

View on GitHub (pinned to 2736b63f8f)

Solutions

  1. Fix the OS entropy/random device access (check /dev/urandom exists and is readable in the container)
  2. Check ulimit/file-descriptor exhaustion (lsof, ulimit -n) and fix leaks
  3. Upgrade kernel/host so getrandom(2) never blocks; modern kernels do not have entropy starvation
  4. Retry the operation once the host random source is healthy — do not substitute math/rand
Defensive patterns

Strategy: retry

Validate before calling

// sanity check host randomness before relying on it
if f, err := os.Open("/dev/urandom"); err != nil { log.Fatal("no entropy source") } else { f.Close() }

Try / catch

nonce, err := crypto.GetRandomNonce()
if err != nil {
    if strings.Contains(err.Error(), "error getting random bytes") {
        // log root cause, alert, and back off; do NOT fall back to math/rand
        return nil
    }
}

Prevention

When it happens

Trigger: Calling GetRandomBytes (or GetRandomNonce, which calls it) when rand.Read fails — e.g. exhausted entropy or a broken /dev/urandom on Linux, or file-descriptor exhaustion.

Common situations: Containers with restricted /dev/urandom access; systems under entropy starvation on old kernels; fd leaks causing open failures of the random source; misconfigured sandbox/seccomp profiles blocking getrandom(2).

Related errors


AI-assisted analysis of hyperledger/fabric@2736b63f8f (2026-09-04). Data as JSON: /api/errors/e076a67817ba71d1. Report an issue: GitHub.