Hash

XEdDSA 和 VXEdDSA 簽名方案中的散列函式

  • May 23, 2017

有人可以解釋XEdDSA 和 VXEdDSA 簽名方案中第 2.5 節中的以下段落嗎?具體來說,我想了解我們如何定義雜湊函式係列以及如何進一步使用它?

XEdDSA 和 VXEdDSA 需要加密散列函式。預設雜湊函式是SHA-512

我們定義 $ hash $ 作為一個函式,它將密碼散列應用於輸入字節序列,並返回一個整數,該整數是以小端形式解析的密碼散列的輸出。給定 $ hash $ 和曲線常數 $ p $ 和 $ b $ ,我們定義了一系列由非負整數索引的雜湊函式 $ i $ 這樣 $ 2^{|p|} - 1 - i > p $ .

$ {hash}_i(X):\ ;;\text{ return }{hash}(2^b - 1 - i ;||; X) $

所以 $ hash_0 $ 雜湊 $ b/8 $ 字節 $ 0xFF $ 在輸入字節序列之前 $ X $ , $ hash_1 $ 將第一個字節更改為 $ 0xFE $ , $ hash_2 $ 將第一個字節更改為 $ 0xFD $ , 等等。

不同的 $ hash_i $ 將用於不同的目的,以提供密碼域分離。注意 $ hash_i $ 永遠不會打電話 $ hash $ 與第一個 $ b $ 位編碼一個有效的標量或橢圓曲線點,因為第一個 $ |p| $ 位編碼一個大於的整數 $ p $ . 另請注意 $ hash_0 $ 保留供其他規範使用,不在本文件中使用。

雜湊函式被索引以實現域分離。例如,參見第 2.2 節

最重要的想法是,如果你有一個安全的底層函式(即 $ hash $ 功能),您可以以很少的成本創建一系列安全功能( $ hash_i $ ) 對於特定輸入具有不同的輸出 $ X $ .

作為使用這些索引函式的範例,如果我的輸入DEAFBEAD

  • hash_0(0xDEAFBEAD) == sha512(0xFF || 0xDEAFBEAD) == 9758ed9f853fabb2e963dc81ba617ea7dadbd802a82acdced8dc7813e908d1dfdd571b02f690487b1e1b5c7ac1938501cb0ccd00fac086a803758b5d92d811c9
  • hash_1(0xDEAFBEAD) == sha512(0xFE || 0xDEAFBEAD) == e8897c024462b42136308fbc975cebec5dcc83ae748047dd6cfa8d5a0806cb40fc1967932d605b6bb577cc1679e37fb94cba0af47ce32f5d6b56153e09f34a24
  • 等等

所以在整個文件中,你會看到 $ hash_1 $ 習慣於xeddsa_sign, $ hash_2 $ 在 中使用hash_to_point,等等。

每個 $ hash_i $ 現在“做自己的事”。例如, $ hash_5 $ 可能只用於簽名和 $ hash_6 $ 可能僅用於驗證。

這 $ hash_i $ 都等價於 $ hash $ 在安全性方面,所以據我所知,哪個並不重要 $ hash_i $ 您用於什麼目的(除了 $ hash_0 $ ,這裡不使用)。但是通過這種方式,您可以獲得從單個安全功能派生的多個獨立安全功能。

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