Repository navigation
spec(appraisal): 3.1.5, a layer is established by its event log or by a reference value (#279) - #524
Open
revenue7-eng wants to merge 1 commit into
Open
revenue7-eng wants to merge 1 commit into
revenue7-eng wants to merge 1 commit into
Conversation
… a reference value (agentrust-io#279) As merged in agentrust-io#477 a layer was established only when its event log replayed to the quoted value, so a quote equal to signed reference values with no log could not be affirming under rule 2, though RFC 9334 treats appraisal against reference values as ordinary appraisal. A layer that holds measurements is now established by either route. The holds-measurements condition binds both: a quoted value equal to the initial value, or on a TPM to a separator alone, is layer-not-measured even when a reference matches it. A reference that gives only a composite establishes no layer. A presented log that does not replay is decided under rule 3 first. Vector 45 carries the published v2.1.0-rc14 release measurement: PCR 0, 1, 4, 6, 8, 9 established by reference with no log, PCR 2, 3, 5, 7 layer-not-measured, status affirming. A test holds it to the per-layer reference values. Records do not change. Signed-off-by: Andrey Lazarev <lazarev@tactiqedge.com>
revenue7-eng
requested review from
a team,
lywinged and
rajnisht7
as code owners
October 15, 2026 04:18
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Section 3.1.5, as discussed with @imran-siddique: a layer is established by its event log or by a reference value, and the condition that it holds measurements binds both routes. To land before the next tag.
What changes
establishedwhen its event log replays from the initial value to the quoted value, or when the quoted value equals a reference value for that layer from a source the verifier's policy trusts and not taken from the evidence under appraisal (appraisal against reference values, RFC 9334).layer-not-measuredeven when a reference matches it.measured-not-appraisedreads as before. The reasons table names both routes in themeasured-not-appraisedrow. "Out of scope" adds the reference-value format to what this section does not fix.This narrows the BREAKING entry of #477: a verifier that reports
affirmingafter a reference match is conformant when each layer its policy requires holds measurements and equals its reference value. Records do not change. It also brings the text in line with vector09, which already reads PCR 0, 1, 4, 6, 8 and 9 of the rc13 release reference as established without an event log.Test vector
examples/platform-measurement-appraisal/45-rc14-established-by-reference.json, from published evidence (TactiQ OS v2.1.0-rc14 release, Rock 5A, Infineon SLB9670): the attestation agent's quotes over PCR 0 to 9 on slot B, appraised against the signed release reference with no event log. PCR 0, 1, 4, 6, 8 and 9 established by reference; PCR 2, 3, 5 and 7 equal the value a separator alone produces and arelayer-not-measuredalthough the reference matches them; statusaffirming. Sourced, so no twin, as with09and10.The evidence and an offline checker: release assets
l3-evidence-rc14.tar.gz(19 quotes and the AK),rim-rock5a.jsonandrim-rock5a.json.p7sat https://github.com/revenue7-eng/tactiq-os/releases/tag/v2.1.0-rc14, checked withscripts/appraise-layers.pyin that repository. All 19 quotes carrypcrDigestdc7051b2...83438, the composite of the reference's slot B values.Tests
test_a_reference_equal_to_a_separator_alone_is_not_measuredpins the reference's per-layer values, checks that vector 45's measurement is their composite, and that the layer-not-measured layers are exactly those whose reference value is the initial value or a separator alone (both TCGEV_SEPARATORdata values), with every other layer established and statusaffirming. Switched off by writing every layer of 45 as established in the generator, it fails and nothing else does. The vector count is 45. The set regenerates byte for byte; the full suite, ruff andtools/check_dashes.pypass.Text changes cannot be observed by a test beyond the vector: no validator decides routes, since the record carries no evidence.
Independent read
A fresh agent session given the repository and this diff, with no other context, reported: the composite sentence first allowed a composite-only reference to establish layers (fixed: a composite-only reference establishes none); the source of a reference was unbounded, so a verifier could take the observed value as its own reference (fixed: from a trusted source, not taken from the evidence); the precedence between
layer-not-measuredand rule 3 was unstated (fixed: rule 3 first); the CHANGELOG did not say what this does to the #477 BREAKING entry (fixed); the test checked one separator value only (fixed: both); the README list of sourced vectors (rewritten).Proposed and written by @revenue7-eng; sponsoring maintainer @imran-siddique.