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 |