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.

求助!加密版C6748的Nandflash启动问题

尊敬的TI工程师,

您好!

我们公司的产品也要用NandFlash进行Secure Boot,目前正在搞这一块,也折腾了好几天了。看了之前论坛上的回答,还有有些没搞明白。希望得到您的指教 。

因为文字较长,为了能够精确地进行交流,我将问题分解成了许多小问题。给您添麻烦了!

Q1:所以如果要用NandFlash进行Secure Boot,应该的步骤是:

Step1. 用SecureHexAIS_OMAP-L138.exe这个工具,生成Secure AIS文件。其中,CEK放在ini里,并且启动的配置(如PLL、DDR、PSC等的配置)也是放在ini里,而不像Nosecure AIS那样,是直接在AIS文件里的。Q1.1:STEP1对吗?

Step2. 用GenericSecureUartHost.exe这个工具,解锁JTAG,并在CCS中加载Nand Writer程序。Q1.2:STEP2对吗?

Step3. 用Nand Writer程序将Secure AIS文件烧写到Nandflash中。此时,Nandflash中的Key Header是未经过KEK加密的。Q1.3:STEP3对吗?

Step4. 用GenericSecureUartHost.exe这个工具,加载一个自己写的程序。该程序从UART启动,读取head,调用ROM的API将head的CEK用KEK加密后再写回NAND。此时,Nandflash中的Key Header是经过KEK加密的。Q1.4:STEP4对吗?

Q2:我不太理解,虽然Step4,用KEK加密了CEK。但是Nandflash中的AIS文件的剩余部分,就是除了Key Header的其他部分,并没有用KEK加密啊。Q2.1:对吗?

        在Step1中,SecureHexAIS_OMAP-L138.exe用来生成Secure AIS文件。但是该工具并没有办法利用具体芯片上的KEK进行加密。

        难道是SecureHexAIS_OMAP-L138.exe仅仅用CEK对整个AIS文件进行加密,而KEK的唯一作用是对Key Header进行加密,从而隐藏CEK?Q2.2:对吗?

        那么如果别人知道CEK的话,就可以直接对Secure AIS的剩余部分进行解密。Q2.3:对吗?

        或者如果别人知道KEK的话,就可以对Key Header进行解密,从而获得CEK,从而再对Secure AIS的剩余部分进行解密。Q2.4:对吗?

Q3:我们希望产品的代码收到严格保护,另一方面,又希望产品的固件能够远程升级。

       我们系统的架构是C6748+CC2541,两者通过SPI进行通信,CC2541提供蓝牙与手机进行通信。希望通过手机将新的DSP固件更新至DSP的nandflash。并且使用Basic Secure Boot来保障新的固件的安全。

       我想了很久,觉得这似乎办不到。远程升级的话,如果还想加密固件,就得把CEK发过来,CEK总归要先显示地写入到Nandflash中(此时CEK就暴露了),再去调用API将Key Header加密。Q3.1:您看是这样吗?

       Q3.2:如果要同时实现DSP固件更新和Basic Secure Boot,您有什么建议?


       Secure Boot及远程升级对我们产品至关重要,麻烦TI的工程师给予帮助。

       非常感谢!

Frank

  • Feng Xu3 说:
    Step1. 用SecureHexAIS_OMAP-L138.exe这个工具,生成Secure AIS文件。其中,CEK放在ini里,并且启动的配置(如PLL、DDR、PSC等的配置)也是放在ini里,而不像Nosecure AIS那样,是直接在AIS文件里的。Q1.1:STEP1对吗?

    啥意思?  ini只是配置文件,转换后,ini里的配置放到ais文件里了。非secure的也有命令行方式的AIS转换工具,一样是通过ini文件配置的,最终都是AIS文件。

    Feng Xu3 说:
    Step2. 用GenericSecureUartHost.exe这个工具,解锁JTAG,并在CCS中加载Nand Writer程序。Q1.2:STEP2对吗?

    对。

    Feng Xu3 说:
    Step3. 用Nand Writer程序将Secure AIS文件烧写到Nandflash中。此时,Nandflash中的Key Header是未经过KEK加密的。Q1.3:STEP3对吗?

    对.

    Feng Xu3 说:
    Step4. 用GenericSecureUartHost.exe这个工具,加载一个自己写的程序。该程序从UART启动,读取head,调用ROM的API将head的CEK用KEK加密后再写回NAND。此时,Nandflash中的Key Header是经过KEK加密的。Q1.4:STEP4对吗?

    对。

    Feng Xu3 说:
    Q2:我不太理解,虽然Step4,用KEK加密了CEK。但是Nandflash中的AIS文件的剩余部分,就是除了Key Header的其他部分,并没有用KEK加密啊。Q2.1:对吗?

    对.

    Feng Xu3 说:
      难道是SecureHexAIS_OMAP-L138.exe仅仅用CEK对整个AIS文件进行加密,而KEK的唯一作用是对Key Header进行加密,从而隐藏CEK?Q2.2:对吗?

    对.

    Feng Xu3 说:
    那么如果别人知道CEK的话,就可以直接对Secure AIS的剩余部分进行解密。Q2.3:对吗?

    CEK是你自己设定的,只有你知道。

    Feng Xu3 说:
          或者如果别人知道KEK的话,就可以对Key Header进行解密,从而获得CEK,从而再对Secure AIS的剩余部分进行解密。Q2.4:对吗?

    KEK没人会知道,每个芯片不一样,只有在secure mode时调用API才能访问到它对CEK加密,而不能直接读出KEK的值。

  • Feng Xu3 说:

    Q3:我们希望产品的代码收到严格保护,另一方面,又希望产品的固件能够远程升级。

           我们系统的架构是C6748+CC2541,两者通过SPI进行通信,CC2541提供蓝牙与手机进行通信。希望通过手机将新的DSP固件更新至DSP的nandflash。并且使用Basic Secure Boot来保障新的固件的安全。

           我想了很久,觉得这似乎办不到。远程升级的话,如果还想加密固件,就得把CEK发过来,CEK总归要先显示地写入到Nandflash中(此时CEK就暴露了),再去调用API将Key Header加密。Q3.1:您看是这样吗?

    flash中的内容分为KEK加密的CEK head,和用CEK加密的image. 如果CEK不更改的话,那么每个芯片的加密head是不需要变的,所以在远程更新时,只需要把head之外的CEK加密的image更新的目标flash就行了,所以不需要暴露CEK。

    加密的head是出厂时把CEK加密好写一次就行了。

    Developer encrypted code/firmware can be easily upgraded in the field
    Handled by the developer application
    Possible steps for firmware upgrade:
    1.Developer creates a new encrypted image using the developer key in a secure facility
    2.Developer application running on this device in the field acquires this new image through the available connectivity options (e.g. Ethernet)
    3.Developer application overwrites the existing developer code with the new image on the flash
    From the next boot cycle the new image will be successfully unencrypted and used
  • Hi Tony Tang,

        非常感谢回复。我明白了。

        请问这一段,出自哪个文档?

    “•Developer encrypted code/firmware can be easily upgraded in the field

    •Handled by the developer application
    •Possible steps for firmware upgrade:
    1.Developer creates a new encrypted image using the developer key in a secure facility
    2.Developer application running on this device in the field acquires this new image through the available connectivity options (e.g. Ethernet)
    3.Developer application overwrites the existing developer code with the new image on the flash
    •From the next boot cycle the new image will be successfully unencrypted and used”
       谢谢!
    Frank
  • 这是总结,不是正式文档。