/dessi

2022 ETH Lisbon Hackathon Project: Deterministic Encryption and Storage via Snap/IPFS

Primary LanguageTypeScriptApache License 2.0Apache-2.0

Deterministic Encryption and Storage via Snap and IPFS

Background

For dapps to evolve, data needs to be stored in a way that is controlled by the user. There are several solutions to storing a user's data, including IPFS, however these solutions do not have guarantees of security and privacy which are necessary when it comes to user data. Dapps are evolving to use the user's wallet as their main identifier, but there are other powerful use cases lurking and the goal of this snap is to unlock on of them: user-controlled encryption and storage.

EIP-5630 defines a specification for encryption and decryption using deterministically derived, pseudorandom keys for wallets to implement. This snap implements the specification and provides a simple interface for encrypting and decrypting data. This include two methods: eth_getEncryptionPublicKey and eth_decrypt

Example Flow

sequenceDiagram
    participant User
    participant Wallet
    participant Dapp
    participant Storage as Storage/IPFS

    note over User, Storage: Get Key, Encrypt and Store Flow

    Dapp->>Wallet: eth_getEncryptionPublicKey()
    User->>Wallet: Approve
    Wallet->>Wallet: Derive Encryption Key from Wallet Private Key
    Wallet->>Dapp: Return Encryption Public Key
    User->>Dapp: Provide Private Data
    Dapp->>Dapp: Encrypt Data
    Dapp->>Storage: Encrypted Data

    note over User, Storage: Retrieve and Decrypt Flow


    Storage->>Dapp: Encrypted Data
    Dapp->>Wallet: eth_decrypt()
    User->>Wallet: Approve
    Wallet->>Wallet: Derive Encryption Key from Wallet Private Key
    Wallet->>Wallet: Decrypt Data
    Wallet->>Dapp: Return Decrypted Data
    Dapp->>User: Show Decrypted Data

To run

yarn && yarn start