轻量级加密密钥交换协议

Tim*_*Tim 3 encryption embedded ssl https

我有一个嵌入式系统通过HTTP将数据发布到JSON REST服务.我目前正在使用HMAC-SHA1进行身份验证,就像Amazon AWS一样.

我现在正在探索加密传输中数据的选项.HTTPS似乎是逻辑选择,因为服务器端需要很少改变.但是,我的微控制器有一个相对较小的闪存(256KB)和RAM(96KB),我能找到的唯一的HTTPS客户端是商业产品.微控制器使用内置的"AES加密查找表"使加密更简单,但我猜我需要一种安全的方式来交换密钥.

我看过SSL,看起来很复杂.还有其他打火机吗?

Tho*_*nin 5

SSL的大部分复杂性来自高模块性.客户端可以支持几个"密码套件",服务器选择一个.数据可以被压缩.客户端可以通过呈现其自己的证书并使用相应的私钥来验证自身.服务器公钥作为X.509证书发送,X.509证书验证很复杂.

您可以通过硬编码客户端选项来大幅简化SSL.例如,您决定只支持一个密码套件,例如TLS_RSA_WITH_AES_128_CBC_SHA256.没有压缩.您可以在客户端硬编码服务器公钥,只需忽略服务器发送的证书.如果可能,使用TLS 1.2,它需要使用单个散列函数(SHA-256)而不是两个(MD5和SHA-1)用于以前的协议版本(TLS是SSL的标准名称; TLS 1.0是SSL 3.1 ).

我(专业)实现了一个支持AES和3DES的TLS客户端,并执行基本的X.509验证(仅限RSA签名).完整的代码适用于21 KB的ROM(对于ARM处理器,使用拇指指令编译的C代码),并且只需要19 KB的RAM,其中16 KB用于输入缓冲区(输入记录的最大大小)假设没有压缩,SSL约为16千字节).所以,SSL 可以对微控制器足够小.

通过先验选择客户端选择的参数简化SSL后,您将获得一个尽可能轻量级的协议:剩余的复杂性是固有的.如果你试图让事情更简单,那么你最终会得到一些更弱的东西.

对于现有的实现,至少PolarSSL针对嵌入式设备,并且在开源许可证(GPLv2)下可用.我不知道它有多小可以收缩.还有CyaSSL,它也可以在GPLv2条款下获得,并声称可以编译成30 KB的代码占用空间(具有最少的选项).