1,便携式密钥容器实体概述和关系
KeyContainer entity
表示携带
多个KeyPackage实体的容器。有效的容器必须
至少携带一个KeyPackage实体。
KeyPackage entity
表示至多一个密钥
及其相关供应端点或当前使用端点的包,
例如物理或虚拟设备以及特定的CryptoModule。
DeviceInfo entity
表示有关设备的信息
和唯一识别设备的标准。
CryptoModuleInfo entity
表示关于该信息的信息
CryptoModule密钥所在的位置或其
设置的位置。
Key entity
代表运输或供应的关键。
Data entity
表示与密钥相关的元数据列表,
其中元素名称是元数据的名称及其
相关值是加密的(例如,<数据>
元素<秘密>)或明文(用于例如,<Data>元素
<Counter>)的形式。
2, <KeyContainer>元素:基础
<?xml version="1.0" encoding="UTF-8"?>
<KeyContainer Version="1.0"
Id="exampleID1"
xmlns="urn:ietf:params:xml:ns:keyprov:pskc">
<KeyPackage>
<Key Id="12345678"
Algorithm="urn:ietf:params:xml:ns:keyprov:pskc:hotp">
<Issuer>Issuer-A</Issuer>
<Data>
<Secret>
<PlainValue>MTIzNA==
</PlainValue>
</Secret>
</Data>
</Key>
</KeyPackage>
</KeyContainer>
在<KeyContainer>元素已经属性以下
语义:
'Version':'Version'属性用于标识
PSKC模式版本的版本。该规范定义
了PSKC模式的初始版本(“1.0”)。这个属性必须
包含在内。
'ID'
容器。因此,
在多个容器嵌入到较大的XML
文档中的情况下,它有助于识别特定的密钥容器。
3, <Key>:嵌入密钥材料和密钥相关信息
‘Id’
在
双方之间的密钥供应交换环境中携带对称密钥的唯一标识符。这意味着如果PSKC用于
发送方和接收方之间的多次交互,使用
引用相同密钥的不同容器,<Key>的'Id'属性必须使用
相同的值(例如,在初始配置之后,如果系统
想要为了更新其他系统中的关键元数据值,
元数据将被
更新的<Key>的'Id'属性的值必须与原始'Id'相同,
供应)。该标识符被定义为一个
字母数字字符串
'Algorithm':
该属性包含
PSKC算法配置文件的唯一标识符。
<Key>元素有许多可选的子元素。
Issuer
该元素表示发布
密钥的一方的名称。例如,一家银行“Foobar Bank,Inc.”
向其零售银行用户发放硬件令牌可能会将此元素设置为
'Foobar Bank,Inc.'。
FriendlyName
为便于
参考的密钥的人类可读名称。该元素仅用于信息目的。这个
元素是一个依赖于语言的字符串; 因此,它应该有一个
属性xml:lang =“xx”
AlgorithmParameters
该元素携带
影响算法计算结果的参数,例如
OTP和CR算法中的响应截断和格式。
4, <Data>:这个元素携带关于密钥的相关数据以下子元素的<data>元素定义
Secret
该元素携带所述密钥本身中a的值
的二进制表示。
<Counter>:该元素包含
基于事件的OTP算法的事件计数器。
<Time>:该元素包含基于时间的OTP
算法的时间。(如果使用时间间隔,则此元素包含
从特定起始点传递的时间间隔数
,通常取决于算法)。
<TimeInterval>:该元素
以秒为单位携带基于时间的OTP算法的时间间隔值(典型值为
30,表示时间间隔为30秒)。
<TimeDrift>:该元素包含
基于时间的OTP算法的器件时钟漂移值。
指示
验证服务器
在上次成功验证后已建立设备时钟的时间间隔数的整数值(正或负漂移)。因此,
例如,如果最后一次成功的身份验证
从特定开始日期
确定了8个时间间隔的设备时间值,但验证服务器以9个时间间隔确定了时间值,
则服务器应该将该记录记录为-1。
注: 上面列出的所有元素(以及未来定义的元素)
服从一个简单的结构,因为它们必须支持子元素
以明文或加密格式传递数据值:
明文:<PlainValue>元素携带一个明文值
,例如输入为xs:integer。
加密:<EncryptedValue>元素携带加密
值。
ValueMAC:
在加密算法不支持完整性
检查的情况下,<ValueMAC>元素用
从加密值生成的消息认证码(MAC)填充。图2所示的例子说明了
具有两个子元素的<Data>元素的用法,即<Secret>和
<计数器>。这两个元素都在
<PlainValue>子元素中携带纯文本值。
5,补充信息
<?xml version="1.0" encoding="UTF-8"?>
<KeyContainer Version="1.0"
Id="exampleID1"
xmlns="urn:ietf:params:xml:ns:keyprov:pskc">
<KeyPackage>
<DeviceInfo>
<Manufacturer>Manufacturer</Manufacturer>
<SerialNo>987654321</SerialNo>
<UserId>DC=example-bank,DC=net</UserId>
</DeviceInfo>
<CryptoModuleInfo>
<Id>CM_ID_001</Id>
</CryptoModuleInfo>
<Key Id="12345678"
Algorithm="urn:ietf:params:xml:ns:keyprov:pskc:hotp">
<Issuer>Issuer</Issuer>
<AlgorithmParameters>
<ResponseFormat Length="8" Encoding="DECIMAL"/>
</AlgorithmParameters>
<Data>
<Secret>
<PlainValue>MTIzNDU2Nzg5MDEyMzQ1Njc4OTA=
</PlainValue>
</Secret>
<Counter>
<PlainValue>0</PlainValue>
</Counter>
</Data>
<UserId>UID=jsmith,DC=example-bank,DC=net</UserId>
</Key>
</KeyPackage>
</KeyContainer>
<DeviceInfo>元素:唯一设备标识
<DeviceInfo>元素唯一标识
<KeyPackage>设置到的设备。由于设备可能具有不同的
形式因素,例如硬件令牌,智能卡,
移动电话中的软令牌或PC,因此此元素允许使用不同的子元素
组合。组合时,子
元素的值必须唯一标识设备。例如,对于
硬件令牌,<SerialNo>和<Manufacturer>
元素的组合唯一地标识一个设备,但
单独使用<SerialNo>元素是不够的,因为两个不同的令牌制造商可能
发布具有相同序列号的设备(类似于颁发者
证书的可分辨名称和序列号)
<DeviceInfo>元素具有以下子元素:
<Manufacturer>:此元素指 设备的制造商。
<SerialNo>:该元素包含设备的序列号。
<Model>:该元素描述设备的模型(例如,一
键HOTP-token-V1)。
<IssueNo>:这个元素包含问题编号,以防有
设备具有相同的序列号,以便可以
通过不同的问题编号区分它们。
<DeviceBinding>:该元素允许供应服务器确保
密钥将被加载到设备中,
关键配置请求被批准。
使用设备标识符(例如,
用于电话的国际移动设备标识(IMEI))或者用于一
类标识符的标识符(例如,
由可信平台模块保护密钥的标识符)来将设备绑定到请求TPM)。
<StartDate>和<ExpiryDate>:这两个元素表示设备的开始
日期和结束日期(例如支付卡上的开始日期和结束日期,用于
当问题号码未打印在卡片上时使用)。日期必须
以“规范表示法”中的dateTime值表示
[ W3C.REC-xmlschema-2-20041028 ]。实现不应该依赖
时间分辨率比毫秒更精细,并且不能产生
指定闰秒的时间瞬间。
只有在当前日期在
<StartDate>之后和<ExpiryDate>之前,才能使用设备上的密钥。请注意,
与日期相关的密钥使用强制只能
在验证服务器上进行,因为某些设备(如智能卡)
没有内部时钟。因此系统不应该依靠
设备来执行关键的使用日期限制。
根据设备类型,
必须包含<DeviceInfo>元素的某些子元素以唯一标识一个元素
设备。
6, <CryptoModuleInfo>元素:CryptoModule标识
<CryptoModuleInfo>元素标识
对称密钥已经或已经供应到的加密模块。这允许
识别设备可能包含
多于一个加密模块(例如,托管TPM和连接的
令牌的PC)的特定情况。
<CryptoModuleInfo>元素必须
包含一个子元素:
<Id>:该元素携带CryptoModule的唯一标识符,
并且是特定于实现的。因此,它有助于识别
密钥正在或已
供应的特定CryptoModule 。
7, <UserId>元素:用户标识
<UserId>元素用于识别用户名称,如
例如,UID = jsmith,DC = example,DC = net。
虽然定义了用户标识符的语法,但没有
与此元素关联的语义,即没有检查
强制只有特定用户可以使用此键。因此,此
元素仅用于提供信息。
这个元素可能出现在两个地方,即作为
<Key>元素的一个子元素,它表示
与其关联的用户,以及作为<DeviceInfo>元素的子元素,
它表示用户设备关联的人。
8,<AlgorithmParameters>元素:OTP的补充信息和CR算法
<AlgorithmParameters>元素是<Key>
元素的子元素,本文档定义了三个子元素:<Suite>,
<ChallengeFormat>和<ResponseFormat>。
<Suite>:
可选的<Suite>元素定义了
所用算法的附加特征,这是算法特定的。例如,在
基于HMAC的(
散列MAC)OTP算法中,它可以指定所使用的散列算法的强度(SHA1,SHA256等)。
有关每个算法配置文件的值的确切语义
<ChallengeFormat>:
<ChallengeFormat>元素定义
CR使用场景中挑战的特征,从而
定义以下属性:
'Encoding':必须包含此属性,定义
设备接受的质询的编码,必须是
以下值之一:
DECIMAL:只有数字
HEXADECIMAL:十六进制响应
ALPHANUMERIC:所有字母和数字(区分大小写)
BASE64:Base-64编码,
BINARY:二进制数据
'CheckDigit': 该属性指示设备是否需要
检查挑战中包含的
[ ISOIEC7812 ]中定义的附加Luhn校验码。这只有
在'Encoding'属性设置为'DECIMAL' 时才有效。值为TRUE
表示设备将
在提供的质询中检查附加的Luhn校验码。值为FALSE表示
设备不会检查
质询中附加的Luhn校验码
'Min': 该属性定义了
CR模式下设备接受挑战的最小尺寸,并且必须包含在内。如果
“编码”属性设置为“DECIMAL”,“HEXADECIMAL”或
“ALPHANUMERIC”,该值表示最小
位数/字符数。如果“编码”属性设置为
“BASE64”或“BINARY”,则此值指示
未编码值的最小字节数。
'Max': 这个属性定义了
CR模式下设备接受挑战的最大尺寸,并且必须包含在内。如果
“编码”属性设置为“DECIMAL”,“HEXADECIMAL”或
“ALPHANUMERIC”,则此值指示最大
位数/字符数。如果'编码'
'BASE64'或'BINARY',该值表示
未编码值的最大字节数。
<ResponseFormat>:
<ResponseFormat>元素定义
了计算结果的特征,并定义了OTP的格式或对
挑战的响应。对于密钥为PIN
值的情况,此元素包含PIN本身的格式(例如,
DECIMAL,4位PIN码的长度为4)。
定义了以下属性:
'Encoding':该属性定义了
设备生成的响应的编码,它必须包含在内,并且必须是
以下值之一:DECIMAL,HEXADECIMAL,ALPHANUMERIC,
BASE64或BINARY。
'CheckDigit':该属性指示设备是否需要
在响应中
追加一个Luhn校验位,如[ ISOIEC7812 ]中定义的。这只有在'Encoding'属性
设置为'DECIMAL' 时才有效。如果该值为TRUE,则设备
将在响应中附加Luhn校验码。如果该值为
FALSE,则设备不会将Luhn检查数字附加到
响应。
‘length’:这个属性定义
了设备产生的响应的长度,并且必须包含在内。如果
'编码'属性设置为'DECIMAL','
ALPHANUMERIC,这个值表示数字/
字符的数量。如果“编码”属性设置为“BASE64”或
“BINARY”,则此值指示
未编码值的字节数。
9,关键政策
PSKC中<Policy>元素的功能,该功能允许将密钥用法和密钥PIN保护策略
附加到特定密钥及其相关元数据。此
元素是<Key>元素的子元素。
<?xml version="1.0"encoding="UTF-8"?>
<KeyContainer
Version="1.0" Id="exampleID1"
xmlns="urn:ietf:params:xml:ns:keyprov:pskc">
<KeyPackage>
<DeviceInfo>
<Manufacturer>Manufacturer</Manufacturer>
<SerialNo>987654321</SerialNo>
</DeviceInfo>
<CryptoModuleInfo>
<Id>CM_ID_001</Id>
</CryptoModuleInfo>
<Key Id="12345678"
Algorithm="urn:ietf:params:xml:ns:keyprov:pskc:hotp">
<Issuer>Issuer</Issuer>
<AlgorithmParameters>
<ResponseFormatLength="8" Encoding="DECIMAL"/>
</AlgorithmParameters>
<Data>
<Secret>
<PlainValue>MTIzNDU2Nzg5MDEyMzQ1Njc4OTA=
</PlainValue>
</Secret>
<Counter>
<PlainValue>0</PlainValue>
</Counter>
</Data>
<Policy>
<PINPolicyMinLength="4" MaxLength="4"
PINKeyId="123456781" PINEncoding="DECIMAL"
PINUsageMode="Local"/>
<KeyUsage>OTP</KeyUsage>
</Policy>
</Key>
</KeyPackage>
<KeyPackage>
<DeviceInfo>
<Manufacturer>Manufacturer</Manufacturer>
<SerialNo>987654321</SerialNo>
</DeviceInfo>
<CryptoModuleInfo>
<Id>CM_ID_001</Id>
</CryptoModuleInfo>
<Key Id="123456781"
Algorithm="urn:ietf:params:xml:ns:keyprov:pskc:pin">
<Issuer>Issuer</Issuer>
<AlgorithmParameters>
<ResponseFormatLength="4" Encoding="DECIMAL"/>
</AlgorithmParameters>
<Data>
<Secret>
<PlainValue>MTIzNA==</PlainValue>
</Secret>
</Data>
</Key>
</KeyPackage>
</KeyContainer>
以下<Policy>子元素:
<StartDate>和<ExpiryDate>:这两个元素表示
密钥的有效期。务必确保密钥仅
在开始日期和结束日期(含)之间使用。日期必须
以“规范表示法”中的dateTime值表示
[ W3C.REC-xmlschema-2-20041028 ]。实现不应该依赖
比毫秒更精细的时间分辨率,也不能产生
指定闰秒的时间瞬间。当该元素
不存在时,将当前时间假定为开始时间。
<NumberOfTransactions>:此元素中的值表示
应用程序在收到
PSKC文档后可以使用的最大密钥次数。当这个
元素被省略时,关于
可以使用密钥的次数没有限制。
<KeyUsage>:<KeyUsage>元素
对密钥的预期用法施加约束。PSKC文档的收件人必须强制
使用密钥。目前,
本文档记录了以下令牌:
OTP:密钥必须仅用于OTP生成。
CR:钥匙只能用于挑战/回应目的。
Encrypt:密钥必须仅用于数据加密目的。
Integrity:密钥必须仅用于生成
用于数据完整性或认证目的的键控消息摘要。
Verify:密钥必须仅用于验证
用于数据完整性或身份验证目的的键控消息摘要(这是
“完整性”的相反主要用法)。
Unlock:
在用户通过
多次输入错误的PIN码锁定设备的情况下(对于具有PIN输入
能力的设备),密钥只能用于反向质询/ 响应。
Decrypt:密钥必须仅用于数据解密目的。
KeyWrap:密钥必须仅用于密钥包装目的。
Unwrap:密钥必须仅用于密钥解包目的。
Derive:密钥必须仅与密钥导出函数
一起使用以导出新密钥(另请参见[ NIST800-57 ]的第8.2.4节)。
Generate:密钥必须仅用于基于
随机数和密钥的先前值生成新密钥(另请参见
[ NIST800-57 ]的第8.1.5.2.1节)。
元素也可以被重复以允许
表达几个关键用法。如果此元素不存在,则不使用密钥使用限制
假定,即密钥可以用于每个用途。