专利名称:用于执行应用程序的方法
技术领域:
本发明涉及一种用于执行应用程序的方法,所述应用程序包括可执行的本地或可解释的代码并调用操作系统的函数(function),由此,所述操作系统将相应的函数调用的结果发送到所述应用程序。本发明还涉及便携式数据载体,具体地涉及芯片卡或安全模块。
背景技术:
在芯片卡领域,已经知道所谓的错误诱导攻击,其操纵芯片卡的程序顺序或存储器的存储内容。例如,当攻击时,可以借助于微分故障分析(DFA)来尝试通过选择性地散布错误的计算来窥探出密钥。借助于轻型攻击,尝试以有针对性的方式改变芯片卡的安全状态,从而读出保密数据,否则,所述保密数据将仅当存在验证时是可读的。针对这样的攻击,开发了各种基于软件措施和硬件措施二者的防御机制。这里,通过芯片卡的操作系统、或者 通过可以由芯片卡上的应用程序调用的操作系统的函数,定期实行攻击检測。在具有调用操作系统的函数并包含可执行本地或可解释代码的应用程序的便携式数据载体中,可以通过攻击(例如,轻型攻击)篡改函数调用的结果,而应用程序不能检测到该篡改。
发明内容
因此,本发明的目的是详细说明ー种当执行应用程序时可以进ー步提高安全性的方法。本发明的另外的目的是详细说明ー种当执行应用程序时已经提高了安全性的便携式数据载体。通过根据本专利权利要求I的特征的方法、以及根据本专利权利要求11的特征的便携式数据载体来实现这些目的。从从属权利要求得到有利的实施例。本发明产生用于执行应用程序的方法,所述应用程序包括可执行的本地或可解释的代码并且调用操作系统的函数,由此,操作系统将相应函数调用的结果发送到应用程序。根据本发明,应用程序对于篡改而检查相应函数调用的結果,从而检测攻击。通过根据本发明的进行,可以提高来自操纵的安全性。与现有技术不同,对于操纵的检查不是由操作系统实行,而是由应用程序本身实行,所述应用程序调用操作系统的函数。特别地,在这样的应用程序中产生安全性的提高,其中操作系统仅对应用程序提供布尔变量作为結果。这是例如当验证签名时的情況。这里,每个不等于零的结果值被应用程序解释为真。这里,对由操作系统发送到应用程序的结果值的成功攻击的概率大大增カロ,因为每个篡改的结果导致无效签名的成功验证。根据本发明,由应用程序自身实行对发送到应用程序的结果的检查,由此,在检测到攻击的情况下可以采取适当的对策。特别地,在便携式数据载体(特别是芯片卡或安全模块)上执行根据本发明的方法。方便地,为了检查相应函数调用的结果,由应用程序调用操作系统的另ー个函数。特别地,其中规定了 由应用程序对操作系统的相应函数的调用经由第一接ロ而进行,并且,由应用程序对另ー个函数的调用经由第二接ロ(特别是专有接ロ)而进行。经由第二接ロ,可以以简单的方式检查在先的安全性相关处理的結果,而不会影响第一接ロ的工作和机能的模式。因此,通过由第二接ロ的扩展,对由操作系统发送的结果的检查也可以在这样的经标准化的且不可变的环境中进行。又一实施例规定了 执行对不同函数调用的相应结果的集中(central)统ー的检查。特别地,规定了进行对上ー个函数调用的检查。通过该检查,可以确知(ascertain)所调用的函数是否被实际执行、以及接收的返回值是否符合实际結果。以这种方式,可以以高概率检测到攻击。又ー实施例规定为了检查相应函数调用的結果,由操作系统确定并被发送到应用程序的结果被发送到操作系统并且由操作系统验证。这里,优选地,经由第二接ロ进行结果从应用程序到操作系统的发送,由此,不需要改变或扩展关于在应用程序和操作系统之间经由第一接ロ的通信的现有标准。 以有利的方式,便携式数据载体的另外的行为可以由应用程序依赖于检查结果而控制。对便携式数据载体的另外的行为的控制包括时间延迟和/或数据载体的关闭。相应地选择的反应可以依赖于应用程序的检查的结果而进行。对于函数调用的攻击可能已经改变所调用的函数。进ー步的保护可能来自错误函数(即,除了由应用程序调用的函数之外的函数)的(正确)結果。除函数调用的结果之外,应用程序还可以验证所调用的函数是否被实际执行。应用程序将检查參数发送到识别所调用的函数的操作系统。操作系统存储了用于(上次)所调用的函数的參考參数、并且针对检查參数而检查所述參考參数。优选地,将參数与结果一起发送到操作系统,并且在对结果的检查的框架内检查參数。因此,如果除了所调用的函数之外的函数提供結果,则这会在检查的框架内被检测到。优选地,所检查的函数调用应该是上ー个函数调用。然而,应用程序的所有函数调用并非都必须是安全性相关函数。然而,如这里暗示的,进ー步的函数调用不被保护,因此它们的结果不被操作系统存储用于检查。特别地,可以对于上ー个安全性相关函数调用而相应地进行对结果的检查。仅可以检查安全性相关函数调用的結果。另外的(非安全性相关)函数调用可以在安全性相关函数的调用和上一个由应用程序调用的安全性相关函数的结果的检查之间进行。在具体实施例中,使用Java卡小应用程序(applet)作为应用程序,并且使用Java卡VM (虚拟机)作为操作系统。优选地,运行应用程序和操作系统的数据载体是Java卡。根据本发明的以芯片卡或安全模块的形式配置的数据载体被配置为执行根据本发明的上述方法。
在下文中将參考附图而更严密地描述本发明。附图被描述如下图I是根据本发明的方法的示意顺序,以及图2是根据本发明的便携式数据载体的示意表示。
具体实施方式
本发明从调用操作系统BS的函数的应用程序A开始进行。用于此目的的应用程序A包含可执行的本地或可解释的代码。尽管通常可以将本发明应用于在操作系统上运行的任何应用程序,但以下描述的示例性实施例从作为便携式数据载体的Java卡开始进行,虚拟机在Java卡上处理Java小应用程序的函数调用。应用程序A可以经由两个接ロ ST1、ST2访问Java卡CC的操作系统BS (比较图2)。经由第一个接ロ ST1,由应用程序A调用操作系统BS的函数。第一个接ロ STl例如是Java卡API。第二个接ロ ST2 (特别地,其具有专有性质)将适合于提高安全性的附加函数提供至应用程序。特别地,在函数调用之后,该应用程序可以通过接ロ ST2验证由操作系统BS发送到应用程序A的結果。附加的第二个接ロ ST2的提供弥补了安全性关键弱点,诸如,存在在SunMicrosystems (太阳微系统公司)的Java卡API中。通过命令“verify PIN (验证PIN)”的例外(其中,修改可以由应用程序从操作系统查询(query)的状态),Java卡API将布尔值提供回应用程序A。因此,关于安全性相关函数(诸如签名验证),作为返回,仅使用返回到应 用程序的布尔值。真实的是,所述值被内部扩展以形成2字节值。然而,每个不等于零的值被解释为真。因此对返回值的成功攻击的概率大大增加,因为每个篡改的结果导致无效签名的成功验证,而应用程序A无法检测到这样的攻击。通过第二个专有接ロ ST2,可以增加来自操纵的安全性,因为检查由操作系统BS提供回应用程序A的結果。依赖于检查结果,如果需要的话,则可以将Java卡设置为安全状态。第二个接ロ ST2允许使得新函数可用于检查在先的安全性相关处理的結果。为此目的,独立于经由第一个接ロ STl由操作系统BS返回到应用程序A的结果值,可以内部地保持另ー个结果值,可以在程序顺序中的合适的点处由应用程序A查询该另ー结果值。通过这个结果值,可以检查应用程序调用的函数是否由操作系统实际地执行。由此,进行对从操作系统接收的结果值是否符合实际结果的验证。此外,通过由第二个接ロ ST2使得可用的方法,提供对检查的结果作出反应的可能性。例如,可以关闭Java卡,或者可以改变Java卡的时间响应。通过使第二个接ロ ST2可用,由操作系统BS发送到应用程序A的结果值可以被独立地检查。以此方式,可以进行对攻击和/或操纵的成功检测。第二个接ロ ST2可以使应用程序能够报告检测的攻击。图I示意性地表示所述Java卡的所述行为。处理步骤SI中的应用程序A调用操作系统BS的函数fl。在步骤S2中,操作系统BS执行函数fl并且存储由此得到的結果。此外,经由第一个接ロ STl将结果发送到应用程序A。当作为结果,仅将布尔值作为结果值而发送到应用程序A吋,这可以以简单方式被篡改。这在图I中假设并且由箭头示意性地指示。因此,应用程序A首先从操作系统BS接收值“result*”作为結果。在步骤S3中,检查结果值“result*”,因为所述值被发送到操作系统BS。操作系统BS检查从应用程序A接收的结果值“result*”。这里,确知“ result*”不符合在步骤S2中发送到应用程序A的结果值“result”。对其作出反应,操作系统BS在步骤S4中发送信息“ΝΙ0”,其用信号通知(signal)在步骤S2中发送到应用程序A的结果值、和所检查的结果值的差异。因此,在步骤S5中由应用程序A检测攻击。
在步骤S3、S4和S5中的应用程序A和操作系统BS之间的通信经由第二个接ロST2进行。经由第二个接ロ ST2,进ー步使得应用程序A能够对步骤S5中检测的攻击作出反应。可选地,应用程序可以将检测的攻击传递到操作系统。操作系统可以直接对此信息作出反应。然而,优选地,操作系统首先等待应用程序控制对攻击的反应。在步骤S6中,将对于时间延迟的请求发送到操作系统BS。操作系统BS在步骤S7中实施Java卡的顺序的时间延迟。由应用程序A请求的时间延迟可以具有随机的持续时间。替代地或附加地,根据步骤S8,可以将关闭Java卡的请求发送到操作系统BS。在接收请求后,在步骤S9中,由操作系统关闭Java卡。特别地,接ロ ST2也向应用程序提供未在图2中表示的如下附加函数-报告由应用程序检测的攻击, -对操作系统的有条件的关闭请求,其导致在之前检测到或者报告了错误的情况下由操作系统关闭,以及-将上ー个函数调用的结果值存储器重置为预定义的状态。报告所检测的攻击使得可以由应用程序进行更灵活的控制、和/或向操作系统提供对于其自身的可能控制措施的更好的采取决定基础。在安全实施例中,独立于结果地报告攻击检查的結果。并且,有条件的关闭请求总是可以通过应用程序而贯穿(run through)。通过这两个部分步骤,使顺序独立于检查的结
果O结果值存储器的重置最后甚至使应用程序能够检测对函数调用的结果检查的有针对性的攻击。当操作系统的结果值存储器被重置为例如值“O”时,应用程序可以用以“I”为结果的调用测试其自身的函数。于是,该检查将甚至可以独立于实际的函数调用。
权利要求
1.一种用于执行应用程序(A)的方法,所述应用程序(A)包括可执行的本地或可解释的代码并调用操作系统(BS)的函数,从而,所述操作系统(BS)将相应函数调用(Π)的结果发送到所述应用程序(A),其特征在于,所述应用程序(A)对于篡改而检查相应函数调用的結果,以便检测攻击。
2.如权利要求I所述的方法,其特征在于,在便携式数据载体(CC)上执行所述方法,所述便携式数据载体(CC)特别地是芯片卡或安全模块。
3.如权利要求I或2所述的方法,其特征在干,为了检查相应函数调用(Π)的結果,由所述应用程序(A)调用所述操作系统(BS)的另ー个函数。
4.如权利要求3所述的方法,其特征在干,由所述应用程序(A)对所述操作系统(BS)的相应函数的调用经由第一接ロ(STl)进行,并且由所述应用程序(A)对所述另ー个函数的调用经由第二接ロ(ST2)进行,所述第二接ロ(ST2)特别地是专有接ロ。
5.如在前权利要求中的任意一项所述的方法,其特征在干,执行对不同函数调用的相应结果的集中统ー的检查。
6.如权利要求5所述的方法,其特征在干,进行对上ー个函数调用的检查。
7.如在前权利要求中的任意一项所述的方法,其特征在干,为了检查相应函数调用的結果,由所述操作系统(BS)确定并发送到所述应用程序(A)的结果被发送到所述操作系统(BS)并由所述操作系统(BS)验证。
8.如权利要求2至7中的任意一项所述的方法,其特征在于,依赖于所述检查的結果,由所述应用程序(A)控制所述便携式数据载体(CC)的另外的行为。
9.如权利要求8所述的方法,其特征在于,对所述便携式数据载体(CC)的另外的行为的控制包括时间延迟和/或关闭。
10.如在前权利要求中的任意一项所述的方法,其特征在于,使用Java小应用程序作为应用程序,并且使用Java虚拟机作为操作系统。
11.如在前权利要求中的任意一项所述的方法,其特征在干,为了检查相应函数调用的结果,參数被发送到所述操作系统(BS)并由所述操作系统(BS)验证,从而,所述參数识别所述函数调用。
12.一种便携式数据载体(CC),所述便携式数据载体(CC)被配置为执行根据在前权利要求中的任意一项所述的方法,所述便携式数据载体(CC)特别地是芯片卡、安全模块或USB令牌。
13.一种便携式数据载体(CC),所述便携式数据载体(CC)具有操作系统(BS)和第一接ロ(ST1),所述第一接ロ(STl)使应用程序(A)能够调用所述操作系统(BS)的函数,从而,所述操作系统(BS)被配置为将相应函数调用(Π )的结果发送到所述应用程序(A),所述应用程序(A)在所述数据载体上可执行、并且包括可执行的本地或可解释的代码,所述便携式数据载体(CC)特别地是芯片卡、安全模块或USB令牌,其特征在于,所述操作系统使第二接ロ(ST2)对于所述应用程序可用,所述应用程序能够经由所述第二接ロ(ST2)将检测的攻击报告到所述操作系统。
全文摘要
本方面描述了一种用于执行应用程序(A)的方法,所述应用程序(A)包括可执行的本地或可解释的代码并调用操作系统(BS)的函数,其中所述操作系统(BS)将相应函数调用(f1)的结果发送到所述应用程序(A)。根据本发明的所述方法的特征在于以下事实所述应用程序(A)关于篡改而检查相应函数调用的结果,以便检测攻击。
文档编号G06F21/00GK102822836SQ201180016533
公开日2012年12月12日 申请日期2011年2月1日 优先权日2010年2月2日
发明者M.乔尔林, D.西尔默, L.霍尔特曼, J.特雷格, I.弗拉迪 申请人:德国捷德有限公司