×
接口总线驱动 > 总线 > 详情

实现安全的USB传输

发布时间:2020-05-21 发布时间:
|
    随着越来越多的嵌入式设计趋向于与计算机进行通信,对USB连接的需求正在持续增长。USB没有内置安全机制来保护总线上通信的数据,对于某些应用来说,这可能是一个问题。

  USB定义了多组指定设备工作方式的设备类别。这些设备中有许多已具有预定义的通信数据格式,设备必须遵守这些数据格式才能正常工作。这使得鼠标、键盘和U盘等设备可在所有平台上工作,而无需在首次连接时安装驱动程序。这些设备实际不需要任何类型的安全机制,因为其所含数据是已知的。其他不使用预定义数据格式的设备可以灵活地发送自定义应用数据。由于大多数USB都是针对预定义数据应用,而不是自定义应用设计的,因此没有针对这些设备类型的内置安全或加密机制。

  对于自定义USB应用的开发人员来说, USB分析仪的廉价(甚至免费)和易用使问题更加棘手。这些分析仪可捕捉USB通信,因此任何人只需非常少的专业技术知识便可看到USB通信并可能获得机密信息。

  设计注意事项

  创建更安全的USB自定义应用的第一步是选择满足应用需求的加密算法。现在有多种算法可供选择,它们在提供的安全性、大小、加密或解密数据块所需时间以及对各种编译器的固有支持方面有所差异。高级加密标准(Advanced Encryption Standard,AES)是一个很好的选择,因为它相当安全。例如,美国政府已批准将AES用于标有SECRET(机密)和TOP SECRET(绝密)且对密钥大小有不同要求的应用(http://www.cnss.gov/Assets/pdf/cnssp_15_fs.pdf)。AES可通过一段规模不大的代码(约8 KB)实现。就提供的安全级别而言,AES是一种较好的算法。此外,。NET Framework默认支持AES。

  .NET framework默认支持的算法还有数据加密标准(Data Encryption Standard,DES)和三重数据加密标准(Triple Data Encryption Standard,TDES),它们都能用来替代ASE算法,因而对此无需花费过多时间。与AES相比,它们速度较慢,安全性较差且代码更大,但仍在许多应用中使用。

  微型加密算法(XTEA)的第二版也是一个备选算法。它在默认情况下不受编译器工具支持,但其非常简单且容易实现。XTEA是最小的可用算法之一,特别适合于存储空间较小的应用。XTEA的安全级别不如AES明确,因为它尚未经过严格的测试。但根据迄今为止执行的测试来看,它还是比较安全的。有关各种加密算法的更多信息,请参见图1以及Microchip应用笔记AN953和AN1044。

图1  AES和XTEA加密算法比较

  选择加密算法时首先要考虑其有效密钥大小以及是否应该使用加密。一些国家(包括美国)将具有特定密钥大小的算法视为军需品。因此,这些算法的出口会受到限制。根据算法类型和所用密钥大小,应用程序可能需要政府批准才能出口。

  选择算法后,下一步是考虑块大小对应用的影响。在本例中,AES的块大小为16字节。这意味着应用通过USB总线发送的数据量必须是16字节的倍数。如果需要发送小于16字节的数据载荷,则需要填充数据以满足块大小要求。如果使用填充法将数据块补充完整,还必须将这些字节传送到解密设备。加密算法的设计机制是:只要某一位出错或丢失,数据块便无法解密。

  Microchip Technology(美国微芯科技公司)提供免费的USB协议栈,其中包括多个自定义应用风格的演示,以及AES、DES、XTEA和其他加密算法的实现。该协议栈可在微芯公司的网站中找到,数据加密库(部件编号SW300052)也可在网站内找到。该协议栈和数据加密库可与免费的Microsoft Visual Studio C++ Express Edition编译器及其对AES算法的固有支持相结合,以创建加密的自定义USB应用示例。

  需要考虑的最后一点是加密密钥的生成和维护。对于目前可用的高级加密算法而言,数据失窃的根源通常并不是加密算法,而是系统背后的人。对称加密算法(例如AES、TDES和XTEA)具有快速、小巧和安全等优点。其主要缺点是双方必须都知道同一密钥才能加密或解密数据。一旦系统被破解,就会始终保持在破解状态,因此破解将来的传输不再需要额外的精力。这正是存在非对称加密算法的主要原因。非对称算法创建一个公钥和一个私钥,这样在交换信息时无须使用共享密钥。这有助于防止系统的共享密钥泄露并保护系统免遭“破解”,因为每次连接都生成一个新算法。非对称算法常用于交换惟一生成的可用对称密钥,以使后续通信安全快速。非对称算法的主要缺点是,与对称加密算法相比,需要占用大量固件空间才能实现,且速度非常慢。本文介绍的示例中使用对称加密算法,非对称算法的实现过程十分相似。[page]

    创建示例应用

  本示例基于Microchip USB固件示例中提供的自定义HID应用示例。此应用使用USB的人机接口设备(Human Interface Device,HID)类发送自定义数据。除固件外,还提供用C++编写的与设备对话的示例程序。本示例将使用PIC18F46J50 USB演示板(部件编号MA180024)作为硬件平台。

  加密前,使用任何USB协议分析仪均可查看通过总线发送的数据(见图2)。在图2中,主机正在发出获取按钮状态的请求,演示板将返回状态。第一个字节0x81指示此数据包是按钮状态,第二个字节0x01表示按钮未按下。

图2   分析仪中的数据以普通视图显示,任何人均可查看

  创建此示例的固件时应执行以下步骤:

  将加密源代码添加到USB应用示例项目中;

  将发送或接收的数据填充为16字节的倍数,该值是此示例中使用的AES算法的块大小;

  创建加密/解密密钥。此示例使用128位版本的AES,因此需要16字节密钥;

  对通过总线向外传送的数据加密,而对接收自总线的数据解密。

图3  与图2相同的数据传输,但已经过加密

  在图3中,字节1和2的含义并未改变,但已经过加密。因此,没有密钥便无法在总线上解密字节1和2。此外,还增加了一个计数器,使每个数据包之间稍有不同。(后文将介绍为什么可能有人希望增加此功能。)

  在数据传输的PC端,第一步是包含所需加密库。这通过添加一个到内置加密模块的引用实现。使用固件中之前使用的密钥创建加密/解密密钥的实例。现在,通过总线发送的数据将是安全的。这并不意味着系统也安全,但离这个目标已越来越近。

  重放攻击

  尽管发送的数据值现已安全,但由于有重放攻击,系统仍然不安全。重放攻击是指某人在捕捉发送的通信后重放相同的数据。在此处给出的示例中,某人可捕捉请求按钮状态的事件序列以及按钮返回数据包,并使用其创建设备来做出简单的加密响应,指示按钮已按下。攻击者无法判断他们发送了哪些值,但能够使USB主机认为按钮已按下。

  前文所述的加密算法功能有助于保护此应用。由于加密算法的设计机制,任何一位发生变化都会得到完全不同的块值,因此可向每个数据包中加入一个随机数。这会在通信过程中产生看似非常随机的行为。虽然这不能完全消除重放攻击,但它使应用更加难以攻击。有多种方法可实现随机数功能,但都有各自的缺点。

  从主机交换到设备的单个随机数可在初始通信期间生成,该数字随后会包括在发送的数据中。虽然这有助于使各会话间的数据看起来随机化,但只要攻击者确定出通信会话所采用模式,就无法防止他们劫持总线中间通信。

  每次通信都可发送一个惟一的随机数。虽然这使系统更难以破解(因为攻击者需要等待已知请求才能发送已知响应),但它要占用更大的数据存储空间。此方法只有在使用非对称加密时才真正可行。如果使用对称加密,则完整的请求和响应表迟早会被发现,最终破解也会变得轻而易举。

  基于PC的攻击

  对USB数据传输进行加密有助于防止系统被破解,但只要有一个人成功破解系统并将破解方法公之于众,任何人都能在将来进行破解。

  数据到达PC后,在处理敏感数据时仍然需要考虑一些注意事项。PC上没有数据是安全的,即使其已经加密。更为老练的攻击者能够编写应用程序来扫描PC上的RAM,以寻找可能的密钥或解密数据。如果在PC上解密通过USB发送的数据,则在某一时刻,密钥与原始解密数据将驻留在RAM中,从而可被应用程序读取。这需要更长时间和更高级的专业技术才能破解,但仍然存在破解的可能性。在这种情况下,非对称加密可再次帮助保护数据,因为破解需要用户在每次连接设备后都检测新密钥。但这仍然无法完全保护系统。

  解密后的数据仅存在于安全设备的应用最不可能被破解。此模型在某些应用中尤为适用。例如,加密的自举程序可加密安全服务器上的。hex文件,并且只在攻击者无法触及单片机时才在单片机上解密数据。再比如一个将捕捉的数据文件发送到PC的数据记录器,其并不在本地解密数据和显示结果,而是将加密数据通过Internet发送到安全服务器来解密数据,然后将不含敏感数据的结果摘要返回给用户。

  总结

  对于生成并传输惟一或随机机密数据的应用来说,可以用最少的成本轻而易举地进行加密。而静态程度高、传输行为可预测的应用则略难保护。在所有加密系统中,都不应假定数据是安全的,而应该通过加密阻止数据窃取。增加密钥长度、在数据载荷中加入随机性以及非对称密钥交换等技术均可提高对潜在数据窃取的抵御程度。其他一些方法同样有助于保护传输的数据,这些方法各自均有优缺点。在任何应用中设计加密都需要在抵御程度与实现该抵御所需的成本之间找到平衡。 


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
RS232与RS485谁才是UART中的高速公路