摘要
本文件描述了一種與格密碼學相容的分層確定性錢包方案。
動機
分層確定性錢包已成為區塊鏈中的事實標準。隨著區塊鏈行業討論後量子時代,我們希望在格密碼學環境中應用這種技術,因為備份單個助記詞來生成無限數量先前未連線的金鑰,對使用者來說比每次執行操作都備份相同的錢包更加可取。
我們專注於Dilithium簽名方案,因為它是第一個最終確定的NIST後量子簽名,並可能成為行業標準。
將格密碼學調整到分層確定性設定的挑戰是雙重的。首先,HMAC-SHA512的輸出不能直接用作格私鑰。對於Falcon和Dilithium,我們需要形成格的"好基礎"(小向量)的多項式,而金鑰生成演算法使用拒絕取樣,這不適合分層確定性錢包方案而不經過修改。
第二個挑戰是,在BIP32中,非強化金鑰是透過橢圓曲線點(公鑰)的加法派生的,而格中沒有等效的操作:格公鑰集在加法或乘法下不是封閉的。
我們在這個QIP中解決第一個挑戰,並且不嘗試支援非強化金鑰。據我們所知,在格密碼學環境中是否可以克服第二個挑戰仍是一個開放的研究問題。非強化金鑰用於僅監視或審計錢包,對分層確定性錢包的主要用途並非必不可少,因此我們不認為這是一個關鍵缺陷。
規範
基本思想是在每次迭代中使用HMAC的熵輸出作為多項式取樣的隨機數生成器。在BIP32中,HMAC輸出的一半被用作私鑰,在"強化"情況下直接使用,或在"非強化"情況下新增到先前的私鑰。這是因為橢圓曲線密碼演算法的結構,其中私鑰可以被視為在橢圓曲線群中乘以生成點的整數。
在Falcon和Dilithium中,金鑰生成演算法在金鑰派生過程中消耗≤64位元組的熵。我們可以簡單地將HMAC的整個輸出輸入金鑰生成過程,而不是使用一半作為私鑰本身,但為了最大限度地與BIP44錢包相容,我們只使用一半輸出。這使得該方案與BIP32中的強化金鑰派生相同。
使用種子作為預設金鑰格式的這種技術得到了NIST的支援。
參考實現
格分層確定性錢包的實現位於此處。我們針對由pq-crystals生成的測試向量進行測試,該測試向量是標準作者用C語言編寫的Dilithium的參考實現。
兩個錢包版本都使用Rust庫bip39從助記詞"助記詞"獲取"種子"。然後,我們透過HMAC-SHA512從種子派生"主金鑰",它形成金鑰樹的根,每個邊緣表示HMAC-SHA512(R || 0x00 || L || 子索引),其中L || R是樹中父節點的拆分值,如BIP32標準所述。
原理
我們最初考慮使用Falcon,因為它具有更小的金鑰和簽名。為此,我們依賴Thomas Pornin的rust-fn-dsa實現FALCON簽名演算法,並進行了一些小的修改以允許外部生成的熵。Thomas Pornin是FALCON標準的作者之一,也是演算法的PQClean C語言實現的作者。Falcon錢包的實現位於此處。
後來我們得知(來自Thomas Pornin)Falcon標準並未完全指定金鑰生成路徑,因此我們決定切換到ml-dsa(原名Dilithium)。Dilithium有幾個優點。它是
- 更簡單
- 更快
- 具有確定性金鑰生成
- 已被NIST最終確定
缺點是更大的金鑰、更大的簽名和更慢的驗證。
無論如何,格金鑰和簽名都比橢圓曲線大得多,所以我們將不得不為更多磁碟空間付費。
Dilithium和Falcon都需要≤64位元組的熵作為金鑰生成過程的輸入,因此我們可以簡單地使用HMAC-SHA512輸出的前32位元組作為熵源。非強化用例在格密碼學中顯然是不可實現的,因此我們省略了它。
關於HMAC-SHA512的量子安全性,針對雜湊函式的主要量子攻擊是Grover演算法,它對搜尋未排序資料庫(在我們的情況下是雜湊前像)提供二次加速。這將安全位數減半,即512 → 256,256 → 128等。這適用於所有雜湊函式,因此任何經典安全的雜湊演算法都會有相同的問題。另一方面,已經證明Grover演算法在漸近意義上是最優的,所以我們不應期望另一種量子演算法對安全雜湊函式的攻擊會比Grover演算法好多少。
與雜湊函式相比,區塊鏈的數字簽名更容易受到量子攻擊,因為Shor演算法將從公鑰找到橢圓曲線私鑰的難度從指數級(Pollard's rho)降低到多對數級O(log^3(n)),其中n是位元數。
出於這個原因,我們優先考慮保護數字簽名免受量子攻擊,並保持雜湊函式不變。
版權
本規範已釋出到公共領域。
請參閱此圖表以瞭解BIP32的摘要。
本提案最初作為Quantus改進提案發佈於此處




