我想加密传感器节点之间交换的消息。
我是否可以在无法访问真实硬件传感器节点的情况下执行此操作,例如Tmote Sky?
只能在Tmote Sky节点上模拟软件加密/分组密码吗?如果我需要使用硬件加密算法,那么我应该有一个真正的传感器节点吗?
另外,我读到对于对称加密,必须有真正的传感器节点,但非对称加密也可以与模拟节点一起使用?
任何文档或说明都会有所帮助。
答案 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支持它,是的,你可以。如果没有,你就不能。 (模拟与否)。
希望它有所帮助。