Hi Stuart,

Please see inline...

-Vivek


On 4/15/20 11:49 PM, Vivek Prasad wrote:
> Hello Stuart, Alexei,
>
>
> Chiming-in here on Ampere's behalf...
>
>
> We analysed this proposal internally. And we see a number issues with this, some of which was already raised by Raghu in the previous threads.
>
> Here is a summary of the main issues that we see.
>
>   * Only supporting mbedtls, and this is fixed config at compile time.
>       o We propose that there should be a variable for the algorithm to be
> used, which can be setup at initialization time.

My understanding is that TF-A supports a pluggable crypto
library design where other libraries besides mbedtls can
be used.

Regarding initialization time selection of the algorithm, I don't
know if there are existing examples of the boot ROM (BL1)
reading variable configuration data from flash.  But, if this can
be done sanely seems good.

[Vivek]>> Ageed. TF-A supports pluggable Crypto. However, the current design limits the usage of any other digest for measurement than what is being used for images. TPM measurement algorithm and image hash authentications are two separate activities and may use different digests. The current design limits this.


>   * This solution relies on taking the hash directly from the digest as
> the measurement, instead of the computed hash.  This is not safe,
> especially considering measured boot may use a different hash bank,
> so digest hash may not be correct/valid.

I'm not 100% I understand, but the hash of BL2 is computed.  This was added
in a separate patch (see 0ab496458b).  There is a function arm_bl1_set_bl2_hash()
where BL1 computes the BL2 hash.  It is then passed to BL2 via tb_fw_config.

>   * Only measuring the BL2 image, per the ARM SBSG we must be measuring and logging
>   **all** images/boot phases
>       o BL31
>       o BL32 (all secure partitions)
>       o BL33 (UEFI or any other non-secure boot loader)
>           + Once we ERET into BL33, the measure boot flow continues and is owned> by that boot loader

The BL2 code does measure all other loaded images.  See
fvp_bl2_plat_handle_post_image_load() in fvp_bl2_setup.c.

[Vivek] >> I don’t see BL2 measuring images as part of this merge. https://review.trustedfirmware.org/c/TF-A/trusted-firmware-a/+/3555
Authentication is not same as measurement, we need to perform a hash-log-extend every time a new hash is being computed.  Where is the actual measurement to the PCR0 happening?



>   * Only see support for PCR0, any/all unsigned config data must be logged to PCR1.

Yes, agree need to support PCR1 as well.

>   * Passing PCRs to non-secure software before logging is not compliant with TCG
>   Static-Root-of-Trust Measurement (SRTM) requirements
>       o It was discussed before in separate conversations… especially in
>         systems where you are talked about two different signing domains where BL33
>         is a different trust/signing domain.
>       o BL33 should only do hash-log-extend… there is no need for BL33 to
>         be aware of the current PCR value (beyond what is provided in the boot event
>         log).

The current patches pass the event log to BL33, but that's it.  They currently
assume that the secure world will write the TPM PCRs.

>   * Based on comments on the mail thread, there seem to be bad
>     assumptions/expectations around TPM accessibility from non-secure world.
>       o Expecting SPI/I2C TPMs to be directly accessed from non-secure
>         world instead of abstracting hardware details via the TCG CRB interface>         (which has been already standardized as the defacto mechanism for ARM on
>         past mobile, client, and server solutions).
>       o CRB will "just work" for Aptio/EDK2/Linux/Windows/Hyper-V/VMWare
>       o NOTE: This goes back to what is a “productizable” TPM solution.
>         We want it to be turn-key solution for customers without having to
>         support/develop proprietary drivers.

I don't think the patches assume TPM accessibility from normal world.  They
pass the measurements to the secure world (BL32) via tb_fw_config so
they can be replayed into the TPM.

Any kind of secure world TPM service should be based on CRB.

But, we don't want to preclude the normal world owning the TPM for
some use cases.

Thanks,
Stuart

From: Stuart Yoder <stuart.yoder@arm.com>
Sent: Friday, April 17, 2020 12:15 AM
To: Vivek Prasad <vivek.prasad@live.com>; Alexei Fedorov <Alexei.Fedorov@arm.com>; tf-a <tf-a@lists.trustedfirmware.org>; Raghu Krishnamurthy <raghu.ncstate@icloud.com>
Cc: Vivek Kumar <vivek@amperecomputing.com>; Matteo Carlini <Matteo.Carlini@arm.com>; Samer El-Haj-Mahmoud <samer.el-haj-mahmoud@arm.com>; Loc Ho <loc.ho@amperecomputing.com>; Charles Garcia-Tobin <Charles.Garcia-Tobin@arm.com>; Dong Wei <Dong.Wei@arm.com>; Mohamad Ammar <moe@amperecomputing.com>; Benjamin Chaffin <bchaffin@amperecomputing.com>; Ard Biesheuvel <Ard.Biesheuvel@arm.com>; Joanna Farley <Joanna.Farley@arm.com>
Subject: Re: [TF-A] Proposal for Measured Boot Implementation
 


On 4/15/20 11:49 PM, Vivek Prasad wrote:
> Hello Stuart, Alexei,
>
>
> Chiming-in here on Ampere's behalf...
>
>
> We analysed this proposal internally. And we see a number issues with this, some of which was already raised by Raghu in the previous threads.
>
> Here is a summary of the main issues that we see.
>
>   * Only supporting mbedtls, and this is fixed config at compile time.
>       o We propose that there should be a variable for the algorithm to be
> used, which can be setup at initialization time.

My understanding is that TF-A supports a pluggable crypto
library design where other libraries besides mbedtls can
be used.

Regarding initialization time selection of the algorithm, I don't
know if there are existing examples of the boot ROM (BL1)
reading variable configuration data from flash.  But, if this can
be done sanely seems good.

>   * This solution relies on taking the hash directly from the digest as
> the measurement, instead of the computed hash.  This is not safe,
> especially considering measured boot may use a different hash bank,
> so digest hash may not be correct/valid.

I'm not 100% I understand, but the hash of BL2 is computed.  This was added
in a separate patch (see 0ab496458b).  There is a function arm_bl1_set_bl2_hash()
where BL1 computes the BL2 hash.  It is then passed to BL2 via tb_fw_config.

>   * Only measuring the BL2 image, per the ARM SBSG we must be measuring and logging
>   **all** images/boot phases
>       o BL31
>       o BL32 (all secure partitions)
>       o BL33 (UEFI or any other non-secure boot loader)
>           + Once we ERET into BL33, the measure boot flow continues and is owned> by that boot loader

The BL2 code does measure all other loaded images.  See
fvp_bl2_plat_handle_post_image_load() in fvp_bl2_setup.c.


>   * Only see support for PCR0, any/all unsigned config data must be logged to PCR1.

Yes, agree need to support PCR1 as well.

>   * Passing PCRs to non-secure software before logging is not compliant with TCG
>   Static-Root-of-Trust Measurement (SRTM) requirements
>       o It was discussed before in separate conversations… especially in
>         systems where you are talked about two different signing domains where BL33
>         is a different trust/signing domain.
>       o BL33 should only do hash-log-extend… there is no need for BL33 to
>         be aware of the current PCR value (beyond what is provided in the boot event
>         log).

The current patches pass the event log to BL33, but that's it.  They currently
assume that the secure world will write the TPM PCRs.

>   * Based on comments on the mail thread, there seem to be bad
>     assumptions/expectations around TPM accessibility from non-secure world.
>       o Expecting SPI/I2C TPMs to be directly accessed from non-secure
>         world instead of abstracting hardware details via the TCG CRB interface>         (which has been already standardized as the defacto mechanism for ARM on
>         past mobile, client, and server solutions).
>       o CRB will "just work" for Aptio/EDK2/Linux/Windows/Hyper-V/VMWare
>       o NOTE: This goes back to what is a “productizable” TPM solution.
>         We want it to be turn-key solution for customers without having to
>         support/develop proprietary drivers.

I don't think the patches assume TPM accessibility from normal world.  They
pass the measurements to the secure world (BL32) via tb_fw_config so
they can be replayed into the TPM.

Any kind of secure world TPM service should be based on CRB.

But, we don't want to preclude the normal world owning the TPM for
some use cases.

Thanks,
Stuart