一种在操作系统中进行密码运算的方法和系统与流程

文档序号:17222940发布日期:2019-03-27 12:12阅读:326来源:国知局
一种在操作系统中进行密码运算的方法和系统与流程

本发明属于计算机技术、信息安全技术领域,具体涉及一种在操作系统中进行密码运算的方法和系统。



背景技术:

密码技术常用来保护应用系统中的敏感数据,网上交易、电子邮件以及远程登录等服务的安全性都依赖密码技术的保护,一旦密码运算过程中敏感信息的安全性得不到保障,攻击者就可以解密网络上传输的信息,甚至冒充原用户的身份进行诈骗等犯罪行为,用户将遭受极大的损失。因此,保护密码运算中敏感数据非常重要。

近年来与密码技术相关的攻击越来越多,攻击的手法也越来越新奇,从软件层到硬件层,攻击手段层出不穷,攻击方法防不胜防。

攻击者可以利用密码软件自身的安全漏洞来实施内存信息泄漏攻击,以opensslheartbleed为例,它是软件层面上近年来著名的密码软件引擎的安全漏洞。其原理是openssl软件代码在处理heartbeat消息时,没有检查所接收heartbeat消息的非法输入,然后在回复heartbeat响应时就会从内存空间中复制随机地址的、最长可达64k字节的数据,其中就会有密钥数据。引起opensslheartbleed漏洞的软件代码并不是实现密码运算的代码,而是tls协议处理的代码,但是openssl将所有功能都实现在同一进程空间中,所以,有漏洞的tls协议处理代码也可以顺利地访问到密钥数据。此外,密码软件系统的安全漏洞是普遍存在的,难以通过消除某一种特定的安全漏洞来彻底消除隐患。如果提出一种在安全漏洞存在的情况下仍然能够保证密码运算中敏感数据不受内存信息泄漏攻击威胁的方法和系统,就能极大地提高密码软件系统的安全性。

除了应用系统本身的安全漏洞,meltdown和spectre是近期曝出的cpu微架构的漏洞,它们同样对密码运算中的敏感数据安全造成威胁。

meltdown漏洞是cpu硬件的安全问题,在各种cpu中广泛存在,其基本原理如下。攻击者进程在自己的代码中包含访问非法内存地址的攻击代码,由于cpu的乱序执行,该攻击代码会先被cpu执行、影响cache状态,且cache状态与被非法访问的、被攻击内存地址中的敏感信息直接相关;然后cpu进行权限检查、发现内存越界访问后放弃执行结果。但是,cpu放弃执行结果的时候,cache状态没有变化,攻击者就可以进一步利用cache-based侧信道读取该敏感信息。

spectre漏洞源自于cpu硬件的分支预测,同样也影响到大量的cpu。在cpu中的不同任务共用分支预测器,攻击者进程执行大量代码来使得分支预测器进入自己预期的状态。然后,cpu时间片切换到被攻击进程,被攻击进程会按照分支预测器的状态继续执行,访问被攻击进程中的敏感数据、影响cache状态;然后cpu进行预测检查、发现预测错误后放弃执行结果。同样,cpu放弃执行结果的时候,cache状态没有变化,攻击者就可以进一步利用cache-based侧信道读取该敏感信息。

现有方案对meltdown攻击的防御方式主要是在操作系统维护两个页表,一个页表给用户程序使用,一个给操作系统内核使用,并且确保用户程序所使用的页表不会映射高优先级的页面,即不会映射操作系统内核的页面。两个页表的切换,会引起tlb刷新,进而降低内存的访问速度。如果某些应用场景需要大量的内核和用户空间切换(两个页表之间的切换),会造成较高的性能开销,目前该方案的平均性能开销大约是20%。

要完全消除spectre漏洞需要改变处理器的架构,因此该漏洞并不容易修补。现有方案对spectre攻击的缓解手段主要是禁用分支预测器,这同样将带来极大的性能开销。

事务内存(transactionalmemory)提供了一种可用于保护密钥等敏感信息的机制,其关键思想是使临界区投机的执行,仅仅在确定发生数据访问冲突发生后才串行执行。数据冲突是指有多个线程投机的并发执行某个临界区,且多个线程同时访问了同一内存地址且至少有一个是写操作。如果整个事务执行过程都没有发生访问冲突,那么所有事务内对内存的修改将被原子的提交,并对其它线程可见。否则,所有的更新操作将被撤销,然后线程回滚到保存的状态点。intel的tsx技术提供了完全用硬件实现的事务内存,程序员只要指定需要事务执行的区域,处理器将自动进行冲突检测、提交和回滚操作。tsx提供了三个新的指令(xbegin,xend,xabort)来开始、提交、终止(abort)一次事务执行。使用该接口时,程序员需要为xbegin指令指定一个回退处理程序作为参数,事务异常终止后程序会跳转到该回退处理程序处,程序员在此处可以根据上下文,编写进一步处理该情况的代码,例如重新试着以事务的方式运行。



技术实现要素:

本发明提供了一种在操作系统中进行密码运算的方法和系统,实现在操作系统内核中为用户态程序提供密码运算服务的功能,同时对保护密钥和用户密钥进行保护,确保密钥使用时达到以下两个安全目标:a)可防御用户态的各种攻击程序实施的内存信息泄漏攻击;b)保护密钥以及特定算法(sm4加解密运算)的用户密钥可抵抗meltdown和spectre攻击。

本发明采用的技术方案为:

一种在操作系统中进行密码运算的方法,包括以下步骤:

在操作系统初始化可信环境下生成保护密钥,将保护密钥存储在操作系统保留的特权寄存器中;所述特权寄存器不能被用户态程序访问,不能被操作系统用作其他用途;

用户态程序提供密码运算所需的源数据以及经保护密钥加密的用户密钥;

在操作系统内核设置密码运算内核模块,用户态程序调用所述密码运算内核模块完成密码运算;在密码运算中使用保护密钥解密获取用户密钥,然后使用用户密钥完成密码运算,在密码运算结束后清除用户密钥以及中间计算数据,并返回计算结果;

用户密钥的加密过程、用户密钥的解密过程以及密码运算过程使用事务内存保护。

进一步地,系统初始化可信环境下,系统提示要求输入口令,利用该口令生成指定长度的保护密钥,生成的保护密钥被置入系统保留的特权寄存器中。在用户态应用程序调用之前加载密码运算内核模块。

进一步地,用户密钥可以由用户输入的数据生成,也可以由密码运算内核模块内部随机生成,然后使用保护密钥加密后导出,用户密钥生成和加密过程以事务内存的模式运行并且关闭中断,用户密钥加密算法实现不含任何内存写操作,运算更新的数据均存放在寄存器中且为顺序实现。

进一步地,密码运算均在操作系统内核中完成,密码运算内核模块提供系统调用供其他程序使用。在密码运算中,使用保护密钥解密获取用户密钥,然后使用用户密钥完成密码运算,用户密钥解密过程和其他运算过程同样分别以事务内存的模式运行并且关闭中断,用户密钥解密算法以及sm4加解密算法实现不含任何内存写操作,运算更新的数据均存放在寄存器中且为顺序实现。

进一步地,密码运算完成后擦除用户密钥以及中间敏感数据,最后将运算结果返回给用户态调用程序,返回的运算结果可以选择是否经保护密钥加密后输出。

进一步地,密码运算可以是以下一种或多种:hmac、对称加解密、非对称解密、非对称签名。

一种在操作系统中进行密码运算的系统,其包括:

保护密钥生成模块,负责在系统初始化可信环境下生成保护密钥,并将保护密钥存储在系统保留的特权寄存器中;所述特权寄存器不能被用户态程序访问,不能被操作系统用作其他用途;

用户密钥生成模块,负责通过用户态程序提供的源数据或密码运算内核模块内部随机数生成用户密钥,然后使用保护密钥加密后输出;

密码运算模块,负责在用户态程序提供密码运算所需的源数据以及经保护密钥加密的用户密钥后,完成密码运算;所述密码运算使用保护密钥解密获取用户密钥,然后使用用户密钥完成密码运算,在密码运算结束后清除用户密钥以及中间计算数据,并返回计算结果;

密码运算保护模块,负责对用户密钥的加密过程、用户密钥的解密过程以及密码运算过程进行保护,包括事务内存保护和关闭中断。

本发明提出了一种在操作系统中进行密码运算的方法和系统,这种方法利用了inteltsx技术对密钥等敏感信息进行保护,可以在用户态应用程序存在安全漏洞的情况下防御内存信息泄漏攻击,阻止用户态的各种攻击程序获取密钥等敏感信息,同时,该方法中的保护密钥以及特定算法(sm4加解密运算)的用户密钥可以抵抗meltdown和spectre攻击,极大地提高了用户态应用程序密码运算中的密钥等敏感信息的安全性。

与现有技术相比,本发明具有以下优点:

1)将用户密钥加密过程、用户密钥解密过程以及密码运算过程用事务内存保护,可以防止用户态攻击程序通过内存信息泄漏攻击获取密钥等敏感数据。

2)将用户密钥加密过程、用户密钥解密过程以及sm4加解密运算过程关闭中断,密码运算过程不含任何内存写操作,运算更新的数据均存放在寄存器中,可以防止用户态攻击程序通过meltdown攻击获取密钥等敏感数据。

3)将用户密钥加密过程、用户密钥解密过程以及sm4加解密运算过程关闭中断,使用顺序逻辑实现,可以防止用户态攻击程序通过spectre攻击获取密钥等敏感数据。

附图说明

图1是本发明方法的步骤流程图。

图2是系统初始化生成保护密钥的过程。

图3是保护密钥生成后置入到保留特权寄存器中的过程。

图4是用户密钥生成及加密导出的过程。

图5是密码运算内核模块结构图。

图6是用户态程序调用密码运算内核模块的接口完成密码运算的过程。

具体实施方式

为使本发明的上述目的、特征和优点能够更加明显易懂,下面通过具体实施例,对本发明做进一步说明

实施例1:

图1是本发明方法的总体步骤流程图。本实施例在操作系统中进行rsa解密运算,运算结果直接输出,主要包含如下几个步骤:

1、保护密钥生成,如图2所示,包括以下步骤:

1)修改操作系统内核启动过程,添加保护密钥生成过程,保证保护密钥生成过程没有任何用户态程序启动、运行。

2)操作系统启动,保护密钥生成程序被执行,用户操作界面显示提示信息,提示操作员输入口令。

3)操作员输入口令。

4)用户输入的口令作为sha-256杂凑算法的输入,进行sha-256运算,运算获得256位杂凑值,作为保护密钥。

5)擦除口令以及保护密钥生成过程中产生的中间数据。

2、保护密钥置入特权寄存器,如图3所示,包括以下步骤::

1)修改操作系统,设置debug寄存器为保留的特权寄存器,确保无法被用户态程序访问以及不被操作系统用作其他用途,仅密码运算内核模块可访问。

2)将步骤1中生成的保护密钥导入到debug寄存器中。

3、加载密码运算内核模块:

1)在用户态程序调用前加载密码运算内核模块。图5是密码运算内核模块结构图,可以是以下一种或多种进行密码运算:hmac、对称加解密、非对称解密、非对称签名。

2)密码运算内核模块加载时设置用户态接口,包括sm4加解密接口、rsa解密接口等。

4、用户密钥生成:

如图4所示,用户密钥生成有两种方式,本实施例1选择使用用户输入的数据生成用户密钥并加密后导出,具体过程如下:

1)用户态调用程序请求生成用户密钥并输入一段数据。

2)关闭中断。

3)调用xbegin指令,将事务abort的跳转地址设置为事务abort处理程序。

4)密码运算内核模块利用该数据作为rsa密钥生成算法的输入,进行rsa密钥生成运算,运算结果作为用户密钥。

5)从debug寄存器中读取保护密钥,使用保护密钥对用户密钥进行sm4加密,该sm4加密算法经过特别编码,不含任何内存写操作,运算更新的数据均存放在寄存器中,仅使用异或和循环左移指令实现整个运算,并且不含判断、循环等破坏顺序执行的指令。用户密钥加密完成后擦除密钥生成过程的中间数据。

6)调用xend指令。

7)开启中断。

8)将密文用户密钥返回给用户态调用程序。

5、基于用户密钥的密码运算,如图6所示,包括以下步骤:

1)用户态程序调用密码运算内核模块rsa解密运算接口,传入rsa解密运算所需的源数据以及用户密钥,设置密码运算结果是否加密输出的参数为0。

2)关闭中断。

3)调用xbegin指令,将事务abort的跳转地址设置为事务abort处理程序。

4)从debug寄存器中读取保护密钥,使用保护密钥对用户密钥进行sm4解密,该sm4解密算法同样经过特别编码,不含任何内存写操作,运算更新的数据均存放在寄存器中,仅使用异或和循环左移指令实现整个运算,并且不含判断、循环等破坏顺序执行的指令。用户密钥解密完成后擦除该过程的中间数据。

5)调用xend指令。

6)开启中断。

7)关闭中断。

8)调用xbegin指令,将事务abort的跳转地址设置为事务abort处理程序。

9)使用明文用户密钥进行rsa解密运算,运算完成后擦除密码运算过程中的中间数据以及用户密钥。

10)调用xend指令。

11)开启中断。

12)返回密码运算结果。

实施例2:

本实施例在操作系统中进行sm4加密运算,运算结果经保护密钥加密后输出,主要包含如下几个步骤:

1、保护密钥生成、保护密钥置入特权寄存器以及加载密码运算内核模块步骤与实施例1相同。

2、用户密钥生成,:

本实施例2选择在密码运算内核模块使用内部随机数生成用户密钥并加密后导出,如图4所示,具体过程如下:

1)用户态调用程序请求密码运算内核模块直接生成用户密钥。

2)关闭中断。

3)调用xbegin指令,将事务abort的跳转地址设置为事务abort处理程序。

4)密码运算内核模块使用其内部随机数作为sm4密钥生成算法的输入,进行sm4密钥生成运算,运算结果作为用户密钥。

5)从debug寄存器中读取保护密钥,使用保护密钥对用户密钥进行上述sm4加密。用户密钥加密完成后擦除密钥生成过程的中间数据。

6)调用xend指令。

7)开启中断。

8)将密文用户密钥返回给用户态调用程序。

3、基于用户密钥的密码运算,如图6所示,包括以下步骤:

1)用户态程序调用密码运算内核模块sm4加密运算接口,传入sm4加密运算所需的源数据以及用户密钥,设置密码运算结果是否加密输出的参数为1。

2)关闭中断。

3)调用xbegin指令,将事务abort的跳转地址设置为事务abort处理程序。

4)从debug寄存器中读取保护密钥,使用保护密钥对用户密钥进行上述sm4解密。用户密钥解密完成后擦除该过程的中间数据。

5)调用xend指令。

6)开启中断。

7)关闭中断。

8)调用xbegin指令,将事务abort的跳转地址设置为事务abort处理程序。

9)使用明文用户密钥进行sm4加密运算,该sm4加密算法实现与上述sm4加密算法实现相同。运算完成后擦除该运算过程中的中间数据,然后从debug寄存器中读取保护密钥,使用保护密钥对密码运算结果进行上述sm4加密。最后擦除该运算过程中的中间数据以及用户密钥。

10)调用xend指令。

11)开启中断。

12)返回经保护密钥加密后的密码运算结果。

实施例3:

本实施例提供一种在操作系统中进行密码运算的系统,其包括:

保护密钥生成模块,负责在系统初始化可信环境下生成保护密钥,并将保护密钥存储在系统保留的特权寄存器中;所述特权寄存器不能被用户态程序访问,不能被操作系统用作其他用途;

用户密钥生成模块,负责通过用户态程序提供的源数据或密码运算内核模块内部随机数生成用户密钥,然后使用保护密钥加密后输出;

密码运算模块,负责在用户态程序提供密码运算所需的源数据以及经保护密钥加密的用户密钥后,完成密码运算;所述密码运算使用保护密钥解密获取用户密钥,然后使用用户密钥完成密码运算,在密码运算结束后清除用户密钥以及中间计算数据,并返回计算结果;

密码运算保护模块,负责对用户密钥的加密过程、用户密钥的解密过程以及密码运算过程进行保护,包括事务内存保护和关闭中断。

上述实施例1、2中仅以rsa解密运算、sm4加密运算为例说明了本发明方法的具体实施方式,本方面方法还可应用于各类hmac、对称加解密、非对称解密、非对称签名运算,密码算法包括但不限于:aes、des、3des、sm4、md5、sha1、sm3、rsa、ecc、ecdsa、sm2。

以上实施仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的精神和范围,本发明的保护范围应以权利要求书所述为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1