MianQi 发表于 2020-12-16 10:20

【NUCLEO-L552ZE测评】-1: Start from TrustZone

<div class='showpostmsg'> 本帖最后由 MianQi 于 2020-12-21 17:32 编辑

<p>按照STM32 L5系列的介绍,这款芯片的最大亮点是启用了M33内核,最显著的特色是TZ(TrustZone)的出现。</p>

<p>&nbsp;</p>

<p>TrustZone,我把它译作:可信区。这是一种STM32提供的安全(secure)机制,但是,对这里所说的&ldquo;安全&rdquo;要有正确的理解。我的理解是:&ldquo;安全&rdquo;分框架安全和内容安全。内容安全,说的是私密性,靠加密实现&mdash;&mdash;无论软件或硬件加密;框架安全,说的是健壮性,靠隔离(isolate)实现,至少STM32在M33的TrustZone里是这么做地。</p>

<p>&nbsp;</p>

<p>那所谓的&ldquo;隔离&rdquo;是什么意思呢?它指的是,一个系统里有确定的部分,有不太确定或者不确定的部分。确定的部分指的是常规的、通用的、已经定形了的部分,基本上可以认为是没有bug地;不确定的部分指的是实验或者试验性质的、有可能是拷贝(fork)来的,可能含有bug地。对这两部的&ldquo;隔离&rdquo;,意味着,可信区的对象可以访问或者调用不可信区的对象,反之不行,类似于硬件电路里的基于二极管的极性保护(个人理解)。</p>

<p>&nbsp;</p>

<p>那可信区与不可信区由谁来划分呢?用户。</p>

<p>&nbsp;</p>

<p>下面通过一个例子来演示一下TZ(TrustZone)的用法。需要说明的是,我是在Ubuntu 20.04.1 LTS上运行STM32CubeIDE,这里的界面布局跟Windows版有很大的不同,我将逐一用截图显示每一步的设置在哪里。</p>

<p>&nbsp;</p>

<p>首先看一下,在Ubuntu上安装了STM32CubeIDE之后的icon界面:</p>

<p></p>

<p>&nbsp;</p>

<p>启动IDE:</p>

<p></p>

<p>&nbsp;</p>

<p>初次运行STM32CubeIDE的预安装界面:</p>

<p></p>

<p>&nbsp;</p>

<p>新建一个STM32项目:</p>

<p></p>

<p>&nbsp;</p>

<p>选板子:</p>

<p></p>

<p>&nbsp;</p>

<p>最下边一个:</p>

<p></p>

<p>&nbsp;</p>

<p>这个时候要把板子插上:</p>

<p><br />
设置项目名称和工程路径:</p>

<p></p>

<p>&nbsp;</p>

<p>注意:勾选&ldquo;Enable TrustZone&rdquo;:</p>

<p></p>

<p>&nbsp;</p>

<p>下载固件:</p>

<p></p>

<p>&nbsp;</p>

<p>初步设置完成:</p>

<p></p>

<p>&nbsp;</p>

<p>设置GPIO:</p>

<p>在GPIO中选择&ldquo;show all&rdquo;,才会出现PG8/PG7:</p>

<p></p>

<p>&nbsp;</p>

<p>在&ldquo;Connectivity&rdquo;中选择&ldquo;LPUART1&rdquo;:</p>

<p></p>

<p>&nbsp;</p>

<p>设置为&ldquo;Cortex-M33 non secure&rdquo;:</p>

<p></p>

<p>&nbsp;</p>

<p>将设置为:Asynchronous,波特率设置为:115200。(这个时候要注意输入法的切换,如果还是汉语输入,将会是:115200)</p>

<p></p>

<p>&nbsp;</p>

<p>在&ldquo;Clock Configuration&rdquo;中,将APB1配置为55MHz。注意是peripheral clocks,而不是Timer clocks.</p>

<p></p>

<p>&nbsp;</p>

<p>在&ldquo;Secutity&rdquo;中配置&ldquo;GTZC&rdquo;:</p>

<p></p>

<p>&nbsp;</p>

<p>上述的截图位置跟windows下几乎都不相同(这里假设示例中的截图取自windows版的STM32CubeIDE)但是功能的设置是完全一样地&mdash;&mdash;当然还有一处不同,就是当我参照这个教程的时候(https://www.stmcu.com.cn/ecosystem/chip/chipfamily-STM32L5-4),最后一步是&ldquo;EXTI 14 line 14 interrupt&rdquo;,而不是&ldquo;13&rdquo;。</p>

<p></p>

<p>&nbsp;</p>

<p>在&ldquo;NVIC Settings&rdquo;中设置&ldquo;Global TrustZone controller global interrupt&rdquo;使能:</p>

<p></p>

<p>&nbsp;</p>

<p>接下来的一部出现了问题:示例中用的是&ldquo;EXTI line 13 interrupt&rdquo;,而在我这里的界面中只有&ldquo;EXTI line 14 interrupt&rdquo;&rdquo;:</p>

<p></p>

<p>实际上,这是我这里的测试中发现的唯一一处跟示例中真正的不同,对接下来代码的使用有什么影响,且看下一帖:【NUCLEO-L552ZE测评】-2:&nbsp; Stay in TrustZone。</p>

<p>&nbsp;</p>

<p>在现有的状态下点击生成代码:</p>

<p></p>

<p>&nbsp;</p>

<p>这是现在的项目目录:</p>

<p></p>

<p>&nbsp;</p>
</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

okhxyyo 发表于 2020-12-28 10:48

<p><strong><a href="https://bbs.eeworld.com.cn/elecplay/content/153" target="_blank">ST新品NUCLEO-L552ZE-Q(Cortex-M33)</a></strong></p>

<p>汇总贴:<a href="https://bbs.eeworld.com.cn/thread-1152571-1-1.html" target="_blank">https://bbs.eeworld.com.cn/thread-1152571-1-1.html</a></p>

freebsder 发表于 2020-12-29 22:40

<p>trustzone 听着很安全,没用过,不知道麻不麻烦难不难。</p>

MianQi 发表于 2020-12-30 07:54

<p>从目前了解的情况来看,不麻烦,也不难,但对于这个&ldquo;安全&rdquo;的认识要恰如其分&mdash;&mdash;这里说的&ldquo;安全&rdquo;,有限度的&ldquo;分隔&rdquo;,而非&ldquo;加密&rdquo;。&ldquo;分隔&rdquo;通过硬件实施,用软件设置,在使用的过程中可以动态调用。</p>
页: [1]
查看完整版本: 【NUCLEO-L552ZE测评】-1: Start from TrustZone