关于JavaCard安全异常

 

一、 原理

1.引入

Package

    Lib package

    Applet package

 

为安全起见,各个applet package不能互相访问。

 

Package就像一道墙将相关的applet隔离开来,我们为每个applet package指定一个ID,称为contextIDJCRE在任何一个时刻必然处于某个contextID之下;实际上每个object都有一个属性owner表明该object是谁创建出来的,是从属于哪个applet package的。

只要contextID == owner,表明访问活动局限于一个package内,不会有任何问题。

 

特权contextID0x00

JCRE context,当运行时处于该context下时,可以访问任何object

 

2.原则

基本原则:

1JCRE context

2contextID == owner

 

3.问题

当不同包之间的applet需要通讯时:

机制:context切换

时机:函数调用

具体:AA.BB(),当AA是下列2object时:

1JCRE entry(JCRE和普通context之间通讯)

2Shareable interface(两个普通context之间通讯)

AA本身存在问题,违背上述两条基本原则。

例外:Global Array(全绿灯)

 

4.原则修正

终极原则:

1JCRE context

2contextID == owner

3JCRE entry object,shareable interface objectAA

4Global Array

注:第三条原则受限于函数调用:若第一、第二条原则都违背,若访问AA的方法是允许的,但是若直接访问AA的数据域,会报安全异常。

二、实施

编译、convert的时候是无法实施的,因为其实我们可以认为Java语言是一种解释性语言。对访问可否的check是在执行时实施的,具体而言就是执行某些bytecode或者某些native方法时实施的。

1. bytecode

An object is accessed when one of the following Java programming language

  bytecodes is executed using the objects reference:

  getfield, putfield, invokevirtual, invokeinterface, athrow,

  <T>aload, <T>astore, arraylength, checkcast, instanceof

  <T> refers to the various types of array bytecodes, such as baload, sastore, etc

  

注:(1putfieldastore 这两条bytecode会对一个object的某个域或是一个array的某个域赋值,注意赋值操作的右值不能是temp型的JCRE entry object

 

    2invokevirtual, invokeinterface 若函数调用时有引用型参数时,会做安全检查。

 

    3checkcast 若函数的返回值是引用型数据,会做安全检查。

 

    4)对于array,其具有特殊性,注意dTR问题。

  

2. native method 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值