身份认证

题目要求

快递小哥不会很细致的核实身份,允许代领,存在很多不安全因素。
设计一款基于手机的app,用于快递小哥验证身份,顾客领取快递。具体认证方法不限,简单易行。

(1)给出:app包含哪些部分(可加图示),每部分的功能
(2)模仿kerberos的写法,描述交互过程,并加说明

模仿kerberos的假设

  • 快递小哥需要做的是证实顾客真实身份与其所声称的身份相符
  • 顾客不会主动泄露只有自己和KDC知道的密码
  • 存在权威第三方(KDC)会告诉用户快递票据
    KDC与所有用户(客户和快递员)两两拥有一套对称密钥

名词解释

  • KDC(Key Distribution Center)= 密钥分发中心
  • TGT(Ticket Granting Ticket)= 快递票据(取件二维码)
  • goal = 快递信息
  • SS(Service Server)= 特定服务提供端(快递员)
  • A = 客户

第一阶段 用户登录AS获取票据

用户发送自己的用户名到KDC服务器。KDC服务器会生成相应的TGT票据,打上时间戳,在本地数据库中查找该用户的密钥,并用该密钥对TGT进行加密,将结果发还给客户端用户。客户端收到该信息,并使用自己的密钥进行解密之后,就能得到TGT票据了。

用户本地登录:输入IDA, 密码
本地客户端使用密码生成密钥EKA,同时发送明文给KDC:
A -> KDC : IDA || IDSS
AS检查ID在本地数据库中,使用A的密码生成密钥EKA加密返回A与TGS通讯的密钥K,快递信息goal,TGS与KDC密钥加密的TGT(包括K,IDA,时间戳LT):
KDC -> A : EKA[K || goal || EKSS[ IDA || LY || goal]]
用户使用自己生成的EKA解密消息(用户向KDC证明了自己的身份)获得临时密钥K与加密的TGT
这里其他人不知道密码,无法还原密钥

第二阶段 用户向快递员证明自己的身份

用户发送TGT与K加密的IDA给快递员,快递员核对ID就知道A是A了
用户申请取快递,发送TGT,快递号goal,K加密的IDA和时间戳TLnew:
A -> SS : EKSS[ IDA || LY || goal] || goal || K[LTnew || IDA]
快递员解密TGT,得到K和IDA,用K解密后半消息,得到IDA与LTnew,核对之后就知道时间没过期,用户是用户自己
交付快递