In the race toward next-generation systems of systems, the adoption of edge and cloud computing is escalating to deliver the underpinning services. To safeguard the increasing attack landscape, traditional remote attestation schemes let a (trusted) verifier reason about the state of a remote prover’s computing platform. Security of these schemes generally relies on the presence of a trust anchor on the prover side, capable of securely recording and authenticating platform evidence. Building on this concept, Control-Flow Attestation (CFA) aims to determine whether a program was executed correctly on a resource-constrained prover by verifying that no runtime attacks (e.g., Return-Oriented Programming attacks) subverted the program’s control-flow behavior. To ensure that a program was executed correctly, existing CFA schemes assume a trusted verifier who maintains complete reference materials, such as the program’s Control-Flow Graph (CFG) and in-memory program layout, and other acceptance criteria to decide on the benignity of the program execution path, as recorded and reported by the prover’s trust anchor. However, besides severely degrading scalability due to the incurred verifier complexity, the unattractive need to exchange comprehensive information about the prover could discourage the adoption of CFA in emerging multi-domain services (including those targeted by RAINBOW) where privacy constraints or contractual differences among vendors might prohibit such information disclosure.
To reduce verifier complexity while protecting prover devices against dishonest verifiers and simultaneously not placing any additional overhead on a prover, we developed a protocol called ZEKRA (Zero-Knowledge Runtime Attestation) for RAINBOW which allows the prover to reliably offload the execution path verification process as a verifiable computational problem to an intermediate (though potentially dishonest) computing platform (worker) that conveys the execution path benignity result to the verifier. To protect the verification process and ensure that the worker cannot cheat about the benignity of the prover’s execution path, we propose to utilize Verifiable Computation (VC) techniques to encode the verification task into an arithmetic circuit, whose proof of correct execution over specific inputs (e.g., a particular program and recorded execution path) on a worker using a Zero-Knowledge Proof (ZKP) system can be efficiently verified by the untrusted verifier. In our proposal, we utilized the privacy-enhanced VC scheme called zero-knowledge Succinct Non-interactive Arguments of Knowledge (zkSNARK), which has seen a grown interest in both academia and industry, especially in Distributed Ledger Technology, e.g., the anonymous cryptocurrency Zcash and the smart-contract platform Ethereum.
If you are interested in the details check out the last version of the deliverable here.