iT邦幫忙

2025 iThome 鐵人賽

DAY 19
0
Security

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

Day 19 初探 PSA Certified Crypto API 金鑰保護機制

  • 分享至 

  • xImage
  •  

在 FIPS 205 規範的演算法中,我們看到 SK.seed 和 SK.prf 是做為 function 的參數在四處傳遞,這其實是不安全的,但,畢竟 FIPS 205 是在規範演算法,並不是在規範一個安全的產品要怎麼保管 private key,所以,當我們在實作一個安全產品的時候,不能直接照演算法的定義將 private key seed 當參數四處的傳遞,也就是說,須要從金鑰保護機制的角度來實作程式。因此,本文將探討 PSA Certified Crypto API,從中尋找相關的金鑰保護機制,並以此來修改本系列的 SLH-DSA 的簽章實作。

從 HMAC-SHA-256 來看, PSA 有這個 psa_mac_compute interface

psa_status_t psa_mac_compute(psa_key_id_t key,
                             psa_algorithm_t alg,
                             const uint8_t * input,
                             size_t input_length,
                             uint8_t * mac,
                             size_t mac_size,
                             size_t * mac_length);

psa_algorithm_t 如果是 PSA_ALG_SHA_256 就是 HMAC-SHA-256。
psa_key_id_t 我們能用來保護金鑰,透過傳遞 key identifier 就不用直接碰私鑰的種子, PSA Certified Crypto API 有這一段

A key identifier can be a permanent name for a persistent key, or a transient reference to volatile key. See Key identifiers.

從這裡我們能看出,在 PSA 裡,私鑰能存到 flash 這種 storage 也能存到關機就不存在的 RAM。換句話說,私鑰究竟是存在硬體的KMU裡還是 flash,PSA 並沒有強制規定,他只定義語意和interface,不強制儲存媒體是哪一種介質。

psa_key_id_t 是透過 psa_generate_key 產生,然後獲得 psa_key_id_t,至於他存在什麼地方,透過 Key attributes 的 Key lifetimes 決定,他的 persistence level 在 Persistence level 有定義,其中 PSA_KEY_PERSISTENCE_VOLATILE 代表一旦關機 key 就沒了。

有了 psa_key_id_t,就能用 key handle 取代私鑰在 function 之間傳遞,明天開始我們會對之前的實作進行修改。

References

  1. FIPS 205 Stateless Hash-Based Digital Signature Standard
  2. PSA_ALG_SHA_256
  3. PSA Certified Crypto API 1.3
  4. PSA Certified Crypto API 1.3 PQC Extension bet.3

上一篇
Day 18 使用 PSA Certified Crypto API 和 Oberon 的 HMAC-SHA-256
下一篇
Day 20 使用 Mbed TLS (PSA Crypto) 進行金鑰管理與產生符合 SP 800-90A 的亂數 (一)
系列文
裸機實作 SLH-DSA 簽章:FIPS 205 之演算法實作、測試、防禦與跨平台20
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言