base/nitro-validator

GitHub: base/nitro-validator

用于在 Solidity 智能合约中验证 AWS Nitro Enclave 生成的远程认证证明的链上验证器。

Stars: 32 | Forks: 16

# Solidity AWS Nitro Attestation 验证器 本仓库提供用于验证由 AWS Nitro Enclaves 生成的 attestation 的 Solidity 合约,如 [本文档](https://github.com/aws/aws-nitro-enclaves-nsm-api/blob/4b851f3006c6fa98f23dcffb2cba03b39de9b8af/docs/attestation_process.md#3-attestation-document-validation) 中所述。 请注意,在没有任何预先验证的证书的情况下验证 attestation 大约需要消耗 63m gas。 您可以通过分别验证链中的每个证书,将其拆分为更小的交易。 您可以针对 attestation `cabundle` 中的每个证书调用 `CertManager.verifyCACert`。 本库目前不支持证书吊销,这在 AWS 的 attestation 验证文档中已被禁用, [见此处](https://github.com/aws/aws-nitro-enclaves-nsm-api/blob/4b851f3006c6fa98f23dcffb2cba03b39de9b8af/docs/attestation_process.md#32-syntactical-validation)。 ## 用法 1. 单独部署 `CertManager`。 2. 在您的合约中验证 Nitro attestation: ``` pragma solidity ^0.8.0; import {NitroValidator} from "@nitro-validator/NitroValidator.sol"; import {CborDecode} from "@nitro-validator/CborDecode.sol"; import {CertManager} from "@nitro-validator/CertManager.sol"; contract Validator is NitroValidator { using CborDecode for bytes; uint256 public constant MAX_AGE = 60 minutes; bytes32 public constant PCR0 = keccak256("some PCR0 value"); constructor(CertManager certManager) NitroValidator(certManager) {} function registerSigner(bytes calldata attestationTbs, bytes calldata signature) external onlyOwner { Ptrs memory ptrs = validateAttestation(attestationTbs, signature); bytes32 pcr0 = attestationTbs.keccak(ptrs.pcrs[0]); require(pcr0 == PCR0, "invalid pcr0 in attestation"); require(ptrs.timestamp + MAX_AGE > block.timestamp, "attestation too old"); bytes memory publicKey = attestationTbs.slice(ptrs.publicKey); // do something with the public key, user data, etc } } ``` 3. 将 attestation 文档转换为 attestationTbs / signature(TBS 意为待签名)。 请注意,在链下执行此转换成本更低(例如使用 `cast call`)。 ``` bytes memory attestation = hex"84.."; (bytes memory attestationTbs, bytes memory signature) = validator.decodeAttestationTbs(attestation); validator.validateAttestation(attestationTbs, signature); ``` ## 构建 ``` forge install forge build ``` ## 测试 ``` forge test ```
标签:AWS Nitro Enclaves, CBOR 解码, Enclave, JSONLines, Nitro, Solidity, TEE, Web3, 亚马逊云科技, 以太坊, 区块链安全, 可信执行环境, 密码学, 手动系统调用, 智能合约, 硬件安全, 证书管理, 远程证明, 链上验证, 零信任, 验证器