我在原始TCP套接字上设计了一个简单的通信协议,以实现某些嵌入式设备之间的简单消息传递。为了解决问题,我的嵌入式设备是一盒电子设备,其中包含一个相对较小的微控制器,该微控制器运行基本的嵌入式RTOS(基本上只提供任务优先级和消息排队)和TCP / IP堆栈。
是TCP协议的预期用途我现在有一个消息传递协议在我的金属盒之间工作,我很满意。两个框之间的基本消息传递过程基本上是:
我现在要做的是加入一定程度的安全性和身份验证。这里的一个重要限制是我没有任何类型的操作系统或美化的TCP堆栈可以为我提供任何安全功能;我只有简单的TCP堆栈,因此我必须在应用程序级别实施安全措施,并考虑到微控制器的限制。
我想要达到的目标是:
设备之间的身份验证。为实现这一目标,我打算采取以下措施:
保留一张已知IP的表格,只接受连接。
每次建立套接字连接时,始终首先交换唯一标识符。该号码可能是给定设备的唯一序列号,必须为其他设备所知。
在数据包以某种方式被拦截的情况下加密数据。据推测,我需要某种密码算法,这种算法在小型微控制器上执行并不太“昂贵”,与一个编程到所有设备中的唯一密钥结合使用。我见过的一种这样的算法,就是在我的代码中看起来足够紧凑,就是TEA(Tiny Encryption Algorithm)。
我非常感谢任何建议或指示。
答案 0 :(得分:3)
检查MatrixSSL - 它们具有很小的尺寸和可嵌入的功能。这比自己重新发明SSL / TLS要好得多(你最终会这样做)。
答案 1 :(得分:2)
茶看起来很简单,可能会做你需要的。
使用-O2或类似的优化来编译拇指:
arm-none-linux-gnueabi-gcc(Sourcery G ++ Lite 2011.03-41)4.5.2 加密136字节解密128字节
llvm 29 加密92字节解密96字节为通用武器编译......
gnu加密188个字节,解密184个字节 llvm加密112个字节,解密116个字节
对于身份验证,ip地址表和设备数量之间是否存在一对一的关系?基本上每个设备需要多个唯一标识符吗?您是否希望与嵌入式系统建立连接的另一方以某种形式或方式登录?或者你是在两端控制二进制文件/代码,没有用户或没有设备选择(程序知道该怎么做),等等?如果每个设备都有一个已知的IP地址,那么该IP地址可能是加密的关键(加上所有通用的其他字节或以某种方式派生出来,每个人都知道)如果进入的连接是1)而不是来自批准的列表2)当嵌入式系统基于IP地址的密钥失败时,加密失败,然后拒绝连接。
无论如何,你的安全性只能走得那么远,如果你需要一些非常强大的东西,你可能需要在嵌入式系统中有更多的功能,然后实现一个像ssl这样的通用/标准系统。