Key-Derivation

是否有使用 SCRYPT 作為無限長度 KDF 而不是固定長度身份驗證雜湊的建議或標準?

  • April 19, 2017

我該怎麼辦?我不想自己動手,但我真的很想將 SCRYPT 用作幾種算法的 KDF,其中一些算法需要比 SHA-256 散列更長的輸出長度。否則,使用像 AES-256 這樣的加密算法,它已經是完美的尺寸了。

我是否只是操縱第二個 PBKDF2 輸出的密鑰長度?如果我是正確的,這在技術上將不再是 SCRYPT 而只是一個接近的變體?

使用 SCRYPT 散列算法作為 HKDF 或 PBKDF2 輸出中的 PRF 是否可行?

我了解如何將其用作身份驗證雜湊,但作為一個完整的 KDF,我可能沒有正確的程式碼,並且文件對我來說非常不清楚。

scrypt 的簽名,直接來自原始碼

/**
* crypto_scrypt(passwd, passwdlen, salt, saltlen, N, r, p, buf, buflen):
* Compute scrypt(passwd[0 .. passwdlen - 1], salt[0 .. saltlen - 1], N, r,
* p, buflen) and write the result into buf.  The parameters r, p, and buflen
* must satisfy r * p < 2^30 and buflen <= (2^32 - 1) * 32.  The parameter N
* must be a power of 2 greater than 1.
*
* Return 0 on success; or -1 on error.
*/
int crypto_scrypt(const uint8_t *, size_t, const uint8_t *, size_t, uint64_t,
   uint32_t, uint32_t, uint8_t *, size_t);

最後一個參數 ( buflen) 是輸出大小。你只需給它你想要的值(並且滿足評論中的要求)。


鑑於這個答案有多簡單,我猜想缺少一些上下文。可能你使用的是第三方庫,重新實現了 scrypt 或者連結到原來的,但是沒有提供這個參數給呼叫者指定。在這種情況下,好吧,那麼您有一些選擇:

  1. 使用提供全方位選項的不同庫;
  2. 嘗試對庫進行修補以支持所有選項;
  3. 使用基於密鑰的密鑰派生函式(如 HKDF-expand)來擴展您的庫提供的短 scrypt 輸出。

引用自:https://crypto.stackexchange.com/questions/46693