[-]=======================================================================[-] Wizard Bible vol.43 (2008,10,6) [-]=======================================================================[-] x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ---- 第0章:目次 --- x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ○第1章: VMware Server使いの憂鬱 金床 著 ○第2章: デジタルフォレンジック入門 Kenji Aiko 著 ○第3章: 基礎暗号学講座・第18回 〜平方剰余とルジャンドル記号〜 IPUSIRON 著 ○第4章: お知らせ ○第5章: 著者プロフィール x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第1章: VMware Server使いの憂鬱 --- 著者:金床 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x01.) はじめに  ポウンニチワ。筆者の会社のサーバーでは、VMware Serverの1系列を本格的に運用して いる。ホストOSはLinuxである。今回はこの「Linux上で走らせるVMware Serverの1.0 系列」で筆者がはまりにはまった数々の点について検証をおこなっていく。以下 の記事の内容はホストOSがWindowsの場合とは全く関係がないので注意していただき たい。 ■0x02.) メモリがディスクに書き込まれる??  ゲストOSを起動すると、vmxファイルが置かれているディレクトリ内に拡張子が.vmemのファイ ルが生成される。筆者の環境で、この.vmemファイルをlsコマンドで確認すると次のように なる。 ----- [root@raptor CentOS5_4]# ls -l *.vmem -rw------- 1 root root 2344615936 Oct 3 15:36 564def5e-64dc-af0a-2c64-7bbc2c6ee46d.vmem -----  ちょwwwサイズでかすぎwwwアリエナスwww  …という感じである。桁数が大きすぎてよくわからないので-hオプションも付ける と次のようになる。 ----- [root@raptor CentOS5_4]# ls -lh *.vmem -rw------- 1 root root 2.2G Oct 3 15:36 564def5e-64dc-af0a-2c64-7bbc2c6ee46d.vmem -----  2.2Gでつか…。  この2.2という数字は、実はゲストOSに割り当てたメモリの量そのものである。ゲスト OSを起動すると、このように必ず割り当てたメモリの量と同じサイズのファイルが生成され てしまう。2.2Gのファイルというのは決して無視できるサイズではなく、ディスクの圧迫や パフォーマンスへの影響が懸念される。  さてVMwareにはサスペンドという機能がある。メモリの内容を一時的にすべてディスクに 退避し、ゲストOSを一時的に停止する。そして後ほどまたディスクからメモリへと内容を 読み込み、その時点から作業を再開するための機能だ。このことを知っているエン ジニアであれば「ああ、なるほどこのvmemファイルはサスペンドのために使われるのだな」 と思うだろう。  筆者はひとつ実験をしてみた。2.2Gほどのメモリを割り当てたゲストOSを起動する( ここではゲストにもLinuxを使った)。起動したら、すぐにサスペンドさせる。このサスペ ンドの処理がどのくらいの時間を要するかを調べてみた。すると驚くことに、一瞬、 わずか数秒でサスペンドが終了してしまった。  筆者が以前使っていた、Windows上で動作するVMware Workstationの3系列では、 サスペンドはそれなりの時間を要する処理だった。つまり、「ああ、メモリの内容をそ のままディスクに書き込んでいますね」という感じの時間が掛かっていた。これは新 しいVMwareであるVMware Serverの動きとまったく異なっていた。2.2Gものメモリの 内容をディスクに書き込むためには、かなりの時間が必要なはずだ。にもかかわらず、 VMware Serverは一瞬でサスペンドを完了した。  これらのことから、筆者は次のような動きを想像した。  1. VMware Serverは、常にメモリの内容を.vmemファイルに同期させている  2. そのため、サスペンドは一瞬で終わる  3. 起動する際には割り当てたメモリと同サイズの巨大なファイルが毎回生成される  仮に1が事実だとすると、とんでもないことになる。メモリへの書き込みがあるた びにディスクにも書き込みが発生することになり、パフォーマンスが大きく低下してしまう だろう。そのため筆者は「これはとんでもない改悪だな」と思っていた。  しかし幸いなことに筆者の想像は間違っていた。まずは.vmemファイルのサイズについ ての勘違いから説明する。  このファイルは実は「スパースファイル」と呼ばれる、実際のサイズと見た目 のサイズが異なるものなのだ。普通にls -lやllなどで確認すると2.2Gあるように 見えるが、lsコマンドの-sオプションを使うと実際のサイズを確認することがで きる。 ----- [root@raptor CentOS5_4]# ls -lsh *.vmem 184M -rw------- 1 root root 2.2G Oct 4 23:35 CentOS5.vmem -----  このように、実際にディスク上に占めるサイズは184Mなのである。straceを使 って確認したところ、次のようなシステムコールによってこのスパースファイル が生成されていることが確認できた。 ----- pwrite64(106, "\0", 1, 3774873599) = 1 -----  ここで106はこのときのファイルディスクリプタである。これは3.6Gほどのメモリを割り当て てみたときのトレースとなっている。巨大なファイルの最後の1バイトだけNULLを書き込んで いることがわかる。ファイルが巨大だが書き込みはわずか1バイトなので、この処理は一 瞬で終了する。 ■0x03.) .vmemファイルは更新されているのか??  さて筆者がさらにこの.vmemファイルではまったのが、「このファイルはいつ更新されて いるのか?」という点である。ls -lによって.vmemファイルの更新日時を見ていたの だが、どうにも更新されない。いつまでたってもタイムスタンプが古いままなのである。  結論から書くと、Linuxではファイルの(いわゆる)更新日時には3種類のデー タが存在し、筆者が見ていたのはmtimeと呼ばれるものだったのだ。詳しくは「U NIXの部屋 」に素晴らしい記事があるので、そちらを参照願いたい。 http://x68000.q-e-d.net/~68user/unix/pickup?%A5%BF%A5%A4%A5%E0%A5%B9%A5%BF%A5%F3%A5%D7  .vmemファイルがいつ更新されたかを確認するにはls -luが適切である。  これはVMware Serverが.vmemファイルを更新する際に(readやwriteではなく) mmap2というシステムコールを使っていることが原因である。 ■0x04.) .vmemファイルはなぜ184Mしかないのか?  さて順序がばらばらで申し訳ないのだが、再び先ほどのサスペンドに話を戻す。 2.2Gのメモリを割り当てたゲストOSを起動直後にサスペンドさせたところ、.vmemファ イルの実際のサイズはわずか184Mしかない。これは実は、起動直後のゲストOSは、実際 にはメモリへのアクセスをその程度しか行っていないからである。  古いVMwareでは、ゲストOSが起動した瞬間にホストOSは実際に2.2Gのメモリを確保し、 ゲストOSのために割り当てていた。しかし新しいVMwareでは、ゲストOSが実際にメモリを 使うときになってはじめてホストOSのメモリを確保するのである。このため複数のゲスト OSを使う場合に効果的にメモリを使うことができる、ということになる。  ゲストOS上でメモリを実際に大量に消費するプロセス(例えばmallocでギガレベルのメモリを 確保し、さらにそのメモリのすべての領域に書き込みを行うもの)を走らせた後にサ スペンドを行うと、サスペンドの処理に時間がかかり、さらに.vmemファイルの実際のサイズ も大きくなることが確認できる。  これらのメモリ管理や.vmemファイルへのアクセスはすべてmmap2というシステムコールによ って行われており、straceによって調査してみると非常に大量のmmap2やmunmapが 呼び出されていることが確認できる。 ■0x05.) mainMem.useNamedFile = "FALSE"の罠  筆者と同じく「最近のVMwareはメモリの内容を常にディスクに同期させている」 と勘違いしている人はたくさんいたようで、「この同期をoffにする方法はないか ?」という議論が各地で行われていた。つまり、ゲストが起動したら問答無用で ホストOSのメモリをたっぷり(例えば2.2G)割り当てる。そしてサスペンドを行 うときになって初めてディスクに書き込めばよいではないか、という意見である。 これは「メモリはたくさんあるから、とにかくパフォーマンスを重視したい」と いう人々の願いであった(結論を先に書くと、Linuxではこれは実現できない。W indowsはしらないw)。  これらの熱心な願いに、神は答えを与えた。「汝、.vmxファイルにmainMem.us eNamedFile = "FALSE"の行を追加すべし」と。  この行を.vmxファイルをエディタで編集し追加することで、次回起動時から.v memファイルが生成されなくなるのである。…なんだ、最初からそうしてよ!とい う感じである。  しかし筆者が調べてみたところ、動作がおかしい。ゲストOSを起動しても、相 変わらずホストOSのメモリがたいして消費されないのだ。つまり「ゲストが起動 したら問答無用でホストOSのメモリをたっぷり(例えば2.2G)割り当てる」とい うことができていないのである。  vmware関連の英語のフォーラムでさかんに議論されていたので苦労して解読し たのだが、やはりこの行を追加しても(少なくともLinuxでは)ゲストにメモリを いきなり使わせることはできないと書いてあった。そしてstraceによって動作を 観察してみたところ、またひとつとんでもない事実が発覚した。次の一連のシス テムコールである。 ----- open("/tmp/vmware-root/mm0", O_RDWR|O_CREAT|O_EXCL|O_LARGEFILE, 0600) = 102 unlink("/tmp/vmware-root/mm0") = 0 pwrite64(102, "\0", 1, 268435455) = 1 -----  なんと/tmp以下にファイルを作成し、すぐにunlinkしているのだ。そしてそのファイル ディスクリプタを実質.vmemファイルとして使い続けているのである。  筆者はしらなかったのだが、Linuxではこのように、あるプロセス中でopenによっ て作成したファイルをunlink(一般的に「ファイルの削除」とされる処理)した後でもそ のファイルについて書き込んだり読み込んだりすることができるのだ。そしてこのファ イルはプロセスの終了時に実際に削除される。いわゆる隠しファイルという感じである。  unlinkされているためシェルからはこのファイルは見えない。例えばls -lなどで確認 しようとしても見ることができない。しかしこのプロセス(ここではVMwareのそれぞ れのゲストOSのプロセスであるvmware-vmx)は稼働中このファイルを使い続ける。このファイ ルは.vmemそのものであり、使用を続けていればかなり大きなサイズになる。かなり 大きな隠しファイルが勝手に/tmp以下に作成されることになるため、これにハマって しまう人もいることだろう(実際に筆者の身内に一名確認されている)。例えば /tmpのサイズが小さいとか、/tmpが特殊なファイルシステム(たとえばメモリ) になっている場合などには激しく地雷である。  このように、Linuxでは「mainMem.useNamedFile = "FALSE"」の行は  ・.vmemファイルを/tmp以下の隠しファイルにしてしまう  という意味しか持たない。これによって何かが改善されることは普通はないと 思われるので、この行の追加はやる必要がないと筆者は考える。 ■0x06.) いきなりスワップする罠  ゲストOSを複数起動している場合、当然ながら「今、どのくらいのメモリが空 いているか?」ということが気になるだろう。そんなあなたは「free」コマンド を打ち、その結果に満足するはずだ。しかしまだまだメモリが大量に空いている はずなのに、いきなりスワップがはじまって狼狽した経験はないだろうか。  Linuxでは、ぶっちゃけfreeコマンドは役に立たない。freeでは、そのとき使用 されている「共有系」メモリがまったくカウントされないからだ。「共有系」メ モリとして、筆者が知っているのは以下の2つである(ちなみに筆者はLinuxのOS そのものについての知識はたいしたことないというか、かなり詳しくない方なの でヨロスコ)。  1. 共有メモリ  2. MAP_SHAREDでmmapされたメモリ  1は異なるプロセス間でメモリ領域を共有するための仕組みで、shmgetというシ ステムコールによって確保することができる。PostgreSQLのようなデータベース でよく使用されるようだ。  ここでひとつ余談である。筆者は昔PostgreSQLのチューニングに失敗したこと がある。PostgreSQLに大量の共有メモリの使用を許可してしまったためPostgreS QLはOSのメモリを大量に消費し、そのあおりをくらったTomcatがシボリ。ウェブサ ーバーの様子がおかしい、とアラートのメールが携帯に到着。ヤンマガの立ち読みを 中断してあわててリモートからログインしたものの、psがsegmentation faltにな ってしまうためOSの状態をまったく把握できない。脂汗をかきながら超高速で「 reboot」と打ち込んだところ、無事に再起動して九死に一生を得たのである。そ の後も数日おきに同じようなメモリ不足が発生するが、なかなか原因を突き止めるこ とができなかった。言うまでもないが、freeの結果からはメモリが大量に空いている ように見えたからだ。PostgreSQLが大量に消費していた共有メモリは、freeからはま ったく確認できなかったのである。  共有メモリの様子は、ipcsコマンドで確認することができる。しかし共有メモリもス パースファイルの場合と似ていて、「確保はしてあるが実際には消費されていな い」ことがある。例えば次のようなコードで共有メモリが確保されたとする。 ----- #define SHM_SIZE 1024 * 1024 * 1024 (中略) shmget(IPC_PRIVATE, SHM_SIZE, 0700 | IPC_CREAT ) -----  このときipcs -mすると次のようになるため、1Gの共有メモリが存在するように 見える。 ----- ------ Shared Memory Segments -------- key shmid owner perms bytes nattch status 0x00000000 589835 root 700 1073741824 0 -----  しかし確保された領域に対して実際にアクセス(書き込み?)が行われたとき はじめて本当にメモリが消費される。このことはipcsでは確認できず、/proc/me minfoのMAPPEDなどを見ることで確認することができる。  次に2だが、これはmmapシステムコールをMAP_SHAREDで呼び出した場合に確保さ れるメモリ領域である。例えば次のようなコードで確保することができる。 ----- #include #include #include #include #include #include #include int main( int argc, char* argv[] ) { int fd; int i; int size; char* p; fd = open( "hoge", O_RDWR ); size = 1024 * 1024 * 1024; p = mmap( NULL, size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0 ); for( i = 0; i < size; ++i ) { *p = 0x61; ++p; } sleep( 1000 ); return 0; } -----  エラー処理まったくしていませんがナニか。このコードを使う場合、あらかじめ ddでhogeという名前の1Gのファイルを作成しておく必要がある。  このようにmmapで確保されたメモリもfreeからはまったく確認できない(共有メモリ ではないため、ipcsからも見えない)。topコマンドのSHRの行か、あるいは/proc/m eminfoのMAPPEDなどを見ることで確認することができる。VMware Serverが確保す る大量のメモリはこのタイプであるので、知らない場合には非常にやっかいだ。 ■0x07.) VMwareチューニングまとめ  ということで以下に筆者的なまとめを書いておく。  ・すべてのゲストOSがフルにメモリを消費しても大丈夫な量のメモリをホストOSに載せておく  ・ホストのメモリが実際にいくつ消費されているのかはぶっちゃけわからないので、 気にしないwww  ・どうしても気になる場合は/proc/meminfoを見る  ・mainMem.useNamedFile = "FALSE"は使わない  ・そのほかは普通にやる(Fit all virtual…やDisable memory page trimming など)  役に立たないfreeコマンドは解放してやりましょう。free free! x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第2章: デジタルフォレンジック入門 --- 著者:Kenji Aiko x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x01.) はじめに  デジタルフォレンジック(以下フォレンジック)とは、パソコンのハードディ スクに残るデータを特殊な方法で保全、解析し、利用者による不正行為の痕跡を 調査すること、らしいです。詳しくは以下を参照ください。 デジタル・フォレンジックとは http://itpro.nikkeibp.co.jp/article/Keyword/20070323/266134/  ここにはハードディスクと書かれてありますが、データの保存媒体はハードデ ィスクだけではありませんので、意味としては、フロッピーディスクやCD、DVD、 USBメモリ、SDカードなど、多様な保存メディアに対しての詳細なデータ解析が、 総称としての「デジタルフォレンジック」の意味かなと思います(たぶん)。  それで「じゃあ具体的にフォレンジックっていったい何をすることなのか?」 というのがこのテキストのテーマなのですが、簡単に言えば「記憶媒体に保存さ れているデータをダンプして、それを解析しようぜ!」という話です。  LinuxマシンにUSBメモリを指し、ddコマンドを打つとUSBメモリに保存されてい るデータがダンプされます。 ----- terminal # dd if=/dev/sdb1 of=/home/kenji/usb.bin -----  このダンプされたデータ(usb.bin)をバイナリエディタで解析すれば、いろ いろな情報が得られます。これが、フォレンジックの基本的な作業です。が、51 2GBとかあるハードディスクをダンプして、それをバイナリエディタで解析すると か普通に無理なので、いろいろなツールを使ってそれを自動化(もしくは便利に) して、すばやくデータ解析を行うというのが、本格的なフォレンジック作業とい うものかと思います。 ■0x02.) 削除したファイルはきっと削除されてません  USBメモリに100個の画像が保存されています。このUSBメモリをWindowsXPから 読み込み、全部の画像をコピーした後、USBメモリ自体をフォーマットします。フ ォーマットしたので、もう100個の画像を見ることはできませんが、実は物理メモ リ上には、まだこれらの画像のデータは保存されています。  フォーマットしたUSBメモリをddコマンドでダンプし、バイナリエディタで特定 のファイルデータを検索すると、おそらくヒットします。これは何故か? 答え は、OSが全部消すのがメンドイからです(ホントか?)。Windowsが管理するUSB メモリは、だいたいFATというファイルシステムが使われています。そして、ファ イルシステムにはヘッダというファイルを管理するデータが付加されており、そ こには、削除フラグという、このファイルが削除されたものであるかどうかを意 味するフラグが存在します。詳しくは以下のアドレスを参照のこと。 FAT FS フォーマットの実装についての覚え書き http://www.geocities.co.jp/SiliconValley-PaloAlto/2038/fat.html  ファイルを削除するという行為は、一見「ファイルデータが存在する物理メモ リをすべて0で埋める」というような、本当に削除するという印象を受けますが、 実際は「ファイルシステム上、データが見えないようになる」というだけであり、 本当にデータが消えているわけではありません。これは、全部0に書き換えると時 間がかかるが、削除フラグを立てるだけなら一瞬でできるため、このような仕様 になっていると考えられます。  このような、削除されたファイルが見える、消したファイルを復元できる、と いう方向性から、フォレンジックという技術が使われます。 ■0x03.) フォレンジックツール  実は、フリーのフォレンジックツールというのは、ほとんどなく、大抵の有用 なツールは有料でしかもかなり高価です。趣味で手を出せるものではありません。 興味がある方は「Encase」「フォレンジック」などで検索してみるとよいかと思 います。  というわけで、本格的にフォレンジックを学びたい方は、それを専門としてい る企業に就職してください(笑)。まぁなんだそれという感じですが、しかし、 フォレンジックはプログラミングと違い、専門的な機器が必要で、趣味でできる ほど簡単ではないようです。  それでも「雰囲気だけでも味わいたいぜ!」という方は、sleuthkit、autopsy というツールがあります。 sleuthkit http://www.sleuthkit.org/sleuthkit/ autopsy http://www.sleuthkit.org/autopsy/ The Sleuth Kit & Autopsy インストール・設定 http://pen-test.jpn.org/forensic:tsk:install  sleuthkitはダウンロードサイトからソースコードをダウンロードし、configure 、make、make install、のコンボでOKです。autopsyは少しややこしく、まずはデ ータやログを保存するディレクトリを作る必要があります。なので、あらかじめ「 mkdir /var/evidence」と入力し、保存先を作っておいて、makeを実行します。 ----- terminal # tar xvzf sleuthkit-2.52.tar.gz # cp -r sleuthkit-2.52 /usr/local/ # cd /usr/local/ # ln -s sleuthkit-2.52 sleuthkit # cd sleuthkit # ./configure (省略) # make (省略) # make install (省略) # mkdir /var/evidence # tar xvzf autopsy-2.10.tar.gz # cp -r autopsy-2.10 /usr/local/ # cd /usr/local/ # ln -s autopsy-2.10 autopsy # cd autopsy # make (省略) Enter the directory where you installed it: /usr/local/sleuthkit(←sleuthkitのインストール先を入力) Have you purchased or downloaded a copy of the NSRL (y/n) [n] n(←入力) Enter the directory that you want to use for the Evidence Locker: /var/evidence(←データやログの保存先を入力) -----  これでインストール完了です。あとはautopsyを実行します。 ----- terminal # ./autopsy -C 172.17.0.38 -----  IPアドレスの部分には、WebGUIを利用するPCのIPアドレスを入力します。auto psyはデフォルトでポート9999番を使いますので、ブラウザから「http://172.17. 0.38:9999/autopsy」と入力すると、帽子をかぶった犬がPCを見ている画面が表示 されます。 http://ruffnex.oc.to/kenji/forensic/pic/1.png ■0x04.) フォレンジックをやってみる http://ruffnex.oc.to/kenji/forensic/wb43.zip  ここにフォレンジックの対象となるファイルを用意しました。この中に隠され ているパスワードを探してください。USBメモリのイメージファイルなので、mou ntすれば内容を開くことはできますが、対象となるパスワードが書かれたファイ ルは削除しているため、専用のフォレンジックツールを使って解析する必要があ ります。 ----- terminal # mount -o loop wb43.bin /mnt/usb # tree /mnt/usb (保存された内容が表示されるが、削除されたファイルは当然出力されない) -----  というわけで、さっそくautopsyを使います。まず、犬の画面から、真ん中の「 NEW CASE」を選びます。すると「CREATE A NEW CASE」という画面に移動し、「Ca se Name」「Description」「Investigator Names」の3つの入力ボックスが表示さ れます。ここに入力する名前はプロジェクト名なので、適当で構いません。すべ て「test_wb43」と入力して、「NEW CASE」をクリックしてください。 http://ruffnex.oc.to/kenji/forensic/pic/2.png  次に「Creating Case: test_wb43」という画面に移ります。そのまま「ADD HO ST」をクリックしてください。さらに「ADD A NEW HOST」画面に移ります。デフ ォルトのまま、何も変更せずに「ADD HOST」をクリックしてください。 http://ruffnex.oc.to/kenji/forensic/pic/3.png http://ruffnex.oc.to/kenji/forensic/pic/4.png  「Adding host: host1 to case test_wb43」という画面に移ります。「ADD IM AGE」をクリックしてください。これで解析の準備ができました。次の画面には、 8つほどボタンがありますが、「ADD IMAGE FILE」を押してください。すると「AD D A NEW IMAGE」画面に進みます。ここで「Location」に「解析対象のファイルパ ス」を、「Type」に「Disk」を、そして「Import Method」に「Copy」を入れます。 http://ruffnex.oc.to/kenji/forensic/pic/5.png http://ruffnex.oc.to/kenji/forensic/pic/6.png http://ruffnex.oc.to/kenji/forensic/pic/7.png  これで「NEXT」をクリックします。すると、Warningが出て「Disk Image」と「 Volume Image」の選択がせまられます。ここで「Volume Image」を選択し「OK」を クリックしてください。 http://ruffnex.oc.to/kenji/forensic/pic/8.png  最後に「Image File Details」という画面が出ます。すべての項目はデフォル トのままで構いません。「ADD」をクリックしてください。少し時間がかかり、解 析が終了します。解析が終了したら「OK」をクリックしてください。 http://ruffnex.oc.to/kenji/forensic/pic/9.png http://ruffnex.oc.to/kenji/forensic/pic/10.png  これで読み込みは完了です。「ANALYZE」をクリックして、解析画面へ移ります。 次に一番左の「FILE ANALYSIS」をクリックします。すると、現在保存されている ファイルや、削除されたファイルなどが表示されます。 http://ruffnex.oc.to/kenji/forensic/pic/11.png http://ruffnex.oc.to/kenji/forensic/pic/12.png http://ruffnex.oc.to/kenji/forensic/pic/13.png  また、左下に「ALL DELETED FILES」というボタンがあり、これをクリックする ことで、削除されたファイルを確認、復元できます。 http://ruffnex.oc.to/kenji/forensic/pic/14.png  削除されたファイルをひとつずつ見ていくと、パスワードが書かれたファイル (すでに削除されているファイル)が表示されます。このように、OSからは見え ないデータをダンプして解析することで、削除されたり、隠されたファイルを復 元することができます。 ■0x05.) データを完全に消すには?  Windowsからフォーマットを行ったUSBメモリやフロッピーなどは、OSからは見 えなくなりますが、完全にデータが消されているわけではないため、autopsyから 内容を解析できます。フロッピー(もしくはUSBメモリ)を入れ、ddコマンドを使 うと、内容がダンプできます。そのダンプしたデータをautopsyで読み込むことで、 まだ完全に消されていないデータを解析できます。 ----- terminal # dd if=/dev/sdb1 of=/home/kenji/floppy.bin (floppy.binをautopsyで解析可能) -----  というわけで、フォーマットは完全にデータを消す方法としては必ずしも正し くないわけですが、では、「完全にデータを消すにはどうしたらよいか?」とい うと、同じくddコマンドを使います。 ----- terminal # dd if=/dev/zero of=/dev/sdb1 -----  USBメモリへ可能な限りゼロを書き込みます。また、ゼロではなく乱数を使って もよいです。 ----- terminal # dd if=/dev/uramdom of=/dev/sdb1 -----  このような方法で物理メモリを埋めることで、データを完全に消去できます。 詳しくは以下を参照のこと。 Linux(UNIX)標準コマンドによるデータ抹消 http://www.cybernetic-survival.net/dd.htm ■0x06.) さいごに  正直、今回書いたものは、まったく専門分野ではありません(^^;。というか、 実は今回はたまたまフォレンジックを少し学ぶ機会があったため、それの記念に 書いたものです(覚え書き)。  コンピュータセキュリティはかなり幅が広いので、ある分野では天才的なエン ジニアでも、専門を少し外れれば初心者レベルだったりもします。でも、だから こそ常に学ぶ姿勢が大切だなぁと、最近改めて感じました。 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第3章: 基礎暗号学講座・第18回 〜平方剰余とルジャンドル記号〜 --- 著者:IPUSIRON x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x01.) はじめに  前回のWB42ではRabin暗号を紹介し、そのRabin暗号がOW-CPA安全であるために は、素因巣分解が困難であることと等価であることを述べた。しかし、仕様通り に復号しても、正しい平文に一意に決定できないという特徴を持っていた。  この一意性に関する課題を解決した暗号方式がある。この暗号を解説するため には、さらにいくつかの数学的概念を準備する必要がある。  そこで今回は平方剰余(2次合同方程式、平方剰余、ルジャンドル記号)、次回 はヤコビ記号(ガウスの補題、相互法則、ヤコビ記号)、そしてその後で一意性 の問題を改善した暗号方式を紹介する予定である。 【追記】一部の文章でルジャンドル記号をラグランジュ記号と間違えて表記していました。現在は修正済みです。指摘ありがとうございます。 ◇ ■0x02.) 2次合同方程式  x^2≡a (mod p)という2次合同方程式には、解があるときとないときがある。  この事実を数値例で考察するために、p=7(奇素数)のときを考えてみる。まず 乗法表を書く。乗法表なので0は除外され、それ以外の1〜6の掛け算の表になる。 mod 7で考えるので、7で割った余りが書かれている。 ----------------------------- | ×| 1 | 2 | 3 | 4 | 5 | 6 | |---+---+---+---+---+---+---| | 1 | 1 | 2 | 3 | 4 | 5 | 6 | |---+---+---+---+---+---+---| | 2 | 2 | 4 | 6 | 1 | 3 | 5 | |---+---+---+---+---+---+---| | 3 | 3 | 6 | 2 | 5 | 1 | 4 | |---+---+---+---+---+---+---| | 4 | 4 | 1 | 5 | 2 | 6 | 3 | |---+---+---+---+---+---+---| | 5 | 5 | 3 | 1 | 6 | 4 | 2 | |---+---+---+---+---+---+---| | 6 | 6 | 5 | 4 | 3 | 2 | 1 | -----------------------------  この表からわかることとして、すべての行は1〜6の値が1回出ている。これはp =7と素数を選択したからである。もし、pが合成するなら、こうはいかない。0が 登場したり、同じ値が登場したりするのである。  ここで重要なのは、対角線の部分である。1列目の部分と対角線の部分だけを抽 出しておく。 --------- | x |x^2| |---+---| | 1 | 1 | |---+---| | 2 | 4 | |---+---| | 3 | 2 | |---+---| | 4 | 2 | |---+---| | 5 | 4 | |---+---| | 6 | 1 | ---------  この表に注目すると、x^2の部分が上下対象になっていることがわかる。これを 直観的に理解するためには、xの列のところを書き換えればよい。mod7の世界では、 4≡-3、5≡-2、6≡-1なので、次のように書き換えられる。 --------- | x |x^2| |---+---| | 1 | 1 | |---+---| | 2 | 4 | |---+---| | 3 | 2 | |---+---| | -3| 2 | |---+---| | -2| 4 | |---+---| | -1| 1 | ---------  こう書き換えてみれば自明であろう。xの列には、1,2,3にマイナスをつけて逆 順にした3,2,1が登場している。  Z_p^*の任意のbにおいて、b^2=(-b)^2 (mod p)が成り立つ。つまり、2つのbと -bが2乗の世界では一致するということである。  この表から2次合同方程式x^2≡a (mod 7)の解が存在するときのa、解が存在し ないときのaが判明する。x^2の列に登場する数は、ある整数xの平方をmod pの世 界で考えた値である。つまり、a=1,4,2のときにx=1,2,3という解があることがわ かる。  一方、残りのa=3,5,6には解がない。なぜならば、x^2の列のところに登場しな いからである。  ここで2次合同方程式の解の有無によって、aの呼び名を変えておく。 [定義]ある整数xの平方にmod pで合同な整数を(mod pの)平方剰余と呼ぶ。一方、 そうでない整数を(mod pの)平方非剰余と呼ぶ。  p=7の例でいえば、p=7の平方剰余は1,4,2であり、p=7の平方非剰余は3,5,6であ る。  pの値が一般の場合(p=N)でも平方剰余という概念は成り立つが、まずはpを奇 素数としてスタートする。  平方剰余をきちんと定義すると次のようになる。 [定義]p(≠2):素数、pはaを割り切らないとする。 「aがpを法とする平方剰余」 ⇔def「x^2≡a (mod p)が解を持つ」 ⇔「∃b∈Z,b^2≡a (mod p)」  さらに、平方剰余・平方非剰余の集合を定義する。 [定義]mod pの平方剰余の集合をQR_p、mod pの平方非剰余の集合をQNR_pと表記す る。  言い換えると次のようになる。 QR_p={a|a∈Z_N^* ∧ (∃x∈Z_p^* s.t. a≡x^2 (mod p))} QNR_p={a|a∈Z_N^* ∧ (∃x∈Z_p^* s.t. a≠x^2 (mod p))}  p=7の例でいえば、QR_7={1,2,4}、QNR_7={3,5,6}である。  同様にp=3のときを考察すると、QR_3={1}、QNR_3={2}である(各自確かめて欲 しい)。p=5のときは、QR_5={1,4}、QNR_5={2,3}である。  pがいずれの場合も、(QR_pに含まれる値の数)=(QNR_pに含まれる値の数)、 即ち|QR_p|=|QNR_p|という関係になっていることが確認できる。そして、|QR_p| =(p-1)/2である。 ■0x03.) 平方剰余と指数  各素数pに対して、原始元g(正整数)が存在する。このとき、1〜(p-1)までの 整数をgのべきで表すことができた。  aの指数をtとすると、指数の定義よりInd_g(a)=tが存在する。つまり、a≡g^t (mod p)が成り立つ。  もし、tが偶数、即ちt=2sならば、a≡g^(2s)≡(g^s)^2 (mod p)である。  この(g^s)^2≡a (mo p)と2次方程式x^2≡a (mod p)を比較すると、g^sはxの解 である。つまり、aは平方剰余である。  これは逆も成り立つ。  以上をまとめて、定理としておこう。 [定理] ・「整数aのmod pの指数:偶数」⇔「aはmod pの平方剰余」 ・「整数aのmod pの指数:奇数」⇔「aはmod pの平方非剰余」  例えば、p=7のときにおける最小の原始根はg=3である。このときの指数tを計算 して、指数表を作る(指数表が手元にあれば計算の手間は省ける)。 [1]a=1のとき、t=Ind_g(a)=Ind_3(1)=0となる。  なぜならば、g=3をt=0乗すれば、mod 7の世界でa=1になるからである。 [2]a=2のとき、t=Ind_g(a)=Ind_3(2)=2となる。  なぜならば、g=3をt=2乗すれば、mod 7の世界でa=2になるからである。 [3]a=3のとき、t=Ind_g(a)=Ind_3(3)=1となる。  なぜならば、g=3をt=1乗すれば、mod 7の世界でa=3になるからである。 [4]a=4のとき、t=Ind_g(a)=Ind_3(4)=4となる。  なぜならば、g=3をt=4乗すれば、mod 7の世界でa=4になるからである。 [5]a=5のとき、t=Ind_g(a)=Ind_3(5)=5となる。  なぜならば、g=3をt=5乗すれば、mod 7の世界でa=5になるからである。 [5]a=6のとき、t=Ind_g(a)=Ind_3(6)=3となる。  なぜならば、g=3をt=3乗すれば、mod 7の世界でa=6になるからである。  これでp=7かつg=3の指数表が書ける準備ができた。 --------- | a | t | |---+---| | 1 | 0 | |---+---| | 2 | 2 | |---+---| | 3 | 1 | |---+---| | 4 | 4 | |---+---| | 5 | 5 | |---+---| | 6 | 6 | ---------  指数t=偶数、即ちt=0,2,4のとき、aはそれぞれ1,2,4である。これらはp=7の平 方剰余であった。  また、指数t=奇数、即ちt=1,3,5のとき、aはそれぞれ3,6,5である。これらはp =7の平方非剰余であった。  以上により、確かに定理が成り立つことが確認できた。 ■0x04.) 平方剰余の乗法性  a,bを平方剰余とすると、x^2≡a、y^2≡b (mod p)を満たすx,yが存在する。  よって、(xy)^2=x^2・y^2=ab (mod p)となり、abも平方剰余であることがわか る。  つまり、「(平方剰余)×(平方剰余)=(平方剰余)」が成り立つ。これを 指数の言葉を使って言い換えれば、「(aの指数が偶数)×(bの指数が偶数)⇒ (abの指数が偶数)」となる。なぜならば、次のように計算できるからである。 Ind(ab) =Ind(a)+Ind(b) (∵Indの性質) =偶数+偶数 =偶数  こうした平方剰余・平方非剰余の関係性は、乗法表から直観的に理解できる。 ずっとp=7の場合を考えてきたので、ここでもp=7の乗法表を用いることにするの で、再び引用する。 ----------------------------- | ×| 1 | 2 | 3 | 4 | 5 | 6 | |---+---+---+---+---+---+---| | 1 | 1 | 2 | 3 | 4 | 5 | 6 | |---+---+---+---+---+---+---| | 2 | 2 | 4 | 6 | 1 | 3 | 5 | |---+---+---+---+---+---+---| | 3 | 3 | 6 | 2 | 5 | 1 | 4 | |---+---+---+---+---+---+---| | 4 | 4 | 1 | 5 | 2 | 6 | 3 | |---+---+---+---+---+---+---| | 5 | 5 | 3 | 1 | 6 | 4 | 2 | |---+---+---+---+---+---+---| | 6 | 6 | 5 | 4 | 3 | 2 | 1 | -----------------------------  演算対象の部分(1行目・1列目)の部分を平方剰余と平方非剰余の部分にまと めた形に書き直す。つまり、1,2,3,4,5,6という部分を1,4,2,3,5,6(前半3つが平 方剰余QR_7の元、後半3つが平方非剰余QNR_7の元)とするのである。 ----------------------------- | ×| 1 | 4 | 2 | 3 | 5 | 6 | |---+---+---+---+---+---+---| | 1 | 1 | 4 | 2 | 3 | 5 | 6 | |---+---+---+---+---+---+---| | 4 | 4 | 2 | 1 | 5 | 6 | 3 | |---+---+---+---+---+---+---| | 2 | 2 | 1 | 4 | 6 | 3 | 5 | |---+---+---+---+---+---+---| | 3 | 3 | 5 | 6 | 2 | 1 | 4 | |---+---+---+---+---+---+---| | 5 | 5 | 6 | 3 | 1 | 4 | 2 | |---+---+---+---+---+---+---| | 6 | 6 | 3 | 5 | 4 | 2 | 1 | -----------------------------  この表は次のような表に帰着していることがわかる。 -------------------------------------- | × | 平方剰余 | 平方非剰余 | |----------+------------+------------| | 平方剰余 | 平方剰余 | 平方非剰余 | |----------+------------+------------| | 平方剰余 | 平方非剰余 | 平方剰余 | --------------------------------------  さらに、QR_7={1,2,4}は乗法群を成すこともわかる。なぜならば、任意の元に 対して逆元が存在し、さらに単位元も存在しているからである。 ----------------- | ×| 1 | 4 | 2 | |---+---+---+---| | 1 | 1 | 4 | 2 | |---+---+---+---| | 4 | 4 | 2 | 1 | |---+---+---+---| | 2 | 2 | 1 | 4 | -----------------  以上の観察により、次の関係式が直観的に得られる。 [定理] ・(平方剰余)×(平方剰余)=(平方剰余) ・(平方剰余)×(平方非剰余)=(平方非剰余) ・(平方非剰余)×(平方非剰余)=(平方非剰余) ■0x05.) ルジャンドル記号  p=2の平方剰余は1だけなので、以下はpを奇素数とする。  pが小さいときは1から(p-1)/2まで順に調べれば平方剰余であるか平方非剰余で あるかがわかる。さらに、それを与える解x、即ちmod pについての平方根もわか る。  それでは本題であるルジャンドル記号((○/△)という表記)を定義する。 [定義]p:奇素数とする。 ・(a,p)=1かつaがpの平方剰余のとき、(a/p)=1 ・(a,p)=1かつaがpの平方非剰余のとき、(a/p)=-1 ・p|aのとき、(a/p)=0  例えば、p=7のとき、QR_7={1,2,4}であったので、ルジャンドル記号を使えば次 のようになる。 ・(1/7)=(2/7)=(4/7)=1 ・(3/7)=(5/7)=(6/7)=-1  先ほど見た平方剰余・平方非剰余の関係式とも一致している。例えば、(2/7)× (3/7)=1×(-1)=-1、また(6/7)=-1で一致する。  ルジャンドル記号を用いた最初の定理を紹介する。 [定理]「a≡b (mod p)」⇒「(a/p)=(b/p)」  証明はほとんど自明だが、きちんと書くと次のようになる。 [証明](左辺)=(a/p)=1 or -1で、どちらが選ばれるかはx^2≡a (mod p)が解 を持つかどうかに依存する。  一方、(右辺)=(b/p)=1 or -1で、どちらが選ばれるかはx^2≡b (mod p)が 解を持つかどうかに依存する。仮定より、a≡b (mod p)なので、右辺の値はx^2≡ a (mod p)が解を持つかどうかに依存するといえる。これは、左辺の話とまったく 同じ状況である。よって、状況に依存する結果も一致するのは明らかである。 □  この定理により、ルジャンドル記号の分子を分母で割った余りに置き換えても 問題ないことが保障された。  例えば、(72/7)=(2/7)=(-5/7)と計算できる。  すでに、次の結果を見た。 [定理] ・「整数aのmod pの指数:偶数」⇔「aはmod pの平方剰余」 ・「整数aのmod pの指数:奇数」⇔「aはmod pの平方非剰余」  aがZ_p^*={1,…,p-1}上を走ると、指数Ind(a)は{0,…,p-2}のいずれか1つに重 複せずに該当するという事実は過去に述べた。pは奇数(かつ素数)なので、集合 {0,…,p-2}に含まれる元は偶数個ある。  つまり、そのうち半分は偶数であり、残りの半分は奇数である。よって、平方 剰余の個数は全体の半分である。|QR_p|=|QNR_p|=|Z_p^*|/2=(p-1)/2が成り立つ。  これをルジャンドル記号を使えば、次のように表記できる。 [定理](a/p)=(-1)^{Ind(a)}  次に、ルジャンドル記号の乗法性について見てみる。 [定理](ab/p)=(a/p)(b/p) [証明]場合分けする。 [1]p|aまたはp|bのとき  ルジャンドル記号の定義により両辺とも0である。 [2]a/|pかつb/|pのとき (左辺) =(a/p)(b/p) =(-1)^{Ind(a)}×(-1)^{Ind(b)} =(-1)^{Ind(a)+Ind(b)} =(-1)^{Ind(ab)} =(ab/p) =(右辺) □  この証明は平方剰余の乗法性の証明とほとんど同じであっただろう。単に表現 が違うだけである。  この定理により、合成数nに対する(n/p)を求めるときは、nを素因数分解すれば よい。そうすれば、最終的に(-1/p) or (2/p) or (奇素数)の積に帰着できる。  nが大きいときは、nを素因数分解できない。そのため、ルジャンドル記号だけ では困るので、拡張版のヤコビ記号というものが存在する。これは次回解説する 予定である。  今回は最後にオイラー規準と呼ばれる定理を紹介する。(a,p)=1であっても、 (a,p)≠1でも成り立つ。 [定理](a/p)≡a^{(p-1)/2} (mod p)  まず証明する前に、p=7,a=4のときで観察してみる。 (a/p) ≡a^{(p-1)/2} (mod p) (∵オイラー規準より) ≡4^{(7-1)/2} (mod 7) ≡4^3 (mod 7) ≡64 (mod 7) ≡1 (mod 7)  すでに見たように4∈QR_7より(4/7)=1であり、互いが一致する。  それでは証明に入ろう。 [証明]左辺の(a/p)が0,1,-1であるかにより、場合分けする。 [1](左辺)=(a/p)=0のとき  ルジャンドル記号の定義よりp|aである。 (右辺) ≡a^{(p-1)/2} (mod p) ≡0^{(p-1)/2} (mod p) (∵aはpで割り切れるので、mod pの世界でaはもちろん 0になる) ≡0  よって、左辺と右辺が一致する。 [2](左辺)=(a/p)=1のとき ∃x∈Z;a≡x^2 (mod p) (右辺) ≡a^{(p-1)/2} (mod p) ≡x^(p-1) (mod p) (∵a≡x^2) ≡1 (mod p) (∵フェルマーの小定理)  よって、左辺と右辺が一致する。 [3](左辺)=(1/p)=-1のとき  pの原始元をgとすると、Ind_g(a)=2m+1が成り立つ。 (右辺) ≡a^{(p-1)/2} (mod p) ≡{a^(2m+1)}^{(p-1)/2} (∵Ind_g(a)=2m+1より、a=g^(2m+1)) ≡{g^(p-1)}^m・g^{(p-1)/2} ≡g^{(p-1)/2} (∵原始元の定義より、g^(p-1)≡1) ≡-1 (∵log_g(-1)=(p-1)/2)  よって、左辺と右辺が一致する。  したがって、[1]〜[3]より、定理が成り立つ。 □ ■0x06.) おわりに  まだまだ数学的準備は続くため、今回はこれで終わります。次回はルジャンド ル記号の世界をさらに見ていく予定です。具体的にいえば、ガウスの補助定理、 相互法則などです。そして、少し触れたがルジャンドル記号の計算には分子の素 因数分解が必要であり、分子の素因数分解ができないほど大きいとき(分母も大 きいと、分母でmodを取っても分子が大きいままである)、計算不可能になってし まいます。この問題を解決した概念としてヤコビ記号が存在するので、これも次 回解説予定です。  なお、自分の勉強も兼ねてやっているので、もしかして勘違いや間違いがある かもしれません。そのときはセキュリティアカデメイアの掲示板でもよろしいの で、教えてください。宜しくお願いします。 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第4章: お知らせ --- x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ○Wizard Bible(http://wizardbible.org/)では随時、執筆ライターを募集して います。  扱う内容のテーマは広義での「under ground」です。例えばハッキングやセキ ュリティからピッキングなどと幅広い内容を考えています。また特殊な職業や趣 味の解説などでも構いません。  一回きりでも構いません。また必ず毎回連載する義務もありませんので、でき る範囲で構いません。気軽に声をかけてください。 ○Kenji AikoさんがQ&Aを作ってくれました。初めて参加する人でもわかりやすく 書かれていますので、参考にしてください。 http://wizardbible.org/wbQandA.html ○Wizard Bibleに参加希望の方は気軽にメール(ipusiron@gmail.com)ください。 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ---- 第5章: 著者プロフィール --- x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■金床 ●Job: プログラマー ●Web: http://guardian.jumperz.net/, http://www.jumperz.net/ ●Mail: anvil@jumperz.net ●Comment:  8〜9月は久しぶりにDVDを借りてきて数本の映画を見ました。しかし失敗したの は「バイオハザード3」の次に「アイ・アム・レジェンド」を見てしまったことで す。ちょwwwwwwwこの2本同じ映画wwwwwwww  さてさて数年ぶりに「これは!」と思った映画と出会えました。「ミスト」で す。  マダ ファッカ!!!  カック サカ!!!  とチェーンソーを手にした黒人が吐き捨てる素敵な映画です。「ショーシャン クの空に」「グリーンマイル」に続く感動巨編の第3作目で、心を洗われること間 違いなし。ぜひ愛する人や家族と揃って見て欲しい映画です。  …見たあとでボクに文句を言うことは固く禁じます。 ●自分の活用している情報収集法  ・まずGoogleで調べる  ・よいページからリンクされている記事などをあたる  ・自分の手元でゴソゴソして、関連するより良いキーワードが見つかったらま たGoogleで調べる  と言う感じです。まぁ普通ですね。  「おお、こんなことが!」と感心させられるネタの記事が数年前のものである ということが多いため、日々の最新情報を追いかける必要は感じていません。ネ ット上に蓄積された大量の情報の中から自分にとっての金(カネじゃなくてキンでつ) を探すことに興味があります。そのためRSSリーダは使っていません。 ■Kenji Aiko ●Job: engineer ●Web: http://ruffnex.oc.to/kenji/ ●Mail: kenji@ruffnex.oc.to ●Comment:  気づけば10月、今年も残すところあと3ヶ月となりました。うーん、思い返せば DEFCONといい、BlackHatといい、今年は落選しまくりの1年だなぁ(泣)。ああー、 でももうすぐ英会話通い始めて1年です。どおりでそれなりに話せるようになって きたわけだ、と思いつつも、英語で書いたCFPで落選してたら意味ねーよ…orz。 ●自分の活用している情報収集法:  2chのニュース速報板は、最近話題のニュースを知るにはうってつけだと思いま す。特に毎日ニュースをチェックすることが当たり前ではない人の場合、1週間く らいニュースを見なかったりすることもありますが、それでも2chのニュース速報 板に上がっているニュースをいくつか確認すると、だいだいの話題が分かります。 ■IPUSIRON ●Job: オーク(Oblivion) ●Web: http://akademeia.info ●Mail: ipusiron@gmail.com ●Comment:  セキュリティの秋の時期になりましたね。セキュリティのイベントもたくさん あるようです。 http://ja.avtokyo.org/ http://www.blackhat.com/html/bh-japan-08/bh-jp-08-main.html  ところで、2年ぶりの新刊が10月に出る予定です。詳細は後ほど掲示板で告知し ます。 ●自分の活用している情報収集法:  特にこれといった方法はしてませんが、本屋に定期的に行って平積みの本のチ ェックはよくします。平積みの本は売れ筋あるいは本屋が売りたい本であり、ト レンドを読む材料にできます(一番楽しいのはトレンドを作ることかもしれませ んが)。  すでに体系化されている情報に関しては、最初は本を買いあさり、それでも足 りない場合はWebサイトを参考するようにしています。理由は紙の匂いを嗅ぐ方が 落ち着くからです。