Yay! Thanks a lot for moving so fast :-)

- Niklas

Den tis 17 dec. 2019 kl 16:16 skrev Roberts, William C <william.c.roberts@intel.com>:
I pulled all these in, so attestation's on disk format will change. I would consider these
To be of short lifespan so it shouldn't cause much grief.

We were also able to remove some dead code:
https://github.com/tpm2-software/tpm2-tools/pull/1876

Thanks,
Bill

> -----Original Message-----
> From: Niklas Andersson [mailto:niklas.andersson@fredenheim.se]
> Sent: Tuesday, December 17, 2019 5:38 AM
> To: Roberts, William C <william.c.roberts@intel.com>
> Cc: Luke Hinds <lhinds@redhat.com>; tpm2@lists.01.org
> Subject: Re: [tpm2] Re: tpm2_create signature verification fails due to
> "RSA_padding_check_PKCS_type1:invalid padding"
>
> +1 for bug :-)
>
> On Mon, Dec 16, 2019, 16:04 Roberts, William C <william.c.roberts@intel.com
> <mailto:william.c.roberts@intel.com> > wrote:
>
>
>
>
>       > -----Original Message-----
>       > From: Niklas Andersson [mailto:niklas.andersson@fredenheim.se
> <mailto:niklas.andersson@fredenheim.se> ]
>       > Sent: Monday, December 16, 2019 3:51 AM
>       > To: Luke Hinds <lhinds@redhat.com <mailto:lhinds@redhat.com> >
>       > Cc: Roberts, William C <william.c.roberts@intel.com
> <mailto:william.c.roberts@intel.com> >; tpm2@lists.01.org
> <mailto:tpm2@lists.01.org>
>       > Subject: Re: [tpm2] Re: tpm2_create signature verification fails due to
>       > "RSA_padding_check_PKCS_type1:invalid padding"
>       >
>       > A colleague of mine identified and fixed both the tpm2_certify [1] and
> the
>       > superfluous byte-size [2] fields in two separate pull-requests.
>       >
>       > Turned out that the arguments to tpm2_certify got mixed up. If one
> changes the
>       > --certifiedkey-context and --signingkey-context signature verification
> works.
>       >
>       > [1] https://github.com/tpm2-software/tpm2-tools/pull/1874
>       > [2] https://github.com/tpm2-software/tpm2-tools/pull/1873
>
>       These look good, thanks. The real question is whether or not we view
>       PR#1873 as a non-backwards compatible change. I view it as a bug,
> anyone
>       object to that?
>
>       >
>       >
>       > Den tors 12 dec. 2019 kl 18:21 skrev Niklas Andersson
>       > <niklas.andersson@fredenheim.se
> <mailto:niklas.andersson@fredenheim.se>
> <mailto:niklas.andersson@fredenheim.se
> <mailto:niklas.andersson@fredenheim.se> > >:
>       >
>       >
>       >       In the source it looks like tpm2_certify.c and tpm2_certifycreation.c
>       > handles signature differently.
>       >
>       >       OpenSSL is not the issue. I am using version OpenSSL 1.1.1 11 Sep
> 2018,
>       > and I tried to unpack the signature using parameter "-raw" (instead of -
> pkcs
>       > which is default", and the result was gibberish. I would expect
> somewhat a
>       > resemblance to ASN.1.
>       >
>       >       I opened an issue on Github https://github.com/tpm2-
> software/tpm2-
>       > tools/issues/1871
>       >
>       >       Den tors 12 dec. 2019 kl 10:14 skrev Luke Hinds <lhinds@redhat.com
> <mailto:lhinds@redhat.com>
>       > <mailto:lhinds@redhat.com <mailto:lhinds@redhat.com> > >:
>       >
>       >
>       >               I have not had much time to research what you have tried, but I
>       > wonder if it might be the same as the following situation we hit
> recently. iirc later
>       > versions of OpenSSL (1.1.0 & greater) are less relaxed about padding
>       > conventions.
>       >
>       >
>       >               https://mta.openssl.org/pipermail/openssl-dev/2016-
>       > February/005100.html
>       >
>       >               On Wed, Dec 11, 2019 at 10:46 PM Niklas Andersson
>       > <niklas.andersson@fredenheim.se
> <mailto:niklas.andersson@fredenheim.se>
> <mailto:niklas.andersson@fredenheim.se
> <mailto:niklas.andersson@fredenheim.se> > >
>       > wrote:
>       >
>       >
>       >                       Hi William,
>       >
>       >                       Yes. It actually came to mind that my TPM might be faulty.
>       > But I had a colleague running the script and he got exactly the same
> error, so it
>       > seems there is a bug in the padding routine.
>       >
>       >
>       >
>       >                       Den ons 11 dec. 2019 kl 16:50 skrev Roberts, William C
>       > <william.c.roberts@intel.com <mailto:william.c.roberts@intel.com>
> <mailto:william.c.roberts@intel.com <mailto:william.c.roberts@intel.com> > >:
>       >
>       >
>       >                               Sounds like a possible issue in our TPM2
>       > structures to signature format routine or the TPM itself:
>       >                               https://github.com/tpm2-software/tpm2-
>       > tools/blob/master/lib/tpm2_convert.c#L467
>       >
>       >                               Looks like the script has an rsa key, so you should
>       > get a signature scheme of:
>       >                               TPM2_ALG_RSASSA
>       >
>       >                               Which is just a straight memcpy from the TPM.
>       >
>       >                               Perhaps, the TPM is either getting it wrong or we
>       > need to call some magic OSSL padding routine?
>       >
>       >
>       >                               > -----Original Message-----
>       >                               > From: Niklas Andersson
>       > [mailto:niklas.andersson@fredenheim.se
> <mailto:niklas.andersson@fredenheim.se>
>       > <mailto:niklas.andersson@fredenheim.se
> <mailto:niklas.andersson@fredenheim.se> > ]
>       >                               > Sent: Wednesday, December 11, 2019 4:58 AM
>       >                               > To: tpm2@lists.01.org <mailto:tpm2@lists.01.org>
>       > <mailto:tpm2@lists.01.org <mailto:tpm2@lists.01.org> >
>       >                               > Subject: [tpm2] Re: tpm2_create signature
>       > verification fails due to
>       >                               > "RSA_padding_check_PKCS_type1:invalid
>       > padding"
>       >                               >
>       >                               > Here is the test case that explains the issue. Not
>       > sure if I am missing something. I
>       >                               > believe the certify.SIGNATURE is corrupt.
>       >                               >
>       >                               >
>       >                               > #!/bin/bash
>       >                               >
>       >                               > srk_handle=0x81000003
>       >                               > ek_handle=0x81010001
>       >                               >
>       >                               > # IDevID
>       >                               > tpm2_createak \
>       >                               > --ek-context=$ek_handle \
>       >                               > --ak-context=IDevID.ctx \
>       >                               > --key-algorithm=rsa \
>       >                               > --hash-algorithm=sha1 \
>       >                               > --public=IDevID.pub \
>       >                               > --private=IDevID.priv
>       >                               > # --signing-algorithm=sha1
>       >                               >
>       >                               > # LDevID
>       >                               > tpm2_create \
>       >                               > --parent-context=$srk_handle \
>       >                               > --hash-algorithm=sha1 \
>       >                               > --key-algorithm=rsa2048 \
>       >                               > --public=LDevID.pub \
>       >                               > --private=LDevID.priv \
>       >                               > --creation-data=LDevID.CREATION_DATA \
>       >                               > --creation-hash=LDevID.CREATION_HASH \
>       >                               > --creation-ticket=LDevID.CREATION_TICKET
>       >                               >
>       >                               > tpm2_load \
>       >                               > --parent-context=$srk_handle \
>       >                               > --public=LDevID.pub \
>       >                               > --private=LDevID.priv \
>       >                               > --key-context=LDevID.ctx
>       >                               >
>       >                               > # Certify
>       >                               > tpm2_certify \
>       >                               > --certifiedkey-context=LDevID.ctx \
>       >                               > --signingkey-context=IDevID.ctx \
>       >                               > --hash-algorithm=sha1 \
>       >                               > --attestation=certify.ATTESTATION \
>       >                               > --signature=certify.SIGNATURE \
>       >                               > --format=plain
>       >                               >
>       >                               > # Certify Creation
>       >                               > tpm2_certifycreation \
>       >                               > --certifiedkey-context=LDevID.ctx \
>       >                               > --signingkey-context=IDevID.ctx \
>       >                               > --hash-algorithm=sha1 \
>       >                               > --creation-hash=LDevID.CREATION_HASH \
>       >                               > --ticket=LDevID.CREATION_TICKET \
>       >                               > --signature=certifycreation.SIGNATURE \
>       >                               > --attestation=certifycreation.ATTESTATION \ --
>       > format=plain
>       >                               >
>       >                               > # IDevID.der
>       >                               > echo
>       > 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA' | openssl
> base64
>       >                               > -a -d > IDevID.header.temp dd if=IDevID.pub
>       > bs=1 skip=$(expr $(stat --
>       >                               > format=%s IDevID.pub) - 256)
>       > of=IDevID.modulus.temp echo -en '\x02\x03' >
>       >                               > IDevID.mid-header.temp echo -ne
>       > '\x01\x00\x01' > IDevID.exponent.temp cat
>       >                               > IDevID.header.temp IDevID.modulus.temp
>       > IDevID.mid-header.temp
>       >                               > IDevID.exponent.temp > IDevID.der
>       >                               >
>       >                               > # Remove first two bytes (byte size of struct) in
>       > certifycreation.ATTESTATION # in
>       >                               > order for hash to comply. Magic Header" must
>       > be ff 54 43 47 dd
>       >                               > if=certifycreation.ATTESTATION
>       > of=certifycreation.ATTESTATION_2 bs=1 skip=2
>       >                               >
>       >                               > # WORKS: Verify Certify Creation
>       >                               > openssl dgst \
>       >                               > -verify IDevID.der -keyform der \
>       >                               > -sha1 -signature certifycreation.SIGNATURE
>       > certifycreation.ATTESTATION_2
>       >                               >
>       >                               > # FAILS: Verify Create
>       >                               > openssl dgst \
>       >                               > -verify IDevID.der -keyform der \
>       >                               > -sha1 -signature certify.SIGNATURE
>       > certify.ATTESTATION
>       >                               >
>       >                               > # WORKS:
>       >                               > openssl rsautl \
>       >                               > -verify \
>       >                               > -pubin -inkey IDevID.der -keyform DER \
>       >                               > -in certifycreation.SIGNATURE \
>       >                               > -out certifycreation.SIGNATURE.asn1
>       >                               >
>       >                               > dumpasn1 certifycreation.SIGNATURE.asn1
>       >                               >
>       >                               > # FAILS:
>       >                               > openssl rsautl \
>       >                               > -verify \
>       >                               > -pubin -inkey IDevID.der -keyform DER \
>       >                               > -in certify.SIGNATURE \
>       >                               > -out certify.SIGNATURE.asn1
>       >                               >
>       >                               > Den tis 10 dec. 2019 kl 23:40 skrev Niklas
>       > Andersson
>       >                               > <niklas.andersson@fredenheim.se
> <mailto:niklas.andersson@fredenheim.se>
>       > <mailto:niklas.andersson@fredenheim.se
> <mailto:niklas.andersson@fredenheim.se> >
>       > <mailto:niklas.andersson@fredenheim.se
> <mailto:niklas.andersson@fredenheim.se>
>       > <mailto:niklas.andersson@fredenheim.se
> <mailto:niklas.andersson@fredenheim.se> > > >:
>       >                               >
>       >                               >
>       >                               >       openssl can not verify plain signature (256
>       > bytes) from tpm2_certify due
>       >                               > to bad padding.
>       >                               >
>       >                               >       This should work (verification of signature
>       > from tpm2_certifycreation
>       >                               > works fine):
>       >                               >
>       >                               >       openssl dgst -verify ../AIKOpaque.der -
>       > keyform der -sha1 -signature
>       >                               > Signature KeyAttest.bin
>       >                               >       Verification Failure
>       >                               >
>       >                               >       ....examine:
>       >                               >
>       >                               >       openssl rsautl -verify -inkey
>       > ../AIKOpaque.der -in Signature -pubin -
>       >                               > keyform der -pkcs > decrypted.bin
>       >                               >       RSA operation error
>       >                               >       140654247387584:error:0407008A:rsa
>       >                               >
>       > routines:RSA_padding_check_PKCS1_type_1:invalid
>       >                               > padding:../crypto/rsa/rsa_pk1.c:67:
>       >                               >       140654247387584:error:04067072:rsa
>       >                               > routines:rsa_ossl_public_decrypt:padding
>       > check
>       >                               > failed:../crypto/rsa/rsa_ossl.c:582:
>       >                               >
>       >                               >       ..Same operation on a plain signature from
>       > tpm2_certifycreation works:
>       >                               >
>       >                               >
>       >                               >       openssl rsautl -verify -inkey
>       > ../AIKOpaque.der -in
>       >                               > ../IdBinding.EXTRACTED_TPMT_SIGNATURE -
>       > pubin -keyform der  >
>       >                               > decrypted.bin
>       >                               >
>       >                               >       dumpasn1 decrypted.bin
>       >                               >         0  33: SEQUENCE {
>       >                               >         2   9:   SEQUENCE {
>       >                               >         4   5:     OBJECT IDENTIFIER sha1 (1 3 14 3 2
>       > 26)
>       >                               >        11   0:     NULL
>       >                               >              :     }
>       >                               >        13  20:   OCTET STRING 2D A1 D1 30 3A D2 FD
>       > 68 A1 5A 2F 9B 8B C1 1E DB
>       >                               > 36 A7 7C D4
>       >                               >              :   }
>       >                               >
>       >                               >
>       >                               >       So. It looks like a bug in tpm2_certify.
>       >                               >
>       >                               >       tool="tpm2_certify" version="4.1"
>       > tctis="libtss2-tctildr" tcti-default=tcti-
>       >                               > device
>       >                               >       tpm2-tss 2.3.2-rc0
>       >                               >
>       >                               >       Regards,
>       >                               >       Niklas
>       >                               >
>       >                               >
>       >
>       >
>       >
>       >
>       >       _______________________________________________
>       >                       tpm2 mailing list -- tpm2@lists.01.org
> <mailto:tpm2@lists.01.org>
>       > <mailto:tpm2@lists.01.org <mailto:tpm2@lists.01.org> >
>       >                       To unsubscribe send an email to tpm2-leave@lists.01.org
> <mailto:tpm2-leave@lists.01.org>
>       > <mailto:tpm2-leave@lists.01.org <mailto:tpm2-leave@lists.01.org> >
>       >                       %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s
>       >
>       >
>       >
>       >               --
>       >
>       >               Luke Hinds  | CTO Office | Red Hat
>       >               e: lhinds@redhat.com <mailto:lhinds@redhat.com>
> <mailto:lhinds@redhat.com <mailto:lhinds@redhat.com> >  | irc: lhinds
>       > @freenode | t: +44 12 52 36 2483
>       >
>
>