[tpm2] Re: Ecrypting and decrypting a file using a TPM2
Steven Clark <davolfman at gmail.com> Tue, 14 Jun 2022 17:27:31 -0700
| Newsgroups | dev.linux.lists.tpm2 |
|---|---|
| Message-ID | <CAOCvsS=d4=+oVOcbD0yv4CYBVA3QGJgUtJfOKBOayejyApv18Q@mail.gmail.com> |
Generally bulk symmetric encryption is a feature real TPMs don't
implement. What you do is generate a random transmission key for AES
encryption with something like OpenSSLs libcrypto and encrypt that
ephemeral key with the TPM.
On Tue, Jun 14, 2022, 5:06 PM <dawn.howe(a)alten.com> wrote:
> I am writing a c++ application on ubuntu 22.04 server that needs to
> encrypt and decrypt files and am using the FAPI api. The files need to be
> secured until the application uses them at a later time, so I am receiving
> plain files and encrypting them using Fapi_Encrypt().
>
> I tried following the pattern in the integration tests found in the
> tpm2-tools. (tpm2-tools/test/integration/fapi/fapi-encrypt-decrypt.sh)
>
> It basically does the following:
> Fapi_Initialize(&global_fapi_context, NULL);
> Fapi_Provision (global_fapi_context, NULL, NULL, NULL);
>
> const char * key_type = "noDa, decrypt, system";
> char * auth_value = NULL; // no password
> char * policy_path = NULL;
> Fapi_CreateKey (global_fapi_context, key_path, key_type, policy_path,
> auth_value);
>
> Fapi_Encrypt (global_fapi_context, key_path, (const uint8_t*)data, size,
> &cipherText, &cipherTextSize);
>
> The files (data buffer) I need to encrypt are about 3k bytes big.
>
> The encryption fails because the file is too big. The error comes from
> .../tpm2-tss/src/tss2-fapi/api/Fapi_Encrypt.c line 309:
>
> if (encKeyObject->misc.key.public.publicArea.type == TPM2_ALG_RSA) {
> TPM2B_DATA null_data = { .size = 0, .buffer = {} };
> TPM2B_PUBLIC_KEY_RSA *rsa_message = (TPM2B_PUBLIC_KEY_RSA
> *)&context->aux_data;
> size_t key_size =
>
> encKeyObject->misc.key.public.publicArea.parameters.rsaDetail.keyBits / 8;
> if (context->cmd.Data_EncryptDecrypt.in_dataSize >
> key_size) {
> goto_error_reset_state(r, TSS2_FAPI_RC_BAD_VALUE,
> "Size to big for RSA
> encryption.", error_cleanup);
>
>
> Is my strategy completely wrong? What's the proper way to do this? Is my
> strategy ok, but need to generate a different type of key?
>
> I'm new to this technology and am curious how it ought to be done.
> _______________________________________________
> tpm2 mailing list -- tpm2(a)lists.01.org
> To unsubscribe send an email to tpm2-leave(a)lists.01.org
> %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s
>
attachment.htm
(text/html, 3 KB)
<div dir="auto"><div>Generally bulk symmetric encryption is a feature real TPMs don't implement. What you do is generate a random transmission key for AES encryption with something like OpenSSLs libcrypto and encrypt that ephemeral key with the TPM.<br><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Jun 14, 2022, 5:06 PM <<a href="mailto:[email protected]">[email protected]</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I am writing a c++ application on ubuntu 22.04 server that needs to encrypt and decrypt files and am using the FAPI api. The files need to be secured until the application uses them at a later time, so I am receiving plain files and encrypting them using Fapi_Encrypt(). <br> <br> I tried following the pattern in the integration tests found in the tpm2-tools. (tpm2-tools/test/integration/fapi/fapi-encrypt-decrypt.sh)<br> <br> It basically does the following:<br> Fapi_Initialize(&global_fapi_context, NULL);<br> Fapi_Provision (global_fapi_context, NULL, NULL, NULL);<br> <br> const char * key_type = "noDa, decrypt, system";<br> char * auth_value = NULL; // no password<br> char * policy_path = NULL;<br> Fapi_CreateKey (global_fapi_context, key_path, key_type, policy_path, auth_value);<br> <br> Fapi_Encrypt (global_fapi_context, key_path, (const uint8_t*)data, size, &cipherText, &cipherTextSize);<br> <br> The files (data buffer) I need to encrypt are about 3k bytes big. <br> <br> The encryption fails because the file is too big. The error comes from <br> .../tpm2-tss/src/tss2-fapi/api/Fapi_Encrypt.c line 309:<br> <br> if (encKeyObject->misc.key.public.publicArea.type == TPM2_ALG_RSA) {<br> TPM2B_DATA null_data = { .size = 0, .buffer = {} };<br> TPM2B_PUBLIC_KEY_RSA *rsa_message = (TPM2B_PUBLIC_KEY_RSA *)&context->aux_data;<br> size_t key_size =<br> encKeyObject->misc.key.public.publicArea.parameters.rsaDetail.keyBits / 8;<br> if (context->cmd.Data_EncryptDecrypt.in_dataSize > key_size) {<br> goto_error_reset_state(r, TSS2_FAPI_RC_BAD_VALUE,<br> "Size to big for RSA encryption.", error_cleanup);<br> <br> <br> Is my strategy completely wrong? What's the proper way to do this? Is my strategy ok, but need to generate a different type of key?<br> <br> I'm new to this technology and am curious how it ought to be done.<br> _______________________________________________<br> tpm2 mailing list -- <a href="mailto:[email protected]" target="_blank" rel="noreferrer">[email protected]</a><br> To unsubscribe send an email to <a href="mailto:[email protected]" target="_blank" rel="noreferrer">[email protected]</a><br> %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s<br> </blockquote></div></div></div>