EDA365电子论坛网

标题: arm trustzone [打印本页]

作者: baqiao    时间: 2021-5-27 15:13
标题: arm trustzone
arm的trustzone并不涉及到具体的crypto算法,只是实现:% l1 Q1 R( b+ o  b( U- a
" H$ y6 T/ _# @7 a4 a! V
  1) 敏感信息的安全存储;8 z5 R$ Q7 |- }8 e7 }

! h' _! p. s7 H$ k1 e/ h9 K4 G  2) 控制bus和debug的安全访问,保证信息不被泄露;2 V0 l: z4 ^; n, c4 [: I  B
( T; t7 _  a. W
trustzone是system_level的实现,涉及到软硬件,硬件方面包括:1 F# q/ l; X% e4 B# l
; K; q: B* F1 x7 }3 a2 P' H
  1) ARM processor;' _$ a  O/ Q1 C3 q% \+ ]
3 b6 N" j- L0 X0 T- |
  2) Bus fabric;/ @7 x1 s  k) A5 \: K
3 j" X# b/ m* |; w2 y. X# w3 s/ n
  3) system peripheral IP;
+ f: A0 c; q! U+ C' }0 m! z7 ]5 r. i. a4 r' w+ \0 l& P
硬件devices被attacked的几种方式:" O2 @# @+ A) p/ ]0 R
% ]& b: O- l% N
  1) Hack attack,通过植入病毒和木马,来执行一些非法的软件。/ Y9 n0 D* X- P) K3 [

6 e6 [* ^9 T& ^2 N  2) Shake attack,attackers可以物理访问到device,并且可以实现一些主动的动作,force pins,
" R/ S; I; `9 O# m' a. X$ a! H% E
    利用JTAG,BIST,IO boundary scan,reprogrammming memory device。. Q/ u' U( P- ?; |) x
8 R- j+ N6 F( {% j8 ?
  3) Lab attack,attackes可以通过实验室设备,实验device,在silicon的metal layer加探针等操作。  r" @  E- h3 G! ?/ F$ f
. G* U- |) z9 n8 G
    危险性极大。
# [5 v/ W0 N; \# J: o1 L$ f" Q" C& ]# e
目前硬件中常用的几种security 实现方式:; \: p6 C  p% {6 b3 d; s2 S6 e% X
, D5 H- S  X5 v
  1) 外加hardware security module,像SIM card这样。并不通用,而且成本高。% x4 C* K2 l3 M; c9 K
  j% A% S/ {+ I$ C/ L
  2) 在内部加入自己的hardware security module,security与normal world之间的数据交换复杂,因为没有形成
# `. z, z2 H# R3 s" o
; ?, I* |: q$ {; P5 L; l      一个系统的解决方案。' T% W: m( z3 @
( q3 B; o4 t! H  q) s8 w3 q
  3) software virtualization,任何带mmu的processor都可以实现,security通过hypervisor来实现,. @" W8 K. U/ ^, j( Q( {" A
8 x* o7 D8 R2 w- F8 z8 N) c
      但是对于DMA和GPU这样的master,没有解决方案。
) p% J* }" t5 H+ R0 P6 r1 Y
, S7 p( C/ Q, }' C! u. A# U
5 D3 f  [! z! T- l) v; Z5 \, W
" y; R; S. N. D& R) V% ~& |! {trustzone的硬件architecture:主要分为system achitecture,processor architecture,debug architecture! X8 b* g0 g# G; M( ~9 z, {7 b

# Q! N3 F. @3 [6 b  1) system achitecture:主要是指,bus中已经包含security signal,memory也可以通过增加一根security的信号,来物理上将
1 [+ V; K: P; L' k* N- n2 a$ V7 T6 Y3 t, ?$ a" j0 P8 S
      硬件bus系统隔绝为两个world。4 E4 s8 \# T: t& \( X6 F
$ Q- o0 T* I6 Y) T2 y8 C1 X# U
  2) Processor architecture:: V. W' p; ]) q9 K* R# _- ~# U
- ~- q: i+ j4 @3 L' c, E
      arm-a9之后的processor都直接支持secure,两个virtual processor,之间切换,只能通过
& z: j/ w0 l- Q, o
- ]5 s3 ~2 z/ H) ?+ R2 L* b6 S4 v        指令SMC(Secure Monitor Call),或其他的一些exception,IRQ,FIQ,external Data Abort,external Prefetch Abort/ p3 r* `' y6 i3 s  v" w
. o) F- L" u* P" B: j( ^
        当前的processor处在secure还是non-secure,通过coprocessor,CP15中的寄存器SCR(Secure Config Reg)来表示,
1 d& Y- }! j0 C& H- F
' C5 y& _" a. h, ?9 X9 I4 B3 z        其中有一个NSbit,当processor处在monitor状态时,该状态位无效。
* G! C) N: \( y2 q1 y" p1 i: N6 u, n3 S
      mmu,支持secure扩展,可以看做是两个virtual mmu,其中的TLB(Translation Lookaside Buffers),可以同时包含secure和- [' c1 j5 v" A! q9 l
# s3 [; k7 {* ?% n
        non-secure,在切换时,也不需要切换。) v* _1 E9 J9 E8 I5 V3 {

' l+ ]% t% |2 f4 n% V      cache,加入secure特性的扩展后,world switch时,不需要再进行cache flush,任何non-lockdown的cache line都可以被evict,
) g8 Y1 B9 _4 t8 Q- T& ^1 V- P4 C9 ^5 O$ C" a
        与security属性无关,也就是说,secure的cache line可以被evict,为non-secure cache line加载。
, v- p- y2 G% A0 e0 b5 d' a3 f+ s2 c, q( \* t! }
      interrupt,secure的interrupt,的很多控制寄存器,如mask,enable,clear,必须是由security world来访问。
1 M4 s: Q1 V( W0 Q, i& N0 m) H* c% ?1 |9 O
        推荐实现,IRQ应用在normal world,FIQ应用在secure world,monitor状态下,所有的irq被mask掉。
, a/ K( \: w, L( g- g) v7 S0 H4 s1 a3 d/ X1 f
      exception vector,支持TZ的proceesor的有三组exception vector tables,分别是normal world,secure world,
2 c% \/ H* s# u8 {/ n9 g* J: G1 w7 D' W7 u
        Monitor mode。各个基地址,可以通过CP15中的VBAR(Vector Base Address Register)
2 x5 u* O4 `1 t3 t
4 s2 Q, ?; q: S( p& v" ?  G      Multiprocessor system,主要分为SMP(Symmetric Multi-processor),AMP(Asymmetric Multi-processor),主要影响0 @2 Q* w( V/ H6 G+ v
& I( [' D3 y& a5 q* }, ]# \- s2 p1 a0 T
        在于软件,AMP结构中,软件调度更加复杂,% h+ R9 z3 Z4 f) K
4 l- {# e6 v  D: t+ @$ u+ Q' C9 j
  3) Debug architecture:可以分为processor debug components和system debug components。
0 O) D1 G# @; d2 f2 u2 [% f( y9 x4 y
      processor debug:针对secure和privilege加入了更多的enable控制信号,
0 C6 s7 j, P/ s: q# y! E+ C6 m; E8 \2 s
        Secure privilege invasive debug(JTAG),SPIDEN signal' l8 K# E% U2 P7 i0 u9 f

8 O* A4 i' L$ b/ G) r        Secure privilege non-invasive debug(trace),SPNIDEN signal
+ x% S: ]! O* F; s' V2 C
5 f; E% f4 q7 p8 j) D: W& X        Secure user invasive debug,SUIDEN signal
* M. A2 e, l% v7 s8 v! w: y
/ r) u  W8 j5 D$ q/ r" T  u        Secure user non-invasive debug,SUNIDEN signal
1 A+ W7 X) j, q
* H& X% o2 ?- J) ^: L8 n          secure debug只有在确认安全的环境下,才能打开
3 m1 ?. |: T7 P# c& k' L8 v2 N9 Z* K1 m. v
        global的enable信号:
! p9 o! n0 `, C% ~6 ^( `/ u8 v& G: j  @# x1 N* o* j
        global invasive debug mode,DEGEN
: Q" X7 S3 e: s8 p7 L2 q* X* a% ~, f3 v8 {0 P. [, B
        global non-invasive debug mode,NIDEN. d3 H- n, F4 Q, `8 u: n) S# j# V
6 g1 f9 {! A% \- h- z" w
        对于multiprocessor debug control,每个cluster中的每个processor都有这些control signal。
! b& e; E  F  Z& a- L7 o4 ^/ I: S' f, j9 L; d8 [
        armv7之后,每个processor内部都有PMU(performance Monitor Unit),内部counter记录processor执行+ o! _% V) p$ J2 ?7 L, K
. C: c, G, v  `2 h
          指令中的各个状态,如cache line evictions等,可以通过CP15的设置,来防止被non-secure非法看到0 X( e  n7 @7 X9 F2 `& ~3 ]4 i5 K
& p7 d$ [  j7 l3 K1 G4 D
      system debug:通过arm的coresight来保证,' H& S6 ^# f. Z) B

$ g1 h" H! I/ b4 C9 S
, [9 `* E# i. Y
6 c3 m' c$ b( y# u6 m8 warm提供的支持TrustZone的hardware的IP;6 l7 t% T- Q" n; y" M9 V
- Q1 {! H& S* j* [, Q
  1) TrustZone Protection Controller(TZPC),主要实现对各个peripheral的secure的动态权限设置。再通过bus发送过来的状态,来
* r+ A/ y6 K( r" C2 A" j. f8 k3 j. A) L- v6 u/ X# E, W$ N
      判断,该笔操作是否合法。2 C1 W! O$ C5 ]9 I* l, ~1 n
+ J7 E, o" j" ]+ X6 X' D" _1 r5 e
      
5 m3 V# u  o. E. ^
" c. r" z* b+ I  2) TZASC(TrustZone Address Space Controller),典型应用是将区分同一个AXI slave,比如chip外的DRAM,只挂载一个,2 K, t3 {6 Q1 V8 C

& Y0 \8 E; h& b' Y    但是我们可以将其地址空间分为一半secure,一半non-secure6 ^0 r' W) G( c
; v; r. V2 j/ |1 P6 l) r1 a
  3) 其他的常用组建,Cache Controller,DMA Controller,interconnect,GIC6 d$ x0 X2 ]6 _% s/ b& M
1 [- d& h* Q6 E: ]) ~2 X
7 Y4 [0 D2 Z  i( F4 w

( u2 k% c) n4 g2 ]TrustZone Software achitecture:软件的实现方式比较灵活,最复杂的是在Secure World单独运行自己的OS(AMP结构),
! }$ P3 z) C# @- {
! [; @2 E2 t4 b/ ]/ e. |8 W    最简单的是在Secure World,中使用一个标准的lib(SMP结构)。
1 w2 N+ @  ?4 ]+ ^5 [0 [1 \* ?' O3 U0 S) \2 W) p

; D( v0 G5 U( e5 t# M" w( p$ D, |& E! S: N
  在一个secure system中,boot是信任链的最底层,是最重要的一部分,TrustZone要求,boot都是开始自Secure World。
0 Y- ?+ n. ~# I1 a# h4 F7 f% [, v+ k) l, B5 Z; [1 Z; F+ R
    . [. p& ]' u7 Y
4 [( s) `; P4 V. j
  secure boot之后,需要加cryptographic checks对bootload进行检查,算法一般选择RSA-PSS,公钥和golden签名也都保存在
  o) T- P6 X; r/ ]
5 o3 Y7 |4 ]0 f0 x+ U    device中,boot的时候,进行验证。2 d) |! S/ Q$ ~% c3 [6 w

0 F( w' n, f2 p$ O' u - S% F# ]6 {3 ^, ]6 K6 N2 }' |
: k+ Z/ @& v2 Q$ ]8 j
在进行secure world的切换时,从secure到non-secure,可以直接修改CPSR寄存器,直接进行world的切换,3 o4 D) T* _  S* i6 g

" [" P- V+ G2 Y如果processor中带有NEON,VFP这样的coprocessor reg,进行context-switching,可以选择Lazy context switch,% G4 L1 v2 _8 F* `

5 {- w' h7 A) e6 K4 Z  @  B' P, o+ ]2 O : S1 I5 D1 }  r- M# C/ S+ B0 e

  l/ f' m1 X, c( d: G6 ^AARCH64架构中的secure结构:; L- `7 b8 Z5 |: P5 J) B
6 Y" r8 w; `4 b/ U6 f/ y( e1 j
    9 B: O: U7 o9 U7 F! c

( l, _7 X1 k4 y4 T在软件应用中,secure和normal的interaction:, x8 @9 k2 ^4 O6 |' ?+ D2 {

0 N+ ]  r/ {- n    1 V; u5 P3 T5 G1 u7 i& p4 S

* @) N/ B: `% D, r+ h. e# ?  在软件切换过程中,有一个问题时,secure world的执行,可能会打断normal world的interrupt,
9 C8 s8 Q: J. [" t, X, L: T6 p9 e- X8 v
) V* d! r# }3 Q    所以,一般要求secure world使用FIQ。
! o& u2 O$ [8 X+ d, g
3 y7 [1 R* A$ Z& M在armv7的AARCH32架构中,secure model与AARCH64是不同的,secure os执行在EL3,所以为了AARCH3和AARCH64能够保持统一,( E0 z" m" u2 _% t7 g/ ^6 T8 B

7 T3 [7 {; o  C, O7 J    需要secure os在secure状态下,和non-secure状态下的TTBR1_EL1不同,
作者: youOK    时间: 2021-5-27 17:02
arm trustzone
作者: sdkangbaz    时间: 2021-5-27 17:07
与security属性无关,也就是说,secure的cache line可以被evict,为non-secure cache line加载
作者: xiaogegepcb    时间: 2021-5-27 17:10
arm trustzone




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2