介绍
Tamarin证明器是用于安全协议的符号建模和分析的强大工具。它将安全协议模型作为输入,该模型指定了以不同角色运行协议的代理(例如,协议发起方、响应方和可信密钥服务器)所采取的操作、对手的规范以及协议所需属性的规范。然后,Tamarin可以用来自动构建一个证明,即使协议角色的任意多个实例与对手的行动并行交错,协议也能满足其特定的特性。在本手册中,我们对该工具及其使用进行了概述。
Tamarin为安全协议的建模和推理提供了通用支持。使用基于多集重写规则的表达语言来指定协议和对手。这些规则定义了一个标记的过渡系统,其状态包括对手知识的符号表示、网络上的消息、关于新生成值的信息以及协议的状态。对手和协议通过更新网络消息和生成新消息进行交互。Tamarin还支持一些密码算子的等式规范,例如Diffie-Hellman幂运算和双线性对。安全属性被建模为跟踪属性,对照过渡系统的跟踪进行检查,或者根据两个过渡系统的观测等效性进行检查。
Tamarin提供了两种构造证明的方法。它具有一种高效、完全自动化的模式,将推理、等式推理与启发式相结合,以指导证据搜索。如果该工具的自动证明搜索终止,它将返回正确性证明(对于无限数量的角色实例和新值)或反例,表示违反所述属性的攻击。然而,由于安全协议的正确性是一个不可判定的问题,因此该工具可能不会在给定的验证问题上终止。因此,用户可能需要求助于Tamarin的交互模式来探索证据状态,检查攻击图,并将手动证据引导与自动证据搜索无缝结合。
Schmidt 2012和Meier 2012的论文对Tamarin的基础进行了正式处理。我们在这里只做一个简短的(技术性的)总结。对于定义密码算子的等式理论E、定义协议的多集重写系统R和定义迹属性的公式,Tamarin可以检查R模E的迹的有效性或
的可满足性。通常,有效性检查被简化为检查否定公式的可满足度。在这里,约束求解用于对具有令人满意的跟踪的执行执行进行详尽的符号搜索。搜索的状态是约束系统。例如,约束可以表示某个多集重写步骤发生在执行中,或者一个步骤发生在另一个步骤之前。我们也可以直接使用公式作为约束来表示某些行为不会在执行中发生。约束约简规则的应用,如简化或大小写区分,对应于令人满意的轨迹的增量构造。如果不能应用进一步的规则,并且没有找到令人满意的跟踪,那么就不存在令人满意的追踪。对于符号推理,我们利用有限变分性质(Comon Lundh和Delaune 2005)将关于R的推理模E简化为关于R的变分的推理模AC。
本手册是为希望使用Tamarin对安全协议进行建模和分析的研究人员和从业者编写的。我们假设读者熟悉基本密码学和安全协议的基本工作原理。我们的重点是解释Tamarin的用法,以便新用户可以下载、安装和使用该系统。我们并不试图描述Tamarin的形式化基础,请读者参阅相关论文和科学论文以了解这些细节。
强调
在实践中,Tamarin工具已被证明是非常成功的。它支持追踪和观测等效特性、自动和交互模式,并内置支持等式理论,如Diffie-Hellman-Key交换建模。它支持一种(有限的)归纳形式,并有效地并行化其证明搜索。它已应用于来自不同领域的许多协议,包括:
- 基于Diffie-Hellman幂运算的高级密钥协商协议,例如相对于eCK(扩展的Canetti-Krawczyk)模型验证Naxos;见(Schmidt等人,2012年)。
- 具有攻击弹性的公钥基础设施(ARPKI)(Basin等人,2014)。
- 传输层安全性(TLS)(Cremers等人,2016)。
- 以及其他。
《手册》的结构和内容
在下一节安装中,我们将介绍如何安装Tamarin。建议初次使用的用户阅读第一节示例,该节详细描述了一个简单的协议分析,但没有技术细节。然后,我们系统地建立了用户需要的技术背景,首先在“加密消息”一节中介绍加密消息,然后在第5节和第6节中介绍两种不同的可能建模方法,包括使用规则的协议规范和使用过程的协议规范。属性规范将在属性规范一节中介绍。
然后,我们在“预计算”一节中继续介绍有关预计算的信息,在“建模问题”一节中将继续介绍可能的建模问题。之后,在高级功能一节中介绍了经验丰富的用户的高级功能。我们在“案例研究”一节中列出了已完成的案例研究。替代输入工具链在工具链一节中进行了描述。限制在“限制”一节中进行了说明。我们在联系信息和进一步阅读中总结了本手册的联系信息和更多阅读内容。
许可证
Tamarin证明手册,Tamarin团队。版权所有©2016。
tamarin-prover.github.io
本书面作品是根据知识共享署名非商业共享4.0国际许可证授权的。您可以出于所有非商业目的复制和编辑本作品,并注明出处。
参考
安装
在macOS或Linux上安装
在macOS或Linux上安装Tamarin最简单的方法是使用Homebrew:
brew install tamarin-prover/tap/tamarin-prover
它是单独的包:
- Arch Linux: pacman -S tamarin-prover
- Nixpkgs: nix-env -i tamarin-prover
- NixOS: add tamarin-prover to your environment.systemPackages.
你也可以直接从GitHub下载二进制文件,自己手动安装依赖项,或者从源代码编译。
在Windows 10上安装
您可以使用Windows Subsystem for Linux(WSL)在Windows 10下安装Tamarin(带GUI)。出于性能和兼容性的原因,我们建议将WSL2与Ubuntu一起使用。一旦你安装了WSL和Ubuntu,启动Ubuntu应用程序并按照上面Linux的安装说明安装Tamarin。然后,您可以使用常用命令在Ubuntu应用程序中运行Tamarin。要使用交互式模式,请在应用程序中启动Tamarin,并将您通常运行的Windows浏览器连接到http://127.0.0.1:3001.你的Windows文件可以在Ubuntu应用程序中访问,例如,驱动器c:上的文件可以通过/mnt/c访问。
从源代码编译
你不需要从源代码编译Tamarin,除非你正在为它开发一个新功能,或者你想使用一个未发布的功能。但是,如果您确实希望从源代码安装它:
手动安装依赖项
Tamarin需要构建Haskell Stack,并运行GraphViz和Maude 2.7.1(或更新版本)。最简单的安装方法是
brew install tamarin-prover/tap/maude graphviz haskell-stack
或者,您也可以自己安装:
- Haskell Stack按照Stack的安装页面上给出的说明进行操作。如果您使用软件包管理器(特别是在Ubuntu上)安装堆栈,则必须在之后运行堆栈升级,因为该版本的堆栈通常已经过时。
- Graphviz-Graphviz应该可以使用您的标准包管理器,或者直接从http://www.graphviz.org/
- Maude您可以使用软件包管理器安装Maude。但是,如果您的软件包管理器安装了Maude 2.6,那么您必须直接从http://maude.cs.illinois.edu/.在这种情况下,您应该确保您的PATH包括安装路径,以便调用maude启动2.7.1版本。请注意,即使Maude可执行文件是可移动的,prelude.Maude文件也必须位于启动Maude的同一文件夹中。
编译
使用查看源代码
git clone https://github.com/tamarin-prover/tamarin-prover.git
并且您已经准备好了可供编译的当前开发版本。如果您更喜欢使用master版本,只需运行gitcheckout-master即可。
在任何一种情况下,您都可以在新目录中运行make-default,它将为您的系统安装适当的GHC(Glasgow Haskell编译器),包括所有依赖项。tamarin证明程序的可执行文件将被复制到~/.local/bin/tamarin验证程序。请注意,这个过程需要30到60分钟,因为所有依赖项(大约120个)都是从头开始编译的。如果您稍后提取一个新版本的Tamarin(或切换到master分支/从master分支切换),那么只需要重新编译工具本身,这最多需要几分钟。
在远程机器上运行Tamarin
如果你可以使用更快的台式机或服务器,但更喜欢在笔记本电脑上使用Tamarin,你可以这样做。然后,该工具的cpu/内存密集型推理部分将在速度更快的机器上运行,而您只需在本地运行GUI,即您选择的web浏览器。为此,您可以使用以下命令将端口3001转发到服务器的端口3001,并适当替换SERVERNAME。
ssh -L 3001:localhost:3001 SERVERNAME
如果您这样做,我们建议您在屏幕环境中的服务器上运行您的Tamarin实例,即使网络断开您的连接,该实例也将继续运行,因为您稍后可以重新连接到它。否则,任何网络故障都可能需要您重新启动Tamarin并重新启动校样。
Tamarin代码编辑器
在Tamarin Prover项目中包含的etc文件夹下,可以为VIM、Sublime Text 3、Emacs和Notepad提供插件。下面我们详细介绍了安装首选插件所需的步骤。
VIM
使用Vim插件管理器 本例将使用Vundle直接从此存储库安装插件。下面的说明应该可以翻译成其他插件管理器。
- 确保您安装了Vundle(或您最喜欢的插件管理器)
- 将以下或相同的说明放入.virc中:Plugin 'tamarin-prover/editors'
- 重新启动Vim或重新加载配置
- 运行Vim命令:PluginInstall(或等效程序)
您可以通过:PluginUpdate安装更新。
手动安装(不推荐)如果使用此方法安装Vim支持文件,则需要自己保持文件的最新状态。
- 如果目录尚未存在,请创建~/.vim/目录,这是$VIMRUNTIME的典型位置
- 将etc/vim的内容复制到~/.vim/,包括文件夹。
Sublime Text 3 编辑器Sublime是为Sublime Text3编辑器开发的插件。该插件具有以下功能:-基本语法-理论、规则、限制和引理的代码段
编辑器sublime可以通过两种方式安装:
第一种也是首选的方法是使用PackageControl.io。编辑器sublime现在可以通过sublime包管理器安装。请参阅安装和使用说明文件,然后搜索并安装TamarinCorver。
或者,它可以从源代码安装。对于Linux/macOS,可以遵循此过程。我们假设您已经安装了git工具。
- 将目录更改为Sublime Text软件包目录:
- macOS: cd ~/Library/Application\ Support/Sublime\ Text\ 3/Packages/
- Linux: cd ~/.config/sublime-text-3/Packages/
2.将目录复制到Packages文件夹中。
- SSH: git clone git@github.com:tamarin-prover/editor-sublime.git
- HTTPS: git clone https://github.com/tamarin-prover/editor-sublime.git
3.关闭并重新打开Sublime,在右下角的语法列表中,“Tamarin”现在应该在列表中。
请注意,这个插件正在开发中,因此,一些功能仍然以原型的方式实现。如果您在运行插件的任何部分时遇到任何问题或有任何疑问,请访问项目GitHub页面。
Notepad++ 使用Notepad_plus_spthy.xml文件按照记事本Wiki中的步骤操作。
Emacs spthy.el实现了spthy主模式。你可以用M-x加载文件加载它,也可以用你喜欢的方式将它添加到你的.emacs中。
Atom 语言tamarin包为Atom提供了tamarin语法高亮显示。要安装它,请运行
apm install language -tamarin。
FAQ
如何使用Homebrew卸载Tamarin?要卸载(并“解锁”Tamarin homebrew头):
- brew uninstall tamarin-prover
- brew untap tamarin-prover/tap
homebrew-science tap是什么?Tamarin之前在现已关闭homebrew-science tap发布。如果你已经通过Homebrew安装了它,你可能需要先卸载并卸载该版本:
- brew uninstall tamarin-prover
- brew untap homebrew/science
更新、释放之后,Tamarin不再编译。尝试运行堆栈升级和堆栈更新。过期的堆栈版本可能会导致虚假的编译错误。