使用相同的私鑰生成 Schnorr 和 BLS 簽名
我想知道是否有可能,或者使用相同的私鑰生成 Schnorr 和 BLS 簽名是否有任何限制。具體來說,假設我有一個私鑰 $ x $ ,我想用它來唱一些使用 Schnorr 簽名方案的消息和使用 BLS 簽名方案的其他消息。驗證者應該能夠分辨出簽名是使用相同的私鑰生成的。
我能想到的一種方法是擁有一個公鑰 $ X $ 在曲線上 $ g $ 並將其用於兩種類型的簽名。這可能會限制選擇 $ g $ 到支持 BLS 方案的曲線(例如 BLS12-381)。但我不確定在這些類型的曲線上使用 Schnorr 簽名是否有任何缺點。
有一個經典的解決方案,適用於任何兩個公鑰密碼系統:從一個主密鑰派生兩個私鑰,主密鑰起著新的公共私鑰的作用。
從萬能鑰匙開始。從它和兩個公共常量中導出用於兩個公鑰密碼系統的密鑰生成器的 CSPRNG 的種子(使用一些密鑰導出函式,如HKDF)。執行兩次密鑰生成(如果有幫助,僅限於公鑰),以獲取公鑰。並且,在每次使用一個密碼系統的主私鑰時,執行這兩個推導中的適當一個,然後執行適當的密鑰生成(如果有幫助,僅限於私鑰),從而獲得密碼系統的私鑰,並使用它像平常一樣。
主要缺點是使用私鑰更複雜/成本更高,這是 RSA 的問題。但是對於基於離散對數的密碼學,包括橢圓曲線密碼學,成本往往是最小的(相對於私鑰的使用),因為 KDF 的成本相對較低,並且將其輸出減少到私鑰通常本質上是模組化約簡(ECDSA)或位提取 (Ed25519)。
注意每條評論:“驗證者應該能夠知道簽名是使用相同的私鑰生成的”的要求只有在驗證者確定用於驗證兩個簽名消息的兩個公鑰的情況下才能滿足從同一個主密鑰生成。因此必須信任準備公鑰的人。為避免錯誤,可以向公鑰添加唯一的公共標識符。這可以通過與另一個常數的推導從主密鑰中獲得。
你在做什麼是沒有意義的。在兩個不同的方案中使用相同的公鑰意味著任何破壞任何一個方案的人都會獲得您的私鑰(從而同時破壞兩個方案)。這是糟糕的安全設計。你想加強你最薄弱的環節,而不是添加更多的連結。
如果您需要以兩種不同的方式對消息進行簽名,只需在每條消息中添加一點指示您正在簽名的消息類型會更容易、更安全。