My Project
Overview of ECCSI

ECCSI (Elliptic Curve-Based Certificateless Signatures for Identity-Based Encryption) is specified in RFC 6507 (https://tools.ietf.org/html/rfc6507).

In Identity-Based cryptography, there is a Key Management Service that generates keys based on an identity for a client. The private key (SSK) and public key (PVT) are delivered to the signer and the public key (PVT) only delivered to the verifier on request.

wolfCrypt offers the ability to:

  1. Create KMS keys,
  2. Generate signing key pairs,
  3. Validate signing key pairs,
  4. Sign messages and
  5. Verify messages.

KMS:

  1. Initialize ECCSI Key: wc_InitEccsiKey()
  2. Make and save or load ECCSI Key:
    1. wc_MakeEccsiKey(), wc_ExportEccsiKey(), wc_ExportEccsiPublicKey() or
    2. wc_ImportEccsiKey()
  3. Wait for request:
    1. Receive signing ID from client.
    2. Generate signing key pair from ID: wc_MakeEccsiPair()
    3. Encode result:
      1. For signer, signing key pair: wc_EncodeEccsiPair()
    4. Send KPAK and result
  4. Free ECCSI Key: wc_FreeEccsiKey()

Client, signer:

  1. Initialize ECCSI Key: wc_InitEccsiKey()
  2. (When signing pair not cached) Request KPAK and signing pair from KMS
    1. Send signing ID to KMS.
    2. Receive signing key pair from KMS.
    3. Load KMS Public Key: wc_ImportEccsiPublicKey()
    4. Decode signing key pair: wc_DecodeEccsiPair()
    5. Validate the key pair: wc_ValidateEccsiPair()
  3. (If not done above) Load KMS Public Key: wc_ImportEccsiPublicKey()
  4. (If not cached) Calculate hash of the ID and PVT: wc_HashEccsiId()
  5. For each message:
    1. Set Hash of Identity: wc_SetEccsiHash()
    2. Sign message: wc_SignEccsiHash()
    3. Send hash ID, message and signature to peer.
  6. Free ECCSI Key: wc_FreeEccsiKey()

Client, verifier:

  1. Receive hash ID, message and signature from signer.
  2. Request KPAK (if not cached) and PVT (if not cached) for hash ID from KMS.
  3. Receive KPAK (if not cached) and PVT (if not cached) for hash ID from KMS.
  4. Initialize ECCSI Key: wc_InitEccsiKey()
  5. Load KMS Public Key: wc_ImportEccsiPublicKey()
  6. Decode PVT: wc_DecodeEccsiPvtFromSig()
  7. Calculate hash of the ID and PVT: wc_HashEccsiId()
  8. Set ECCSI key pair: wc_SetEccsiPair()
  9. Verify signature of message: wc_VerifyEccsiHash()
  10. Free ECCSI Key: wc_FreeEccsiKey()