理論上可以委託公鑰生成嗎?
想像以下場景:
在給定的加密貨幣中,隱私應該盡可能高。
為此,為每筆傳入交易創建一個具有新地址的新賬戶(地址是私鑰/公鑰對的公鑰)。但是,一旦有人想向他們匯款,使用者並不總是線上生成具有新地址的新帳戶。因此,當所有使用者想要向某人匯款時,他們應該能夠為其他使用者創建具有新地址的新賬戶。當然,只有收款人才能將錢轉移到其他人為他創建的賬戶中。
所有這些都應該是基於ECC的,可以說是ECDSA算法的擴展。
但正如剛剛在加密貨幣範例中描述的那樣,只有為其生成公鑰的人才被允許為該公鑰簽署消息或解密使用該公鑰加密的數據。
由於所使用的加密算法的安全性對於加密貨幣至關重要,因此只有通過NIST和SECG預製和標準化的曲線參數才能使用,這些參數已知是安全和高效的。
唯一需要考慮的技術變化如下:
注意:由於賬戶的地址將是密鑰對的對應公鑰,因此以下術語“地址”和“公鑰”將互換使用。
- $ d $ = 隨機生成的私鑰
- $ G $ = 橢圓曲線的基點
變化:
- 私鑰的可用間隔從 $ [1, n - 1] $ 至 $ [1, \frac{n}{2} - 1] $
- 與公鑰生成一樣,有一點 $ P $ 計算如下: $ P = d \times G $ . 這點 $ P $ 形成所謂的委託地址生成密鑰(DAG Key)。
- 為另一個人生成地址(公鑰),隨機所謂的地址隨機化密鑰(AR Key)( $ i $ ) 與私鑰的間隔相同 ( $ [1, \frac{n}{2} - 1] $ ) 必須生成
- 要為任意人生成地址,DAG 密鑰 ( $ P $ ) 加上 AR 鍵 ( $ i $ ) 和基點 ( $ G $ ): $ Q = P + i \times G $ . 自從 $ P $ 是 $ d \times G $ ,以下必須成立: $ Q = P + i \times G = (d + i) \times G $ . 這點 $ Q $ 形成其 DAG 密鑰用於計算的人的新地址。
例子:
- Alice 創建一個隨機生成的私鑰 ( $ d $ ).
- Alice 使用她的私鑰生成 DAG 密鑰 ( $ P $ )
- Alice 公開 DAG 密鑰
- Bob 想要為 Alice 生成一個地址(公鑰)並從 Alice 那裡獲取 DAG 密鑰來執行此操作
- Bob 創建一個隨機生成的 AR 密鑰
- Bob 使用 Alice 的 DAG 密鑰和上一步生成的 AR 密鑰為 Alice 生成一個新地址
- Bob 向新創建的地址發送金額
- Bob 將 AR 密鑰發送給 Alice
- 只有 Alice 可以從這個地址匯款,因為她是唯一可以為新創建的地址(公鑰)創建有效簽名的人。為此,她只需計算該地址的私鑰,如下所示: $ d + i $ (添加她的私鑰 $ d $ 和 AR 鍵 $ i $ 由鮑勃創建)。
問題:
甚至理論上可以委託公鑰生成嗎?
如果是這樣,對標準 ECDSA 算法的這種改變是否可行?換句話說,在不知道或洩露該公鑰的私鑰的情況下為其他人創建公鑰?
或者有沒有更好的方法來解決這個問題?
如果我正確理解了您的方案,那麼 Alice 需要一個單獨的安全通道進行通信 $ i $ 給鮑勃。
門羅幣通過在每次向某人發送資金時創建一個一次性目標公鑰來解決這個問題。這些資金使用相應的一次性私鑰進行簽名,該私鑰只能由接收者確定。
接收方有兩個密鑰對: $ (a, A=aG) $ 和 $ (b, B=bG) $ , 在哪裡 $ G $ 是一個眾所周知的基點。
發送者創建一個臨時密鑰對 $ (r, R=rG) $ 並發表 $ R $ .
一次性目標公鑰是 $ H(rA)G+B $ , 在哪裡 $ H $ 是返回標量值的加密安全散列。
相應的私鑰只能由接收者恢復為 $ H(aR)+b $ .
收件人有兩個密鑰對的原因是只需要私鑰 $ a $ 是掃描傳入資金所必需的,並且只需要額外的第二個私鑰 $ b $ 當資金需要使用時。但是,如果您不需要這種區別,接收者可能只有一對密鑰 $ (a,A) $ 然後一次性目標公鑰將是 $ H(rA)G+A $ 對應的私鑰是 $ H(aR)+a $ .
您可以在此處的第 4.2 節和原始 CryptoNote 白皮書的第 7 頁中閱讀有關 Monero 一次性地址的實現。