基于形式化精化验证原生 Java Card API
1. 引言
在 Java Card 开发中,为了验证原生 API 的正确性,我们构建了 JCVM(Java Card 虚拟机)的低级模型,使其与 C 实现足够接近,以便能非正式地检查它们之间的对应关系。同时,还构建了两个中间模型,将原生方法的非正式规范细化到低级模型。这些模型均使用 Coq 证明助手构建,可正式证明每个细化步骤的正确性。
2. 细化非正式规范
原生方法的模型需基于整个 JCVM 的模型构建,JCVM 被建模为状态机。状态是 JCVM 所有组件的快照,包括已安装的 CAP 文件、堆、帧栈、静态字段映像、JCRE 元素等。原生方法的非正式规范通过以下中间模型进行细化:
| 模型 | 状态机 | 数据结构 | 原生操作 | 实现依赖 | 原生方法规范 |
| — | — | — | — | — | — |
| FSP | FIVM | 抽象 | Coq 关系 | 否 | 预期输入和输出 |
| HLD | FIVM | 抽象 Coq 函数 | 否 | 抽象算法 |
| LLD | CVM | 细化 | Coq 函数 | 是 | 细化算法 |
2.1 功能规范模型
- FIVM 状态 :在 FIVM 中,卡内存被视为一组内存单元,每个单元关联一个地址。FIVM 状态由以下组件组成:
1. 已安装包:存储已安装的 CAP 文件列表。
2. 堆:存储堆元素,包括对象和数组。对象由头结构表示,数组也有其头结构。
3. 帧栈:存储帧的栈,是方法解释所需的核
超级会员免费看
订阅专栏 解锁全文
39

被折叠的 条评论
为什么被折叠?



