Tls

試圖從 tls1.3 RFC8446 中理解 struct HkdfLabel

  • July 7, 2020

我正在查看RFC 8446第 7.1 節並試圖理解以下內容:

HKDF-Expand-Label(Secret, Label, Context, Length) =
           HKDF-Expand(Secret, HkdfLabel, Length)

      Where HkdfLabel is specified as:

      struct {
          uint16 length = Length;
          opaque label<7..255> = "tls13 " + Label;
          opaque context<0..255> = Context;
      } HkdfLabel;

      Derive-Secret(Secret, Label, Messages) =
           HKDF-Expand-Label(Secret, Label,
                             Transcript-Hash(Messages), Hash.length)

HkdfLabel似乎是幾個欄位的串聯,以使其“適合” 的簽名Hkdf.Expand(...)。有幾點我不清楚:

  • 構成HkdfLabel預期結構的部分是否按照它們定義的順序連接?例如length||label||context

  • length= 以字節為單位的雜湊長度?

  • 的第一位沒有指定,假設為 0 0..6label

  • "tls13 " + Label可能比分配給7..255的位數更多或更少label。如果不夠長則期望為零,或者如果太長則截斷為 256 位?

  • 相同的基本不確定性context,是context總是正好是 256 位的想法嗎?

  • 假設上述是正確的,這是否意味著HkdfLabel將永遠是 528 位?

    • HkdfLabel = hashLength<0..15>||label<0..255>||context<0..255>

第 3 節解釋了資料結構及其作為八位字節字元串(或字節字元串:此 RFC 可互換使用“八位字節”和“字節”)的表示。特別參見第 3.1 節

多字節數據項是字節的串聯,從左到右,從上到下。

AnHkdfLabellength(big-endian,參見§3.3)的 2 個字節、 的 7 到 255 個字節label和 0 到 255 個字節的串聯context§3.4解釋了<7..255>它在 7 到 255 個字節(含)之間的含義。因此,長度HkdfLabel可以是 9 到 514 個字節。

返回的length欄位是作為參數傳遞的值。當它被呼叫時,這是散列的字節長度(不是位)(第 7.1 節:“ Hash.length是它的輸出長度,以字節為單位”)。HkdfLabel``HKDF-Expand-Label``Length``Derived-Secret

的前 6 個字節label是(第 7.1 節:“本文件中指定的標籤均為 ASCII 字元串”)74 6c 73 31 33 20的 ASCII 編碼。"tls 13"

"tls13 " + Label是一個 6 字節字元串與Label. 由於結果必須至少有 7 個字節長,這有效地禁止了空標籤,我在任何地方都找不到明確說明。沒有填充或截斷。請再次注意,這些是以字節(八位字節)為單位的長度,而不是位。標籤的長度也必須最多為 249 字節才能適應。

Context可以是 0 到 255 字節之間的任何位置

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