iT邦幫忙

2025 iThome 鐵人賽

DAY 16
0
Security

裸機實作 SLH-DSA 簽章:FIPS 205 之演算法實作、測試、防禦與跨平台系列 第 16

Day 16 SLH-DSA 簽章如何組成: FORS, WOTS+, Hypertree, XMSS

  • 分享至 

  • xImage
  •  

本日重點: 回顧一下 SLH-DSA 簽章的過程: FORS、WOTS+、XMSS 和 FORS

經過了十幾天的鋪陳,我們經歷了 FORS signature、WOTS+ signature、Hypertree signature 和 XMSS signature,也經歷了 FORS public key 和 XMSS public key,今天我們回顧一下 SLH-DSA 簽章的過程。

一個 SLH-DSA 簽章包括了 R、FORS signature 和 Hyper signature

  • R
    R 是由 PRF_msg 所產生的一個 randomizer,如 FIPS 205 第 34 頁 [1] 所述,他是一個 randomization string。
    他和 key pair 種子的那種亂數不一樣,因為 R 在 每一次 的簽章都會不一樣,他是在 每一次 的簽章加了一個額外的亂數(apprnd)。
  • FORS signature
    slh_sign_internal 會 call fors_sign,然後產生 FORS signature。這個 FORS signature 會直接成為 SLH-DSA signature 的一部份
  • Hyper signature
    slh_sign_internal 在 call fors_sign 之後,會 call fors_pkFromSig,然後得到一個 FORS public key,這個 FORS public key 就是 ht_sign 的其中一個 input,然後 call ht_sign,取得 hypertree signature。這個 hypertree signature 也會直接成為 SLH-DSA signature 的一部份。

簡單來說,組成 SLH-DSA signature 的三個部份分別透過 call 這三個 function 而獲得

  • R: PRF_msg
  • FORS signature: fors_sign
  • HT signature: ht_sign

至此, 我們看一下 SLH-DSA signature 的格式 [1]
https://ithelp.ithome.com.tw/upload/images/20250929/201401297p1yDmKliq.png

FORS signature

fors_sign 會透過 call fors_skGen 產生 FORS private-key,private-key 的長度是 n byte。
fors_sign 取得 FORS private-key 後,就會開始建立 AUTH。於是開始 call fors_node a 次去計算 auth path,AUTH 的長度是 a * n bytes。

FORS private-key 和 AUTH 的長度合計是 (a + 1) * n bytes,這個過程會執行 k 次,所以 k * (a + 1) * n 就是 FORS signature 的長度。

至此,我們看一下 FORS signature 的格式 [1]
https://ithelp.ithome.com.tw/upload/images/20250929/20140129Ih5pWagZcf.png

Hypertree signature

HT signature 由 d 個 XMSS signature 所組成,d 代表 hypertree 有幾層。透過一次次的 call xmss_sign 然後 concatentation,構成了 HT signature。
這個 concatenation 的過程是從 layer 0 開始,從最底下的那一層開始往上計算 XMSS signature。一開始,是對 FORS public key 計算 xmss_sign此即為 layer 0 的 XMSS signature
接著對 layer 0 的 XMSS signature 計算 xmss_pkFromSig,然後拿這個 XMSS public key 去計算 xmss_sign此即為 layer 1 的 XMSS signature
重複的拿 layer j 的 XMSS signature 去算 XMSS public key,以此去產生 layer j+1 的 XMSS signature。
換句話說,就是這個流程: layer j 的 XMSS signature -> layer j 的 XMSS public key -> layer j+1 的 XMSS signature

要注意一個地方,xmss_pkFromSig 在這裡是為了拿 XMSS public key 去計算 layer j+1 的 XMSS signature,不是為了反推 XMSS public key 做驗章

至此,我們看一下 Hypertree signature 的格式 [1]
https://ithelp.ithome.com.tw/upload/images/20250929/20140129Y5lyH8ZIwK.png

References

  1. FIPS 205 Stateless Hash-Based Digital Signature Standard

上一篇
Day 15 產生 hypertree signature: HT signature, XMSS signature 和 WOTS+ signature
下一篇
Day 17 HMAC-SHA-256
系列文
裸機實作 SLH-DSA 簽章:FIPS 205 之演算法實作、測試、防禦與跨平台20
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言