system: [SYSTEM]

user: 2. 认证密钥协商协议 2.1. 系统结构 空间网络通信系统拓扑结构如图1所示，由各类卫星节点，空中节点，和地面各类节点组成，能够完成空、天、地一体化通信网络贯通 [ 7 ] 。卫星作为其关键通信节点，通过星间链路与空间节点互相联系，利用星地通道与地面基站、近空节点、海上节点等有机结合，进行各类信息的接收、处理和传输 [ 8 ] 。 本系统包含一个公私钥对的计算与生成方案设计和密钥协商协议的设计。方案由地面控制中心 [ 9 ] 为各节点计算公钥和对应私钥，并在应用部署之前通过安全通道分发到位。当各类节点在空间网络中完成基础通信链路的搭建后，需要进行业务安全通信传输时，节点双方通过根据协议流程，协商产生本次通信使用的会话密钥 [ 10 ] 。 图1. 空间网络系统拓扑结构图 2.2. 系统初始化 地面控制中心作为整个系统，首先选择固定参数 k ( k > 0 ) ，利用组合公钥的思想按照如下步骤生成系统初始化参数并向各节点公开： 1) 生成一个k比特的素数p，选择阶为q的有限域 F p 。在 F p 上选择两个数 a ， b ∈ F p ，满足 4 a 3 + 27 b 2 ≠ 0 mod p ，以 a ， b 为参数，生成椭圆曲线： E ( a ， b ) : y 2 ≡ x 3 + a x + b mod p 。 2) 在 E ( a ， b ) 上选择一个阶为素数n的基点P，根据相应算法随机选取 x i j ∈ G F ( p ) ，其中 1 ≤ i ≤ m ， 1 ≤ j ≤ n ， m ∈ Z + ， n ∈ Z + 。构造 m × n 的私钥种子矩阵 X P R ，有 X P R = [ x 11 x 12 ⋯ x 1 n x 21 x 22 ⋯ x 2 n ⋮ ⋮ ⋮ x m 1 x m 2 ⋯ x m n ] (1) 根据已得到的 X P R 生成对应的公钥种子矩阵 Y P R ， y i j = x i j P ， 1 ≤ i ≤ m ， 1 ≤ j ≤ n ，能够得出 Y P R = [ y 11 y 12 ⋯ y 1 n y 21 y 22 ⋯ y 2 n ⋮ ⋮ ⋮ y m 1 y m 2 ⋯ y m n ] (2) 3) 选择两个单向哈希数 H 1 : { 0 ， 1 } * → Z n * ; H 2 : { 0 ， 1 } * → Z p * ，完成系统初始化，向所有节点成员公开参数 { E ( a ， b ) ， X P R ， Y P k ， P ， H 1 ， H 2 } 。 2.3 密钥种子对的生成 现在，系统根据每个节点设备的用途及型号为他们确认唯一的ID号 I D ∈ { 0 ， 1 } * ，同时创建ID链表来存储它们的ID信息，并根据节点ID按照下列步骤生成节点种子密钥对。 1) 根据公式 H 1 ( I D ) = h 1 ⋯ h i ⋯ h n ，计算出节点的散列值， h i 是长度为1的二进制比特串，转化成十进制数为 a i ，容易知道 i ∈ [ l ， n ] ， a i ∈ [ 0 ， m ) 。 2) 从2.2中的 X P R 矩阵中选出节点私钥种子 S e e d X I D = { x a l ， l ， ⋯ ， x a i i ， ⋯ ， x a n n } ，其中 x a i i 为私钥种子矩阵 X P R 中第 a i 行，第i列对应的值。 3) 从2.2节中的 Y P R 中选取公钥种子 S e e d Y I D = { y a 1 ， 1 ， ⋯ ， y a i i ， ⋯ ， y a n n } ，其中 y a i i 为 Y P R 中第 a j 行，第j列对应的值。 4) 将节点的公私钥种子对 ( S e e d X I D ， S e e d Y I D ) 存储到对应节点，同时将自己的公钥 P K B S 分发给所有的节点。 2.4. 节点密钥对的生成 1) 节点通过定位模块收集自己所在位置信息 L C s 和当前时间 T S ，生成密钥参数 K P S = { I D S | | L C S | | T S } ，其中 I D S 是节点S的类型标识。 2) 计算密钥参数的散列值： H 2 ( K P S ) = k p S i ⋯ k p S j ⋯ k p S n ，其中 k p S i 是 H 2 ( K P S ) 的第i比特。 3) 结合节点S的公私钥种子对 ( S e e d X S ， S e e d Y S ) ，计算得到节点S的私钥 d S 和公钥 K S ，其中 k p S i ∈ H 2 ( d S ) ， x S i i ∈ S e e d X S ， y s i j ∈ S e e d Y S ，则有 d S = ∑ i = 1 n k p S i x s i i mod p (3) K S = ∑ i = 1 n k p S i y s i i mod p (4) 4) 节点S保存自己的公私钥 ( d S ， K S ) ，结束密钥对生成阶段。 2.5. 密钥协商 当空间网内节点U和S需要建立通话时，完成互相认证并且协商生成一个会话密钥，设节点U，S的公钥，私钥分别是 ( d U ， K U ) ， ( d S ， K S ) ，协商密钥详细过程如下： 1) 节点U选择一个随机数 u 1 ， u 2 ∈ Ζ n * ，并且计算 { R u 1 = u 1 P ，   R u 2 = u 2 P h 1 = H 1 ( I D u | | R u 1 | | R u 2 | | T u ) Z 1 = u 1 + h 1 d u mod p (5) 其中 是当前的时间戳，计算完成后，U将 M 1 = { I D u ， R u 1 ， R u 2 ， h 1 ， Z 1 ， T u } 发送给S。 2) S收到 M 1 后，首先验证 T u 是否尚在有效范围内，如果 T u 超出有效范围，S向用户发送失败信息，停止本次协商。如果仍然有效，S计算并验证等式 Z 1 P = R u 1 + H 1 ( I D u | | R u 1 | | R u 2 | | T u ) ⋅ K u ，如果验证等式正确，S则生成随机数 s 1 ， s 2 ∈ Ζ n * ，时间戳 T s 并计算下式， { R s 1 = s 1 P ， R s 2 = s 2 P h 2 = H 2 ( I D s ∥ R s 1 ∥ R s 2 ∥ T s ) Z 2 = u 1 + h 2 ⋅ d s mod p (6) 最后将 M 2 = { R s 1 ， R s 2 ， h 2 ， Z 2 ， T s } 发送给用户U。 3) 收到 M 2 后，U验证 T s 时间戳的值是否还在有效范围内，如果 T s 过期，U停止协商过程并向服务器S发送失败信息。如果 T s 有效，U验证等式 Z 2 P = R s 1 + H 2 ( I D s ∥ R s 1 ∥ R s 2 ∥ T s ) ⋅ K s 是否成立，若成立，U确认与其通信的确实是S，最后U计算 { K u s = u 1 R s 2 h 3 = H 2 ( I D u ∥ R u 1 ∥ R s 1 ∥ Z 2 ∥ Z 1 ∥ K u s ∥ T s ) (7) 并将 M 3 = { h 3 } 发送S。 4) S收到 M 3 后，计算 K s u = s 2 R u 1 ，验证等式 h 3 = H 2 ( I D u ∥ R u 1 ∥ R s 1 ∥ Z 2 ∥ Z 1 | | K s u ∥ T s ) 是否成立，若成立，S确认以上信息来自一个合法节点U。 5) U和S分别计算会话密钥 S K u = H 2 ( I D u | | I D s | | R s 1 | | R u 1 | | Z 1 | | Z 2 | | K s u | | T u | | T s ) S K s = H 2 ( I D u | | I D s | | R s 1 | | R u 1 | | Z 1 | | Z 2 | | K u s | | T u | | T s ) (8) 容易得出， K s u = u 1 R s 2 = u 1 s 2 P = s 2 R u 1 = K u s . 因此： S K U = S K s 。 所以，U和S可以计算出相同的会话密钥。