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


Attachment: 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

Reply via email to