当前位置:   article > 正文

密码分析实验一(ProVerif/HandShake Protocol/Needham-Schroeder Protocol)

proverif

实验要求:

ProVerif
配置 Proverif 环境
实验要求
根据实验手册,安装 proverif 环境
验证 hello.pv 文件
HandShake Protocol
实验要求
学习 proverif 手册 3.1-3.3 部分与实验手册
验证 ex_handshark.pv 文件,分析 proverif 的验证结果,说明存在的攻击手段根
proverif 的分析结果,尝试改进 ex_handshake 协议,解决中间人攻击
Needham-Schroeder Protocol
实验要求
学习 Needham-Schroeder 协议,了解其基本原理与协议流程
利用 proverif ,分析附件中的 Needham-Schroeder 密钥共享协议的三个变体,说
明各个协议变体存在的缺陷,尝试给出攻击方式
根据分析结果,结合 proverif 手册第五章内容,尝试解决协议存在的缺陷

(一)ProVerif

1.安装
ProVerif 组件依赖 :OCaml  graphviz
下列安装过程基于 ubuntu
OCaml:

  1. sudo apt-get install ocaml
  2. sudo apt-get install opam
graphviz :

sudo apt install graphviz

安装ProVerif:

到官网下载源码文件: http://proverif.inria.fr/   
解压:

tar -xzf proverif2.05.tar.gz

进入相应目录,安装Proverif:

  1. cd ./proverif2.05
  2. ./build

-help参数可查看proverif可用:

2.验证hello.pv文件:

将hello.pv文件用proverif进行分析

./proverif ./hello.pv

(二)HandShake Protocol

握手协议验证:
  1. (* Symmetric Enc *)
  2. type key.
  3. fun senc(bitstring,key) : bitstring.
  4. reduc forall m:bitstring,k:key;sdec(senc(m,k),k) = m.
  5. (* Asymmetric Enc Structure *)
  6. type skey.
  7. type pkey.
  8. fun pk(skey): pkey.
  9. fun aenc(bitstring,pkey): bitstring.
  10. reduc forall m:bitstring,k:skey;adec(aenc(m,pk(k)),k) = m.
  11. (* Digital Signatures Structure *)
  12. type sskey.
  13. type spkey.
  14. fun spk(sskey): spkey.
  15. fun sign(bitstring,sskey) :bitstring.
  16. reduc forall m:bitstring,k:sskey;getmess(sign(m,k)) = m.
  17. reduc forall m:bitstring,k:sskey;checksign(sign(m,k),spk(k)) = m.
  18. (* HandShake Protocol *)
  19. free c:channel.
  20. free s:bitstring [private].
  21. query attacker(s).
  22. let clientA(pkA:pkey,skA:skey,pkB:spkey) =
  23. out(c,pkA);
  24. in(c,x:bitstring);
  25. let y = adec(x,skA) in
  26. let (=pkB,k:key) = checksign(y,pkB) in
  27. out(c,senc(s,k)).
  28. let serverB(pkB:spkey,skB:sskey) =
  29. in(c,pkX:pkey);
  30. new k:key;
  31. out(c,aenc(sign((pkB,k),skB),pkX));
  32. in(c,x:bitstring);
  33. let z = sdec(x,k) in
  34. 0.
  35. process
  36. new skA:skey;
  37. new skB:sskey;
  38. let pkA = pk(skA) in out(c,pkA);
  39. let pkB = spk(skB) in out(c,pkB);
  40. ( (!clientA(pkA,skA,pkB)) | (!serverB(pkB,skB)) )

将以上代码写入并保存为handshake.pv文件,具体操作如下:

sudo apt install vim
vim handshake

写入后进行验证:

分析ex_handshake.pv

(三)Needham-Schroeder Protocol

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/744549
推荐阅读
相关标签
  

闽ICP备14008679号