pkcs11interopを使用して3DESキーを作成し、作成するキー値を指定することができるかどうか、キー値。基本的に私は秘密鍵を別のデバイスにエクスポートする必要があります。pkcs11Interopで3DESキーを作成し、キー値を出力するか、または作成するためにproivdeキー値を
私はCKA_VALUE属性を使用し、キーをbyte []配列として渡しましたが、成功しませんでした。
このようなことは可能ですか?誰かが私を助けてくれますか?
編集:私はこのコードは、それが使用して値です3DESキーを作成して取得することであるとしようとしているものをそう
public ObjectHandle generate3DESKey(string keyLabel)
{
ObjectHandle key = null;
// Generate symetric key
// Prepare attribute template of new key
List<ObjectAttribute> objectAttributes = new List<ObjectAttribute>();
objectAttributes.Add(new ObjectAttribute(CKA.CKA_TOKEN, true));
objectAttributes.Add(new ObjectAttribute(CKA.CKA_CLASS, CKO.CKO_SECRET_KEY));
objectAttributes.Add(new ObjectAttribute(CKA.CKA_KEY_TYPE, CKK.CKK_DES3));
objectAttributes.Add(new ObjectAttribute(CKA.CKA_ENCRYPT, true));
objectAttributes.Add(new ObjectAttribute(CKA.CKA_EXTRACTABLE, true));
objectAttributes.Add(new ObjectAttribute(CKA.CKA_LABEL, keyLabel));
// Specify key generation mechanism
Mechanism mechanism = new Mechanism(CKM.CKM_DES3_KEY_GEN);
// Generate key
key = _session.GenerateKey(mechanism, objectAttributes);
List<CKA> retrieveTemplate = new List<CKA>();
retrieveTemplate.Add(CKA.CKA_VALUE);
var test = _session.GetAttributeValue(key, retrieveTemplate);
var testval = test[0].GetValueAsString();
return key;
}
:ここ
は、私がこれまで運を持っているコードです。 GetAttributeValueは以下に示すとおりです。私はGetValueAsByteArrayとGetValueAsStringを試しましたが、すべて成功しませんでした。私が気づいたことは、作成時に抽出可能な属性を設定しても、取得された属性のcannotreadプロパティがtrueに設定されていることです。3DESキーの生成にキー値を渡すことも考えましたが、CKA.CKA_VALUEで使用されるキー値は長さ24のバイト配列にする必要があります。 1616161616161616 1010101010101010
私は私の答えに作業コードサンプルを追加しました。ライブラリ/デバイスで動作しない場合は、ライブラリ/デバイスベンダに問い合わせる必要があると思います。 BTW DES3キーは常に24バイトです。 16バイトしかない場合は、DES2キーを作成する必要があります。 – jariq