We introduce new features in ProVerif, an automatic tool for verifying security protocols, and a methodology for using them. This methodology and these features are aimed at protocols which involve sophisticated data types that have strong properties, such as Merkle trees, which allow compact proofs of data presence and tree extension. Such data types are widely used in protocols in systems that use distributed ledgers and/or blockchains. With our methodology, it is possible to describe the data type quite abstractly, using ProVerif axioms, and prove the correctness of the protocol using those axioms as assumptions. Then, in separate steps, one can define one or more concrete implementations of the data type, and again use ProVerif to show that the implementations satisfy the assumptions that were coded as axioms. This helps make compositional proofs, splitting the proof burden into several manageable pieces. To enable this methodology, we introduce new capabilities in ProVerif, by extending the class of lemmas and axioms that it can reason with. Specifically, we allow user-defined predicates, attacker predicates and message predicates to appear in lemmas and axioms. We show the soundness of the implementation of this idea with respect to the semantics. We illustrate the methodology and features by providing the first formal verification of two transparency protocols which precisely models the Merkle tree data structure. The two protocols are transparent decryption and certificate transparency. Transparent decryption is a way of ensuring that decryption operations are visible by people who are affected by them. This can be used to support privacy: it can mean that a subject is alerted to the fact that information about them has been decrypted. Certificate transparency is an Internet security standard for monitoring and auditing the issuance of digital certificates.
翻译:我们在 ProVerif 中引入了新特性, 这是一种用于核查安全协议的自动工具, 以及一种使用它们的方法。 这种方法和这些特性的目的在于协议, 这些协议涉及精密的数据类型, 具有很强的特性, 比如 Merkle 树, 允许对数据存在和树延伸进行精确的证明。 这些数据类型在使用分布式分类账和/ 或块链的系统中被广泛用于协议。 使用我们的方法, 可以非常抽象地描述数据类型。 使用 ProVerif 轴轴, 并用这些轴序来证明协议的正确性。 然后, 在不同的步骤中, 人们可以定义一种或多种数据类型的具体执行方式, 并且再次使用 ProVerif 来显示数据显示执行的假设性。 使用这种方式, 将证据负担分解成几种可管理式的解算方法, 我们在 ProVerif 中引入新的能力, 将精度和精确的代码作为解释。 具体地说, 我们允许用户定义的直观、 攻击性操作的直径直观执行数据类型, 和电路路路的操作的操作 将显示这个系统的运行的运行的运行的特性 。 将用来显示一个数字 。 我们用Syalticregistral 的解的解到一个数字的解到一个数字的解到 。</s>