Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add SNP-style virtual attestations, restoring code update tests #6770

Open
wants to merge 42 commits into
base: main
Choose a base branch
from

Conversation

eddyashton
Copy link
Member

We previously had a vestigial virtual attestation reusing some of the terminology and fields of SGX attestations. This didn't provide any distinctions between nodes or apply checks during node joining, so wasn't usefully testing code upgrade flows.

This has been replaced with a new scheme based on SNP attestations. A virtual node now has a measurement (the sha256 of the enclave library, calculated by the host at startup) and a host data/security policy value (currently a single default string for security policy, with host data the sha256 of that as it is for SNP). This introduces many duplicated tables, and associated duplicated governance, because we don't want to risk collisions across platforms.

The beneficial outcome is that we can now test code update flows (ie - change the "permitted nodes" of a service at run-time, confirm that old nodes can no longer join) close to how they run on SNP. We can also test some of the effects of fiddling with these tables (eg - omitting security policies, setting invalid host data) outside of SNP, though there's the caveat that these are all touching separate governance actions and tables.

There's no endorsements for virtual attestations, to avoid creating/maintaining any fake hardware keys, but this means there are still join paths on SNP that virtual doesn't test. I've tried to avoid too many renames/refactors of existing fields, but the existing PAL is extremely porous and inconsistent, so some of the names/concepts are unclear (ie - "host_data" is an SNP concept, "security_policy" is what we/ACI put there, but the names aren't consistently split and the digesting/decoding is haphazard).

I'll add some comments describing the changes I remember, when it's not last-thing-on-a-Friday.

@eddyashton eddyashton requested a review from a team as a code owner January 17, 2025 16:34
tests/governance.py Show resolved Hide resolved
tests/infra/utils.py Outdated Show resolved Hide resolved
tests/code_update.py Outdated Show resolved Hide resolved
tests/code_update.py Outdated Show resolved Hide resolved
tests/infra/consortium.py Show resolved Hide resolved
tests/lts_compatibility.py Outdated Show resolved Hide resolved
src/node/gov/handlers/service_state.h Show resolved Hide resolved
src/host/main.cpp Outdated Show resolved Hide resolved
@eddyashton eddyashton added the run-long-test Run Long Test job label Jan 24, 2025
tests/code_update.py Outdated Show resolved Hide resolved
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
run-long-test Run Long Test job
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants