ARM-software / psa-api

Documentation source and development of the PSA Certified API
https://arm-software.github.io/psa-api/
Other
59 stars 28 forks source link

ShangMi signature and asymmetric encryption algorithms (SM9) #108

Open athoelke opened 1 year ago

athoelke commented 1 year ago

The Crypto API already has definitions for the SM3 hash algorithm and a SM4 block cipher key type. #22 proposes the addition of support for SM2, a set of elliptic curve algorithms for signature, encryption and key establishment.

CSTC also defines the SM9 suite of identity-based cryptographic (IBC) algorithms for digital signature, key encapsulation, and asymmetric encryption.

IBC is different to other forms of asymmetric algorithms, as it makes a trusted third party an explicit role in the functioning of the algorithm. In contrast, with algorithms such as ECDSA, or SM2-DSA, the association of the public key with the other party's identity involves trust relationships that are outside the scope of the algorithm definition.

In IBC, there is a Key Management Service (KMS), or some other trusted authority, that creates an maintains a paired Master Secret Key (MSK) and Master Public Key (MPK). The usual participants, Alice and Bob, make use of the MPK when encrypting data, or verifying signatures; and the other party's plain-text, public identity (e.g. email address) is also used when encrypting data or verifying signatures. To decrypt data, or create signatures, a participant must request from the KMS their personal secret key that is associated with their identity (this can be done ahead of time, or just in time), for use with the MPK. Aside from using slightly different keying material, the Sign, Verify, Encrypt and Decrypt functions used by Alice and Bob are similar to existing asymmetric APIs.

The major difference is the key generation and management:

API requirements/design

I assume that the Crypto API should support the roles of individual participants (Alice and Bob)

Does the Crypto API need to also support the KMS role? It would need to also:

References:

IETF draft: The SM9 Identity-Based Cryptographic Algorithms SM9 summary and security analysis The SM9 Cryptographic Schemes ETSI technical report: Guide to Identity-Based Cryptography

athoelke commented 1 year ago

A critical decision for designing this API is whether we need to support the KMS role, and the key generation and extraction functions.

MarcusJGStreets commented 1 year ago

I think that the KMS role should be separately optional. There would only be one KM Service, per organization - though it could be distributed for reliability.

Most devices will not need it. But if PSA crypto is used by servers, they may need it.