具有基于进程的密钥库的计算装置和操作计算装置的方法

文档序号:6656011阅读:139来源:国知局
专利名称:具有基于进程的密钥库的计算装置和操作计算装置的方法
技术领域
本发明涉及一种用于计算装置的加密密钥的安全管理,具体地,涉及一种在允许加密密钥用于加密操作(一般为解密或签名)之前,通过要求认证(一般为PIN或密码短语的输入)来控制加密密钥的使用。
背景技术
本文中所使用的术语计算装置广泛地理解为覆盖任何形式的电子计算装置,其包括数据记录装置、任何类型或形式的计算机(包括手持和个人计算机)、以及任何形式因素的通信装置(包括移动电话、智能电话、在单个装置中集通信、图像记录和/或重放、以及计算功能于一体的通信装置、以及其它形式的无线和有线信息装置)。
好的密钥管理对于所有形式的安全性(无论是电子的还是机械的)都是非常重要的。例如,安全机械装置上的锁可以是最高标准的,但是如果将锁的钥匙或密码遗落在不安全的地方,则锁自身的标准对于保持机械装置的安全性就变得无关紧要了。
众所周知,该原理还应用于计算装置,并且密钥管理器的完整性至少与密钥自身的安全性一样重要,这是因为一般认为对公钥安全系统的大多数攻击主要是针对密钥管理等级,而不是针对加密算法本身。
在支持加密的所有装置上均具有密钥管理器,它们的目的在于能够通过更容易地安全创建、导入、导出、维护、以及存储密钥对的一个或两个成员来确保通信。它们还通过提供对安全证明和相关的信任等级的安全存储和使用,在PKI(公钥基础设施)中起到关键作用。
典型地,密钥管理器将密钥以加密的形式存储在安全位置(通常为所知的密钥库),其依赖于通过密码短语和个人身份号(PIN)对尝试访问密钥库所包含的密钥的客户的认证,该密码短语和个人身份号用于保护包含在密钥库中的加密数据的完整性。在密钥库的当前实施方式中,认证步骤实际上实现两个目的。其允许密钥管理器软件确定软件的授权用户实际存在(假设只有用户知道PIN或密码短语),并且其还确认用户希望使用密钥。例如,如果流氓软件试图调用密钥管理器以签名用户未请求的交易,则出现要求用户认证他/她自身的用户界面,这将提醒用户某事正在试图使用他/她的密钥,并且用户可拒绝认证。
Microsoft Exchange中的密钥管理器以这种方式工作http://www.msexchange.org/tutorials/Key Management Service In Exchange 2000 Server.html描述了这种类型的密钥管理器。还存在许多提供相似功能的Linux数据包,例如,密钥链。Java的密钥库类是如何按照惯例实现这种密钥管理器应用编程接口(API)的很好的实例。Java密钥库类存储密钥和证书。控制对存储器访问的API通过程序setKeyEntry和存储器将口令与加密数据联系起来,并且当使用诸如获取密钥(getkey)的程序和加载来检索加密数据时需要这些相同的口令。
这种一般目的的密钥管理器的顾虑在于它们对选取的协议攻击的脆弱性。签名操作(signing operation)的意义可被破坏,以根据使用的协议来声明身份或签名特定数据段。这种攻击的实例可为假意进行加密套接字协议层(SSL)握手而实际上伪造签名的S/MIME消息的恶意应用程序。
这种破坏存在可能的原因在于尽管用户知道怎样假定密钥从他们被提示输入他们的密码短语或PIN的文中被使用,但是密钥管理器不知道提供密码短语或PIN的目的,不向密钥管理器提供这种信息并且密钥管理器不得不假设使用的所有请求对于所有目的是等效的。监控密钥使用的责任被分配给请求密钥访问的应用程序,如果该应用程序不能信任,则会非常不理想。
这又意味着不仅当前的设计不能防止这种攻击,并且该攻击也不能被检测,这是因为密钥管理器不能通知用户正在怎样使用密钥。
从而,所知实现的缺点在于对装置具有充分访问权并且了解接口知识的任何人都有能力通过窃取、重写、删除、或撤销密钥来危及密钥管理器的完整性。因此,当缺乏对于整个平台合适的安全模型时,不可能防止恶意应用程序访问任何它们想访问的密钥。

发明内容
本发明的主旨在于在计算装置的安全平台中,认证用户的需要应与授权使用用于特定目的的密钥的需要分开。
为了实现本发明的目的,进程是在装置上执行的一个或多个任务组,其占用了单个不连续的存储区并且其还具有唯一不变的名称。因此,进程应该被认为是装置上不变的可执行的身份单元。其执行实例之间的进程身份的持久性被认为是本发明的一个关键方面。
因此,本发明的目的在于提供一种用于计算装置中密钥管理的改进方法。
根据本发明的第一方面,提供了一种计算装置,其被配置为通过以下提供用于加密操作的数据的安全使用a.将所述数据的每一项保存在密钥库中;b.将密钥库中的项的所有权分配给各个进程;c.使各个进程能够分配另一进程作为各自的项的用户;d.使各个进程能够删除或修改各自的项;以及e.拒绝访问密钥库中的项,以使进程既不拥有项,也不被分配,作为项的用户。
根据本发明的第二方面,提供了一种操作计算装置的方法,该计算装置提供用于加密操作的数据的安全使用,该方法包括a.将所述数据的每一项保存在密钥库中;b.将密钥库中的项的所有权分配给各个进程;c.使各个进程能够分配另一进程,作为各自的项的用户;d.使各个进程能够删除或修改各自的项;以及
e.拒绝访问密钥库中的项,以使进程既不拥有项,也不被分配,作为项的用户根据本发明的第三方面,提供了一种用于计算装置的操作系统,用于使根据第一方面的计算装置以根据第二方面的方法操作。


现在,将参照附图描述本发明的实施例,仅作为进一步的实例,其中图1示出了密钥库中的根流的实例;图2示出了密钥库API的实例;图3示出了加密令牌(cryptotoken)框架API的密钥库实现的实例;图4示出了密钥库API实现的实例;以及图5示出了密钥库服务器的结构的实例。
具体实施例方式
本发明通过将每个密钥的范围限制为特定的应用程序,克服了上述于现有技术相联系的顾虑。这通过定义密钥所有者和密钥用户的基于进程的方案来实现。因此,进程“拥有”已创建或导入的密钥,并且只允许拥有的进程执行对那些密钥的全面操作。
一些应用程序可被执行作为几个进程,或者可被紧密地连接。因此,在这种情况中,密钥的“所有者”被允许使其它应用程序能够对其密钥执行固定子集的操作。这通过将它们添加为单独密钥的“用户”来实现。用户应用程序被允许执行的操作子集被配置为足以准许它们使用加密操作所需的密钥,但是不准许它们删除密钥或将其它应用程序添加至密钥用户的列表。
通过对于密钥库API的所有者和用户的双API设计来支持本发明,其包括·负责创建、删除、以及管理密钥的用户接口(UI)·实际使用密钥的‘引擎’。
该双API设计与密钥所有者和密钥用户之间的区别相对应。
现在,将描述用于实现本发明的方案的实施例。参照SymbianOSTM操作系统描述该实施例,用于移动电话的改进的操作系统是由伦敦的Symbian软件有限公司生产的。
该密钥库设计的一个目的在于最小化客户应用程序的私钥的暴露。因此,使用客户机/服务器结构来实现,其中,所有的私钥操作均在服务器侧执行。然而,对于那些本领域的技术人员来说,能够很容易地使设计适用于使用其它操作系统的装置,并且下列进一步概括本发明一般原理的论述用于帮助这种实现的研发人员。
在本发明的优选实施例中,下面的操作系统提供了确保进程的唯一身份可被检查的安全方法,这是因为进程身份确定其可处理的密钥库API的范围。Symbian OSTM操作系统通过附属于每个进程的与安全文件结构相结合的唯一标识符(UID)来实现这些操作。题为“Secure Mobile Wireless Device With Protected File System”的英国专利申请第0312190.2号中描述了该过程。然而,本发明不限于该具体方法,并且可使用任何类似的方法。可选的操作系统可具有识别应用程序的其它方法,例如,基于数字签名。
应当注意到,无论使用什么进程识别方案,只有当应用程序被安装在装置上时以及当应用程序被卸载时,才其进行唯一地检查,其唯一标识符应从任何授权列表中去除。此外,卸载拥有密钥的任何应用程序与删除这种应用程序所拥有的所有密钥同时发生。这些步骤可防止流氓应用程序接管先前由“已卸载的”应用程序所使用的任何密钥。
然而,在平台不能够提供用于检查进程身份的安全机制的情况下,也可以实现本发明。这种平台的明显风险在于恶意应用程序试图使用另一个进程的身份并通过使用其密钥破坏该平台。在这种情况下,可使用不同的方法来防止伪造进程身份。因为缺少安全进程识别在使得不可能进行自动验证,所以取而代之需要更广泛地使用手动验证方法。用于认证密钥使用的进程的时间消耗密码短语处理方案非常合适,并且下面将论述一种这样的实现。然而,与能够仅依靠安全进程识别的方法相比,这种方法的频繁使用更具有强迫性,并且提供了更少的使用户迷惑的经历。
虽然可以列出装置上的所有密钥以及它们的所有者,但无论它们是否可被当前应用程序使用,尝试列出装置上可用密钥的应用程序应将使用特征,该特征使它们能够仅列出由它们信任的特定进程所拥有的密钥。这避免了看到和可能使用不安全密钥的风险,该密钥可能通过恶意应用程序添加至系统。
本发明还用于Java实现,例如,J2ME,其使用诸如SecureSockets Layer的协议,以使用基于加密的密钥来保护网络通信。Java虚拟机(JVM)知道其运行的应用程序类,因此,能够将其密钥限定为由该应用程序所拥有的密钥。因此,在网页浏览器内运行的小应用程序将能够使用与浏览器进程相同的密钥,而将不同组的密钥用于MIDIlet。
本发明还允许使用将密钥映射到进程的可选方法。例如,安全性对于以移动电话形式在计算装置上进行的交易是必要的。用于这些装置的一个标准指定使用硬件WIM(无线识别模块),该硬件WIM用于保护会话并且存储用于所限定目的的密钥;具体地,通过WTLS(无线传输层安全)协议处理客户认证,而数字签名符合WMLScript(无线标记语言脚本)SignText协议。
因此,用于包括WIM的装置的操作系统可容易地适用于本发明所要求的所有者和用户模型。最简单的方法将假定每种类型的密钥的所有者和用户的静态集。在灵活性很差的情况下,可执行动态控制面板以定义将怎样使用密钥。实现该目的的两种方法的实例可为·实现对于使用私钥的每个单独应用程序的独立的密钥管理UI,其可拥有该应用程序中的所有密钥并分配任何相关的进程,作为密钥的其它用户。这意味着没有中央密钥管理器UI。
·实现中央密钥管理器UI,其拥有所有密钥并且适合时,分配应用程序作为用户。
应当注意,这两种方法之间的不同仅处于用户接口(UI)等级。
密码短语处理要求装置的用户通过提供正确的密码短语或PIN来手动地授权对密钥库的特定操作。如前所述,该方案或等同物将不得不强制在不能进行进程的安全识别的平台上的所有密钥库访问,然而,即使在安全平台上,当完全自动进程没有提供防止装置自身的窃取的安全性时,至少一些手动认证是必须的。
众所周知,这样的密码短语将在一段时间内被超高速缓存(cache),以当快速连续执行几个操作时不会打扰用户。在本发明中,优选地,基于每个进程(即,每个所有者)设置管理超高速缓存有效性的超时,如在题为“A method for Secure Operation of aComputing Device”的英国专利申请第0329835.3号中所描述的。
根据本发明的密码短语处理使用认证对象API。简而言之,加密令牌对象提供API,以列出该令牌中的认证对象,并且每个认证对象提供用于改变密码短语且设置密码短语超高速缓存超时的方法。由于安全原因,密码短语从不会被客户应用程序看到。相反,改变密码短语API触发请求用户输入和确认新口令的对话,并且整个进程对于客户程序是不可见的。这具有两个优点因为密码短语从不出现在API中,所有用户密码不需要被密钥密码短语信任,以及希望使用一些其它认证对象(例如,使用生物统计学)来实现密钥管理器的任何人都能够在现有的API中这么做。
对于密钥库,仅存在一个密码短语,因此,仅有一个认证对象。‘改变密码短语’方法使得对于整个库改变密码短语。然而,‘设置超时’方法仅对呼叫进程所拥有的密钥设置超时,并且不影响由其它密钥所有者设置的超时。
通过密钥管理器超高速缓存密码短语(因为超高速缓存是基于进程的),并且作为密钥所有者的进程的识别与每个密码短语一起被存储(因为超高速缓存还是基于所有者的)。当执行密钥有效用户的操作时,密钥管理器首先确定拥有的进程的身份,然后检查以观察其是否具有所有者超高速缓存的密码短语。如果没有,则提示用户输入密码短语。
使用定时器终止超高速缓存的密码短语。当密码短语被超高速缓存时,启动定时器,并且当定时器终止时,去除超高速缓存的密码短语。还可以指定密码短语从不被超高速缓存,或被超高速缓存的密码短语从不超时。
根据本发明的安全密钥库的设计可以如下实现。在该实例中,Symbian OSTM操作系统被用作上述密钥库技术的简单实现。假设本领域的技术人员熟悉Symbian OSTM操作系统的编程语言,将能够容易地将这里公开的技术应用于其它的操作系统环境。
在本发明的该实例中,存储每个密钥作为单独的流,并且所有密钥被存储在持久流存储器中,因为这是存储多流的简单且有效的方法。持久性存储器的提交/还原能力用于确保该存储器总是稳定的。
通过安全流类执行加密。这里使用作为从密码短语中得出密钥的标准的PKCS#5密钥生成算法。为了避免基于字典(dictionary)的攻击,该标准使用大量的基础算法重复(建议1000次),以使得到每个密钥的过程相对变慢。当得到一个密钥时,该时间被认为是可接受的,但是当试图得出密钥的完整程序库时,则该时间被认为是不可接受的。为了避免有人构建可重复使用的导出字典,例如通过组织分散的成果来生成对应于程序库中每个词的解码密钥,密钥可与salt(与加密对象一起清零存储的随机串)相结合。
使用AES算法执行加密。与相同的密码短语一起加密的所有密钥将分享一个salt,使得解密密钥而不是密码短语可被超高速缓存。尽管这也被证实更加安全且增加的有效性允许更高的循环计数,但这么做最主要是由于有效性原因。无论什么时候改变密码短语,salt也改变。
存储器的根流包括所有密钥的索引。这包括存储器的全局数据,以及包含关于每个密钥信息的流ID的列表。这些流又包括到另一流的指针,其中,另一流包括对应于每个密钥的加密PKCS#8对象。这在图1中示出。
密钥库API提供对于包括密钥库的令牌的接口。这在图2中示出。
MCTKeyStore接口支持密钥库上的‘用户’操作列出密钥、导出公钥、以及打开用于签名/解密/同意操作的密钥。
CCTKeyInfo对象用于描述密钥且包括在功能说明中描述的所有属性。
通过‘打开’所需操作的密钥来执行密钥上的加密操作。这创建了可用于执行该操作的对象。为RSA和DSA签名创建实现MRSASigner和MDSASigner接口的对象。存在用于解密的单个接口MCTDecryptor,以及用于DiffieHellman密钥协议的一个接口MCTDH。
MCTKeyStoreManager接口扩展MCTKeyStore接口,以支持密钥上的‘所有者’操作创建密钥、导入和导出、删除密钥、设置密钥用户、设置密码短语超时、以及重新锁定存储器。然而,在该实例中,密钥库API不支持加密和验证操作,为此,客户应用程序必须检索合适的公钥,并执行操作本身。
使用客户端/服务器架构实现软件密钥库。客户端实现适当的加密令牌接口,并且向服务器发送请求。所有加密操作均在服务器内执行,以减少私钥的暴露。
软件密钥库是文件令牌(filetoken)组件的一部分。这里提供了用于加密令牌的软件(即,基于文件的)实现的普通框架。该软件密钥库也包括在证书应用程序存储器中。
密钥库客户端使用加密令牌框架,并可被直接或通过ECOM插件程序初始化。客户端实现包括单个令牌的加密令牌类型,该单个令牌作为软件密钥库。除了直接初始化之外,所有与客户端的相互作用均经由加密令牌和密钥库API。
软件密钥库具有一个令牌类型(软件密钥库),并且其支持一个令牌,即,软件密钥库自身。图3示出了主加密令牌框架API的密钥库实现。
CCTTokenType类是令牌类型的基类,并且是加密令牌模块的一部分。
CFSTokenTypeClient是为令牌类型提供实现的普通文件令牌类。其构造程序将期望令牌类型的UID作为参数。在这种情况下,UID将作为软件密钥库令牌类型的UID。其创建RFileStoreClientSession对象,以与文件令牌服务器进行通信。如通过MCTTokenType接口所定义的,其具有列出可用令牌(一直只存在一个,软件密钥库令牌)的方法,以及打开可用令牌的方法。
CFSTokenClient是另一个表示令牌的普通文件令牌类。构造程序参数指示其表示哪一个存储器。其通过CFSTokenClient’sOpenToken程序创建。其具有对令牌类型和其会话对象的引用,用于与服务器进行通信。其支持具有打开接口程序的MCTToken接口。
密钥库令牌支持两个接口(‘用户’接口和‘所有者’接口),其通过MCTKeyStore和MCTKeyStoreManager来表示。其通过表示密钥库自身的CFSKeyStoreClient类来实现。响应于具有合适接口的GetInterface调用通过CFSTokenClient创建密钥库令牌。其具有对会话对象的引用。无论客户程序是请求‘用户’接口还是请求‘所有者’接口,均创建相同的对象,这意味着客户程序能够请求用户接口并能够放弃指针以获得所有者接口。然而,在服务器上对每个操作检查权限,所以这不会造成安全风险。在图4中示出了密钥库API剩余部分的实现。
打开使用的密钥来创建合适的对象,MRSASigner、MDSASigner、MCTDecryptor、或MCTDH的其中之一。所有这些均源于COpenedKey,作为保持对密钥库客户对象的引用以执行操作的基类。它们实现在API中定义的适当接口。
在图5中示出密钥库服务器的结构。
当启动服务器时,创建CTokenServer的实例。该实例是主服务器类,并且用于当客户端连接至服务器时创建服务器侧会话对象。其不是具体的密钥库,而是普通文件令牌服务器的一部分。
CTokenserver实例创建了表示密钥库服务器自身的CFSKeyStoreServer类的单个实例。该实例又创建了CFileKeyDataManager对象,其用于写入到存储器并在存储器中保存密钥列表。
当密钥库客户端连接至服务器时,创建CkeyStoreSession实例来表示客户端会话。这被用于保存会话特定信息,并执行密码短语超高速缓存。其接收来自客户端的请求,不调度(unmarshal)自变量,并将它们发送至CFSKeyStoreServer实例。然后,调度返回数据并将其发送回客户端。
本发明被认为提供了优于已知密钥管理系统的几个优点·密钥所有权与密钥使用的功能性分离能够使操作环境更安全。
·其允许密钥信任的应用程序选择性地将它们的信任扩展到用户应用程序。
·其防止不信任的程序未经许可访问加密信息。
·其防止装置上具有深入密钥库安全性的恶意进程误用加密信息。
·其从寻找冒充为其它不太可能成功的进程的进程中去除的‘Phishing’类型的威胁。
·其确保不使用的密钥的安全删除。
·其允许用于确保涉及加密的安全应用程序的更直观和不太直观的用户接口的实现。
因此,大体上,根据本发明的密钥管理器通过识别每个密钥的所有权应用程序,提供用于区别密钥的授权使用和未授权使用的机制,其通过密钥管理器授权,以自由地使用特定的密钥,并且其还被信任以当认为合适时(例如,当在签名操作中使用密钥时)请求来自用户的明确确认。为了允许应用程序之间分享密钥,所有权应用程序能够指定也被信任以使用密钥的其它应用程序的列表。
尽管参照特定实施例描述了本发明,但是应该理解,可以进行修改,并在由所附权利要求所限定的本发明的范围内。
权利要求
1.一种计算装置,其被配置为通过以下来提供用于加密操作的数据的安全使用a.将所述数据的每一项保存在密钥库中;b.将所述密钥库中的项的所有权分配给各个进程;c.使各个进程能够分配另一进程作为各自的项的用户;d.使各个进程能够删除或修改各自的项;以及e.拒绝访问所述密钥库中的项,以使进程既不拥有项,也不被分配作为项的用户。
2.根据权利要求1所述的装置,其中,通过单个密钥库进程控制对所述密钥库中的项的访问。
3.根据权利要求1或2所述的装置,其中,所述密钥库进程包括服务器。
4.根据权利要求3所述的装置,其中,所述密钥库服务器被配置为控制对保存在另一装置中的加密数据的访问。
5.一种根据上述权利要求中任一项所述的装置,其中,保存在密钥库中的项包括加密密钥或安全证书,或者两者都包括。
6.一种根据上述权利要求中任一项所述的装置,其中,通过要求对来自所述装置的用户的身份进行认证进一步限制对所述密钥库中的项的访问。
7.根据权利要求6所述的装置,其中,通过下列中的至少一个进行用户认证a.手动输入密码短语或PIN;以及b.生物统计数据的验证。
8.根据权利要求6或7所述的装置,其中,用户认证在一有限时间周期有效。
9.根据权利要求8所述的装置,其中,用户认证有效的所述周期在不同的进程之间变化。
10.一种根据上述权利要求中任一项所述的装置,包括多个密钥库,其中的每一个均可通过单独的密钥库进程或通过中央密钥库进程进行访问控制。
11.一种根据上述权利要求中任一项所述的装置,其中,通过删除或去除所述进程拥有的所有项来实现从所述装置删除或去除所述进程。
12.一种操作计算装置的方法,所述计算装置用于向加密操作提供数据的安全使用,所述方法包括a.将所述数据的每一项保存在密钥库中;b.将所述密钥库中的项的所有权分配给各个进程;c.使各个进程能够分配另一进程作为各自的项的用户;d.使各个进程能够删除或修改各自的项;以及e.拒绝访问所述密钥库中的项,以使进程既不拥有项,也不被分配作为项的用户。
13.根据权利要求12所述的方法,其中,通过单个密钥库进程控制对所述密钥库中的项的访问。
14.根据权利要求12或13所述的方法,其中,所述密钥库进程包括服务器。
15.根据权利要求14所述的方法,其中,所述密钥库服务器被配置为控制对保存在另一装置中的加密数据的访问。
16.根据权利要求12至15中任一项所述的方法,其中,保存在密钥库中的项包括加密密钥或安全证书,或者两者都包括。
17.根据权利要求12至16中任一项所述的方法,其中,通过要求对来自所述装置用户的身份进行认证进一步限制对所述密钥库中的项的访问。
18.根据权利要求17所述的方法,其中,通过下列中的至少一个进行用户认证a.手动输入密码短语或PIN;以及b.生物统计数据的验证。
19.根据权利要求17或18所述的方法,其中,用户认证被配置为在一有限时间周期有效。
20.根据权利要求19所述的方法,适用于用户认证有效的所述周期在不同的进程之间变化。
21.根据权利要求12至20中任一项所述的方法,包括多个密钥库,其中的每一个均可具有通过单独的密钥库进程或通过中央密钥库进程进行访问控制。
22.根据权利要求12至21中任一项所述的方法,其中,通过删除或去除所述进程拥有的所有项来实现从所述装置删除或去除所述进程。
23.一种用于计算装置的操作系统,用于使根据权利要求1至11中任一项的计算装置以根据权利要求12至22中任一项所要求的方法来操作。
全文摘要
本发明提供了一种计算装置,其具有密钥管理器,密钥管理器通过识别每个密钥的所有权应用程序,提供用于区别密钥的授权使用和未授权使用之间的机制,其通过密钥管理器授权以自由地使用特定的密钥,并且其还被信任以当认为合适时(例如,当在签名操作中使用密钥)请求来自用户的明确确认。为了允许应用程序之间共用密钥,所有权应用程序能够指定也被信任以使用密钥的其它应用程序的列表。
文档编号G06F21/62GK1965280SQ200580019062
公开日2007年5月16日 申请日期2005年6月8日 优先权日2004年6月10日
发明者利昂·克拉克, 克雷格·希思 申请人:西姆毕恩软件有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1