30 Side Channel Attack

32. 密码学系列之:奇思妙想的攻击手段侧通道攻击

简介

密码学就是攻和守的交互,密码学家每创建出一种密码算法,都会有相应的破解手段,如果还没有出现,可能是时间还未成熟。

当然,这些破解手段都是针对于密码本身或者软件的bug而言的。今天给大家介绍一个脑回路十分惊奇的攻击方法,叫做侧通道Side-channel attack攻击。

侧通道攻击

在计算机安全中,side-channel攻击是指根据任何基于从计算机系统的实现中获得的信息,而不是基于已实现的算法本身的弱点(如密码分析和软件漏洞)的攻击。

这些可获得的信息包括时序信息、功耗、电磁泄漏甚至声音都可以提供额外的信息来源,从而被利用。

大部分侧通道攻击都是采用的统计学上的方法进行的,本文将会给大家介绍一些侧通道攻击的例子。

时序攻击

时序攻击的英文叫做Timing-attack, 它是指基于测量各种计算需要多少时间来执行的攻击。比如比较攻击者的给定密码和受害者的未知密码。

听起来是不是不可思议?

它的攻击原理是:计算机中的每一个逻辑操作的执行都需要时间,而时间会根据输入的不同而不同,通过精确测量每一个操作的时间,攻击者可以对输入的时间进行倒推。

这种做法比使用已知明文、密文对的密码分析要容易得多。

通过测量响应某些查询所需的时间,就可以得到系统泄露的信息。当然,这些信息是否对攻击者有帮助,还取决于其他的很多变量,比如密码系统设计、运行系统的CPU、使用的算法、各种实现细节、定时攻击对策、定时测量的准确性等。时序攻击可以应用于任何具有数据依赖性时序变化的算法。

比如Unix早期版本中的登录程序只有在登录名被系统识别时才会执行加密函数。根据执行时间的不同,就为时序攻击提供了机会。

攻击者可以利用这种泄漏,首先应用暴力手段产生一个已知有效的登录名列表,然后试图通过将这些名字与一大堆已知经常使用的密码结合起来来获得访问权。

如果在没有任何有效登录名信息的情况下,执行这种破解方法所需的时间将以几何数目的方式增加。

所以在后来的Unix版本已经修复了这个漏洞,不管登录名是否有效,总是执行加密函数。

我们再看一个时序攻击的代码:

bool insecureStringCompare(const void *a, const void *b, size_t length) {
  const char *ca = a, *cb = b;
  for (size_t i = 0; i < length; i++)
    if (ca[i] != cb[i])
      return false;
  return true;
}

上面的例子中来比较两个字符串是否一致,但是它的逻辑是一个一个字符进行比较,如果发现不一致就立即返回。

这样破解者可以根据执行时间的不同来进行密码猜测。

怎么解决这个问题呢?

第一中方法就是加入一些混淆手段,让业务逻辑和执行时间无关,另一种方法就是无论输入是什么,总是保证确定的执行时间,如下:

bool constantTimeStringCompare(const void *a, const void *b, size_t length) {
  const char *ca = a, *cb = b;
  bool result = true;
  for (size_t i = 0; i < length; i++)
    result &= ca[i] == cb[i];
  return result;
}

上面的例子中,不论输入的比较字符串是否有部分匹配,都执行所有的操作,从而保证执行时间的一致性。

Power analysis

这种攻击方法叫做功率分析,攻击者通过研究密码硬件设备的功耗,来找到它和程序的联系。

这些攻击取决于设备的基本物理特性:设备内电压的变化需要很小的电荷(电流)运动。 通过测量这些电流,可以了解有关正在处理的数据的少量信息。

功率分析有两种方式,分别是简单的功率分析(SPA)和差分功率分析(DPA)。

简单的功率分析(SPA)主要研究可视化地描述功率迹线或随时间变化的电活动图。

差分功率分析(DPA)是功率分析的一种更高级的形式,它可以使攻击者通过对从多个密码操作中收集的数据进行统计分析,来计算密码计算中的中间值。这两种方法是在1998年,被Paul Kocher,Joshua Jaffe和Benjamin Jun等人引入开放密码学社区的。

electromagnetic attacks

在密码学中,电磁攻击是通过测量设备发出的电磁辐射并对其进行信号分析而进行的侧通道攻击。其原理是不同的操作会发出不同的辐射量,加密的电磁跟踪可能会显示出正在执行的确切操作,从而使攻击者能够检索出全部或部分私钥。

与许多其他侧通道攻击一样,电磁攻击取决于加密协议的具体实现,而不是算法本身。电磁攻击通常与其他侧通道攻击一起进行,如功率分析攻击。

其他攻击方法

除了上面提到的攻击方法,还有缓存攻击,声学密码分析,差异性故障分析等。感兴趣的朋友可以深入研究研究。

> 本文已收录于 [www.flydean.com]**(www.flydean.com)

> 最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

> 欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!

最后更新于