|
基于NGB标准接口的智能卡CA应用开发
基于NGB标准接口的智能卡CA应用开发是指对于传统的采用智能卡的CA,按照NGB下载CA的Java接口规范将现有的机顶盒CA库或者软件开发成通用的跨平台的APK应用,目的是使得传统封闭的智能卡CA系统向下载CA靠拢,实现终端的平台化和市场化。智能卡CA应用开发的流程和步骤和下载CA应用的开发类似,可参考上一篇帖子《基于NGB标准接口的下载CA应用开发》,这儿主要讲一下二者的区别,如果有错误之处或者考虑不周的地方,欢迎大家拍砖!
传统智能卡CA应用开发同下载CA应用开发的最大区别是智能卡通讯部分,包括智能卡的复位、初始化、CA信息的获取以及ECM、EMM数据的解密处理以及机卡配对功能等,DTVOS在NGB标准接口的基础上扩展了智能卡设备的接口,通过设备接口结合各CA的具体通讯协议,比如采用什么样的协议T0、T1、T14?各指令的格式是什么,如何打包,收到指令后智能卡多长时间回应,回应的格式是什么,要不要校验,要不要解密,如何解析等,就可以在CA应用中完成传统CA库中同智能卡通讯部分的功能了。
另外传统智能卡CA应用开发同下载CA应用开发的区别在CW的设置上,由于下载CA采用了层级密钥机制,所以在设置CW时候设置的是加密的CW,同时又设置了各加密的层级密钥,而目前的智能卡CA由于不具备这个机制所以设置时有所区别,结合标准中提供的设置CW的接口:loadCW,
其接口原型为:
public void loadCW(int VendorID, CWKey cwKey, Key[] levelKeys, int schemeId) throws CADriverException;
本方法用于通知终端软件平台向解扰器装入控制字,并向终端安全芯片装入所需密钥。
其中@param cwKey 控制字,如果控制字是明文,levelKeys参数被忽略,如果cwKey为null,,即CA应用没有提供有效的控制字。
@param levelKeys 用于置入终端安全芯片的多级密钥.密钥数组的索引等于终端安全芯片中的绝对位置,在数组中特定元素值为Null表明终端安全芯片中相应位置不应装入密钥.
@param schemeId 本schemeId用于指定终端安全芯片的加密算法(例如,AES,TDES)
@ChipController接口中定义了方式(scheme)值的列表。如果控制器只支持一种方式,则该值被忽略。
如果不考虑高级安全的环境,智能卡解出CW后设置的CW将是提到的控制字是明文的情况,参考CWKey的定义。
public class CWKey extends Key
{
public static final int PARITY_EVEN = 0;
public static final int PARITY_ODD = 1;
/*
* @param value 密钥的值
* @param真值标识密钥是加密的,假值表示密钥未加密.
* @param 奇偶值,表明控制字的奇偶性.
*/
public CWKey(byte[] value, boolean encrypted, int parity)
/**
* 本方法返回控制字的奇偶性.
* @return 控制字的奇偶性.
*/
public int getParity()
}
假定偶奇CW数组分别是:evencw、oddcw,对应CWKey是ECW[0]、ECW[1],那么
ECW[0] = new CWKey(evencw, false, 0);
ECW[1] = new CWKey(oddcw, false, 1);
设置CW的代码为:
try {
descramblerContext.loadCW(0x1234, ECW [0], null, ChipController.SCHEME_3DES);
} catch (CADriverException ex) {
}
try {
descramblerContext.loadCW(0x1234, ECW [1], null, ChipController.SCHEME_3DES);
} catch (CADriverException ex) {
}
完成这两点结合下载CA应用的开发实例,开发一个通用的智能卡CA的应用难度就不大了。
|
|