Private-Key
如何使用比特幣公鑰“加密”一條消息並使用它的私鑰對其進行解密?
我有以下文本字元串:
這是一條測試消息。
- 使用我的比特幣公鑰(比特幣地址?),我如何加密這條消息?
- 如何使用比特幣私鑰解密消息?
是的,這是可能的。
但是,我想提前聲明,出於多種原因,這是不可取的:
- 出於隱私原因,比特幣密鑰旨在為一次性使用,並且利用它們進行加密不必要地鼓勵將它們視為長期存在的身份。
- 當密鑰單獨用於多個協議時,可能會出現醜陋和危險的互動。
- 使用實際上為加密而設計的系統比試圖捎帶比特幣的密碼學要好得多。
- 實現自己的密碼學是非常危險的(一般來說,除非你知道自己在做什麼,並且得到專家的大量評論)。
存在一種稱為ECIES的方案,可讓您利用橢圓曲線密鑰來創建加密系統。
簡而言之,它的工作原理是:
發件人:
- 使用強密碼隨機數生成器生成一個臨時私鑰k,關聯的公鑰k = kG(這裡的乘法指的是橢圓曲線乘法)。
- 計算ECDH共享密鑰s = H(kP),其中P是接收者的公鑰。
- 使用由s播種的KDF計算兩個對稱密鑰x 1和x 2:(x 1 , x 2 ) = KDF(s)。
- 使用 AES對消息m進行加密,以**x 1作為密鑰,得到c = AECEnc x 1 (m)。
- 計算K和c上的MAC ,以x 2作為密鑰:h = MAC x 2 (K || c)。
- 將*(K, c, h)*發送給接收者。
收件人:
- 使用s = H(pK)計算 ECDH 共享密鑰,其中p是他的私鑰。
- 計算相同的兩個對稱密鑰x 1和x 2:(x 1 , x 2 ) = KDF(s)。
- 計算相同的 MAC h’ = MAC x 2 (K || c)
- 驗證h’ = h,否則失敗。
- 使用s解密消息,m’ = AESDec x 1 (c)。