如何在Contiki / Cooja模拟器中启用邮件加密?

时间:2016-05-23 04:23:59

标签: encryption simulation emulation contiki

我想加密传感器节点之间交换的消息。

我是否可以在无法访问真实硬件传感器节点的情况下执行此操作,例如Tmote Sky?

只能在Tmote Sky节点上模拟软件加密/分组密码吗?如果我需要使用硬件加密算法,那么我应该有一个真正的传感器节点吗?

另外,我读到对于对称加密,必须有真正的传感器节点,但非对称加密也可以与模拟节点一起使用?

任何文档或说明都会有所帮助。

2 个答案:

答案 0 :(得分:3)

Contiki拥有LLSEC(链路层安全)层。该层与硬件无关,因为它使用通用AES驱动程序API而不是直接访问硬件。 Contiki中实现了多个AES驱动程序 - 一个纯软件版本和一些硬件加速版本,包括CC2420(Tmote Sky上的无线电芯片)。

Cooja的问题是CC2420的硬件加速功能未在mspsim仿真器中实现。因此硬件加速在Cooja中不起作用,而不是真正的Tmote Sky节点;您必须在配置中明确选择基于软件的AES驱动程序:

#define AES_128_CONF aes_128_driver

最重要的是,AES加密将在Cooja中运行,但速度很慢。

现在LLSEC的示例配置 - 几乎没有LLSEC文档,但基本设置在此README file中描述:

  

将这些行添加到project_conf.h以启用noncoresec

#undef LLSEC802154_CONF_ENABLED
#define LLSEC802154_CONF_ENABLED          1
#undef NETSTACK_CONF_FRAMER
#define NETSTACK_CONF_FRAMER              noncoresec_framer
#undef NETSTACK_CONF_LLSEC
#define NETSTACK_CONF_LLSEC               noncoresec_driver
#undef NONCORESEC_CONF_SEC_LVL
#define NONCORESEC_CONF_SEC_LVL           1
     

NONCORESEC_CONF_SEC_LVL定义了MIC的长度以及是否   加密是否启用。

这里的重要参数是NONCORESEC_CONF_SEC_LVL,它对应于IEEE 802.15.4成帧器安全级别,数值从0x0到0x07。

要启用加密,请将其设置为0x4:

#define NONCORESEC_CONF_SEC_LVL 0x4

其他值是:

  
      
  • 0x00无安全数据未加密。数据真实性未经过验证。
  •   
  • 0x01 AES-CBC-MAC-32 MIC-32数据未加密。数据真实性已经过验证。
  •   
  • 0x02 AES-CBC-MAC-64 MIC-64数据未加密。数据真实性已经过验证。
  •   
  • 0x03 AES-CBC-MAC-128 MIC-128数据未加密。数据真实性已经过验证。
  •   
  • 0x04 AES-CTR ENC数据已加密。数据真实性未经过验证。
  •   
  • 0x05 AES-CCM-32 AES-CCM-32数据已加密。数据真实性已经过验证。
  •   
  • 0x06 AES-CCM-64 AES-CCM-64数据已加密。数据真实性已经过验证。
  •   
  • 0x07 AES-CCM-128 AES-CCM-128数据已加密。数据真实性已经过验证。
  •   

要启用加密和身份验证,请将级别设置为0x5,0x6或0x7。

另一个有用的配置参数是NONCORESEC_CONF_KEY,即网络范围的共享密钥。

至于其他问题,传感器节点上不支持硬件加速非对称加密。此外,在主线Contiki中没有基于软件的实现;与链路层安全性相比,此OS中通常不支持端到端安全性。 已经为Contiki开发了DTLS和IPSEC的一些项目,但描述的内容超出了这个答案。

答案 1 :(得分:0)

llsec是安全堆栈。例如,反重播llsec_driver避免重播攻击 关于纯加密(因此没有逻辑安全性),软件加密可用于所有平台(不仅是skymote),具有硬件增强功能(对于某些平台)(contiki-os blog检查加密段落。)
Cooja是一个模拟器,而不是模拟器(Cooja in depth)。所以它模拟了硬件的一切。因此,您不需要真正的微尘来进行测试 对称和非对称加密在逻辑上具有差异。但是在硬件上它是相同的:你将发送代表密钥的位。我不明白为什么仿真会有所不同 对于硬件加密,如果mote支持它,是的,你可以。如果没有,你就不能。 (模拟与否)。
希望它有所帮助。