零知识证明

Fiat-Shamir 算法

  1. $n = p * q。p, q$是大素数。 $n$为可信第三方机构公开,而$p, q$为私有或者销毁
  2. $s: Alice$的密钥, $0 < s < n$。 Alice 必须证明其知晓密钥$s$,而不需要向任何人出示$s$。
  3. $v:Alice$的公钥,满足$v \equiv s^2 \, mod \, n$ 。
    1. Alice 计算并得出v展示给Bob
    2. 无法从v推导出s。
  4. $r: Alice$随机挑选的一个数字,满足$0 < r < n-1$。
  5. $x : x = r^2 \, mod \, n$ 作为一个Alice计算后的证据x(evidence),并发送给Bob。
  6. $c: $ Bob随机挑选的一个数c(challenger),范围是{1, 0}。
  7. $y : y = rs^c \, mod \, n$ 由$Alice$计算得到结果y(response),并发送给Bob。
  8. Bob通过计算$y^2\, mod \,n \,\,?= xv^c\, mode \, n$ ,如果相等,则认证完毕。

认证技术

X.509

数据协议,定义一个数据目录服务,维护一个用户信息数据库。

Kerberos

认证协议,用于证明接收双方的合法性。基于C/S结构的单向认证,弱双向认证。

##认证攻击类型

  • 假冒攻击
  • 重放攻击
  • 强迫延时攻击
  • 交错攻击
  • Oracle会话攻击
  • 并行会话攻击

PKI

PKI 公钥基础设施,通过公开密钥技术和数字证书,来确保系统信息安全,并负责验证数字证书持有者身份的体系。绝对安全,由国家信用作为背书

应用:VPN,安全电子邮件,web服务安全。

Kerberos

Kerberos 是一种计算机网络认证协议。基于票据(tickets) 的工作原理和$Neeedham-Schroeder \, Symmetric \, key \, Protocol$,允许结点以一种安全的策略,在不安全的网络中,互相证明的身份。

  • 防窃听,防重放攻击。
  • C/S 模型,提供双方认证。
  • 该协议无竞争对手!
  • 开源,多平台可用。

该协议建立在对称加密体系之上,并且需要一个可信的第三方机构 。在特定的认证情景中使用不同的对称加密算法。

* $Neeedham-Schroeder \, Symmetric \, key \, Protocol$

情景:

  1. TA是一个第三方的可信机构,可分发密钥中心,能够提供双方会话共享密钥。
  2. E(K,-)是一个对称加密算法(如DES)
  3. TA拥有一个密钥$K_{AT}$y与Alice一致,同样也有一个$K_{BT}$ 与Bob一致。
  4. Alice使用一个随机数$r_A$ 来认证TA,并从TA获得一个会话密钥 $K_{AB}$ 。
  5. Alice使用$K_{BT}$加密$(K_{AB}, r_B) $ 发给bob,bob使用$K_{BT}$解密。
  6. Bob使用会话密钥$K_{AB}$ 加密$r_B $发送给Alice。
  7. Alice使用$K_{AB}$解密得到$r_B$,并使用$K_AB$加密$r_B - 1$ 发送给Bob,Bob解密检查结果是否为$r_B -1$ 。

* 架构

AS = 认证服务器(认证机构)

SS = 提供服务的服务器(服务机构)

TGS= 票据许可服务器

TGT = 许可的票据

ST = 服务票据

* 流程

  • 用户客户端注册
  • 客户端认证
  • 客户服务认证
  • 客户服务请求

客户登录步骤:

  1. 用户输入用户名和密码,构成【长期密钥】,用于加密网络传输的数据。
  2. 使用hash函数运行输入的密码,得到客户的主密钥【客户/客户 密钥】,并由客户端保管。
  3. TGS,SS会话密钥属于短期密钥,利用主密钥实现交换和发布。

客户认证步骤:

  1. 客户机向AS发送一个明文消息,代表用户请求服务。
  2. AS校验Bob是否在其数据库中,如果在,则AS返回一下两条信息给客户
    1. 消息A,用主密钥加密的【客户/TGS】会话密钥。
    2. 消息B, 用TGS加密的票据授权票据TGT,客户网络地址,票据有效期,【客户/TGS会话密钥】。
  3. 客户机收到A,B,使用主密钥解密A 得到【客户/TGS 会话密钥】,消息B无法解密,因为没有TGS密钥来解密。

客户服务认证步骤:

  1. 申请服务时,客户机向TGS发送两条消息:
    1. 消息C,由消息B和申请服务的ID组成。
    2. 消息D,用【客户/TGS会话密钥】加密的认证。(客户ID+时间戳组成)
  2. 基于收到的消息C,D,TGS将从消息C中重新获取消息B,用TGS密钥解密消息B,从而得到【客户/TGS会话密钥】,TGS使用这个密钥解密消息D,成功认证,然后返回两条消息给客户机 :
    1. 消息E,用SS服务器加密的客户-SS服务票据ST(客户ID,客户网络地址,【客户/SS会话密钥】,票据有效期)
    2. 消息F:用【客户/TGS会话密钥】加密的【客户/SS会话密钥】。

客户服务申请步骤:

  1. 基于从TGS收到的消息E,F,客户机有足够的消息向SS认证自己。客户机发送消息给SS:
    1. 消息E,由先前步骤得到的E。
    2. 消息G:用【客户/SS会话密钥】加密的一个新的认证,包括客户ID和时间戳
  2. SS用自己的密钥解密消息E(票据),重新得到 【客户/SS会话密钥】,用这个会话密钥,SS解密消息G得到认证,返回确认函H给客户机,确认该身份真实,并同一向该客户提供服务。
    1. 消息H:在客户认证中找到时间戳, +1,用【客户/SS会话密钥加密】
  3. 客户机使用【客户/SS会话密钥】解密确认函H,并检查时间戳是否被正确地更新,如果是,客户机可以信赖该服务器,并向该服务器发送服务请求。
  4. 服务器向客户机提供所请求地服务。

* 局限性

  • 单点故障:中心化
  • 时钟同步:未同步时间戳认证将会失效。
  • 管理协议未标准化