摘要:本文档对GB/T 15843介绍的实体鉴别进行简要分析记录。GB/T 15843包括GB/T 15843.1-2008 第1部份:概述;GB/T 15843.2-2008 第2部分:采用对称加密算法的机制;GB/T 15843.3-2008 第3部分:采用数字签名技术的机制;GB/T 15843.4-2008第4部分:采用密码校验函数的机制;GB/T 15843.5-2005 第5部分:使用零知识技术的机制。
GB/T 15843概况
GB/T 15843系列包括
- GB/T 15843.1-2008 第1部份:概述;
- GB/T 15843.2-2008 第2部分:采用对称加密算法的机制;
- GB/T 15843.3-2008 第3部分:采用数字签名技术的机制;
- GB/T 15843.4-2008 第4部分:采用密码校验函数的机制;
- GB/T 15843.5-2005 第5部分:使用零知识技术的机制。
GB/T 15843.1 概述
给出实体鉴别机制的一般模型。权标,实体间通信鉴别的消息。
附录B
时变参数(验证消息非重放的数据)有三种类型:
- 时间戳
- 确保双方时钟同步
- 可检测到收迫延迟
- 接受消息:| 接收到权标的时间-权标中的时间 | < 可容忍的时间窗口
- 验证唯一性:在当前窗口中记录所有消息的日志,拒收后续出现在同一时间窗口内的相同消息。
- 序号
- 基本策略:特定编号的消息只能接受一次(或在规定时间内只接受一次)
- 可要求附加“簿记”:声称方维护先前使用过或者将来使用仍将有效的序号。
- 专用程序来重置/重启序号计数器
- 不一定能检测收迫延迟
- 随机数
- 可防止重放或者插空攻击
- 随机数选自一个足够大的范围
- 声称方使用随机数不能保证验证方能检测受迫延迟。
GB/T 15843.2采用对称加密算法
1. 范围
- 无可信第三方(四种方案) = 两种单向鉴别方案 + 两种双向鉴别方案
表1 传递信息次数表
传递信息次数表 | 时间戳/序号 | 随机数(挑战-应答) |
单项鉴别 | 一次 | 两次 |
双向鉴别 | 两次 | 三次 |
- 有可信第三方参与(见第6章)
- 每个实体与第三方的任何一次附加通信:需增加两次消息传递
4. 要求
- 要求d):对加密算法EK和解密算法DK的要求:DK(EK(X))时能使得解密者检出数据是否被篡改。两种常用做法如下:
- 方法1:原始数据X中有足够的冗余信息;冗余信息验证通过才被接受。
- 方法2:密钥K推导出K1和K2,分别用于计算鉴别码T和密文C
T = MACK(1)(X), C = EK(2)( X || T)
5. 无可信第三方
准备:
- 声称方A。
- 验证方B。
- 单向密钥KAB(A向B发送消息时的密钥,B用来鉴别A)。
- 单向密钥KBA(B向A发送消息时的密钥,A用来鉴别B)。
- 这两个密钥KAB和KBA可以是相同的,此时为双向密钥,简记为KAB。
- T/NA表示A使用的时变参数,可为序列号NA或者时间戳TA。
- T/NB表示B使用的时变参数,可为序列号NB或者时间戳TB。
- 传递信息次数见表1
5.1 单向鉴别
5.1.1 单向鉴别之一次传递鉴别
步骤
步骤1:声称方A发送权标TokenAB = Text2 || EKAB(T/NA || B || Text1) 。
步骤2:B对权标TokenAB解密(需满足第4章的要求d),并验证T/NA(序列号NA或时间戳TA)正确性。
说明
-
- 权标TokenAB中的标识符B:
- 可选。
- 作用是防止反射攻击,敌手假冒B向A重用TokenAB。
- 不存在此种攻击的环境中可省去。
- 使用单向密钥时可省去。
- 权标TokenAB中的标识符B:
5.1.2 单向鉴别之两次传递鉴别
步骤
步骤1:验证方B启动鉴别过程:RB || Text1,RB为随机数,Text1可选。
步骤2:A发送权标TokenAB = Text3 || EKAB(RB || B || Text2)
-
-
- (可选)Text2可以包含随机数RA,防止可能的已知明文攻击
-
步骤3:B对TokenAB解密(需满足第4章的要求d),并验证RB是否匹配。
说明
-
- 权标TokenAB中的标识符B:
- 可选。
- 作用是防止反射攻击,敌手假冒B向A重用TokenAB。
- 不存在此种攻击的环境中可省去。
- 使用单向密钥时可省去。
- 权标TokenAB中的标识符B:
5.2 双向鉴别
5.2.1 双向鉴别之两次传递鉴别
本方案两次独立使用单向一次传递鉴别(见5.1.1),因此增加一次消息传递。
步骤
步骤1:A发送权标TokenAB = Text2 || EKAB(T/NA || B || Text1) 。
步骤2:B对TokenAB解密(需满足第4章的要求d),并验证T/NA正确性。
步骤3:B发送权标TokenBA = Text4 || EKBA(T/NB || A || Text3) 。
步骤4:A对TokenBA解密(需满足第4章的要求d),并验证T/NB正确性。
说明
-
- 权标TokenAB(TokenBA)中的标识符B(A):
- 可选。
- 作用是防止反射攻击,敌手假冒B(A)向A(B)重用此权标。
- 不存在此种攻击的环境中可省去。
- 使用单向密钥时可省去。
- 本方案两次独立使用单向一次传递鉴别(见5.1.1),可通过适当的文本字段来进一步绑定这两次之间的信息。
- 权标TokenAB(TokenBA)中的标识符B(A):
5.2.2 双向鉴别之三次传递鉴别
本方案两次独立使用单向两次传递鉴别(见5.1.2),因此增加一次消息传递。
步骤
步骤1:B发送:RB || Text1,RB为随机数,Text1可选。
步骤2:A发送权标TokenAB = Text3 || EKAB(RA || RB || B || Text2)。
-
-
- 由于有随机数RA,因此Text2无需再引入随机数。
-
步骤3:B对TokenAB解密(需满足第4章的要求d),并验证RB是否匹配。
步骤4:B发送权标TokenBA = Text5 || EKAB(RB || RA || Text4)。
-
-
- 由于此处不可能出现反射攻击,因此不再使用标识A。
-
步骤5:A对TokenBA解密(需满足第4章的要求d),并验证RA是否匹配。
说明
-
- 权标TokenAB(TokenBA)中的标识符B(A):
- 可选。
- 作用是防止反射攻击,敌手假冒B(A)向A(B)重用此权标。
- 不存在此种攻击的环境中可省去。
- 使用单向密钥时可省去。
- 权标TokenAB(TokenBA)中的标识符B(A):
6. 有可信第三方
准备阶段
- A与可信第三方TP共享密钥KAT
- B与可信第三方TP共享密钥KBT
- 鉴别中先由一方向第三方申请密钥KAB,然后再采用5.2.1(5.2.2)的机制
6.1 四次传递双向鉴别
6.1.1 方案描述
本方案是两次普通鉴别方案的综合使用。
记号
- TVPA是A的时变参数,与通常的时变参数略有不同。它将消息1和消息2联系在一起,因此要求不可重复。要求是随机数,不重复,无需不可预测。
步骤
步骤1:A向第三方发送TVPA || B || Text1,Text1可选。
步骤2:第三方向A发送TokenTA:
TokenTA = Text4 || EKAT (TVPA || KAB || B || Text3) || EKBT (T/NTP || KAB || A || Text2)
步骤3:用户A验证TokenTA,提取KAB,计算TokenAB。
3.1 验证TokenTA:对TokenTA的EKAT(...)解密(需满足第4章的要求d),并验证TVPA的正确性。
3.2 利用解密信息中提取KAB和TokenTA的EKBT(...)部分构造TokenAB。
TokenAB = Text6 || EKBT (T/NTP || KAB || A || Text2) || EKAB(T/NA || B || Text5)
步骤4:A发送权标TokenAB。
步骤5:用户B验证TokenAB,提取KAB,计算TokenBA。
5.1 对TokeTAB中EKBT(...)解密(需满足第4章的要求d),并验证T/NTP的正确性。
5.2 利用解密信息中提取KAB构造TokenBA = Text8 || EKAB(T/NB || A || Text7)
步骤6:B发送权标TokenBA。
步骤7:用户A验证TokenBA。A对TokenBA解密(需满足第4章的要求d),并验证T/NB的正确性,从而验证TokenBA。
6.1.2 退化为单向鉴别
-
- 去除步骤6和步骤7,即可退化为B对A的单向鉴别。
6.1.3 方案分析(增加)
四次传递双向鉴别是普通鉴别方案的组合
-
- 步骤1—3是采用两次传递的A对TP的单向鉴别(见5.1.2)。
- 步骤4—7是采用两次传递的A和B双向鉴别(见5.2.1)。
步骤1—3是采用两次传递的A对TP的单向鉴别(见5.1.2)。
两次传递的单向鉴别原方案:
步骤1:验证方B启动鉴别过程:RB || Text1,RB为随机数,Text1可选。
步骤2:A发送权标TokenAB = Text3 || EKAB(RB || B || Text2)
本方案
步骤1:A向第三方TP发送TVPA || B || Text1,Text1可选。
其中TVPA相当于RB,B是为了说明另一方身份。
步骤2:第三方向A发送TokenTA:
TokenTA = Text4 || EKAT (TVPA || KAB || B || Text3) || EKBT (T/NTP || KAB || A || Text2)
其中
- EKAT (TVPA || KAB || B || Text3)中的TVPA相当于RB,KAB 是A和B的密钥
- EKBT (T/NTP || KAB || A || Text2)是给后面的A和B双向鉴别做准备。
步骤3:用户A验证TokenTA,提取KAB,计算TokenAB。
- 3.1 对TokenTA的EKAT(...)解密(需满足第4章的要求d),并验证时变参数TVPA的正确性,从而验证TokenTA。
这是对TP的验证
步骤4—7是采用两次传递的A和B双向鉴别(见5.2.1)。
两次传递的双向鉴别原方案:
步骤1:A发送权标TokenAB = Text2 || EKAB(T/NA || B || Text1) 。
步骤3:B发送权标TokenBA = Text4 || EKBA(T/NB || A || Text3) 。
本方案
步骤4:A发送TokenAB = Text6 || EKBT (T/NTP || KAB || A || Text2) || EKAB(T/NA || B || Text5)。
其中Text6和EKAB(...)同原方案,EKBT (..)是TP给A和B双向鉴别,照抄。
步骤5:用户B验证TokenAB,提取KAB,计算TokenBA。
其中验证流程同原方案。
步骤6:B发送TokenBA = Text8 || EKAB(T/NB || A || Text7)。
其中发送信息与原方案完全一致。
步骤7:用户A验证TokenBA。
其中验证流程同原方案。
6.2 五次传递双向鉴别
6.2.1 方案描述
本方案是两次普通鉴别方案的综合使用。
步骤
步骤1:B向A发送RB || Text1,Text1可选。
步骤2:A向第三方发送R`A || RB || B || Text2,Text2可选。
步骤3:第三方向A发送TokenTA:
TokenTA = Text5 || EKAT (R`A || KAB || B || Text4) || EKBT (RB || KAB || A || Text3)
步骤4:用户A验证TokenTA,提取KAB,计算TokenAB。
4.1 验证TokenTA:对TokenTA的EKAT(...)解密(需满足第4章的要求d),并验证R`A的正确性。
4.2 利用解密信息中提取KAB和TokenTA的EKBT(...)部分构造TokenAB。
TokenAB = Text7 || EKBT (RB || KAB || A || Text3) || EKAB(RA || RB || Text6)
步骤5:A发送权标TokenAB。
步骤6:用户B验证TokenAB,提取KAB,计算TokenBA。
6.1 对TokeTAB中EKBT(...)解密(需满足第4章的要求d),并验证RB的正确性。
6.2 解密信息中提取KAB构造TokenBA = Text9 || EKAB(RB || RA || Text8)
步骤7:B发送权标TokenBA。
步骤8:用户A验证TokenBA。A对TokenBA解密(需满足第4章的要求d),并验证RA的正确性,从而验证TokenBA。
6.2.2 退化为单向鉴别
-
- 去除步骤7和步骤8,即可退化为B对A的单向鉴别。
6.2.3 方案分析(增加)
五次传递双向鉴别是普通鉴别方案的组合
-
- 步骤1—6是采用两次传递的B对TP的单向鉴别(见5.1.2)。
- 步骤1和4—8是采用三次传递的A和B双向鉴别(见5.2.2)。
步骤1—6是采用两次传递的A对TP的单向鉴别(见5.1.2)。
两次传递的单向鉴别原方案:
步骤1:验证方B启动鉴别过程:RB || Text1,RB为随机数,Text1可选。
步骤2:A发送权标TokenAB = Text3 || EKAB(RB || B || Text2)
本方案
这里A作为中间人转发B和TP之间的信息。
步骤1:B向A发送RB || Text1,Text1可选。
步骤2:A向第三方发送R`A || RB || B || Text2,Text2可选。
A作为中间人向TP转发信息RB。
步骤3:第三方向A发送TokenTA:
TokenTA = Text5 || EKAT (R`A || KAB || B || Text4) || EKBT (RB || KAB || A || Text3)
步骤4:用户A验证TokenTA,提取KAB,计算TokenAB。
步骤5:A发送权标TokenAB。
步骤6:用户B验证TokenAB,提取KAB,计算TokenBA。
TokenTA 和中的TokenABEKBT (RB || KAB || A || Text3)是TP向B的回复。
同时B完成对TP的验证。
步骤1和4—8是采用三次传递的A和B双向鉴别(见5.2.1)。
两次传递的双向鉴别原方案:
步骤1:B发送:RB || Text1,RB为随机数,Text1可选。
步骤2:A发送权标TokenAB = Text3 || EKAB(RA || RB || B || Text2)。
步骤3:B对TokenAB解密(需满足第4章的要求d),并验证RB是否匹配。
步骤4:B发送权标TokenBA = Text5 || EKAB(RB || RA || Text4)。
步骤5:A对TokenBA解密(需满足第4章的要求d),并验证RA是否匹配。
本方案
步骤1:B向A发送RB || Text1,Text1可选。
对应原方案的步骤1。
步骤4:用户A验证TokenTA,提取KAB,计算TokenAB。
TokenAB = Text7 || EKBT (RB || KAB || A || Text3) || EKAB(RA || RB || Text6)
步骤5:A发送权标TokenAB。
EKAB(RA || RB || Text6)对应原方案的步骤2。
步骤6:用户B验证TokenAB,提取KAB,计算TokenBA。
TokenBA = Text9 || EKAB(RB || RA || Text8)
步骤7:B发送权标TokenBA。
对应原方案的步骤3-4。TokenBA与原方案相同。
步骤8:用户A验证TokenBA。A对TokenBA解密(需满足第4章的要求d),并验证RA的正确性,从而验证TokenBA。
对应原方案的步骤5。
附录A 文本字段的使用
如果权标不包括(足够的)冗余,已加密的文本字段可用于提供附加冗余。
要求保密性或者数据源鉴别的任何信息都应放在该权标的加密部分。
GB/T 15843.3 采用数字签名技术
记号
- CertX:可信第三发签发给实体X的证书。
- SSA(M):签名,使用签名密钥SA对消息M签名。
- T/NX表示X使用的时变参数,可为序列号NX或时间戳TX。X为A或B。
4. 要求
- 验证方拥有声称方的有效公钥。
- 声称方拥有仅有自己知道的私钥。
5. 机制
5.1 单向鉴别
5.1.1 一次传递鉴别
步骤
步骤1. A发送CertA(可选) || TokenAB。
TokenAB = T/NA || B || Text2 || SSA(T/NA || B || Text1)
步骤2. B验证证书有效、T/NA正确性、标识字段B正确性、签名有效性。
说明
- 为了防止预期的验证方之外的实体接受权标,TokenAB的签名数据中必须包含可区分标识B。
5.1.2 两次传递鉴别
验证方B启动验证流程。
步骤
步骤1. B发送RB || Text1(可选)。
步骤2. A发送CertA(可选) || TokenAB。
TokenAB = RA || RB || B || Text3 || SSA(RA || RB || B || Text2)
步骤3. B验证证书有效、RB相符、标识字段B正确。
说明
- TokenAB中的可区分标识B可选。
- TokenAB的签名数据SSA()中的B是为了防止信息被期望验证方之外的实体接受,如中间人攻击;RA是为了防止B在鉴别机制启动之前获得A对由B选择的数据的签名。
5.2 相互鉴别
5.2.1 两次传递鉴别
该机制独立地两次使用机制5.1.1(单向鉴定的单次传递鉴别)。
步骤
步骤1. A向B发送CertA(可选) || TokenAB :(本步骤同5.1.1步骤1)
TokenAB = T/NA || B || Text2 || SSA(T/NA || B || Text1)。
步骤2. B验证A的证书、签名、T/NA、签名数据中的B,来验证TokenAB。(本步骤同5.1.1步骤2)
步骤3. B向A发送CertB(可选) || TokenBA :(本步骤同5.1.1步骤1)
TokenBA = T/NB || A || Text4 || SSB(T/NB || A || Text3)(可选)。
步骤4. A验证B的证书、签名、T/NA、签名数据中的A,来验证TokenBA。(本步骤同5.1.1步骤2)
说明
- 该机制独立地两次使用机制5.1.1(单向鉴定的单次传递鉴别)。
- 两条消息之间除了时效性上有隐含关系外,没有任何关系。如果希望两条消息有进一步的联系,可适当使用文本字段来实现。
- TokenAB和TokenBA中的可区分标识A、B必需,防止权标被期望的验证方之外的实体接受。
5.2.2 三次传递鉴别
该机制两次使用机制5.1.2(单向鉴定的两次传递鉴别)。
步骤
步骤1. B向A发送RB || Text1(可选)。
步骤2. A发送CertA(可选) || TokenAB。
TokenAB = RA || RB || B || Text3 || SSA(RA || RB || B || Text2)
步骤3. B验证证书有效、RB相符、标识字段B正确。
步骤4. B发送CertB(可选) || TokenBA。
TokenBA = RB || RA || A || Text5 || SSB(RB || RA || A || Text4)
步骤5. A验证证书有效、RA相符、标识字段A正确。
说明
- TokenAB中的可区分标识B可选,TokenBA中的可区分标识A可选。
5.2.3 两次传递并行鉴别
这是5.1.2机制的并行,但将证书Cert在第一条消息传出,以加快鉴别流程。
步骤
步骤1 . A向B发送RA || CertA(可选) || Text1(可选)。
步骤1*. B向A发送RB || CertB(可选) || Text2(可选)。
步骤2. 验证对方证书有效。
步骤3 . A向B发送TokenAB
TokenAB = RA || RB || B || Text3 || SSA(RA || RB || B || Text2)
步骤3* B向A发送TokenBA。
TokenBA = RB || RA || A || Text5 || SSB(RB || RA || A || Text4)
步骤4. 验证签名正确性、随机数匹配、标识字段正确。
说明
- TokenAB中的可区分标识B可选,TokenBA中的可区分标识A可选。
GB/T 15843.4 采用密码校验函数
记号
- T/NA(T/NB):A(B)的时变参数,可为序列号NA(NB)或时间戳TA(TB)。
- fK(X):计算消息鉴别码的密码校验函数,密钥为K,消息为X。
5. 机制
5.0 概述
声称方A和验证方B共享两个单向密钥KAB(A向B发送消息时使用,用于B对A进行鉴别)和KBA(B向A发送消息时使用,用于A对B进行鉴别)。这两个密钥相等时就退化为一个双向密钥,仍记为KAB。
5.1 单向鉴别
5.1.1 一次传递鉴别
步骤
步骤1. A向B发送TokenAB。
TokenAB = T/NA || Text2 || fKAB(T/NA || B || Text1)
步骤2. B计算并验证fKAB(T/NA || B || Text1),验证B、T/NA的正确性。
说明
- TokenAB中的可区分标识B可选。
- 标识符B是为了防止敌手假冒实体B来对实体A重用TokenAB。在不会出现这种攻击的环境中可省略标识符B。
- 如果使用单向密钥,则标识符B可省略。
5.1.2 两次传递鉴别
步骤(验证方B启动此流程并验证A)
步骤1. B向A发送RB || Text1(可选)。
步骤2. A发送TokenAB = Text3 || fKAB(RB || B || Text2)
步骤3. B计算并验证fKAB(T/NA || B || Text1),验证B、RB的正确性。
说明
- TokenAB中的可区分标识B可选。
- TokenAB中的B时为了防止反射攻击(入侵者假冒A将RB反射给B)。在不出现这种攻击的环境中可省略标识符B。
- 如果使用单向密钥,可省略标识符B。
5.2 相互鉴别
5.2.1采用5.1.1的机制实现相互鉴别。5.2.2采用5.1.2的机制实现相互鉴别。
5.2.1 两次传递鉴别
步骤
步骤1. (同5.1.1步骤1)A向B发送TokenAB。
TokenAB = T/NA || Text2 || fKAB(T/NA || B || Text1)
步骤2. (同5.1.1步骤2)B计算并验证fKAB(T/NA || B || Text1),验证B、T/NA的正确性。
步骤3. (同5.1.1步骤1)B向A发送TokenBA。
TokenAB = T/NB || Text4 || fKBA(T/NB || A || Text3)
步骤4. (同5.1.1步骤2)A计算并验证fKBA(T/NB || A || Text3),验证A、T/NB的正确性。
说明
- TokenAB中的可区分标识B可选,TokenBA中的可区分标识A可选。
- 标识符B是为了防止敌手假冒实体B来对实体A重用TokenAB。在不会出现这种攻击的环境中可省略标识符B。标识符A同理。
- 如果使用单向密钥(即A和B共享的是两个不同的单向密钥KAB和KBA),则标识符A、B可省略。
- 这种机制中两条消息间除了时效性上有隐含关系外没有任何联系。如果希望这两条消息有进一步的联系,可适当地使用文本字段来实现。
5.2.2 三次传递鉴别
验证方B启动此流程并验证A。
步骤
步骤1. B向A发送RB || Text1(可选)。
步骤2. A向B发送TokenAB = RA || Text3 || fKAB(RA || RB || B || Text2)
步骤3. B计算并验证fKAB(RA || RB || B || Text2),验证B、RB的正确性。
步骤4. B向A发送TokenBA = Text5 || fKBA(RB || RA || Text4)
步骤5. A计算并验证fKBA(RB || RA || Text4),验证A、RA的正确性。
说明
- TokenAB中的可区分标识B可选。
- TokenAB中的B时为了防止反射攻击(入侵者假冒A将RB反射给B)。在不出现这种攻击的环境中可省略标识符B。
- 如果使用单向密钥,可省略标识符B。