发布时间:2010-2-12 11:08
分类名称:Private
不管csp还是p11创建的公钥,私钥,证书对象,如果有对应关系,它们之间使用相同的CKA_ID,以此说明他们绑定到一起,这已经成为一个事实上的标 准。
在1k里,container没有对应的文件单独存储。
因此,1k只支持单证。
因为1k是存储卡,所以key和p11对象二者合一,天生对应。
因为2k有密码芯片,key是密码芯片负责管理的,与p11对象分开存放,所以它们之间必须要有对应关系。所以在2k的全系列卡上,文件系统里ID为1的 文件有特殊作用。这个文件通过写一个keyid和p11对象起始文件的fid的表,记录了keyid与对象的对应关系。
FT1/FT10:
ey index | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|---|---|
key ID | 0×84 | 0×85 | 0×86 | 0×87 | 0×88 | 0×89 | 0x8A | 0x8B | 0x8C |
file ID | 0 | x | 0 | x | x | x | x | 0 | 0 |
FT2:
key index | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|---|---|
key ID | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
file ID | 0 | x | 0 | x | x | x | x | 0 | 0 |
2k的pkcs#11中没有单独的属性存储Container Name,而是在CSP中用CKD_ID属性存储Container Name。
NG和Shuttle里Container单独存储为一个文件,Container文件属性为3。 因为其他对象没有记录container名字,而只记录container的FID,所以读取时,container先于其他对象读取,写入时先于其它对 象写入,否则无法设置对象的CKA_CONTAINER_NAME属性。 在NG里,container有对应的文件。文件内容是:
字段长 | 1 | 1 | 名字长度 | 1 | 1 |
---|---|---|---|---|---|
字段名 | (名字长度+1)高字节 | (名字长度+1)低字节 | 名字 | \0 | 引 用计数 |
秘钥和证书对象里有一个属性CKA_CONTAINER_NAME,记录了它所在container的名字。(实际往卡上存储时,没有在此字段里存储字符 串,只存储了一个container文件的file ID)
当使用CSP时,这时container先创建出来了,容器内的秘钥和证书的CKA_ID为:
所以NG支持双证.
类似于2k,NG里的每一个卡也记录了kid与p11对象的关系:
key index | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|---|---|
key ID | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
file ID | 0 | x | 0 | x | x | x | x | 0 | 0 |
但是,虽然卡上存储的是以上内容,tsp获取keyid时动态的把index+1作为keyID,所以与FT2的相同。
key index | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|---|---|
key ID | 0×84 | 0×85 | 0×86 | 0×87 | 0×88 | 0×89 | 0x8A | 0x8B | 0x8C |
file ID | 0 | x | 0 | x | x | x | x | 0 | 0 |
key index | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|---|---|
key ID | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
file ID | 0 | x | 0 | x | x | x | x | 0 | 0 |
公钥存储时比1k中间件多出一个CKA_CONTAINER_NAME属性。
Shuttle里,p11对象扩展了一个属性,记录了p11对象的对应keyID,所以没有keyid文件. 分配时以这种策略分配: