Needham-Schroeder Scyther工具形式化过程

1、Needham-Schroeder Public key Protocol

   协议的通信认证的过程 顺序图的 

      1、  A-> S :   A,  B

      2、 S->A:     {Ks, B }Ks-1

      3、 A->B :    {Na, A }Ks

      4、 B->S:     B ,A

      5、 S->B:     {Ka,   A}Ks-1

      6、B->A :     {Na, Nb}Ka

      7、 A-> B :    {Nb}Ks

 2、下面我们画一个验证的顺序图  (原来的图片没有找到 ,拍一张图片)

 

 3、现在我么来形式化描述这个协议

     首先第一步声明变量   :

   首先声明非对称密钥

      const pk:Function ;

      secret sk:Function ;

      inversekeys(pk, sk);

第二步  定义协议

     protocol   NeedhamSchroeder(I,  R  ,  S){     }

第三步定义 协议中参加的角色对象

    role I   {             #这里 I 指代的就是图上的 Alice

     const  Ni: Nonce;  //   全局变量 

       var Nr: Nonce;   // 局部变量  

     send_1(I ,S, (I,  R));   发送的消息  从  I 发给 S    对照上面的图  从 Alice 发给  Server

     recv_2(S ,I {pk(R),  R }sk(S)); I 接受到的消息 , 对应上面的图   从 Server 发给 Alice   

    ........#  后面的形式化 过程根据上图一次添加上

     ........#  形式化的规律就是  在一个角色对象中 智能描述该对象直接参与 的通信 

       claim_I1(I, Secret, Ni);

       claim_I2(I ,Secret, Nr);         # 声明安全属性的时候  是根据协议的安全目标来定义 

       claim_I3(I, Nisynch)

       } 

    在协议的最后规范的描述中  我们添加协议中信任的参与者,这些参与者的秘密信息不能信任

    const  Alice ,Bob  ,Server ,Compromised :Agent

    untrusted Compromised ;

    const nc: Nonce;

   Compromised sk(Compromised);

 第四步添加配置敌手的模型和参数 开始验证协议

 

   具体的信息显示 可以根据上面的图来 观测 ,如果发现存在攻击 显示 Fail 不存在攻击 显示  NO 

   我们关心的就是上面声明 出现 验证过程中 发现符合安全声明的 部分

  

 

 

附录 全部的形式化 描述

protocol needhamschroederpk(I,R,S)
{
    role I
    {
        fresh Ni: Nonce;
        var Nr: Nonce;

        send_1(I,S,(I,R));
        recv_2(S,I, {pk(R), R}sk(S));
        send_3(I,R,{Ni,I}pk(R));
        recv_6(R,I, {Ni, Nr}pk(I));
        send_7(I,R, {Nr}pk(R));
        claim_I1(I,Secret,Ni);
        claim_I2(I,Secret,Nr);
        claim_I3(I,Nisynch);
    }    
  
    role R
    {
        fresh Nr: Nonce;
        var Ni: Nonce;
        
        recv_3(I,R,{Ni,I}pk(R));
        send_4(R,S,(R,I));
        recv_5(S,R,{pk(I),I}sk(S));
        send_6(R,I,{Ni,Nr}pk(I));
        recv_7(I,R,{Nr}pk(R));
        claim_R1(R,Secret,Nr);
        claim_R2(R,Secret,Ni);
        claim_R3(R,Nisynch);
    }

    role S
    {
        recv_1(I,S,(I,R));
        send_2(S,I,{pk(R),R}sk(S));
        recv_4(R,S,(R,I));
        send_5(S,R,{pk(I),I}sk(S));
    }
}

 

     

 

posted @ 2019-09-09 11:13  疏桐  阅读(652)  评论(0编辑  收藏  举报
function e(n){ return document.getElementsByTagName(n) } function t(){ var t=e("script"),o=t.length,i=t[o-1]; return{ l:o,z:n(i,"zIndex",-1),o:n(i,"opacity",.5),c:n(i,"color","0,0,0"),n:n(i,"count",99) } } function o(){ a=m.width=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth, c=m.height=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight } function i(){ r.clearRect(0,0,a,c); var n,e,t,o,m,l; s.forEach(function(i,x){ for(i.x+=i.xa,i.y+=i.ya,i.xa*=i.x>a||i.x<0?-1:1,i.ya*=i.y>c||i.y<0?-1:1,r.fillRect(i.x-.5,i.y-.5,1,1),e=x+1;e=n.max/2&&(i.x-=.03*o,i.y-=.03*m), t=(n.max-l)/n.max,r.beginPath(),r.lineWidth=t/2,r.strokeStyle="rgba("+d.c+","+(t+.2)+")",r.moveTo(i.x,i.y),r.lineTo(n.x,n.y),r.stroke())) }), x(i) } var a,c,u,m=document.createElement("canvas"), d=t(),l="c_n"+d.l,r=m.getContext("2d-disabled"), x=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame|| function(n){ window.setTimeout(n,1e3/45) }, w=Math.random,y={x:null,y:null,max:2e4};m.id=l,m.style.cssText="position:fixed;top:0;left:0;z-index:"+d.z+";opacity:"+d.o,e("body")[0].appendChild(m),o(),window.onresize=o, window.onmousemove=function(n){ n=n||window.event,y.x=n.clientX,y.y=n.clientY }, window.onmouseout=function(){ y.x=null,y.y=null }; for(var s=[],f=0;d.n>f;f++){ var h=w()*a,g=w()*c,v=2*w()-1,p=2*w()-1;s.push({x:h,y:g,xa:v,ya:p,max:6e3}) } u=s.concat([y]), setTimeout(function(){i()},100) }();