attestation_agent开发流程和功能使用指南

1. 功能简介

attestation_agent是远程证明系统的客户端组件,提供以下功能:

  • 网元证据收集(TPM PCR、启动信息、IMA 日志等)
  • 远程证明周期性挑战响应
  • 证明令牌管理
  • 与证明服务的通信

2. 开发环境搭建

2.1 所需组件

  • Rust 1.82.0 或更高版本
  • libssl-dev(用于 OpenSSL)
  • libtss2-dev(用于 TPM 2.0 访问)
  • virtCCA_sdk(用于 virtCCA)
  • virtCCA_sdk-devel(用于 virtCCA)
  • pkg-config
  • itrustee_sdk(用于 itrustee)
  • libboundscheck(用于 itrustee)
  • cca_sdk(用于CCA)
  • cca_sdk-devel(用于CCA)

2.2 环境配置

  • 安装所需组件
yum install -y build-essential pkg-config libssl-dev libtss2-dev virtCCA_sdk virtCCA_sdk-devel libboundscheck
  • 安装 Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
  • 配置 Rust 工具链
rustup default stable
rustup component add rustfmt clippy
  • 安装 Itrustee 环境

iTrustee 集成是可选的。如果您的部署需要基于 iTrustee 的远程证明,请参考以下文档了解其介绍和部署指南: https://www.hikunpeng.com/document/detail/zh/kunpengcctrustzone/trustzone/fg/kunpengtrustzone_20_0002.html。

3. 目录结构

attestation_agent/
├── agent               # agent 主进程,提供服务入口
├── agent_restful       # RESTful API 实现,处理证据收集和令牌请求
├── attester           # 证据收集插件模块
│   └── tpm            # TPM 相关插件
│       ├── boot       # TPM 启动信息收集插件
│       ├── common     # TPM 插件共享代码
│       └── ima        # TPM IMA 日志收集插件
│   └── virtCCA        # virtCCA 插件
│   └── ascend_npu     # ascend npu 插件
│   └── itrustee       # itrustee 证据收集插件
│   └── cca            # CCA 证据收集插件
│   └── dice           # DICE 证据收集插件
├── challenge          # 挑战请求处理模块
├── config             # 配置管理模块,处理配置文件解析
└── utils              # 通用工具模块,包括网络、日志等

4. 开发流程指南

4.1 添加新插件流程

  • 1 在插件接口中实现 AgentPlugin trait
  pub trait AgentPlugin {
    fn plugin_type(&self) -> &str;
    fn collect_evidence(&self, node_id: Option<&str>, nonce: Option<&[u8]>) 
        -> Result<serde_json::Value, PluginError>;
  }
  • 2 创建插件配置结构
  #[derive(Debug, Clone, Deserialize)]
  pub struct MyPluginConfig {
      pub enabled: bool,
      pub parameters: HashMap<String, String>,
  }
  • 3 实现插件逻辑
  pub struct MyPlugin {
      config: MyPluginConfig,
  }

  impl AgentPlugin for MyPlugin {
      fn plugin_type(&self) -> &str {
          "my_plugin_type"
      }
    
      fn collect_evidence(&self, node_id: Option<&str>, nonce: Option<&[u8]>) 
          -> Result<serde_json::Value, PluginError> {
          // Implement evidence collection logic
      }
  }

4.2 实现定时任务添加

    let scheduler_config = SchedulerConfig::new()

    let task = Box::new(move || {
        Box::pin(async move {
            info!("Scheduler task executed");
            Ok(())
        }) as Pin<Box<dyn Future<Output = Result<(), agent_utils::AgentError>> + Send>>
    });

    let mut schedulers = SchedulerBuilders::new();
    schedulers.add(scheduler_config, task);

4.3 添加 RESTful 接口路由

    // start server
    info!("Starting server at listen address: {}:{}", config.agent.listen_address, config.agent.listen_port);
    let rest_config = ServiceConfig::new()
        .with_port(config.agent.listen_port)
        .with_bind_address(&config.agent.listen_address);

    let service = RestService::configure(rest_config)?;

    service.register(
        Method::POST,
        "/global-trust-authority/agent/v1/xxx",
        |_: HttpRequest, body: Option<Value>| foo(body),
    )?;

    service.start_server().await?;

5. 功能使用指南

5.1 定时挑战任务

在 agent_config.yaml 的 scheduler 模块中配置挑战定时任务。可以根据需要修改设置,例如定时间隔。为防止服务器并发过载导致请求失败,提供了延迟错峰功能,可配置延迟时间。

    - name: "challenge"                  # 任务名称
    retry_enabled: true                # 启用重试
    cron_expression: "*/10 * * * * *"  # 每 10 秒执行一次
    initial_delay:                     # 随机初始延迟配置
      min_seconds: 1                   # 最小延迟 1 秒
      max_seconds: 60                  # 最大延迟 60 秒
    max_retries: 1

5.2 令牌管理

curl -X POST http://localhost:8080/global-trust-authority/agent/v1/tokens -d '{
    "attester_info": [
      {
        "attester_type": "tpm_boot",
        "policy_ids": ["policy1", "policy2"]
      }
    ],
    "challenge": true,
    "token_fmt": "ear",
    "attester_data": {"test_key": "test_value"}
}'

5.3 获取证据

curl -X POST http://localhost:8080/global-trust-authority/agent/v1/evidences \
  -H "Content-Type: application/json" \
  -d '{
    "attester_types": ["tpm", "tpm_boot", "tpm_ima"],
    "nonce_type": "verifier",
    "nonce": "eyJpYXQiOjE3NTY5ODAwNjMsInZhbHVlIjoiZjMrYVc0cm1vWHUxSjNjaGlJZWNkMkJUWWYrdS84WXU0Q2VTZWYwUmt4MXYzeHJhNHZNYkNrc1locC9UaTRVWW9wN1ZvMm5XNXlsMGs4VXNQNnZrTkE9PSIsInNpZ25hdHVyZSI6Im9Mc09WbTh2OHY3ZllUTW9SZHdySjBrbWl4blFmRXIwTVliNExDa2NyZUpveUFDZmFBdlpGdmJiYURHTFJjOW9ndWkycVhMbnUwWFgvZDhEc1hhK2xwQzg2dXhSeWZtYklSdVpza2xscHd5WVV4TXlEbmFZQS9SSlFGaEtEakJjYUp0Ri9sQnpZYWMzVVNzQmFkNE5tMVE1cnBEb3RscFpHbHd5akhhdGtxUENPVzZORG9wbU9pZWtzM3RNVXpJV0NyNVZPVGhhRnpZdUdIZUZJMHdhdVdMWHY4TnlwRnlIbnllay8zdWhjdEhIc2gyRExZZUVBZW1keWQ2VnVDWmNqNjBzSjNyenF5ME9LTUFIQVRuOWhhZjk0M0k3SllDUlkvTU0xQ08rWmk1MHNTUXV1UHllVUpuTERpMGxwQmdDZmwyeWgyQ2phcU9QdE15ckhTREJwRlNNaC8xVW5xdDBlaXFzcFRESDNtNm81TXd3dUFQWGJmRFZvaDArR2dPaUowaENLUnhLY3NXSXVHNythemNoS0U3U1kyakIxWWg0NjlpSTN2MUpQRWhobnVtdC9YWENhRXBYd29aVENLRUN6NjJMYnByOWp3SzZXVVZyS2t5L3hmbkdKTlR3NWxHNGFBS1hlOFdzSldtYnpXK0Yvd0JFa0E2amdHK1hWT1J6In0=",
     "token_fmt": "ear",
    "attester_data": {"test_key": "test_value"}
  }'

5.4 日志记录

// 配置日志
log::info!("Processing challenge: {:?}", challenge);
log::error!("Error occurred: {:?}", error);

6. 测试指南

6.1 测试指南(tests/)

  #[cfg(test)]
  mod tests {
    #[test]
    fn test_evidence_generation() { 
        // Test implementation
    }
  }

7. 部署指南

7.1 构建和运行

# 构建
cargo build -p attestation_agent

# 运行 agent
cargo run --bin attestation_agent  ./config/agent_config.yaml

7.2 配置指南

7.2.1 配置文件

agent_config.yaml 配置文件支持三种场景:

  • 启动 attestation_agent 进程时指定文件路径
  • 与 attestation_agent 进程同目录
  • /etc/attestation_agent/agent_config.yaml

7.2.2 相关配置说明

  • RUST_LOG:日志级别(trace、debug、info、warn、error)
  • Port:Agent 监听端口
  • Service Address:远程证明服务地址
  • TPM Device Access:通常是设备