Replies: 2 comments 4 replies
-
|
This is exciting! Here's a straw man proposal: Proposed MVPI propose that the MVP protect only This is enough for the first privacy cut. The TEE stage protects more than the input wire path. Encrypted storage keeps persistent validator data private from the operator under the TEE security model, so execution data written during validation is also covered by the trusted boundary. The MVP should do this:
Edit 2026-05-22: revised MVP framing:
This MVP does not hide every field in Private Input TransportUse mTLS plus protobuf for the MVP. For the first patch, clients authenticate the validator or node endpoint with mTLS. This gives a small working path and proves the data-flow change. In the TEE stage, the same role moves to a TEE-bound key. The client must then verify fresh TEE attestation before trusting that key. This works if the RPC decryptor is inside the trusted boundary. The trusted endpoint receives The MVP does not need a nested HPKE envelope if mTLS terminates inside the trusted boundary. A payload envelope can be added later if the trusted decryptor and validator are split, or if we need ciphertext to pass through an untrusted RPC process. Sources: Edit 2026-05-22: replace the transport-encryption boundary with partial payload encryption. Use the existing protobuf/gRPC flow, but encrypt Vocabulary note: Internal transport encryption can still be added later as defense in depth, but it is not the MVP privacy boundary. TEE StackUse DStack for the TEE stage. DStack is the best current fit because it is an app stack, not only an attestation experiment. It supports TEE app identity, KMS/key release, gateway identity, encrypted network and disk defaults, reproducible image work, and measured app updates. Its Rust SDK was added in DStack PR 161, which makes it usable from validator code. The
The MVP can start with a narrow allowed-measurement list. It does not need a full production governance flow. DStack sources: Threshold Viewing and RecoveryUse verifiable threshold decryption for stored private data. The The The decryption context should include the transaction id, block or epoch, validator identity, and approval id if governance approval is required. The MVP can mock the threshold layer or use simple envelope encryption while keeping the storage format ready for threshold decryption. The design target should still be verifiable threshold decryption. Prover RPCUse mTLS for prover RPC in the PoC. This assumes no remote prover support for the MVP. Logging and TelemetryPrivate mode should use a denylist for sensitive fields and an allowlist for telemetry. The denylist should include:
Useful telemetry can stay: request counts, validation time, decrypt failures by reason, attestation age, key id, queue depth, storage errors, and block signing results. Out of Scope for MVPThe MVP should not solve every privacy problem. Out of scope:
Proof of cloud is good V2 work. It can strengthen the claim that a valid TEE quote came from an accepted infrastructure environment. It should not block the MVP. See Proof of Cloud and the Flashbots note Mind the Gap: TEE Proof of Cloud. **Open questions**Cryptography
TEE
Telemetry
Recovery and Scope
V2
|
Beta Was this translation helpful? Give feedback.
-
|
I think encrypting just the I do wonder if the first step for this could avoid TEEs (for now) and only introduce privacy against the RPC operator, but not against the validator. Specifically, the user would encrypt
|
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
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:
Beta Was this translation helpful? Give feedback.
All reactions