RFC6030协议笔记(简)

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, <Da​​ta>:这个元素携带关于密钥的相关数据以下子元素的<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节)。
 
      元素也可以被重复以允许
      表达几个关键用法。如果此元素不存在,则不使用密钥使用限制
      假定,即密钥可以用于每个用途。
 

猜你喜欢

转载自blog.csdn.net/java001122/article/details/80203303
rfc
今日推荐