10、安全机制

本章介绍安全RPL信息的生成和处理。RPL消息代码的高阶位标识着RPL消息是否安全。除了基础控制消息(DIS,DI——DAO,DAO-ACK)的安全版本外,RPL还有几种消息仅在启动了安全性的网络才会使用。
实现的复杂度和规模是LLNs所关注的核心问题,也就是说在RPL实现中包含先进的安全措施在经济和物理上都是不可能的。此外,许多部署可以使用链路层或其它安全机制满足它们的安全要求,不需要在RPL中提供安全保证。
因此,本文所描述的安全措施在实施中可有选择地实现。具体实现可以仅支持所描述安全措施的子集(包括空集),例如,实现可支持完整性和保密性,但不支持签名。一个实现应当清楚地指明支持哪种安全机制,强烈建议实施者仔细考虑安全要求,考虑在他们网络中安全机制的可行性。
10.1  安全综述

RPL支持三种安全模式:

  • 非安全。在此种安全模式下,RPL使用基础DIS、DIO、DAO和DAO-ACK消息时无安全部分。由于网络可使用诸如链路层等其它安全机制,非安全模式并不意味着没有任何保护地发送所有消息。
  • 预安装。在此种安全模式下,RPL使用安全的消息。为加入RPL实例,节点必须拥有预安装密钥。节点使用它提供消息的保密性,完整性和真实性。这个预安装密钥,节点可以作为主机或路由器加入RPL网络。
  • 身份验证。在此种安全模式下,RPL使用安全的消息。为加入RPL实例,节点必须拥有预安装密钥。节点使用这个密钥提供消息的保密性,完整性和真实性。节点使用这种预安装密钥,仅能以主机的身份加入网络。如果要以路由器的身份加入网络,节点必须从密钥认证机构获取第二个密钥。这个密钥认证机构在向请求者提供第二个密钥前,能够认证请求者是否可以作为路由器。对称算法不支持身份验证模式,截止撰写本规范时,RPL仅支持对称算法:考虑到将来潜在的加密基元,本文加入身份验证模式,参阅10.3节。
RPL实例是否使用非安全模式是由它是否使用安全RPL信息决定的。安全网络使用预安装还是身份验证模式由DAG Configuration选项的“A”标志位决定。
本规范描述了CCM -- CBC-MAC(Cipher Block Chaining - Message Authentication Code)的计数器 -- 作为RPL安全的加密基础[RFC3610]。在本规范中,CCM使用AES-128作为其底层加密算法。在本书Security章节中有部分保留的标志位用于将来指定其它算法。
所有安全RPL消息要么有MAC,要么有签名。安全RPL消息也有针对密件的加密保护。安全RPL消息格式即支持完整的加密/认证方案(如CCM),也支持分别加密和认证分组方案。
10.2  加入安全网络
RPL安全机制假设一个准备加入安全网络的节点已经配置了一个共享密钥,此密钥用于同邻居和RPL根进行通信。为加入安全RPL网络,节点要么监听安全DIOs,要么通过发送安全DIS触发安全DIOs。DIO/DIS规则在第8章讲述,安全的DIO和DIS消息遵守如下规则:
  1. 如果发送,初始的安全DIS必须设置Key Identifier Mode字段为0(00),必须设置Security Level字段为1(001)。密钥必须为预配置组密钥(Key Index 0x00)。
  2. 当节点为响应安全DIS(8.3节)而重启它的涓流计时器时,下一个它发送的DIO必须为和安全DIS拥有相同安全配置的安全DIO。如果节点在发送DIO前收到了多个安全DIS消息,则此安全DIO的安全配置必须跟所响应的最后一个DIS相同。
  3. 当节点为响应单播安全DIS而发送DIO时,此DIO必须为安全DIO。
上述规则允许节点使用预配置共享密钥加入一个安全RPL实例。一旦节点使用预配置共享密钥加入DODAG,Configuration选项中的“A”位决定了它的能力。如果Configuration选项中的“A”位为0,节点将使用此预配置、共享密钥正常交换信息:它可以发布DIOs、DAOs等等。

如果Configuration选项中的“A”位设置为1,并且RPL实例运行在认证模式下:

  1. 节点禁止公告Rank,除非使用由Key Index值为0x00保护的安全DIOs中的INFINITE_RANK。当处理Key Index值为0x00所保护的DIO报文时,处理节点必须将公告Rank认定为INFINITE_RANK。其它结果值将导致报文被丢弃。
  2. Key Index值为0x00的安全DAOs禁止携带除节点地址外的RPL Target选项前缀。如果节点收到使用预安装、共享密钥的安全DAO报文,而此报文的RPL Target选项并非IPv6源地址,它必须丢弃此安全DAO报文,并不作进一步处理。
以上规则意味着在“A”位为1、Key Index值为0x00的RPL实例中,节点仅能作为主机而不是路由器加入。节点必须和密钥认证机构进行通信,以获得其可以成为路由器的密钥。
10.3 安装密钥

一旦节点作为主机加入网络,认证模式要求想要成为路由的节点动态安装新密钥。已经作为主机加入的节点,使用标准IP通信方式与可以提供新密钥的认证服务器进行联系。

获取此种密钥的协议超出本规范范围,它会在将来的规范中进行详细阐述,对于RPL在认证模式下的安全运行,它是必要的。
10.4  一致性校验
RPL节点发送一致性校验(CC)信息以应对重放攻击,并进行同步计数。
  1. 如果节点收到“R”标志位为0的单播CC信息,并且它是关联DODAG成员或在加入关联DODAG的过程之中,节点将给发送者回应一个单播CC信息。此回应必须将“R”标志位设置为1,并且它和所收到的信息必须具有相同的CC 随机数、RPLInstanceID和DODAGID字段。
  2. 如果节点收到一个多播CC信息,它必须丢弃信息并不作任何处理。
一致性校验信息允许节点发布challenge-response(质询-响应)以验证节点当前的计数值。由于CC随机数由质询者产生,而响应者有可能产生一个正确的应答,所以一致性校验应答中的计数器允许质询者验证它所监听到的计数值。
10.5  计数器
最简单情况下,计数器值是一个无符号整数,在每次发送安全RPL时节点将计数器值递增1或更多。计数器可以表现为一个具有以下性质的时间戳:
  1. 时间戳的最小长度为6个字节。
  2. 时间戳必须为1024Hz(二进制毫秒)粒度。
  3. 时间戳的启动时间必须为UTC时间1970年1月1日上午12:00:00。
  4. 如果计数器表示为时间戳,计数器值必须为按以下方法计算出的值。假设T为时间戳,S为在用密钥的启动时间,E为在用密钥的结束时间,S和E都为使用上述三条规则所描述的时间戳。如果E > T < S,则计数器无效,节点不能生成数据包,否则计数器值为T - S。
  5. 如果计数器表现为这样的时间戳,节点可将安全RPL数据包的Security部分的“T”字段置1。
  6. 如果Counter字段不表示为这样的时间戳,节点禁止设置“T”标志。
  7. 如果节点无满足以上要求的本地时间戳,它必须忽略“T”标志。
如果节点支持这样的时间戳,并接收到“T”标志为1的信息,它可以按10.7.1节所述,对收到的消息进行时间校验。如果节点收到“T”标志为0的信息,则禁止申请时间校验。从应用考虑,节点的安全策略可以包括拒绝所有无“T”标志信息。
“T”标志的出现的原因是:出于安全性、应用和其他考虑,许多LLNs现在已经维持亚毫秒粒度上的全局时间同步。允许RPL充分利用这个已有的功能将极大简化某些安全问题的解决方案,如延迟保护。

10.6  离站数据包发送

本节描述在给定离站RPL控制数据包和安全保护情况下,RPL如何生成所要发送的安全数据包。还描述了提供保护所需的密码操作顺序。
附加于一个离站RPL包的安全保护和安全等级由节点的安全策略数据库决定。离站数据包的处理是由这个安全策略数据库的配置具体实现的。
在安全RPL信息被发送时,RPL节点必须设置离站RPL包的安全部分(T,Sec,KIM和LVL)以描述它所附加的保护等级和安全设置(见6.1节)。RPL的Message Code字段的Security子字段位必须被设置为表明安全RPL的信息。
必须确保用于构建AES-128 CCM nonce的计数器值(图31)相对于离站数据包最后一次发送到特定的目的地地址时加1。
当安全策略指定了延时保护应用时,构建CCM nonce所使用的Timestamp计数器可确保离站数据包必须按照10.5节所指定的规则递增。当附加了一个Timestamp计数器(由‘T’标志位指定),本地维护的Timestamp计数器必须被指定为所传送的安全RPL信息的一部分。
安全离站数据包的加密算法应当由节点的安全策略数据库指定,且必须在离站信息中的Sec字段值中指定。
离站数据包的安全策略应确定适当的KIM和密钥标志符,以为加密数据包处理指定安全密钥,包括可选的签名密钥(见6.1节)。安全策略还应以认证形式或认证与加密形式指定算法(Algorithm)和保护等级(Level),并可能用于适合离站数据包的签名。
一旦加密,节点必须替换原始包的有效载荷,使用安全保护、密钥和数据包的Security段所指定的当前CMM加密的有效载荷。
所有安全RPL信息包含完整性保护。结合安全算法处理,结点必须在离站安全RPL数据包中包含MAC或签名。
10.7  入站数据包的接收

本节描述安全RPL数据包的接收和处理。给定一个入站安全RPL数据包,它的RPL Message Code字段的Seccurity子字段设置为1,本节描述RPL如何生成一个数据包的非加密变量,并验证它的完整性。

接收者使用RPL安全控制字段来决定是否需要使用数据包安全处理。如果所描述的消息类型和发起人的安全级别未知或不符合本地维护的安全策略,节点必须不做任何处理并丢弃数据包,可以提高管理预警,但禁止回应任何消息。这些策略可包含安全等级、密钥使用、源标识符或基于timestamp的计数器缺乏(由‘T’标志位指示)。入站数据包的安全策略数据库配置超出本规范围(它可能,由DIO配置或通过带外管理路由器配置来进行定义 )。
Security Level(LVL)指示了RPL消息是否为加密消息,节点通过使用 KIM字段以及CCM nonce所标识出的密钥信息,作为信息载荷解密处理的输入信息。CCM nonce应来自于信息的Counter字段以及其它接收到的或本地维护的信息(见10.9.1节)。通过调用由所接收数据包Sec字段指定的逆加密模式操作,获得明文消息内容。
接收者应该使用CCM nonce和所识别出的密钥信息来检验入站数据包的完整性。如果完整性检测和所接收到的MAC不符合,节点必须丢弃数据包。
如果收到的信息为计数器初值(0值)并且接收者当前正为信息发起者维护一个入站计数器,接收者必须通过发送一个Consistency Check(一致性检查)回应信息(见6.6节)给消息源以初始化一个计数器再同步。Consistency Check回应信息应由为特定节点地址所维护的当前完整离站计数器来保护。当入站计数器包含在Consistency Check信息载荷时,离站计数器将包含在信息的安全部分内。
基于特定的安全策略,节点对收到的RPL消息可以使用重放保护。在认证接收数据包之前应当执行重放检查。计数器在获取输入数据包时,应当和为给定原始节点地址所维护的入站计数器的水印进行对比。如果收到的信息计数器值不为0,并小于所维护的输入计数器水印,则表明可能是一个包重放,节点必须丢弃入站包。
如果延迟保护作为入站数据包安全策略检查的一部分被指定,Timestamp计数器用于验证接收到的RPL信息的及时性。如果入站信息Timestamp计数器值表明信息发送时间早于为原始发址所维护的发送时间计数器,则表示重放违规,节点必须丢弃入站包。如果接收到的Timestamp计数器值指示信息发送时间早于当前时间并小于可接受的数据包延迟,则表示延迟违规,节点必须丢弃入站包。
一旦信息被解码,在适用的情况下,已成功通过完整性检查、回放检查和可选的延迟保护检查的节点可更新它的本地安全信息,如源所预期的重放对比计数器值。
当所接收的信息无法通过安全策略检查或其它应用的完整性、重放或延迟检查,节点禁止更新它的安全信息。
10.7.1  Timestamp Key检查
如果一条信息的‘T’标志位设置为1,且节点拥有五个如10.5节所述的本地timestamp,那么节点可以检查信息的时态一致性。节点通过将计数器值添加到关联密钥的开始时间来计算消息的发送时间。如果该传输时间已超过密钥的结束时间,节点将不做任何处理地丢弃该信息。如果发送时间离接收者的本地时间太远,它也会不做任何处理地丢弃该信息。
10.8  完整性和保密性
对于一个RPL ICMPv6信息来说,整个数据包都在RPL安全的范围之内。

MACs和签名在整个非安全IPv6数据包中计算。当计算MACs和签名时,可变的IPv6字段被填充0,它符合 [ RFC4302 ]中 3.3.3.1节的  (IPsec Authenticated Header “IP安全协议认证首部”) 规则。MAC和签名计算在任何低层应用打包前执行。

当RPL ICMPv6报文被加密时,加密字节开始于Security字段之后的第一个字节,并持续到数据包的最后一个字节。IPv6首部、ICMPv6首部和RPL报文直到Security字段结束部分都不被加密,因为它们被用于正确地解密数据包。
例如节点发送了一条报文,它的LVL=1,KIM=0,并且Algorithm=0表示使用[RFC3610]中的CCM算法来创建属性为ENC-MAC-32的数据包:它解密数据包并追加一个32-bit的MAC。分组密码的密钥由Key Index决定。CCM nonce如10.9.1节所述进行计算。报文的认证和加密部分开始于RPL报文Security字段之后的第一个字节,结束于数据包的最后一个字节。附加的认证数据开始于IPv6首部的开始部分,结束于RPL Security字段的最后一个字节。
10.9  加密操作方式
本规范所描述的加密操作方式(Algorithm = 0)是基于CCM和[RFC3610]中的AES-128分组密码。此种操作方式被现有实现广泛支持。 CCM模式需要一个nonce(CCM nonce)。
10.9.1  CCN Nonce
RPL节点以下列方式构建CCM nonce:
Source Identifier:8字节,Source Identifier设置为受保护数据包始发者的逻辑标识符。
Counter:4字节,Counter设置为RPL控制报文的Security选项中相应字段的未压缩值。
Key Identifier Mode(KIM):2bit。KIM设置为RPL控制报文的Security选项中相应字段值。
Security Level(LVL):3bit。Security Level设置为RPL控制报文的Security选项中相应字段值。
CCM nonce中的未赋值位保留,它构建CCM nonce时它们必须设置为0。
CCM nonce中的所有字段都代表最重要的八字节和最重要的位阶。
10.9.2  签名
如果KIM值为3,表示使用签名,那么节点为数据包添加一个数据载荷。Security Level(LVL)字段描述此签名的长度。RPL中Security Mode 3的签名方案定义于[RFC3447]中8.1节的一个RSA算法(RSASSA-PASS)示例。作为公共密钥,它成对使用,当n为2048bit或3072bit RSA模式时,e=2^{16}+1。它使用CCM模式[RFC3610]作为加密方案,M=0时作为流密码。注意,尽管[RFC3610]不接受=0的CCM模式,当联合使用签名时,RPL明确允许M=0的CCM模式,因为此签名提供足够的数据验证。这里的M=0的CCM模式定义于[RFC3610],但2.2节所述的‘M'字段必须设置为0。它使用[FIPS180] 6.2节所指定的SHA-256哈希函数指定。它使用[RFC3447] 8.1节中的报文编码规则。
让“a”作为6字节计数器表示和消息首部的串联。数据载荷是分组数据‘m’和签名‘s’的右侧串联。用消息部分a和m的右侧串联调用这个签名方案,而用消息部分a和m的右侧串联以及签名s调用签名验证。
这种形式的RSA签名为RPL网络提供充分保护。如果需要,可采用更简洁的签名替代方案,这方面内容超出本规范范围,可能在将来规范中涉及。
采用2048bit签名或3072bit签名的RSA签名实现应当支持2048位和3072位RSA签名验证,这考虑到为RPL部署提供升级路径。

RPL(9):RFC6550翻译(9)---安全机制相关推荐

  1. 用Python破解有道翻译反爬虫机制

    破解有道翻译反爬虫机制 web端的有道翻译,在之前是直接可以爬的.也就是说只要获取到了他的接口,你就可以肆无忌惮的使用他的接口进行翻译而不需要支付任何费用.那么自从有道翻译推出他的API服务的时候,就 ...

  2. python实战:利用chrome抓包插件HTTP间谍分析有道翻译反爬机制

    本次实战目标站点:http://fanyi.youdao.com/?keyfrom=fanyi-new.logo ,主要利用HTTP间谍抓包插件分析有道翻译反爬机制,该抓包能帮我们过滤掉一些不需要的常 ...

  3. RPL(10):RFC6550翻译(10)---分组转发和环路避免/检测

    11.分组转发和环路避免/检测 11.1  分组转发的建议 本文详述了一个路由协议.提供这些非规范建议是为了通过举例说明这样的实现如何与RPL一起工作,为转发实现设计提供帮助. 当转发数据包到目的地是 ...

  4. RPL(3):RFC6550翻译(3)---协议综述

    3.协议综述 本节目的是本着[RFC4101]的精神描述RPL.协议细节可以后面章节找到. 3.1 拓扑结构 本节介绍可形成的基本RPL拓扑结构,及构造这些拓扑结构的规则,例如,指导DODAG形成的规 ...

  5. Python(4) 用Python破解有道翻译反爬虫机制

    web端的有道翻译,在之前是直接可以爬的.也就是说只要获取到了他的接口,你就可以肆无忌惮的使用他的接口进行翻译而不需要支付任何费用.那么自从有道翻译推出他的API服务的时候,就对这个接口做一个反爬虫机 ...

  6. 面试题之窒息翻译:类加载机制的双亲委派(正解:父委派模型)

    参考文章 oracle 官方文档 Class Loaders In Java - Baeldung Demystifying class loading problems 浅谈双亲委派模型 tomca ...

  7. Python破解百度翻译反爬机制---自制翻译器

    欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答.求职一站式搞定! 对商业智能BI.大数据分析挖掘.机器学习,python,R等数据领域感兴趣的同学 ...

  8. 人工机器:TM、VNM和NTM的内存机制

    NTM使用读写头上的多个权值实现"注意力聚焦"机制,形式化描述内存寻址过程:此外使用FN或者RNN作为状态寄存器和读写TABLE控制器,用于处理输入.输出权值向量. 图灵机: 图灵 ...

  9. 使用urllib2库实现有道翻译

    有道翻译的提交方式是POST,请求内容在form表单里,基本思路就是针对POST请求的普通爬虫,模拟表单的发送,然后问题出现了,{"errorCode":50}.我记得一年前是可以 ...

  10. 引读attention机制--个人理解

    文章目录 1. 意会--大脑注意到某物 2. 言传--分解注意过程 2.1 言传的准则 2.2 数据形式 和 大脑潜意识动作 2.3 观察分解例子 2.4 注意过程言传化 3. 公式化--注意机制 3 ...

最新文章

  1. 数据连接之--Datalist 的使用(查看、编辑、删除)
  2. 什么值得买发布年货消费报告 预制菜GMV同比增长39.41%
  3. 高光谱提取薯叶特征波长
  4. 袋鼠云服务案例系列 | 从DB2到MySQL,某传统金融平台的互联网转型之路
  5. mac小技巧——快速修改图片尺寸
  6. linux 版本号 笔记本_Linux版ThinkPad笔记本正式亮相(图)
  7. 特效开发阶段:bootstrap+react小节
  8. CTSCAPIOTHUPC2018颓废记
  9. Google野心勃勃,微软前程堪忧!(转)
  10. Windows:nginx: [error] CreateFile() “/logs/nginx.pid“ failed (2: The system)
  11. 7招,远离大数据杀熟!
  12. 诚信迎考 计算机考试主题班会策划,诚信考试主题班会策划书
  13. 64位Win10 2004正式版镜像下载
  14. Android Studio Dolphin 的 gradle-7.5.1-all.zip 下载(包含其他版本)
  15. 【rzxt.com】从四个角度判断本本屏幕好坏
  16. python html网页合并单元格,python合并单元格解决办法
  17. 蓝桥杯赛前真题 Python组 Day 4
  18. bp神经网络是用来干嘛的,BP神经网络什么意思
  19. 网赚灰产不归人——雅贼归来(上)
  20. 【正一专栏】再见意大利、再见小将布冯

热门文章

  1. java project 显示感叹号_项目工程上有感叹号或者差号
  2. android检测蜂窝网络,Android 判断网络状态及开启网路
  3. CCAA 常见错题集
  4. [美] 尼古拉斯·卡尔 《浅薄:互联网如何毒化了我们的大脑 》
  5. MySQL 性能优化的 9 种知识,面试再也不怕了
  6. 阿里云如何购买mysql_如何选购配置阿里云数据库RDS MySQL的流程 新手必看
  7. 2021年南京天印中学高考成绩查询,2021年南京重点高中名单及排名,南京高中高考成绩排名榜...
  8. 兼容树莓派CM4定制产品
  9. app支付宝支付java后台_手机APP如何接入支付宝支付(java后台)
  10. 林达华推荐的数学知识