Skip to content

Conversation

@mihirpitale-googler
Copy link
Member

@mihirpitale-googler mihirpitale-googler commented Jan 26, 2026

Description

The current lack of a unified standard for vendors to provide Platform Configuration Register (PCR) values—characterized by less secure delivery methods like Excel or JSON and disparate data formats—severely hampers the scalability and reliability of Google’s Attestation service for network infrastructure.

This fragmentation necessitates manual data entry and creates significant operational toil, ultimately slowing down the integrity verification process for network devices. To resolve this, we propose a standardized OpenConfig schema and protobuf-based framework that mandates vendors to deliver PCR values in a consistent, hex-standardized format via secure endpoints with every software release. By automating the ingestion of these measurements, the solution ensures a more reliable and efficient way to verify device trustworthiness across the network.

@mihirpitale-googler mihirpitale-googler requested a review from a team as a code owner January 26, 2026 19:59
proto/pcr.proto Outdated
message GetResponse {
string image_version = 1; // Refers to the the version of the software/firmware
string hardware_model = 2; // Refers to hardware model for the collected PCR
string HashAlgo hash_algorithm = 4; // Hash algorithm of the selected PCR bank.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should be just HashAlgo. Please remove the leftover "string"

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

proto/pcr.proto Outdated
string image_version = 1; // Refers to the the version of the software/firmware
string hardware_model = 2; // Refers to hardware model for the collected PCR
string HashAlgo hash_algorithm = 4; // Hash algorithm of the selected PCR bank.
RootOfTrustMeasurement measurement = 1; // Refers to the TPM (Trusted Platform Module) version supported by each Control Card
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: I think root_of_trust would better fit instead of measurement

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

proto/pcr.proto Outdated
HASH_ALGO_SHA512 = 4;
}

enum RootOfTrustMeasurement {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

RootOfTrustForMeasurement would be better I think. WDYT?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

@mihirpitale-googler mihirpitale-googler self-assigned this Jan 26, 2026
}
message PcrValues {
int32 pcr_index = 1; // Refers to the PCR index value
repeated BootStage boot_stage = 2; // Refers to a quick reference name to define PCR measurement content associated with the pcr index. eg - UEFI Boot Manager Code=pcr_4
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i am not clear how this is meant to be used?

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is only for informational purpose.

message GetRequest {
string image_version = 1; // Refers to the the version of the software/firmware
string hardware_model = 2; // Refers to hardware model for the collected PCR
string HashAlgo hash_algorithm = 4; // Hash algorithm of the selected PCR bank.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

that is invalid syntax remove string

}

message GetResponse {
string image_version = 1; // Refers to the the version of the software/firmware
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

since these comments are long move them to above the attributes

string image_version = 1; // Refers to the the version of the software/firmware
string hardware_model = 2; // Refers to hardware model for the collected PCR
HashAlgo hash_algorithm = 4; // Hash algorithm of the selected PCR bank.
RootOfTrustMeasurement root_of_trust = 1; // Refers to the TPM (Trusted Platform Module) version supported by each Control Card
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i think one of these is more accurate here?

RootOfTrustType or RootOfTrustVersion


// Get RPC Messages
message GetRequest {
string image_version = 1; // Refers to the the version of the software/firmware

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is image_version referring to a software_version retrieved from FetchSoftwareVersions? Should there be another string field under GetRequest to refer to a bootloader_version?

CONTAINER_IMAGES = 19;
OTHER = 20;
}
message PcrValues {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

minor nitpick but since this message type only stores a single pcr_index should it actually be message PcrValue? Correspondingly, the pcr_values field in line 67 should be the singular pcr_value?

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

slight update here: I found out that in some limited cases it actually may be possible for there to be 2 different valid PCR values for the same index. To handle this it would make sense to update the pcr_values field here to be a list: repeated bytes pcr_values

In that case, you could disregard my comment about the pluralization of the message/field names.

string hardware_model = 2; // Refers to hardware model for the collected PCR
HashAlgo hash_algorithm = 4; // Hash algorithm of the selected PCR bank.
RootOfTrustMeasurement root_of_trust = 1; // Refers to the TPM (Trusted Platform Module) version supported by each Control Card
google.protobuf.Timestamp timestamp = 2; // Time of PCR Artifact Collection

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this just a timestamp of when the server forms and sends a GetResponse? I would be curious how the client uses this.

Comment on lines +78 to +80
string image_version = 1; // Refers to the the version of the software/firmware
string hardware_model = 2; // Refers to hardware model for the collected PCR
HashAlgo hash_algorithm = 4; // Hash algorithm of the selected PCR bank.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is it intentional for the GetResponse to repeat these exact same fields that the GetRequest has (image_version, hardware_model, hash_algorithm)?

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The response field will also be used to deliver PCRs with the image binary.
Mihir, can you create a structure for these three and use the structure here instead?
i.e.
message MeasurementIdentitifer {
string image_version = 1; // Refers to the the version of the software/firmware
string hardware_model = 2; // Refers to hardware model for the collected PCR
HashAlgo hash_algorithm = 4; // Hash algorithm of the selected PCR bank.
}

....

message GetResponse {

MeasurementIdentitifer identifier = 1;
RootOfTrustMeasurement root_of_trust = 2;
...

}

message GetRequest {
MeasurementIdentitifer identifier = 1;
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants