ePass1000, ePass2000, ePassNG, Shuttle对Container处理的不同及延续

发布时间:2010-2-12 11:08
分类名称:Private


不管csp还是p11创建的公钥,私钥,证书对象,如果有对应关系,它们之间使用相同的CKA_ID,以此说明他们绑定到一起,这已经成为一个事实上的标 准。

1k

在1k里,container没有对应的文件单独存储。

因此,1k只支持单证。

因为1k是存储卡,所以key和p11对象二者合一,天生对应。

2k

因为2k有密码芯片,key是密码芯片负责管理的,与p11对象分开存放,所以它们之间必须要有对应关系。所以在2k的全系列卡上,文件系统里ID为1的 文件有特殊作用。这个文件通过写一个keyid和p11对象起始文件的fid的表,记录了keyid与对象的对应关系。

FT1/FT10:

ey index012345678
key ID0×840×850×860×870×880×890x8A0x8B0x8C
file ID0x0xxxx00

FT2:

key index012345678
key ID123456789
file ID0x0xxxx00

2k的pkcs#11中没有单独的属性存储Container Name,而是在CSP中用CKD_ID属性存储Container Name。

NG

NG和Shuttle里Container单独存储为一个文件,Container文件属性为3。 因为其他对象没有记录container名字,而只记录container的FID,所以读取时,container先于其他对象读取,写入时先于其它对 象写入,否则无法设置对象的CKA_CONTAINER_NAME属性。 在NG里,container有对应的文件。文件内容是:

字段长11名字长度11
字段名(名字长度+1)高字节(名字长度+1)低字节名字\0引 用计数

秘钥和证书对象里有一个属性CKA_CONTAINER_NAME,记录了它所在container的名字。(实际往卡上存储时,没有在此字段里存储字符 串,只存储了一个container文件的file ID)

当使用CSP时,这时container先创建出来了,容器内的秘钥和证书的CKA_ID为:

所以NG支持双证.

类似于2k,NG里的每一个卡也记录了kid与p11对象的关系:

key index012345678
key ID000000000
file ID0x0xxxx00

但是,虽然卡上存储的是以上内容,tsp获取keyid时动态的把index+1作为keyID,所以与FT2的相同。

key index012345678
key ID0×840×850×860×870×880×890x8A0x8B0x8C
file ID0x0xxxx00
key index012345678
key ID123456789
file ID0x0xxxx00

公钥存储时比1k中间件多出一个CKA_CONTAINER_NAME属性。

Shuttle

Shuttle里,p11对象扩展了一个属性,记录了p11对象的对应keyID,所以没有keyid文件. 分配时以这种策略分配: