发明内容
根据本发明的第一方面,提供了一种经由计算设备控制对资源的访问的方法,所述方法包括:存储器,存储第一数据集和第二数据集,第一数据集是使用第一密钥加密的,并且第二数据集不同于第一数据集;以及代码值生成器,被配置为生成代码值序列,其中第一数据集包括第二密钥,并且所述第二数据集至少包括第一密钥的第一加密版本,第一密钥的第一加密版本是至少部分地基于所述代码值序列中的第一代码值和所述第二密钥加密的,所述方法包括:在计算设备处接收第一输入,并基于第一输入提供第一代码值;至少部分地基于第一代码值执行第一解密处理,第一解密处理包括对第一密钥的所述第一加密版本的解密;以及响应于对第一密钥的所述第一加密版本的成功解密:执行第二解密处理,所述第二解密处理基于在第一解密处理期间解密的第一密钥来执行,其中所述第二解密处理包括对所述第一数据集中的至少一部分的解密;基于在第一解密处理期间解密的第一密钥来提供对所述资源的访问;响应于对所述第一数据集中的至少一部分的所述解密,提供所述第一密钥的至少第二加密版本,所述第一密钥的所述第二加密版本是至少部分地基于所述代码值序列中的第二代码值和所述第二密钥加密的;以及将所述第一密钥的所述第二加密版本作为所述第二数据集的数据存储在所述存储器中。
该方法使得能够提供第一密钥的新加密版本,第一密钥的新加密版本是用在未来时间有效的代码值序列中的代码值来加密的,并且未来执行时在该方法可用。相应地,这实现了不需要访问远程服务器来提供OTP验证的用户验证方法,因此提供了一种自维持的离线OTP认证方法。
在一些实施例中,被提供对其访问的资源包括存储在计算设备的存储器中的所述第一数据集的数据。
在一些实施例中,第一密钥的第一加密版本是使用基于所述代码值序列中的第一代码值和所述第二密钥利用第一代码生成函数所生成的第一值而加密的。
在一些实施例中,第二解密处理包括基于在第一解密处理期间解密的第一密钥来解密所述第二密钥,并且所述方法包括:响应于解密所述第二密钥,使用利用第一代码生成函数生成的第二值来生成所述第一密钥的第二加密版本,所述第二值是基于所述代码值序列中的第二代码值和所述第二密钥而生成的;以及将所述第一密钥的第二加密版本作为所述第二数据集的数据存储在所述存储器中。
在一些实施例中,第一代码生成函数存储在第一数据集中。
在一些实施例中,第一代码生成函数使用存储在第一数据集中的参数。在一些实施例中,第一解密处理包括使用第二代码生成函数基于所述第一代码值和第三密钥生成第三值,所述第三密钥不同于所述第二密钥。
第一值可以等于所述第三值。
在一些实施例中,第二代码生成函数生成所述第三值所花费的时间量大于所述第一代码生成函数生成所述第一值所花费的时间量。
提供第二代码生成函数(其生成第三值花费的时间量比第一代码生成函数生成所述第一值花费的时间量更多)使得能够快速生成第一密钥的加密版本,同时实现对抗蛮力攻击的鲁棒性,因为对第一密钥的加密版本的解密较慢。相应地,快速生成第一密钥的加密版本使得该方法能够在延长的时间段内离线执行(即不连接到远程服务器),而不需要这样大量数据存储器来存储第一密钥的加密版本,和/或不需要使用大量处理资源来生成第一密钥的加密版本。此外,该方法可以使用现有的OTP算法来执行,因此可以通过向用户提供现有的OTP令牌(其当前可以用于在线OTP验证)来执行。
在一些实施例中,第三密钥包括等于两个或更多个素数的乘积的值,并且第二密钥包括所述两个或更多个素数。
在一些实施例中,第二代码生成函数包括一系列模乘运算。
在一些实施例中,代码值序列中的每一个代码值的值是至少部分地基于在所述序列内的位置来确定的。
在一些实施例中,所述代码值序列中的每一个代码值是至少部分地基于时间值生成的。
在一些实施例中,第一密钥的第一加密版本是至少部分地基于静态密码值而加密的,并且第一输入包括所述静态密码值。
在一些实施例中,所述方法包括:响应于对所述第一数据集中的至少一部分的所述解密,提供所述第一密钥的加密版本的集合,所述加密版本的集合包括所述第二加密版本和另外多个加密版本;以及将所述第一密钥的所述另外多个加密版本作为所述第二数据集的数据存储在所述存储器中。
在一些实施例中,代码值序列是基于一次性密码(OTP)生成算法生成的。
在一些实施例中,所述方法包括:将所述OTP生成算法的种子值作为所述第一数据集的数据存储在所述存储器中;响应于对所述第一数据集中的至少一部分的所述解密,将所述种子值提供给所述代码值生成器;以及在所述代码值生成器处至少部分地基于所述种子值来生成所述代码值序列。
在一些实施例中,第一数据集是基于对称密钥算法被而加密的。
在一些实施例中,第一数据集是基于非对称密钥算法而加密的。
根据本发明的第二方面,提供了一种计算设备,包括:存储器,存储第一数据集和第二数据集,第一数据集是使用第一密钥加密的,并且第二数据集不同于第一数据集;以及代码值生成器,被配置为生成代码值序列,其中第一数据集包括第二密钥,并且所述第二数据集至少包括第一密钥的第一加密版本,第一密钥的第一加密版本是至少部分地基于所述代码值序列中的第一代码值和所述第二密钥加密的,所述计算设备被配置为:接收第一输入,并基于第一输入提供第一代码值;至少部分地基于第一代码值执行第一解密处理,第一解密处理包括对第一密钥的所述第一加密版本的解密;以及响应于对第一密钥的所述第一加密版本的成功解密:基于在第一解密处理期间解密的第一密钥来执行第二解密处理,其中第二解密处理包括对所述第一数据集中的至少一部分的解密;基于在第一解密处理期间解密的第一密钥来提供对所述资源的访问;响应于对所述第一数据集中的至少一部分的所述解密,至少提供所述第一密钥的第二加密版本,所述第一密钥的所述第二加密版本是至少部分地基于所述代码值序列中的第二代码值和所述第二密钥加密的;以及将所述第一密钥的所述第二加密版本作为所述第二数据集的数据存储在所述存储器中。
第二实施例的计算设备可以适于提供与第一实施例的那些特征中的任何特征相对应的特征。
计算设备可以是便携式设备和/或智能电话。
根据本发明的第三实施例,提供了一种其上存储有指令的非暂时性计算机可读介质,所述指令可被计算设备执行,所述计算设备包括:存储器,存储第一数据集和第二数据集,第一数据集是使用第一密钥加密的,并且第二数据集不同于第一数据集;以及代码值生成器,被配置为生成代码值序列,其中第一数据集包括第二密钥,并且所述第二数据集至少包括第一密钥的第一加密版本,第一密钥的第一加密版本是至少部分地基于所述代码值序列中的第一代码值和所述第二密钥加密的,其中,所述指令当被计算设备执行时,使得所述计算设备:接收第一输入并基于第一输入提供第一代码值;至少部分地基于第一代码值执行第一解密处理,第一解密处理包括对第一密钥的所述第一加密版本的解密;以及响应于对第一密钥的所述第一加密版本的成功解密:基于在第一解密处理期间解密的第一密钥来执行第二解密处理,其中第二解密处理包括对所述第一数据集中的至少一部分的解密;基于在第一解密处理期间解密的第一密钥来提供对所述资源的访问;响应于对所述第一数据集中的至少一部分的所述解密,至少提供所述第一密钥的第二加密版本,所述第一密钥的所述第二加密版本是至少部分地基于所述代码值序列中的第二代码值和所述第二密钥加密的;以及将所述第一密钥的所述第二加密版本作为所述第二数据集的数据存储在所述存储器中。
第三实施例的计算机可读介质可以适于提供与第一实施例和第二实施例的那些特征中的任何特征相对应的特征。
本发明的其它特征和优点将根据以下参考附图仅作为示例给出的本发明的实施例的描述而变得显而易见。
具体实施方式
图1示意性地示出了计算设备100的组件,计算设备100是用于示出本发明的实施例的特征的示例性设备。计算设备100可以采取智能电话、个人数字助理(PDA)、电子阅读器、平板计算机、台式计算机、膝上型计算机或任何其他合适的设备的形式。计算设备100包括处理器102,处理器102能够向计算设备100内与系统总线104相连的组件发送控制消息、从其接收状态信息并向其收发数据,其中这些组件可以包括非易失性存储设备106、随机存取存储器(RAM)108、用户输入接口110、网络接口112和被配置为向显示器116输出用户界面的图形处理组件114。处理器102(典型地是微处理器)处理已从非易失性存储设备106加载的存储在RAM 108中的指令,其中非易失性存储设备106可以是例如闪存或硬盘驱动器。这些指令采取计算机软件的形式,计算机软件采取实现操作系统118的一个或多个程序和一个或多个应用程序(以下称为程序120)的形式。处理器102上运行的程序120还将RAM 108用作用于存储和访问采取电信号形式的数据的装置,其中所述数据在程序120的执行期间被使用。
用户输入接口110从一个或多个用户输入设备(未示出)接收用户输入。用户输入设备可以包括小键盘(keypad)、键盘(keyboard)、触摸屏显示器、鼠标和/或遥控器或任何其它指点设备,其可以并入计算设备100内或者可以经由有线或无线连接而连接到计算设备100。
计算设备100可以包括网络接口112(或多个这样的接口),网络接口112允许在处理器102上运行的程序120经由通信网络或多个这样的通信网络至/自多个其他设备和系统发送/接收数据。网络接口112(或多个这样的接口)能够使用多种无线电接入技术中的一种或多种经由无线接入节点或经由有线技术(例如调制解调器和/或以太网卡)连接到通信网络卡。通信网络210和/或无线接入节点还可以提供对因特网的接入。
图形处理组件114能够根据由在处理器102上运行的程序120做出的命令来渲染图形,并且将这些图形输出到可以驻留在计算设备100内的显示器116。显示器116可以是经由复合视频、分量视频、视频图形阵列、数字视觉接口和高清晰度多媒体接口连接中的一个或多个连接到计算设备100的外部组件。显示器116可以是计算设备100的集成组件,并且可以是触摸屏显示器。
操作系统118是采取程序或程序集的形式的计算机软件,该计算机软件的指令被处理器102从非易失性存储器106中加载,并且在计算设备100启动时执行。操作系统118可以自动启动更多的程序120和/或可以允许用户例如经由操作系统118提供的用户界面来启动更多的程序120。操作系统118使得处理器102提供的处理能力能够在运行在处理器102上的程序120之间共享。
操作系统118为在处理器102上运行的程序120提供编程接口,从而允许它们向操作系统118请求功能。该程序接口可以采取程序过程(procedure)(即系统调用)的形式,其中,在处理器102上运行的程序120可以使用该程序过程以便调用操作系统118,并请求其提供期望的功能。响应于接收到对功能的请求,操作系统118可以向与系统总线104相连的组件(例如106、108、110、112、114、116)发送控制消息,从其接收状态信息,并收发数据,以提供所请求的功能,并且还可以向发送请求的程序120返回数据作为结果。
操作系统118可以提供用于存储、修改和访问保存在非易失性存储器106中的文件或其他数据的文件系统。文件系统可以被在处理器102上运行的其它程序120经由操作系统118提供的编程接口来访问。
一旦程序120安装在计算设备100上,用户就可以使用操作系统118来启动程序120。程序120可以包括被配置为允许用户访问计算设备100的非易失性存储器106中保存的资源和/或数据的多个组件。程序120的这些组件可以包括渲染引擎122、核心服务124、服务插件126、应用服务128和应用130。这些组件可以使用由操作系统118提供的编程接口(即系统调用),以向操作系统118请求功能(例如访问文件系统、发送/接收消息、使用网络接口112等)。
在处理器102上运行的程序120可以处理从用户输入接口110获得的用户输入,该用户输入接口110从一个或多个用户输入设备(未示出)接收用户输入。
应用130可以包括操作为OTP验证系统的一部分的OTP安全应用140,如参考图2所描述,并且提供可以由图形处理组件114渲染并在显示器116上显示的用户界面。用户界面使得用户能够输入用于访问计算设备100的安全资源和/或存储在非易失性存储器106中的安全数据的标识和认证细节。OTP安全应用140可以显示当用户尝试访问安全(加密)数据时可以显示的认证用户界面。认证用户界面还可以是当程序120启动时、或者当计算设备100首次打开时、或者在需要常规字母数字密码或安全码的任何其他时间向用户显示的第一用户界面。OTP安全应用140还可以向用户提供允许启动其他应用130或程序120、或启动经由网络接口112的连接的用户界面。
OTP安全应用140包含用于对存储在非易失性存储器106内的加密安全容器中的数据进行加密和/或解密的算法。可以经由一个或多个网络接口112(例如,从一个或多个远程服务器)接收加密数据,或者可以通过一些其他手段将加密数据保存到非易失性存储器106。例如,数据可以由用户手动导入,使用加密算法进行加密,并以加密形式存储在非易失性存储器106中。
可以根据对称密钥算法(即,使用相同密钥用于加密和解密数据),例如高级加密标准(AES),或根据非对称密钥算法(即,使用一个密钥用于加密数据并使用另一个密钥用于解密数据),或者通过任何其他合适的密码算法来加密和/或解密数据。以下参考图2至图5描述的实施例被描述为使用对称密码算法来实现。然而将理解,如下面所解释的,它们可以使用非对称密码算法来实现。不管所使用的密码算法的类型如何,为了对加密数据进行解密以使其可以以可读形式显示,提供了一种密码密钥(这里也称为主密钥),安全应用140结合密码算法使用该密码密钥来解密数据。
通过要求用户除了静态密码之外还输入OTP,增加密码熵以提高对所谓的蛮力攻击的抵抗力。例如,要求用户除了其静态密码之外还输入6位OTP,则该组合密码增加了大约20位,使得蛮力攻击比不需要OTP的情况困难了1,000,000倍(即,需要1,000,000倍的尝试次数来攻破组合密码)。
将使用主密钥加密的数据以加密形式存储在非易失性存储器106的加密安全容器中。主密钥的一个或多个加密版本存储在容器之外。为了解锁容器并解密数据,首先使用验证密钥来解密主密钥的加密版本。然后可以使用经解密的主密钥来解锁容器。这样做能够实现密码密钥的安全传输,并且当密钥改变时(其可能周期性地改变以维持数据安全性)可以避免需要对整个存储的加密数据进行重新加密。在OTP验证系统的情况下,验证密钥对于每个OTP值通常是不同的,因此针对每个OTP值,需要可由不同验证密钥来解密的不同加密版本的主密钥。
图2是示出可在计算设备100上操作的OTP验证系统200的组件的示意图。验证系统200包括存储在非易失性存储器106中的加密安全数据存储部202(以下称为容器202)。验证系统还包括验证密钥生成器204和解锁机构206。
OTP验证系统200被布置为由被提供OTP值或能够生成OTP值的用户使用。例如,可以向用户提供OTP令牌201,OTP令牌201可以在与计算设备100分离的设备上实现或者可以由在计算设备100上运行的应用实现。OTP令牌201包含被布置为根据OTP算法生成OTP值的OTP生成器,并且还包含OTP种子值205和时钟207。OTP生成器203被布置为根据所基于的OTP算法生成OTP值。OTP算法可以是能够生成仅对一个会话(即,时间段)或事务(事件)有效的代码值的任何算法。该算法可以基于当前时间、基于先前的OTP值224或基于事件计数来导出OTP值224。例如,可以根据不一定是时间相关的随机值生成算法按顺序生成OTP值。
在图2所示的示例中,OTP生成器203被布置为基于种子值205和来自时钟207的当前时间值来生成OTP值。然后将所生成的OTP值提供给用户,以与OTP验证系统200一起使用。例如,可以用显示器(未示出)来提供OTP令牌,显示器显示由OTP生成器203所生成的当前OTP值。
在图2的实施例中,使用对称加密算法对容器202进行加密,并且可以使用在下文中称为主密钥208的第一密钥来锁定和/或解锁容器202中包含的资源218。容器202包含第一数据集,第一数据集包括第二密钥的副本(下文中称为私钥210)、OTP种子212以及(在适用时)用户的静态密码214的副本。容器202还可以包含用户希望保持安全的数据216或其他资源218。
容器202之外是非易失性存储器106的未被主密钥208加密的部分,其中存储有包括公钥220在内的第二数据集。非易失性存储器106的这一部分在下文中称为存储部219。主密钥208的加密版本以及未被保护的资源221和数据223可以存储在存储部219中。在给予用户访问权之前需要用户认证的安全应用225(例如电子邮件应用)也可以存储在存储部219中。
私钥210在数学上与公钥220相关联。公钥220存储在存储部219中(即,其不安全地存储在容器202中,但至少在OTP的时间帧内难以从公钥220导出私钥210)。例如,公钥220可以是两个大素数N、以及可能的其他值(例如迭代计数K,其提供更高的安全系数)的乘积。私钥210可以是公钥220的因式分解P、Q(即,两个大素数加上所包括的任何其他值),以及可选地从公钥220的因子计算出的一些其他值。例如,公钥220可以是包括512位素数在内的1024位密钥,并且可以有1,000,000次迭代K。
验证密钥生成器204包括OTP生成器222,OTP生成器222被布置为生成OTP值224的序列,所述OTP值是与OTP令牌201提供给用户的值相同的OTP值。例如,OTP生成器222可以包括相同的OTP生成算法,所述OTP生成算法对具有与OTP令牌201使用的OTP种子205相同的值的OTP种子212进行操作,以针对给定时间值产生与OTP令牌201相同的OTP值。
可以使用任何长度的OTP值。使用位数更高的OTP增加了可能的OTP值的数量,因此增加了OTP验证系统200对所谓蛮力攻击的抵抗力。由于蛮力攻击者没有私钥210,所以对每个可能值的测试要花费不少时间,并且增加可能的OTP值的数量降低了蛮力攻击者在OTP值的生命期内找到正确OTP值的可能性。
验证密钥生成器204使用第一代码生成函数生成验证密钥226,验证密钥226用于对主密钥208的副本进行加密,使得它们可以安全地存储在存储部219中(即,非易失性存储器106在容器202之外的区域中)。为了生成主密钥208的加密副本,验证密钥生成器204从容器202获得私钥210的副本和OTP种子212的副本(箭头232所示),并且基于OTP值224(基于OTP种子212而生成)和私钥210生成验证密钥226。验证密钥226分别用于对主密钥208的不同加密版本进行加密。然后,验证密钥生成器204将主密钥208的加密版本存储在非易失性存储器106的存储部219中(箭头234所示)。
解锁机构206被布置成例如经由用户输入接口110接收输入(箭头236所示)。输入可以包括由OTP令牌201生成的OTP值和用户的静态密码。代码值生成器228接收输入,并基于所接收的输入和根据与用户的OTP令牌中的时钟同步的时钟231所确定的时间值来生成代码值230。然后,解锁机构206使用第二代码生成函数生成用于对主密钥208的加密版本进行解密的验证密钥226的版本。基于代码值(基于接收的输入而生成的)和从非易失性存储器106的存储部219所获得的公钥220,生成由解锁机构206所生成的验证密钥226(箭头238所示)。解锁机构206从非易失性存储器106的存储部219获得主密钥208的一个或多个加密版本(箭头240所示),并使用其已生成的验证密钥226来尝试对主密钥208的加密版本进行解密。一旦将主密钥208的加密版本成功解密,解锁机构206使用解密后的主密钥208来解锁容器202(箭头242所示)。
图3是示出由图2所示的OTP验证系统200所执行的用于提供对用户的OTP验证和经由计算设备控制对资源的访问的方法300的步骤的流程图。
在步骤302,解锁机构206接收输入,输入可以是通过用户输入接口110接收的用户输入。输入包括OTP值(例如用户从OTP令牌获得),并且还可以包括用户的静态密码。然后在步骤304,解锁机构206基于接收的输入来提供输入代码值。例如,输入代码值可以是OTP值、用户的静态密码和当前时间值的组合。
在步骤306,解锁机构206生成验证密钥226的版本,用于对先前用由验证密钥生成器204所生成的验证密钥226加密的主密钥208的加密版本进行解密的第一解密处理,如下面参考图4所描述的。如参考图5所描述,基于代码值(基于接收的输入而生成)和公钥220生成由解锁机构206所生成的验证密钥226的版本。
在步骤308,解锁机构206尝试使用其已生成的验证密钥226的版本来解密主密钥208的加密版本中的一个或多个。由于主密钥208的加密版本是使用对称加密算法进行加密和解密的,所以如果解锁机构206生成的验证密钥226对应于验证密钥226,使得在步骤310处成功解密了主密钥208的加密版本,则解锁机构206能够解密主密钥208的加密版本。
由解锁机构206生成的验证密钥226的版本能够解锁使用具有相同值的验证密钥226(由验证密钥生成器204生成)加密的主密钥208的任何加密版本。然而,因为验证密钥226是基于散列的OTP值生成的,所以只有与解锁机构206生成验证密钥226的特定版本时所针对的时间或事件相对应的主密钥208的加密版本能够使用验证密钥226的该版本来解密。
主密钥208的加密版本可以用针对验证密钥226的相应版本有效的时间或事件来标记,以使验证系统200能够只尝试解密主密钥208的当前加密版本。例如,验证系统200可以只尝试解密用接近当前时钟时间的时间来标记的主密钥208的加密版本。
为了防止对主密钥208的旧加密版本或过期加密版本的解密,并因此降低蛮力攻击成功破解主密钥208的这种过期的加密版本的风险,验证系统200可以删除用已经过去的时间或事件所标记的、或以任何其它适当方式被标识为旧的或过期的主密钥208的加密版本。
如果解锁机构206生成的验证密钥226与用于对主密钥208的加密版本进行加密的验证密钥226不匹配,则在步骤310,主密钥208的加密版本没有成功解密,因此解锁机构206不能将容器202解锁以提供对容器202内的资源和数据的访问;即,在步骤312拒绝对资源的访问。
一旦解锁机构206已解密了主密钥208的加密版本,则其在步骤314的第二解密处理中使用主密钥208来解锁容器202。这为验证密钥生成器204提供了对私钥210、OTP种子212和(在适用时)对用户的静态密码214的访问权。当容器202打开时,用户能够在步骤316访问容器202内的安全数据216和/或资源218。
在一些实施例中,除了认证对容器202内的资源的访问之外,或作为这种认证的替代,解密后的主密钥208可以用于针对容器202之外的资源(例如安全应用225)来认证用户。例如,主密钥208可以用于针对电子邮件应用来认证用户(例如,用作该应用的密码),电子邮件应用提供其自己的数据加密并将该数据存储在非易失性存储器106的存储部219(即,非易失性存储器106的未用主密钥208加密的部分)中。
在步骤318,访问存储在容器202中的私钥210、OTP种子值212以及(当适用时)用户的静态密码214的验证密钥生成器204生成主密钥208的一个或多个另外的版本,如下面参考图4所描述。由于验证密钥生成器204可以访问私钥210,因此,相比于解锁机构206(其只有对公钥220的访问权,没有对私钥210的访问权)可以生成用于对主密钥208的加密版本进行解密的验证密钥226的版本,其能够更快地(使用更少的计算资源)生成用于对主密钥208的版本进行加密的验证密钥226。
在步骤320,将主密钥208的一个或多个另外的加密版本存储在非易失性存储器106的存储部219中(即,在容器202之外),用于在方法300的随后迭代步骤中对容器202进行解锁。
图4是示出使用验证密钥生成器204、针对时间集t=1,...,t=n来生成主密钥208(用MK表示)的加密版本的加密过程400的流程图。生成时间集,以覆盖预计用户对容器202进行至少一次解锁的时间段。通常,时间集将跨越数天,以允许用户能够继续访问安全数据并且在该时间跨度内由容器202脱机提供的资源被解锁至少一次。在用户未在规定的时间限制内访问他们的容器202至少一次(使得OTP验证系统200在超过时间限制的时间不能生成主密钥208的新的加密版本)的情况下,验证系统200可以要求用户执行在线验证处理以解锁容器202,从而使得验证密钥生成器204能够生成主密钥208的新的加密版本。
时间集中的时间的间隔可以是任何值。时间之间的间隔越紧密,则导致OTP值和主密钥208的有效加密版本更频繁地改变,并因此导致容器202的内容的安全程度更高。通常,时间之间的间隔在30秒至60秒的范围内;例如,在时间之间的间隔为30秒的系统中,有效OTP值每30秒改变一次。然而,可以使用任何合适的时间之间的间隔。
在步骤402,验证密钥生成器204通过使用从容器202获得的种子值212和时间集,对OTP生成器222的OTP生成算法进行操作,来生成OTP值224的集合,O1,...,On,使得每个OTP值对应于时间集中的一个时间。
在步骤404,针对每个OTP值224,验证密钥生成器204计算与OTP值224(由Oi表示)、对应的时间值(由ti表示)以及(可选的)用户的静态密码(由pw表示)相关的组合值。可以使用单向函数来计算组合值,单向函数确保不能容易地从组合值中确定组成值(例如,不能在OTP值的生存期内可行地确定)。例如,验证密钥生成器204可以使用密码散列函数生成组合的散列值Hi,由下式给出:
Hi=hash(ti,Oi,pw).
如上所述,为了对主密钥208的版本进行加密,验证密钥生成器204生成验证密钥226的集合。主密钥208的加密版本通常为32字节长,这意味着用于对主密钥208的加密版本进行加密的验证密钥226通常也是32字节长,因为用于对主密钥208的加密版本进行加密和解密的密码算法是对称的。由于公钥220通常比主密钥208的加密版本长得多(即包括更多的位)(例如公钥220可以包括1024位,包括两个512位素数),所以使用另一哈希函数来生成所使用的验证密钥226,所述另一哈希函数生成另一散列值H′i,其为32字节长并且使用在步骤404生成的哈希值Hi、公钥220(由N表示)和迭代计数(由K表示)来生成。因此,每个验证密钥226具有值H′i,由下式给出:
H′i=hash(H_i^(2^k)mod N)。
由于N(即私钥210)的因式分解是已知的,因此可以通过以下计算来相对快速地计算形成由验证密钥生成器204所生成的验证密钥226的H′i的值:
先步骤406进行第一计算:k′=2k mod(P-1)(Q-1):
然后在步骤408中计算:
Hik′mod N。
如图4所示,可以与组合值H′i的生成分开地计算k′的值。例如,k′的值可以在验证密钥生成器204的操作之前计算并存储在容器202中,并且当容器212被解锁时由验证密钥生成器204访问。备选地,可以在验证密钥生成器204生成验证密钥226的同时在运行时计算k′的值。
当P和Q的值已知时,计算H′i所花费的时间小于当P和Q的值未知时计算H′i的值所花费的时间。例如,使用1024位公钥220(包括512位素数和1,000,000次计数迭代K),则使用验证密钥生成器104生成验证密钥226所花费的时间(即,访问私钥210)在2013年的典型台式计算机上约0.25毫秒,在2013年的典型智能手机上约1毫秒(在2013年的典型智能手机上操作的验证密钥生成器204可以在约3个CPU秒内生成可用一天的验证密钥226)。
然后在步骤410,验证密钥生成器204使用所生成的验证密钥226中的每一个,通过使用对称加密算法来加密主密钥208的版本,由下式给出:
encrypt(MK,H′i)。
因此,生成了主密钥208的加密版本的集合,其中每个加密版本用不同的验证密钥226(基于不同的OTP值)来生成。
在步骤412,主密钥208的加密版本的集合存储在非易失性存储器106的存储部219中(即在容器202之外)。然后,主密钥208的加密版本的集合可被用户用于随后使用解锁机构206来解锁容器202的尝试。
主密钥208的加密版本的长度可以被选择为平衡密钥加密的熵和可用存储。例如,主密钥的加密版本可以是32字节长。利用32字节长的主密钥208的加密版本,并且主密钥208的每个加密版本在30秒的时段内有效,存储一天的主密钥208的加密版本所需的数据存储容量大约为92kB。为了限制数据存储需要,验证系统200可以要求用户在规定的时间限制内访问容器202至少一次;例如,至少每数天一次。在用户未在规定的时间限制内访问他们的容器202至少一次(使得OTP验证系统200在超过时间限制的时间不能生成主密钥208的新的加密版本)的情况下,验证系统200可以要求用户执行在线验证处理以解锁容器202,从而使得验证密钥生成器204能够生成主密钥208的新的加密版本。
图5是示出用于使用解锁机构206对主密钥208的加密版本进行解密的解密过程500的流程图。
为了对主密钥208的加密版本进行解密,解锁机构206需要成功生成具有与由验证密钥生成器204生成且用于加密主密钥208的加密版本的验证密钥226相同的值的验证密钥226的版本。也就是说,解锁机构206必须生成具有由下式给出的值H’的验证密钥226:
H’=hash(H^(2^k)mod N)=hash(H_i^(2^k)mod N)。
为了生成验证密钥226,在步骤502,解锁机构206接收输入,例如用户输入。该输入包括当前OTP值(由O表示)和可能的用户的静态密码(由PW表示)。例如,当前OTP值可以由用户从OTP令牌201中获得。
在步骤504,解锁机构计算与当前OTP值、可根据时钟231确定的当前时间值(由t表示)和用户的静态密码(由pw表示)相关的组合值。可以使用单向函数来计算组合值,单向函数确保不能容易地从组合值中确定组成值(例如,不能在OTP值的生存期内可行地确定)。例如,解锁机构206可以使用密码散列函数来生成组合的散列值H,由下式给出:
H=hash(t,O,pw)。
由于解锁机构206和用户都不能访问私钥210(只能访问公钥220),所以为了生成具有与用于加密主密钥208的给定加密版本的验证密钥226的相同值的验证密钥226的版本,需要解锁机构206使用与验证密钥生成器204所使用的过程不同的过程来导出或计算出验证密钥226。
为了生成验证密钥226的版本,在步骤506,解锁机构206依次执行K模平方运算以确定值:
H^(2^k)mod N。
在步骤508,解锁机构执行另一散列操作。如上参考图4的步骤408所述,使用另一散列函数来生成验证密钥226的版本,使得验证密钥具有与主密钥208的加密版本的长度相对应的固定长度(例如32字节),并且长度通常短于公钥220。因此,使用在步骤504生成的散列值H、公钥220(由N表示)和迭代计数(由K表示)来生成验证密钥226的版本。解锁机构206产生的验证密钥226具有值H′,由下式给出:
H′=hash(H^(2^k)mod N)。
因此,通过依次执行k模平方运算,在不知道N的因式分解(即,不访问私钥210)的情况下计算出形成由解锁机构206所生成的验证密钥226的H′值,而在知道N的因式分解(私钥201)的情况下,计算出形成由验证密钥生成器204所生成的验证密钥226的H′i值。因此,由验证密钥生成器204执行的计算的量比由解锁机构206执行的计算要少,因此相比解锁机构206可以生成用于对主密钥208的加密版本进行解密的验证密钥226,验证密钥生成器204可以更快地生成用于对主密钥208的加密版本进行加密的相同验证密钥226。
在步骤510,解锁机构从非易失性存储器106的存储部219获得主密钥208的加密版本。在这方面,解锁机构206可以仅获得与当前时间值相对应的主密钥208的加密版本,或者可以获得所存储的主密钥208的所有加密版本。解锁机构206可以将获得的主密钥208的加密版本(一个或多个)保存在RAM 108中。
在步骤512,解锁机构206使用其已生成的验证密钥226来解密与当前时间相对应的主密钥208的加密版本。使用验证密钥生成器204用来对主密钥206的加密版本进行加密的相同的对称加密算法来执行对主密钥208的加密版本的解密,由下式给出:
decrypt(MK,H′)。
解锁机构206生成用于对主密钥208的加密版本进行解密的验证密钥226的版本的处理通常比验证密钥生成器204生成用于对主密钥208的加密版本进行加密的验证密钥226的处理时间明显更长。例如,使用1024位公钥220(包括512位素数和1,000,000次计数迭代K),则使用解锁机构206生成验证密钥226所花费的时间(即,不访问私钥210)在2013年的典型台式计算机上约500毫秒,在2013年的典型智能手机上约2秒。因此,解锁机构206生成验证密钥226所费的时间比验证密钥生成器204多约2000倍。验证密钥生成器204生成验证密钥226所花费的时间与解锁机构206生成相同密钥226所花费的时间之间的差异提供了对抗蛮力攻击的鲁棒性,因为验证密钥生成器204速度较快,所以允许快速生成主密钥208的加密版本,但与此同时,解锁机制206速度较慢。相应地,快速生成主密钥208的加密版本使得OTP验证系统200能够在延长的时间段内离线操作(即,不连接到远程服务器),而不需要这样大量的专门用来存储主密钥208的加密版本的非易失性存储器106的部分,或这样大量的专用于生成主密钥208的加密版本的处理时间。此外,验证系统200可以使用现有的OTP算法来实现,因此可以与现有的OTP令牌(其当前可以用于在线OTP验证)结合使用。
上述实施例应被理解为本发明的说明性示例。设想了本发明的其它实施例。例如,在上述OTP验证系统的描述中,验证密钥生成器204被描述为在容器202外部,并且仅当容器202被解锁时才能够访问私钥210和OTP种子212。然而,验证密钥生成器204本身可以存储在容器202内,并且因此可以保存私钥210的副本和OTP种子212。响应于容器202被解锁,验证密钥生成器204可以从非易失性存储器106的存储部219中移除主密钥208的过期的加密版本(即,用于过去的时间),并且启动用于生成一组新的主密钥208的未来加密版本的处理。
虽然在上述方法中解锁机构206从非易失性存储器106的存储部219获得主密钥208的加密版本,但是将理解,主密钥208的加密版本可以在生成时或在其后的任何时间通过验证密钥生成器204被传递到解锁机构206。然后,解锁机构206可以将主密钥208的加密版本存储在非易失性存储器106的存储部219中,或者可以仅将主密钥208的加密版本临时存储在RAM 108中。
尽管在上面参考图4和图5描述的实施例中,与时间值、OTP值和用户的静态密码相关的组合值被描述为使用单向函数(例如散列函数)来计算,但是将理解,可以使用将这些值组合的任何合适的函数。例如,可以通过拼接时间值、OTP值和用户的静态密码来计算组合值。
上述实施例是在对称加密方案的上下文中描述的,其中使用相同的密钥(即主密钥208)来锁定和解锁容器202。然而,将理解,合适的非对称加密方案也可以与验证系统200一起使用。在这种系统中,验证密钥生成器204生成主密钥208的多个加密版本,其中多个加密版本形成用于解锁容器202的非对称密钥对的私钥部分。用于锁定容器202的非对称密钥对的对应公钥部分存储在容器202之外。使用非对称密钥算法的验证系统200的这种实现使得数据能够在容器202锁定或解锁时被放入在容器202中(即加密),但是仅在容器202解锁时才能从容器202中取出(即解密)。
应当理解,结合任一个实施例描述的任何特征都可以单独使用,或与所描述的其他特征组合使用,并且还可以与任何其它实施例或任何其他实施例的任何组合的一个或多个特征组合使用。此外,在不脱离所附权利要求中限定的本发明的范围的情况下,也可以采用上面未描述的等同物和修改。