Key-Size

您可以為 KMAC 使用動態密鑰和數據大小嗎?

  • January 13, 2021

我之前問過是否應該在 SHA-3 的輸入參數上使用某種規範編碼,然後才能將其用作 HMAC 的替代品。

但是,如果我正確閱讀了NIST SP 800-185 中的目前 NIST 規範,則沒有Keypack定義函式。該Keypack函式為密鑰添加了密鑰大小的前綴,以便將密鑰和消息數據分開。bytepad(encode_string(K), 168)目前,使用KMAC128 和KMAC256的功能,密鑰似乎只是零填充到下一個塊邊界bytepad(encode_string(K), 136)

這是否意味著密鑰和數據沒有規範編碼?在 KMAC 中使用動態大小的密鑰和數據是否bytepad(encode_string(K), 136) || X != bytepad(encode_string(K'), 136) || X'安全K != K

是的,但是它確實需要對標准進行更深入的研究。

KMAC128 定義為:

  1. newX = bytepad(encode_string(K), 168) || X || right_encode(L).
  2. return cSHAKE128(newX, L, “KMAC”, S).

所以似乎沒有對密鑰大小的編碼,可能有多個 K,M 密鑰消息對會產生相同的值bytepad(encode_string(K), 168) || X(因為A || BC = AB || C)。

但是,如果我們看一下encode_string(S)函式:

  1. Return left_encode(len(S)) || S.

這意味著(位)字元串編碼規範地對密鑰進行編碼,包括密鑰的大小(len(S))。這意味著任何大小不同的密鑰都將被編碼,使得密鑰 K 和消息 X 之間的劃分清晰。

儘管encode_string與早期的 KMAC 草案相比,規範編碼具有更通用的名稱,但規範編碼仍然存在,其中它被呼叫Keypack(K, l) 並將長度作為顯式參數。

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