保护密钥的安全终端、例程和方法

文档序号:6568461阅读:271来源:国知局
专利名称:保护密钥的安全终端、例程和方法
技术领域
本发明设计一种保护密钥的安全终端、例程和方法。
背景技术
典型地,安全终端包括-处理器,执行软件应用程序和软件应用程序所调用的例程,和 -至少一个密钥。所述处理器可以执行非安全软件应用程序以及安全软件应用程序。 非安全软件应用程序是可以被轻易更新或改变的软件应用程序。 典型地,非安全软件应用程序被写入可以被重写的存储器,例如闪存。 相反,安全软件应用程序是不可以被轻易改变的软件应用程序。 例如,安全软件应用程序在安全终端的制造过程中被写入只读存储器。 保护所述只读存储器,以使得每个安全软件应用程序都不可以被轻易 改变。非安全软件应用程序是安全终端的弱点,因为它们会被黑客改 变。然而,对安全终端的设计来说,将任何软件应用程序都记录在只 读存储器中是不恰当的。因此, 一直以来存在这样的危险,即黑客可 能改变非安全软件应用程序,使得被改变的非安全软件应用程序读取 25 密钥并将其泄漏给黑客。发明内容因此,本发明的目的是提供一种保护密钥使其不被非安全软件应 用程序读取的方法。 30 本发明提供一种保护密钥使其不被非安全软件应用程序读取的方法,该方法包括将密钥记录为存储在只可执行的存储器中的只可执 行的例程的步骤,所述例程包括-加载指令,如果安全软件应用程序调用所述例程,则将密钥载 入安全和非安全软件应用程序均可读的存储器,和 5 -控制指令,如果调用所述只可执行的例程的软件应用程序是非安全软件应用程序,则在可读存储器中只留下虚假(dummy)数据而 非密钥。所述密钥被记录为存储在只可执行的存储器中的例程。为此,该 例程被称为"只可执行的例程"。所述只可执行的例程不能被处理器 10 读取而只能被执行。因此,获得所述密钥的唯一途径是执行只可执行 的例程。然而,在执行时,所述例程本身确保与密钥有关的秘密信息 不会泄漏给非安全软件应用程序。因此,密钥本身是非安全软件应用 程序不可读的。上述方法的实施例可以包括下列特征中的一个或一些 15 -所述加载指令是加载常数的指令,每个常数的值嵌入在例程代码中并代表密钥的至少一位,-所述方法包括步骤在执行加载指令之前禁用任何IRQ (中断 请求),并且只在己经删除了载入可读存储器中的密钥之后才重新启用 IRQ,20 -在执行IRQ重新启用步骤之前,所述只可执行的例程系统地返回安全软件应用程序,并且任何安全软件应用程序删除已加载的密钥, -如果安全软件应用程序不是由只可执行的例程调用的,则该只 可执行的例程所返回的所述安全软件应用程序立即删除已加载的密 钥。25 所述方法的上述实施例表现出下列优点-使密钥作为可加载常数嵌入在只可执行的例程中加强了实施例 的安全性;-禁用IRQ防止了任何非安全软件应用程序读取载入可读存储器的密钥,因为只要IRQ被禁用,就不能执行非安全软件应用程序;30 -在只可执行的例程的执行结束时系统地返回安全软件应用程序防止了如下攻击,即调用只可执行的例程的非安全软件应用程序使用 对应于安全软件应用程序的返回地址;-如果只可执行的例程不是由安全软件应用程序调用的则从可读 存储器中删除密钥通过防止其它非安全软件应用程序调用所述只可执5行的例程而加强了终端的安全性。本发明还涉及一种只可执行的例程,用于上述防止密钥被非安全软件应用程序读取的方法中。所述只可执行的例程包括-加载指令,如果所述例程是由安全软件应用程序调用的,则将密钥载入安全和非安全软件应用程序均可读的存储器,和 10 -控制指令,如果调用所述只可执行的例程的软件应用程序是非安全软件应用程序,则在可读存储器中只留下虚假数据而非密钥。上述只可执行的例程的实施例可以包括下列特征中的一个或一些-所述加载指令是加载常数的指令,每个常数的值嵌入在例程代 15 码中并代表密钥的至少一位,-所述只可执行的例程具有在只可执行的例程的执行开始时禁用 任何IRQ的指令,-所述只可执行的例程具有在只可执行的例程的执行结束时系统 地返回安全软件应用程序的指令。 20 本发明还涉及一种安全终端,包括-处理器,执行软件应用程序和软件应用程序所调用的例程,和 -至少一个密钥,其中,所述安全终端还包括适于记录只可执行的例程的只可执行的存储器,所述只可执行的例程包括25 -加载指令,如果所述例程是由安全软件应用程序调用的,则将密钥载入安全和非安全软件应用程序均可读的存储器中,和-控制指令,如果调用所述只可执行的例程的软件应用程序是非 安全软件应用程序,则在可读存储器中只留下虚假数据而非密钥。所述安全终端的实施例可以包括下列特征中的一个或一些 30 -所述加载指令是加载常数的指令,每个常数的值嵌入在例程代码中并代表密钥的至少一位,-所述终端包括只读存储器(ROM),所述存储器包括至少一个安全软件应用程序的指令代码,所述指令代码具有删除可读存储器中 加载的密钥的指令,5 -所述终端包括-在复位所述终端之后只可读取一次的读取一次存储器,所 述读取一次存储器记录所述密钥,-只读存储器,具有安全初始化例程,根据存储在读取一次 存储器中的密钥来创建只可执行的例程的指令代码,并将所述只可执10 行的例程的指令代码载入只可执行的存储器,-只可执行的存储器具有事务解码器(transaction decoder),以只 批准指令读取操作并禁止数据读取操作, -所述终端是移动电话。根据下列说明书、附图和权利要求,本发明的这些和其它方法将 15 变得明显。


图1是安全终端的示意图;图2是在图1的安全终端中所实现的事务解码器的示意图; 20 图3是保护密钥使其不被图1的终端中的非安全软件应用程序读取的方法的流程图。
具体实施方式
图1示出了安全终端2,具有连接至外部存储器6的电子处理器 254。例如,终端2是移动电话,处理器4是基带处理器,或更一般地, 是任何SoC (片上系统)。存储器6可以被重写,并记录非安全软件应用程序的代码。每个 代码由可由处理器4执行的指令构成。例如,存储器6是闪存。处理器4能够执行存储在存储器6中的非安全软件应用程序,以 30及存储在ROM (只读存储器)8中的安全软件应用程序。为了简化,图1中只示出了为理解本发明所必需的处理器4的元件。处理器4包括-中央处理单元10,5 -ROM 8;-只读一次存储器12,永久地记录至少一个密钥;-RAM (随机存取存储器)或内部数据寄存器18,存储单元10 所执行的软件应用程序可以读取和使用的数据;-寄存器库20,存储只可执行的例程21;和 10 -事务解码器22,限制对寄存器库20的访问。例如,所有上述元件8到22建立于至少一个管芯(die)上,并 被嵌入在相同的集成电路封装中。从安全的角度来看,这是个重要因 素,因为这意味着偶尔造访的黑客不可能对处理器4的内部元件进行物理访问。15 单元10具有特殊寄存器14,用于记录调用例程的软件应用程序的返回地址。例如,单元10是来自ARM公司的ARM处理器(参见网址 www.arm.com),或更一般地,是任意CPU (中央处理单元)。只是为了举例,存储器12只记录一个密钥。在处理器4的制造 20过程中在硅中使用激光切割,存储存储器12中的密钥。在每次处理器 4复位之后,只能读取一次所存储的密钥。为此,单元10和存储器12 之间的链接23确保单元10和存储器12总是同时被复位。在执行软件应用程序过程中,单元10使用内部数据寄存器18来 存储该执行所必需的数据。 25 设计寄存器库20以记录将密钥载入寄存器18的只可执行的例程21。例程21包括-加载指令,将密钥载入寄存器18;-控制指令,如果调用例程21的软件应用程序是非安全软件应用 程序,则只将虚假数据而非密钥载入寄存器18; 30 -在例程21的执行开始时禁用任何IRQ (中断请求)的指令,和-在例程21的执行结束时系统地返回安全软件应用程序的指令。加载指令是将常数载入寄存器18的指令,每个常数是密钥的一 位。所述常数的值被嵌入在例程21的代码中,更精确地,被嵌入在例 程21的指令的运算码(op-codes)中。 5 寄存器库20和事务解码器22的组合形成了只可执行的存储器24,将关于图2对其进行更为详细的描述。ROM 8是引导ROM,记录了在处理器4复位之后立即启动的软 件应用程序的代码。每个代码都由单元IO可执行的指令构成。ROM 8记录作为安全内核26 —部分的任何安全软件应用程序的 10 代码。例如,安全内核26具有初始化例程28,初始化例程28读取存储 器12、创建只可执行的例程21的代码,并将该代码载入寄存器库20。内核26也具有安全软件应用程序,该安全软件应用程序被设计 为检查非安全软件应用程序的可靠性。例如,内核26具有安全软件应 15用程序30,安全软件应用程序30能够检查非安全软件应用程序是否 是由己知权威标记的或是由这种己知权威验证的。应用30需要密钥来 执行这样的任务,因此其被设计为调用例程21以获得密钥。调用例程21的任何安全软件应用程序能够- 一旦已经使用了则删除存储在内部寄存器18中的密钥,和 20 -在从寄存器18删除密钥之后启用IRQ (中断请求)。通过删除,我们意欲用虚假数据来代替密钥,这样不会泄漏有关 密钥的任何可用信息。这可以通过用常数(例如0)来改写密钥而实 现。ROM 8、存储器12、 24和寄存器18通过总线34和地址总线36 25连接至单元10。总线34用于传输将由单元10处理的数据和将由单元 10执行的指令。因为只存在一个公共总线34来交替地传输数据和指 令,所以总线34具有可变数据/指令标签,所述标签指示将总线上的 条目作为数据还是指令来处理。存储器12通过总线34连接至单元10,以便在单元10复位之后 30 可以读取一次存储器12。图2示出了只可执行的存储器24。己经在图1中示出的存储器 24的元件具有相同的附图标记。寄存器库20具有一个端口 40和一个端口 42,端口 40接收将被 写入寄存器库20的数据,端口 42输出在寄存器库20中读取的数据。 5 端口 40连接至写数据总线44,以接收将要写入的数据。端口 42连接 至读数据总线46以输出将被读取的数据。例如,总线44和46是32 位元总线。只有库20的输入47接收逻辑1时才能将数据写入寄存器 库20。事务解码器22具有逻辑"与"单元50,逻辑"与"单元50具有 10—个连接至总线46的输入端口 52和一个连接至总线34以接收数据/ 指令标签的输入端口54。当从寄存器库20读取数据时,数据/指令标 签等于逻辑0,当从寄存器库20读取指令时,数据/指令标签等于逻 辑1。单元50对总线46上存在的数据和数据/指令标签的值进行逻辑 15 "与"操作,并将结果输出到数据总线34上。存储器24也是写入一次存储器。更准确地,存储器24在每次处 理器4复位之后只可以被写入一次。为此,解码器22具有"与"门 60,"与"门60的输入连接至总线34的写入信号62和反相器64的输 出。反相器64的输入66连接至锁存器70的输出68。 20 门60执行写入信号62和反相器64的输出之间的逻辑"与",并将结果发送至输入47。锁存器70的输入72连接至"或"门74的输出。门74的第一输 入76连接至输出68。门74的第二输入78连接至写入信号62。门74 对其输入76和78上存在的信号进行逻辑"或"操作,并将结果输出 25 至锁存器的输入72。锁存器70被设计为在己经复位处理器4之后,当第一次激活 处理器4时,通过输出68输出逻辑0。例如,锁存器70使用链接(例 如链接23)连接至单元10,以确保单元10和锁存器70总是同时被复 位。随后,锁存器70通过输出68输出等于其输入72上接收的值的值。 30 现在将参考图3来描述终端2的操作。首先,在步骤90,复位处理器4。在步骤卯,锁存器70复位并 返回它的初始状态。存储器12也被复位,并启用一个读取操作。在复位之后,单元10立即开始执行存储在ROM8中的软件应用 程序。5 此后,在步骤92,初始化例程28读取存储在存储器12中的密钥的值,并创建例程21的相应代码。因为存储器12是在复位之后第一 次由例程28读取,所以只要处理器4不被复位,就不能再读取存储器 12。在步骤94,例程28将例程21的代码写入并记录在寄存器库2010 中。开始时,写入信号62等于1,锁存器70的输出68等于0。在操作96期间,门62将写入信号值和反相器64的输出进行比 较。如果二者都等于l,则在操作98期间,在输入47上设置逻辑1, 并把通过总线44发送的例程21的代码写入并存储在寄存器库20中。 15 相反,在操作100过程中,如果反相器64的输出等于0,则在输入47上设置逻辑0,并且不能再向寄存器库20写入数据。与步骤94并行地,在步骤102中,存储"已经完成第一次将数 据写入寄存器库20"的事实,以防止在再次复位处理器4之前向寄存 器库20写入任何数据。 20 更准确地,在操作104,门74比较写入信号62的值与输出68的值。如果输入76和78都等于0,则门74向输入72输出逻辑0,否贝U, 门74输出逻辑1。因此,如果是第一次向寄存器库20写入数据,则输出68等于0, 因此反相器64的输出等于1并且例程21的代码可以被写入并存储在 25 寄存器库20中。当第二次或任何后继次向寄存器库20写入数据,则输出68等于 逻辑1,以使得反相器64的输出等于0并且不能向寄存器库20写入 数据。因此, 一旦例程21的代码被存储在寄存器库20中,则只要处 理器4不被复位,就不能改变例程21的代码。 30 其结果是,存储器24是写入一次存储器。在步骤94的第一次执行结束时,例程21的代码被写入寄存器库20。接着,典型地,处理器4执行非安全软件应用程序。当需要密码 操作时,调用软件应用程序30。例如,需要密码操作来解密DRM(数 5字版权管理)许可。此后,在步骤110,安全软件应用程序30调用例程21。此时, 在操作112期间,单元IO把调用应用例程的返回地址写入寄存器14。 在步骤114,单元10读取寄存器库20中的例程21的代码并执行。 因此,将数据/指令标签设为0。首先,在操作116中,单元10通过总 10线34发送寄存器库读取指令。作为响应,在步骤118,寄存器库20将对应的指令放在总线46上。在操作120中,单元50将端口 52上接收的指令与端口 54上接 收的数据/指令标签值相比较。 15 在操作122中,如果该标签值等于l,则单元50输出总线34上的读取指令。因为标签值等于1,所以所述输出指令只可以解释为单 元10的指令并因此直接由单元10执行。当数据/指令标签等于1时, 软件应用程序不能访问总线34上的数据。如果试图将寄存器库20中存储的指令作为数据来读取,则数据/ 20指令标签等于0,并且单元50在操作124过程中只会输出0而非对应 的指令。因此,如果非安全软件应用程序试图读取存储在存储器24中的 代码,则它只能获得虚假数据,即多个O。因此,存储器24是只可执行的存储器,而例程21是只可执行的 25 例程,这是因为它的代码只能由单元IO执行,而不能由处理器4所执 行的软件应用程序读取。因为数据/指令标签等于1,在步骤130,单元10执行总线34上 存在的指令。在步骤130的开始处,在操作132中,单元IO禁用任何IRQ(中 30断请求),以使得接下来的指令的执行不会被任何软件应用程序所中断。因此,其它软件应用程序不能够读取存储在寄存器18中的任何内 部数据。此后,在操作134和136中,单元10执行例程21的控制指令。在操作134中,单元10检测例程21是否是由安全软件应用程序 5 所调用的。例如,在操作134中,单元IO把写入寄存器14的返回地 址与ROM 8的存储器地址进行比较。如果写入寄存器14的返回地址不在ROM8的地址范围以内,则 在操作136中,单元IO把例如连续多个O的虚假数据载入寄存器18。 在操作136的结束处,处理器4返回至被写入寄存器14的返回地址。 10因此,调用例程21的非安全软件应用程序不能获得关于密钥的信息。如果返回地址是安全软件应用程序的地址,则在步骤138,单元 10执行例程21的加载指令。因此,寄存器4加载有密钥的值。 一旦 完成,则在操作140过程中,单元10执行例程21的指令,从而系统 地返回至安全软件应用程序。例如,单元IO无条件地跳转至安全软件 15 应用程序30的地址。无论将什么返回地址放在栈14的顶部,都执行 该跳转指令。例如,在操作140过程中,单元10调用应用30。更准 确地,单元10执行至应用30的分支和链接指令。所述分支和链接指 令也将所调用的应用的地址(即例程21的地址)记录在特殊寄存器 14中。20 此后,在阶段150中,应用30使用写入寄存器18的密钥值。例如,在阶段150的开始处,在步骤152中,应用30检査它是 否是由例程21调用的。例如,单元IO检查写入寄存器16的地址是否 对应于例程21的地址。如果这样的条件并不满足,则在步骤154,单元10删除写入寄存 25器18的密钥。例如,单元IO用连续多个O代替密钥。因此,应用30 就像它调用了例程21 —样运行。在步骤156,例如,应用30使用写入寄存器18的密钥来检查或 证明非安全软件应用程序。这样以来,使用密钥来执行密码操作。 当应用30不再需要密钥时,在步骤158,单元10从寄存器18删 30 除密钥。接下来,在步骤160,单元10重新启用IRQ。 然后方法返回主软件应用程序,在步骤110中调用应用30。 许多其它实施例是可能的。例如,除了当从非安全软件应用程序调用例程21时删除密钥之外,还可以锁定终端2以使其不能再被使用。 5 也可以在调用例程21之前通过应用30禁用IRQ。这里,例程21被写入需要在每次复位终端2之后刷新的非永久存储器。然而,也可以用例如ROM的永久存储器来代替寄存器库20。在该实施例中,在每次复位终端2之后不再需要重新存储例程21的代码。10 不仅用于保护一个密钥,上述终端和方法可以用于保护多个密钥使其不被非安全软件应用程序读取。当存储非安全软件应用程序的存储器是处理器4的内部存储器 时,上述教导同样适用。这里所述的内容不局限于移动电话,而可应用于任何安全电子终15 端。
权利要求
1.一种保护密钥使其不被非安全软件应用程序读取的方法,所述方法包括将密钥记录为存储在只可执行的存储器中的只可执行的例程的步骤(94),所述例程包括-加载指令,如果所述例程是由安全软件应用程序调用的,则将密钥载入安全和非安全软件应用程序可读的存储器,和-控制指令,如果调用所述只可执行的例程的软件应用程序是非安全软件应用程序,则在可读存储器中只留下虚假数据而非密钥。
2.如权利要求1所述的方法,其中所述加载指令是加载常数的指令,每个常数的值嵌入在例程代码中并代表密钥的至少一位。
3.如权利要求1或2所述的方法,所述方法包括步骤(132; 160): 在执行加载指令之前禁用任何IRQ (中断请求),以及仅在已经删除了 载入可读存储器中的所述密钥之后才重新启用IRQ。
4.如权利要求3所述的方法,其中,在执行IRQ重新启用步骤之前,所述只可执行的例程系统地返回安全软件应用程序,并且任何 安全软件应用程序删除(在158中)已加载的密钥。
5. 如权利要求4所述的方法,其中,如果安全软件应用程序不 是由所述只可执行的例程调用的,则所述只可执行的例程所返回的所20述安全软件应用程序立即删除(在154中)已加载的密钥。
6. —种被设计为用于根据权利要求1到5中任何一个的密钥保 护方法的只可执行的例程,其中所述只可执行的例程包括-加载指令,如果所述例程是由安全软件应用程序调用的,则将 密钥载入安全和非安全软件应用程序可读的存储器,和 25 -控制指令,如果调用所述只可执行的例程的软件应用程序是非安全软件应用程序,则在可读存储器中只留下虚假数据而非密钥。
7. 根据权利要求6的只可执行的例程,所述加载指令是加载常 数的指令,每个常数的值嵌入在例程代码中并代表密钥的至少一位。
8. 根据权利要求6或7的只可执行的例程,其中,所述只可执 30行的例程具有在只可执行的例程的执行开始时禁用任何IRQ的指令。
9. 根据权利要求8的只可执行的例程,其中,所述只可执行的 例程具有在只可执行的例程的执行结束时系统地返回安全软件应用程 序的指令。
10. —种安全终端,包括-5 -处理器,执行软件应用程序和软件应用程序所调用的例程,和-至少一个密钥,其中,所述安全终端还包括适于记录只可执行的例程的只可执行 的存储器(24),所述只可执行的例程包括-加载指令,如果所述例程是由安全软件应用程序调用的,则将 10密钥载入安全和非安全软件应用程序可读的存储器,和-控制指令,如果调用所述只可执行的例程的软件应用程序是非 安全软件应用程序,则在可读存储器中只留下虚假数据而非密钥。
11. 根据权利要求10的终端,其中,所述加载指令是加载常数 的指令,每个常数的值嵌入在例程代码中并代表密钥的至少一位。15
12.根据权利要求10或11的终端,其中所述终端包括只读存储器(ROM) (8),所述只读存储器包括安全软件应用程序的至少一个 指令代码,所述指令代码具有从可读存储器中删除已加载的密钥的指 令。
13.根据权利要求10或11的终端,其中所述终端包括 20 -在所述终端复位之后只可读取一次的读取一次存储器(12),所述读取一次存储器记录所述密钥,-只读存储器(8),具有安全初始化例程(28),以根据写入读 取一次存储器中的密钥来创建只可执行的例程的指令代码,并将所述 只可执行的例程的指令代码载入只可执行的存储器。 25
14.根据权利要求13的终端,其中,只可执行的存储器具有事务解码器(22),用于只批准指令读取操作并禁止数据读取操作。
15.根据权利要求10到14中任意一个终端,其中,所述终端是 移动电话。
全文摘要
一种保护密钥使其不被非安全软件应用程序读取的方法,所述方法包括将密钥记录为存储在只可执行的存储器中的只可执行的例程的步骤(94)。所述例程包括加载指令,如果所述例程是由安全软件应用程序调用的,则将密钥载入安全和非安全软件应用程序可读的存储器;和控制指令,如果调用所述只可执行的例程的软件应用程序是非安全软件应用程序,则在可读存储器中只留下虚假数据而非密钥。
文档编号G06F21/73GK101238473SQ200680028673
公开日2008年8月6日 申请日期2006年8月1日 优先权日2005年8月3日
发明者哈拉尔德·鲍尔, 帕特里克·富尔彻里, 让-菲利普·佩兰 申请人:Nxp股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1