With our current guardrails, the users send private transaction data to the operator (the RPC component), this private data then gets sent to the validator that uses it to re-run the transactions and stores this data for future potential use. In this scenario, the private data is fully visible to:
- The entity that is running the RPC component.
- The entity that is running the validator.
It may be desirable to make sure that neither the validator nor the RPC component can see this private data directly. Ideally, viewing this data would require a viewing key that is shared across multiple parties. One way to accomplish this is as follows:
- The validator runs in a TEE.
- The validator also has a public encryption key.
- The user encrypts the private data they include with the transaction using the validator's encryption key.
- The RPC component forwards the encrypted data to the validator (similar to how it does now).
- The validator decrypts the data, re-executes the transaction, and does everything else that it does now - but all of this is happening in a TEE, and so, not directly visible to the operator of the validator.
- The validator then re-encrypts the data using a key that has a corresponding viewing key which is threshold-shared among $n$ parties.
The end result is:
- Neither the RPC operator nor the validator see the data directly, but we still get the same guardrails we have now.
- Some subset of the $n$ parties can come together to decrypt the data if/when required.
Conceptually, the work here can be split into two parts:
- User encrypts the private data that they send to the node, and the validator has the decryption key. This ensures that the RPC operator does not see the private data, but the validator does still see it directly.
- Run the validator in a TEE and re-encrypt the data so that it can be decrypted only with a viewing key that is shared amongst $n$ parties.
With our current guardrails, the users send private transaction data to the operator (the RPC component), this private data then gets sent to the validator that uses it to re-run the transactions and stores this data for future potential use. In this scenario, the private data is fully visible to:
It may be desirable to make sure that neither the validator nor the RPC component can see this private data directly. Ideally, viewing this data would require a viewing key that is shared across multiple parties. One way to accomplish this is as follows:
The end result is:
Conceptually, the work here can be split into two parts: