⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rfc2367.txt

📁 很多RFC的中文文档
💻 TXT
📖 第 1 页 / 共 5 页
字号:
                   uint16_t sadb_lifetime_exttype;
                   uint32_t sadb_lifetime_allocations;
                   uint64_t sadb_lifetime_bytes;
                   uint64_t sadb_lifetime_addtime;
                   uint64_t sadb_lifetime_usetime;
           };
           /* sizeof(struct sadb_lifetime) == 32 */

   sadb_lifetime_allocations
                   对于CURRENT,安全关联分配的不同的连接数、端点或流量;对
                   于HARD和SOFT,指在期满前安全关联可以分配的连接数、端点或
                   流量。
                   

   sadb_lifetime_bytes
                   对于CURRENT,使用这个安全关联处理了多少个字节;对于HARD
                   和SOFT,在期满之前,可以处理的字节数。

   sadb_lifetime_addtime
                   对于CURRENT,指安全关联建立时的时间,以秒计;对于HARD和
                   SOFT,指安全关联建立后在期满之前的时间。
                   
                   对于这样的时间字段,系统假定64位可以足够存放POSIX时间类
                   型值。如果不够,这个字段必须重新修订。

   sadb_lifetime_usetime
                   对于CURRENT,指安全关联第一次使用的时间,以秒计;对于HARD
                   和SOFT,指安全关联第一次使用后在期满之前的时间。

       安全关联的各项生存期指的关系是逻辑或,这意味着如果字节和时间值,或者
   多项时间值被检查,第一个符合范围的值将导致生存期期满。


2.3.3 地址扩展项

       地址扩展项说明一个或多个与安全关联有关的地址。当安全关联扩展项存在时
   源和目的地址的扩展项必须存在。地址扩展项的格式如下:

           struct sadb_address {
                   uint16_t sadb_address_len;
                   uint16_t sadb_address_exttype;
                   uint8_t sadb_address_proto;
                   uint8_t sadb_address_prefixlen;
                   uint16_t sadb_address_reserved;
           };
           /* sizeof(struct sadb_address) == 8 */

           /* 紧跟的是一些sockaddr结构格式的地址 */

       sockaddr结构应该系统实现的PF_KEY的sockaddr结构相一致。如果系统有sa_len
   消息中的sockaddrs也应有;如果没有sa_len字段,sockaddrs也不应有。sockaddrs
   中的非地址信息,像AF_INET sockaddrs的sin_zero和AF_INET6 sockaddrs的sin6_
   flowinfo必须大于零。所有的消息的端口值(如sin_port和sin6_port)必须为零,
   除了SADB_ACQUIRE消息,其发起者应填入相对应的TCP或UDP会话者的端口号。如果
   端口号非零,那么sadb_address_proto字段,通常为零,必须填入传输协议值。如
   果sadb_address_prefixlen非零,那么地址有一个指定长度的前缀(常常用在KM访
   问控制决策)。这些附加字段有利于密钥关联程序。

       在一个消息中,安全关联的源和目的地址必须在同一个协议族,必须同时有或
   没有。代理地址可以在不同的协议族,并且对于多数的安全协议,代表实际的包的
   发起者(例如:内部信息包的源地址在隧道中)。

       源地址必须是单播地址或者是非指定地址(如:INADDR_ANY)。目的地址可以
   是任一有效地址(单播、多播或广播)。代理地址应是单播地址(这里是试验性的
   安全协议,代理可以不同于以上描述)。


2.3.4 密钥扩展项

       密钥扩展项说明了一个或多个与安全关联有关的密钥。由于安全原因,消息中
   的密钥扩展项不是永远存在。其格式如下:

           struct sadb_key {
                   uint16_t sadb_key_len;
                   uint16_t sadb_key_exttype;
                   uint16_t sadb_key_bits;
                   uint16_t sadb_key_reserved;
           };
           /* sizeof(struct sadb_key) == 8 */

           /* 紧跟的是密钥 */

   sadb_key_bits   位数,有效的密钥长度。如果为零将导致错误。

       密钥扩展项有两种.认证密钥(如:IPsec AH,OSPF MD5)和加密密钥(如:
   IPsec ESP)。PF_KEY只处理符合格式的密钥,不处理密钥素材。例如,当使用
   ISAKMP/Oakley时,密钥关联进程总是负责在将Diffie-Hellman算法的计算结果通
   过PF_KEY发送至内核之前转换成要求的格式。制定这项规则的原因是PF_KEY被设计
   成支持多种安全协议(不仅仅是IP安全)和多种密钥管理机制,包括没有“密钥素
   材”概念的手工管理。一个清晰的不受协议约束的接口可以支持不同的操作系统和
   不同的安全协议。

       如果一个算法的密钥定义了奇偶位(如:DES),那么PF_KEY使用的密钥也必须
   包含奇偶位。这意味着一个DES密钥永远是64位长。

       当一个安全协议只需要一个认证密钥及?或一个加密密钥时,使用适当的密钥
   扩展进行完全格式转换。当一个安全协议的同一个函数需要多个密钥(如:3DES使
   用2或3个密钥和非对称算法),这两个完全格式的密钥必须按顺序连在一起以便输
   出包处理。在这种情况下,算法必须能够根据提供的信息确定每个密钥的长度。密
   钥的总长度(当与使用的算法的知识相结合)通常提供足够的信息去做出确定。

       密钥始终通过PF_KEY接口按序传递以便输出包的处理。对于输入包的处理,密
   钥的顺序可能与PF_KEY接口使用的规范级连顺序不同。具体实现负责使用正确的密
   钥顺序处理输入和输出包。

       例如,两个单播地址的节点使用ESP、3个密钥的3DES安全关联通信。在发送节
   点的输出SA和接收节点的输入SA各自的加密密钥扩展项中都依次包含key-A、key-B、
   key-C。输出SA依次使用key-A、key-B、key-C加密,输入SA依次使用key-C、key-B、
   key-C解密(注意:3DES实际上是加密-解密-加密)。3DES使用的规范的顺序key-A、
   key-B、key-C已文档化。规范的“加密”顺序如同这个例子。[Sch96]

       密钥数据位的有效位从高到低排列。例如:22位密钥将占3个字节,最低的两
   位不包含密钥素材,5个额外的填充字节用来64位边界对齐。

       这里有一个关于奇数位16进制密钥的用户接口问题,与PF_KEY不是直接有关。
   考虑以下16位数:

           0x123

       需要两个字节储存。如果没有其它信息,不清楚究竟是存储为:

           01 23           或              12 30

       作者的看法是样板(0x123 == 0x0123)是解释这个多义性的最好方法。附加
   信息(如:写成0x0123或0x1230,或者说明那只是12位数字)将解决这个问题。


2.3.5 身份扩展项

       身份扩展项包含了端点的身份特征。这些信息被密钥管理程序用来选择协商中
   使用的身份证书。出于访问控制的目的,内核也可以提供这些信息给网络安全程序
   去鉴别远端实体。如果这个扩展项不存在,密钥管理必须以地址扩展项中的地址作
   为安全关联的唯一身份。其格式如下:

           struct sadb_ident {
                   uint16_t sadb_ident_len;
                   uint16_t sadb_ident_exttype;
                   uint16_t sadb_ident_type;
                   uint16_t sadb_ident_reserved;
                   uint64_t sadb_ident_id;
           };
           /* sizeof(struct sadb_ident) == 16 */

           /* 紧跟身份字符串,如果存在 */

   sadb_ident_type 紧跟的身份信息的类型。稍后详述。

   sadb_ident_id   身份字符串不存在时使用的标识符。POSIX用户标识符将使用这
                   个字段。稍后详述。

       文本表示的身份信息包含在一个C字符串中紧跟在sadb_ident扩展项后。字符
   串的格式由sadb_ident_type的值确定,稍后详述。


2.3.6 敏感度扩展项

       敏感度扩展包含安全关联的安全标签信息。如果这个扩展项不存在,就不能从
   安全关联获得敏感度关联的数据;如果存在,数据包上的外在安全标签的需求被回
   避。其格式如下:

           struct sadb_sens {
                   uint16_t sadb_sens_len;
                   uint16_t sadb_sens_exttype;
                   uint32_t sadb_sens_dpd;
                   uint8_t sadb_sens_sens_level;
                   uint8_t sadb_sens_sens_len;
                   uint8_t sadb_sens_integ_level;
                   uint8_t sadb_sens_integ_len;
                   uint32_t sadb_sens_reserved;
           };
           /* sizeof(struct sadb_sens) == 16 */

           /* 紧跟:
                   uint64_t sadb_sens_bitmap[sens_len];
                   uint64_t sadb_integ_bitmap[integ_len]; */

   sadb_sens_dpd   说明可以判读等级和间隔位图的保护进程。
   sadb_sens_sens_level
                   敏感度等级
   sadb_sens_sens_len
                   敏感度位图的长度,64位字对齐。
   sadb_sens_integ_level
                   完整性等级
   sadb_sens_integ_len
                   完整性位图的长度,64位字对齐。

       敏感度扩展设计来支持分离式或多级别安全系统的Bell-LaPadula[BL74]安全
   模型、Clark-Wilson[CW87]商业安全模型及/或Biba完整模型[Biba77]。这些正式
   的模型常用来实现各种各样的安全策略。详细的安全策略定义超出本文档的讨论范
   围。每一个位图必须64位边界对齐。


2.3.7 提议扩展项

       提议扩展项包含了可选择的算法参数,其格式如下:

           struct sadb_prop {
                   uint16_t sadb_prop_len;
                   uint16_t sadb_prop_exttype;
                   uint8_t sadb_prop_replay;
                   uint8_t sadb_prop_reserved[3];
           };
           /* sizeof(struct sadb_prop) == 8 */

           /* 紧跟:
              struct sadb_comb sadb_combs[(sadb_prop_len *
                  sizeof(uint64_t) - sizeof(struct sadb_prop)) /
                  sizeof(struct sadb_comb)]; */

       结构头后是按优先排序的提议的参数联合列表。如果一个联合被选择,那么各
   字段值将存入相同定义的各字段中。

       注意:某些安全协议中的部分算法有IV长度变量,

   联合的格式如下:

           struct sadb_comb {
                   uint8_t sadb_comb_auth;
                   uint8_t sadb_comb_encrypt;
                   uint16_t sadb_comb_flags;
                   uint16_t sadb_comb_auth_minbits;
                   uint16_t sadb_comb_auth_maxbits;
                   uint16_t sadb_comb_encrypt_minbits;
                   uint16_t sadb_comb_encrypt_maxbits;
                   uint32_t sadb_comb_reserved;
                   uint32_t sadb_comb_soft_allocations;
                   uint32_t sadb_comb_hard_allocations;
                   uint64_t sadb_comb_soft_bytes;
                   uint64_t sadb_comb_hard_bytes;
                   uint64_t sadb_comb_soft_addtime;
                   uint64_t sadb_comb_hard_addtime;
                   uint64_t sadb_comb_soft_usetime;
                   uint64_t sadb_comb_hard_usetime;
           };

           /* sizeof(struct sadb_comb) == 72 */

   sadb_comb_auth  如果联合被接受,其值将存入sadb_sa_auth中。

   sadb_comb_encrypt
                   如果联合被接受,其值将存入sadb_sa_encrypt中。

   sadb_comb_auth_minbits;
   sadb_comb_auth_maxbits;
                   最小和最大认证密钥长度,位数。如果sadb_comb_auth为零,这
                   两个字段的值必须为零;如果sadb_comb_auth非零,其值必须非
                   零。如果联合被接受,KEY_AUTH的sadb_key_bits字段值将在两
                   者之间。最小字段值不能大于最大字段值。

   sadb_comb_encrypt_minbits;
   sadb_comb_encrypt_maxbits;
                   最小和最大加密密钥长度,位数。如果sadb_comb_encrypt为零,
                   这两个字段的值必须为零;如果sadb_comb_encrypt非零,其值
                   必须非零。如果联合被接受,KEY_ENCRYPT的sadb_key_bits字段
                   值将在两者之间。最小字段值不能大于最大字段值。

   sadb_comb_soft_allocations
   sadb_comb_hard_allocations
                   如果联合被接受,其值将分别存入SOFT和HARD生存期的

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -