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.

[参考译文] CC2745P10-Q1:ECDH 的加密操作

Guru**** 1986165 points
Other Parts Discussed in Thread: CC2745R10-Q1, SYSCONFIG
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1446202/cc2745p10-q1-cryptographic-operations-of-ecdh

器件型号:CC2745P10-Q1
主题中讨论的其他器件:SysConfigCC2745R10-Q1

工具与软件:

为了使用 ECDH_generatePublicKey()函数、我根据文档编写了以下代码。

但是、此代码返回 ECDH_STATUS_resource_unavailable (-2)作为函数的返回值。

将值更改为密钥的值时返回相同的结果、该值应该能够生成其他密钥对。 使用时是否有问题?

""

void ecdhGenPubCallback (ECDH_Handle handle、int_fast16_t returnStatus、ECDH_Operation 操作、ECDH_OperationType OperationType)

/* LED 关闭*/
ECDH_Close (handle);
}

void * mainThread (void * arg0)

uint8_t myPrivateKeyingMaterial[curse_length]={0x00、0x00、0x00、0x00、0x00、 0x00、0x00、0x00、
                                            0x00、0x00、0x00、0x00、0x00、 0x00、0x00、0x00、
                                             0x00、0x00、0x00、0x00、0x00、 0x00、0x00、0x00、
                                             0x00、0x00、0x00、0x00、0x00、 0x00、0x00、0x01};
uint8_t myPublicKeyingMaterial[2 * curse_length + 1]={0};

GPIO_init ();

/* LED 亮起*/
GPIO_WRITE (CONFIG_GPIO_LED_0、CONFIG_GPIO_LED_ON);

//由于我们使用默认的 ECDH_Params、因此我们只需为该参数传递 NULL 即可。
ECDH_PARAMS_INIT (&PARAMS);
params.returnBehavior = ECDH_return_Behavior_callback;
Params.callbackFxn = ecdhGenPubCallback;
ecdhHandle = ECDH_open (0、&Params);
如果(!ecdhHandle){
//处理错误
}

//初始化 myPrivateKey 和 myPublicKey
CryptoKeyPlainText_initKey (&myPrivateKey、myPrivateKeyingMaterial、sizeof (myPrivateKeyingMaterial));
CryptoKeyPlaintext_initBlankKey (&myPublicKey、myPublicKeyingMaterial、sizeof (myPublicKeyingMaterial));
ECDH_OperationGeneratePublicKey_init (&operationGeneratePublicKey);

operGeneratePublicKey.curve =&ECCParams_NISTP256;
操作 GeneratePublicKey.myPrivateKey =&myPrivateKey;
OperationGeneratePublicKey.myPublicKey =&myPublicKey;
//生成 myPublicKey 的密钥材料并将其存储在 myPublicKeyingMaterial 中
operationResult = ECDH_generatePublicKey (ecdhHandle、&GeneroperationatePublicKey);

while (1)

睡眠(100);
}

}

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

    尊敬的 Kaichi:  

    首先、您是否在使用其他加密计算? 您提到的错误(有关  更多详细信息、请参阅 ECDH_STATUS_resource_unavailable)表示您尝试计算 ECDH 时硬件不可用。  

    此外,我看不到您 在 ECDH_generatePublicKey () 函数之后使用 ECDH_OperationComputeSharedSecret ()。 计算共享密钥是 ECDH_generatePublicKey()函数的 POST 条件(要了解更多信息、请参阅 ECDH_generatePublicKey 和 ECDH_OperationComputeSharedSecret)。

    请告诉我!

    谢谢!  
    Isaac

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

    尊敬的 Kaichi:  

    很抱歉响应出现延迟。 我将在本周结束时(12/06)作出答复。  

    谢谢!  

    Isaac

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

    尊敬的 Kaichi:  

    ECDH 驱动程序需要为 CC2745R10-Q1使用 HSM 模块。 请参阅随附的图片:  

    如需了解更多信息、请查看 SDK 发行说明、以及 SDK 文档文件夹中包括的 HSM 文档。  

    请将  CryptoKeyPlaintext_initKey 替换为 CryptoKeyPlaintextHSM_initKey、如果有帮助、请告诉我!

    谢谢!  

    Isaac

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

    我将 CryptoKeyPlaintext_initKey 更改为 CryptoKeyPlaintextHSM_initKey、但结果没有变化。  
    此外、我还将 CryptoKeyPlaintext_initBlankKey 更改为 CryptoKeyPlaintextHSM_initBlankKey。  

    您的环境中的此更改是否获得了正确的结果?  
    如果是、不是代码、而是 SysConfig 设置等有问题吗?
    我的 SysConfig 设置如下图所示。

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

    尊敬的 Kaichi:  

    对于延迟响应、我们深表歉意。  

    请添加预定义符号"DeviceFamily_CC27XX"和"USE_HSM"。 为此、请右键点击工程->"Properties"->"Build"->"Arm Compiler"->"Predefined Symbols"。  

    此外、在调用 ECDH_open()之前添加 ECDH_init()。 完成这些更改后、我能够成功运行您的代码。  

    谢谢!  

    Isaac

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

    您好 Isaac:

    感谢您的答复。 我已添加

    ECDH_init()并能够确认回调已返回。
    但是、returnStatus 的值为 ECDH_STATUS_ERROR (-1)、该操作不成功。

    向预定义符号中添加"DeviceFamily_CC27XX"和"USE_HSM"、是否正确、如下图所示?
    我认为我错了、因为我在编译过程中收到警告、但如何正确设置它?

    对重复的问题表示抱歉、但请做出回应。

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

    尊敬的 Kaichi:  

    我的道歉,我应该更具描述性。 输入预定义时、不需要${}。 请参见下图:  

    让我知道这是否对你有用!

    谢谢!  

    Isaac

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

    尊敬的 Kaichi:  

    此外、还有另一个澄清问题。 我在 ECDH_PARAMS_INIT 和 ECDH_OPEN 之前添加了 ECDH_INIT。 请参阅下图:  

    谢谢!  

    Isaac

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

    尊敬的 Kaichi:  

    是的、我在我的环境中运行您的代码、并且没有收到任何错误标志。 errFlag 和 operationResult 标志在代码的整个持续时间内保持为零。 我将 errFlag 和 operationResults 标志更改为全局变量、以便我可以在整个代码中执行操作。  

    现在看到错误-1、对吧? 如果在 ECDH_generatePubKey 和 ECDH_computeSharedSecret 上设置断点、会发生什么? 您能否设置一些断点、观察 operationResult 和 errFlag 变量并向我传达您看到的内容?  

    谢谢!  
    Isaac

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

    您好 Isaac:

    至于在 ECDH_generatePublicKey()完成时 operationResult 的值、在我的环境中没有问题。

     

    调用回调函数 ecdhGenPubCallback()时、参数 returnStatus 的值为-1。

     

    ECDH_computeSharedSecret()完成时的 operationResult 的值为-41。

     

    不调用 ecdhComputeShareSecCallback()的回调函数

     

    如果我缺少任何其他信息、请告知我。

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

    尊敬的 Kaichi:  

    我将于明日(12/17)作出回应。 对于延迟、我们深表歉意。  

    谢谢!  

    Isaac

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

    尊敬的 Kaichi:  

    我在最后看到相同的错误代码 这是非常特殊的,因为我找不到任何对错误代码-41的引用。 在边注上,我没有看到 ECDHGenPubCallBack ()返回-1状态。  

    我目前仍在调试问题。 感谢您对我的耐心!  

    我将在星期五(12/20)结束前提供回复。  

    谢谢!  

    Isaac

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

    尊敬的 Kaichi:  

    我还在调试这个问题。 我仍然对公钥没有任何问题。 我仍然收到-41的共享密钥。 此时共享密钥的问题与公钥的八位字节有关。 我在想  

    1.公钥有问题。 我没有看到任何问题、但您是。 我想可能有问题,但我没有观察到问题。  

    2.私人密钥材料不正确。  

    3. ECDH 驱动程序的大问题。  

    对于延迟、我们深表歉意。  

    谢谢!  

    Isaac

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

    您好 Isaac:

    感谢您的答复。  
    如果需要任何其他信息来解决此问题、请告诉我。  
    很抱歉、我们感谢您在解决该问题方面的合作。

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

    尊敬的 Kaichi:  

    由于节假日、答复被推迟。  

    出现此错误的原因是公钥(theirPublicKey)。 在您的代码中、不会收到收件人的公钥。 此外、需要将 irPublicKey 的第一个字节设置为0x04。 由于尚未执行此操作、因此会发生错误-41。 当出现无效的公钥时、状态会出现。 这意味着公钥不是以0x04开头。 如果您将0x04添加到 irPublicKey 中的字节0、则会收到-40错误。 当公共密钥大小无效时会出现此状态。  

    您是否有可以从中接收公共密钥的设备? 如果是、请填充 irPublicKey 指针、并将第一个字节(字节0)设置为0x04。  

    再次对延误深表歉意、感谢您的耐心。  

    谢谢!  
    Isaac

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

    尊敬的 Kaichi:  

    此外、ECDH 用于两个器件之间的配对过程。 ECDH 用于在两个器件之间安全共享公钥。 为了真正测试 ECDH 驱动程序是否正常工作、需要在此用例中进行配置。 如前所述、ECDH 驱动程序必须从接收器设备接收公钥、才能生成共享密钥。  

    有关配对过程的更多信息、请参阅 安全基础 SimpleLink Academy 的 LE 传统与 LE 安全连接配对部分。  

    谢谢!  
    Isaac

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

    您好 Isaac:

    我通过在 theirPublicKeyMaterial 的椭圆曲线上输入一个点来解决这个问题。
    非常感谢您长期以来的持续支持。 我真的很感激。

x 出现错误。请重试或与管理员联系。