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.

[参考译文] CC3220SF:具有 NWP 密钥存储的 ECDH 或 ECIES

Guru**** 2573695 points


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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/870303/cc3220sf-ecdh-or-ecies-with-nwp-key-storage

器件型号:CC3220SF

您好!

我想使用 NWP 安全密钥存储(包括器件唯一密钥)进行解密。 如果我的应用处理器从不能访问密钥材料、那么它非常适合通过设计提供安全性。

我知道加密内容交付方法。 问题是 CC32xx 未在客户所在的位置连接到互联网(例如、它处于 AP 模式/产品功能不需要互联网连接)。 因此、我必须反转 EC 加密方案、在该方案中、我需要离线生成临时密钥、然后加密到器件唯一的公钥(我可以在出厂编程时保存)、然后将加密数据发送给客户、以便通过某种离线方法进行安装。

为此、我需要使用 NWP 的私钥运行 ECDH 共享密钥生成算法、或在永久安装的密钥或器件唯一密钥上运行 ECIES (例如通过加密内容文件写入 API)。 我该怎么做?

谢谢、

Balazs

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

    Balazs、

    尝试了解用例易碎位:您希望使用设备唯一密钥对创建一种脱机安全内容交付的方法。 从某种意义上讲、您可以将设备的公钥下载到 PC、然后在将来的某个时候、如果您需要使用公钥传输要加密的数据、请将数据放在 SD 卡上、 设备是否已读取加密数据并使用私钥进行解密?

    BR、

    Vince

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

    是的、这与预期用例非常匹配。

    谢谢

    Balazs

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

    Vince、

    您是否对如何支持此用例有任何建议?

    谢谢、

    Balazs

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

    Balazs、

    是的、我认为这应该是可能的。 我尚未对此进行测试、因此请告诉我您是否遇到问题:

    首先获取公钥/证书- http://www.ti.com/lit/ug/swru455h/swru455h.pdf 第17.1.1.4节(密钥索引0是内部私钥)

    使用此加密数据-使用 OpenSSL 或您喜欢的任何设备

    第三步将此数据发送到应用程序内核、并使用安全内容交付特殊标志来保存文件(第17.2.1节)。

    第4次正常打开文件并检查数据是否正确。

    请告诉我您的测试是如何进行的!

    BR、

    Vince

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

    我尝试测试了这个。 我可以获取设备唯一密钥的公钥、我安装的任何密钥或临时密钥。

    我使用 GenerateSecureDeliveryContent.sh 来制作下载二进制文件。 一个问题是导致此脚本有时创建不正确的加密的错误、因为密钥异或代码有时在半字节前导零时会忘记这些半字节。 FIX 如下所示、需要修改四行代码:  

    key+=`printf '%08x'"$(${T1}^${T2})"`
    

    我遇到的下一个问题是、当使用加密内容交付打开文件时、文档引用了 API 中不存在的语法。 在第17.2.1节中、代码是

    secAccessFlags = sl_FS_file_mode_open_create (fpInSize、sl_FS_file_download_secured_content); 

    但在 CC3220 SDK 中、sl_FS_file_mode_open_create 和 sl_FS_file_download_secured_content 都不作为宏存在。 正确的代码似乎是:

    secAccessFlags = SL_FS_create | SL_FS_CREASE_MAX_SIZE (fpInSize)| SL_FS_WRITE_encrypted; 

    下一个问题是、在此 API 中、无法引用我要用于解密的密钥的 Objid。 此外、在加密文件格式中、没有参考文件加密的公共密钥。 这意味着 NWP 无法猜测解密文件所需使用的8个密钥中的哪一个。 任何一对 ECDSA 密钥都可以创建有意义的 ECDH 密钥、该密钥将变为有意义的 IV 和 AES 密钥、从而将加密的有效载荷转换为一些纯文本和 SHA256值。

    我在实践中尝试这种方法的经验是、我可以写入加密的有效负载、而在尝试关闭文件时、我会得到错误-10304

    #define SL_ERROR_FS_SECURE_content_integration_failure           (-10304L)

    这大概意味着解密的 SHA256值与解密的内容不匹配。 换言之、使用了错误的 AES 密钥或计算了错误的 ECDH 机密。

    我发现在以下两种情况下都会生成此错误:

    1) 1)请勿安装任何 ECDSA 密钥(仅存在密钥0 /设备唯一密钥)、加密到密钥0公共密钥。

    2) 2)将永久密钥安装到插槽1中、加密到永久安装密钥的公钥。

    我发现唯一不会产生此错误的情况是创建临时密钥、然后在不重新引导的情况下传输公钥、对该公钥进行加密、然后写入生成的加密负载、即原始记录方法。

    如果在我打开文件以进行加密传输时有一个 API 来选择对象 ID (密钥插槽)、我认为这将解决问题。 这也有助于了解测试2)不起作用的原因。

    谢谢

    Balazs

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

    [见下文的答复]

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

    Balazs、

    您的观察结果是正确的。 使用密钥索引1的安全内容交付。 它要求用户创建时间密钥、并使用此密钥对执行此安全内容交付。  

    我建议不要将安全内容交付流程用于您尝试执行的操作。 这种方法涉及 sflash 加密、正如您所看到的、您将无法使其按预期工作。

    相反、请使用加密引擎在应用处理器上键入数据、然后对该数据执行您想要的任何操作(创建新的安全文件、解析数据等)。

    查看我们的 TI 驱动程序文档和软件,查找 API CryptoCC32XX_encrypt()和 CryptoCC32XX_decrypt ()

    BR、

    Vince  

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

    Vince、

    感谢您的确认。 滚动我们自己的加密是我目前正在做的事情。 我想切换到基于 NWP 的加密、因为更强大的安全模型使我无法访问应用程序的加密密钥。

    谢谢、

    Balazs