idnits 2.17.1 draft-birkholz-yang-basic-remote-attestation-01.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- ** There are 21 instances of too long lines in the document, the longest one being 67 characters in excess of 72. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year == Line 134 has weird spacing: '...ificate bin...' == Line 234 has weird spacing: '...-number uin...' -- The document date (October 24, 2018) is 2004 days in the past. Is this intentional? Checking references for intended status: Proposed Standard ---------------------------------------------------------------------------- (See RFCs 3967 and 4897 for information about using normative references to lower-maturity documents in RFCs) == Unused Reference: 'I-D.ietf-netconf-crypto-types' is defined on line 963, but no explicit reference was found in the text == Outdated reference: A later version (-01) exists of draft-birkholz-reference-ra-interaction-model-00 ** Downref: Normative reference to an Informational draft: draft-birkholz-reference-ra-interaction-model (ref. 'I-D.birkholz-reference-ra-interaction-model') == Outdated reference: A later version (-34) exists of draft-ietf-netconf-crypto-types-02 Summary: 2 errors (**), 0 flaws (~~), 6 warnings (==), 1 comment (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 TBD H. Birkholz 3 Internet-Draft Fraunhofer SIT 4 Intended status: Standards Track M. Eckel 5 Expires: April 27, 2019 Huawei 6 S. Bhandari 7 B. Sulzen 8 E. Voit 9 Cisco 10 G. Fedorkow 11 Juniper 12 October 24, 2018 14 YANG Module for Basic Challenge-Response-based Remote Attestation 15 Procedures 16 draft-birkholz-yang-basic-remote-attestation-01 18 Abstract 20 This document defines a YANG RPC and a minimal datastore tree 21 required to retrieve attestation evidence about integrity 22 measurements from a composite device with one or more roots of trust 23 for reporting. Complementary measurement logs are also provided by 24 the YANG RPC originating from one or more roots of trust of 25 measurement. The module defined requires a TPM 2.0 and corresponding 26 Trusted Software Stack included in the device components of the 27 composite device the YANG server is running on. 29 Status of This Memo 31 This Internet-Draft is submitted in full conformance with the 32 provisions of BCP 78 and BCP 79. 34 Internet-Drafts are working documents of the Internet Engineering 35 Task Force (IETF). Note that other groups may also distribute 36 working documents as Internet-Drafts. The list of current Internet- 37 Drafts is at https://datatracker.ietf.org/drafts/current/. 39 Internet-Drafts are draft documents valid for a maximum of six months 40 and may be updated, replaced, or obsoleted by other documents at any 41 time. It is inappropriate to use Internet-Drafts as reference 42 material or to cite them other than as "work in progress." 44 This Internet-Draft will expire on April 27, 2019. 46 Copyright Notice 48 Copyright (c) 2018 IETF Trust and the persons identified as the 49 document authors. All rights reserved. 51 This document is subject to BCP 78 and the IETF Trust's Legal 52 Provisions Relating to IETF Documents 53 (https://trustee.ietf.org/license-info) in effect on the date of 54 publication of this document. Please review these documents 55 carefully, as they describe your rights and restrictions with respect 56 to this document. Code Components extracted from this document must 57 include Simplified BSD License text as described in Section 4.e of 58 the Trust Legal Provisions and are provided without warranty as 59 described in the Simplified BSD License. 61 Table of Contents 63 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 64 1.1. Requirements notation . . . . . . . . . . . . . . . . . . 3 65 2. The YANG Module for Basic Remote Attestation Procedures . . . 3 66 2.1. Tree format . . . . . . . . . . . . . . . . . . . . . . . 3 67 2.2. Raw Format . . . . . . . . . . . . . . . . . . . . . . . 6 68 3. IANA considerations . . . . . . . . . . . . . . . . . . . . . 20 69 4. Security Considerations . . . . . . . . . . . . . . . . . . . 20 70 5. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 20 71 6. Change Log . . . . . . . . . . . . . . . . . . . . . . . . . 20 72 7. References . . . . . . . . . . . . . . . . . . . . . . . . . 20 73 7.1. Normative References . . . . . . . . . . . . . . . . . . 21 74 7.2. Informative References . . . . . . . . . . . . . . . . . 21 75 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 21 77 1. Introduction 79 This document is based on the terminology defined in the 80 [I-D.birkholz-attestation-terminology] and uses the interaction model 81 and information elements defined in the 82 [I-D.birkholz-reference-ra-interaction-model] document. The 83 currently supported hardware security module (HWM) - sometimes also 84 referred to as an embedded secure element(eSE) - is the Trusted 85 Platform Module (TPM) 2.0 specified by the Trusted Computing Group 86 (TCG). One ore more TPM 2.0 embedded in the components of a 87 composite device - sometimes also referred to as an aggregate device 88 - are required in order to use the YANG module defined in this 89 document. A TPM 2.0 is used as a root of trust for reporting (RTR) 90 in order to retrieve attestation evidence from a composite device. 91 Additionally, it is used as a root of trust for measurement (RTM) in 92 order to provide event logs - sometimes also referred to as 93 measurement logs. 95 1.1. Requirements notation 97 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 98 "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and 99 "OPTIONAL" in this document are to be interpreted as described in RFC 100 2119, BCP 14 [RFC2119]. 102 2. The YANG Module for Basic Remote Attestation Procedures 104 One or more TPM 2.0 MUST be embedded in the composite device that is 105 providing attestation evidence via the YANG module defined in this 106 document. The ietf-basic-remote-attestation YANG module enables a 107 composite device to take on the role of Claimant and Attester in 108 accordance with the Remote Attestation Procedures (RATS) architecture 109 [I-D.birkholz-attestation-terminology] and the corresponding 110 challenge-response interaction model defined in the 111 [I-D.birkholz-reference-ra-interaction-model] document. A fresh 112 nonce with an appropriate amount of entropy MUST be supplied by the 113 YANG client in order to enable a proof-of-freshness with respect to 114 the attestation evidence provided by the attester running the YANG 115 datastore. The functions of this YANG module are restricted to 0-1 116 TPM 2.0 per hardware component. 118 2.1. Tree format 120 121 module: ietf-basic-remote-attestation 122 +--ro rats-support-structures 123 +--ro supported-algos* uint16 124 +--ro tpms* [tpm_name] 125 | +--ro tpm_name string 126 | +--ro tpm-physical-index? int32 {ietfhw:entity-mib}? 127 +--ro compute-nodes* [node-name] 128 | +--ro node-name string 129 | +--ro node-physical-index? int32 {ietfhw:entity-mib}? 130 +--ro endorsement-certificates 131 +--ro certificate* [tpm_name] 132 +--ro tpm_name string 133 +--ro tpm-physical-index? int32 {ietfhw:entity-mib}? 134 +--ro endorsement-certificate binary 136 rpcs: 137 +---x tpm2-challenge-response-attestation 138 | +---w input 139 | | +---w tpm2-attestation-challenge 140 | | | +---w pcr-list* [] 141 | | | | +---w pcr 142 | | | | +---w pcr-indices* uint8 143 | | | | +---w (algo-registry-type) 144 | | | | +--:(tcg) 145 | | | | | +---w tcg-hash-algo-id? uint16 146 | | | | +--:(ietf) 147 | | | | +---w ietf-ni-hash-algo-id? uint8 148 | | | +---w nonce-value binary 149 | | | +---w (signature-identifier-type) 150 | | | | +--:(TPM_ALG_ID) 151 | | | | | +---w TPM_ALG_ID-value? uint16 152 | | | | +--:(COSE_Algorithm) 153 | | | | +---w COSE_Algorithm-value? int32 154 | | | +---w (key-identifier)? 155 | | | +--:(public-key) 156 | | | | +---w pub-key-id? binary 157 | | | +--:(uuid) 158 | | | +---w uuid-value? binary 159 | | +---w tpm_name? string 160 | | +---w tpm-physical-index? int32 {ietfhw:entity-mib}? 161 | +--ro output 162 | +--ro tpm2-attestation-response* [tpm_name] 163 | +--ro tpm_name string 164 | +--ro tpm-physical-index? int32 {ietfhw:entity-mib}? 165 | +--ro up-time? uint32 166 | +--ro node-name? string 167 | +--ro node-physical-index? int32 {ietfhw:entity-mib}? 168 | +--ro tpms-attest 169 | | +--ro pcrdigest? binary 170 | | +--ro tpms-attest-result? binary 171 | | +--ro tpms-attest-result-length? uint32 172 | +--ro tpmt-signature? binary 173 +---x basic-trust-establishment 174 | +---w input 175 | | +---w nonce-value binary 176 | | +---w (signature-identifier-type) 177 | | | +--:(TPM_ALG_ID) 178 | | | | +---w TPM_ALG_ID-value? uint16 179 | | | +--:(COSE_Algorithm) 180 | | | +---w COSE_Algorithm-value? int32 181 | | +---w tpm_name? string 182 | | +---w tpm-physical-index? int32 {ietfhw:entity-mib}? 183 | | +---w certificate-name? string 184 | +--ro output 185 | +--ro attestation-certificates* [tpm_name] 186 | +--ro tpm_name string 187 | +--ro tpm-physical-index? int32 {ietfhw:entity-mib}? 188 | +--ro up-time? uint32 189 | +--ro node-name? string 190 | +--ro node-physical-index? int32 {ietfhw:entity-mib}? 191 | +--ro certificate-name? string 192 | +--ro attestation-certificate? ietfct:end-entity-cert-cms 193 | +--ro (key-identifier)? 194 | +--:(public-key) 195 | | +--ro pub-key-id? binary 196 | +--:(uuid) 197 | +--ro uuid-value? binary 198 +---x log-retrieval 199 +---w input 200 | +---w log-selector* [node-name] 201 | | +---w node-name string 202 | | +---w node-physical-index? int32 {ietfhw:entity-mib}? 203 | | +---w (index-type)? 204 | | +--:(last-entry) 205 | | | +---w last-entry-value? binary 206 | | +--:(index) 207 | | | +---w index-number? uint64 208 | | +--:(timestamp) 209 | | +---w timestamp? yang:date-and-time 210 | +---w log-type identityref 211 | +---w pcr-list* [] 212 | | +---w pcr 213 | | +---w pcr-indices* uint8 214 | | +---w (algo-registry-type) 215 | | +--:(tcg) 216 | | | +---w tcg-hash-algo-id? uint16 217 | | +--:(ietf) 218 | | +---w ietf-ni-hash-algo-id? uint8 219 | +---w log-entry-quantity? uint16 220 +--ro output 221 +--ro system-event-logs 222 +--ro node-data* [node-name] 223 +--ro node-name string 224 +--ro node-physical-index? int32 {ietfhw:entity-mib}? 225 +--ro up-time? uint32 226 +--ro tpm-updated* [tpm_name] 227 | +--ro tpm_name string 228 | +--ro tpm-physical-index? int32 {ietfhw:entity-mib}? 229 +--ro log-result 230 +--ro (log-type) 231 +--:(bios) 232 | +--ro bios-event-logs 233 | +--ro bios-event-entry* [event-number] 234 | +--ro event-number uint32 235 | +--ro event-type? uint32 236 | +--ro pcr-index? uint16 237 | +--ro digest-list* [] 238 | | +--ro (algo-registry-type) 239 | | | +--:(tcg) 240 | | | | +--ro tcg-hash-algo-id? uint16 241 | | | +--:(ietf) 242 | | | +--ro ietf-ni-hash-algo-id? uint8 243 | | +--ro digest* binary 244 | +--ro event-size? uint32 245 | +--ro event-data* uint8 246 +--:(ima) 247 +--ro ima-event-logs 248 +--ro ima-event-entry* [event-number] 249 +--ro event-number uint64 250 +--ro ima-template? string 251 +--ro filename-hint? string 252 +--ro filedata-hash? binary 253 +--ro template-hash-algorithm? string 254 +--ro template-hash? binary 255 +--ro pcr-index? uint16 256 +--ro signature? binary 257 259 2.2. Raw Format 261 262 module ietf-basic-remote-attestation { 263 namespace "urn:ietf:params:xml:ns:yang:ietf-basic-remote-attestation"; 264 prefix "yang-brat"; 266 import ietf-yang-types { 267 prefix yang; 268 } 269 import ietf-hardware { 270 prefix ietfhw; 271 } 272 import ietf-crypto-types { 273 prefix ietfct; 274 } 276 organization 277 "Fraunhofer SIT"; 278 contact 279 "Henk Birkholz 280 Fraunhofer Institute for Secure Information Technology 281 Email: henk.birkholz@sit.fraunhofer.de"; 282 description 283 "A YANG module to enable a TPM 2.0 based remote attestation 284 procedure. 285 Copyright (C) Fraunhofer SIT (2018)."; 286 revision "2018-06-15" { 287 description 288 "Initial version"; 289 reference 290 "draft-birkholz-yang-basic-remote-attestation"; 291 } 293 grouping hash-algo { 294 description 295 "A selector for the hashing algorithm"; 296 choice algo-registry-type { 297 mandatory true; 298 description 299 "Unfortunately, both IETF and TCG have registries here. 300 Choose your weapon wisely."; 301 case tcg { 302 description 303 "you chose the east door, the tcg space opens up to 304 you."; 305 leaf tcg-hash-algo-id { 306 type uint16; 307 description 308 "This is an index referencing the TCG Algorithm 309 Registry based on TPM_ALG_ID."; 310 } 311 } 312 case ietf { 313 description 314 "you chose the west door, the ietf space opens up to 315 you."; 316 leaf ietf-ni-hash-algo-id { 317 type uint8; 318 description 319 "This is an index referencing the Named Information 320 Hash Algorithm Registry."; 321 } 322 } 323 } 324 } 326 grouping hash { 327 description 328 "The hash value including hash-algo identifer"; 329 list hash-digests { 330 description 331 "The list of hashes."; 332 container hash-digest { 333 description 334 "A hash value based on a hash algorithm registered by an 335 SDO."; 336 uses hash-algo; 337 leaf hash-value { 338 type binary; 339 description 340 "The binary representaion of the hash value."; 341 } 342 } 343 } 344 } 346 grouping nonce { 347 description 348 "A nonce to show freshness and counter replays."; 349 leaf nonce-value { 350 type binary; 351 mandatory true; 352 description 353 "This nonce SHOULD be generated via a registered 354 cryptographic-strength algorithm. In consequence, the length 355 of the nonce depends on the hash algorithm used. The algorithm 356 used in this case is independent from the hash algorithm used to 357 create the hash-value in the response of the attestor."; 358 } 359 } 361 grouping pcr-selection { 362 description 363 "A Verifier can request one or more PCR values uses its 364 individually created AC. The corresponding selection filter is 365 represented in this grouping. Requesting a PCR value that is not in 366 scope of the AC used, detailed exposure via error msg should be 367 avoided."; 368 list pcr-list { 369 description 370 "For each PCR in this list an individual list of banks (hash-algo) 371 can be requested. It depends on the datastore, if every bank in 372 this grouping is included per PCR (crude), or if each requested 373 bank set is returned for each PCR individually (elegant)."; 374 container pcr { 375 description 376 "The composite of a PCR number and corresponding bank numbers."; 377 leaf-list pcr-indices { 378 type uint8; 379 description 380 "The number of the PCR. At the moment this is limited 381 32"; 382 } 383 uses hash-algo; 384 } 385 } 386 } 388 grouping pcr-selector { 389 description 390 "A Verifier can request the generation of an attestation 391 certificate (a signed public attestation key 392 (non-migratable, tpm-resident) wrt one or more PCR values. 393 The corresponding creation input is represented in this grouping. 394 Requesting a PCR value that is not supported results in an error, 395 detailed exposure via error msg should be avoided."; 396 list pcr-list { 397 description 398 "For each PCR in this list an individual hash-algo can be 399 requested."; 400 container pcr { 401 description 402 "The composite of a PCR number and corresponding bank numbers."; 403 leaf-list pcr-index { 404 type uint8; 405 description 406 "The numbers of the PCRs that are associated with 407 the created key. At the moment the highest number is 32"; 408 } 409 uses hash-algo; 410 } 411 } 412 } 414 grouping signature-scheme { 415 description 416 "The signature scheme used to sign the evidence."; 417 choice signature-identifier-type { 418 mandatory true; 419 description 420 "There are multiple ways to reference a signature type. 421 This used to select the signature algo to sign the quote 422 information response."; 423 case TPM_ALG_ID { 424 description 425 "This references the indices of table 9 in the TPM 2.0 structure specification."; 426 leaf TPM_ALG_ID-value { 427 type uint16; 428 description 429 "The TPM Algo ID."; 430 } 432 } 433 case COSE_Algorithm { 434 description 435 "This references the IANA COSE Algorithms Registry indices. Every index of this 436 registry to be used must be mapable to a TPM_ALG_ID value."; 437 leaf COSE_Algorithm-value { 438 type int32; 439 description 440 "The TPM Algo ID."; 441 } 442 } 443 } 444 } 446 grouping attestation-key-identifier { 447 description 448 "A selector for a suitable key identifier."; 449 choice key-identifier { 450 description 451 "Identifier for the attestation key to use for signing 452 attestation evidence."; 453 case public-key { 454 leaf pub-key-id { 455 type binary; 456 description 457 "The value of the identifier for the public key."; 458 } 459 } 460 case uuid { 461 description 462 "Use a YANG agent generated (and maintained) attestation 463 key UUID."; 464 leaf uuid-value { 465 type binary; 466 description 467 "The UUID identifying the corresponding public key."; 468 } 469 } 470 } 471 } 473 grouping tpm-name { 474 description 475 "In a system with multiple-TPMs get the data from a specific TPM 476 identified by the name and physical-index."; 477 leaf tpm_name { 478 type string; 479 description 480 "Name of the TPM or All"; 481 } 482 leaf tpm-physical-index { 483 if-feature ietfhw:entity-mib; 484 type int32 { 485 range "1..2147483647"; 486 } 487 config false; 488 description 489 "The entPhysicalIndex for the TPM."; 490 reference 491 "RFC 6933: Entity MIB (Version 4) - entPhysicalIndex"; 492 } 493 } 494 grouping compute-node { 495 description 496 "In a distributed system with multiple compute nodes 497 this is the node identified by name and physical-index."; 498 leaf node-name { 499 type string; 500 description 501 "Name of the compute node or All"; 502 } 503 leaf node-physical-index { 504 if-feature ietfhw:entity-mib; 505 type int32 { 506 range "1..2147483647"; 507 } 508 config false; 509 description 510 "The entPhysicalIndex for the compute node."; 511 reference 512 "RFC 6933: Entity MIB (Version 4) - entPhysicalIndex"; 513 } 514 } 515 grouping node-uptime { 516 description 517 "Uptime in seconds of the node."; 518 leaf up-time { 519 type uint32; 520 description 521 "Uptime in seconds of this node reporting its data"; 522 } 523 } 524 identity log-type { 525 description 526 "The type of logs available."; 527 } 528 identity bios { 529 base log-type; 530 description 531 "Measurement log created by the BIOS/UEFI."; 532 } 534 identity ima { 535 base log-type; 536 description 537 "Measurement log created by IMA."; 538 } 540 grouping log-identifier { 541 description 542 "Identifier for type of log to be retrieved."; 543 leaf log-type { 544 type identityref { 545 base log-type; 546 } 547 mandatory true; 548 description 549 "The corresponding measurement log type identity."; 550 } 551 } 553 grouping boot-event-log { 554 description 555 "Defines an event log corresponding to the event that extended the PCR"; 556 leaf event-number { 557 type uint32; 558 description 559 "Unique event number of this event"; 560 } 561 leaf event-type { 562 type uint32; 563 description 564 "log event type"; 565 } 566 leaf pcr-index { 567 type uint16; 568 description 569 "Defines the PCR index that this event extended"; 570 } 571 list digest-list { 572 description "Hash of event data"; 573 uses hash-algo; 574 leaf-list digest { 575 type binary; 576 description 577 "The hash of the event data"; 578 } 579 } 580 leaf event-size { 581 type uint32; 582 description 583 "Size of the event data"; 584 } 585 leaf-list event-data { 586 type uint8; 587 description 588 "the event data size determined by event-size"; 589 } 590 } 592 grouping ima-event { 593 description 594 "Defines an hash log extend event for IMA measurements"; 595 leaf event-number { 596 type uint64; 597 description 598 "Unique number for this event for sequencing"; 599 } 600 leaf ima-template { 601 type string; 602 description 603 "Name of the template used for event logs 604 for e.g. ima, ima-ng"; 605 } 606 leaf filename-hint { 607 type string; 608 description 609 "File that was measured"; 610 } 611 leaf filedata-hash { 612 type binary; 613 description 614 "Hash of filedata"; 615 } 616 leaf template-hash-algorithm { 617 type string; 618 description 619 "Algorithm used for template-hash"; 620 } 621 leaf template-hash { 622 type binary; 623 description 624 " hash(filedata-hash, filename-hint)"; 625 } 626 leaf pcr-index { 627 type uint16; 628 description 629 "Defines the PCR index that this event extended"; 630 } 631 leaf signature { 632 type binary; 633 description 634 "The file signature"; 635 } 636 } 638 grouping bios-event-log { 639 description 640 "Measurement log created by the BIOS/UEFI."; 641 list bios-event-entry { 642 key event-number; 643 description 644 "Ordered list of TCG described event log 645 that extended the PCRs in the order they 646 were logged"; 647 uses boot-event-log; 648 } 649 } 651 grouping ima-event-log { 652 list ima-event-entry { 653 key event-number; 654 description 655 "Ordered list of ima event logs by event-number"; 656 uses ima-event; 657 } 658 description 659 "Measurement log created by IMA."; 660 } 662 grouping event-logs { 663 description 664 "A selector for the log and its type."; 665 choice log-type { 666 mandatory true; 667 description 668 "Event log type determines the event logs content."; 670 case bios { 671 description 672 "BIOS/UEFI event logs"; 673 container bios-event-logs { 674 description 675 "This is an index referencing the TCG Algorithm 676 Registry based on TPM_ALG_ID."; 677 uses bios-event-log; 678 } 679 } 680 case ima { 681 description 682 "IMA event logs"; 683 container ima-event-logs { 684 description 685 "This is an index referencing the TCG Algorithm 686 Registry based on TPM_ALG_ID."; 687 uses ima-event-log; 688 } 689 } 690 } 691 } 693 rpc tpm2-challenge-response-attestation { 694 description 695 "This RPC accepts the input for TSS commands of the managed device. 696 ComponentIndex from the hardware manager YANG module to refer to 697 dedicated TPM in composite devices, e.g. smart NICs, is still a 698 TODO."; 699 input { 700 container tpm2-attestation-challenge { 701 description 702 "This container includes every information element defined 703 in the reference challenge-response interaction model for 704 remote attestation. Corresponding values are based on 705 TPM 2.0 structure definitions"; 706 uses pcr-selection; 707 uses nonce; 708 uses signature-scheme; 709 uses attestation-key-identifier; 710 } 711 uses tpm-name; 712 } 713 output { 714 list tpm2-attestation-response { 715 key tpm_name; 716 description 717 "The binary output of TPM2b_Quote. An TPMS_ATTEST structure 718 including a length, encapsulated in a signature"; 719 uses tpm-name; 720 uses node-uptime; 721 uses compute-node; 722 container tpms-attest { 723 leaf pcrdigest { 724 type binary; 725 description 726 "split out value of TPMS_QUOTE_INFO for convenience"; 727 } 728 leaf tpms-attest-result { 729 type binary; 730 description 731 "The complete TPM generate structure including signature."; 732 } 733 leaf tpms-attest-result-length { 734 type uint32; 735 description 736 "Length of attest result provided by the TPM structure."; 737 } 738 description 739 "A composite of value and length and list of selected 740 pcrs (original name: [type]attested)"; 741 } 742 leaf tpmt-signature { 743 type binary; 744 description 745 "Split out value of the signature for convenience. TODO: check for length values that complent binary value data node leafs."; 746 } 747 } 748 } 749 } 751 rpc basic-trust-establishment { 752 description 753 "This RPC creates a tpm-resident, non-migratable key to be used 754 in TPM_Quote commands, an attestation certificate."; 755 input { 756 uses nonce; 757 uses signature-scheme; 758 uses tpm-name; 759 leaf certificate-name { 760 type string; 761 description 762 "An arbitrary name for the identity certificate chain requested."; 763 } 764 } 765 output { 766 list attestation-certificates { 767 key tpm_name; 768 description 769 "Attestation Certificate data from a TPM identified by the TPM name"; 770 uses tpm-name; 771 uses node-uptime; 772 uses compute-node; 773 leaf certificate-name { 774 type string; 775 description 776 "An arbitrary name for this identity certificate or certificate chain."; 777 } 778 leaf attestation-certificate { 779 description 780 "The binary signed certificate chain data for this identity certificate."; 781 type ietfct:end-entity-cert-cms; 782 } 783 uses attestation-key-identifier; 784 } 785 } 786 } 788 rpc log-retrieval { 789 description 790 "Logs Entries are either identified via indices or via providing 791 the last line received. The number of lines returned can be limited. 792 The type of log is a choice that can be 793 augmented."; 794 input { 795 list log-selector { 796 key node-name; 797 description 798 "Selection of log entries to be reported."; 799 uses compute-node; 800 choice index-type { 801 description 802 "Last log entry received, log index number, or timestamp."; 804 case last-entry { 805 description 806 "The last entry of the log already retrieved."; 807 leaf last-entry-value { 808 description 809 "Content of an log event which matches 1:1 with a 810 unique event record contained within the log. Log 811 entries subsequent to this will be passed to the 812 requestor. Note: if log entry values are not unique, 813 this MUST return an error."; 814 type binary; 815 } 816 } 817 case index { 818 description 819 "Numeric index of the last log entry retrieved, or zero."; 820 leaf index-number { 821 description 822 "The numeric index number of a log entry. Zero means 823 to start at the beginning of the log. Entries 824 subsequent to this will be passed to the 825 requestor."; 826 type uint64; 827 } 828 } 829 case timestamp { 830 leaf timestamp { 831 type yang:date-and-time; 832 description 833 "Timestamp from which to start the extraction. The next 834 log entry subsequent to this timestamp is to be sent."; 835 } 836 description 837 "Timestamp from which to start the extraction."; 838 } 839 } 840 } 841 uses log-identifier; 842 uses pcr-selection; 843 leaf log-entry-quantity { 844 type uint16; 845 description 846 "The number of log entries to be returned. If omitted, it 847 means all of them."; 848 } 849 } 850 output { 851 container system-event-logs { 852 description 853 "The requested data of the measurement event logs"; 854 list node-data { 855 key node-name; 856 description 857 "Event logs of a node in a distributed system 858 identified by the node name"; 859 uses compute-node; 860 uses node-uptime; 861 list tpm-updated { 862 key tpm_name; 863 description 864 "TPM these events may have recorded data in"; 865 uses tpm-name; 866 } 867 container log-result { 868 description 869 "The requested entries of the corresponding log."; 870 uses event-logs; 871 } 872 } 873 } 874 } 875 } 876 container rats-support-structures { 877 leaf-list supported-algos { 878 type uint16; 879 description 880 "Supported TPM_ALG_ID values for the TPM in question. 881 Will include ComponentIndex soon."; 882 } 883 list tpms { 884 key tpm_name; 885 uses tpm-name; 886 description 887 "A list of TPMs in this composite 888 device that rats can be conducted with."; 889 } 890 list compute-nodes { 891 key node-name; 892 uses compute-node; 893 description 894 "A list names of hardware components in this composite 895 device that rats can be conducted with."; 896 } 897 container endorsement-certificates { 898 list certificate { 899 key tpm_name; 900 uses tpm-name; 901 description 902 "The TPM's endorsement-certificate."; 903 leaf endorsement-certificate { 904 type binary; 905 mandatory true; 906 description 907 "The signed pulic endorsement key (EK) and corresponding claims 908 (EK Certificate). In a TPM 2.0 the EK Certificate resides in a 909 well-defined NVRAM location by the TPM vednor."; 911 } 912 } 913 description 914 "Basic information elements to enable RATS."; 915 } 916 config false; 917 } 918 } 919 921 3. IANA considerations 923 This document will include requests to IANA: 925 To be defined yet. 927 4. Security Considerations 929 There are always some. 931 5. Acknowledgements 933 Not yet. 935 6. Change Log 937 Changes from version 00 to version 01: 939 o Addressed author's comments 941 o Extended complementary details about attestation-certificates 943 o Relabeled chunk-size to log-entry-quantity 945 o Relabeled location with compute-node or tpm-name where appropriate 947 o Added a valid entity-mib physical-index to compute-node and tpm- 948 name to map it back to hardware inventory 950 o Relabeled name to tpm_name 952 o Removed event-string in last-entry 954 7. References 955 7.1. Normative References 957 [I-D.birkholz-reference-ra-interaction-model] 958 Birkholz, H. and M. Eckel, "Reference Interaction Model 959 for Challenge-Response-based Remote Attestation", draft- 960 birkholz-reference-ra-interaction-model-00 (work in 961 progress), July 2018. 963 [I-D.ietf-netconf-crypto-types] 964 Watsen, K. and W. HAIGUANG, "Common YANG Data Types for 965 Cryptography", draft-ietf-netconf-crypto-types-02 (work in 966 progress), October 2018. 968 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 969 Requirement Levels", BCP 14, RFC 2119, 970 DOI 10.17487/RFC2119, March 1997, 971 . 973 7.2. Informative References 975 [I-D.birkholz-attestation-terminology] 976 Birkholz, H., Wiseman, M., and H. Tschofenig, "Reference 977 Terminology for Remote Attestation Procedures", draft- 978 birkholz-attestation-terminology-02 (work in progress), 979 July 2018. 981 Authors' Addresses 983 Henk Birkholz 984 Fraunhofer SIT 985 Rheinstrasse 75 986 Darmstadt 64295 987 Germany 989 Email: henk.birkholz@sit.fraunhofer.de 991 Michael Eckel 992 Huawei Technologies 993 Feldbergstrasse 78 994 Darmstadt 64293 995 Germany 997 Email: michael.eckel@huawei.com 998 Shwetha Bhandari 999 Cisco Systems 1001 Email: shwethab@cisco.com 1003 Bill Sulzen 1004 Cisco Systems 1006 Email: bsulzen@cisco.com 1008 Eric Voit 1009 Cisco Systems 1011 Email: evoit@cisco.com 1013 Guy C. Fedorkow 1014 Juniper Networks 1015 10 Technology Park Drive 1016 Westford, Massachusetts 01886 1018 Email: gfedorkow@juniper.de