高安全性远程控制系统
在远程控制操作系统中,安全性始终是一个值得关注的问题。此类系统的设计必须能够阻止未经授权的访问。设计时可以采用特殊的软件和加密方法来防止窃听。这也是此类系统采用加密通信的原因。理想情况下,只有获得授权的接收方才能解码并处理相关信息,而适当的加密级别通常可以满足这一要求,但仍存在复制和重新传输有效数据的可能性。目前,人们采用了各种不同方法来避免这类问题,但没有任何一种方法能够做到尽善尽美。 本文将介绍一种高安全性远程控制系统的实现方案,这种方案可以有效抵御捕获和重放攻击。数据包通过无线方式发送,其中含有时间同步信息,而且仅在很短的时间范围内有效,任何进一步的捕获和重放攻击都没有任何作用。即使捕获和重放消息中包含(绝大部分)正确的信息,消息也会因为时间范围失效而被丢弃。我们将介绍上述解决方案以及设计此类系统时面临的技术挑战。 常规远程控制设计可采用多种实现方案和安全级别。当然,安全级别越高,成本通常也越高。但是,借助智能固件并利用现代单片机片内外设数量越来越多的优势,设计安全性非常强大的远程控制系统已变得更加经济高效。通常,远程控制的安全级别与最终应用直接相关。例如,控制光源或风扇实际上并不需要加密。但将系统设计为允许(不允许)访问有价值的资产时,则需要增加一定的安全级别,而这会带来成本。 验证与私密性 目前,可以使用的加密算法有多种,可根据具体的系统进行选择。通常,验证和安全性之间存在区别。验证更常用于加密数据本身不携带任何特定信息的情况(例如命令和消息),更多用于验证某个设备。一个很好的例子是制造商会在安装所选备件后进行验证。使用这些备件之前,系统首先对其进行验证,确认有效后系统才开始正常运行。这类典型设备包括打印机墨盒、电动牙刷头、手机电池甚至电子模块。此类设备通常使用SHA-2加密哈希函数等哈希算法。这些函数根据较长的消息来计算密钥。例如,从Internet下载较大的文件时会使用MD5校验和。MD5算法会读取整个文件,然后生成密钥。稍后计算所得的哈希值将用于验证所下载文件的完整性(可靠性),而不会提供任何恢复原始数据的方法。换句话说,仅仅拥有密钥并不意味着可以逆向生成用于生成密钥的原始数据。通常,在此类应用中,验证更多地用于为业务提供保护而不是实现私密性。 另一方面,采用隐私策略的系统会使用XTEA或AES等加密算法。这些算法均为行业标准加密算法,广泛应用于各式各样的电子设备,而且对于大多数应用而言,它们能够提供足够的安全性。这些算法通过硬件方式和软件方式均可实现。至于硬件和软件实现方案哪种更为安全,业内人士(甚至专家)持有不同观点。 提高加密强度意味着增加成本 通常,更高的安全级别将会导致系统总体成本增加。不论以硬件方式还是以软件方式实现安全性都会对总体成本产生影响,即使是纯软件实现方案也会产生新的附加成本,这是因为固件需要占用更多存储空间。需要的存储空间越多,附加成本越高。 如上文所述,一些实现方案采用硬件加密模块实现,而另一些则采用软件实现,但本质上两种实现方案都会产生附加成本。软件实现方案对程序和数据存储器的要求更高;另一方面,硬件实现方案对硅芯片尺寸存在更高的要求。两种方案各有利弊,具体需要由系统设计人员选择。 但是,即使采用非常高的安全级别,也无法完全阻止捕获和重放或者阻塞和选择性重放信息等攻击。 典型的安全威胁 暴力攻击是一种非常基本的密码分析攻击,这种攻击会尝试所有可能的密码组合,直到获得正确的密码。当然,这更多地是一种理论方法而不能作为实际实现方案,而且根据可能的组合数量,攻击过程可能需要很长的时间才能完成。对于现代加密方法,此类攻击可能需要很多年才能完成。 捕获和重放攻击是一种具有欺骗性的攻击,它会捕获和重新传输有效数据。避免此类攻击的应对措施有多种,采用会话令牌是其中的一种。这种令牌用作加密系统的一部分,仅对此特定会话有效。另一会话无法使用此令牌(以及通过此令牌获得的数据传输)。一次性密码与会话令牌十分相似,唯一区别在于一次性密码用于验证会话中的单个事务。不过,在单向系统中这两种措施都很难实现。 消息验证代码是添加到数据事务中的一小段信息,用于验证消息并提供数据完整性。数据完整性确保检测到意外和蓄意的消息更改,而可靠性可确保消息的来源。此方法主要用于验证而无法实现私密性。 时间戳是用于防止捕获和重放攻击的另一种方法。这种方法会定期发送带有时间戳的消息。在接收端,会将时间戳与本地估计的时间戳(在合理容差内)进行比较。这会带来一些特殊的设计挑战。 计时源 为了解决目前面临的一些主要安全威胁,本文提出一种采用限时有效数据包概念的系统。换句话说,发送器/编码器通过无线技术发送的每个数据包都具有时效性。即使数据包本身的加密及所含数据完全有效,数据包也仅在限制的时间段内有效。对于这种系统,捕获和重放攻击成功的几率非常低。这是因为这类攻击要捕获数据包并在稍后重新传输,而数据包仅在传输的时间范围内有效。 要实现此方案,每个数据包都需要包含一个时间戳。因此,发送器需要具有计时源。最早的实现方法是采用晶振(32.768 kHz是个不错的选择)。当今单片机的晶振驱动的计时外设可在低功耗状态下工作,因此,处理器甚至可在休眠模式下记录时间。还可以使用其他计时方法,前提是要有良好的稳定性,不易受时间和温度变化的影响。 在解码器侧,将使用类似的计时机制(如果不使用相同的机制)。编码器与解码器首次配对时,解码器将存储序列号及其定时器值等信息,然后解码器将存储用于表示编码器和解码器板载定时器之间的时间差的时间差值。此时,编码器已与解码器实现同步。之后,当解码器接收来自编码器的数据传输时,将评估期望的时间值(根据解码器的定时器和已保存的来自编码器的上一个时间戳)和来自编码器的时间戳。如果两个值匹配,则解码器将采取适当的操作(即,打开门)。 不过,接收器/解码器侧需要支持多个此类编码器,而不仅仅支持一个编码器。因此,解码器需要具有多个不同的时间值,以对应于与解码器配对的所有编码器。显然,解码器无法实现多个此类定时器。我们的解决方案是在解码器侧使用单个定时器并针对每个解码器采用时间差值。这些时间差值需要保存在为各个编码器保留的非易失性存储器中。当来自编码器的数据包到达后,解码器将读取为该特定编码器保存的时间差值并使用当前定时器值估计编码器发送的定时器值。解码器将再次比较两个时间值,如果它们匹配(或它们的差值很小,在可接受范围内),解码器将采取适当的操作。 同步 整个同步机制基于编码器侧和解码器侧自由运行的定时器而建立。理想情况下,两侧的定时器将同步运行并持续保持同步状态。但所有计时器件的稳定性和精度都有限。稳定性和精度较高的器件可能非常昂贵。因此,选择合适的计时机制更多是在设计时进行权衡。典型的实现方案是在编码器侧和解码器侧同时使用相同的计时电路,而使用晶振是一种经济高效的解决方案。不过,即使在编码器侧和解码器侧使用相同的晶振,它们的频率也存在一定偏差。 首先,晶振具有初始精度。此精度由晶振制造商指定,通常在5 ppm到40 ppm(百万分率)范围内。晶振的初始精度取决于制造过程。晶振频率并不完全等于指定的值,而是非常接近该值。每个晶振都有特定的频率且不随时间变化。 其次,晶振对温度很敏感。振荡频率在25 ℃下指定。在-20 ℃到50 ℃之间,频率变化最大可达20 ppm。 第三,还必须考虑晶振老化的情况。因为晶振要经过很长一段时间才会老化,因此这一点相对而言并不特别重要。将上述所有容差考虑在内将意味着编码器侧和解码器侧的定时器永远无法实现完全同步(首次配对除外)。解码器将无法计算出与编码器实际时间完全匹配的值,而只能计算近似值,但仍然可以使用容许时间窗使解码器与所有编码器保持同步。例如,同步后,编码器和解码器之间的定时器偏差将达到最小。随着时间推移,编码器和解码器之间的时间差将逐渐增大。而被解码器视为有效数据包的最大时间差由解码器确定。 重新同步 由于系统依靠两端的定时器来实现持续同步,因此确保定时器的运行不会中断就显得非常重要。有时会因断电(如主电网事故或更换电池)而导致不再保持同步。 在编码器侧,电池电量耗尽而需要更换时通常会发生这种情况。这种情况通过手动重新同步编码器便可轻松解决。在解码器侧,断电会造成更为严重的后果,解码器需要与多个编码器保持联系时尤其如此。当编码器数量相对较少时,可以重新同步所有编码器。但如果系统包含多个编码器,则手动同步所有编码器并非明智之举。这种情况下,建议解码器采用备用计时电路,如带有备用电池的实时时钟电路。 结论 本文介绍的实现方案可带来非常高的安全性,基本上可以抵御捕获和重放以及RF阻塞等系统攻击。 这种方案的另一项重要优势在于此类编码器可以配合多个解码器使用,因为解码器只会验证时间同步和编码器的可靠性。总之,这是一种安全性较高而又经济高效的安全解决方案。对于用户而言,此解决方案与其他方案相比并无任何差别而且易于使用。 此技术可轻松与验证方案配合使用,因此也可以实现较高级别的OEM防护。上述技术可通过Microchip Technology的新型MCS3142高安全性编码器实现。 本文介绍的技术是Microchip Technology Inc.的专利。 商标 Microchip的名称和徽标组合为Microchip Technology Inc.在美国和其他国家或地区的注册商标。在此提及的所有其他商标均为各持有公司所有。 |