这是我一直想学习的东西。当我设计一个系统(软件或硬件),其中多个组件相互通信时,如何在协议中实现一些简单的加密或其他功能以实现某些基本安全性?
无论如何我都可以更改协议,因为我对发送/接收的字节序列进行低级访问。
编辑:我对嵌入式编程感兴趣,对协议安全性进行简单的线上加密。
答案 0 :(得分:6)
你说“基本安全”,但这并不意味着什么。你的威胁模型是什么?你在防御什么样的攻击?如果您要传输信用卡数据,那么您将需要使用强大的加密,例如RSA。但我想不出一个需要“减少”保护的例子。如果你担心黑客会拆解你的代码,它已经被游戏结束了 - 如果它有趣或有价值,它们就会破解它。如果没有,你就浪费了时间来实现它。
答案 1 :(得分:5)
到目前为止,最简单的解决方案是使用SSL套接字而不是普通的套接字,即HTTPS / FTPS风格。
HTTP和HTTPS之间的协议完全没有区别,唯一的区别是它们在不同的端口上运行(通常为80对443),一个使用普通套接字,另一个使用SSL加密套接字。
答案 2 :(得分:4)
从头开始设计它时,不要实现基本加密。正确地正确实施加密非常困难。
相反,请专注于使用您平台上提供的加密......您的平台是什么?
编辑:
有关加密替代方案的列表,请参阅此SO post,其中一些加密方案在嵌入式环境中应运行良好(例如CryptoPP和TomCrypt)。
答案 3 :(得分:2)
OAuth可能对您有意义,以便允许各种API之间的访问控制。
如果你纯粹想要一个加密的数据通道,那么最好只是在你的协议上进行分层;通过SSL或SSH。
答案 4 :(得分:2)
如果您正在进行嵌入式编程,那么加密问题在哪里?
例如,只要你停留在同一个处理器上,加密就没用了。
如果您担心设备上的处理器,那么加密可能很困难,因为dsp不一定具有任何复杂加密的备用空间。
如果你想要快速,那么对称算法是你最好的选择,并且你可以做很多好事,比如Blowfish或IDEA。您可以存储唯一的对称密钥,因此如果它们可以将设备拆开,则只会发现一个密钥,但每个设备都应该拥有自己的密钥。
只需将每个密钥绑定到序列号,这样如果您正在与服务器通信,那么将序列号与数据包一起传递,网络服务器可以查找正确的对称密钥并快速解密。
如果你想进行快速硬件加密,对于我的MSEE论文,我开发了一个使用任意顺序微积分的加密系列,这很难确定密钥,因为它可以在使用微带线的硬件电路中,因为它有没有处理,它将被直接绑在天线之前,并且一切都将被加密。
答案 5 :(得分:2)
在设计安全系统时需要考虑很多事项。仅举几例:
我建议您先阅读Bruce Schneier's材料。
答案 6 :(得分:1)
OAuth绝对是一个考虑因素。除此之外,您可能还需要考虑WS-Security。通过Web服务进行传输,您可以保持平台和语言无关,并且添加WS-Security意味着加密和解密位于应用程序层(端到端)。因此,只要您确信邮件一旦离开发件人就是安全的,您知道它们将保持安全,直到客户端实际收到邮件(这意味着它不会被服务器解密,然后传递给客户端) / receiver,但接收应用程序收到消息后。)
所以基本上你要OAuth来保护/验证各种应用程序,而WS-Security则要保护它们之间传递的消息。