スライド タイトルなし

情報社会を支える
ディペンダブル・プロセッサ
九州大学
井上弘士(いのうえこうじ)
ディペンダブル・コンピューティング
(Dependable Computing)
頼る

~できる
計算すること
あなたにとって,「○○先生」は頼りになりますか?

YES!





私の質問に対して,常に,正しい解答を示してくれる
私に危害を加えない(私を裏切らない)
勝手に他人へ危害を加えない
などなど
NO!




私の質問に対して,常に(たまに),誤った解答を示す
私に危害を加える(突然きれる,突然暴れる)
他人へ危害を加える
などなど
ディペンダブル・コンピューティング
(Dependable Computing)
頼る

「頼りになる」とは?



計算すること
提供されるサービス(利用者が認識するシステムの振舞い)が正確で信
頼できる
結果として利用者に損害をもたらさない,また,被害が発生しても最小限
に留める
でも現実は・・・



~できる
様々な「想定外の事象」により正確性や信頼性が失われる
「常に100%正確かつ信頼できるシステム」はありえない
そこで・・・


Dependability:予測不可能性(想定外事象)を秘めた系において,シス
テムに期待されるサービスが許容範囲内で提供される事を保障すること
Dependable Computing:「想定外事象は発生するもの」という前提に立
ち,それを解決(回避)可能なシステムで計算する!
ここまで発展したマイクロプロセ
ッサ(シングルコア)
4004@1971
(108KHz)
Pentium2@1997
(450MHz)
i486@1989
(25MHz)
Pentium@1993
(60MHz)
Pentium4@2000
(1.5HGz)
出展:http://www.intel.com/museum/online/hist_micro/hof/index.htm
ここまで発展したマイクロプロセ
ッサ(マルチコア)
256KB LS
256KB LS
256KB LS
256KB LS
256KB LS
256KB LS
256KB LS
256KB LS
Opteron (AMD)
Niagara-T2 (Sun)
http://news.com.com/
PPE
512KB
L2キャッシュ
Cell (Sony/Toshiba/IBM)
Opteron(AMD):http://techreport.com/
プロセッサの回路規模はどの程度?
(トランジスタ数の観点から)
半導体集積度は3年で約4倍に!(ムーアの法則)
インテル・プロセッサの場合
1000
Itanium
Trace Cache
Hyper Threading
100
Pentium 4
Super Scalar
Pentium III
Pentium
1
80486
http://www-vlsi.stanford.edu/group/chips_micropro.html
20
04
19
98
19
94
19
92
19
90
19
88
19
86
19
96
On-Chip L1$
80386
0.1
Out-Of-Order
Renaming
On-Chip L2$
20
02
10
20
00
M Tran.
Pentium II
19
84

命令の実行手順
プロセッサ
命令レジスタ
アドレス
PC
0x00104
デコーダ
レジスタ
ALU
主記憶
・・・
0x00104
add $t0, $s1, $s2
0x00108
sub $t1, $t0, $s3
0x0010c
lw $t1, 320($s4)
・・・
1.命令の取得:PCが指すアドレスの値をメモリ
から命令レジスタへ取得.同時に,次命令の
取得に備えてPCの値を更新(例えば+4)
2.命令の解読:命令レジスタの値をデコード
3.命令の実行:解読結果に従って実行
実際には,各命令は2進表現
でメモリに格納されている
命令の実行手順
PCの指す番地から取
得した命令を保持 プロセッサ
命令レジスタ
add $t0, $s1, $s2
実行する命令の
アドレス
アドレス
PC
0x00104
デコーダ
レジスタ
ALU
主記憶
・・・
0x00104
add $t0, $s1, $s2
0x00108
sub $t1, $t0, $s3
0x0010c
lw $t1, 320($s4)
・・・
1.命令の取得:PCが指すアドレスの値をメモリ
から命令レジスタへ取得.同時に,次命令の
取得に備えてPCの値を更新(例えば+4)
2.命令の解読:命令レジスタの値をデコード
3.命令の実行:解読結果に従って実行
実際には,各命令は2進表現
でメモリに格納されている
命令の実行手順
プロセッサ
命令レジスタ
add $t0, $s1, $s2
次命令の取得にそ
なえてPCを更新
アドレス
PC
0x00108
デコーダ
レジスタ
ALU
主記憶
・・・
0x00104
add $t0, $s1, $s2
0x00108
sub $t1, $t0, $s3
0x0010c
lw $t1, 320($s4)
・・・
1.命令の取得:PCが指すアドレスの値をメモリ
から命令レジスタへ取得.同時に,次命令の
取得に備えてPCの値を更新(例えば+4)
2.命令の解読:命令レジスタの値をデコード
3.命令の実行:解読結果に従って実行
実際には,各命令は2進表現
でメモリに格納されている
命令の実行手順
プロセッサ
命令レジスタ
add $t0, $s1, $s2
アドレス
PC
0x00108
デコーダ
レジスタ
ALU
取得した命令を解読
(s1とs2を加算し,t0へ格納)
1.命令の取得:PCが指すアドレスの値をメモリ
から命令レジスタへ取得.同時に,次命令の
取得に備えてPCの値を更新(例えば+4)
2.命令の解読:命令レジスタの値をデコード
3.命令の実行:解読結果に従って実行
主記憶
・・・
0x00104
add $t0, $s1, $s2
0x00108
sub $t1, $t0, $s3
0x0010c
lw $t1, 320($s4)
・・・
実際には,各命令は2進表現
でメモリに格納されている
命令の実行手順
プロセッサ
命令レジスタ
add $t0, $s1, $s2
アドレス
PC
0x00108
デコーダ
レジスタ
加算
ALU
主記憶
・・・
0x00104
add $t0, $s1, $s2
0x00108
sub $t1, $t0, $s3
0x0010c
lw $t1, 320($s4)
・・・
1.命令の取得:PCが指すアドレスの値をメモリ
から命令レジスタへ取得.同時に,次命令の
取得に備えてPCの値を更新(例えば+4)
2.命令の解読:命令レジスタの値をデコード
3.命令の実行:解読結果に従って実行
実際には,各命令は2進表現
でメモリに格納されている
命令の実行手順
PCの指す番地から取
得した命令を保持 プロセッサ
命令レジスタ
sub $t1, $t0, $s3
実行する命令の
アドレス
アドレス
PC
0x00108
デコーダ
レジスタ
ALU
主記憶
・・・
0x00104
add $t0, $s1, $s2
0x00108
sub $t1, $t0, $s3
0x0010c
lw $t1, 320($s4)
・・・
1.命令の取得:PCが指すアドレスの値をメモリ
から命令レジスタへ取得.同時に,次命令の
取得に備えてPCの値を更新(例えば+4)
2.命令の解読:命令レジスタの値をデコード
3.命令の実行:解読結果に従って実行
実際には,各命令は2進表現
でメモリに格納されている
命令の実行手順
プロセッサ
命令レジスタ
sub $t1, $t0, $s3
次命令の取得にそ
なえてPCを更新
アドレス
PC
0x0010c
デコーダ
レジスタ
ALU
主記憶
・・・
0x00104
add $t0, $s1, $s2
0x00108
sub $t1, $t0, $s3
0x0010c
lw $t1, 320($s4)
・・・
1.命令の取得:PCが指すアドレスの値をメモリ
から命令レジスタへ取得.同時に,次命令の
取得に備えてPCの値を更新(例えば+4)
2.命令の解読:命令レジスタの値をデコード
3.命令の実行:解読結果に従って実行
実際には,各命令は2進表現
でメモリに格納されている
命令の実行手順
プロセッサ
命令レジスタ
sub $t1, $t0, $s3
アドレス
PC
0x0010c
デコーダ
レジスタ
ALU
取得した命令を解読
(t0とs3を減算し,t1へ格納)
1.命令の取得:PCが指すアドレスの値をメモリ
から命令レジスタへ取得.同時に,次命令の
取得に備えてPCの値を更新(例えば+4)
2.命令の解読:命令レジスタの値をデコード
3.命令の実行:解読結果に従って実行
主記憶
・・・
0x00104
add $t0, $s1, $s2
0x00108
sub $t1, $t0, $s3
0x0010c
lw $t1, 320($s4)
・・・
実際には,各命令は2進表現
でメモリに格納されている
命令の実行手順
プロセッサ
命令レジスタ
sub $t1, $t0, $s3
アドレス
PC
0x0010c
デコーダ
レジスタ
減算
ALU
主記憶
・・・
0x00104
add $t0, $s1, $s2
0x00108
sub $t1, $t0, $s3
0x0010c
lw $t1, 320($s4)
・・・
1.命令の取得:PCが指すアドレスの値をメモリ
から命令レジスタへ取得.同時に,次命令の
取得に備えてPCの値を更新(例えば+4)
2.命令の解読:命令レジスタの値をデコード
3.命令の実行:解読結果に従って実行
実際には,各命令は2進表現
でメモリに格納されている
命令の実行手順
PCの指す番地から取
得した命令を保持 プロセッサ
命令レジスタ
lw $t1, 320($s4)
実行する命令の
アドレス
アドレス
PC
0x0010c
主記憶
・・・
デコーダ
レジスタ
ALU
0x00104
add $t0, $s1, $s2
0x00108
sub $t1, $t0, $s3
0x0010c
lw $t1, 320($s4)
・・・
1.命令の取得:PCが指すアドレスの値をメモリ
から命令レジスタへ取得.同時に,次命令の
取得に備えてPCの値を更新(例えば+4)
実際には,各命令は2進表現
でメモリに格納されている
2.命令の解読:命令レジスタの値をデコード
3.命令の実行:解読結果に従って実行
以降,繰り返し・・・
信頼できるマイクロプロセッサとは?

マイクロプロセッサのお仕事は?

「正しいプログラム」を「正しく実行」する



正しい命令の取得(フェッチ)と実行の繰り返し
必要に応じてメモリにデータを正しく書込み/読出し
マイクロプロセッサにとっての「想定外事象」は?

正しく実行できない!



ハードウェア(回路)が正しく動作しない
誰かに実行を邪魔される
正しいプログラムではない!

不正なプログラムを実行させられる
コンピュータ・システムにおける
「想定外の事象」とは?
情報漏洩
Secure
Processor
コンピュータ
データ改竄
ウィルス
ソフトウェア
バグ
外部ノイズ
製造プロセ
スの揺らぎ
Reliable Processor
経年劣化
内部ノイズ
設計の誤り
なぜ、プロセッサでセキュリティ?

インターネット・セキュリティに関する多くの研究


システム・ソフトウェアに関する多くの研究


OS, Libraryなど
専用ハードウェアに関する多くの研究


暗号技術,不正侵入検知,認証技術など
特に暗号処理ハードウェア
プロセッサでのセキュリティに関する研究は???



2000年ごから「プロセッサ・アーキテクチャ」に関する国際会議
での発表が相次ぐ
コンピュータ処理の本質である「演算」と「記憶」の安全性
「最後の砦」では?(⇒トランジスタ・レベルでは難しい・・)
発表手順
はじめに
 プログラム実行の乗っ取りを防止する!
 信用できるプログラムしか実行しない!
 その他のディペンダブル・プロセッサ
 「ディペンダビリティ」はより重要になる!

不正プログラムの実行
を防止する!
攻撃方法が既知の場合
ハードウェアによる攻撃の検知
猛威を振るうコンピュータ・ウィルス
10億米ドル
1.2~1.5兆円の規模で推移
独立行政法人 情報処理推進機構, “国内・国外におけるコンピュータ
ウイルス被害状況調査,” 2003情財第0314号, 2004年4月
バッファ・オーバフロー攻撃


バッファ・オーバフロー
 最も多く活用される脆弱性の1つ
 Blaster@2003, CodeRed@2001
CERTバッファ・オーバフロー勧告
メカニズム
 データ境界を越えた書込み
 C標準ライブラリ内に存在(strcpyなど)
 スタックの破壊(スタック・スマッシング)
 悪質コードの挿入と戻りアドレスの改ざん
 プログラム実行制御の乗っ取り
 改ざん後の戻りアドレスがPCへ設定
R.B.Lee, D.K.Karig, J.P.McGregor, and Z.Shi, “Enlisting Hardware
Architecture to Thwart Malicious Code Injection,” Proc. of the Int.
Conf. on Security in Pervasive Computing, Mar. 2003.
関数呼出し/復帰時の動作
実行
コード
処理
手順
int f ( ) {
…
g (s1);
…
}
int g ( char *s1) {
char buf [10];
…
strcpy(buf, s1);
…
}
1.
2.
3.
4.
関数f ( )の実行
関数g( )の呼出し
文字列コピー
関数f( )へ復帰
関数呼出し/復帰時の動作
実行
コード
処理
手順
int f ( ) {
…
g (s1);
…
}
int g ( char *s1) {
char buf [10];
…
strcpy(buf, s1);
…
}
1.
2.
3.
4.
関数f ( )の実行
関数g( )の呼出し
文字列コピー
関数f( )へ復帰
上位アドレス
FP
s1
g()呼出し
戻りアドレス
の次命令
スタックの
伸張
FP退避
ローカル変数
buf
SP
下位アドレス
関数呼出し時の
スタック
正常時
関数呼出し/復帰時の動作
実行
コード
処理
手順
int f ( ) {
…
g (s1);
…
}
int g ( char *s1) {
char buf [10];
…
strcpy(buf, s1);
…
}
1.
2.
3.
4.
関数f ( )の実行
関数g( )の呼出し
文字列コピー
関数f( )へ復帰
上位アドレス
FP
s1
g()呼出し
戻りアドレス
の次命令
スタックの
伸張
FP退避
ローカル変数
buf
文字列
SP
下位アドレス
関数呼出し時の
スタック
正常時
関数呼出し/復帰時の動作
実行
コード
処理
手順
int f ( ) {
…
g (s1);
…
}
int g ( char *s1) {
char buf [10];
…
strcpy(buf, s1);
…
}
1.
2.
3.
4.
関数f ( )の実行
関数g( )の呼出し
文字列コピー
関数f( )へ復帰
上位アドレス
FP
s1
g()呼出し
戻りアドレス
の次命令
スタックの
伸張
FP退避
ローカル変数
buf
文字列
SP
下位アドレス
関数呼出し時の
スタック
正常時
スタック・スマッシングによる実
行制御の乗っ取り
実行
コード
処理
手順
int f ( ) {
…
g (s1);
…
}
int g ( char *s1) {
char buf [10];
…
strcpy(buf, s1);
…
}
1.
2.
3.
4.
関数f ( )の実行
関数g( )の呼出し
文字列コピー
関数f( )へ復帰
上位アドレス
FP
s1
g()呼出し
戻りアドレス
の次命令
スタックの
伸張
FP退避
ローカル変数
buf
文字列
SP
下位アドレス
関数呼出し時の
スタック
正常時
スタック・スマッシングによる実
行制御の乗っ取り
実行
コード
処理
手順
int f ( ) {
…
g (s1);
…
}
int g ( char *s1) {
char buf [10];
…
strcpy(buf, s1);
…
}
1.
2.
3.
4.
関数f ( )の実行
関数g( )の呼出し
文字列コピー
関数f( )へ復帰
上位アドレス
上位アドレス
FP
FP
s1
g()呼出し
戻りアドレス
の次命令
スタックの
伸張
FP退避
スタックの
伸張
FP退避
ローカル変数
ローカル変数
buf
buf
文字列
SP
下位アドレス
s1
g()呼出し
戻りアドレス
の次命令
SP
関数呼出し時の
スタック
異常時
下位アドレス
関数呼出し時の
スタック
正常時
スタック・スマッシングによる実
行制御の乗っ取り
実行
コード
処理
手順
int f ( ) {
…
g (s1);
…
}
int g ( char *s1) {
char buf [10];
…
strcpy(buf, s1);
…
}
1.
2.
3.
4.
関数f ( )の実行
関数g( )の呼出し
文字列コピー
関数f( )へ復帰
上位アドレス
上位アドレス
FP
FP
s1
攻撃コー
g()呼出し
戻りアドレス
ドの先頭
の次命令
スタックの
伸張
FP退避
s1
g()呼出し
戻りアドレス
の次命令
スタックの
伸張
攻撃
ローカル変数
コード
ローカル変数
buf
SP
下位アドレス
FP退避
buf
文字列
SP
関数呼出し時の
スタック
異常時
下位アドレス
関数呼出し時の
スタック
正常時
スタック・スマッシングによる実
行制御の乗っ取り
実行
コード
処理
手順
int f ( ) {
…
g (s1);
…
}
int g ( char *s1) {
char buf [10];
…
strcpy(buf, s1);
…
}
1.
2.
3.
4.
関数f ( )の実行
関数g( )の呼出し
文字列コピー
関数f( )へ復帰
上位アドレス
上位アドレス
FP
FP
s1
攻撃コー
戻りアドレス
ドの先頭
スタックの
伸張
FP退避
s1
g()呼出し
戻りアドレス
の次命令
スタックの
伸張
攻撃
ローカル変数
コード
ローカル変数
buf
SP
下位アドレス
FP退避
buf
文字列
SP
関数呼出し時の
スタック
異常時
下位アドレス
関数呼出し時の
スタック
正常時
動的な戻りアドレス改ざん検出
~Secure Cache: SCache~
プロセッサ
コア

問題点:


CPU
スタック
Mem.
スタックに書込んだ戻りアドレスが改ざんされる
解決策:


キャッシュ
キャッシュで戻りアドレスを保護しよう!
手段:



戻りアドレス書込み時に複製(レプリカ・ライン)を作成
戻りアドレス読出し時に複製と比較
不一致であれば戻りアドレス改ざん発生と判定
内部構成
レプリカ・フラグ
R-flag (1b)
tag
way0
Ref. Addr.
Index
Tag
Offset
Data (Ret. Addr.)
way1
way2
way3
ML
RL
RL
master
Tag Match
&& R-flag
Tag Match
&& no R-flag
RL: Replica Line
ML: Master Line
ヒット条件
HIT?
Store (push)
Data (Ret. Addr.)
Word-Data
Match
Safe?
replica
data
(line)
レプリカ・ライン
用選択回路
replica
Replica-MUX
Read-MUX
ワード比較器
(32b)
Load (pop)
動作(戻りアドレス書込み時)
RL: Replica Line
ML: Master Line
キャッシュ・アクセス
(戻りアドレス)
Store
no
yes
Load
Original
Data
Replica
tag
Store?
way0
戻りアドレスをMLへストア
全てのウェイからラインを読出し
(MLから戻りアドレス値を出力)
同一タグのRLが存在する
場合は上書き
RLヒット(タグ比較)
way1
way2
data
(line)
no
R-flag
yes
no
RL数=Nrepとなるまで新
規RLを作成
way3
Replica-MUX
戻りアドレス一致
yes
Read-MUX
Word-Data
Match
正常終了
危険異常終了
キャッシュ・ヒット時
安全正常終了
危険正常終了
Data (Ret. Addr.)
Safe?
生成レプリカ数(Nrep)=2の場合
動作(戻りアドレス読出し時)
RL: Replica Line
ML: Master Line
キャッシュ・アクセス
(戻りアドレス)
Store
no
yes
Load
tag
Store?
way0
戻りアドレスをMLへストア
全てのウェイからラインを読出し
(MLから戻りアドレス値を出力)
同一タグのRLが存在する
場合は上書き
RLヒット(タグ比較)
way1
危険異常終了
キャッシュ・ヒット時
安全正常終了
data
(line)
Replica
Replica-MUX
戻りアドレス一致
yes
way3
R-flag
no
RL数=Nrepとなるまで新
規RLを作成
way2
no
yes
正常終了
Data
Original
危険正常終了
Data (Ret. Addr.)
Read-MUX
Word-Data
Match
Safe?
生成レプリカ数(Nrep)=2の場合
SCacheの特徴(利点と欠点)
Pros

戻りアドレス改ざんの動的検
出が可能




ただし、レプリカ・ラインが存在
する場合のみ
プロセッサの内部構成へ与え
る影響は極めて小さい
アクセス時間/面積オーバヘッ
ドは極めて小さい
レプリカ数を変更可能

安全性と消費エネルギーのバ
ランスを決定可能
Cons

レプリカ作成に伴うヒット率の
低下



平均メモリアクセス時間の増大
下位階層メモリへのアクセス消
費エネルギー増大
レプリカ作成に伴う消費エネ
ルギーの増加



書込みエネルギーの増大
ライトバック・エネルギーの増大
読出しエネルギーの増大(他低
消費電力キャッシュと比較して)
評価環境
消費エネルギー
安全性/消費エネルギー/性能

SimpleScalar3.0





16KB 4-way Dキャッシュ
ラインサイズ:32B
2-way IO/4-way OOO実行



SPEC2000



7個のintプログラム
4個のfpプログラム
Small input(完全実行)
4KB×4 SRAM設計

0.18μm CMOSプロセス
Scache機構は未実装
8bメモリセルが1個のラッチ
型センスアンプを共有
回路シミュレーション


カスタム・レイアウトと容量抽
出(周辺回路は含まない)
ビット当たりのアクセス消費
エネルギー測定
評価モデル
評価対象モデル
モデル レプリカ生成ポリシ
LRU1L
配置
LRU
数
1
追出し禁止
LRU1
LRU2
MRU1
LRU
LRU
MRU
1
2
1
MRU2
ALL
CONV
MRU
-----
2
3
MRUウェイ予測
危険度
Vulnerability = (Nv-rald / Nrald) * 100
安全性を保障できない
戻りアドレス・ロード回数
全戻りアドレス
ロード回数
消費エネルギー
Etotal = Erd + Ewt + Ewb + Emp
読出し 書込み
キャッシュ・ミス
レプリカ生成に伴う
ライトバック
キャッシュミス率(2-way IO)
Benchmark
#IRA
Load(Nrald)
CONV
LRU1L
LRU1
LRU2
MRU1
MRU2
ALL
164.gzip
4,932,448
5.18%
5.20%
5.18%
5.19%
5.19%
5.19%
5.21%
175.vpr
8,227,868
3.63%
3.69%
3.67%
3.74%
3.70%
3.77%
3.86%
176.gcc
34,850,486
4.37%
4.42%
4.39%
4.47%
4.43%
4.53%
4.75%
181.mcf
98,2013
20.93%
20.96%
20.94%
20.95%
20.97%
20.98%
21.02%
197.parser
47,935,856
4.17%
4.30%
4.22%
4.51%
4.27%
4.57%
5.12%
255.vortex
22,411,559
1.72%
1.77%
1.76%
1.87%
1.78%
1.90%
2.27%
256.bzip
18,172,443
2.31%
2.32%
2.31%
2.33%
2.31%
2.33%
2.45%
177.mesa
4,731,538
0.15%
0.15%
0.15%
0.16%
0.15%
0.17%
1.09%
32,439
41.96%
41.96%
41.96%
41.96%
41.96%
41.96%
41.96%
183.equake
3,588,123
2.46%
2.47%
2.46%
2.48%
2.47%
2.49%
2.54%
188.ammp
6,307,811
30.31%
30.32%
30.32%
30.34%
30.31%
30.33%
30.40%
179.art


レプリカ数の増加と共にミス率は悪化
ALLでもミス率増加の影響は極めて小さい
どの程度安全なのか?
Vulnerability
2-way In-Order Processor
164.gzip
176.gcc
197.parser
256.bzip2
179.art
188.ammp
175.vpr
181.mcf
255.vortex
177.mesa
183.equake
13.7% 16.8% 23.4% 12.5%
Vulnerability
4-way OOO Processor
164.gzip
176.gcc
197.parser
256.bzip2
179.art
188.ammp
175.vpr
181.mcf
255.vortex
177.mesa
183.equake
LRU1L
LRU1
LRU2
MRU1
MRU2
ALL
Normalized Energy
CONV
LRU1L
LRU1
LRU2
MRU1
MRU2
ALL
どの程度エネルギーを消費する
のか?
164.gzip


175.vpr
176.gcc
2-way In-Order Processor
Emp
Ewb
Ewt
Erd
197.parser
256.bzip2
179.art
188.ammp
181.mcf
255.vortex
177.mesa
183.equake
レプリカ数の増加に伴い「Ewt」と「Emp」が増大
オーバヘッドは20%以下(4-way OOOでも同様)
どの程度性能が低下するのか?
Performance Overhead
2-way In-Order Processor
LRU1L
LRU1
LRU2
MRU1
MRU2
ALL
164.gzip


176.gcc
197.parser
256.bzip2
179.art
188.ammp
175.vpr
181.mcf
255.vortex
177.mesa
183.equake
レプリカの増加に伴い性能は低下
性能低下は1%以下(「All」と「197.parser」除く)
不正プログラムの実行
を防止する!
攻撃方法が未知の場合
動的なプログラム実行の認証
現在の主な不正プログラム対策
と問題点

ブラックリスト方式
→既知の不正プログラム
を検出して駆除
Trusted
Programs
B
C
ホワイトリスト方式
→認められたプログラムのみ
を実行
Virus
Key Program
X
A

D
CPU
A
+
Y
OS
Z
CPU
問題点
 データベースが必要(ウィルス定義
リストやルール定義リスト)
 新種ウィルスに対応できない
A
問題点
 鍵照合プログラムが改ざんされた
場合は機能しない
 実行中に突然ウィルスが暴走した
場合は対応できない
実行の振舞いに基づく動的プロ
グラム認証方式

秘密鍵より「プログラム認証のための実行の振舞い」を決定



Memory-Access Patternなど
コンパイル時に「決定した実行振舞い」を実現できるようコー
ドを生成
実行時に「実行の振舞い」をモニタリング

同一プログラムでも異なる振舞いを鍵情報として実現
Program
compile
Secret Key
Behavior
Model
object
code
Behavior
Model
?
CPU
鍵となる実行の振舞い(例)
~メモリアクセス・パタン~
「ある実行命令数毎に必ずアドレスAにアクセスする」
正規
プログラム
N命令
プロファイラ
実行終了
実行制御の
乗っ取り!
アタック
コード
プロファイラ
コンパイル時における実行振舞
いコントロール
基本
ブロック

分岐命令への対応


基本ブロック・サイズ
の統一
投機/OOO実行への
対応

コミット時にチェック
鍵となる
メモリアクセス命令
Load for Key
Nop
Original
BB Size (#Inst.)

Normalized Exe. Time
Normalized Code Size
性能/コスト・オーバヘッド
StrongARM Model
•In-Order execution
•Branch Pred. (not-taken)
BB Size (#Inst.)
統一基本ブロックサイズの縮小に伴い性能/
コードサイズ・オーバヘッドは増大
信頼性の向上
ハードウェア資源を有効利用!
いまどきのプロセッサ(例)
POWER6 Microprocessor
Jeffrey Kellington et. al., “IBM POWER6 Processor Soft Error Tolerance Analysis Using Proton Irradiation ,” IEEE
Workshop on Silicon Errors In Logic (SELSE3), Apr. 2007. (http://www.selse.org/selse07.program.linked.htm)
マルチスレッド・プロセッサでの
空間冗長化
IF:命令フェッチ
ID:命令デコード
IS:命令発行
EX:命令実行
MEM:メモリアクセス
WB:ライトバック
FC:フォールト・チェック
ID
IS
EX MEM WB
IF
2つの異なるスレッドを
同時実行可能(SMT)
FC
FC
FC
追跡スレッド
命令A’
ID
メイン
パイプライン
追跡スレッドの実
行終了まで待機
先行スレッド
命令A
IF
プログラム
プログラム
IS
EX MEM WB
実行
再実行
結果を比較
FC
実行結果
を比較
FC
不一致の場合は実行をや
り直し(命令フェッチから)
命令A
IF
ID
IS
EX MEM
T. N. Vijaykumar, I. Pomeranz, and K. Cheng, “Transient-Fault Recovery Using Simultaneous
Multithreading,” International Symposium on Computer Architecture, pp.87-98, May 2002.
時間
バグ対策
ハードウェア資源を有効利用!
商用プロセッサにおけるバグ
1994
Pentium defect costs Intel $475 million
1999
Defect leads to stoppage in shipping Pentium III servers
2004
AMD Opteron defect leads to data loss
2005
A version of Itanium 2 recalled
Design Defect
Non-Critical
Critical
 Performance counters
 Error reporting registers
 Breakpoint support
 Defects in memory, IO, etc.
Concurrent
Complex
 All signals – same time
 Different times
J. Torrellas, “Novel Architectural Techniques to Mitigate Processor Errors due to Design Defects and Parameter
Variation,” CoolChips’07.
どのようなバグが,どの程度あるのか?
商用プロセッサのエラーレポートを調査
Intel Pentium III, IV, M, and Itanium I and II, AMD K6, Athlon, Athlon 64,
IBM G3 (PPC 750 FX), MOT G4 (MPC 7457)
31%
69%
J. Torrellas, “Novel Architectural Techniques to Mitigate Processor Errors due to Design Defects and Parameter
Variation,” CoolChips’07.
どこにバグが潜んでいるのか?


プロセッサコアのバグは比較的少ない
メモリ周りのバグが多い
J. Torrellas, “Novel Architectural Techniques to Mitigate Processor Errors due to Design Defects and Parameter
Variation,” CoolChips’07.
Phoenix: Hardware Patching
Signature Buffer


Concurrent Defect(CD)に着目
イベント信号の状態を監視すれば検
出可能


e.g. L1 miss, L2 flush, and Power
Management ON
バグが見つかったら・・・



ベンダーからCD発生条件に関する情報
入手(Defect Signature)
SSUとBDRを再構成
CE発生条件が成立したらリカバリ

pipeline flush, recovery handler
Programmable HW
Signal Selection Unit
(SSU)
Bug Detection Unit
(BDU)
Global Recovery Unit
S. R. Sarangi, A. Tiwari, and J. Torrellas, “Phoenix: Detecting and Recovering from Permanent Processor Design Bugs
with Programmable Hardware,” MICRO’06.
Phoenixの実装
Subsystem
To Recovery
Unit
BDU
Neighborhood
Subsystem
SSU
HUB
Examples of Subsystems
Inst. Cache
FP ALU
Virtual Mem.
Fetch Unit
L1 Cache
IO Cntrl.
S. R. Sarangi, A. Tiwari, and J. Torrellas, “Phoenix: Detecting and Recovering from
Permanent Processor Design Bugs with Programmable Hardware,” MICRO’06.
SSU
To Recovery
Unit
BDU
Phoenixのバグ検出/回復能力


10種類のプロセッサをベースにPhonixを設計
他5種類のプロセッサでバグ検出/回復能力を評価
S. R. Sarangi, A. Tiwari, and J. Torrellas, “Phoenix: Detecting and Recovering from Permanent Processor Design Bugs
with Programmable Hardware,” MICRO’06.
「ディペンダビリティ」はよ
り重要になる!
「マルチコア」から「メニーコアへ」
現実味を帯びてきた「メニーコア」
(Intel 80cores)
Frequency
Voltage
Power
Aggrega
te
Bandwid
th
Perform
ance
3.16 GHz
0.95 V
62W
1.62
Terabits/
s
1.01
Teraflop
s
5.1 GHz
1.2 V
175W
2.61
Terabits/
s
1.63
Teraflop
s
5.7 GHz
1.35 V
265W
2.92
Terabits/
s
1.81
Teraflop
s
60
http://www.intel.com/research/platform/terascale/teraflops.htm?iid=newstab+supercomputing
オンチップ・スーパーコンピュー
ティング@2017
チップ内コア数:×[email protected]年(ムーアの法則)
 2017年には512コア(?)
10,000,000

Performance (Gflop/s)
Top 500 Supercomputers
source: http://www.top500.org/
1,000,000
Tsubame
100,000
Blue-Gene/L
Earth Simulator
10,000
Intel Test (80cores)
1,000
Cell (9cores)
ClearSpeed (96cores)
100
Power6, Xeon (2cores)
10
Single-Chip
Multi-Core Processors
1
1
10
100
1,000
10,000
Total Number of Processor Chips
100,000
ディペンダビリティの重要性




同一チップ上に「数百のコア」を集積→故障
対策は?検証は?
同一チップ上で「複数ユーザ」が「複数アプリ」
を実行→安全性は?
同一チップ上で「数百のスレッド」を同時に実
行→発熱に伴う信頼性の低下は?
などなど
宣伝その1
システムLSIワークショップ’07

システムLSIの新時代:未来を拓くヒトと技術



2007年11月19日~21日
北九州国際会議場
ポスター(73件の研究を一度にみれます!)



学生部門44件(学生による発表)
一般部門9件(企業や研究所による発表)
デザインガイア20件
宣伝その2
Cell Speed Challenge’07

マルチコア・プログラミングコンテスト



主催:情報処理学会ARC/EMB/HPC
先進的計算基盤システムシンポジウム
SACSIS2008との併設企画
超豪華賞品


PS3, HD DVDプレーヤー, 液晶テレビ(47型)など
スケジュール

11月初旬に参加申し込み開始予定(規定課題/自
由課題)
Back-Up Slides
メモリデータの改竄を
検出する!
メモリ整合性検証の高速化
メモリ・データの保護
Security boundary
(前提:オンチップはセキュア)
CPU
core
Tamper Resistant
→インテグリティ検証
改竄
L1$
L2$
Integrity
Verification
Memory
Encryption
Private Tamper Resistant
→オフチップ・データの暗号化
盗み見
メモリ整合性検証

M(t1)=M(t2):


メモリ整合性が保たれている⇒改ざんされていない
M(t1)≠M(t2)

改ざん発生!
Processor
Processor
Processor
読み込み
書き込み
memory
M(t0)
memory
M(t1)
データ改ざん
memory
の発生
M(t2)
t
t0
t1
書き込みが発生しない
t2
ハッシュ木によりメモリ・イメージの
ダイジェストを保存する!

データ読出し時




データ書込み時




On-Chip Storage
root=h(h5, h6) (Trusted)
メモリ整合性検証の実行
rootまでハッシュ値を比較
一致していればOK
ハッシュ木を更新
rootまでのハッシュ値を更新
書込み前にMIVを実行
ハッシュ値のキャッシングにより
性能オーバヘッドを削減
root
h5=h(h1, h2)
h1=h(V1)
h6=h(h3, h4)
h5
h6
h1
h2
h3
h4
v1
v2
v3
v4
h1 h2 h3 h4 h5 h6
Memory Space (insecure)
メモリ整合性検証により
プロセッサ性能が低下する!


理由:プログラム実行処理とメモリ整合性検証処
理が様々な「資源」を共有する!
具体的には・・


オンチップ・キャッシュ(⇒ミス率の増加)
オフチップ・メモリバス(⇒メモリバンド幅の浪費)
プロセッサが参照するデータ
プロセッサ
コア
整合性検証
ハッシュ値
キャッシュ
CPU
プロセッサが
参照するデータ
Mem.
キャッシュの衰退ラインを利用した
性能オーバヘッドの抑制

キャッシュの衰退ラインを活用


衰退ライン⇒プロセッサから参照されない(使用済み
の)データを保持しているデータブロック
衰退ライン(使用済みライン)にハッシュ値を格納

ハッシュ値のキャッシング時,プログラム実行に必要なデータ
を追い出さないようにする
プロセッサ
コア
整合性検証
衰退ライン
ハッシュ値
キャッシュ
CPU
プロセッサが
参照するデータ
Mem.
衰退ライン(使用済みライン)はどの
程度存在するのか?
L2キャッシュサイズ:128KB
177.mesa
167.gzip
255.vortex
キャッシュ中に格納すべきハッシュ
値の割合(%)
73.2
34.7
56.2
キャッシュ中に存在する衰退ライ
ンの割合(%)
99.1
98.3
98.4
60%
255.vortex
Overhead Reduction (%)
性能オーバヘッド削減率
Benchmark Programs
今後の展開
上位階層
Mem
ASIC
ASIC
CPU
LSI community
CPU
Mem
CPU
共同体としての処理
お互いの監視
自己状態の伝達
お互いに修復(助け合い)
悪影響を上位階層へ伝播させない仕組み
Trusted
Programs
Virus
A
D
B
C
CPU
安全性と消費エネルギーの
トレードオフ
LRU2 MRU1 MRU2 ALL
EV Product
E2V Product
3.5%
EV2 Product
Vulnerability
Vulnerability
LRU1-L&I
LRU1-L&U
MRU1-L&U
(Nv-rald / Nrald) * 100
Insecure issued
RA load
Total #of issued
RA load
Benchmark Programs
Performance Overhead
Performance Overhead
LRU1-L&I
LRU1-L&U
MRU1-L&U
Benchmark Programs
衰退ライン(使用済みライン)は
どの程度存在するのか?
衰退ラインが閉める割合(%)
総キャッシュラインに対してCPU/
ハッシュデータが占める割合(%)
8K
16K
32K
ハッシュデータが閉める割合(%)
64K
chash
100
80
60
40
20
0
mesa
gcc
vortex
ベンチマーク・プログラム
bzip
安全性に関する考察

不正プログラム実行可能性



鍵情報の推測容易性


秘密鍵情報の漏洩→安全な秘密鍵管理
不正プログラム実行命令数<鍵命令実行間隔→短い間隔
外部からの実行振舞い観測→プロファイラのオンチップ化
不正プログラム伝播容易性

同一秘密鍵→ユーザ/プログラム毎で異なる実行の振舞い
を実現可能
UL2 Cache Miss Rate (%)
プロセッサ性能オーバヘッドの削減
Conventional
Proposed
4-way OOO Superscalar Processor
128KB 4-way set-associative UL2 Cache
キャッシュミスによる影響のみ考慮
Performance Overhead (%)
Benchmark program
Conventional
Proposed
Benchmark program
Performance Overhead (%)
性能オーバヘッド
Conventional
Proposed
Benchmark Programs
Table 1: Processor Configurations
2-way In-Order
Superscalar
4-way Out-Of-Order
Superscalar
2
4
Bimodal (128-enrty),
1-way BTB(128-entry),
RAS(4-entry)
Gshare(4K-entry),
4-way BTB (512-set),
RAS(8-entry)
RUU
8
32
LSQ
8
16
L1 D-Cache
4-way 16KB, 32B lines
4-way 16KB, 32B lines
L1 I-Cache
2-way 16KB, 64B lines
2-way 32KB, 64B lines
none
4-way 512KB, 64B lines
64 cycles
64 cycles
1/1/1/1
4/2/4/2
Fetch/Issue/Commit
Width
Branch Prediction
L2 Cache
Memory Latency
Function Unit
iALU/iMUL/fALU/fMUL
本講演でのトピック
Architectural Support for
ILP
TLP
分岐予測
スラック予測
命令パイプライン
スーパスカラ
アドレス予測
OOO実行
シグナル・ゲーティング
DVS
パイプライン統合
リサイジング
選択的活性化
値予測
プリフェッチ
キャッシュ
CTV
BPRF
クロック・ゲーティング