Scrypt

Scrypt 健全性檢查

  • July 14, 2018

我有一個 scrypt 實現,它不會產生與我發現的線上 scrypt 密鑰生成器相同的輸出。例如,如果我在這樣的函式中執行自己的 scrypt:

void test_scrypt(void)
{
   char passwdTxt[] = "abc";
   int passwdlen = strlen(passwdTxt);
   uint8_t passwd[passwdlen];
   memcpy(passwd, passwdTxt, passwdlen);

   uint8_t salt[] = {0x5C,0x57,0xD8,0x6B,0x73,0x5E,0x98,0xD5,0x1A,0xA5,0x34,0x16,0xE2,0x90,0x29,0xAF};
   int saltlen = 16;
   int buflen = 32;
   uint8_t buf[buflen];
   int N = 16384;
   int r = 8;
   int p = 1;
   crypto_scrypt(passwd, passwdlen, salt, saltlen, N, r, p, buf, buflen);

   int i;
   printf("Key:\n\r");
   for (i = 0; i < buflen; ++i)
       printf("%02x ", buf[i]);
}

它產生以下輸出:

Key:
d6 2b 0e 12 75 e3 0a 85 ce 22 03 43 ef 7e e6 d2 97 77 e1 5c 3e 35 03 63 0b fc 54 7b 8f 18 ef 63

但是,當我在站點https://gchq.github.io/Cyber​​Chef/?op=Scrypt執行相同的輸入時, 我得到以下結果(注意“輸出”部分與我的雜湊值不同): 網路廚師 Scrypt 密鑰生成器

這裡有沒有人有他們自己的 Scrypt 生成器,他們可以執行這個輸入條件,並告訴我我的輸出是否正確?

我在想也許我的鹽不太有效,就像我應該只使用每字節 1-128 位(非擴展 ASCII)值?

您的程式碼已計算出正確答案。

scrypt Git 儲存庫中有一些已知答案測試。它們將比 GCHQ 的玩具網路界面更可靠一些,後者顯然有問題(並且每次都會給我不同長度的輸出)。

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