Hi, Sahil, The version 8 PCR 17 value could be replicated for some platform I can access, so the MLE DG should be right. The issue might be with the platform you are using. Can you tell the detailed model number of that platform and attach a completed tboot log for further analysis?
Jimmy Sahil Rihan wrote onĀ 2013-02-01: > Hi Jimmy, > > Thanks for your quick response. I double checked the data lengths and they > seem to be correct. I'm copying the Python code I'm using below. > > I was able to use a slightly modified version of the function below to validate > the PCR 17 computed by Jonathan McCune's Perl script > (http://sourceforge.net/mailarchive/message.php?msg_id=23257129), so I'm > reasonably confident the basic code (unhexlify, update, etc.) is correct. > > > Thanks, > Sahil > > > def computePcr17(): > # all_zeroes_ascii = "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 > 00 00" > > bios_acm_id_ascii = "80 00 00 00 20 12 05 09 00 00 1d 00 ff ff ff ff > ff ff ff ff" # edx_senter_flags_ascii = "00 00 00 00" > mseg_valid_ascii = "00 00 00 00 00 00 00 00" > > sinit_hash_ascii = "7e e6 40 51 b4 2b 49 18 4f fe 41 6d 60 09 46 3e > e2 84 3d 04" mle_hash_ascii = "d0 29 d7 7e 2f 4f 32 4b a2 d4 23 53 > db 06 79 b5 13 d8 33 34" stm_hash_ascii = "00 00 00 00 00 00 00 00 > 00 00 00 00 00 00 00 00 00 00 00 00" lcp_policy_hash_ascii = "00 00 > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 > 00 00 00 00" > > lcp_policy_control_ascii = "00 00 00 00" > os_sinit_capabilities_ascii = "00 00 00 00" > scrtm_status_ascii = "00 00 00 01" > # all_zeroes_hex = binascii.unhexlify(all_zeroes_ascii.replace(' ', '')) > sinit_hash_hex = binascii.unhexlify(sinit_hash_ascii.replace(' ', '')) > # edx_senter_flags_hex = > binascii.unhexlify(edx_senter_flags_ascii.replace(' ', '')) > > bios_acm_id_hex = binascii.unhexlify(bios_acm_id_ascii.replace(' ', > '')) mseg_valid_hex = binascii.unhexlify(mseg_valid_ascii.replace(' > ', '')) stm_hash_hex = binascii.unhexlify(stm_hash_ascii.replace(' > ', '')) lcp_policy_control_hex = > binascii.unhexlify(lcp_policy_control_ascii.replace(' ', '')) > lcp_policy_hash_hex = > binascii.unhexlify(lcp_policy_hash_ascii.replace(' ', '')) > os_sinit_capabilities_hex = > binascii.unhexlify(os_sinit_capabilities_ascii.replace(' ', '')) > scrtm_status_hex = binascii.unhexlify(scrtm_status_ascii.replace(' > ', '')) > > sha1_pcr17_second = hashlib.sha1() > sha1_pcr17_second.update(bios_acm_id_hex) > sha1_pcr17_second.update(mseg_valid_hex) > sha1_pcr17_second.update(stm_hash_hex) > sha1_pcr17_second.update(lcp_policy_control_hex) > sha1_pcr17_second.update(lcp_policy_hash_hex) > sha1_pcr17_second.update(os_sinit_capabilities_hex) > sha1_pcr17_second.update(scrtm_status_hex) > > pcr17 = hashlib.sha1() > pcr17.update(sinit_hash_hex) > pcr17.update(sha1_pcr17_second.digest()) > > print "sha1_pcr17_second: " + sha1_pcr17_second.hexdigest() > print "final pcr17: " + pcr17.hexdigest() > > This is the output from tboot that I'm using to initialize the variables > in the function: > > TBOOT: sinit_mle_data (@0xcf7311b8, 0x224): TBOOT: version: 8 TBOOT: > bios_acm_id: 80 00 00 00 20 12 05 09 00 00 1d 00 ff ff ff ff ff ff ff > ff TBOOT: edx_senter_flags: 0x00000000 TBOOT: mseg_valid: 0x0 TBOOT: > sinit_hash: 7e e6 40 51 b4 2b 49 18 4f fe 41 6d 60 09 46 3e e2 84 3d 04 > TBOOT: mle_hash: d0 29 d7 7e 2f 4f 32 4b a2 d4 23 53 db 06 79 b5 13 d8 > 33 34 TBOOT: stm_hash: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 > 00 00 00 00 TBOOT: lcp_policy_hash: 00 00 00 00 00 00 00 00 00 00 00 00 > 00 00 00 00 00 00 00 00 TBOOT: lcp_policy_control: 0x00000000 TBOOT: > rlp_wakeup_addr: 0xcf701220 TBOOT: num_mdrs: 7 TBOOT: mdrs_off: 0x9c > TBOOT: num_vtd_dmars: 224 TBOOT: vtd_dmars_off: 0x144 TBOOT: > sinit_mdrs: TBOOT: 0000000000000000 - 00000000000a0000 (GOOD) TBOOT: > 0000000000100000 - 0000000001000000 (GOOD) TBOOT: 0000000001000000 - > 00000000cf800000 (GOOD) TBOOT: 0000000100000000 - 0000000430000000 > (GOOD) TBOOT: 0000000000000000 - 0000000000000000 (GOOD) TBOOT: > 00000000cf800000 - 00000000d0000000 (SMRAM NON-OVERLAY) TBOOT: > 00000000e0000000 - 00000000e4000000 (PCIE EXTENDED CONFIG) TBOOT: > proc_scrtm_status: 0x00000001 > > > I expect that it should match the value of PCR 17 after SENTER (and before it is > extended by tboot): > > TBOOT: PCRs before extending: > TBOOT: PCR 17: a9 6f c9 dd 99 f7 5d 07 18 eb e5 3d 38 c7 eb 8f 14 9e 76 95 > TBOOT: PCR 18: a4 1b b3 ef 12 f6 d6 65 58 60 b9 05 4d 72 6f f0 ca 78 21 54 > TBOOT: PCR 19: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 > > > On Wed, Jan 30, 2013 at 5:54 PM, Wei, Gang <gang....@intel.com> wrote: > > > Sahil Rihan wrote on 2013-01-31: > > > Hi list, > > Like a few before me, I'm trying to calculate in > software the value of PCR17 > after SENTER. I'm taking the value of > the first extend as a given (from > SinitMleData.SinitHash) and am > trying to reconstruct the value at the end of > the second extend. > > > I took Jonathan McCune's Perl script as a starting point and was able > to > reproduce his result (which I'm assuming is for > SinitMleData.Version 6, given > his computation of the first PCR17 > extend in his Perl script) using a Python > script I wrote. I then > modified my script to use the value from > SinitMleData.SinitHash > directly, since my understanding is that it contains the > value of > PCR17 after the first extend for SinitMleData.Version 8). > > So my > computation is now identical to the one in the MLE Developer's Guide. > > > SHA-1 ( SinitMleData.SinitHash | SHA-1 ( SinitMleData.BiosAcm.ID > | > SinitMleData.MsegValid | SinitMleData.StmHash | > > SinitMleData.PolicyControl | SinitMleData.LcpPolicyHash | > > (OsSinitData.Capabilities, 0) | SinitMleData.ProcessorSCRTMStatus) ) > > > Unfortunately, I'm not able to get to the value for PCR 17 that tboot > dumps, > before it performs its own extend to PCR17. > > If anyone > has successfully computed PCR 17 or has thoughts on what I might be > > doing wrong, I'd appreciate your input. > > > Please make sure the data length you used for PCR17 value calculation > is right: > > SinitMleData.MsegValid 8bytes > SinitMleData.PolicyControl 4bytes > (OsSinitData.Capabilities, 0) 4bytes > SinitMleData.ProcessorSCRTMStatus 4bytes > > And (OsSinitData.Capabilities,0) means: > > if SinitMleData.PolicyControl.bit2 is 1, use value of > OsSinitData.Capabilities if SinitMleData.PolicyControl.bit2 is 0, use > a 4-byte 0s. > > Wish those will help. > > Jimmy > > Jimmy
smime.p7s
Description: S/MIME cryptographic signature
------------------------------------------------------------------------------ The Go Parallel Website, sponsored by Intel - in partnership with Geeknet, is your hub for all things parallel software development, from weekly thought leadership blogs to news, videos, case studies, tutorials, tech docs, whitepapers, evaluation guides, and opinion stories. Check out the most recent posts - join the conversation now. http://goparallel.sourceforge.net/
_______________________________________________ tboot-devel mailing list tboot-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/tboot-devel