Web3js

使用乙太坊公鑰/私鑰加密/解密 IPFS 上的數據?

  • February 4, 2022

我希望我的應用程序連接到 Web3 錢包,將加密數據儲存在 IPFS 上,然後檢索該數據並解密(無需使用者將其私鑰暴露給我的應用程序)。

這可能嗎?如果沒有,是否有任何方法僅允許基於連接的錢包地址對 IPFS 數據(或 MongoDB 集合)進行讀/寫訪問?我猜這個對window.ethereum像很容易被欺騙……我想一個安全協議可能涉及簽署驗證交易?希望不是 - 如果每次讀/寫都需要這樣做,那麼使用者互動將非常麻煩。

我正在使用ethers.js但願意學習web3.js

在儲存到 IPFS 之前,您需要對數據進行加密。但是在大數據上使用 ECIES 加密(使用 Ethrereum 密鑰)效率不高,因為它的速度很慢,而且 Metamask 經常會掛起。一個好的策略是使用像 AES256 這樣的非對稱加密來加密數據。你可以使用類似CryptoJs的東西。然後,您可以使用接收者的 Ethrereum 地址的公鑰加密 AES256 密鑰。

要從 Metamask 獲取公鑰,您可以通過 eth_getEncryptionPublicKey( docs ) 請求它。或者,如果接收者在 Ethrereum 上至少有一筆交易,您可以像這樣從交易數據中恢復公鑰。

現在您有了收件人的公鑰,您可以使用 ECIES 加密來加密 AES256 密鑰。現在,您可以將加密數據(使用 AES256 加密)和加密 AES256 密鑰(使用 ECIES 加密)添加到 IPFS。您可以使用多種方式執行此操作,例如創建加密密鑰的文本文件並將其與加密數據一起壓縮,以便獲得單個文件。或將其添加為單獨的文件,或創建一個目錄。

要獲取數據,接收者必須從 IPFS 下載數據和加密的 AES256 密鑰。然後使用他們的公鑰解密加密的 AES256 密鑰。您可以使用 Metamask 使用eth_decrypt( docs ) 來執行此操作。現在使用 AES256 密鑰,您可以解密數據。

你可以簽出實現這個想法的這個項目。希望這可以幫助 :)

引用自:https://ethereum.stackexchange.com/questions/120762