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, 亚马逊云科技, 以太坊, 区块链安全, 可信执行环境, 密码学, 手动系统调用, 智能合约, 硬件安全, 证书管理, 远程证明, 链上验证, 零信任, 验证器