system: [SYSTEM]

user: 5. 优化后的SSL握手过程 优化后的握手协议部分通信过程如图3所示 [ 9 ] [ 10 ] [ 11 ] ： 1) SSL客户端通过Client Hello消息将它支持的SSL版本、加密算法、密钥交换算法、 h m a c 算法等信息发送给SSL服务器。 2) SSL服务器确定本次通信采用的SSL版本和加密套件，并通过Server Hello消息通知给SSL客户端。如果SSL服务器允许SSL客户端在以后的通信中重用本次会话，则SSL服务器会为本次会话分配会话ID，并通过Server Hello消息发送给SSL客户端。 3) SSL服务器将携带自己公钥信息的数字证书 P u b K C e r t S 和服务器公钥 P u b K S 发送给SSL客户端。 4) SSL服务器将自身的平台身份证书 P E K C e r t S 和对应的平台身份公钥 P E K S 发送给SSL客户端。 5) 服务器端封装封装SSL证书信息为 m 1 ： m 1 = ( P u b K S ， P u b K C e r t S ) ；TCM证书信息为 m 2 : m 2 = ( P E K S ， P E K C e r t S ) 。 6) 服务器端计算 m 1 的哈希值 h m 1 ： h m 1 = h m a c ( m 1 ) ；计算 m 2 的哈希值 h m 2 ： h m 2 = h m a c ( m 2 ) ；计算 m 1 、 m 2 的哈希值 h m 12 ： h m 12 = h m a c ( m 1 ‖ m 2 ) 。 7) 服务器端生成签名密钥对 K S 、 K P ，服务器端进行数字双签名得到 D S S ： D S S = a e n c ( m 12 ， K C S ) ，利用数字双签名将TCM平台身份证书和SSL证书关联在一起，表名此次SSL协议的特定平台环境为TCM中的信息。 8) 服务器端把 K S ， m 1 、 D S S 及 m 1 的哈希值 h m 1 发送给客户端TCM即 T C M C ，这样TCM只能得到 m 2 的杂凑值，但得不到 m 2 ；把 K P ， m 2 ， D S S 及 m 2 的哈希值 h m 2 发送给客户端主机 H c ，这样 H C 只能得到 m 1 的杂凑值而得不到 m 1 。 9) 客户端验证服务器端SSL证书 P u b K C e r t S 。 图3. SSL协议优化后的整体流程图 10) 客户端验证TCM平台身份证书 P E K C e r t S 。 11) 客户端进行SSL证书和TCM平台身份证书对应关系的认证： 计算 h m ′ 12 = a d e c ( D S S ， K P ) ；计算 h m 2 = h m a c ( m 2 ) ；验证方程 h m 12 = h m a c ( m 1 ‖ m 2 ) 是否成立，若成立则签名有效，继续以下步骤，否则终止此次协议。 12) 客户端发送 P E K C 和 P E K C e r t C 给服务器，服务器验证 P E K C 和 P E K C e r t C 。 13) 服务器发送Server Hello Done消息，通知SSL客户端版本和加密套件协商结束，开始进行密钥交换。 14) 服务器端 H S 调用 T C M _ C r e a t e K e e y E x c h a n g e (   ) ； 服务器 T S 接到调用后: a) 创建密钥协商会话，随机生成会话句柄 s h d Y b) 随机生成临时密钥私钥y，计算临时密钥公钥 Y = g y c) 将临时密钥对 ( y ， Y ) 存储在TCM中并与句柄 s h d Y 绑定； T S 返回 s h d Y ， s h d Y 给 H S ， H S 将Y发送给客户端 H C 。 15) 客户端 H C 随机生成一个预主密钥 P r e M a s t e r S e c r e t ； 客户端TCM即 T C ：a) 随机生成临时密钥私钥x，计算临时密钥公钥 X = g x b) 计算 s e e d = S M 2 K E ( P E K C ， P E K S ， Y ， X ) ， K 1 = k d f ( ' e n c r y p t i o n ' ， s e e d ) ， K 2 = k d f ( ' i n t e r g r i t y ' ， s e e d ) c) 计算 a = s e n c ( P r e M a s t e r S e c r e t ， K 1 ) ， b = h m a c ( a ， K 2 ) ， s b l o b = ( a ， b ) T C 返回X和 S b l o b 给 H C ， H C 将X和 s b l o b 传给 H S ， T C 同时删除临时密钥对 ( x ， X ) 。 16) 服务器端 T S ：1)计算 s e e d = S M 2 K E ( P E K C ， P E K S ， Y ， X ) ， K 1 = k d f ( ' e n c r y p t i o n ' ， s e e d ) ， K 2 = k d f ( ' i n t e r g r i t y ' ， s e e d ) 将 s b l o b 前32字节赋值给b，其余字节赋值给a 验证 b = h m a c ( a ， K 2 ) ， 计算 P r e M a s t e r S e c r e t = s d e c ( a ， K 1 ) ， 用SMK存储主密钥保护 P r e M a s t e r S e c r e t = s d e c ( a ， K 1 ) ： k e y B l o b = s e n c ( P r e M a s t e r S e c r e t ， S M K ) . 17) O S 调用 T C M _ R e l e a s e E x c h a n g e S e s s i o n ( s h d Y ) ， T S 接到调用后，删除 s h d Y 指向的临时密钥对 ( y ， Y ) 。 18) H S 利用协商好的算法及参数 V e r _ c 、 V e r _ s 计算得到主密钥 M a s t e r S e c r e t ，接着 H S 计算 F i n i s h e d 消息的内容，及哈希值： M D 5 ( M a s t e r S e c r e t + P a d 2 + M D 5 ( H a n d s h a k e M e s s a g e s + M a s t e r S e c r e t + P a d 1 ) )   + S H A ( M a s t e r S e c r e t + P a d 2 + S H A ( H a n d s h a k e M e s s a g e s + M a s t e r S e c r e t + P a d 1 ) ) 公式中 H a n d s h a k e M e s s a g e s 表示握手消息指从客户端问候消息开始的内不包括此消息在内的到这个步骤的信息， P a d 1 和 P a d 2 为填充字节。 服务器 H S 传送 C h a n g e C i p e r S p e c 、 F i n i s h e d 给客户端 H C 。客户端 H C 计算主密钥 M a s t e r S e c r e t = h m a c ( P r e M a s t e r S e c r e t ) ， H C 计算 F i n i s h e d 消息的内容： F i n i s h e d ′ = M D 5 ( M a s t e r S e c r e t + P a d 2 + M D 5 ( H a n d s h a k e M e s s a g e s + M a s t e r S e c r e t + P a d 1 ) )       + S H A ( M a s t e r S e c r e t + P a d 2 + S H A ( H a n d s h a k e M e s s a g e s + M a s t e r S e c r e t + P a d 1 ) ) 比较 F i n i s h e d ′ 和 F i n i s h e d ，相同表示消息未被篡改，最后客户端也将 F i n i s h e d ′ 发给服务器表示整个握手过程的结束。 服务器验证客户端发送的 F i n i s h e d ′ 消息，如果成立，则可以分块导出 M a s t e r S e c r e t 。