|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
ARM的trustzone并不涉及到具体的crypto算法,只是实现:5 N) q- R: ?0 S1 M
% P$ Y- t& l6 s2 R z% F
1) 敏感信息的安全存储;
+ j$ |+ Z" B; e9 L: O1 m) l- ]7 m4 F) B& R1 f
2) 控制bus和debug的安全访问,保证信息不被泄露;
" ^+ e* o" t& E8 E! Q, f2 ~$ w l: ^! e: k7 ~
trustzone是system_level的实现,涉及到软硬件,硬件方面包括:
7 b4 w$ X4 j1 L4 r, q
% k* |' ~: A8 C3 t. ^1 N! W 1) ARM processor;3 O8 |; ]1 `- t& r) d7 Y
$ r& C% x7 i* G5 @: z 2) Bus fabric;$ g* u3 L3 n4 v7 Z
4 J- l! } X& Y$ v. Y' `
3) system peripheral IP;( V/ o1 H; `" d, U+ B$ g
3 `( i8 E, O! R& `) ` s7 E+ ]硬件devices被attacked的几种方式:( l. \& m; y" P) S
9 K, U7 ^6 p8 f: Y2 |: k/ J7 K) y 1) Hack attack,通过植入病毒和木马,来执行一些非法的软件。4 s7 t) `7 t0 v' F. O# ]5 n$ R
4 F5 ^ @, v( Q# h. f# h 2) Shake attack,attackers可以物理访问到device,并且可以实现一些主动的动作,force pins,; x" b z% O% s) ~( X
* e4 C- t% B/ s/ W! L/ w
利用JTAG,BIST,IO boundary scan,reprogrammming memory device。
3 U/ n; w y; S/ t& s, n/ g# V; W7 @( ]
3) Lab attack,attackes可以通过实验室设备,实验device,在silicon的metal layer加探针等操作。/ A. E) i8 X ?9 R9 ~4 K9 n
1 G* @- L! q( r: r 危险性极大。
' ?& h% S; e+ b2 S' V: ]6 K( }% o
$ c5 `; m4 n, q8 d$ Q7 R7 C目前硬件中常用的几种security 实现方式:
6 q0 V, |/ W2 c( Z8 `1 A, i( p7 l5 L* D! N) E
1) 外加hardware security module,像SIM card这样。并不通用,而且成本高。8 E' b4 g$ S! `" A' X8 Z1 s' q
7 y& s Y. h& f, ]- L
2) 在内部加入自己的hardware security module,security与normal world之间的数据交换复杂,因为没有形成
. C" }. i, I' M) Q% b/ H- u& p$ k) u! [ ]" ]7 s! U/ f' W- B
一个系统的解决方案。 s b% \8 Y2 d# ^
$ F" K: M2 b: R3 @! w* y. v) ~) h 3) software virtualization,任何带mmu的processor都可以实现,security通过hypervisor来实现,
5 i4 g: x4 E9 r( P
( n& e) R9 N7 V7 I: j 但是对于DMA和GPU这样的master,没有解决方案。2 q4 N" I7 J; P! v
% {2 b! |9 W0 p5 S+ }# _& q 4 U$ A: Q# B2 {2 H) \
% r: e' E7 V+ P4 y: I8 i
trustzone的硬件architecture:主要分为system achitecture,processor architecture,debug architecture
, [- _5 a% e. h7 ~ f8 T" `9 ^& C! a( e$ t
1) system achitecture:主要是指,bus中已经包含security signal,memory也可以通过增加一根security的信号,来物理上将
2 S, `. z0 Z* M+ c6 c2 n! a. u
, C& z3 A' O; S 硬件bus系统隔绝为两个world。# D; f9 N5 H$ ?3 A
( O: g3 @' a& z7 N, `* \
2) Processor architecture:
" s$ m- e: L* A
n3 b1 w# k& G4 t0 P arm-a9之后的processor都直接支持secure,两个virtual processor,之间切换,只能通过) _: _& q J3 S3 |4 v
1 R6 Z- F2 B7 d( F8 A
指令SMC(Secure Monitor Call),或其他的一些exception,IRQ,FIQ,external Data Abort,external Prefetch Abort- ]4 m g, x, |" i1 J9 E
! D# [) M# W6 E* [, @4 _: ]
当前的processor处在secure还是non-secure,通过coprocessor,CP15中的寄存器SCR(Secure Config Reg)来表示,, h/ M% m( s0 T
6 F# C7 i9 j9 j" d# z5 V8 ^
其中有一个NSbit,当processor处在monitor状态时,该状态位无效。
' q5 q1 E6 k+ z: m
6 E3 g" J( v! h4 o* U5 q. U1 I mmu,支持secure扩展,可以看做是两个virtual mmu,其中的TLB(Translation Lookaside Buffers),可以同时包含secure和
" |$ S) a L2 n6 f' x
) ]2 m; m3 c; O/ G non-secure,在切换时,也不需要切换。
6 f" b4 i9 q U% F( ~# N7 A' p# [; M2 U1 g2 Y! f
cache,加入secure特性的扩展后,world switch时,不需要再进行cache flush,任何non-lockdown的cache line都可以被evict,
- {) }% H8 v" U, n7 a2 B2 K" b# }/ ?& S4 i, e& ]) ~6 B/ G
与security属性无关,也就是说,secure的cache line可以被evict,为non-secure cache line加载。( t" u1 G' n J; ^: {$ U; K
) U1 z0 u( ]6 q' p) b interrupt,secure的interrupt,的很多控制寄存器,如mask,enable,clear,必须是由security world来访问。
9 h; n3 v+ `' l p! f
6 P- z& @7 I7 c8 W 推荐实现,IRQ应用在normal world,FIQ应用在secure world,monitor状态下,所有的irq被mask掉。3 O: U/ [5 R+ s1 p, H' G
6 X: V" K( Y: ?% M- _5 m; K exception vector,支持TZ的proceesor的有三组exception vector tables,分别是normal world,secure world,
- f* N; X0 M+ ^% y; z) A/ D" `2 R* q# R+ m: I/ {
Monitor mode。各个基地址,可以通过CP15中的VBAR(Vector Base Address Register)
* u+ ]2 f- o$ K% S z$ y
0 A* E: C. H8 E# n; X ]: R Multiprocessor system,主要分为SMP(Symmetric Multi-processor),AMP(Asymmetric Multi-processor),主要影响/ I4 S% \. Q, f1 i+ l' ?, w& S
8 a' v5 K" j) [. h: o; ~: }/ i 在于软件,AMP结构中,软件调度更加复杂,2 l0 l" D! S8 \2 T9 s. n
6 \- ~" E h4 Z2 C 3) Debug architecture:可以分为processor debug components和system debug components。
; H. Z9 O9 C: s2 |; x/ j
* p# O/ w7 g# W. K processor debug:针对secure和privilege加入了更多的enable控制信号,
# E* |# }; J1 { }. P" K, R. o9 B( ?
1 Q9 A( I: X. w! Z( @ Secure privilege invasive debug(JTAG),SPIDEN signal& P3 Q7 f0 D! ?( M
' n5 h8 Z6 |' X4 I5 ^ g' A Secure privilege non-invasive debug(trace),SPNIDEN signal
; j' Q. v* H* z# ], [: w: B
6 `' X$ `) x, o+ A% C Secure user invasive debug,SUIDEN signal" \6 r/ i2 N0 [+ w+ g% [# Z
B' K, |( r" y& z Secure user non-invasive debug,SUNIDEN signal' A' q y0 B! B. q$ H4 X0 P
) n4 p, B B4 Z& g } secure debug只有在确认安全的环境下,才能打开
% V$ N/ n6 p' c1 S5 U* \
9 q" e4 Q; V) Y- z, Q! J! l, v. ? global的enable信号:7 m% x" M. x$ Y3 d" u/ y1 b( l
6 v5 {+ N: Z. D9 I+ x# N8 y6 {" [ global invasive debug mode,DEGEN
7 S5 O, ^. m N f; o' ?; }4 t: N+ H( ]% M0 Z2 r8 L
global non-invasive debug mode,NIDEN1 q z) I0 y6 d( y- |
8 _; A. R/ G/ |$ J 对于multiprocessor debug control,每个cluster中的每个processor都有这些control signal。
, t) S- T% H7 l- z& |6 t1 f
" u) e8 B* I, s$ Q5 @0 U armv7之后,每个processor内部都有PMU(peRFormance Monitor Unit),内部counter记录processor执行* Y6 N/ x% J( V; o
# M0 o9 |- Y' n' h4 L3 C( c
指令中的各个状态,如cache line evictions等,可以通过CP15的设置,来防止被non-secure非法看到) Q& f. k7 ?. E* [: z l
G; x( U4 M \1 _7 b, N
system debug:通过arm的coresight来保证,
" U6 N) i, v5 v4 p% s& \
0 V% G5 A8 Z" s7 r
- y& _" @* C* U7 x ^) U) n( D5 @
- Q8 Z9 B' j; P7 \" Y$ Zarm提供的支持TrustZone的hardware的IP;4 Q% o1 k$ r3 p' N9 G+ a
9 W2 R0 \& Z* e0 g. N/ k 1) TrustZone Protection Controller(TZPC),主要实现对各个peripheral的secure的动态权限设置。再通过bus发送过来的状态,来# J9 W& Q9 {* S1 |" p; l% Q% s' h
4 H7 f3 ]9 M8 N6 t; D 判断,该笔操作是否合法。 {2 ?) J3 a+ r2 ]' y/ H
7 [7 H: P* H' `2 {- D# g
1 r$ l- L3 r2 ^% E W: F% n
7 |# y3 C( V" T6 c( [4 P9 G3 u2 `0 ~
2) TZASC(TrustZone Address Space Controller),典型应用是将区分同一个AXI slave,比如chip外的DRAM,只挂载一个,
2 c+ x: { ]9 u2 g- @* G" ]9 E6 k# Z }5 t" ~5 j4 p
但是我们可以将其地址空间分为一半secure,一半non-secure
6 r8 h( ?. X' c" U
" Y) M3 ~* C' t' b; W* H 3) 其他的常用组建,Cache Controller,DMA Controller,interconnect,GIC
6 s& H" G; v r8 S, l2 n9 X& q" F7 W1 Q+ Q& J+ p1 o) m+ K3 }
& L, L) Y; }/ L8 `
9 Y1 X# `) }* i7 e7 ?1 J
TrustZone Software achitecture:软件的实现方式比较灵活,最复杂的是在Secure World单独运行自己的OS(AMP结构),- O4 ]! Z! {" G: h7 b, g3 H
9 y9 @9 K1 `6 @0 h; m* r4 h 最简单的是在Secure World,中使用一个标准的lib(SMP结构)。
( y% C8 o, T9 R' h0 d. D, p0 R, q* D, f& E
5 F' ?8 j+ {$ a, c# u0 j
2 n; F6 \ j A+ { 在一个secure system中,boot是信任链的最底层,是最重要的一部分,TrustZone要求,boot都是开始自Secure World。
3 c: j' D1 |0 y! _$ O: {
: l+ _6 H& t7 Y @ ! \8 B* s/ e+ c4 T/ b
. S" N/ Z# _& B+ [# k
secure boot之后,需要加cryptographic checks对bootload进行检查,算法一般选择RSA-PSS,公钥和golden签名也都保存在
! e4 p2 d {/ Z: ]
) }- ~& y: ]( S device中,boot的时候,进行验证。
# j ^" o$ f. X6 M" i! h: Q* W/ q/ [) w4 j( h/ K% d
" H1 x6 M1 c* M6 O& R) C# F) K/ i" ?% Q q6 B$ E
在进行secure world的切换时,从secure到non-secure,可以直接修改CPSR寄存器,直接进行world的切换,
2 s% U4 L" T0 y( V* b
! L7 y! q$ U5 n( q如果processor中带有NEON,VFP这样的coprocessor reg,进行context-switching,可以选择Lazy context switch,
) A# \ e {3 W4 y. N
) a; u' }+ Y4 k5 C, m
z5 Y$ B l( N( v Q: I
- `, @3 k& c* ` s, ~/ e' {5 C& YAARCH64架构中的secure结构:4 K0 [7 { ^ i
3 {2 ?% N; @! t 4 E7 x1 e0 ~4 V' k) x. L
% Q4 |$ x# X$ {/ L# G
在软件应用中,secure和normal的interaction:
M$ ?2 @2 Z' O/ r' _1 B/ G" L8 P8 t
. b7 g6 Z# e( N1 e) u5 f
$ I5 T6 H* ?1 B$ p8 ?3 v- z2 S2 n
在软件切换过程中,有一个问题时,secure world的执行,可能会打断normal world的interrupt,! k& g* h% Y7 v. k
, B+ Q; S* {9 V% I9 m 所以,一般要求secure world使用FIQ。
/ ?5 J/ e7 L0 {: F E8 }1 {9 E4 v/ \$ k) Q1 ^7 P
在armv7的AARCH32架构中,secure model与AARCH64是不同的,secure os执行在EL3,所以为了AARCH3和AARCH64能够保持统一,
5 r. M" F' h: B/ ?9 i
* y3 l2 w- G3 f5 D' {# M 需要secure os在secure状态下,和non-secure状态下的TTBR1_EL1不同, |
|