iT邦幫忙

2024 iThome 鐵人賽

DAY 22
0
Security

「後量子密碼學」- 未來資訊安全的基礎系列 第 22

Day22 HORST 與 FORS 簽章系統,HORS 與 Merkle Tree 的結合

  • 分享至 

  • xImage
  •  

在 HORS 裡,我們會將每個區塊所對應到的私鑰 sk_index 傳送給驗章者,驗章者再來檢查是否有

https://ithelp.ithome.com.tw/upload/images/20241003/20168745RT63ADOOFM.png

這樣的話,假設每個區段長度為 log2(t) 位元,那驗章者需要儲存 t 個公鑰。而其中 t 是二的某次方,並不小。這讓我們思考,是否可以使用 Merkle tree 的技術,讓驗章者只需儲存少量公鑰即可?

今天介紹兩個把 Merkle tree 跟 HORS 結合的簽章系統。

HORST 簽章系統

參數與鑰匙生成

參數

參數 t :我們會把訊息分割為 log2(t) 的長度

https://ithelp.ithome.com.tw/upload/images/20241003/20168745RGWsuaD9bm.png

我們設定所使用的雜湊函數是使用 SHA-256 ,也設定這個訊息是雜湊函數後的結果(因此固定長度)

公私鑰

私鑰

https://ithelp.ithome.com.tw/upload/images/20241003/20168745Rf8ue9LjI7.png

其中每個 sk 都是長度為 n = 256 的二進位字串。

https://ithelp.ithome.com.tw/upload/images/20241003/20168745o1AgDhcQ98.png

因為我們選用 SHA-256 所以每個 pk 都是 n = 256 長度的二進位字串。

此時,我們把這一堆公鑰 pk_0, ... pk_(t-1) 放入一個 Merkle tree 的最底層,並照 Merkle tree 的規則來算出 root 。將這個 root 發送為公鑰。

簽章

首先先進行訊息分段:

https://ithelp.ithome.com.tw/upload/images/20241003/20168745BpLocva1qb.png

計算每個區塊的索引

https://ithelp.ithome.com.tw/upload/images/20241003/20168745uk7a7w5TTW.png

並找出每段對應的私鑰 sk_index_i

除此之外,我們也提供從每個節點 pk_index_i 到 Merkle root 的必要材料 Auth_i 於是

https://ithelp.ithome.com.tw/upload/images/20241003/201687454ef7hw6v2I.png

發送完整的簽名

https://ithelp.ithome.com.tw/upload/images/20241003/20168745eMWyMEuco5.png

驗章

首先先進行訊息分段:

https://ithelp.ithome.com.tw/upload/images/20241003/2016874531GuTdnOQo.png

計算每個區塊的索引

https://ithelp.ithome.com.tw/upload/images/20241003/201687451FKWXL1A30.png

驗證所有索引的 hash 值

https://ithelp.ithome.com.tw/upload/images/20241003/20168745u40knuZHS0.png

除此之外,我們也需驗證 pk_index_i 是否屬於總公鑰 pk 的 Merkle tree 裡。若兩個條件都達成,則此簽章為有效。

FORS 簽章系統

參數與鑰匙生成

參數

參數 t :我們會把訊息分割為 log2(t) 的長度

https://ithelp.ithome.com.tw/upload/images/20241003/20168745o2e2lNrjr8.png

我們設定所使用的雜湊函數是使用 SHA-256 ,也設定這個訊息是雜湊函數後的結果(因此固定長度)。假設訊息被分段為 k 段。

公私鑰

我們會對每一個區塊都生成 w 個私鑰

https://ithelp.ithome.com.tw/upload/images/20241003/20168745zGnU486u77.png

其中每個 sk_{i,j} 都是長度為 n = 256 的二進位字串。

對每一個 SK_i 都形成他的公鑰 PK_i

https://ithelp.ithome.com.tw/upload/images/20241003/20168745NZZ3bW8rwN.png

然後對每一組 PK_i 都形成他的 Merkle tree,於是一共會有 k 把Merkle root 總公鑰 mpk_1,...,mpk_k

簽章

首先先進行訊息分段:

https://ithelp.ithome.com.tw/upload/images/20241003/2016874594uEa8qYbl.png

計算每個區塊的索引

https://ithelp.ithome.com.tw/upload/images/20241003/20168745WfRxWzQsoq.png

並找出每段對應的私鑰,第 d_i 段對應到

https://ithelp.ithome.com.tw/upload/images/20241003/20168745RQQfbCeMNJ.png

除此之外,我們也提供從每個節點 pk_index_i 到 Merkle root 的必要材料 Auth_i 於是

https://ithelp.ithome.com.tw/upload/images/20241003/20168745SDTkzQdL40.png

發送完整的簽名

https://ithelp.ithome.com.tw/upload/images/20241003/20168745v9ZLNICiNl.png

驗章

首先也先進行訊息分段:

https://ithelp.ithome.com.tw/upload/images/20241003/20168745KRCwA7n8y4.png

計算每個區塊的索引

https://ithelp.ithome.com.tw/upload/images/20241003/20168745k26ZX0cBYi.png

驗證所有索引的 hash 值

https://ithelp.ithome.com.tw/upload/images/20241003/20168745eu3Rsk16VU.png

除此之外,我們也需驗證 pk_{i, index_i} 是否屬於總公鑰 mpk_i 的 Merkle tree 裡。若兩個條件都達成,則此簽章為有效。


上一篇
Day21 HORS 簽章方案:原理、實作與示例
下一篇
Day23 超級拼裝車! SPHINCS+ 簡介。目前唯一成為 NIST 標準的 hash 簽章系統
系列文
「後量子密碼學」- 未來資訊安全的基礎30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言