PSKC Introduction: PSKC Library (libpskc) Manual

## PSKC Introduction

The Portable Symmetric Key Container (PSKC) format is used to transport and provision symmetric keys to cryptographic devices or software. The PSKC Library allows you to parse, validate and generate PSKC data. The PSKC Library is written in C, uses LibXML, and is licensed under LGPLv2+. A companion to the library is a command line tool (pskctool) to interactively manipulate PSKC data.

To get a feeling of the PSKC data format we show the shortest possible valid PSKC content.

    1
    2
    3
    4
    <?xml version="1.0"?>
    <KeyContainer xmlns="urn:ietf:params:xml:ns:keyprov:pskc" Version="1.0">
      <KeyPackage/>
    </KeyContainer>

Of course, since the intent with PSKC is to transport cryptographic keys, the example above is of little use since it does not carry any keys. The next example is more realistic, and show PSKC data used to transport a key used for a OATH HOTP implementation. The interesting values are the DeviceInfo values to identify the intended hardware, the Key Id "12345678", and the base64-encoded shared secret "MTIzNA==".

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    <?xml version="1.0" encoding="UTF-8"?>
    <KeyContainer Version="1.0"
    	      xmlns="urn:ietf:params:xml:ns:keyprov:pskc">
      <KeyPackage>
        <DeviceInfo>
          <Manufacturer>Manufacturer</Manufacturer>
          <SerialNo>987654321</SerialNo>
        </DeviceInfo>
        <Key Id="12345678"
             Algorithm="urn:ietf:params:xml:ns:keyprov:pskc:hotp">
          <AlgorithmParameters>
            <ResponseFormat Length="8" Encoding="DECIMAL"/>
          </AlgorithmParameters>
          <Data>
            <Secret>
              <PlainValue>MTIzNDU2Nzg5MDEyMzQ1Njc4OTA=
              </PlainValue>
            </Secret>
            <Counter>
              <PlainValue>0</PlainValue>
            </Counter>
          </Data>
        </Key>
      </KeyPackage>
    </KeyContainer>