| Internet-Draft | Energy Attestation Tokens | July 2026 |
| Chursin | Expires 28 January 2027 | [Page] |
This document specifies an attestation token format and verification protocol for hardware-rooted measurements of electricity generation. The protocol enables a tamper-evident chain of custody from the secure element at a metering device to a publicly verifiable settlement layer, using ECDSA P-256 signatures generated inside a certified secure element and carried in a COSE_Sign1 structure. It defines: (a) the CBOR-encoded attestation token, aligned with the Entity Attestation Token format of RFC 9711 and the Remote ATtestation procedureS (RATS) architecture of RFC 9334; (b) a Merkle-aggregation and on-chain commitment scheme for scalable verification; and (c) a registry mechanism for endorsing device public keys. The token is intended for use by relying parties, such as energy producers, consumers, regulators, and standards bodies, that require cryptographic provenance for clean-energy claims.¶
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.¶
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.¶
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."¶
This Internet-Draft will expire on 28 January 2027.¶
Copyright (c) 2026 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License.¶
Clean-energy claims today rest on accounting infrastructure: Renewable Energy Certificates (RECs) in the United States, Guarantees of Origin (GoOs) in the European Union, and International RECs (I-RECs) elsewhere. These instruments are issued annually, traded through brokered email confirmations, and reconciled against grid-level dispatch records that the issuance system does not cryptographically verify. Published analyses of certificate markets have reported material discrepancies between dispatched generation and registered certificate issuance.¶
Two regulatory and industrial trends, both effective in 2026, make this verification gap acute:¶
This document specifies an open standard intended to close that gap. The protocol places a hardware secure element adjacent to a kilowatt-hour meter; the secure element signs the tuple (energy delta, timestamp, device identifier) with a private key that is generated on-chip and cannot be extracted; the resulting attestation tokens are aggregated into Merkle trees and committed to a public settlement layer; any relying party holding the device's endorsed public key can independently verify any single attestation.¶
The protocol is deliberately narrow in scope. It defines verification, not trading. It does not specify payment rails, market-clearing mechanisms, or currency-like token economics. The unit of accounting in the protocol (NOET) represents one verified kilowatt-hour and is a verifiable attestation unit used internally by the protocol. It is not a payment instrument, a currency, or a store-of-value asset, and this document specifies no transfer, pricing, or settlement-of-value semantics for it.¶
This document is intended for review by the Remote ATtestation procedureS (RATS) Working Group and other interested IETF participants. Comments are welcome at the address given in the Authors' Addresses section.¶
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.¶
This document follows the role decomposition of the RATS architecture [RFC9334]. Each role has a specific scope of responsibility and security boundary.¶
The Attester is composed of two physical components: a kilowatt-hour meter (the measurer) and a secure element (the signer). The Attester:¶
The Verifier is software, executed by any interested party, that:¶
The Relying Party consumes attestations and acts on them. A Relying Party:¶
An Endorser issues an endorsement binding a device public key to identity metadata such as manufacturer, model, and certification batch. Endorsers:¶
This document does not mandate a single Endorser hierarchy. A federation of Endorsers is expected to emerge in practice; relying parties choose which Endorsers to trust.¶
The Validator is an on-chain role responsible for confirming Merkle root submissions before they are finalized for claim. Validators extend the RATS architecture; they exist because the on-chain commitment layer requires a defined set of accountable parties whose signed actions are the basis of finalization. A Validator:¶
Validator accountability is enforced through two mechanisms whose details appear in Section 8.4:¶
The Validator role is distinct from the Attester (the on-device measurer and signer) and from the Verifier (the relying-party-side software). The Attester proves a measurement was taken on certified hardware; the Validator proves a quorum of independent parties agree the measurement appeared in a legitimate batch; the Verifier checks both layers when consuming an attestation.¶
An attestation token is a CBOR [RFC8949] object consisting of a claims map (the evidence payload, Section 4.1) enveloped in a COSE_Sign1 structure [RFC9052] (Section 5.1). Both the claims map and the COSE_Sign1 structure MUST be serialized using the deterministic encoding requirements of [RFC8949], Section 4.2.1, so that signature inputs and leaf hashes are unambiguous.¶
Throughout this document, "attestation token" refers to the complete tagged COSE_Sign1 structure, and "evidence payload" refers to the claims map that it carries.¶
The evidence payload is a CBOR map using the integer labels listed in Table 1. These labels are local to this profile and are scoped to the payload map only; they are independent of the COSE header labels used in the enveloping structure (Section 4.2).¶
| Label | Claim | Type | Required | Description |
|---|---|---|---|---|
| 1 | iss | bstr | MUST | Device identifier: the 9-byte serial number of the secure element. |
| 2 | iat | uint | MUST | Issued-at timestamp, in seconds since the UNIX epoch, UTC. |
| 3 | wh | uint | MUST | Energy delta in watt-hours since the previous attestation from the same device. |
| 4 | seq | uint | MUST | Per-device monotonic sequence number, starting at 1 and incremented for each emitted attestation. |
| 5 | prev | bstr / null | MUST | Hash of the previous attestation token from the same device. It is CBOR null for the first attestation, that is when seq equals 1. |
| 6 | fwv | tstr | SHOULD | Firmware version string. |
| 7 | mdl | tstr | SHOULD | Device model identifier. |
| 8 | cfg | bstr | MAY | Hash of the device configuration relevant to measurement integrity. |
The evidence payload carries no signature claim and no algorithm claim. The signature, the signature algorithm, and the key identifier are carried by the enveloping COSE_Sign1 structure as described in Section 4.2 and Section 5.1.¶
Algorithm agility in this protocol is provided exclusively by the COSE protected header of the enveloping COSE_Sign1 structure. Specifically:¶
An implementation MUST NOT convey the signature algorithm as a claim inside the evidence payload. A Verifier that encounters an algorithm indication inside the evidence payload MUST reject the token, because such an indication would create a second and possibly disagreeing source of truth for algorithm selection.¶
The following CDDL [RFC8610] defines the attestation token. It is normative for the structures it covers.¶
; A Noethrion attestation token is a tagged COSE_Sign1 structure.
Noethrion-Attestation = #6.18(Noethrion-Sign1)
Noethrion-Sign1 = [
protected : bstr .cbor Noethrion-Protected-Header,
unprotected : Noethrion-Unprotected-Header,
payload : bstr .cbor Noethrion-Claims,
signature : bstr
]
Noethrion-Protected-Header = {
1 => int, ; alg; MUST be -7 (ES256) in this version
? 4 => bstr, ; kid; endorsed device key identifier
* cose-label => any
}
Noethrion-Unprotected-Header = {
* cose-label => any
}
Noethrion-Claims = {
1 => bstr, ; iss: secure element serial number
2 => uint, ; iat: issued-at, UTC seconds
3 => uint, ; wh: energy delta, watt-hours
4 => uint, ; seq: per-device monotonic counter, >= 1
5 => bstr / null, ; prev: hash of previous token;
; null if and only if seq == 1
? 6 => tstr, ; fwv: firmware version
? 7 => tstr, ; mdl: device model identifier
? 8 => bstr, ; cfg: device configuration hash
}
cose-label = int / tstr
¶
The Merkle aggregation layer of Section 6 and the claim-record encoding of Section 6.3.1 are not yet expressed in CDDL. [TBD: full CDDL covering the batch, inclusion-proof, and claim-record structures in -01]¶
The claim set above is intentionally compatible with the Entity Attestation Token (EAT) format defined in [RFC9711]. EAT is itself carried in COSE, so the envelope chosen in Section 5.1 is the same one an EAT profile would use. Implementations MAY choose to additionally emit a fully EAT-conformant variant by mapping "iss", "iat", and "seq" to their CWT-registered claim numbers. A formal EAT profile for energy attestation will be specified in a follow-up document. [TBD: EAT profile claim mapping table in -01]¶
This document specifies a single signature algorithm for this version of the protocol: ECDSA over the NIST P-256 curve (secp256r1) with SHA-256, denoted ES256 and assigned COSE algorithm value -7 in [RFC9053].¶
Attestation tokens MUST be signed as a COSE_Sign1 structure as defined in [RFC9052], Section 4.2, tagged with CBOR tag 18. COSE_Sign1 is chosen over a bare signature field for three reasons:¶
The signature is computed over the Sig_structure defined in [RFC9052], Section 4.4, with:¶
Implementations MUST NOT emit an attestation token as a bare claims map with an adjacent signature field. Pre-standard implementations of this protocol, including the genesis deployment of the reference implementation, used such a bare encoding. That encoding is historical, is not conformant with this document, and MUST NOT be used for new deployments. Verifiers MAY retain support for it solely in order to re-verify pre-standard historical records.¶
P-256 is selected because:¶
It is acknowledged that P-256 is not post-quantum secure. A migration path to a post-quantum signature scheme, anticipated to be ML-DSA as standardized in [FIPS204], is part of the protocol's long-term plan. No new format machinery is required for that migration: the "alg" and "kid" parameters of the COSE protected header (Section 4.2) are the algorithm and key rotation mechanism, and a future revision need only permit an additional "alg" value and specify the transition policy. Historical attestations remain verifiable because each token names, under integrity protection, the algorithm with which it was signed.¶
A future revision of this document SHALL specify the migration procedure, including dual-signing transitions and the policy under which historical P-256 attestations remain verifiable.¶
Attestation tokens are aggregated off-chain into Merkle trees. Each tree contains up to 2^16 (65,536) leaves, where each leaf is the SHA-256 hash of the complete deterministically encoded, tagged COSE_Sign1 attestation token of Section 4.¶
Interior nodes are computed with a commutative sorted-pair construction:¶
parent = keccak256(min(a, b) || max(a, b))¶
where a and b are the two 32-byte child hashes and min and max denote lexicographic byte-wise ordering. Sorting each pair before hashing makes the construction order-independent: an inclusion proof carries only the sibling hashes, with no left/right position flags. This is the construction implemented by the widely used Merkle proof library employed by the on-chain reference contract and by the reference off-chain Verifier tooling. Off-chain builders MUST use this pair hash for any tree whose root is committed on-chain.¶
Note on leaf domain separation: this construction deliberately omits the per-level domain-separation prefixes (0x00 for leaves, 0x01 for interior nodes) defined by [RFC9162]. The second-preimage class those prefixes guard against, namely reinterpreting an interior node as a leaf or vice versa, is structurally closed here by preimage length: an interior-node preimage is exactly 64 bytes (two concatenated 32-byte hashes), whereas leaf preimages are never 64 bytes. The on-chain claim-record leaf (Section 6.3.1) hashes a 160-byte encoded payload, and the attestation-evidence leaf hashes a tagged COSE_Sign1 token, which is substantially longer than 64 bytes for any token carrying the required claims of Section 4.1 together with a 64-byte ECDSA P-256 signature. The attestation-evidence leaf additionally uses a different hash function, SHA-256, from the keccak256 node hash. [RFC9162] informed the design of this layer and is listed as an informative reference.¶
A batch is identified by a monotonically increasing epoch number. The aggregator MAY be operated by the device owner, by a service provider, or by the reference implementation; the choice does not affect verifiability.¶
For each batch, the Merkle root is committed to a public EVM-compatible Layer 2 settlement network through a reference smart contract. Note that the reference contract is named "Attester" for historical reasons unrelated to the RATS Attester role of Section 3.1; the two are distinct. The on-chain commitment record SHALL include, at minimum:¶
The two snapshot fields close the symmetric retroactive-shift class of administrative abuses.¶
A challenge window, configurable and defaulting to one hour, follows submission. In the current reference contract the fraud-proof path during this window is off-chain: any party MAY report evidence of a fraudulent batch to the contract operators and validators, who can respond through the on-chain pause mechanism, blocking finalization, and administratively triggered slashing (Section 8.4). A dedicated on-chain challenge entry point, allowing any party to publish a fraud proof directly on-chain, is deferred to a future protocol extension, together with fraud-proof-verified slashing. After the challenge window expires without the batch being rejected, the batch is finalized; finalization is irreversible.¶
A Verifier resolves a single attestation as follows:¶
All seven steps MUST succeed for the attestation to be accepted.¶
The Merkle tree described in Section 6.1, whose leaves are SHA-256 hashes of deterministically encoded, tagged COSE_Sign1 attestation tokens, is the attestation-evidence layer. It proves that a particular signed measurement was included in a committed batch.¶
The on-chain claim function in the reference contract enforces a separate claim-record layer: each on-chain leaf is the keccak256 hash of the encoded tuple (chain identifier, contract address, beneficiary, amount, epoch), identifying a specific redemption, that is, which address receives how many NOET against which epoch, bound to a specific contract instance on a specific chain. The first two fields act as a domain separator, so that a Merkle tree built for one contract instance cannot be replayed against a fork or a sibling deployment. The two layers are related but not identical: each claim record aggregates one or more attestation tokens whose summed energy underwrites the redemption amount.¶
A future revision will document the aggregation function from attestation tokens to claim records explicitly. For this version, off-chain builders MUST produce claim-record trees whose leaves match the contract's encoding exactly, including the chain-identifier and contract-address domain separator. The attestation-evidence tree is verified separately by the off-chain Verifier path above and is not yet referenced on-chain.¶
Endorsed device public keys are recorded in a registry. The registry MAY be:¶
The choice is operational and does not affect the verification semantics: a Verifier MUST be able to obtain a device's endorsed public key, traceable to an Endorser whose own key is verifiable.¶
An Endorser MAY revoke an endorsement, for example on discovery of a compromised provisioning batch. Revocations SHALL be timestamped; a Verifier evaluating an attestation MUST consider revocations issued before the attestation's "iat" timestamp.¶
A device's endorsement MAY be revoked individually, for example on suspicion of physical tampering reported through the protocol's challenge mechanism. Attestations from a revoked device with an "iat" value after the revocation timestamp MUST be rejected.¶
The following adversaries are explicitly considered.¶
The host microcontroller adjacent to the secure element may be compromised. Because the signing key is generated on-chip and never leaves the secure element, a compromised host can lie about what to sign but cannot forge signatures under the device's public key.¶
The protocol mitigates this through Reference Values, namely the firmware hash and configuration hash included in the attestation claims. A Relying Party that knows the expected Reference Values can detect a tampered host.¶
The Attester is composed of a measurer and a signer (Section 3.1). Every cryptographic guarantee in this document applies to the signer: a valid attestation proves that a particular secure element signed a particular set of numbers. It does not, on its own, prove that those numbers came from the meter the Endorser expects, nor that they correspond to physical energy flow. The measurer-to-signer interface is consequently the weakest link in the chain of custody, and it is where the adversaries below operate.¶
Meter substitution. An adversary with physical access may replace the meter, or interpose on the measurer-to-signer interface, and present fabricated readings to the secure element. The secure element signs them faithfully and verification succeeds at every later stage: the signature is valid, the endorsement chain is intact, the hash chain is continuous, and the on-chain commitment is well formed. Where the measurer-to-signer interface is unauthenticated, as it is on a bare pulse output or an unauthenticated serial connection, no mechanism defined in this document detects this attack.¶
Substitution after verification. A measurer that is verified only once, at commissioning or at Attester power-on, provides no continuing guarantee: an adversary may satisfy the check with a genuine meter and substitute afterwards. Implementations MUST NOT treat a commissioning-time verification of the measurer as evidence about readings produced later.¶
Physical tampering of a genuine meter. The meter or its sealing may be tampered with in order to distort readings at the point of measurement. This protocol does not detect such tampering; the existing physical-seal and audit regime of revenue-grade metering, which predates this protocol, remains necessary. That regime is complementary to the mitigations below, not a substitute for them, because a seal constrains the meter itself and says nothing about what reaches the signer.¶
Secure-element substitution. This case is detected, because the device serial number changes and the new public key has no endorsement chain.¶
The following mitigations apply to the measurer-to-signer interface.¶
Residual risk. Deployments whose measurer-to-signer interface is unauthenticated retain the full meter-substitution risk described above. For those deployments the assurance offered by this protocol degrades from "this quantity of energy was generated" to "this secure element reported this quantity", and the binding to physical generation rests entirely on out-of-band procedures. Deployments supporting regulatory or financial settlement SHOULD use an authenticated measurement interface for this reason. A claim conveying the class of measurer-to-signer protection, so that a Relying Party can apply policy to it rather than assuming it, is [TBD in -01].¶
Extraction of the signing key from a Common Criteria EAL5+ secure element is currently considered infeasible against the design assumptions of state-of-the-art parts. If such an extraction becomes feasible, the affected device family's endorsements SHALL be revoked. The protocol's per-device hash chain, carried in the "prev" claim, limits the value of an extracted key for back-dating, because all historical attestations are anchored on-chain.¶
A validator could withhold attestations or propose a batch with a Merkle root that does not correspond to the claimed leaves. Three mechanisms address this in combination:¶
A coalition of threshold-many validators colluding within the challenge window can still finalize a fraudulent batch. This is the residual risk; it shrinks but does not disappear with the threshold mechanism. Production deployments SHOULD treat the challenge-window fraud-proof path as load-bearing.¶
The combination of the per-device monotonic "seq" claim and the previous-attestation hash chain, carried in "prev", prevents replay of an old attestation as a new one. A Verifier that observes a "seq" value that is not strictly greater than the highest previously observed value for the same device MUST reject the attestation.¶
Side-channel attacks against the secure element, including power analysis, electromagnetic analysis, and fault injection, are mitigated by the Common Criteria certification regime governing the part. Operators SHOULD follow vendor guidance on physical deployment in order to reduce exposure.¶
The protocol produces a public, durable record of per-device energy generation. This has direct privacy implications, particularly for small-scale producers such as residential rooftop solar installations.¶
A continuous record of per-device generation timestamps can be correlated with consumption patterns in order to infer the occupancy and behavior of a household. Aggregation and timestamp rounding mitigate but do not eliminate this risk.¶
Participation in the protocol is, by design, voluntary. Operators are not required to publish attestations; the protocol's value derives from voluntary adoption by parties that wish to be cryptographically credible.¶
In addition to the threat model in Section 8, implementers are advised of the following.¶
This document requests that IANA register the following media type in the "Media Types" registry.¶
Future revisions of this document may request additional CBOR tag allocations and CoAP profile registrations.¶
A reference implementation of the Attester (firmware) and of the Verifier (settlement contract plus off-chain library) is available from the project repository identified on the author's organization web site. The reference implementation is provided for interoperability testing and is not normative; where it differs from this document, this document prevails.¶
The author thanks the participants of the RATS and COSE working groups whose published work this specification builds upon.¶