|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
ARM的trustzone并不涉及到具体的crypto算法,只是实现:. A8 L* Y# O8 q7 G
5 Y4 H) b8 _& N" ?, X, `
1) 敏感信息的安全存储;
- Z: k. I9 y2 w& a4 g4 I# g& `; q# q3 Q% _
2) 控制bus和debug的安全访问,保证信息不被泄露;
. P5 ^" n0 H: u" S# B" u: ^% C! U) N7 U+ {. c, }/ c
trustzone是system_level的实现,涉及到软硬件,硬件方面包括:1 H6 h( x9 Y$ O; n# h. i2 j
, p1 Z. h4 w$ T+ E2 L( D9 S 1) ARM processor;6 m4 F( J o x: L% m
; N+ e' X7 H# {. N, {
2) Bus fabric;
- I* ^9 V- s, n# I5 y
2 `" T% H; Y$ `# m5 k* i3 s 3) system peripheral IP;5 m6 I1 a O8 I1 Y, O. p
; I X' D1 }1 b5 A
硬件devices被attacked的几种方式:' }0 W( e* [" a9 I; W
' f+ o6 ~1 q) g: S, l
1) Hack attack,通过植入病毒和木马,来执行一些非法的软件。 L$ s% C+ b: Z e% [
- `4 q( v9 o. g- y 2) Shake attack,attackers可以物理访问到device,并且可以实现一些主动的动作,force pins,6 S7 x0 x) S3 K* e9 l
5 J: S7 N( K, }) j0 V# X! j# n
利用JTAG,BIST,IO boundary scan,reprogrammming memory device。
- p: F8 o& E9 U3 k: t D1 d) V
3) Lab attack,attackes可以通过实验室设备,实验device,在silicon的metal layer加探针等操作。
7 {$ D- V5 ^- K
; z. J; g" u) J; r: O- l 危险性极大。8 K9 \6 ~7 P5 A D
( h2 V ~9 p4 J$ P: D
目前硬件中常用的几种security 实现方式:
+ C1 B/ h( C, e s) Q8 f9 O
9 m4 C7 h7 B* a, J0 C 1) 外加hardware security module,像SIM card这样。并不通用,而且成本高。
0 G- z, ^+ }9 u0 U" F. ~& h3 ]0 _0 h: D' N# {% S9 C7 M4 k
2) 在内部加入自己的hardware security module,security与normal world之间的数据交换复杂,因为没有形成7 ^0 m7 \: L" p$ I2 q# }. ^3 W, }
# a2 L2 P* I$ G4 ~9 Q9 k# S
一个系统的解决方案。
) d3 ^" p' p( l: f0 x5 V' [
, l. E5 m S& ? U; T' E& W( g( f 3) software virtualization,任何带mmu的processor都可以实现,security通过hypervisor来实现,% i) ]. U u3 ~" y% O
# [$ |" }$ _9 z0 |# B( A/ O5 {' A
但是对于DMA和GPU这样的master,没有解决方案。
. s2 R- p. v; f, M& F) D* x0 E+ m* ]: c% _
8 u6 N) `6 a+ `' x; e" Y6 O( ~ b
trustzone的硬件architecture:主要分为system achitecture,processor architecture,debug architecture
- F* c; P0 h9 e; f7 X4 X
4 @& z, ?! [% M% s, I 1) system achitecture:主要是指,bus中已经包含security signal,memory也可以通过增加一根security的信号,来物理上将
9 @, S+ g9 f; J* X: r! W1 {0 H t) T( q
硬件bus系统隔绝为两个world。' d+ H5 x, G6 K* b/ t0 M7 b5 Y
4 A0 V' ]* a5 \ P% D' a 2) Processor architecture:
" t M4 l/ K( P9 U3 Q
$ w) h0 W3 s, b2 l7 ]: ` arm-a9之后的processor都直接支持secure,两个virtual processor,之间切换,只能通过
( c8 c3 W" ]# _. Z" n& k; m P; U6 O
指令SMC(Secure Monitor Call),或其他的一些exception,IRQ,FIQ,external Data Abort,external Prefetch Abort
; ^$ r8 p# K2 [, M
' [5 U- ~/ Q' `. d# } 当前的processor处在secure还是non-secure,通过coprocessor,CP15中的寄存器SCR(Secure Config Reg)来表示,, t% S8 h; ?* M. r. l- [
, c4 k: o! Q5 t G7 C! B4 o 其中有一个NSbit,当processor处在monitor状态时,该状态位无效。& R) ~# ^! o. i$ T
6 N- s8 \. ^4 N2 y# \
mmu,支持secure扩展,可以看做是两个virtual mmu,其中的TLB(Translation Lookaside Buffers),可以同时包含secure和/ \. R/ \4 e8 u! i
7 P, v9 L/ E2 c$ W non-secure,在切换时,也不需要切换。% G9 A* M" C" p* d0 y5 u- Q; {
' i( C7 j: ?6 H9 c9 ]
cache,加入secure特性的扩展后,world switch时,不需要再进行cache flush,任何non-lockdown的cache line都可以被evict,6 _0 x1 F: R6 f5 S% A3 g l
- i, y) o) \% U
与security属性无关,也就是说,secure的cache line可以被evict,为non-secure cache line加载。3 @/ j) m7 U" j" `1 t
- Y- F8 S: y! n2 H+ _$ y
interrupt,secure的interrupt,的很多控制寄存器,如mask,enable,clear,必须是由security world来访问。- j# F, p8 v- d+ D) W! o7 R$ R; {& R
% [6 \1 e) I/ Y" U, ] 推荐实现,IRQ应用在normal world,FIQ应用在secure world,monitor状态下,所有的irq被mask掉。
) t+ |) D Q8 q- R- ?3 i
& z$ B, ?0 [# }" V exception vector,支持TZ的proceesor的有三组exception vector tables,分别是normal world,secure world,8 M' Z' u/ `' u
- T1 p6 ?+ n' M; b5 n: ~" B: F ] Monitor mode。各个基地址,可以通过CP15中的VBAR(Vector Base Address Register)
! p/ u+ C3 Q" Z( ?; m+ h+ k- B3 ]$ I, U P
Multiprocessor system,主要分为SMP(Symmetric Multi-processor),AMP(Asymmetric Multi-processor),主要影响
% }, _: S) f4 i! E5 S3 i
- N" H& l9 J0 u# ~9 H 在于软件,AMP结构中,软件调度更加复杂,
9 V0 l8 P+ f" L( \0 `2 S! y3 C
1 u6 [! Q5 N7 ]. q# q% ?2 z' l 3) Debug architecture:可以分为processor debug components和system debug components。# x+ @; d, p& |' U9 W, V! h
( S, q, f f2 }( ~
processor debug:针对secure和privilege加入了更多的enable控制信号,$ H; P* X8 \6 ?4 h
2 |$ p! F8 {# _! ^5 Y. n Secure privilege invasive debug(JTAG),SPIDEN signal E2 y& O# I! Z* ~( Y7 `$ u
( g$ w) A t# [6 f& C
Secure privilege non-invasive debug(trace),SPNIDEN signal
% @( }/ [, {3 L+ |0 Y5 y# M" y
$ b+ M; Z* o/ A; y8 Q! K( _ Secure user invasive debug,SUIDEN signal6 Z. g% i9 B* _5 t
# ?1 J, b! S3 b* h+ w
Secure user non-invasive debug,SUNIDEN signal0 h% C8 L' O- @- @+ o
r& A4 I* [9 ?% m/ H" P% J secure debug只有在确认安全的环境下,才能打开* o6 |4 f& U- N$ y' _: G6 r: J
+ Q2 L- a8 c7 ^9 M# V global的enable信号:3 H* |# [- I% ^7 U; _) e2 v M
8 i0 F8 U2 Z4 N* W9 S* L0 r( x1 S global invasive debug mode,DEGEN( @& ]; z% w5 H( `5 V$ W
- S$ z, b) ?7 q' j global non-invasive debug mode,NIDEN& @' ^, |( i! R, _* Q- E1 o* ~# P
3 f; f2 K. A0 U/ e- ? 对于multiprocessor debug control,每个cluster中的每个processor都有这些control signal。/ J6 Z5 L6 [8 k) ]
7 t" w# y) L4 W8 A9 i3 w
armv7之后,每个processor内部都有PMU(peRFormance Monitor Unit),内部counter记录processor执行& P- ?. [! V1 }) ?
& V* w) p% s, O1 y
指令中的各个状态,如cache line evictions等,可以通过CP15的设置,来防止被non-secure非法看到
/ Z2 d( ]9 o% c+ B# F9 U/ m7 z( ~. w
system debug:通过arm的coresight来保证,0 w8 s7 x6 a: s
( V8 O/ {2 z& k( [: a1 t! Y3 j
* m. L4 t Y' }/ r% g3 @! ]
9 u7 b' P( w0 yarm提供的支持TrustZone的hardware的IP;
( @* a+ P# x* P4 K0 u- D, c: B1 [/ P4 l! A3 g% l# t
1) TrustZone Protection Controller(TZPC),主要实现对各个peripheral的secure的动态权限设置。再通过bus发送过来的状态,来
+ h4 r8 L/ {" _
?- l' x, Y! |8 U0 t9 o; j; ] 判断,该笔操作是否合法。
' |5 s" R0 C/ R) y3 Y" G5 Y2 c; H0 ^
( N) |+ P9 k5 H- [ Y3 P9 A! l" z# C; K2 k5 b' V
2) TZASC(TrustZone Address Space Controller),典型应用是将区分同一个AXI slave,比如chip外的DRAM,只挂载一个,
. L- K6 y% B9 ~5 W" D: L$ O9 q
# h) H0 E9 r7 F2 { 但是我们可以将其地址空间分为一半secure,一半non-secure
1 c, J. Y' A5 P
$ l# i, H. F9 T% \# Y9 H 3) 其他的常用组建,Cache Controller,DMA Controller,interconnect,GIC
- f7 {. b/ ?) a* ?* H9 q9 Q. t# R$ r5 y
( u- B, G) [! W5 Z* t: {, S% T) `+ }$ [0 @! a' ~ C" q Z) ~ Y8 m
TrustZone Software achitecture:软件的实现方式比较灵活,最复杂的是在Secure World单独运行自己的OS(AMP结构),4 e7 c" {8 D# F7 Y& g
9 G) P* w4 _) S7 `' |0 @3 f 最简单的是在Secure World,中使用一个标准的lib(SMP结构)。+ f% L9 h3 S# A9 w8 U
9 R; _+ G' t6 d9 z; M
7 y% D8 C# a6 F
* w# s9 q# o$ Z3 Z4 R* _* a2 M: ~ 在一个secure system中,boot是信任链的最底层,是最重要的一部分,TrustZone要求,boot都是开始自Secure World。* ]$ H5 a* ?0 o. _4 q$ H) h4 ^
$ q/ }0 O" b& l' W K* E# v
. l% h2 K# k9 V
% g% T+ u0 [ n secure boot之后,需要加cryptographic checks对bootload进行检查,算法一般选择RSA-PSS,公钥和golden签名也都保存在0 p2 V( m% n" _
$ ^! H+ e' I: j/ V5 G+ ? device中,boot的时候,进行验证。
- c) C$ ]* ~! L* B3 @, ~
7 K# G2 m" Z o 9 N( y! ?3 r1 X# p& e' ^5 e
* y! _9 l, i( Z8 ?1 u8 b在进行secure world的切换时,从secure到non-secure,可以直接修改CPSR寄存器,直接进行world的切换,/ a3 w2 b5 f! P- b$ I& H6 @
+ y, n; J P, T! f) K! q
如果processor中带有NEON,VFP这样的coprocessor reg,进行context-switching,可以选择Lazy context switch,
) S1 q B; [) Z1 X8 P; w r
5 M, P' @0 Y& B D4 j# E1 }2 P+ P 7 V# c! N; V, l, O
& `& @1 G( W- d8 q1 q
AARCH64架构中的secure结构:( m8 ?4 \0 R7 [# w* S$ z% _
6 T' g- f- e- v' s/ }6 a) g- ?! P. O" g
2 G& P) k: W. v1 }, o+ i( g# V3 ?& @3 w+ x# v% y- y o7 d# j
在软件应用中,secure和normal的interaction:
: l3 A7 }* |* P8 \3 d9 P, _2 v5 y. X5 D# s+ c4 W* s4 a5 @; r q
; a3 b, L6 h& U- S7 p- U
- a6 @3 u( V# x6 Y' j6 m6 i 在软件切换过程中,有一个问题时,secure world的执行,可能会打断normal world的interrupt,
# T$ b( s6 C- r k& h3 D! R5 g" k2 V2 @6 b/ L
所以,一般要求secure world使用FIQ。
/ N* D" i$ n9 X2 A/ l# J
% j% h7 Z# I- q3 D# q) L1 e2 K; }在armv7的AARCH32架构中,secure model与AARCH64是不同的,secure os执行在EL3,所以为了AARCH3和AARCH64能够保持统一,1 n: z* O( a, y( ]: c1 K9 g/ e
+ x1 I7 R7 q) n1 G4 ]- y 需要secure os在secure状态下,和non-secure状态下的TTBR1_EL1不同, |
|