|
From: Ronald T. <ron...@ia...> - 2010-11-02 08:08:33
|
Hello,
This is the correct behavior as the AIK is not meant to sign
user-provided data.
Use the "certify key" mechanisms instead.
Ronald
On 10/31/2010 12:05 PM, FADY FADY wrote:
> Hello,
>
> Really Thank U again for your support
>
> I love the 15 steps of the suggested protocol, specially when you make
> some enhancements in the second paper after removing steps 5, 6, and 7.
>
> But when I try to implement step 9 of the protocol neglecting nonce
> and PCR_INFO, I try the code:-
>
> try {
> //connect to
> context**********************************************************************************************
> context = new TcTssContextFactory().newContextObject();
> context.connect();
>
> //********************************************************************************************************************
> //use
> srk***********************************************************************************************************
> TcIRsaKey srk =
> context.createRsaKeyObject(TcTssConstants.TSS_KEY_TSP_SRK);//loadKey
> TcBlobData srkSecret =
> TcBlobData.newByteArray(TcTssConstants.TSS_WELL_KNOWN_SECRET);
> TcIPolicy srkPolicy =
> context.createPolicyObject(TcTssConstants.TSS_POLICY_USAGE);
> srkPolicy.setSecret(TcTssConstants.TSS_SECRET_MODE_SHA1,
> srkSecret);
> srkPolicy.assignToObject(srk);
>
> //********************************************************************************************************************
>
>
> //create sign
> key**************************************************************************************************
> TcIRsaKey mySignKey = context.createRsaKeyObject(
> TcTssConstants.TSS_KEY_SIZE_2048
> | TcTssConstants.TSS_KEY_TYPE_SIGNING
> // | TcTssConstants.TSS_KEY_NON_VOLATILE
> // | TcTssConstants.TSS_KEY_MIGRATABLE
> | TcTssConstants.TSS_KEY_AUTHORIZATION);
>
> TcBlobData signKeyUsgSecret =
> TcBlobData.newString("Pass4UseSignKey", false);
> TcIPolicy signKeyUsgPolicy =
> context.createPolicyObject(TcTssConstants.TSS_POLICY_USAGE);
>
> signKeyUsgPolicy.setSecret(TcTssConstants.TSS_SECRET_MODE_PLAIN,
> signKeyUsgSecret);
> signKeyUsgPolicy.assignToObject(mySignKey);
>
> TcBlobData signKeyMigSecret =
> TcBlobData.newString("Pass4MigSignKey", false);
> TcIPolicy signkeyMigPolicy =
> context.createPolicyObject(TcTssConstants.TSS_POLICY_MIGRATION);
>
> signkeyMigPolicy.setSecret(TcTssConstants.TSS_SECRET_MODE_PLAIN,
> signKeyMigSecret);
> signkeyMigPolicy.assignToObject(mySignKey);
>
> mySignKey.createKey(srk, null);
>
> //********************************************************************************************************************
>
> //create uniqe identifier for later use to sign key and load
> it***************************************************
> TcTssUuid mySignKeyUUID =
> TcUuidFactory.getInstance().generateRandomUuid();
> context.registerKey(mySignKey,
> TcTssConstants.TSS_PS_TYPE_SYSTEM, mySignKeyUUID,
> TcTssConstants.TSS_PS_TYPE_SYSTEM,
> TcUuidFactory.getInstance().getUuidSRK());//system storage DB
> storage/system
> Log.info("Sign Key registered in persistance sys storage" +
> mySignKeyUUID.toString());
> mySignKey.loadKey(srk);
>
> //********************************************************************************************************************
>
> //create encrypt
> key**********************************************************************************************
> TcIRsaKey myEncKey = context.createRsaKeyObject(
> TcTssConstants.TSS_KEY_SIZE_2048
> | TcTssConstants.TSS_KEY_TYPE_BIND
> // | TcTssConstants.TSS_KEY_NON_VOLATILE
> // | TcTssConstants.TSS_KEY_MIGRATABLE
> | TcTssConstants.TSS_KEY_AUTHORIZATION);
>
> TcBlobData encKeyUsgSecret =
> TcBlobData.newString("Pass4UseEncKey", false);
> TcIPolicy encKeyUsgPolicy =
> context.createPolicyObject(TcTssConstants.TSS_POLICY_USAGE);
>
> encKeyUsgPolicy.setSecret(TcTssConstants.TSS_SECRET_MODE_PLAIN,
> encKeyUsgSecret);
> encKeyUsgPolicy.assignToObject(myEncKey);
> TcBlobData encKeyMigSecret =
> TcBlobData.newString("Pass4MigEncKey", false);
> TcIPolicy encKeyMigPolicy =
> context.createPolicyObject(TcTssConstants.TSS_POLICY_MIGRATION);
>
> encKeyMigPolicy.setSecret(TcTssConstants.TSS_SECRET_MODE_PLAIN,
> encKeyMigSecret);
> encKeyMigPolicy.assignToObject(myEncKey);
>
> myEncKey.createKey(srk, null);
>
> //********************************************************************************************************************
>
> //create uniqe identifier for later use to enc key and load
> it********************************************************
> TcTssUuid myEncKeyUUID =
> TcUuidFactory.getInstance().generateRandomUuid();
> context.registerKey(myEncKey,
> TcTssConstants.TSS_PS_TYPE_SYSTEM, myEncKeyUUID,
> TcTssConstants.TSS_PS_TYPE_SYSTEM,
> TcUuidFactory.getInstance().getUuidSRK());//system storage DB
> storage/system
> Log.info("Enc Key registered in persistance sys storage" +
> myEncKeyUUID.toString());
> System.out.println(myEncKeyUUID.toString());
> myEncKey.loadKey(srk);
>
> //********************************************************************************************************************
>
> //using
> AIK*********************************************************************************************************
> TcIRsaKey aikKey = context.loadKeyByBlob(srk, keyblob_);
>
> TcBlobData aikUsgSecret = TcBlobData.newString(keysecret,false);
> TcIPolicy aikUsgPolicy =
> context.createPolicyObject(TcTssConstants.TSS_POLICY_USAGE);
> aikUsgPolicy.setSecret(TcTssConstants.TSS_SECRET_MODE_PLAIN,
> aikUsgSecret);
> aikUsgPolicy.assignToObject(aikKey);
>
> TcBlobData aikMigSecret = TcBlobData.newString(keysecret,false);
> TcIPolicy aikMigPolicy =
> context.createPolicyObject(TcTssConstants.TSS_POLICY_MIGRATION);
> aikMigPolicy.setSecret(TcTssConstants.TSS_SECRET_MODE_PLAIN,
> aikMigSecret);
> aikMigPolicy.assignToObject(aikKey);
>
> //*********************************************************************************************************************
>
> //SIGNING myEncKey
> withAIK***********************************************************************************
> TcBlobData encKeysigned =
> TcBlobData.newByteArray(myEncKey.getPubKey().asByteArray());
> TcIHash hashForSign =
> context.createHashObject(TcTssConstants.TSS_HASH_SHA1);
> hashForSign.updateHashValue(encKeysigned);
> System.out.println(encKeysigned);
> System.out.println(hashForSign.toString());
> TcBlobData signature1 = hashForSign.sign(mySignKey);//work fine
> TcBlobData signature2 = hashForSign.sign(aikKey);//make
> exception
>
> //**********************************************************************************************************************
> context.closeContext();
> } catch (TcTssException ex) {
> Log.err(ex);
> }
>
>
> It works fine for using mySignKey but not for aikKey,
> It give me The usage of a key is not allowed Exception.
>
> I see The TPM Specs, Rev. 103, Part 3, Ch. 13, Signing Section, but
> this does not help me.
>
> So
> How can I sign by AIK the Encryption Key?
> Or
> Does the only way to sign by AIK private part is by using quoting?
>
> Thanks
>
> ------------------------------------------------------------------------
> *From:* Ronald Tögl <ron...@ia...>
> *To:* tru...@li...
> *Cc:* FADY FADY <fad...@ya...>
> *Sent:* Wed, October 20, 2010 2:40:46 PM
> *Subject:* Re: [Trustedjava-support] How to Encrypt by the private
> part of AIK
>
> Hello,
>
> On 10/20/2010 02:24 PM, FADY FADY wrote:
> > Dear Ronald
> > Thank U for your response
> >
> > My Question is
> > If we have two entities 1 and 2 with Keys AIK1 and AIK2 respectively
> > can entity 1 sign by AIK1private then encrypt by AIK2public
> > so entity 2 decrypt by AIK2private then by AIK1public?
> This cannot be done, because AIKs can only sign but not encrypt.
>
> > If this cant not be done, can we make two binding keys where there
> > parents are AIK1 and AIK2 respectively, and do by these binding keys
> > what we try to do by AIKs in the first question?
> Yes. You can implement the scheme presented in
> "Securing the Distribution and Storage of Secrets with Trusted
> Platform Modules" by Paul E. Sevinç, Mario Strasser and David Basin.
> http://www.springerlink.com/content/b77jr665x9122q16/
>
> Depending on your use case, you might want to modify it according to
> "Formal Analysis of a TPM-Based Secrets Distribution and Storage Scheme"
> by Toegl, R.; Hofferek, G.; Greimel, K.; Leung, A.; Phan,
> R.C.-W.; Bloem, R.;
> http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=4709329&tag=1
> <http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=4709329&tag=1>
>
> Have fun,
> Ronald
>
>
> -- Dipl.-Ing. Ronald Tögl phone +43 316/873-5502
> Secure and Correct Systems fax +43 316/873-5520
> IAIK ron...@ia... <mailto:ron...@ia...>
> Graz University of Technology http://www.iaik.tugraz.at
>
>
>
--
Dipl.-Ing. Ronald Tögl phone +43 316/873-5502
Secure and Correct Systems fax +43 316/873-5520
IAIK ron...@ia...
Graz University of Technology http://www.iaik.tugraz.at
|