SSL安全协议中文版文档格式.docx
- 文档编号:22532406
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:57
- 大小:70.01KB
SSL安全协议中文版文档格式.docx
《SSL安全协议中文版文档格式.docx》由会员分享,可在线阅读,更多相关《SSL安全协议中文版文档格式.docx(57页珍藏版)》请在冰豆网上搜索。
按它们的优先级,SSL协议的目标是
●在通讯双方之间利用加密的SSL消息建立平安的连接。
●互操作性。
通讯双方的程序是独立的,即一方可以在不知道对方程序编码的情况下利用成功的交换加密参数。
注意:
并不是所有的SSL的实例〔甚至在同一应用程序内〕都可以成功的连接。
例如,如果效劳器支持一特定的硬件令牌(token),而客户端不能访问此令牌,那么连接不会成功。
●可扩展性。
SSL寻求提供一种框架结构,在此框架结构中,在不对协议进行大的修改的情况下,新的公钥算法和单钥算法可以在必要时被参加。
这样做还可以实现两个子目标
1.防止产生新协议的需要,因而进一步防止了产生新的缺乏的可能性。
2.防止了实现一完整的平安协议的需要。
相对的有效性。
加密操作,尤其是公钥加密,对CPU来说是一种很耗时的事,因此SSL协议引入一可选的对话缓存(CACHE)来减少从头开始的连接的数目。
同时,它还注意减少网络的活动。
五此文档的目的
SSL协议版本详细说明书的主要读者是要实现此协议的人和进行加密分析的人。
此详细说明书主要是为这两类人而写的,所以它时刻注意反映这两类人的需要。
因此在本详细说明书中〔而不是写在附录中〕以文本方式包含了许多与算法相关的数据结构和规那么,使它们易于被访问。
虽然本详细说明书包含了维护物理平安性所必须的策略,本详细说明书并不想提供关于效劳和界面的定义。
六描述语言〔Presentationlanguage〕
本文档主要是描述外部表示〔externalrepresentation〕的数据的格式,所以用到了以下简单、根底而有点随意的定义的表示语法,这些语法在结构上来自不同的出处。
虽然这些语法在结构上有点象程序设计语言C、在语法和目标上象XDR[XDR],但过分的强调这种类似是有害的。
本描述语言的目的仅仅是描述SSL。
6.1根本块长〔Basicblocksize〕
所有的数据项的表示均是显式说明的,根本数据块的长度为一字节〔也就是说8比特〕多字节的数据项是由从上至下、从左至右的多个字节连接组成。
从字节流的角度来看,一多字节的数据项〔在本例中是一数字〕是通过下述公式形成的:
value=(byte[0]<
<
8*(n-1))|(byte[1]<
8*(n-2))|...|byte[n-1];
这种字节的顺序关系是网络中常用的顺序关系即大endian格式。
6.2杂项
注释以“/*〞开始,以“*/〞结束。
可选的局部是由将其包含进斜体的括号“[]〞中而指定的。
单字节的包含不可解释的数据的实体的类型为opaque
6.3向量〔Vectors〕
向量(一维数组)是一同类型的数据元素的流,向量的规模可以在编写文档时说明,也可以留至运行时才指明;
不管在哪一种情况下,向量的规模〔即大小)是由向量中字节的个数而不是向量中元素的个数决定的。
说明一新类型T’是一固定长度的类型T的向量的语法为:
TT'
[n];
在这里,T’在数据流中占n比特,其中n是T的所占字节数的倍数。
向量中包含数据元素的个数没有包含在数据流之中。
在下例中,Datum被定义为三个连续的协议无法解释的字节的向量;
而Data被定义为三个连续的Datum,一共包含9个字节
opaqueDatum[3];
/*三个协议无法解释的字节*/
DatumData[9];
/*三个连续的包含三个字节的向量*/
可变长向量可以通过指明合法长度的范围,即形如<
最小长度..最大长度>
的形式来定义,在编码时,在字节流中实际长度应在向量的内容之前,此实际长度是以数字的形式存储的,此数字应能表示此向量的最大长度(ceilinglength)。
空向量指的是一实际长度为零的向量。
floor..ceiling>
;
在下例中,mandatory是一必须包含300到400字节的opaque类型数据的向量,它不能是空向量,其实际长度域占有两个字节,即uint16,足以表示400〔见节〕,而longer最多能表示800个字节,即400个uint16的数据元素,且<
请合法使用软件>
可以是空向量。
它的编码包含一两字节的实际长度域。
opaquemandatory<
300..400>
/*长度域为两个字节,不能为空向量*/
uint16longer<
0..800>
/*零至400个16比特的无符号整数*/
6.4数字〔Numbers〕
根本的数字的数据类型是无符号字节(uint8)。
其他所有的大的数字均是由节中描述的固定长度的字节流连接而成,且它们均是无符号的。
以下数字类型是预定义的:
uint8uint16[2];
uint8uint24[3];
uint8uint32[4];
uint8uint64[8];
6.5枚举〔Enumerate〕
另一类稀疏的数据类型是枚举〔enum〕,枚举类型的数据的取值范围只能是在其定义是声明的值。
每一次定义均定义了一不同的类型。
只有相同类型的枚举数据才可以相互赋值和比拟,枚举类型的每个枚举元素均必须象下例中所示的那样,被赋一个值。
由于枚举类型这的元素是没有顺序的,所以它们可以取任意顺序的不同的值。
enum{e1(v1),e2(v2),...,en(vn),[(n)]}Te;
枚举类型的值在字节流中占据的空间的大小是其定义的取值范围中最大的可能值所占的空间大小。
以下定义会使类型Color占有一个字节。
enum{red(3),blue(5),white(7)}Color;
你还可以通过指定一个无标签的值来强制枚举类型所占的字节数,这样就不需定义一冗余元素了。
在下例中,类型Taste在字节流中占两个字节但只能在1,2或4中取值。
enum{sweet
(1),sour
(2),bitter(4),(32000)}Taste;
枚举类型的元素的名字只在定义的类型中是有效的。
在第一个例子中,对类型Color中的第二个元素的完全限定引用为。
这样的限定当赋值的目标是被说明的时候时是可以忽略的。
Colorcolor=Color.blue;
/*重复说明,但是合法的*/
Colorcolor=blue;
/*正确,类型是隐含的*/
对于元素的值不会转化为外部表示的枚举类型,元素的取值信息是可以省略的。
enum{low,medium,high}Amount;
6.6结构〔Constructedtype〕
结构类型可以由根本的数据类型方便的建成,每一次说明均声明了一新的、唯一的类型,定义的语法类似于C语言中结构的定义。
struct{
T1f1;
T2f2;
...
Tnfn;
}[T];
在一结构中的各域可以象枚举中引用元素时的语法一样用类型名加域名引用,例如2引用的是上例中的第二个域,结构的定义可以嵌套。
6.6.1变体结构〔Variant〕
定义结构时可能根据环境的不同而有不同的变体,选择器必须为枚举类型的数据,以定义结构中可能的变体,且必须用case语句将select中声明的每个枚举元素不会起来。
变体结构的结构体可以有一供其引用的标签。
在运行时如何决定变体的机制并没有在描述语言中规定。
select(E){
casee1:
Te1;
casee2:
Te2;
....
caseen:
Ten;
}[fv];
}[Tv];
例如:
enum{apple,orange}VariantTag;
uint16number;
opaquestring<
0..10>
/*可变的长度*/
}V1;
uint32number;
opaquestring[10];
/*固定的长度*/
}V2;
select(VariantTag){/*变体的选择器是隐含的*/
caseapple:
V1;
/*VariantBody的定义,标签=apple*/
caseorange:
V2;
/*VariantBody的定义,标签=orange*/
}variant_body;
/*可选的变体标签*/
}VariantRecord;
变体结构可以通过在类型前指定选择器的值来限定〔narrowed〕,例如:
orangeVariantRecord
是类型VariantRecord的一限定,它包含类型为V2的variant_body。
6.7加密属性〔Cryptographicattribute〕
数字签名、流加密、块加密和公钥加密这四项加密操作的加密属性分别为digitally-signed,stream-ciphered,block-ciphered和public-key-encrypted。
对一个域进行何种加密操作是由在此域的类型说明前的适宜的加密属性〔关键字〕决定的,加密的密钥是由当前对话状态字隐含给出的〔见节〕。
在数字签名中,输入为一单向哈希函数〔one-wayhashfunction〕。
当用RSA算法进行签名时,用签名私钥对一36字节的结构进行签名,此36字节的结构是由两个哈希函数生成的,一个为SHA,另一个是MD5。
当用DSS算法进行签名时,可以直接对由SHA哈希函数生成的20字节的结构进行签名。
在流加密中,明文的长度与由密钥产生的密文的长度是相同的。
此密钥是由伪随机数发生器生成的平安的密钥,是根据时间的变化而变化的。
在块加密中,密文的每一块均被加密成一块密文。
由于明文的长度并不是固定的,所以有可能在对明文〔发出的数据〕分块时产生一不满的块〔块的长度通常为64比特〕,此时就需要将此不满的块的剩余局部填充数据,一般来说是填零。
在公钥加密中,单向限门函数被用来加密要发出的数据,用一给定公钥加密的数据仅能由相应的私钥解出,同样用一给定私钥加密的数据仅能由相应的公钥解出。
在下例中:
stream-cipheredstruct{
uint8field1;
uint8field2;
digitally-signedopaquehash[20];
}UserType;
哈希函数的结果做为签名算法的输入,整个结构UserType用流加密进行加密。
6.8常量〔Constant〕
有类型的常量可以通过在常量名前加上所希望的类型,并在常量名后给其赋上所期待的值来定义。
未限定的类型〔opaque,可变长向量,变体结构及带有opaque的结构〕不能被赋值。
多元素的结构和向量的所有域均应被赋值。
uint8f1;
uint8f2;
}Example1;
Example1ex1={1,4};
/*令f1=1,f2=4*/
七、SSL协议
SSL是一层次化协议。
在每一层,消息均可以包含描述长度、消息的描述及消息的内容的域。
SSL在传输消息时,首先将消息分为其可处理的数据块,可以进行压缩,将其封装为一带消息验证〔MAC〕的包,随之进行加密并传输所得到的加密后的消息。
在收到消息时,首先解密,然后验证、解压缩并重新组合得到原有的消息,将此消息发向较高的层次。
7.1对话及连接状态
SSL的对话是有状态的,是由SSL的握手协议来同步客户端和效劳器的状态的,因而允许它们一致的操作而不管它们的协议状态是否是并行的。
从逻辑上讲,状态被提到了两次,一次是当前的操作状态,而另一次是在握手协议中的未决状态。
而且,还维持单独的读状态和写状态。
当客户端或效劳器收到changecipherspec消息时,它将未决读状态复制到当前读状态。
当客户端或效劳器发出changecipherspec消息时,它将未决写状态复制到当前写状态。
当握手协商完毕时,客户端或效劳器将彼此交换changecipherspec消息〔见节〕,这样它们就可以用新同意的cipherspec来进行通信了。
SSL对话可以包含假设干次平安连接,而且每一方均可以同时有多个对话。
对话状态包含以下元素:
对话标识一由效劳器为标识当前活泼的对话或重新开始的对话而随机
选取的字节流。
对等证书对等方的X509.v3[X509]证书,状态的此元素可以为空。
压缩方法在加密之前压缩数据所采用的算法。
加密说明指出所采用的数据加密算法〔如没有采用加密算法,采用DES
等〕和作消息文摘的算法〔如MD5,SHA等〕,它还定义象
hash_size一类的加密的属性〔见附录〕
主共享的秘密客户端和效劳器所共享的48比特的共享的秘密。
是否可以重开始一标识此对话是否可以用来初始化新的连接的标志。
连接状态包含以下元素:
客户端和效劳器的随机数由客户端和效劳器为建立一次连接而随机选取的一字
节流。
效劳器的MAC写共享秘密效劳器在对数据进行消息验证〔MAC〕操作时所使用的
共享的秘密。
客户端的MAC写共享秘密客户端在对数据进行消息验证〔MAC〕操作时所使用的
效劳器的写密钥效劳器在对数据进行加密时所使用的加密密钥,此密
钥也是客户端进行解密时的解密密钥。
客户端的写密钥客户端在对数据进行加密时所使用的加密密钥,此密
钥也是效劳器进行解密时的解密密钥。
初始化向量当用CBC方式进行块加密时,对于每一密钥系统都将维
护一初始化向量(IV)。
此域的值是由SSL握手协议进行
初始化的,为以后使用的方便此后的每一记录的最终的
密文块被保存在记录的后面。
序列号参与连接的每一方都为其发出的和收到的消息维护一独
立的序列号。
当一方发出或收到ChangeCipherspec
消息时,其序列号置为零。
序列号的类型为Unit64,所
以序列号不能超过264-1。
7.2记录层
SSL记录层由更高的层次那里接收未加解释的任意长度的非空块。
7.2.1打包
记录层将信息块分裂为小于或等于214字节的SSLPlainText记录。
客户端消息的界限并不反映至记录层中〔也就是说,具有同样ContentType的多个客户消息可能会合并为一SSLPlaintext记录)。
struct{
uint8major,minor;
}ProtocolVersion;
enum{
change_cipher_spec(20),alert(21),handshake(22),
application_data(23),(255)
}ContentType;
ContentTypetype;
ProtocolVersionversion;
uint16length;
opaquefragment[SSLPlaintext.length];
}SSLPlaintext;
其中
type指出采用打包的更高层次的协议。
version协议的版本号。
此文档所描述的是SSL版本3.0(见附录A.1.1).
lengthSSLPlaintext的字节长度,此长度不应超过214
fragment应用数据。
此数据对由Type域中所指出的更高层次的协议是透明的,并被
视为一独立的块。
不同的SSL记录层的CententType数据可以交叉存取,应用数据一般要比其他的
ContentType数据要求更低级的传输过程。
7.2.2记录的压缩和解压缩
所有的记录均应用在当前的对话状态中定义的压缩算法进行压缩。
一般地,此算法为当前活泼的压缩算法,但在初始化时它被定义成。
压缩算法将SSLPlaintext结构转换为SSLCompressed结构,当CipherSpec变换后,压缩函数将删除其状态信息。
CipherSpec是在节中所描述的对话状态的一局部,对CipherSpec中各域的引
用在本文档中是用表示语法来表达的。
关于CipherSpec的更加详细的描述见附录
A.7.
压缩必须是无损压缩且对原文的长度的增加不超过1024比特。
如果解压缩函数遇到一待解的超过214比特的,它将产生一终止的decompression_failure报警(见节)。
/*sameasSSLPlaintext.type*/
/*sameasSSLPlaintext.version*/
opaquefragment[SSLCompressed.length];
}SSLCompressed;
的长度〔单位:
字节)。
长度不应超过214+1024。
的压缩格式。
操作Com是一标识性操作,没有任何一个域的值被改变
(见附录A.4.1)。
实现时请注意:
解压缩函数的责任是保证消息不会造成内部的缓冲区溢出。
7.2.3记录的有效负荷保护和加密说明〔CipherSpec〕
所有的记录均用在当前的加密说明〔CipherSpec〕中定义的加密算法和消息验证〔MAC〕算法所保护,一般地,在SSL内部有一活泼的CipherSpec,但在初始化时,它的值为SSL_NULL_WITH_NULL_NULL,从值并不提供任何平安性。
只有当握手结束后,参与双方共享一用于加密记录和计算消息验证码〔MACs〕的公共秘密。
进行加密和消息验证〔MAC〕操作的技术有CipherSpec定义,并受的限制。
加密和消息验证〔MAC〕函数将一SSLCompressed结构转换为一SSLCiphertext结构,解密函数作相反的过程。
传输时将包含一序列号,这样当包丧失、被改变或包被重复收到时可以及时的发现。
select(CipherSpec.cipher_type){
casestream:
GenericStreamCipher;
caseblock:
GenericBlockCipher;
}fragment;
}SSLCiphertext;
type类型域被指定为pe。
version版本域被指定为。
length指明随后的的长度〔单位:
长度不应
超过214+2048。
fragment包含消息验证码〔MAC〕的加密后的形式。
7.2.3.1Null或标准的流加密
流加密〔包含BulkCipherAlgorithm.null–见附录〕将结构转换为SSLCiphertext.fragment流结构,或者反之,将结构转换为SSLCompressed.fragment流结构。
stream-cipheredstruct{
opaquecontent[SSLCompressed.length];
opaqueMAC[CipherSpec.hash_size];
}GenericStreamCipher;
产生的消息验证码〔MAC〕形式为:
hash(MAC_write_secret+pad_2+
hash(MAC_write_secret+pad_1+seq_num+length+content));
其中“+〞表示将前后连接起来。
pad_1字符0x36在MD5算法中重复48次或在SHA算法中重复40次。
pad_2字符0x5c,与pad_1一样的重复。
seq_num从消息的序列号。
hash由cipher组合所决定的杂凑算法。
请注意,消息验证码〔MAC〕在加密之前就计算出来了。
流加密加密的是包含消息验证码〔MAC〕在内的整个块。
对于不用同步向量的流加密方法〔如RC4),在记录后边的流加密方法的状态被简单的用在随后的包中,假设CipherSuite是SSL_NULL_WITH_NULL_NULL,且加密包含指定的操作〔也就是说,数据还未被加密且消息验证码〔MAC〕的长度为零,标志着不使用消息验证码〔MAC〕〕,那么SSLCiphertext的长度是SSLCompressed的长度与的和。
密码分组链接〔CBC〕块加密
对于块加密〔象RC2或DES),加密和消息验证〔MAC〕函数将结构转换成块结构。
block-cipheredstruct{
opaquecontent[SSLCompressed.length];
opaqueMAC[CipherSpec.hash_size];
uint8padding[GenericBlockCipher.p
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SSL 安全 协议 中文版