密码协议学习笔记(3):实体认证协议

基于对称密码的实体认证:

对称密码,一次传输,单向认证:

Alice与Bob拥有一个共享的对称密钥kA,B,某次传输中,Bob要验证对面的通信者是Alice,只需要让Alice发送用该密钥加密的Bob的ID以及时间戳(TA)或序列号(SNA)(防止重放攻击),如果Bob得到的密文解密后确实是有意义的信息,便可确信对方(有意愿在此时与Bob通信的人)就是kA,B的持有者.

EncAB(IDB,[TA/SNA])

问题:时间戳需要同步时钟,序列号需要维护序列号管理器

对称密码,两次传输,单向认证:

Bob选择随机数NB,发送给Alice

Alice使用kABNB和Bob的ID加密后发送回去.

EncAB(NB,IDB)

对称密码,两次传输,双向认证:

对称密码,一次传输,单向认证应用两次即可.

示意图略.

对称密码,三次传输,双向认证:

对称密码,两次传输,单向认证的扩展.

Alice   Bob
  NB 选择一次性随机数NB
选择一次性随机数NA EncAB(NA,NB,IDB)  
    解密,如果能得到自己取的随机数NB,则认为对面确实持有kAB(这意味着对面是真实的Alice)
  EncAB(NB,NA)  
解密,如果能得到NB,NA,则认为对面确实持有kAB    

基于哈希函数的实体认证:

如果协议中实体身份不需要保密,则可使用哈希函数进行实体认证

假设Alice与Bob共享密钥kAB,并约定带密钥的哈希函数HashAB()

哈希函数,一次传输,单向认证:

该方法还是使用时间戳T或随机数SN

Alice[TA/SNA],IDB,HashAB([TA/SNA],IDB)Bob

哈希函数,两次传输,单向认证:

同对称密码,两次传输,单向认证,基于随机数.

Alice   Bob
  NB 选择随机数NB
计算HashAB(NB,IDB) HashAB(NB,IDB)  
    也计算HashAB(NB,IDB)并验证与发来的消息是否一致

哈希函数,两次传输,双向认证:

同样是哈希函数,一次传输,单向认证应用两次.

示意图略.

哈希函数,三次传输,双向认证:

Alice   Bob
  NB 选择一次性随机数NB
选择一次性随机数NA HashAB(NA,NB,IDB)  
    计算HashAB(NA,NB,IDB)并验证发来的消息是否一致,如果一致,则认为对面确实持有kAB(这意味着对面是真实的Alice)
  HashAB(NB,NA)  
同样计算HashAB(NB,NA)并验证发来的消息是否一致    

基于公钥密码的实体认证:

如果通信双方没有共享密钥,那么对称密码或哈希函数的实体认证便无法实现,此时可以应用非对称密码来解决这个问题.

(回顾:Sign()()签名算法,需要持有私钥sk()才可生成签名,但只需公钥pk即可验证某签名是否由某明文生成,

Torrent:可简写为T,可信中心,会为自己认可的用户颁发证书Cert()(ID(),pk(),SignT(ID(),pk())),并发布自己的公钥pkT供其他人验证证书有效性).

公钥密码,一次传输,单向认证:

Alice[TA/SNA]IDBSignA([TA/SNA],IDB)CertA=(IDA,pkA,SignT(IDA,pkA))Bob

这样,Bob就认证了对面那个有意愿与自己通信的人就是skA的持有者.

还是一样的问题,需要时间戳和序列号.

(有风险的)公钥密码,两次传输,单向认证:

Alice   Bob
  NB 选择随机数NB
NB签名

SignA(NB,IDB)

CertA=(IDA,pkA,SignT(IDA,pkA))

 
   

使用pkT验证证书有效性,然后使用pkA验证签名有效性.

若验证成功,则确认了对面的人是私钥skA的持有者.

该协议的风险在Alice身上,NB是由Bob给出的,Bob完全可以制造一些带后门的NB让Alice去签名.

比如令NB=h(将A名下的所有财产转至B名下),其中h()是某个哈希函数,这样Bob就得到了Alice对此信息的签名.

(改进的)公钥密码,两次传输,单向认证:

改进的方案是允许Alice在待签名的数据中加入自己可以控制的信息.

Alice   Bob
  NB 选择随机数NB
也选取一个随机数NA,然后对NA,NB,IDB一起签名

NA,SignA(NA,NB,IDB)

CertA=(IDA,pkA,SignT(IDA,pkA))

 
    使用pkT验证证书有效性,然后使用pkA验证签名有效性

公钥密码,两次传输,双向认证:

公钥密码,一次传输,单向认证应用两次.

示意图略.

(有风险的)公钥密码,三次传输,双向认证:

将基于对称密码/哈希函数的三次传输,双向认证的思路机械地照搬到公钥密码上是不安全的.

(博主注:因为没有对称密钥的存在,认证的发起人只需要提供一个随机数即可发起认证,这个行为是没有门槛的.)

(博主注:为了更直观地理解后面叙述的中间人攻击过程,将协议中的三次传输分别用红色,绿色,蓝色标注)

Alice   Bob
  NB 选择一次性随机数NB
选择一次性随机数NA

NA,SignA(NA,NB,IDB)

CertA=(IDA,pkA,SignT(IDA,pkA))

 
    pkT验证证书,用pkA验证签名,确认有效性.
 

NB,SignB(NB,NA,IDA)

CertB=(IDB,pkB,SignT(IDB,pkB))

再选择一个一次性随机数NB
pkT验证证书,用pkB验证签名,确认有效性.    

对于此协议,存在着中间人攻击的风险:

Alice   Eve   Bob
  NE 伪造一次性随机数NE,谎称是Bob发送的    
选择一次性随机数NA并生成签名

NA,NE,SignA(NA,NE,IDB)

CertA=(IDA,pkA,SignT(IDA,pkA))

     
    冒充AliceNA发送给Bob
NA
 
     

NB,NA,SignB(NB,NA,IDA)

CertB=(IDB,pkB,SignT(IDB,pkB))

选择一次性随机数NB并生成签名
 

NB,NA,SignB(NB,NA,IDA)

CertB=(IDB,pkB,SignT(IDB,pkB))

Eve从Bob处套取了签名,直接将签名转发即可.

 

 
Alice以为NB是对方生成的三号随机数,验证的结果自然是签名有效.

 

 

 

Bob可能在等待回信,或者因为本地时钟超时终止协议.

注意,在此攻击过程中,Alice和Bob都以为是对方先发起的认证.

(博主注:有点类似于间谍(Eve)遇到哨兵(Alice)时,抢先要求对方报出口令,然后又用套取的口令在别的哨兵(Bob)处套取回令)

这是因为,本质上该协议就是公钥密码,两次传输,单向认证协议使用不同的随机数独立地重复了两次.为解决这个问题,只需要让这两次协议的调用不再独立即可.

(改进的)公钥密码,三次传输,双向认证:

Alice   Bob
  NB 选择一次性随机数NB
选择一次性随机数NA

NA,SignA(NA,NB,IDB)

CertA=(IDA,pkA,SignT(IDA,pkA))

 
    pkT验证证书,用pkA验证签名,确认有效性.
 

SignB(NB,NA,IDA)

CertB=(IDB,pkB,SignT(IDB,pkB))

不再选取新的随机数
pkT验证证书,用pkB验证签名,确认有效性.    

基于可信第三方(TTP)的实体认证:

(回顾:TTP,Trusted,Third Party,可信第三方,可信第三方总是提供合法输入,即,它不会成为主动攻击者的"马甲")

TTP安全地保存了它和所有实体的共享密钥,比如,TTP与Alice之间的共享密钥可记为kAT,与Bob之间的共享密钥可记为kBT

(有风险的)Needham-Schroeder协议:

该协议能同时达到实体认证和协商密钥的效果.

TTP   Alice   Bob
  NA,IDA,IDB 生成随机数NA    
随机生成kAB作为Alice和Bob的会话密钥

EncAT(NA,IDB,kAB,EncBT(kAB,IDA))

     
 

 

解密,检查NA是自己发出的随机数,Bob是与自己通信的主体

若是,则保存kAB并转发EncBT(kAB,IDA))

EncBT(kAB,IDA))  
 

 

 

EncAB(N)

kBT解密并验证密文中的ID是否与发来信息的Alice相符合.

如果是,则生成随机数N用于确认Alice确实掌握了密钥kAB

 

 

计算EncAB(N1)并发回

EncAB(N1)

 

对Needham-Schroeder协议的攻击:

由于该协议中,Bob未与TTP直接通信,因此它无法查证自己收到的消息是Alice直接转发来的,此时,如果存在攻击者记录了之前的会话EncBT(kAB,IDA)并获得了旧的密钥kAB,则它可以以重放通信的方式进行中间人攻击.

TTP   Alice   Eve   Bob
  NA,IDA,IDB 生成随机数NA        
随机生成kAB作为Alice和Bob的会话密钥

EncAT(NA,IDB,kAB,EncBT(kAB,IDA))

         
 

 

解密,检查NA是自己发出的随机数,Bob是与自己通信的主体

若是,则保存kAB并转发EncBT(kAB,IDA))

EncBT(kAB,IDA))      
        将信息篡改为保存下来的旧会话信息 EncBT(KAB,IDA)  
          EncAB(N)

kBT解密并验证密文中的ID是否与发来信息的Alice相符合.

如果是,则生成随机数N

       

计算EncAB(N1)并发回

EncAB(N1)

 

 

这样,Eve就可以截获Bob发给Alice的信息.

(使用时间戳机制改进的)Needham-Schroeder协议

在通信中加入时间戳T,防止利用旧会话信息的重放攻击.

TTP   Alice   Bob
  IDA,IDB      
随机生成kAB作为Alice和Bob的会话密钥

EncAT(IDB,kAB,EncBT(kAB,IDA,T))

     
 

 

解密,检查Bob是与自己通信的主体

若是,则保存kAB并转发EncBT(kAB,IDA,T))

EncBT(kAB,IDA,T))  
 

 

 

 

kBT解密并验证密文中的ID是否与发来信息的Alice相符合.

同时,还要根据网络延迟判断时间戳T是否有效.

如果是,则认可Alice身份和会话密钥kAB

注意,因为有了时间戳机制,无需再使用随机数N重复验证.

基于随机数的,双方都与TTP通信的,实体认证协议:

使用时间戳涉及时钟同步问题,因此可令Bob也向TTP进行认证,以保证有效性.

  TTP  
     
Alice

(IDA,IDB)

代表发起实体认证的意向

Bob

 

  TTP  
     
Alice:生成随机数NA   Bob:生成随机数NB

 

  TTP  
IDA,IDB,NA   IDB,IDA,NB
Alice   Bob

 

  TTP:生成kAB并发送  
EncAT(IDA,IDB,NA,kAB)   EncBT(IDB,IDA,NB,kAB)
Alice   Bob

 

  TTP  
     
Alice:生成随机数N EncAB(N) Bob

 

  TTP  
     
Alice EncAB(N1) Bob:计算并回复

五次传输双向认证:

同样是一个能够同时完成实体认证和密钥交换的协议.

Alice   Bob   TTP
生成随机数NA NA      
    生成随机数NB

NA,NB,IDA

 
     

EncBT(NB,kAB,IDA)

EncAT(NA,kAB,IDB)

随机选取kAB作为会话密钥
 

EncAT(NA,kAB,IDB)

EncAB(N,NA)

解密并验证EncBT(NB,kAB,IDA)

再选取一个随机数N

   

解密并验证EncAT(NA,kAB,IDB)

计算并发送EncAB(NA,N)证明自己掌握了kAB

EncAB(NA,N)

 

   

 

 

解密并验证EncAB(NA,N)

   

基于口令(password)的实体认证:

一般用于计算机主机(Host)H验证用户(User)U身份的情况.

直接基于口令的认证协议:

Host以(IDU,pwU)的形式保存用户名与口令.

当User要登录主机时:

UserIDUHost

User请输入口令Host

UserpwUHost

然后Host检查(IDU,pwU)是否保存在文档中,若是,则允许User登录.

问题:

仅适用于本地登录或专线连接.

如果User和Host在可窃听信道两端,则会导致窃听与重放攻击.

明文保存的(IDU,pwU)可能被非法读取.

单向函数的口令认证协议:

主机中只存储口令的单向函数(one way function)OWF()值.(IDU,OWF(pwU))

问题:

弱口令会导致攻击者穷举弱口令计算单向函数值,并与截获的信息进行比较的字典式攻击.

单向函数+加盐的口令认证协议:

盐(salt)指一段随机数,用于增加口令的随机性,主机在计算存储OWF时加入盐一起计算,即OWF(pwU,salt).

主机中只存储(IDU,salt,OWF(pwU,salt))

问题:

仍会导致攻击者窃取主机中的salt后,进行基于salt的字典式攻击,但这样攻击者的花销就会大得多.

基于哈希链的一次性口令认证:SKey

定义Hashn()=Hash((Hash())),哈希函数运行n次.

主机中保存(IDU,c,Hashc(pwU))

UserIDUHost

Userc,请输入口令Host

UserHashc1(pwU)Host

Host计算Hash(Hashc1(pwU))是否与文档中的Hashc(pwU)匹配,若匹配则允许User登录,并将口令更新为(IDU,c1,Hashc1(pwU)),下次User需要使用Hashc2(pwU)作为口令登录.

c最终减为1时,用户和主机需要重新初始化设置口令.

对SKey的中间人攻击:

若User与Host之间的信道可篡改,User又没有记录自己密钥pwU的计数器c,则攻击者可以通过修改计数器值的方式进行中间人攻击.

User   Eve   Host
  IDU,   IDU,  
 

c1,"请输入口令"

 

c,"请输入口令"

 
 

Hashc2(pwU)

计算Hashc1(pwU)=Hash(Hashc2(pwU))

Hashc1(pwU)

将计数器更新为c1,并建立连接.

Eve既可以直接截获本次连接发送的信息,也可以使用Hashc2(pwU)下次冒充User登录.

(博主注:如果协议中Host与User协商了签名算法,登录时要求User提供一个随机数N,而Host返回c时一起返回Sign(N,c),则可避免此种攻击)

加密的密钥交换协议(Encrypted Key Exchange,EKE):

在EKE协议中,用户U和主机H共享口令pwU,另外还需约定一种对称加密体制SEnc()和公钥加密体制AEnc()

该协议也能同时做到实体认证与密钥协商.协议执行结束后用户和主机将完成双向实体认证,并得到共享密钥.

User   Host
生成一对密钥对(pk,sk)

IDU,SEncpwU(pk)

(博主注:直接将口令作为密钥似乎不太可行,需要将口令哈希一下才能作为密钥使用)

 
 

SEncpwU(AEncpk(k))

解密SEncpwU(pk)得到pk

随机生成一个密钥k

pk加密k得到AEncpk(k)

再将AEncpk(k)pwU加密

pwU解密SEncpwU(AEncpk(k))得到AEncpk(k)

再用sk解密AEncpk(k)得到k

生成一个随机数NU并用k加密得到SEnck(NU)

SEnck(NU)

 

 

SEnck(NU,NE)

解密得到NU

再生成一个随机数NE

计算SEnck(NU,NE)

解密得到NE

计算SEnck(NE)

SEnck(NE)

解密得到NE后则允许登录,并协商了会话密钥k

对实体认证协议的攻击:

消息重放攻击:

在可窃听信道上窃听到消息,在之后的某个时间重新发送给原接收者,以伪装成原发送者.

解决方案:

时间戳,计数器,随机数.

中间人攻击:

修改计数器的值.

解决方案:

使用签名等方式防止计数器的值被篡改.

平行会话攻击:

该类攻击指在攻击者操控下,被攻击的两个或多个协议并发执行,从可以协议甲中得到的信息作为对协议乙的应答.

(即,某小孩和两个象棋大师下棋,用一人的招数去对付另外一人.)

Woo-Lam协议:

介绍该协议作为用于描述平行会话攻击的"靶子".

该协议的目的是为了让Bob对Alice产生单方向的认证.Alice与TTP共享密钥kAT,Bob与TTP共享密钥kBT,约定的对称加密算法Enc()()

Alice   Bob   TTP
 

IDA

     
 

NB

生成随机数NB    
计算EncAT(NB)

EncAT(NB)

再加密一层

EncBT(IDA,EncAT(NB))

EncBT(EncAT(NB))

 
     

EncBT(NB)

解密得到NB,然后加密为EncBT(NB)发送回去
    检查是否能解密出自己生成的随机数NB

 

 

对Woo-Lam协议的平行会话攻击:

如果Bob与多个实体同时会话,则会遭到如下的攻击:

假设Eve也是系统中的一个实体,它与TTP共享密钥kET

红色表示"Alice"与Bob之间运行的协议,蓝色表示Eve与Bob运行的协议

    TTP    
         
"Alice"(实际上是Eve假冒的)

IDA

Bob

IDE

Eve

 

    TTP    
         
"Alice"

NB

Bob

NB

Eve

 

    TTP    
         
"Alice"

EncET(NB)

Bob

EncET(NB)

Eve

 

    TTP    
   

EncBT(IDA,EncET(NB))

EncBT(IDE,EncET(NB))

   
"Alice"

 

Bob

 

Eve

TTP用kBT解密EncBT(IDA,EncET(NB))得到IDA,EncET(NB),用kAT解密EncET(NB),得到的是乱文R

TTP用kBT解密EncBT(IDE,EncET(NB))得到IDE,EncET(NB),用kET解密EncET(NB),得到的是NB

    TTP    
   

EncBT(R)

EncBT(NB)

   
"Alice"

 

Bob

 

Eve

尽管在示意图中,使用不同的颜色标注了不同的会话,然而由于这些会话都是同时发生的,且消息上没有标签,因此Bob会认为EncBT(NB)来自与"Alice"的会话从而认可"Alice"的身份,认为EncBT(R)来自于Eve的会话从而拒绝认可Eve的身份.

改进的Woo-Lam协议:

为防御平行会话攻击,对Woo-Lam协议做出如下改进:TTP返回消息时,将ID也加密进密文里

Alice   Bob   TTP
 

IDA

     
 

NB

生成随机数NB    
计算EncAT(NB)

EncAT(NB)

再加密一层

EncBT(IDA,EncAT(NB))

EncBT(EncAT(NB))

 
     

EncBT(IDA,NB)

解密得到NB,然后和Alice的ID一起加密为EncBT(IDA,NB)发送回去
    检查是否能解密出自己生成的随机数NB

 

 

然而,此协议仍是不安全的.

反射攻击:

当某实体发送信息时被攻击者截获,攻击者将原消息(或者稍作处理后的消息)返回给原发送者,然而原发送者不会意识到这是自己产生的.

(达尔巴用蒙古话向杨过问话,杨过虽然不懂蒙古话,但是原样复述了一遍,就把达尔巴这个傻子忽悠的团团转)

对改进的Woo-Lam协议的反射攻击:

(该过程中,恶意攻击者Eve既伪装为Alice,又伪装为TTP)

(全 · 员 · 恶 · 人)

Eve伪装的"Alice"   Bob   Eve伪装的"TTP"
  IDA      
  NB 生成随机数NB    
直接将随机数作为它本该计算得出的密文返回 NB      
    计算EncBT(IDA,NB)

EncBT(IDA,NB)

 
     

EncBT(IDA,NB)

直接将密文返回
   

解密,得到IDA,NB

于是认为本次协议是有效的.

 

 

交错攻击:

类似于平行会话攻击,但被攻击协议是交错而非同时执行.

posted @   Isakovsky  阅读(492)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
历史上的今天:
2019-09-08 奇思妙想:有关取模递推数列的一些有趣性质
点击右上角即可分享
微信分享提示