The Secrets Must Not Flow: Scaling Security Verification to Large Codebases (extended version)

Fuente: arXiv
Enregistré dans:
Détails bibliographiques
Auteurs principaux: Arquint, Linard, Kishor, Samarth, Koenig, Jason R., Dodds, Joey, Kroening, Daniel, Müller, Peter
Format: Preprint
Publié: 2025
Sujets:
Accès en ligne:
Tags: Ajouter un tag
Pas de tags, Soyez le premier à ajouter un tag!
_version_ 1866915625943695360
author Arquint, Linard
Kishor, Samarth
Koenig, Jason R.
Dodds, Joey
Kroening, Daniel
Müller, Peter
author_facet Arquint, Linard
Kishor, Samarth
Koenig, Jason R.
Dodds, Joey
Kroening, Daniel
Müller, Peter
contents Existing program verifiers can prove advanced properties about security protocol implementations, but are difficult to scale to large codebases because of the manual effort required. We develop a novel methodology called *Diodon* that addresses this challenge by splitting the codebase into the protocol implementation (the *Core*) and the remainder (the *Application*). This split allows us to apply powerful semi-automated verification techniques to the security-critical Core, while fully-automatic static analyses scale the verification to the entire codebase by ensuring that the Application cannot invalidate the security properties proved for the Core. The static analyses achieve that by proving *I/O independence*, i.e., that the I/O operations within the Application are independent of the Core's security-relevant data (such as keys), and that the Application meets the Core's requirements. We have proved Diodon sound by first showing that we can safely allow the Application to perform I/O independent of the security protocol, and second that manual verification and static analyses soundly compose. We evaluate Diodon on two case studies: an implementation of the signed Diffie-Hellman key exchange and a large (100k+ LoC) production Go codebase implementing a key exchange protocol for which we obtained secrecy and injective agreement guarantees by verifying a Core of about 1% of the code with the auto-active program verifier Gobra in less than three person months.
format Preprint
id arxiv_https___arxiv_org_abs_2507_00595
institution arXiv
publishDate 2025
record_format arxiv
spellingShingle The Secrets Must Not Flow: Scaling Security Verification to Large Codebases (extended version)
Arquint, Linard
Kishor, Samarth
Koenig, Jason R.
Dodds, Joey
Kroening, Daniel
Müller, Peter
Cryptography and Security
Programming Languages
Software Engineering
Existing program verifiers can prove advanced properties about security protocol implementations, but are difficult to scale to large codebases because of the manual effort required. We develop a novel methodology called *Diodon* that addresses this challenge by splitting the codebase into the protocol implementation (the *Core*) and the remainder (the *Application*). This split allows us to apply powerful semi-automated verification techniques to the security-critical Core, while fully-automatic static analyses scale the verification to the entire codebase by ensuring that the Application cannot invalidate the security properties proved for the Core. The static analyses achieve that by proving *I/O independence*, i.e., that the I/O operations within the Application are independent of the Core's security-relevant data (such as keys), and that the Application meets the Core's requirements. We have proved Diodon sound by first showing that we can safely allow the Application to perform I/O independent of the security protocol, and second that manual verification and static analyses soundly compose. We evaluate Diodon on two case studies: an implementation of the signed Diffie-Hellman key exchange and a large (100k+ LoC) production Go codebase implementing a key exchange protocol for which we obtained secrecy and injective agreement guarantees by verifying a Core of about 1% of the code with the auto-active program verifier Gobra in less than three person months.
title The Secrets Must Not Flow: Scaling Security Verification to Large Codebases (extended version)
topic Cryptography and Security
Programming Languages
Software Engineering
url https://arxiv.org/abs/2507.00595