GB/T 38636-2020
基本信息
标准号:
GB/T 38636-2020
中文名称:信息安全技术 传输层密码协议(TLCP)
标准类别:国家标准(GB)
标准状态:现行
出版语种:简体中文
下载格式:.zip .pdf
下载大小:1995202
相关标签:
信息安全
技术
密码
协议
标准分类号
关联标准
出版信息
相关单位信息
标准简介
GB/T 38636-2020.Information security technology-Transport layer cryptography protocol(TLCP).
1范围
GB/T 38636规定了传输层密码协议,包括记录层协议、握手协议族和密钥计算。
GB/T 38636适用于传输层密码协议相关产品(如SSL VPN网关、浏览器等)的研制,也可用于指导传输层密码协议相关产品的检测、管理和使用。
2规范性引用文件
下列文件对于本文件的应用是必不可少的。凡是注日期的引用文件,仅注日期的版本适用于本文件。凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文件。
GB/T 20518信息安全技术 公钥基 础设施数字证书格式规范
GB/T 35275信息安全技术 SM2 密码算法加密签名消息语法规范
GB/T 35276信息安全技术 SM2 密码算法使用规范
3术语和定义
下列术语和定义适用于本文件。
3.1
数字证书 digital certificate
由证书认证机构(CA)签名的包含公开密钥拥有者信息、公开密钥、签发者信息.有效期以及扩展信息的一种数据结构。
注:按类别可分为个人证书、机构证书和设备证书,按用途可分为签名证书和加密证书。
3.2
IBC算法 identity based cryptography algorithm
一种能以任意标识作为公钥,不需要使用数字证书证明公钥的非对称密码算法。
3.3
IBC标识 IBC identity
表示实体身份或属性的字符串。
3.4
IBC公共参数 IBC public parameter
包含了IBC密钥管理中心的名称、运算曲线、标识编码方式和密钥生成算法等公开参数信息。
注:参数信息用于将实体标识转换为公开密钥。
3.5
初始化向量/值 initialization vector ; initialization value;IV
在密码变换中,为增加安全性或使密码设备同步而引人的用作数据变换的起始数据。
标准内容
ICS35.040
中华人民共和国国家标准
GB/T38636—2020
信息安全技术
传输层密码协议(TLCP)
Information security technologyTransport layer cryptography protocol(TLCP)2020-04-28发布
国家市场监督管理总局
国家标准化管理委员会
2020-11-01实施
GB/T38636—2020
规范性引用文件
术语和定义
符号和缩略语
密码算法和密钥种类
密码算法
密钥种类
6协议
数据类型定义
记录层协议
握手协议族
密钥计算
附录A(规范性附录)
参考文献
GCM可鉴别加密模式
本标准按照GB/T1.1-2009给出的规则起草GB/T38636—2020
请注意本文件的某些内容可能涉及专利。本文件的发布机构不承担识别这些专利的责任。本标准由全国信息安全标准化技术委员会(SAC/TC260)提出并归口。本标准起草单位:山东得安信息技术有限公司、格尔软件股份有限公司、北京信安世纪科技有限公司、成都卫士通信息产业股份有限公司、长春吉大正元信息技术股份有限公司、北京握奇智能科技有限公司、北京三未信安科技发展有限公司、北京海泰方圆科技有限公司、国家密码管理局商用密码检测中心、北京江南天安科技有限公司、中金金融认证中心有限公司、北京天融信网络安全技术有限公司。本标准主要起草人:郑强、马洪富、汪宗斌、罗俊、赵丽丽、张立廷、汪雪林、田敏求、张岳公、蒋红宇、吕春梅、李国、孙圣男、雷晓锋1
1范围
信息安全技术
传输层密码协议(TLCP)
本标准规定了传输层密码协议,包括记录层协议、握手协议族和密钥计算。GB/T38636-—2020
本标准适用于传输层密码协议相关产品(如SSLVPN网关、浏览器等)的研制,也可用于指导传输层密码协议相关产品的检测、管理和使用。规范性引用文件
下列文件对于本文件的应用是必不可少的。凡是注日期的引用文件,仅注日期的版本适用于本文件。凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文件。GB/T20518信息安全技术公钥基础设施数字证书格式规范信息安全技术SM2密码算法加密签名消息语法规范GB/T35275
KaeeiKAca
GB/T35276
术语和定义
信息安全技术SM2密码算法使用规范下列术语和定义适用于本文件。3.1
digital certificate
数字证书
由证书认证机构(CA)签名的包含公开密钥拥有者信息、公开密钥、签发者信息、有效期以及扩展信息的一种数据结构
注:按类别可分为个人证书、机构证书和设备证书,按用途可分为签名证书和加密证书3.2
IBC算法identitybasedcryptographyalgorithm一种能以任意标识作为公钥,不需要使用数字证书证明公钥的非对称密码算法。3.3
IBC标识IBCidentity
表示实体身份或属性的字符串。3.4
IBC公共参数
IBCpublicparameter
包含了IBC密钥管理中心的名称、运算曲线、标识编码方式和密钥生成算法等公开参数信息。注:参数信息用于将实体标识转换为公开密钥3.5
初始化向量/值initializationvector;initializationvalue;IV在密码变换中,为增加安全性或使密码设备同步而引人的用作数据变换的起始数据。4
符号和缩略语
4.1符号
下列符号适用于本文件
GB/T38636—2020
十:串联。
:异或运算。
0”:包含s个“0\比特的比特串。CIPHk(X):对于密钥为K,分组为X的分组密文的输出。GCTRk(ICB.X):对于比特串为X.初始技术分组为ICB,密钥为K的GCTR函数的输出。GHASH(X):对于杂密钥为H,比特串为H的GHASH的输出。HMAC(X,Y):以X为密钥对Y进行密码杂运算。inc,(X):比特串X的最右边比特的递增输出。int(X):比特串X的整数表示。
len(X):比特串X的长度。
LSB,(X):比特串X的最右段的s位比特串。MSB(X):比特串X的最左端的s位比特串。XI[Y:比特串X与比特串Y的连接A:附加可鉴别的数据。
C.密文。
H:杂凌子密钥。
K:分组密钥。
P:明文。
iKaeeiKAca
R:算法中用于分组乘法运算的常数T:鉴别标签。
t:鉴别标签的长度
2缩略语
下列缩略语适用于本文件。
AEAD:带额外数据的认证加密(AuthenticatedEncryptionwithAddationData)ADD:附加鉴别数据(AdditionalAuthenticatedData)CBC:密码分组链接工作模式(CipherBlockChaining)CTR:计数器(Counter)
DN:识别名(DistinguishedName)GCM:Galois计数器模式(GaloisCounterModeHMAC:采用杂凑算法计算的消息验证码(Hash-basedMessageAuthenticationCode)IBC:标识密码算法(Identity-BasedCryptography)ICB:初始计数器分组(InitialCounterBlock)IV:初始向量(InitializationVector)LSB:最低端比特(LeastSignificantBit)MSB:最高端比特(MostSignificantBit)TLCP:传输层密码协议(TransportLayerCryptographyProtocol)XOR:异或(Exclusive-OR)
密码算法和密钥种类
5.1概述
TLCP是利用密码技术,为两个应用程序之间提供保密性和数据的完整性。协议用到的密码算法2
GB/T38636-—2020
包含非对称密码算法、分组密码算法、密码杂凑算法、数据扩展函数和伪随机函数,协议用到的密钥种类包含服务端密钥、客户端密钥、预主密钥、主密钥和工作密钥。5.2密码算法
5.2.1非对称密码算法
用于身份鉴别、数字签名、密钥交换等。5.2.2分组密码算法
用于密钥交换数据的加密保护和报文数据的加密保护。采用的工作模式应为GCM或CBC模式,5.2.3密码杂凑算法
用于对称密钥生成和完整性校验。5.2.4数据扩展函数P_hash
P_hash函数定义如下:
P_hash(secret,seed)=HMAC(secret,A(l)+seed)+HMAC (secret, A(2)+ seed)
HMAC (secret, A(3) + seed)
iKaeeiK
其中:
secret是进行计算所需要的密钥。seed是进行计算所需要的数据。A(0)=seed
A(i) =HMAC (secret,A(i-L))
P_hash能够反复送代直至产生要求长度的数据。5.2.5伪随机函数PRF
PRF的计算方法如下:
PRF(secret,label,seed)=P_hash(secret,label+seed)5.3密钥种类
5.3.1概述
采用非对称密码算法进行身份鉴别和密钥交换,身份鉴别通过后协商预主密钥,双方各自计算主密钥,进而推导出工作密钥。使用工作密钥进行加解密和完整性校验5.3.2服务端密钥
服务端密钥为非对称密码算法的密钥对,包括签名密钥对和加密密钥对,其中签名密钥用于握手过程中服务端身份鉴别,加密密钥对用于预主密钥的协商。5.3.3客户端密钥
客户端密钥为非对称密码算法的密钥对,包括签名密钥对和加密密钥对,其中签名密钥用于握手过程中客户端身份鉴别,加密密钥对用于预主密钥的协商。3
GB/T38636—2020
5.3.4预主密钥
预主密钥(pre_master_secret)是双方协商生成的密钥素材,用于生成主密钥。5.3.5主密钥
主密钥(master_secret)由预主密钥、客户端随机数、服务端随机数、常量字符串,经计算生成的48字节密钥素材,用于生成工作密钥。5.3.6工作密钥
工作密钥包括数据加密密钥和校验密钥。其中数据加密密钥用于数据的加密和解密,校验密钥用于数据的完整性计算和校验。发送方使用的工作密钥称为写密钥,接收方使用的工作密钥称为读密钥。6协议
6.1概述
TLCP包括记录层协议和握手协议族,握手协议族包含密码规格变更协议、报警协议及握手协议。KAca
6.2数据类型定义
6.2.1基本数据类型
定义了六种基本数据类型,分别为opaque、uint8uint16、uint24、uint32、uint64。所有类型都以网络字节顺序表示,最小数据的大小是一个8位宇节opaque:任意类型数据.1个字节。uint8:无符号的8位整数,1个字节。uint16:无符号的16位整数,2个字节。uint24:无符号的24位整数,3个字节,uint32:无符号的32位整数,4个字节,uint64:无符号的64位整数,8个字节6.2.2向量
向量(Vectors)是给定类型的数据序列。向量分为两种:定长和变长。定长向量以x来表示:变长向量以(x..y)来表示,其中x代表下限,y代表上限,如果只需表达上限时,用6.2.3枚举类型
枚举(Enumerateds)是一系列特定值的字段集合,通常每个字段都包括一个名称和值。如果包含一个未命名的值,这个值表示指定的最大值。如果只包含了名称而不定义值,只能用来指代状态值,不能在实际编码中使用。例如,enum(red(o),green(1),(255))color。枚举变量大小为能够容纳最大枚举值的最小字节数
6.2.4结构类型
结构类型(ConstructedTypes)用struct来定义,与C语言的struct语法类似。struct中的字段按4
GB/T38636-—2020
照先后顺序串连起来进行编码。如果一个struct包含于另一个struct中,则可以省略该struct的名字。6.2.5变体类型
变体(Variants)类型用select、case来定义,用于定义依赖外部信息而变化的结构,类似于C语言中的union或ASN.1的CHOICE。
6.3记录层协议
6.3.1概述
记录层协议是分层次的,每一层都包括长度字段、描述字段和内容字段。记录层协议接收将要被传输的消息,将数据分块、压缩(可选)、计算HMAC、加密,然后传输。接收到的数据经过解密、验证、解压缩(可选)、重新封装然后传送给高层应用记录层协议包括:握手、报警、密码规格变更等类型。为了支持协议的扩展,记录层协议可支持其他的记录类型。任何新的记录类型都应在针对上述类型分配的内容类型值之外去分配。如果接收到一个不能识别的记录类型应忽略
6.3.2连接状态
连接状态是记录层协议的操作环境。包括四种典型的连接状态:当前读状态、写状态、未决的读状态、未决的写状态。其中,读表示接收数据,写表示发送数据,所有记录都是在当前读写状态下处理的。未决状态的安全参数可以由握手协议设定,而密码规格变更消息可使未决状态变为当前状态。除了最初的当前状态外,当前状态应包含经过协商的安全参数Kaee
连接状态的安全参数结构如下:struct
ConnectionEnd
BulkCipherAlgorithm
CipherType
MACAlgorithm
CompressionMethod
opaque
opaque
opaque
SecurityParameters:
其中:
a) ConnectionEnd
entity;
bulk_cipher_algorithm;
cipher_type;
key_material_length;
mac_algorithm;
hash_size;
compression_algorithm;
master_secret[48];
client_random[32];
server_random[32];
record_iv_length;
fixed_iv_length;
mac_length;
表示本端在连接中的角色,为客户端或服务端。定义为:enum server,client ConnectionEnd。b)BulkCipherAlgorithm
用于数据加解密的密码算法。定义为:N
GB/T38636—2020
enum(sm4)BulkCipherAlgorithm。c)
CipherType
表示密码算法的类型。定义为:enum(block)CipherType。
key_material_length
表示密钥材料的长度
MACAlgorithm
用于计算和校验消息完整性的密码杂凌算法。定义为:enum(sha_256,sm3)MACAlgorithm。f)hash_size
表示杂凑的长度。
CompressionMethod
用于数据压缩的算法。定义为:enum(null(0).(255))CompressionMethod。h)master_secret
在协商过程中由预主密钥、客户端随机数、服务端随机数计算出的48字节密钥,i)client_random
由客户端产生的32字节随机数据。j)server_random
由服务端产生的32字节随机数据。k)record_iv_length
初始向量的长度。
fixed_iv_length
固定的初始向量长度。
m)mac_length
MAC长度。
记录层将使用上述安全参数来生成下列内容:客户端写校验密钥clientwriteMACsecret。服务端写校验密钥serverwriteMACsecret客户端写密钥clientwritekey。服务端写密钥serverwritekey。客户端写初始向量clientwriteiv。服务端写初始向量serverwriteiv。服务端接收和处理记录时使用客户端写参数,客户端接收和处理记录时使用服务端写参数。用安全参数生成这些密钥的算法,见6.5。密钥生成后,连接状态就可以改变为当前状态。6.3.3记录层
6.3.3.1概述
记录层接收从高层来的任意大小的非空连续数据,将数据分段、压缩、计算校验码、加密,然后传输。接收到的数据经过解密、验证、解压缩、重新封装然后传送给高层应用。6.3.3.2分段
记录层将数据分成214字节或者更小的片段6
每个片段结构如下:
struct
ContentType type;
ProtocolVersion version;
uint16 length;
opaquefragment[TLSPlaintext.length];)TLSPlaintext;
其中:
a)Type:
片段的记录层协议类型。定义为:enum
change_cipher_spec(20),alert(21).handshake(22),application_data(23),(255)ContentType:
b)Version:
所用协议的版本号。这里的版本号为1.1。定义为:structt
uint8major=0xo01,
uint8 minor=0x0l;
)ProtocolVersion;
length
以字节为单位的片段长度,小于或等于214。d)
fragment
将传输的数据。记录层协议不关心具体数据内容。6.3.3.3
压缩和解压缩
GB/T38636—2020
所有的记录都使用当前会话状态指定的压缩算法进行压缩。当前会话状态指定的压缩算法被初始化为空算法。
压缩算法将一个TLSPlaintext结构的数据转换成一个TLSCompressed结构的数据压缩后的数据长度最多只能增加1024个字节。如果解压缩后的数据长度超过了214个字节,则报告一个decompressionfailure致命错误。压缩后数据结构如下:
struct
ContentType type;
ProtocolVersion version;
uintl6length:
opaque fragment[TLSCompressed.length] TLSCompressed;
其中:
a)type、version的定义同6.3.3.2中的a)、b)。b)length
以字节为单位的TLSCompressed.fragment长度,小于或等于21t+1024。c)
fragment
GB/T38636—2020
TLSPlaintext.fragment的压缩形式。6.3.3.4加密和校验
6.3.3.4.1概述
加密运算和校验运算把一个TLSCompressed结构的数据转化为一个TLSCiphertext结构的数据。解密运算则是执行相反的操作。加密后数据结构如下:
struct
ContentTypetype;
ProtocolVersionversion;
uint16 length;
select(CipherSpec.cipher_type)(caseblock:GenericBlockCipher;case aead:GenericAEADCipher;fragment;
TLSCiphertext;
其中:
type、version的定义同6.3.3.2中a)、b)。a)
b)length
以字节为单位的TLSCiphertext.fragment长度,小于或等于214+2048。fragmentbzxz.net
带有校验码的TLSCompressed.fragment加密形式。校验算法的数据处理
6.3.3.4.2
校验码的计算是在加密之前进行,运算方法如下:HMAC_hash(MAC_write_secret,seq_num+TLSCompressed.type+TLSCompressed.version+TLSCompressed.length+TLSCompressed.fragment)其中:
seq_num
序列号。每一个读写状态都分别维持一个单调递增序列号。序列号的类型为uint64,序列号初始值为零,最大不能超出264一1。序列号不能回绕。如果序列号溢出,那就应重新开始握手。
b)hash
计算校验码时使用的杂凑算法。6.3.3.4.3分组密码算法的数据处理使用分组密码算法加解密数据时,加密运算和校验运算用于将一个TLSCompressed.fragment结构的数据转换成一个TLSCiphertext.fragment结构的数据。被加密的数据包括了校验运算的结果。加密处理前数据结构如下:
structf
opaqueIV[SecurityParameters,record_iv_length]block-ciphered struct
opaque content[TLScompressed.length];opaqueMAC[SecurityParameters,mac_length]uint8 padding_length;
uint8padding[GenericBlockCipher.padding_length];;
)GenericBlockCipher;
其中:
a)IV
在GenericBlockCipher中传输的初始化向量。该向量应随机产生SecurityParameters.record_iv_lengthb)s
IV的长度,其缺省值与使用的密码套件相关。c)
SecurityParameters.mac_lengthMAC的长度,其缺省值与使用的密码套件相关。d)Content
加密前的明文数据。
Content的校验值。
Padding
GB/T38636-—2020
填充的数据。在数据加密前需要将数据填充为密码算法分组长度的整数倍,填充的长度不能超过255个字节。填充的每个字节的内容是填充的字节数。接收者应检查这个填充,如果出错,发送bad_record_mac报警消息。6.3.3.4.4认证加密算法(AEAD)的数据处理使用认证加密算法加解密时,认证加密函数在TLSCompressed.fragment结构和认证加密TLSCi-phertext.fragment结构之间进行转换。认证加密AEAD密码的输人是一个密钥、二个随机数、明文和额外认证数据。密钥是客户端写密钥或服务端写密钥,根据是哪一端进行加密来确定。struct
opaquenonce_explicit[SecurityParameters.record_iv_length];aead-ciphered struct (
opaquecontent[TLSCompressed.length];GenericAEADCipher
每个AEAD密码套件应指定怎样构造提供给AEAD操作的随机数,以及GenericAEADCiphernonce_explicit部分的长度大小。AEAD加密模式一般采用计数器模式。AEAD使用的随机数应由显式和隐式两部分组成,显式部分即nonceexplicit,客户端和服务端使用的隐式部分分别来自client_write_iv和server_write_iv。AEAD使用的随机数和计数器的构造方式参见RFC5116。额外认证数据(additional_data)定义如下:additional_data=seq_num+TLSCompressed.type+TLSCompressed.version + TLSCompressed.length;AEAD的输出是由AEAD加密操作的密文输出组成。其长度通常比TLSCompressed.length长,但是多出的长度在AEAD密码算法中并不统一。因为密码算法可能包括了填充,所以开销的数量可能随着不同的TLSCompressed.length值而不同。每个AEAD密码算法生成的扩展应不能多于1024
小提示:此标准内容仅展示完整标准里的部分截取内容,若需要完整标准请到上方自行免费下载完整标准文档。