Skip to content
This repository has been archived by the owner on Jul 2, 2023. It is now read-only.

WIP - New tee type: CCA (Confidential Compute Architecture) #184

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion attester/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,9 @@ tdx-attest-rs = { git = "https://github.com/intel/SGXDataCenterAttestationPrimit

[features]
default = ["all-attesters"]
all-attesters = ["tdx-attester", "occlum-attester", "az-snp-vtpm-attester"]
all-attesters = ["tdx-attester", "occlum-attester", "az-snp-vtpm-attester", "cca-attester"]

tdx-attester = ["tdx-attest-rs"]
occlum-attester = ["occlum_dcap"]
az-snp-vtpm-attester = ["az-snp-vtpm"]
cca-attester = []
50 changes: 50 additions & 0 deletions attester/src/cca/cca-claims-without-realm-challenge.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
{
"cca-platform-token": {
"cca-platform-profile": "http://arm.com/CCA-SSD/1.0.0",
"cca-platform-implementation-id": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=",
"cca-platform-instance-id": "AQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC",
"cca-platform-config": "AQID",
"cca-platform-lifecycle": 12288,
"cca-platform-sw-components": [
{
"measurement-type": "BL",
"measurement-value": "BwYFBAMCAQAPDg0MCwoJCBcWFRQTEhEQHx4dHBsaGRg=",
"signer-id": "BwYFBAMCAQAPDg0MCwoJCBcWFRQTEhEQHx4dHBsaGRg=",
"version": "3.4.2"
},
{
"measurement-type": "M1",
"measurement-value": "CwYFBAMCAQAPDg0MCwoJCBcWFRQTEhEQHx4dHBsaGRg=",
"signer-id": "BwYFBAMCAQAPDg0MCwoJCBcWFRQTEhEQHx4dHBsaGRg=",
"version": "1.2.0"
},
{
"measurement-type": "M2",
"measurement-value": "DwYFBAMCAQAPDg0MCwoJCBcWFRQTEhEQHx4dHBsaGRg=",
"signer-id": "BwYFBAMCAQAPDg0MCwoJCBcWFRQTEhEQHx4dHBsaGRg=",
"version": "1.2.3"
},
{
"measurement-type": "M3",
"measurement-value": "EwYFBAMCAQAPDg0MCwoJCBcWFRQTEhEQHx4dHBsaGRg=",
"signer-id": "BwYFBAMCAQAPDg0MCwoJCBcWFRQTEhEQHx4dHBsaGRg=",
"version": "1.0.0"
}
],
"cca-platform-service-indicator": "https://veraison.example/v1/challenge-response",
"cca-platform-hash-algo-id": "sha-256"
},
"cca-realm-delegated-token": {
"cca-realm-personalization-value": "QURBREFEQURBREFEQURBREFEQURBREFEQURBREFEQURBREFEQURBREFEQURBREFEQURBREFEQURBREFEQURBRA==",
"cca-realm-initial-measurement": "Q0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQw==",
"cca-realm-extensible-measurements": [
"Q0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQw==",
"Q0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQw==",
"Q0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQw==",
"Q0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQw=="
],
"cca-realm-hash-algo-id": "sha-256",
"cca-realm-public-key": "BIL70TKptcOWh5+7FTQNkFCXjlXHnVJ5oroOlYVPN+IM0vZPO3K1cLvXc+7iznaEJe31Re2+if+v4OlrvUbicPIHlsRIuY2vRqdk0nRC5ubthPjOyBfm7ManHTo959Z+zQ==",
"cca-realm-public-key-hash-algo-id": "sha-512"
}
}
44 changes: 44 additions & 0 deletions attester/src/cca/mod.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
// Copyright (c) 2023 Arm Ltd.
//
// SPDX-License-Identifier: Apache-2.0
//

use super::Attester;
use anyhow::*;
use std::env;

// If the environment variable "CCA_ATTESTER" is set,
// the TEE platform is considered as "CCA".

// TODO: update the logic to detect the platform by the system path like "/sys/class/cca", "/sys/drivers/virtual/cca_attestation"
// or the kernel config for the feature enablement.
pub fn detect_platform() -> bool {
env::var("CCA_ATTESTER").is_ok()
}

#[derive(Debug, Default)]
pub struct CCAAttester {}

// NOTE: If we sign the evidence here rather by a veraison proxy (proxy to veraison verifier), we need to rustify the cbor lib to support the logic around signature.
// TODO: Try crates cbor (https://crates.io/crates/cbor) to get rid of the proxy to the verasion service.
#[allow(unused_variables)]
impl Attester for CCAAttester {
fn get_evidence(&self, data: String) -> Result<String> {
let s = std::include_str!("cca-claims-without-realm-challenge.json").as_bytes();
let evidence = String::from_utf8_lossy(s);
log::info!("evidence: {}", evidence);
serde_json::to_string(&evidence).map_err(|_| anyhow!("Serialize evidence failed"))
}
}

#[cfg(test)]
mod tests {
use super::*;

#[test]
fn test_cca_get_evidence() {
let attester = CCAAttester::default();
let evidence = attester.get_evidence("".to_string());
assert!(evidence.is_ok());
}
}
16 changes: 13 additions & 3 deletions attester/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,18 +12,20 @@ pub mod sample;

#[cfg(feature = "az-snp-vtpm-attester")]
pub mod az_snp_vtpm;
#[cfg(feature = "tdx-attester")]
pub mod tdx;

#[cfg(feature = "cca-attester")]
pub mod cca;
#[cfg(feature = "occlum-attester")]
pub mod sgx_occlum;
#[cfg(feature = "tdx-attester")]
pub mod tdx;

/// The supported TEE types:
/// - Tdx: TDX TEE.
/// - SgxOcclum: SGX TEE with Occlum Libos.
/// - AzSnpVtpm: SEV-SNP TEE for Azure CVMs.
/// - Sevsnp: SEV-SNP TEE.
/// - Sample: A dummy TEE that used to test/demo the KBC functionalities.
/// - Cca: Arm Confidential Compute Architecture TEE.
#[derive(Debug, EnumString, Display)]
#[strum(ascii_case_insensitive, serialize_all = "lowercase")]
pub enum Tee {
Expand All @@ -33,13 +35,16 @@ pub enum Tee {
Sevsnp,
AzSnpVtpm,
Sample,
Cca,
Unknown,
}

impl Tee {
pub fn to_attester(&self) -> Result<Box<dyn Attester + Send + Sync>> {
match self {
Tee::Sample => Ok(Box::<sample::SampleAttester>::default()),
#[cfg(feature = "cca-attester")]
Tee::Cca => Ok(Box::<cca::CCAAttester>::default()),
#[cfg(feature = "tdx-attester")]
Tee::Tdx => Ok(Box::<tdx::TdxAttester>::default()),
#[cfg(feature = "occlum-attester")]
Expand Down Expand Up @@ -76,5 +81,10 @@ pub fn detect_tee_type() -> Tee {
return Tee::AzSnpVtpm;
}

#[cfg(feature = "cca-attester")]
if cca::detect_platform() {
return Tee::Cca;
}

Tee::Unknown
}
1 change: 1 addition & 0 deletions kbc/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ all-attesters = ["kbs_protocol/all-attesters"]
tdx-attester = ["kbs_protocol/tdx-attester"]
occlum-attester = ["kbs_protocol/occlum-attester"]
az-snp-vtpm-attester= ["kbs_protocol/az-snp-vtpm-attester"]
cca-attester = ["kbs_protocol/cca-attester"]

sample_kbc = []
eaa_kbc = ["foreign-types"]
Expand Down
1 change: 1 addition & 0 deletions kbs_protocol/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ all-attesters = ["attester/all-attesters"]
tdx-attester = ["attester/tdx-attester"]
occlum-attester = ["attester/occlum-attester"]
az-snp-vtpm-attester = ["attester/az-snp-vtpm-attester"]
cca-attester = ["attester/cca-attester"]

rust-crypto = ["reqwest", "reqwest?/rustls-tls", "crypto/rust-crypto"]
openssl = ["reqwest", "reqwest?/native-tls-vendored", "crypto/openssl"]