耐タンパ性
(不当なやり方による)解析・改造のしにくさだよ
「高い」「低い」で表現するよ
簡単に書くよ
耐タンパ性(読:タイタンパセイ 英:tamper resistance、tamper resistant)とは
「そいつを分解したり何なりして(許可されていないやり方で)中身がどうなっているか調べたり改造したりするのが、どれくらい大変になっているかな?」のこと。
もう少しカッコ付けた言い方をすると
「そいつの構造なり何なりを外部から解析・改変するのが どれだけ大変か?」のこと
です。
詳しく書くよ
順番に見ていきましょう。
まずは予備知識として「リバースエンジニアリング」について簡単に説明します。
「そんなの説明されなくても知ってるよ!」な人は適当に読み飛ばしてください。
リバースエンジニアリングは「完成品から もとになったものを推測すること」です。
完成品を あれやこれやと調べることで、材料や設計図などを推測する行為です。
詳細は、用語「リバースエンジニアリング」の説明を ご覧ください。
以上を踏まえて
許可されていないやり方で中身を調べたり改造したりするのが、どれだけ大変になっているかな?
が「耐タンパ性」です。
リバースエンジニアリング(と違法改造)のしにくさ
と表現しても良いかもしれません。
耐タンパ性は「高い」「低い」で表現されます。
「耐タンパ性が高い」であれば「(悪いやり方で)中身を調べたり改造するのが大変だよ」の意味です。
「耐タンパ性が低い」であれば「(悪いやり方で)中身を調べたり改造するのが簡単だよ」の意味になります。
例えば、そうですね。
プログラムというのは同じ処理でもいろいろな書き方ができます。
試しに以下の2つの処理を見比べてください。
■処理A
var num = 0; //1から10まで加算する数字の元
//1から10まで加算する
for(i = 1; i <= 10; i++){
num = num + i;
}
//1から10まで加算された数字を表示
alert(num);
■処理B
function a(b,c){var g,h;g=d(b,c);h=0;h=g+h;return h;}function d(e,f){return e+f;}var k=0,l=0;for(o=1;o<=10;o++){l=a(k,o);k=l;}alert(l);
実は、この2つは同じことをやっています。
プログラムを動かすと、両方とも同じ処理をやって同じ結果が表示されます。
ですが、なんとなく処理Aの方が見やすいですよね。
処理Bはゴチャゴチャしていて見にくいです。
処理Aの方が「こんな処理をやっているのかな?」を想像しやすいはずです。
それを踏まえて、ピヨ太君がプログラムAとプログラムBをリバースエンジニアリングして「どんな処理をやっているのかな?」を調べたとしましょう。
プログラムAからは(先ほど例として挙げた)処理Aが出てきました。
プログラムBからは(先ほど例として挙げた)処理Bが出てきました。
プログラムAとはプログラムBでは、どっちの方が「あぁ、こんな処理をやっているのね」と把握しやすいでしょうか?
そうですね。
プログラムAの方です。
プログラムAの方(処理A)は、それを見れば「あぁ、こんなことをやっているのね」と分かります。
プログラムBの方(処理B)は、それを見ても、すぐには中身が分かりません。
「えーっと、ここでこんなことをやっていて……」のように、頑張って読み解く必要があります。
このような状況を指して「プログラムAは耐タンパ性が低い」と表現されます。
同様に「プログラムBは耐タンパ性が高い」です。
もちろん今回挙げたのは一例です。
耐タンパ性を高めるやり方は、いろいろ あります。
例えば「正規のやり方以外のやり方でフタを開けようとしたら爆発する」みたいな仕掛けがされていたら、中身を調べるのは大変ですよね。
そんな感じで、いろいろなやり方があります。
そこら辺の具体的な部分については他のところで勉強してください。
一言でまとめるよ
まぁ「耐タンパ性」って単語が出てきたら「許可されていないやり方による解析・改造のしにくさなんだな~」と お考えください。
おまけ
■訳してみるよ
「耐」は日本語ですね。
「tamper(タンパ)」の意味は「改ざんする」とか「許可なくいじる」とか「干渉する」とかです。
「性」は日本語です。
何となく くっつけると
耐改ざん性
となります。






