CKM_SECRET_SHARE_WITH_ATTRIBUTES
Supported Operations
Encrypt and Decrypt | No |
Sign and Verify | No |
SignRecover and VerifyRecover | No |
Digest | No |
Generate Key/Key-Pair | No |
Wrap and Unwrap | No |
Derive | Yes |
Available in FIPS Mode | Yes |
Restrictions in FIPS Mode | None |
Key Size Range and Parameters
Minimum | 0 |
FIPS Minimum | 0 |
Maximum | None |
Parameter | None |
Description
The Secret Share Mechanism denoted CKM_SECRET_SHARE_WITH_ATTRIBUTES
is a derive mechanism to create M shares of a key such that N shares are required to recover the secret, where N is less than or equal to M.
The mechanism creates a secret value by combining all the attributes of the base key and then shares that secret into M shares.
The algorithm used is according to A. Shamir - How to Share a Secret, Communications of the ACM vol. 22, no. 11, November 1979, pp. 612-613
It has a parameter, a CK_SECRET_SHARE_PARAMS
, which specifies the number of shares M and the recovery threshold N. See below for the definition.
The mechanism will create M data objects and return the object handle of one of them. It is expected that the data objects would be copied to a smart card token for storage.
The template supplied is used to specify the CKA_LABEL
attribute of each new data object. If the CKA_LABEL
attribute is not provided in the template then a CKR_TEMPLATE_INCOMPLETE
error is returned.
The mechanism contributes the CKA_VALUE
attribute of each data object. Any attempt to specify a CKA_VALUE
attribute in the template will cause the mechanism to return the error: CKR_TEMPLATE_INCONSISTENT
.
The default value of the CKA_TOKEN
, CKA_PRIVATE
attribute of the new objects is false. The new data objects will have a CKA_SENSITIVE
attribute. If the CKA_SENSITIVE
attribute of the base key is true then the data objects is sensitive. If the base key is not sensitive then the data objects take the value of CKA_SENSITIVE
from the template or it is defaulted to false.
Usage Note
To avoid shares getting mixed up between different uses of this mechanism the developer should ensure that there are no data objects with the same label already on the token before attempting to use this mechanism. If objects are found then these objects should be deleted or a different label chosen.
Security Note
The key to be exported with this mechanism requires the CKA_DERIVE attribute to be true. This has the effect of enabling other key derive mechanisms to be performed with the key. If this is not desired then the CKA_MECHANISM_LIST
attribute may be used with the key to restrict its derive operations to this mechanism.
For further information about secure key backup and restoration see Secure Key Backup and Restoration.
Secret Share Mechanism Parameter
CK_SECRET_SHARE_PARAMS
is used to specify the number of shares M and the recovery threshold N for secret sharing mechanisms. It is defined as follows:
typedef struct CK_SECRET_SHARE_PARAMS {
CK_ULONG n;
CK_ULONG m;} CK_SECRET_SHARE_PARAMS;
The fields of the structure have the following meanings:
>N=Number of shares required to recover the secret. Must be at least 2 and not greater than the number of shares
>M=Total number of shares. Must be at least 2 and not greater than 64.
CK_SECRET_SHARE_PARAMS_PTR
is a pointer to a CK_SECRET_SHARE_PARAMS
.
Return to ProtectToolkit-C Mechanisms