Signature

一種在隱藏地址接收付款的方法

  • April 2, 2018

的背景:

  • 我們假設硬幣所有權和付款記錄在公共分類賬上。
  • 假設愛麗絲想要發布一些資訊讓她從任何人那裡接收硬幣。
  • 但她不想在公開的固定地址接收硬幣。
  • 相反,她希望付款人每次都生成一個唯一的目的地地址。
  • 付款人不得知道該地址的私鑰;只有愛麗絲會知道。

我想知道下面的算法是否能實現這些目標。這結合了 Diffie-Hellman 密鑰交換和任何數字簽名算法。是否有我遺漏的細微缺陷?

  1. 假設我們對 Diffie-Hellman 使用橢圓曲線,並且 $ G $ 是一個公開同意的基點。
  2. 愛麗絲選擇一個秘密整數 $ a $ .
  3. Alice 計算公共點。 $ A = a×G $
  4. 愛麗絲發表聲明“愛麗絲將收到來自該號碼的付款 $ A $ ”。
  5. 愛麗絲在很長一段時間內(多年,多次付款)都不會更改此聲明。
  6. Bob 想付給 Alice,所以他取回 Alice 的值 $ A $ 並將派生一個新的公鑰。
  7. Bob 選擇一個秘密整數 $ b $ .
  8. Bob 計算公共點 $ B = b×G $ .
  9. Bob 計算共享秘密整數 $ s = \text{hash}(b × A) = \text{hash}(b × a × G) $ .
  10. Bob 計算公鑰 $ K = A + s×G = a×G + s×G = (a + s) × G $ .
  11. Bob 將他的付款發送到該地址 $ K $ ,並且還提到了這一點 $ B $ 在支付資訊中(記錄在公共分類賬上)。
  12. Bob 在不使用公共賬本的情況下將付款資訊告訴 Alice 帶外 $ (K, B) $ . 此步驟不需要安全,但應保留在永久公共記錄之外。
  13. Alice 計算共享秘密整數 $ s = \text{hash}(a × B) = \text{hash}(a × b × G) $ .
  14. Alice 計算私鑰 $ k = a + s $ ,對應於公鑰 $ K $ .
  15. 現在愛麗絲可以花掉她從鮑勃那裡收到的付款,方法是創建一個簽名使用 $ k $ .

您的算法應該是安全的,因為它與 CryptoNote 協議中的“一次性地址”算法基本相同,如下所述:

  1. Alice 生成兩個密鑰 $ a $ 和 $ b $ 並發表 $ A = aG $ 和 $ B=bG $ .
  2. 想要向 Alice 發送硬幣的 Bob 生成隨機 $ r $ 並發表 $ R = rG $ 和 $ P = H(rA)G+B $ .
  3. 愛麗絲(或任何知道 $ a $ ) 可以通過檢查是否屬於 Alice 來檢查付款是否屬於 Alice $ H(aR)G+B = P $ . 請注意,這不需要 $ b $ , 所以 Alice 可以讓任何其他方通過分享來檢查付款 $ a $ 不用冒險讓他們花掉她的硬幣。
  4. 當愛麗絲想花硬幣時,她計算 $ x = H(rA)+b $ , 這是私鑰 $ P $ 自從 $ P = xG = (H(rA)+b)G=H(rA)G+bG=H(rA)G+B $ .

您的方案是該算法的變體 $ a = b $ 以便 $ A = B $ . 這導致 Bob 計算 $ P = H(rA)G + A $ , 可以用 $ H(aR)G+A = P $ 和密鑰是 $ x = H(aR)+a $ ,因此您可以假設它與 CryptoNote 的算法一樣安全(這在 AFAIK 中非常安全),但是您無法共享查看密鑰以讓其他人搜尋 Alice 的交易。

引用自:https://crypto.stackexchange.com/questions/58022