乙太坊 dapp 中的鏈下加密
我正在編寫一個 dapp,它保存/管理可能需要加密和解密並再次推送到鏈中的敏感數據。
我知道在智能合約中加密數據是不安全的,這就是為什麼我想到了鏈下加密機制。我想用 public key 加密數據,然後用 private key 解密。但是我發現像metamask 這樣的流行錢包軟體不允許這樣做。
1.有哪些可能的方法來實現這個或任何其他更好的方法?(我認為管理使用者 eth 密鑰不是那麼安全)
2.如果使用自定義密鑰進行加密,是否可以使用 Google KMS 或 Amazon Kms 等密鑰管理工具來管理密鑰和加密數據?
您可以使用公鑰加密數據並使用帶有標準加密的私鑰離線解密數據,特別是使用橢圓曲線集成加密方案(ECIES)
使用乙太坊密鑰的 python 範例:
https ://github.com/tritone11/eth-ecies-py
在 Rust 中:
https ://github.com/tritone11/rust-eth-ecies
在 javascript 中:
https ://github.com/libertylocked/eth-ecies
在 python 中,pyelliptic 有時會讓人頭疼,您可以按照以下方式獲得相同的結果:
https ://github.com/ethereum/trinity/blob/master/p2p/ecies.py
MetaMask 不支持加密/解密,但支持鏈下簽名,您可以在鏈上驗證。
簽名將使用使用者私鑰。這樣它是100%真實的。
對於數據,您可以保存鏈下或鏈上。但是您必須使用要求使用者簽名而不是加密和解密,然後您可以稍後在鏈上和鏈下驗證簽名。
實際上,已經有這方面的 EIP712 標準。您可以在此處查看 MetaMask 的工作原理: https ://medium.com/metamask/eip712-is-coming-what-to-expect-and-how-to-use-it-bb92fd1a7a26