OPSystem.setATRHistBytes在GlobalPlatform兼容卡中如何工作?

如何解决OPSystem.setATRHistBytes在GlobalPlatform兼容卡中如何工作?

从GP2.1.1 API文档中引用:

setATRHistBytes
public static boolean setATRHistBytes(byte[] baBuffer,short sOffset,byte bLength)
This method sets the historical bytes of the ATR (Answer To Reset) string. The sequence of bytes will be visible on a subsequent power-up or reset.

Notes:

    This method shall not be invoked from the Applet.install() method.
    
The OPEN locates the entry of the current applet context in the Open Platform Registry and verifies that the application has the "default selected" privilege.
    The OPEN is responsible for updating the length of historical bytes in Format Character T0 of the ATR.

    Parameters:

    baBuffer - the source byte array containing the ATR historical bytes. Must be a global array.
    sOffset - offset of the ATR historical bytes within source byte array.
    bLength - the number of historical bytes.

    Returns:
    true if ATR bytes set,false otherwise.

问题1:GP是否强制默认选择小程序来更改ATR历史字节?

问题2:GP仅更改冷复位ATR吗?还是热重置ATR也改变了?

问题3:如何接收卡的热重置ATR?有什么命令吗?是特定于读者的吗?

解决方法

关于1:我以前从未使用过此命令,但是在阅读时:

OPEN在GlobalPlatform注册表中查找当前applet上下文的条目,并 验证该应用程序具有“默认选定”特权。

我认为任何兼容的实现都必须以这种方式进行处理。是否有理由不相信这一点,或者您问大多数供应商是否忽略了这一点?由于历史部分包含与默认选定应用程序相关的信息(例如,具有MF卡,如何读取EF.DR,默认应用程序的AID,发行者所在的国家/地区,...),因此检查此特权是有意义的。今天在多应用程序智能卡世界中可能不合适。

关于2:由于名称“历史字节”指示ATR的仅此部分被更改。冷和热ATR之间的其他部分(如时钟速度)可能会有所不同。

关于3:查看PC / SC命令SCardConnect。参见SCARD_RESET_CARDSCARD_UNPOWER_CARD

,

问题1:GP是否强制默认选择小程序来更改ATR历史字节?

否,Applet必须具有#5特权(或“ GP v2.2中的卡重置特权,请参阅表11-7”)才能更改它。它是在INSTALL期间设置的,并使其成为Selectable。基本上,在启动时需要默认选择它,否则它不能更改ATR历史字节对于多用途卡,这可能是个问题,尽管您可以说这是ISO 7816-4的局限,而协议而不是Java Card /全球平台。

Global Platform规范v2.2中的2个片段:

将“默认选定”特权重新定义为“卡重置”特权,以修改历史字节。应用程序可以拒绝显式选择,例如因为它不支持当前的卡I / O接口,并允许通过OPEN继续(部分)选择过程。为了提供向后兼容性,如果特权尚未授予其他应用程序,则该特权授予隐式选择。

必须存在特权。如果仅安装应用程序且无法使用同一INSTALL命令选择应用程序,则无法设置卡重置权限。

问题2:GP仅更改冷复位ATR吗?还是热重置ATR也更改了?

通常两者都被更改,并且大多数平台至少会将它们初始化为相同的值。请注意,历史字节已更改,通常会指示卡的类型,但不会指示通信参数(速度,超时值等)

问题3:如何接收卡的热重置ATR?有什么命令吗?是特定于读者的吗?

通常,您只需要执行一次复位即可,而无需关闭电源。当然可以使用标准命令(例如SCardReconnect)来完成此操作,但是我不确定其他工具。通常,您只需要执行一次重置即可,对于冷重启,您只需移除存储卡,读卡器或什至只是电源即可。

通常,您不会期望冷重启或热重启之间有所区别,但是当然可以对两者使用不同的ATR(从有关多个Java Card芯片的专有信息中知道)。如果有足够的特权和专有命令的知识,供应商通常可以设置完整的ATR。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 <select id="xxx"> SELECT di.id, di.name, di.work_type, di.updated... <where> <if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 <property name="dynamic.classpath" value="tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-