github.com/cloudwan/edgelq-sdk@v1.15.4/iam/proto/v1alpha2/attestation_domain.proto (about) 1 syntax = "proto3"; 2 3 package ntt.iam.v1alpha2; 4 5 import "edgelq-sdk/iam/proto/v1alpha2/common.proto"; 6 import "google/api/resource.proto"; 7 import "goten-sdk/types/meta.proto"; 8 9 option go_package = "github.com/cloudwan/edgelq-sdk/iam/resources/v1alpha2/attestation_domain;attestation_domain"; 10 option java_multiple_files = true; 11 option java_outer_classname = "AttestationDomainProto"; 12 option java_package = "com.ntt.iam.pb.v1alpha2"; 13 14 // AttestationDomain represents attestation parameters for a heterogenous fleet 15 // of devices. 16 message AttestationDomain { 17 option (google.api.resource) = { 18 type : "iam.edgelq.com/AttestationDomain" 19 pattern : "projects/{project}/attestationDomains/{attestation_domain}" 20 }; 21 22 // Meta 23 goten.types.Meta metadata = 1; 24 25 // Name of AttestationDomain 26 // When creating a new instance, this field is optional and if not provided, 27 // it will be generated automatically. Last ID segment must conform to the 28 // following regex: [a-z][a-z0-9\-]{0,28}[a-z0-9] 29 string name = 2; 30 31 // Display name 32 string display_name = 3; 33 34 // If false (default), attestation verifier SHALL check CA certificate chain 35 // up to the TPM chip manufacturers CA (defined in manufacturer_ca_issuers). 36 // This step is necessary to prove that the attestation request comes from a 37 // genuine TPM device, and not a TPM emulator. 38 // 39 // If true, attestation verifier SHALL skip EKcert verification - 40 // !!INSECURE!! Without this check, any keys may come from a simulated TPM 41 // on the device. An attacker may therefore forge any key they want. 42 // Therefore, this option should only be changed for development purposes. 43 bool insecure_skip_manufacturer_ekcert_verification = 4; 44 45 // Attestees wanting to attest under this attestation domain SHALL fulfill 46 // requirements of at least one of attestation policies defined in this list. 47 // Policies are checked in the order they appear on this list. 48 repeated Policy policies = 5; 49 50 // Attestation policy may require atestees pubkey to be present on 51 // enrollment_list. 52 repeated EnrolledKey enrollment_list = 6; 53 54 // Policy defines a singular attestation policy, that should match a 55 // homogenous class of device (i.e. hardware and firmware configuration) in 56 // the fleet. 57 message Policy { 58 // List of acceptable manufacturer's root CAs certs (in PEM format). 59 // 60 // To obtain such a cert, run something like: 61 // `tpm2_getekcertificate -o cert.bin` 62 // `openssl x509 -inform der -in cert.bin -noout -text` 63 // Then manually download certificate specified in Authority Information 64 // Access (AIA). Repeat the above `openssl` command on the newly 65 // downloadedfile (change the value of `-in` argument). Continue this until 66 // you reach a certificate which does not have AIA. It's the root 67 // certificate. Convert it to PEM like so: `openssl x509 -inform der -in 68 // root.crt -out root.pem` Still, we need to encode newlines: `awk 'NF 69 // {sub(/\r/, ""); printf "%s\\n",$0;}' root.pem` Then paste the output 70 // here. 71 // 72 // Note: multiple PEM certificates may be included here by simple means of 73 // concatenation. 74 string manufacturer_root_ca_certs_pem = 1; 75 76 // If true, the attestee's pubkey SHALL be present on this 77 // AttestationDomain's enrollment list, otherwise fail the attestation. 78 bool require_enrollment = 2; 79 80 // If true, the verifier SHALL parse, replay and verify TPM event log 81 // provided by the atestee, otherwise fail the attestation. 82 // Note that requiring verification of event does not provide additional 83 // security. See 84 // https://github.com/google/go-attestation/blob/master/docs/event-log-disclosure.md#event-type-and-verification-footguns 85 bool verify_event_log = 3; 86 87 // List of expected PCR values. 88 // All PCRs on this list SHALL match exactly the PCRs provided by the 89 // atestee, otherwise the attestation SHALL be failed. The verifier SHALL 90 // perform sanity checks: PCR index/digest pairs are unique and the size of 91 // the list is sane (TODO). 92 // They can be read from TPM by running something like `tpm2_pcrread`. 93 repeated PCR expected_pcrs = 4; 94 } 95 96 // EnrolledKey defines an enrolled key. 97 message EnrolledKey { 98 // PEM encoded EK pubkey. 99 // It can be read from TPM by running something like `tpm2_createek -G rsa 100 // -u ek.pub -c key.ctx -f pem`. 101 string pubkey_pem = 1; 102 103 // User's comments for this entry 104 string comment = 2; 105 } 106 }