首页> 中国专利> 一种抵御冷启动攻击的公钥密码实现方法

一种抵御冷启动攻击的公钥密码实现方法

摘要

一种抵御冷启动攻击的公钥密码实现方法,包括:禁用系统对SSE、AVX指令集扩展的支持,并防止系统内核在进程切换的时候将YMM寄存器组中的内容交换到内存中;只利用CPU的寄存器而不利用内存实现公钥加密算法;增加系统调用用于设置密钥、私钥加密、资源分配、资源回收;在进程退出时操作系统会回收资源的地方增加回收已分配给该进程的公钥密码计算资源的功能;用户空间进程调用系统调用实现可抵御针对内存的旁路攻击的公钥密码算法。本发明可以在不增加额外硬件的条件下,为使用X86-64 CPU硬件平台的计算机上的公钥密码算法增加抵抗针对内存的旁路攻击的能力,使得在密码系统运行过程中,系统的私钥不会因为遭到针对内存的旁路攻击而泄露。

著录项

  • 公开/公告号CN102694649A

    专利类型发明专利

  • 公开/公告日2012-09-26

    原文格式PDF

  • 申请/专利权人 北京大学;

    申请/专利号CN201210171306.4

  • 发明设计人 关志;杨阳;董秋香;朱佳伟;陈钟;

    申请日2012-05-29

  • 分类号

  • 代理机构北京万象新悦知识产权代理事务所(普通合伙);

  • 代理人苏爱华

  • 地址 100871 北京市海淀区颐和园路5号

  • 入库时间 2023-12-18 06:42:37

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2014-09-24

    授权

    授权

  • 2012-11-21

    实质审查的生效 IPC(主分类):H04L9/30 申请日:20120529

    实质审查的生效

  • 2012-09-26

    公开

    公开

说明书

技术领域

本发明属于信息安全技术领域,具体涉及一种抵御冷启动攻击的公钥密码实现方法。

背景技术

在理论上,对密码系统的攻击一般通过对密码算法弱点的分析和对密钥的暴力破解两种 方法来进行。由于主流的密码算法的安全性往往经过学术研究和工业实践的充分检验,使用 的密钥长度也往往足够长,所以一次成功的攻击往往需要消耗大量的时间和计算资源,其成 本远大于可能得到的收益,从而保证了密码系统的安全性。

然而,对于实际部署中的密码系统,其安全性不仅与算法本身的安全性有关,还取决于 算法具体实现以及软硬件计算环境等多方面因素。旁路攻击(side channel attack)就是这样 的一种攻击方式:通过利用密码系统具体实现和计算环境中的安全缺陷,攻击者可以在无需 破解密码系统的基础数学难题或者对密钥进行暴力破解的条件下,获得系统执行加解密过程 中可以用来还原密钥的中间状态,甚至直接获得密钥本身。旁路攻击大大降低了攻击者有效 破解现实密码系统的难度,严重威胁现实系统的安全性。尤其是对于一些被普遍认为是安全 甚至被当作系统安全的基本前提假设的系统设计方案,一旦被发现了可行的旁路攻击方法, 往往会产生广泛而重大的安全隐患。

冷启动攻击(cold boot attack)是近年来出现并备受关注的一种旁路攻击方法。过去,人 们通常认为,在计算机系统的电源被切断后以后,保存在内存(动态存储器,Dynamic RAM, DRAM)中的数据会因为掉电而立即消失,除非获得了足够高的权限,攻击者无法访问系统中 其他进程的内存数据。所以,很多开发者都选择直接将密钥以及密钥的调度表等敏感数据直 接保存在内存中。然而,学术界和技术界的研究表明,对于正在运行的计算机的内存,即使 是在常温下被从主板拔出,其中的数据也会在掉电后保留数秒钟之久而不会发生明显的丢失 (即存储单元的值反转);如果使用了简单的冷却技术进行降温,数据保留的时间会大大增加。 尽管用户的计算机的BIOS或操作系统可能在系统正常的关机或重启过程中执行清除内存的 操作,但如果攻击者直接切断电源,这些机制将无法发挥作用。这样,攻击者就可以将目标 内存转移到另一台准备好的没有相关安全机制的电脑上,用一个自制的引导程序将目标内存 的数据转储到磁盘或其它永久存储设备上。综上,攻击者可以按照下列操作流程执行冷启动 攻击:

准备:

●正在运行的待攻击的计算机,简称目标机。

●冷却剂,比如罐装空气(canned air),用于冷却内存。

●一台没有内存清除机制的计算机,用于执行攻击,转储目标机的内存,下称执行机。

●一个简单的引导程序,用于将内存转储到硬盘、U盘等存储设备。由于其在引导的时 候需要占用一部分内存,所以这个引导程序的编写要尽可能简单,并占用尽量少的 内存,能完成转储功能即可。可以根据执行机的硬件情况灵活选择加载方式,比如U 盘、PXE等。

执行步骤:

1)使用冷却剂对正在运行的目标机的内存进行冷却。

2)切断目标机的电源,拔下内存,迅速插入到执行机中,启动执行机。根据相关研究 的实验结果,这个过程中目标机的内存中的数据损失非常小,且当执行机启动后, 内存加电,数据将不再丢失。

3)执行机启动后将自动加载引导程序,引导程序将目标机的内存转储到磁盘上。

4)攻击者采用特定算法从目标机的内存映像中恢复出密钥或密码运算中关键的中间状 态,攻破密码系统。

一次成功执行冷启动攻击的过程如图1所示。

不难看出,执行冷启动攻击并没有太高的技术门槛,一旦攻击者做好准备(执行机、引 导程序、冷却剂等),并有机会物理上接触到待攻击的计算机,便可在数分钟之内将其内存转 储;而相关研究结果表明,恢复密钥的工作也可以在数分钟之内完成。同时,受到目前通用 计算机体系结构的限制,大量密码系统都将密钥或中间状态放在内存中,所以,冷启动攻击 的出现为目前的计算机安全体系结构带来了巨大的安全威胁,在学术界和工业界都得到了广 泛的关注。

现代密码体制主要包括对称密码体制和公钥密码体制两类。在对称密码体制中,加解密 采用相同密钥,因此通信双方必须事先完成密钥协商,且信任对方不会泄露密钥。对称密钥 加解密速度较快,资源消耗较少,可用来保证数据的完整性和保密性,但具有需要事先协商 密钥、无法验证加密者身份、多方通信密钥管理困难等缺点。常用的对称密码算法包括DES、 AES、IDEA等。

针对对称密码体制的缺点,学术界提出了公钥密码体制。在公钥密码体制中,加密和解 密是相互独立的,分别使用两把不同的密钥,由一把密钥加密过的信息只能用另一把密钥进 行解密。两把密钥中,一把由其密钥持有者自己秘密保管,称为私钥,另一把可以公开发布 给任何想与密钥所有者通信的人,称为公钥。用一把密钥加密过的信息只能用另一把密钥进 行解密。使用公钥密码体制,其他用户可以用公钥加密数据发送给私钥持有者,保证信息的 机密性;私钥持有者可以用私钥对信息进行数字签名,接受信息的用户便可用公钥验证信息 的来源,并保证信息的完整性,且第三方可以通过公钥对信息进行验证,实现对信息的抗否 认性。公钥密码体制的密钥长度往往相对较长,计算速度相对较慢,因此常与对称密码体制 结合使用。常用的公钥密码算法包括Diffie Hellman、RSA、EIGamal、椭圆曲线(Elliptic Curve  Cryptography)等。

目前,学术界已经出现有效的在内存镜像中搜索密钥的方法,因此,无论是公钥密码体 制还是对称密码体制,一旦将密钥或重要的中间状态放在内存中,都容易受到冷启动攻击而 导致密钥泄露;换句话说,要抵御冷启动攻击,就需要将密钥及密码算法计算过程的重要中 间状态移出内存,放到更安全的难以进行攻击的设备中。在学术界,目前已经出现几种类似 的抵御针对对称密码体制的冷启动攻击的方法。但相对于简单高效的对称密码算法,公钥密 码算法往往计算复杂、密钥较长,实现起来需要更大的存储空间和更高的技术要求,目前无 论在学术界还是工业界都还没有有效抵御针对公钥密码的冷启动攻击的方法。而公钥密码算 法是如今各种密钥交换协议、签名认证协议等安全框架的重要基础,具有广泛的应用,如果 不能有效解决针对公钥密码体制的冷启动攻击,将会为依赖这些协议进行信息交换的各行各 业带来严重的安全隐患。

发明内容

本发明旨在提出一种针对公钥密码体制的可以抵御冷启动攻击的办法。

本发明的技术方案如下:

一种抵御冷启动攻击的公钥密码实现方法,包括如下步骤:

A.禁用系统对SSE、AVX指令集扩展的支持,并防止系统内核在进程切换的时候将YMM 寄存器组中的内容交换到内存中;

B.只利用CPU的寄存器而不利用内存实现公钥加密算法,即加密过程中密钥、中间状 态都只存在于寄存器组中;

C.增加如下系统调用:

a)设置密钥:用于将私钥保存在YMM寄存器中;

b)私钥加密:用于执行私钥加密操作;

c)资源分配:X86-64体系结构的CPU的一个核心在同一时刻可以也仅可以用来为 一个进程执行本发明提出的公钥密码计算,因此本发明将CPU的一个核心成为 一组公钥密码计算资源,可分配的资源的数目对应于CPU的核心数目。本系统 调用用于请求为当前进程分配可用的公钥密码计算资源有空闲计算资源时分配 成功,资源分配的结果(即哪个CPU核心被分配给了哪个进程)被写入系统空 间中的一个全局数组中用于后续的资源分配查询和资源回收;

d)资源回收:用于回收当前进程已分配的公钥密码计算资源;

D.在进程退出时操作系统会回收资源的地方增加回收已分配给该进程的公钥密码计算 资源的功能;

E.用户空间进程调用步骤C所述的系统调用实现可抵御针对内存的旁路攻击的公钥密码 算法。

所述的公钥密码实现方法,其特征是,步骤E所述公钥密码算法如下:

1)使用系统调用c)分配公钥密码计算资源;

2)用户通过安全途径加载加密用的私钥,使用系统调用a)设置私钥,之后清除私 钥在加载过程中占用过的内存;

3)使用系统调用b)执行使用私钥的公钥密码加密算法;

4)进程退出前释放已分配的公钥密码计算资源。

所述的公钥密码实现方法,其特征是,步骤C中,在每个系统调用开始时,需要禁用中 断,实现原子操作,并启用CPU对SSE、AVX指令集扩展的支持;在系统调用结束时,需 用禁用CPU对SSE、AVX指令集扩展的支持,启用中断。

所述的公钥密码实现方法,其特征是,在系统调用a)和b)的开始处,需要根据使用系统 调用c)分配资源的情况选择被分配到当前进程的CPU执行核心进行执行。

所述的公钥密码实现方法,其特征是,步骤B中,明文输入、密文输出都通过寄存器和 内存之间的数据复制完成。

所述的公钥密码实现方法,其特征是,步骤1)中,如果公钥密码资源分配失败,用户 可以选择等待一段时间或关闭其他占用密码资源的进程再尝试重新分配;当资源分配成功后, 被分配资源的进程将独占该密码资源,其它进程对该密码资源的访问的尝试将被禁止。

本发明的有益效果为,可以在不增加额外硬件的条件下,为使用X86-64 CPU硬件平台 的计算机上的公钥密码算法增加抵抗针对内存的旁路攻击的能力,使得在密码系统运行过程 中,系统的私钥不会因为遭到针对内存的旁路攻击而泄露。

附图说明

图1对于一般的密码系统,攻击者通过冷启动攻击成功得到保存于内存中的密钥的流程;

图2本发明所述方法的流程图。

具体实施方式

本发明的实施条件如下:

●硬件:使用X86-64体系结构支持AVX指令集的CPU(Sandy Bridge架构以后的Intel  CPU或Bulldozer架构以后的AMD CPU)的计算机系统

●软件:可对内核源码进行修改并重新编译的操作系统

具体实施步骤如下(流程参图1):

A.为了防止系统中其它部分的代码使用SSE或AVX指令集访问YMM寄存器组,导致 私钥泄露或被破坏,本发明需要禁用系统对SSE、AVX指令集扩展的支持,使得除本发明相 关的特定代码外,其它任何代码都不能使用SSE、AVX指令集扩展中的指令访问YMM寄存 器组;在进程切换时,系统一般会将YMM寄存器组中的内容保存到内存中,这将给本发明 带来私钥泄露的安全威胁,也需要通过修改内核来禁止。例如,在Linux操作系统中,可以 修改内核中的native cpuid函数,将其返回值中代表SSE、AVX等指令集扩展的相关标志位 清零即可禁止系统中的其它代码使用SSE或AVX指令集并且在进程切换的时候不会保存 YMM寄存器组的内容。

B.为了防止私钥或使用私钥进行密码计算的中间状态泄露到内存中导致的私钥泄露,本 发明需要使用汇编语言,只利用CPU的寄存器作为存储空间实现公钥加密算法。从AVX指 令集开始,X86-64体系结构的CPU具有16个256位的YMM寄存器,加上14个64位通用 寄存器(不使用RSP和RIP),将可提供至少(16*256+14*64)=4992位的存储空间,加之指令 集对加、减、乘、除、异或、无进位乘法等基本运算良好的支持,可以实现163位、233位 的二进制域上的椭圆曲线运算,192位、224位素数域上的椭圆曲线的运算等基本的公钥密码 算法。

C.由于本发明在整个系统内禁用了其它代码使用SSE、AVX指令集,但本发明实现的 公钥密码算法又需要SSE、AVX指令集的支持,所以需要在内核中实现密码算法,并在算法 的代码开始前启用系统对SSE、AVX指令集的支持,且在算法执行完成后再禁用对SSE、AVX 指令集的支持。这可以通过修改保存在CR4寄存器中的标志位来实现。同时,由于密码算法 在内核中实现,而本发明希望用户层的应用也可以使用本发明提供的密码算法实现,所以本 发明以系统调用的形式向用户层提供了一个调用密码算法的接口,所述系统调用指在操作系 统内核中实现的供用户层程序访问系统内核中功能的编程接口。根据密码算法的运算流程, 本发明需要实现两个系统调用分别用于用户设置密钥和执行密码运算。由于密码运算在密钥 载入CPU后将一直独占该CPU的YMM寄存组,所以在CPU的一个核心上同一时间只能运 行一个密码算法的实例且只能被一个进程独占,而不同核心则可被分配给不同进程用于不同 的密码运算。所以,本发明需要实现另外两个系统调用分别用于密码运算资源的分配和回收。 由于密码运算过程中会使用通用寄存器组保存运算的中间状态,所以在密码运算开始前需要 关闭中断以保证一次密码运算的过程是原子操作,在运算完成前不会发生进程切换导致通用 寄存器组中的内容被切换到内存中去,并在运算结束后打开中断以保证系统中其它代码的正 常运行。

D.为了防止进程在申请了公钥密码计算资源后异常退出导致已分配的资源无法被回收, 本发明需要修改操作系统的进程退出时回收资源的代码,增加回收已分配给该进程的公钥密 码计算资源的功能。

E.利用以上各部分的工作,用户空间中的代码可以按照以下步骤调用本发明提供的防止 针对内存的旁路攻击的公钥密码算法:

1)使用本发明提供的系统调用尝试获取可用的公钥密码计算资源(下简称“资源”)。

由于可用资源的数目与CPU的核心数目相同,主流的CPU往往只有4个核心,所以 这一步可能因为没有可分配资源而失败。如果分配失败,用户可以选择等待一段时 间或关闭其他占用资源的进程再尝试。当资源分配成功后,被分配资源的进程将独 占该资源,其它进程对该资源的访问的尝试将被禁止。

2)在成功获得公钥密码计算资源后,用户可以使用代码从U盘或其它安全的存储设备 处读取私钥到内存中,再使用本发明提供的系统调用将内存中的私钥存入CPU中用 于密码运算,再将内存中曾用于保存私钥的内存单元清零。根据冷启动攻击的原理, 攻击者需要在目标计算机的使用者不在场的情况下具有物理接触目标计算机的权限 才能执行攻击,所以虽然私钥载入的过程中私钥会短暂地在内存中停留,但由于使 用者在场负责密钥载入,可认为这个过程是安全的。而在此之后私钥将不再出现在 内存中,所以整个密钥的载入和使用的过程都可以认为是安全的。

3)在成功载入密钥之后,用户进程可以使用本发明提供的系统调用进行私钥加密操作 (设置私钥后可反复执行)。由于明文和密文的泄露都不会威胁系统安全,所以明文 和密文都可以保存在内存缓冲区中,通过系统调用进行传入和传出。

4)在进程退出前,用户代码需要通过系统调用显式释放已分配的资源,或由系统内核 中修改过的进程退出资源回收机制自动释放。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号