TEE Implementation #1173
Discussed in https://github.com/gonka-ai/gonka/discussions/951
💬 Comments (4)
Strong +1 for prioritizing this.
My blocker is practical, not theoretical: I run AI agents over private operational context, and I cannot route real prompts/responses through Gonka while the selected host can read them. Privacy sanitization is useful as a temporary guardrail, but it does not solve the core threat model.
The feature I would actually use is an attested private inference path: client-verifiable Confidential MLNode/TEE, encrypted prompts and responses, and no sensitive payloads in host-readable logs or disk.
I'm happy to help test an MVP and provide acceptance criteria from real agent workloads. Is there a current roadmap after #1246 for the next milestone where users can help validate it?
Hi, thanks for the message!
1246 is a first experiments PR - it connects the private path across chain, dapi and ml-node, with a Phala TDX smoke test. It's not the MVP yet, still some work before we can really test it
Rough plan (from my mind): - Review and land #1246 as the base - Add dual attestation (intel-tdx + nvidia-cc) so the GPU side is covered too, not just the CPU - Do a full end-to-end run on a localtestnet with real Intel TDX + NVIDIA CC hardware (Phala Cloud is probably the easiest for that)
Just note the MVP is only to show how this can be integrated - not a secure, production-ready version yet. It's just a first direction to build on
Maybe you could start with reviewing #1246 and let me know what you think? From there we can discuss the next steps. And if you have any questions, feel free to ask
Hi all,
We'd like to share a proposal that builds on the current status and the work in PR #1246, where only the initial wiring was tested (a TDX smoke test on a cloud CVM). Reviewing the PR, we found several gaps that need to be closed before it can protect anything. The verifier checks only MRTD, so the kernel and the application are not pinned, and there are no DEBUG, TCB or CRL checks. report_data binds only the public key, so evidence can be replayed, and VERIFIED status is carried forward between epochs. There is no GPU attestation, every node gets the same KMS-derived key, and the encrypted route bypasses devshard accounting and validation.
We wrote a draft proposal that addresses these points and covers Intel TDX, AMD SEV-SNP and NVIDIA CC: https://github.com/zpoken/gonka/tree/zpoken/tee-proposal/proposals/confidential-mlnode. Alongside it there is an attestation glossary that explains MRTD, RTMR0–3, HOST_DATA and NVIDIA evidence with vendor spec sources: https://github.com/zpoken/gonka/blob/zpoken/tee-proposal/proposals/confidential-mlnode/attestation-glossary.md.
The proposal describes a self-hosted Confidential MLNode on dstack without a KMS, where keys are generated inside the CVM on every boot. The OS image, compose file, model weights (via dm-verity), GPU policy and VM shapes are pinned through an on-chain governance registry. Attestation is bound to the chain, epoch, participant and node, and NVIDIA GPU evidence is bound into the CPU quote. Only small commitments (about 250 bytes) go on-chain, while the evidence itself is served off-chain, and a challenge flow allows a re-vote on wrong decisions. Requests are encrypted through devshard to several attested nodes of the slot's host, usage is covered by signed receipts, and validation between enclaves is driven by validators.
🔄 Auto-synced from Issue #1173 every hour.
Some first experiments on this in #1246 - covers the wiring end-to-end (chain, dapi, ml-node, devshard) + a Phala CVM smoke test
Not a final implementation, but should give a head start