Skip to main content
Expand; secret can vary.
Source Link
fgrieu
  • 145.6k
  • 12
  • 319
  • 611

There is no good way to stretch your 64-bit seed value without some secret material. Anything deterministic you do is bound to be vulnerable to enumeration of all 64-bit seed values. The least wrong option is to use a key generationpurposely slow derivation function designed for passwords, e.g. scryptScrypt.

With secretsome $Secret$ material assumed hidden from an adversary, you have more options (but still there is the problem that identical 64-bit seed will generate the same output). The basic idea is to mix $Seed$ with $Secret$ into an expanded $Seed'$ using a random-like function. AnyThe simple $Seed'=SHA_{256}(Secret||Seed)$ will do, other Key Derivation Function can be used, butincluding Scrypt. Issues are that you must protect the simpleconfidentiality of $Seed'=SHA_{256}(Secret||Seed)$$Secret$; further, if it remains constant, identical 64-bit $Seed$ will dogenerate the same $Seed'$.

Next steps are to store and vary $Secret$ from one execution to another; pretty soon we are reinventing a full-blown implementation of a cryptographically secure random source, such a Yarrow.

There is no good way to stretch your 64-bit seed value without some secret material. Anything deterministic you do is bound to be vulnerable to enumeration of all 64-bit seed values. The least wrong option is to use a key generation function designed for passwords, e.g. scrypt.

With secret material, you have more options (but still there is the problem that identical 64-bit seed will generate the same output). The basic idea is to mix $Seed$ with $Secret$ into an expanded $Seed'$ using a random-like function. Any Key Derivation Function can be used, but the simple $Seed'=SHA_{256}(Secret||Seed)$ will do.

There is no good way to stretch your 64-bit seed value without some secret material. Anything deterministic you do is bound to be vulnerable to enumeration of all 64-bit seed values. The least wrong option is to use a purposely slow derivation function designed for passwords, e.g. Scrypt.

With some $Secret$ material assumed hidden from an adversary, you have more options. The basic idea is to mix $Seed$ with $Secret$ into an expanded $Seed'$ using a random-like function. The simple $Seed'=SHA_{256}(Secret||Seed)$ will do, other Key Derivation Function can be used, including Scrypt. Issues are that you must protect the confidentiality of $Secret$; further, if it remains constant, identical 64-bit $Seed$ will generate the same $Seed'$.

Next steps are to store and vary $Secret$ from one execution to another; pretty soon we are reinventing a full-blown implementation of a cryptographically secure random source, such a Yarrow.

added 429 characters in body
Source Link
fgrieu
  • 145.6k
  • 12
  • 319
  • 611

There is no good way to stretch your 64-bit seed value without some secret material. Anything deterministic you do is bound to be vulnerable to enumeration of all 64-bit seed values.

The The least wrong option is to use a key generation function designed for passwords, e.g. scrypt.

With secret material, you have more options (but still there is the problem that identical 64-bit seed will generate the same output). The basic idea is to mix $Seed$ with $Secret$ into an expanded $Seed'$ using a random-like function. Any Key Derivation Function can be used, but the simple $Seed'=SHA_{256}(Secret||Seed)$ will do.

There is no good way to stretch your 64-bit seed value. Anything deterministic you do is bound to be vulnerable to enumeration of all 64-bit seed values.

The least wrong option is to use a key generation function designed for passwords, e.g. scrypt.

There is no good way to stretch your 64-bit seed value without some secret material. Anything deterministic you do is bound to be vulnerable to enumeration of all 64-bit seed values. The least wrong option is to use a key generation function designed for passwords, e.g. scrypt.

With secret material, you have more options (but still there is the problem that identical 64-bit seed will generate the same output). The basic idea is to mix $Seed$ with $Secret$ into an expanded $Seed'$ using a random-like function. Any Key Derivation Function can be used, but the simple $Seed'=SHA_{256}(Secret||Seed)$ will do.

Source Link
fgrieu
  • 145.6k
  • 12
  • 319
  • 611

There is no good way to stretch your 64-bit seed value. Anything deterministic you do is bound to be vulnerable to enumeration of all 64-bit seed values.

The least wrong option is to use a key generation function designed for passwords, e.g. scrypt.