This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC2745R10-Q1:关于 AESCBC_oneStepDecrypt

Guru**** 2551110 points
Other Parts Discussed in Thread: CC2745R10-Q1, SYSCONFIG

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1566046/cc2745r10-q1-about-aescbc_onestepdecrypt

器件型号:CC2745R10-Q1
主题: SysConfig 中讨论的其他器件

工具/软件:

您好:

我的环境如下:
板:CC2745R10-Q1
调试器:XDS110
SDK:SimpleLink Lowpower f3 ver.9.10.00.83
IDE:IAR Embedded Workbench for ARM 9.60.3.7274

查看 SDK 源代码、它仅处理密钥编码 CryptoKey_明文_HSM 或 CryptoKey_keystore _HSM。

这是否意味着除非密钥存储在 HSM 中、否则不能进行 CBC 解密?

是否可以使用 PSA 存储中存储的密钥(寿命为 keystore _PSA_key_lifety_persistent)执行 CBC 解密?

另外、您能告诉我如何启用 ENABLE_KEY_STORAGE(SysConfig 设置?)吗?

※如果密钥编码为 CryptoKey_keystore HSM、则必须在编译软件中启用 ENABLE_KEY_STORAGE。

此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    1) 正确、在 CC27XX 和 CC35XX 系列电路板上、AESCBC 加密和解密需要将密钥存储在 HSM 中。 这可以通过调用来实现 CryptoKeyPlainetxtHSM_initKey 而不是  CryptoKeyPlainetxt_initKey

    2) 使用 PSA API 初始化密钥时、可以使用  KEYSTORES_PSA_initKeyHSM 该函数将使用创建一个密钥  CryptoKey_keystore _HSM 进行解码。 AESCBC_OneStepDecrypt 函数接受此编码。

    3) 根据 用户指南、只需在 SysConfig 中添加一个 PSA 加密+密钥库模块就足以支持使用这些函数。

    HSM、PSA 和加密是棘手的主题、我邀请您阅读有关 密钥库 和 PSA 的用户指南一章 、以获取有关如何使用这些 API 的更多指导。

    此致、
    Maxence

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:

    1) 是否有办法使用 CryptoKey_keystore 编码(使用 keystore _PSA_initKey 初始化密钥)来解密 AESCBC?
    如果是、请告诉我如何操作。
    未来的 SDK 版本是否支持 CryptoKey_keystore 编码?

    2)3)

    下面是使用 keystore PSA_initKeyHSM 函数进行 AESCBC 解密的测试代码。

    static void vos_CBC_test( void )
    {
        KeyStore_PSA_KeyFileId      stt_keyID;
        KeyStore_PSA_KeyAttributes  stt_attributes = KEYSTORE_PSA_KEY_ATTRIBUTES_INIT;
        AESCBC_Operation     stS_CryptIf_AESCBC_Operation;
        CryptoKey            stt_CryptoKey;
        AESCBC_Handle        psts_AesCbcHandle;
        int_fast16_t s2s_status;
    
        uint8_t au1s_Key[16] = {0x06, 0xa9, 0x21, 0x40, 0x36, 0xb8, 0xa1, 0x5b, 0x51, 0x2e, 0x03, 0xd5, 0x34, 0x12, 0x00, 0x06};
        uint8_t au1s_iv[16] =  {0x2f, 0xe2, 0xb3, 0x33, 0xce, 0xda, 0x8f, 0x98, 0xf4, 0xa9, 0x9b, 0x40, 0xd2, 0xcd, 0x34, 0xa8};
        uint8_t au1s_In[16] =  {0x47, 0x48, 0x7F, 0xAC, 0x8f, 0xa4, 0xfa, 0x72, 0x9B, 0xB7, 0xC6, 0x62, 0x36, 0x1a, 0x51, 0x94};
        uint8_t au1s_Out[16] = {0};    
        
        s2s_status = KeyStore_PSA_init();
        if (s2s_status != KEYSTORE_PSA_STATUS_SUCCESS)
        {
            while(1);
        }
    
        s2s_status = HSMLPF3_provisionHUK();
        if (s2s_status != HSMLPF3_STATUS_SUCCESS)
        {
            while(1);
        }
        
        GET_KEY_ID(stt_keyID, KEYSTORE_PSA_KEY_ID_USER_MIN);
        KeyStore_PSA_setKeyId(&stt_attributes, stt_keyID);
        KeyStore_PSA_setKeyType(&stt_attributes, KEYSTORE_PSA_KEY_TYPE_AES);
        KeyStore_PSA_setKeyUsageFlags(&stt_attributes, KEYSTORE_PSA_KEY_USAGE_DECRYPT);
        KeyStore_PSA_setKeyAlgorithm(&stt_attributes, KEYSTORE_PSA_ALG_CBC_NO_PADDING);
        KeyStore_PSA_setKeyLifetime(&stt_attributes, KEYSTORE_PSA_KEY_LIFETIME_FROM_PERSISTENCE_AND_LOCATION(KEYSTORE_PSA_KEY_PERSISTENCE_DEFAULT, KEYSTORE_PSA_KEY_LOCATION_HSM_ASSET_STORE));
        KeyStore_PSA_setKeyBits(&stt_attributes, 128);
        /* Import the keyingMaterial */
        s2s_status = KeyStore_PSA_importKey(&stt_attributes, au1s_Key, (size_t)16, &stt_keyID);
        
        AESCBC_init();
        s2s_status = KeyStore_PSA_initKeyHSM( &stt_CryptoKey, stt_keyID, (size_t)16, NULL );
        if (s2s_status != KEYSTORE_PSA_STATUS_SUCCESS)
        {
            while(1);
        }
    
        psts_AesCbcHandle = AESCBC_open(0, NULL);
        
        AESCBC_OneStepOperation_init( &stS_CryptIf_AESCBC_Operation );
        stS_CryptIf_AESCBC_Operation.key               = &stt_CryptoKey;
        stS_CryptIf_AESCBC_Operation.input             = (uint8_t*)au1s_In;
        stS_CryptIf_AESCBC_Operation.output            = (uint8_t*)au1s_Out;
        stS_CryptIf_AESCBC_Operation.inputLength       = sizeof(au1s_Out);
        stS_CryptIf_AESCBC_Operation.iv                = (uint8_t*)au1s_iv;
            
        s2s_status = AESCBC_oneStepDecrypt( psts_AesCbcHandle, &stS_CryptIf_AESCBC_Operation );
        
        AESCBC_close(psts_AesCbcHandle);
        
        if(s2s_status != AESCBC_STATUS_SUCCESS)
        {
            while(1);
        }
    }
    

    当我调试它时、我发现 ENABLE_KEY_STORAGE 被禁用、因此显示错误消息 AESCBC_STATUS_FEATURE_NOT_SUPPORTED、代码被终止。
    请告诉我如何解决此问题。

    SysConfig 设置如下:

    此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    目前无法 通过使用 KEYSTORES_PSA_initKey 初始化密钥来使用 CryptoKey_keystore 编码来实现 AESCBC、并且我们未来没有支持它的计划、因为我们希望仅使用 PSA API。

    我正在研究如何启用  ENABLE_KEY_STORAGE。 据我所知、这些文件会预编译成.a 文件、然后链接到您的工程。  除非重新构建库、否则手动定义 ENABLE_KEY_STORAGE 不会改变任何操作。 如果您要寻找 AESCBC 解密的示例、可以查看  C:\ti\simplelink_lowpower_f3_SDK_9_11_00_18\examples\rtos\LP_EM_CC2745R10-Q1\drivers\aescbc 示例。

    此致、
    Lea

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:

    我知道我需要重新构建库文件来启用 enable_key_storage、但我该如何操作?

    我的环境如下:
    板:CC2745R10-Q1
    调试器:XDS110
    SDK:SimpleLink Lowpower f3 ver.9.10.00.83
    IDE:IAR Embedded Workbench for ARM 9.60.3.7274

    我是否应该将 enable_key_storage 定义添加到下的 Makefile 和 imports.mak 文件

    TI\simplelink_lowpower_f3_SDK_9_10_00_83

    还是应该将 enable_key_storage 定义添加到以下文件夹下的 cmake 文件中?

    TI\simplelink_lowpower_f3_SDK_9_10_00_83\source\cmake\components\IAR

    此致、