mirror of
https://github.com/elastic/elasticsearch.git
synced 2025-06-28 17:34:17 -04:00
API keys are high-entropy secure random strings. This means that the additional work factor of functions like PBKDF or bcrypt are not necessary, and a faster hash function like salted SHA-256 provides adequate security against offline attacks (hash collision, brute force, etc.). This PR adds `SSHA-256` to the list of supported stored hash algorithms for API key secrets, and makes it the default algorithm. Additionally, this PR changes the format of API key secrets, moving from an encoded UUID to a random string which increase the entropy of API keys from 122 bits to 128 bits, without changing overall secret length. Relates: ES-9504
191 lines
14 KiB
Text
191 lines
14 KiB
Text
[discrete]
|
|
[[hashing-settings]]
|
|
=== User cache and password hash algorithms
|
|
|
|
Certain realms store user credentials in memory. To limit exposure
|
|
to credential theft and mitigate credential compromise, the cache only stores
|
|
a hashed version of the user credentials in memory. By default, the user cache
|
|
is hashed with a salted `sha-256` hash algorithm. You can use a different
|
|
hashing algorithm by setting the <<static-cluster-setting,static>>
|
|
`cache.hash_algo` realm settings to any of the following values:
|
|
|
|
[[cache-hash-algo]]
|
|
.Cache hash algorithms
|
|
|=======================
|
|
| Algorithm | | | Description
|
|
| `ssha256` | | | Uses a salted `sha-256` algorithm (default).
|
|
| `md5` | | | Uses `MD5` algorithm.
|
|
| `sha1` | | | Uses `SHA1` algorithm.
|
|
| `bcrypt` | | | Uses `bcrypt` algorithm with salt generated in 1024 rounds.
|
|
| `bcrypt4` | | | Uses `bcrypt` algorithm with salt generated in 16 rounds.
|
|
| `bcrypt5` | | | Uses `bcrypt` algorithm with salt generated in 32 rounds.
|
|
| `bcrypt6` | | | Uses `bcrypt` algorithm with salt generated in 64 rounds.
|
|
| `bcrypt7` | | | Uses `bcrypt` algorithm with salt generated in 128 rounds.
|
|
| `bcrypt8` | | | Uses `bcrypt` algorithm with salt generated in 256 rounds.
|
|
| `bcrypt9` | | | Uses `bcrypt` algorithm with salt generated in 512 rounds.
|
|
| `pbkdf2` | | | Uses `PBKDF2` key derivation function with `HMAC-SHA512` as a
|
|
pseudorandom function using 10000 iterations.
|
|
| `pbkdf2_1000` | | | Uses `PBKDF2` key derivation function with `HMAC-SHA512` as a
|
|
pseudorandom function using 1000 iterations.
|
|
| `pbkdf2_10000` | | | Uses `PBKDF2` key derivation function with `HMAC-SHA512` as a
|
|
pseudorandom function using 10000 iterations.
|
|
| `pbkdf2_50000` | | | Uses `PBKDF2` key derivation function with `HMAC-SHA512` as a
|
|
pseudorandom function using 50000 iterations.
|
|
| `pbkdf2_100000` | | | Uses `PBKDF2` key derivation function with `HMAC-SHA512` as a
|
|
pseudorandom function using 100000 iterations.
|
|
| `pbkdf2_500000` | | | Uses `PBKDF2` key derivation function with `HMAC-SHA512` as a
|
|
pseudorandom function using 500000 iterations.
|
|
| `pbkdf2_1000000` | | | Uses `PBKDF2` key derivation function with `HMAC-SHA512` as a
|
|
pseudorandom function using 1000000 iterations.
|
|
| `pbkdf2_stretch` | | | Uses `PBKDF2` key derivation function with `HMAC-SHA512` as a
|
|
pseudorandom function using 10000 iterations, after hashing the
|
|
initial input with SHA512 first.
|
|
| `pbkdf2_stretch_1000` | | | Uses `PBKDF2` key derivation function with `HMAC-SHA512` as a
|
|
pseudorandom function using 1000 iterations, after hashing the
|
|
initial input with SHA512 first.
|
|
| `pbkdf2_stretch_10000` | | | Uses `PBKDF2` key derivation function with `HMAC-SHA512` as a
|
|
pseudorandom function using 10000 iterations, after hashing the
|
|
initial input with SHA512 first.
|
|
| `pbkdf2_stretch_50000` | | | Uses `PBKDF2` key derivation function with `HMAC-SHA512` as a
|
|
pseudorandom function using 50000 iterations, after hashing the
|
|
initial input with SHA512 first.
|
|
| `pbkdf2_stretch_100000` | | | Uses `PBKDF2` key derivation function with `HMAC-SHA512` as a
|
|
pseudorandom function using 100000 iterations, after hashing the
|
|
initial input with SHA512 first.
|
|
| `pbkdf2_stretch_500000` | | | Uses `PBKDF2` key derivation function with `HMAC-SHA512` as a
|
|
pseudorandom function using 500000 iterations, after hashing the
|
|
initial input with SHA512 first.
|
|
| `pbkdf2_stretch_1000000`| | | Uses `PBKDF2` key derivation function with `HMAC-SHA512` as a
|
|
pseudorandom function using 1000000 iterations, after hashing the
|
|
initial input with SHA512 first.
|
|
| `noop`,`clear_text` | | | Doesn't hash the credentials and keeps it in clear text in
|
|
memory. CAUTION: keeping clear text is considered insecure
|
|
and can be compromised at the OS level (for example through
|
|
memory dumps and using `ptrace`).
|
|
|=======================
|
|
|
|
Likewise, realms that store passwords hash them using cryptographically strong
|
|
and password-specific salt values. You can configure the algorithm for password
|
|
hashing by setting the <<static-cluster-setting,static>>
|
|
`xpack.security.authc.password_hashing.algorithm` setting to one of the
|
|
following:
|
|
|
|
[[password-hashing-algorithms]]
|
|
.Password hashing algorithms
|
|
|=======================
|
|
| Algorithm | | | Description
|
|
|
|
| `bcrypt` | | | Uses `bcrypt` algorithm with salt generated in 1024 rounds. (default)
|
|
| `bcrypt4` | | | Uses `bcrypt` algorithm with salt generated in 16 rounds.
|
|
| `bcrypt5` | | | Uses `bcrypt` algorithm with salt generated in 32 rounds.
|
|
| `bcrypt6` | | | Uses `bcrypt` algorithm with salt generated in 64 rounds.
|
|
| `bcrypt7` | | | Uses `bcrypt` algorithm with salt generated in 128 rounds.
|
|
| `bcrypt8` | | | Uses `bcrypt` algorithm with salt generated in 256 rounds.
|
|
| `bcrypt9` | | | Uses `bcrypt` algorithm with salt generated in 512 rounds.
|
|
| `bcrypt10` | | | Uses `bcrypt` algorithm with salt generated in 1024 rounds.
|
|
| `bcrypt11` | | | Uses `bcrypt` algorithm with salt generated in 2048 rounds.
|
|
| `bcrypt12` | | | Uses `bcrypt` algorithm with salt generated in 4096 rounds.
|
|
| `bcrypt13` | | | Uses `bcrypt` algorithm with salt generated in 8192 rounds.
|
|
| `bcrypt14` | | | Uses `bcrypt` algorithm with salt generated in 16384 rounds.
|
|
| `pbkdf2` | | | Uses `PBKDF2` key derivation function with `HMAC-SHA512` as a
|
|
pseudorandom function using 10000 iterations.
|
|
| `pbkdf2_1000` | | | Uses `PBKDF2` key derivation function with `HMAC-SHA512` as a
|
|
pseudorandom function using 1000 iterations.
|
|
| `pbkdf2_10000` | | | Uses `PBKDF2` key derivation function with `HMAC-SHA512` as a
|
|
pseudorandom function using 10000 iterations.
|
|
| `pbkdf2_50000` | | | Uses `PBKDF2` key derivation function with `HMAC-SHA512` as a
|
|
pseudorandom function using 50000 iterations.
|
|
| `pbkdf2_100000` | | | Uses `PBKDF2` key derivation function with `HMAC-SHA512` as a
|
|
pseudorandom function using 100000 iterations.
|
|
| `pbkdf2_500000` | | | Uses `PBKDF2` key derivation function with `HMAC-SHA512` as a
|
|
pseudorandom function using 500000 iterations.
|
|
| `pbkdf2_1000000` | | | Uses `PBKDF2` key derivation function with `HMAC-SHA512` as a
|
|
pseudorandom function using 1000000 iterations.
|
|
| `pbkdf2_stretch` | | | Uses `PBKDF2` key derivation function with `HMAC-SHA512` as a
|
|
pseudorandom function using 10000 iterations, after hashing the
|
|
initial input with SHA512 first.
|
|
| `pbkdf2_stretch_1000` | | | Uses `PBKDF2` key derivation function with `HMAC-SHA512` as a
|
|
pseudorandom function using 1000 iterations, after hashing the
|
|
initial input with SHA512 first.
|
|
| `pbkdf2_stretch_10000` | | | Uses `PBKDF2` key derivation function with `HMAC-SHA512` as a
|
|
pseudorandom function using 10000 iterations, after hashing the
|
|
initial input with SHA512 first.
|
|
| `pbkdf2_stretch_50000` | | | Uses `PBKDF2` key derivation function with `HMAC-SHA512` as a
|
|
pseudorandom function using 50000 iterations, after hashing the
|
|
initial input with SHA512 first.
|
|
| `pbkdf2_stretch_100000` | | | Uses `PBKDF2` key derivation function with `HMAC-SHA512` as a
|
|
pseudorandom function using 100000 iterations, after hashing the
|
|
initial input with SHA512 first.
|
|
| `pbkdf2_stretch_500000` | | | Uses `PBKDF2` key derivation function with `HMAC-SHA512` as a
|
|
pseudorandom function using 500000 iterations, after hashing the
|
|
initial input with SHA512 first.
|
|
| `pbkdf2_stretch_1000000`| | | Uses `PBKDF2` key derivation function with `HMAC-SHA512` as a
|
|
pseudorandom function using 1000000 iterations, after hashing the
|
|
initial input with SHA512 first.
|
|
|=======================
|
|
|
|
Furthermore, {es} supports authentication via securely-generated high entropy tokens,
|
|
for instance <<security-api-create-api-key,API keys>>.
|
|
Analogous to passwords, only the tokens' hashes are stored. Since the tokens are guaranteed
|
|
to have sufficiently high entropy to resist offline attacks, secure salted hash functions are supported
|
|
in addition to the password-hashing algorithms mentioned above.
|
|
|
|
You can configure the algorithm for API key stored credential hashing
|
|
by setting the <<static-cluster-setting,static>>
|
|
`xpack.security.authc.api_key.hashing.algorithm` setting to one of the
|
|
following
|
|
|
|
[[secure-token-hashing-algorithms]]
|
|
.Secure token hashing algorithms
|
|
|=======================
|
|
| Algorithm | | | Description
|
|
|
|
| `ssha256` | | | Uses a salted `sha-256` algorithm. (default)
|
|
| `bcrypt` | | | Uses `bcrypt` algorithm with salt generated in 1024 rounds.
|
|
| `bcrypt4` | | | Uses `bcrypt` algorithm with salt generated in 16 rounds.
|
|
| `bcrypt5` | | | Uses `bcrypt` algorithm with salt generated in 32 rounds.
|
|
| `bcrypt6` | | | Uses `bcrypt` algorithm with salt generated in 64 rounds.
|
|
| `bcrypt7` | | | Uses `bcrypt` algorithm with salt generated in 128 rounds.
|
|
| `bcrypt8` | | | Uses `bcrypt` algorithm with salt generated in 256 rounds.
|
|
| `bcrypt9` | | | Uses `bcrypt` algorithm with salt generated in 512 rounds.
|
|
| `bcrypt10` | | | Uses `bcrypt` algorithm with salt generated in 1024 rounds.
|
|
| `bcrypt11` | | | Uses `bcrypt` algorithm with salt generated in 2048 rounds.
|
|
| `bcrypt12` | | | Uses `bcrypt` algorithm with salt generated in 4096 rounds.
|
|
| `bcrypt13` | | | Uses `bcrypt` algorithm with salt generated in 8192 rounds.
|
|
| `bcrypt14` | | | Uses `bcrypt` algorithm with salt generated in 16384 rounds.
|
|
| `pbkdf2` | | | Uses `PBKDF2` key derivation function with `HMAC-SHA512` as a
|
|
pseudorandom function using 10000 iterations.
|
|
| `pbkdf2_1000` | | | Uses `PBKDF2` key derivation function with `HMAC-SHA512` as a
|
|
pseudorandom function using 1000 iterations.
|
|
| `pbkdf2_10000` | | | Uses `PBKDF2` key derivation function with `HMAC-SHA512` as a
|
|
pseudorandom function using 10000 iterations.
|
|
| `pbkdf2_50000` | | | Uses `PBKDF2` key derivation function with `HMAC-SHA512` as a
|
|
pseudorandom function using 50000 iterations.
|
|
| `pbkdf2_100000` | | | Uses `PBKDF2` key derivation function with `HMAC-SHA512` as a
|
|
pseudorandom function using 100000 iterations.
|
|
| `pbkdf2_500000` | | | Uses `PBKDF2` key derivation function with `HMAC-SHA512` as a
|
|
pseudorandom function using 500000 iterations.
|
|
| `pbkdf2_1000000` | | | Uses `PBKDF2` key derivation function with `HMAC-SHA512` as a
|
|
pseudorandom function using 1000000 iterations.
|
|
| `pbkdf2_stretch` | | | Uses `PBKDF2` key derivation function with `HMAC-SHA512` as a
|
|
pseudorandom function using 10000 iterations, after hashing the
|
|
initial input with SHA512 first.
|
|
| `pbkdf2_stretch_1000` | | | Uses `PBKDF2` key derivation function with `HMAC-SHA512` as a
|
|
pseudorandom function using 1000 iterations, after hashing the
|
|
initial input with SHA512 first.
|
|
| `pbkdf2_stretch_10000` | | | Uses `PBKDF2` key derivation function with `HMAC-SHA512` as a
|
|
pseudorandom function using 10000 iterations, after hashing the
|
|
initial input with SHA512 first.
|
|
| `pbkdf2_stretch_50000` | | | Uses `PBKDF2` key derivation function with `HMAC-SHA512` as a
|
|
pseudorandom function using 50000 iterations, after hashing the
|
|
initial input with SHA512 first.
|
|
| `pbkdf2_stretch_100000` | | | Uses `PBKDF2` key derivation function with `HMAC-SHA512` as a
|
|
pseudorandom function using 100000 iterations, after hashing the
|
|
initial input with SHA512 first.
|
|
| `pbkdf2_stretch_500000` | | | Uses `PBKDF2` key derivation function with `HMAC-SHA512` as a
|
|
pseudorandom function using 500000 iterations, after hashing the
|
|
initial input with SHA512 first.
|
|
| `pbkdf2_stretch_1000000`| | | Uses `PBKDF2` key derivation function with `HMAC-SHA512` as a
|
|
pseudorandom function using 1000000 iterations, after hashing the
|
|
initial input with SHA512 first.
|
|
|=======================
|