きみに読んでほしい3冊:セキュリティブックガイド 第一回 NRIセキュアテクノロジーズ 小田島 潤「計算機基礎」
実はセキュリティでもアセンブラはすごく大事です。セキュリティエンジニアが、機械語で書かれたマルウェアをちゃんと解析しようと思ったら、アセンブラを読める必要があります。
特集
コラム
第 1 回は NRIセキュアテクノロジーズ株式会社 代表取締役社長 小田島 潤 氏による、計算機の基礎を理解する3冊です。
●1冊目 「こんにちはマイコン」
すがや みつる著
「こんにちはマイコン」小学館 (1982年) 絶版
すがや みつる著
「こんにちはマイコン 2」小学館 (1983年) 絶版
ぼくらが小学校高学年くらいのときに「ゲームセンターあらし」という漫画が大流行しました。その作者のすがやみつる氏が、自身でパソコンを使いたくてこの企画を立ち上げたそうです。NECの「 PC6001 」というパソコンを使って、BASIC プログラムの組み方を一から説明する内容で、最初は簡単な計算をさせて、最後にはブロック崩しやテニスゲームを作るところまでできるようになる内容でした。
こんにちはマイコンについて(Mitsuru Sugaya Homepage)
「ゲームセンターあらし」公式Webサイト(Mitsuru Sugaya Homepage)
ぼくが買ってもらったのは PC6001 ではなく、イギリスのシンクレアという会社の「 Sinclair ZX81 」というキーボードがペコペコの安いパソコンでしたが、中味は BASIC ですし、全く一緒ではないものの文法は変わりません。当時電波新聞社が出していた雑誌「マイコンBASICマガジン」も手に入れて、掲載されていた読者投稿のゲームプログラムのソースコードを ZX81 に入力してゲームをして遊んでいました。やがて、既存のソースコードを組み合わせて、自分オリジナルのロボット対戦ゲームを作るところまで手を出すようになり、ゲームの背景処理部分を BASIC で書くと遅いので、機械語で記述して速くするなど、プログラム作りにすっかりはまってしまい、これが自分にとっての原体験になりました。
その後小学校中学校と野球部に所属し、高校ではテニス部に入りましたので、パソコンに全くさわらない生活になりましたが、大学に進学する際の学部選びのときに、情報工学科を選ぶきっかけのひとつになりました。というのは、どうやったらバグの無いプログラムを書けるかが、小学生なりの課題意識だったことを思い出し、バグの無いプログラムの書き方を大学で勉強できないか、と考えたのです。
「こんにちはマイコン」は、今見てもすごくわかりやすい。当時の性能と比べると何百倍、何万倍のコンピュータが現在は買えますが、原始的だったがゆえに、ハードウェアに近いレイヤというか、原理的なところからプログラムまでの距離が近かったため、下から上までわかる経験ができたと思います。
●2冊目「Switching & Finite Automata Theory」
Kohavi Zvi 他 著
「 Switching & Finite Automata Theory 」
Cambridge University Press 刊 (2010年)
大学に入ってまず最初に、コンピュータがどうやってできているのか、そのおおもとである論理回路を学びましたが、その教科書がこの「 Switching & Finite Automata Theory 」でした。たとえば「 AND 」という、条件が 2 つ成り立たないと真にならない論理演算をするとき、 1 AND 1 だと 1 に、1 AND 0 だと 0 に、0 AND 1 だと 0 に、0 AND 0 だと 0 にそれぞれなります。「 NAND 」はそれをひっくり返したもので、AND の否定です。0 と 0 だと 1 に、0 と 1 でも 1 に、1 と 0 でも 1 に、1 と 1 だと 0 になります。
コンピュータには AND や NAND 、OR などの論理の組み合わせが電子回路で実装されていて、それをいろいろ組み合わせることで、「 1 足す 2 は 3 」のような計算が出来るようになります。それをさらに、その論理回路の出力と入力をぐるっともう一回戻してあげれば、ある数字をずっと覚えさせられることができて、これがメモリーです。単純なロジックの回路を組み合わせれば電卓のようなものを作れるし、ずっとデータを記憶させておくメモリ(電源が切れると消えますが)も作れます。それらをもっともっと高度化するとコンピュータ、CPU になります。
「 Switching & Finite Automata Theory 」は、論理回路の成り立ちと理論を勉強させてくれる本で、パソコンの一番ボトムのところである電子回路=物理の世界と、デジタルの足し算の世界=論理の世界を結びつけてくれる理論が書かれています。日本語版は残念ながらまだありませんが、わかりやすい英語で書かれていて、書いてあることはすごく単純です。頑張って読んでみる価値があります。
●3冊目「The Art of Computer Programming」
Donald E.Knuth 著
「 The Art of Computer Programming Volume 1 Fundamental Algorithms Third Edition」
KADOKAWA 刊 (2015年)
歴史的名著であるこの本には、コンピュータサイエンスを勉強するにあたって最低限必要な数学、整数論、集合論、組み合わせの数を数えるやりかたなどが最初に書いてあって、そのあとに仮想的な CPU のモデルを決めて、その CPU の上で仮想的なアセンブラ言語を定義して、いろんな処理をやらせます。
仮想的な CPU を用いるのは、CPU にはいろいろなバリエーションがあって、有名なのはインテルの x86 や ARM の CPU などですが、個別の CPU について学んでしまうと他の CPU のことがわからなくなるので、著者のクヌース先生は、自分で勝手に仮想的な CPU をモデルとして作ったわけです。
アセンブラ言語は BASIC よりもずっと低水準な言語なので、1 つの処理をするために BASIC なら一行で済むものが、アセンブラで書くと 10 行くらい書かなければいけない。とても大変なのですが、しかし一度これにあたっておくと、たとえば組み込まれている CPU の能力が低くメモリも少ないため、速く動かすための処理効率などをアセンブラの世界で調整しなければならない IoT のような領域にとても役立ちます。
実はセキュリティでもアセンブラはすごく大事です。マルウェアの多くはバイナリ(機械語)形式ですから、機械語を解読しなければならないのですが、機械語はアセンブラには簡単になるのですが、アセンブラからさらに C とか Java などの高級言語に変換するのは、それをやるのが学術研究になっているぐらい難しい。セキュリティエンジニアが、機械語で書かれたマルウェアをちゃんと解析しようと思ったら、アセンブラを読める必要があります。
「 Switching & Finite Automata Theory 」と「 The Art of Computer Programming 」は両方古典ですが、土台から最上部まで、電子回路から高級言語の手前のアセンブラまでを、この 2 冊を頑張って読めば相当なレベルまで理解することができるでしょう。
高級言語とか新しいものは、仕事をやっているうちにイヤでもやらなきゃいけません。それよりも下のところを一度きちんとやっていくことに意味があります。
また、セキュリティの仕事は、なぜこうなるのかというのを、徹底的に追求していかなければいけない仕事なので、ここまでわかっていないと気が済まないタイプの人が向いている、というのもあります。
小田島 潤:
1971 年、岩手県生まれ。1996 年 3 月京都大学大学院工学研究科を修了、同年 4 月に株式会社野村総合研究所に入社。テクニカルエンジニアとして、電子現金の社内実験や公共系大規模システム構築プロジェクトなどに携わる。2000 年 8 月、NRIセキュアテクノロジーズ株式会社の設立と同時に出向。認証局システム構築、Web アプリケーションの診断サービス開発、セキュリティ運用監視サービスなどに従事。2009 年 4 月エンタープライズセキュリティサービス部長、2014 年 4 月 MSS 事業本部長を経て、2015 年 4 月代表取締役社長に就任。
《ScanNetSecurity》
関連記事
この記事の写真
/