を書きます。たとえは、 ( 3 + 2 ) x ( 8 ー 3 x 2 ) は、 3 に 2 を加えた値と、 3 と 2 を掛けた値を 8 から引 いたものを掛け合わせる式を未します。これは小学校で 教わることなので、とくに説明しなくても誰もか理解でき るでしよう。たしかに、慣れているので人間には分かりや すい記法ですが、言算機にとってはかならすしもそうとは いえません。演算の対象となる値がどこからどこまでなの かが、パッと見ただけではよく分からないのです。また、 計算機は式全体を眺めて引・算をするわけではありません。 皆さんもご存しのように、入力のう頁から順番に 1 文字 すっ読み込んで処理していきます。このような観点からみ ると、中置記法では演算子を読み込んでも処理が開始でき す、プログラムか複雑になります。 C 言語の関平出しを考えてみてください。関数呼出し の構文は、次のようになっています。 関数名 ( 実引数の並び ) 関数名の部分を演算子とみなし、さらに実引数の並びを 寅算数だと思えば、これはちょうど前置記去と似た記法 になります。前置言去では、ます演算子を言当し、その後 ろに寅算数を並べます。たとえは次のようになります。 + ( 1 , 2 ) 関数乎出しのなかに別の関数乎出しが入っていても、 の記去で間題なく言当できます。 さらに、演算子か寅算数をいくっとるかがあらかじめ 決まってい川ま、括弧も不要になります。ここか重要なと ころです。十と x のどちらも 2 つの寅算数をとるのが分 かっていれは、上の式は、 十 1 x 2 3 と簡略化できます。このように、演算子を地頁に書き、被 X ー X う頁から順番に 2 つの数値を読み込むと、次のようにな スタック 3 2 十 8 3 2 X ー X す、スタックも空の状態です。 後置記法で言当すると、ちょうど日本語の、、 1 と 2 を足 す " と同し順番になります。中置記去の例の式を後置記法 当すると、次のようになります。 3 2 十 8 3 2 x ー x 最後の x が、中置記法で真ん中に置かれていたもので す。寅算数は中置記法の式と同し順番て並び、演算子は 実際に演算する順番に変わっています。 算術式を後置去に変換すると、データ墹寺するスタ ックを用意すれは、前から順に読み込みながら式の値を計 算することができます。数値を読み込んた場合には、それ をスタックの頁に追加します。演算子を読み込んだ場合 には、スタックの上から演算子に必要な数の直を読み出 して演算をおこない、結果をスタックに書き戻すという操 作をします。この操作の結果、入力を最後まで読み込んだ あとにスタックに 1 つだけ残った値が、求める式の値と なります。 実際にやってみましよう。最初は何も読み込んでおら ります。 2 3 スタック 十 8 3 2 X ー X 演算子十を読み込んだところで、スタックから 2 つの 直を取り出して加算をおこない、その結果である 5 をス タックに書き戻します。 5 スタック 8 3 2 X ー X 演算数を後ろに並べる記去が前置記法です。 76 1 2 十 演算子十を記述します。 えは。 1 十 2 を表現するには、被演算数の 1 と 2 のあとに は、ます寅算数を言当してから演算子を書きます。たと 前置記法と逆順に書くのが後置記法です。後置記法で さらに数値を読み込むと次のようになります。 スタック 5 8 3 2 UNIX MAGAZINE 2000.8
図 2 異体字変キ列 Merno 1 0f2 マ LI 「 lfiled 図 3 「 1 」を入力 Merno 2 0f2 インターフェイスの街角 マ LI 「甬 d 1 ① E ) ①国国⑤・、 択文字列を入力文字列と同様に扱えるように拡張すれは、 図 1 のような辞書を使って異体字変換ができるようにな ります。図 2 の例は、「沢」の字をドラッグで尺してか ら空白文字を入力したところです。 候補手法の拡張 入力文字列が与えられたとき、単語を検索するだけでな く任意の引算かできればたいへんイリです。言算内容を一 般ューサーカ甘旨定できれは、さらに有用でしよう。 このためには、計算モジュールを POBox から呼び出 す必要があります。さいわい、 PalmPilot のアプリケー ションには、ほかのアプリケーションからサプルーチンの ように呼び出せるメカニズムが用意されています 3 。この メカニズムを用いて、任意のテキストを別のテキストに変 換するための汎用のモジュール形式もひろく使われていま す。これを使えは、 POBox を簡単に刻長できます。 拡張 POBox 吏用例 図 3 ~ 5 は POBox て言算モジュールを使用した例で す。 図 3 は POBox で「 1 」を入力したところです。辞書 には、、 1 / 壱 " 、、 100 / 百 " などのエントリが登録されている ため、この状態で POBox は、、壱 " や、、百 " など嚇甫と して表示します。 「 123 」まで入力すると、それにマッチする単語は辞書に 登録されていないので、↑甫としては、、 123 " だけが表示 3 この機能は、 [find] ボタンによるオ剱きなど吏われています。アプリケー ション独自のデータはそのアプリケーションでしカ寸きできないので、別 のアプリケーションのデータを検索したいときは、該当するアプリケー ションをキきサプルーチンのように呼び出します。 UNIX MAGAZINE 2000.8 図 4 「 123 」を入力 M m020f2 123 ( ) 123 + 4 ( 匿 ) Merno 20f2 されます ( 図 4 ) 。 図 5 、 123 十 4 " と入力 マ LInflled マ Llnfiled さらに「十 4 」と入力して、、 123 十 4 " とすると、入力文 字列本か計算モジュールに渡され、計算結果の、、 127 " 甫に表示されます ( 図 5 ) 。 このように、計算式の入力によって自動的に値を計算 し、一嚇甫として表示させることもできます。 159
いつでも使えるインターネット ファイアウォールを導入しただけで安心するのではな く、内部の情理も白寉におこないましよう。 ファイアウォールの役割 次に、ファイアウォールの彳齬リについて詳しく説明し ます。 境界防御を実現する ファイアウォールの基本的な彳齬リの 1 つは、外部から の悪意あるアクセスから内部ネットワークや引算機を守る ことです。 ファイアウォールは、外部ネットワークと内部ネット ワークのあいだに位置し、そこを流れる通信を、 ・フィルタリング ロ・じ などの手法を用いて制御し、外部からの不正なデータやア クセスを遮断しますにれらの手法については、あとで詳 しく説明します ) 。 一方、同様の手法を逆方向の通信に適用して、内部のデ ータや青報が外部に漏れるのを防いだり、監視する彳難リも もっています。たとえは、顧客の個人情報を扱う部署か らは社外に茁妾メールを送れないようにするなど、特定の ユーザーに対してサービスを制限したり、あるいは、生産 性を著しく低下させる Web ページへのアクセスを禁止し たりといったことが考えられます。 さらに、電子メールロ寸されたウイルスの内部へ刎受 入を防ぐとともに、外部へ出ていかないようにすることも あります。もちろん、ウイルスを外部にばらまかないとい う道勺な目的もありますが、自組織の評判を落とさない ためというほうか重視されるかもしれません。 当然、、、内部のデータや情報 " のなかには、内部ネット ワークに関する情報も含まれています。たとえば、内部で 使用している IP アドレス、サーバーの種類やバージョ ン番号などです。これら窈青報か外部に漏れたからといっ て、すぐに脅威に結びつくわけではありません。しかし、 攻撃者がファイアウォールを突破して侵入したあと、効率 よく行動するための有益な情報となる可能生があります。 理解しにくいかもしれないので、具イ勺な例を用いて説 40 明しましよう。 電子メールのヘッダには、そのメールを中継したメール サーバーの IP アドレスやホスト名、メールサーバーのプ ログラム名とバージョンなどの情報か記録されています。 初めて見たときはたんなる記号の羅列としか思えません が、ある程度の訓練を積むと、そこに言求されているメー ル醪経路のどこからどこまでカ吶部ネットワークなのか カ甘当屋できるようになります。もし、そのなかにセキュリ ティ・ホールがあるバージョンのサーバー・プログラムの 名前があれば、そのサーバーがほは確実に次の攻撃対象に なります。さらに、ある程度以上の規模の糸目織では、サー バー類の計算機は同しサプネットワークに接続されている ことが多いので、メールサーバーの IP アドレスか攻撃者 に漏れると、その他のサーバー計算機も簡単に発見されて しまいます。このような理由から、現在はファイアウォー ルがメールを内部から外部へ中継するときに、ヘッダ部分 の中糸圜辭長を削除する組系勧ゞ多くなりました。 セキュリティ文コストのイ咸 通常のファイアウォールは 1 台の計算機やルータ、ある いは数台のルータと計算機を組み合わせて構築します。そ れらをセキュリティ的な問題がないように言 t し、構築、 設定、運用するのは容易ではありません。 しかし、さきほど書いたように、さまざまな OS やアプ リケーションに関するセキュリティ↑欝にを収集し、すべて の言算機にセキュリティ・パッチを当て続けるにはとんで もないコストがかかります。お金はともかく、長い時間を かけ、気力をふりしは、り、愛を湯水のように注がなくては いけません。それほどまでして大事に育てても、被害に遭 う可能性は否定できないのです。 このように、ファイアウォールの導入や管理は簡単では ありません。しかし、ファイアウォールの導入により、と くにセキュリティに注意して管理する計算機の数カ鰔りま す。結果として、全 f 勺に考えると管理にかかるコストは 低くなるはすです。 ログの記録とレポーティンク サイトの外部と内部とのあいだの通信か集中するファイ アウォールは、通信の言当求 ( ログ ) を収集するのに適した ポイントでもあります。 ファイアウォールでのログ収集の目的は、おもに次の 2 UNIX MAGAZINE 2000.8
0 POBox では、 j 尺・確定した単語をつねに辞書の地頁 に追加する学習方式を採用しています。 1 台の言 t 算機て学 習させている場合はいいのですが、複数の計算機て学習さ せた辞書をマージするときは注意が必要です。 たとえば、匆琪羽大態の辞書か : XXX bbb だったとします。このとき、ある言算機で単語、、 使うと、辞書は次のように変化します。 XXX bbb # 辞書 B 次のように変化します。 bbb XXX # 辞書 A " を 一方、別の計算機で単語、、 bbb" を使用すると、辞書は これらの辞書をマージする場合、上または下から順番に この場合、マージされた辞書は以下のようになるべきと に A に置き換わってしまいます。 にある単語をすべて地寬こ追加しようとすると、 B か完全 単語だけを付け加えようとしても B は変化しませんし、 A たとえは辭書 B に辞書 A をマージするとき、 B にない 単語を追加しようとするとうまくいきません。 XXX bbb # 辞書 C ッじ、 田われます。 のような辞書のマージを簡単におこなうことができます。 ファイルの差分を引算する diff コマンドを使えば、 diff による辞書のマージ ら辞書 C を作成できたはうがイ叫リでしよう。 て憶えておくのは大変なので、辞書 A と辞書 B の現伏か マージすれはよいでしよう。しかし、学習した単語をすべ であることがはっきりしている場合は、それらを別にして 、 aaa" は辞書 A で、、、 bbb" は辞書 B で学習された単語 辞書をこのようにするにはどうすればよいでしようか。 164 di 仕は、通常は 2 つのファイルの差分だけを出力します が、 -D オプションを指定すると、 #ifdef て相違部分を区 別しつつ 2 つのファイルをマージした出力か得られます。 UNIX MAGAZINE 2000.8 おわりに 8 http://www.csl.sony・ co ・ jp/person/masui/OpenPOBox/ はすい・としゆきソニ—CSL) 公開しています。ぜひご利用ください。 今回紹介したシステムは、すべて私の web ページ 8 で けを交換するような手法が必要かもしれません。 ます。通信速度か限られている現伏では、学習した部分だ し、辞書をマージして書き戻すにはその倍の日がかかり から IMB 以 E の辞書を転送するには何分もかかります 交換に、かなりの時間がかかる点も間題です。携帯端末 PalmPilot とデスクトッフ計算機とのあいだのデータ い辞書のほうか変換効率がかなりよいようです。 うのかと言われたかもしれませんが、やはりサイズの大き POBox 辞書を使っています。以前なら辞書に IMB も使 現在、私は PaImPiIot でも Emacs でも IMB 程度の あります。 か : まったく同じ辞書をどこでも使える状態に近づきつつ 始めました。まだ十分な時間をかけたわけではありません るアイデアを温めていましたが、描丘になって運用実験を 長年、携帯端末とデスクトッフ。計算機で辭書を共有す のようにマージされた辞書か得られます。 XXX bbb 行と重複しているエントリを除去すると、 この diff コマンドの出力から # ifdef などて始まる制御 XXX #endif / * dictB * / #ifdef dictB bbb #endif / * not dictB * / #ifndef dictB % diff —DdictB dictA dictB にしてマージします。 たとえば、一 E 記の辞書 A と辞書 B の場合は以下のよう
連載 . /Java Advisor— ・リモート・オプジェクトのスタブを生成するため、 rmic スタブコンパイラを実行する。 ・ダウンロードするクラスをネットワークからアクセスで きるようにする。 、クライアントを起動する。 ・ rmiregistry 、サー 十算工ンジン を参照 1 ) 。 ・呼び手は、リモートメソッド呼出しの際に java ・ rmi ・ RemoteException 例外を処理しなけれは。ならない。 ネットワークの障害やコンピュータのクラッシュなどが 原因でリモート・オプジェクトにアクセスできなかった り、パラメータや戻り値が正しく設定されていないと、 呼出しが失敗するからである。 屯かっ強力なう攵アプリケーションとして、、言算工ン RMI アプリケーション ジン " を構築したいとしよう。言算工ンジンはサーバー側 多くの場合、 RMI アプリケーションは、サーバーとク のリモート・オプジェクトであり、クライアントからタス ライアントという 2 つのプログラムて構成される。オ剽勺 クを受け取って、それらを実行し、結果を返す。タスク なサーバー・アプリケーションは、リモート・オプジェ は、サーバーか動いているマシン上で実行される。こうし クトを大量に生成し、クライアントがこれらのリモート・ た分散アプリケーションでは、複数のクライアント・マシ オプジェクトにアクセスするための参照を作成して、クラ ンから、より強力なマシンや、朱なハードウェアをもつ イアントがリモート・オプジェクトのメソッドを呼び出 マシンを利用することができる。 すまで彳寺機する。標ま勺なクライアント・アプリケーショ 言算工ンジンか車蒔斤なのは、実行するタスクを計算工ン ンは、サーバーのリモート・オプジェクトへのリモート参 ジンのコード中に定義しなくてもよい点である。いつでも 照を取得して、それらのメソッドを呼び出す。 RMI は、 新しいタスクを作成して、言算工ンジンに実行させること サーバーとクライアントか通信し、オプジェクトを受け渡 ができる。タスクに要求されるのは、決まったインターフ すためのメカニズムを提供する。 ェイスを実装することだけだ。タスクを定義しているクラ RMI には、リモートオプジェクト・レジストリが含ま スが、計算工ンジンが作られて運用さオ台めてからしはら れている。これは、アプリケーションがリモート・オプ くあとで開発されたものであっても、引算工ンジンにタス ジェクト参照を保存、検索するための簡単な名前付けの機 クを渡して実行することができる。タスクを処理するため 構だ。ただし、使用するリモート・オプジェクト参照をす のコードは、 RMI システムか言算工ンジンにダウンロー べて保存する必要はない。リモート・オプジェクトとの通 ドする。そして、言 1 算工ンジンを実行している側のマシン 信を確立したら、リモート・メカニズム呼出しのパラメー 資源を使って、タスクが実行される。 夕または戻り値として、リモート・オプジェクト参照を受 計算工ンジンのリモート・インターフェイスは、次のよ け取ることができる。 うになる。 RMI アプリケーションを作るには、次のことをおこな public interface Compute extends う必要がある。 java. rmi. Remote { Obj ect executeTask (Task t) ・リモート・オプジェクトカ躾装するリモート・インター throws 」 ava. rmi . RemoteException; フェイスを定義する。 ・リモート・オプジェクトと、リモート・オプジェクト をイ月するクライアントを実装する。 アプリケーションを導入するには、以下をおこなう必要 がある。 ・ソースファイルをコンパイルする。 1 調主 : 邦訳は、本誌 2000 年 2 月号。 一三ロ Compute インターフェイスを通じて、引算工ンジンを リモートから呼び出すことができる。このインターフェイ スを実装するオプジェクトは、リモート・オプジェクト として利用できる。 Compute インターフェイスは java. rmi. Remote を拡張しているので、このインターフェイ スのメソッドはリモートの JVM から呼び出される可能 性がある。 85 UNIX MAGAZINE 2000.8
連載 /Java Advisor— きる。 UNIX MAGAZINE 2000.8 の参照を検索して、 executeTask メソッドに評価させる これでクライアントは、引算工ンジン・オプジェクトへ ト・オプジェクト参照を ( 名前で ) 検索できるようにする。 イアントがリモートホストのレジストリに存在するリモー ローカルホストのレジストリにバインド ( 保存 ) し、クラ ドは、サーバーカ銘前付きリモート・オプジェクト参照を クラスには、 static メソッドが含まれている。このメソッ リモート・クライアントに公開する。 java. rmi. Naming istry に名前付き参照を保存し、計算工ンジンへの参照を を呼び出して、 RMI の簡単な名前付けの機構 rmireg- Engine オプジェクトを作りだす。次に、 Naming. rebind ず、セキュリティ・マネージャーを設定して、 Compute main メソッドではいくつかの処理が実行される。ま 可能匪があれば、コンパイル時のエラーになる ) 。 することか許されている ( もちろん、例外がスローされる い場合に、継承したメソッドから throws 節の例外を省略 義しなくてもよい。 Java 言語では、スローカ起こりえな executeTask の throws 即に RemoteException を定 は、 RemoteException がスローされることはないので、 ッドは、タスクを評価して、その結果を返す。この実装で うリモートメソッドを 1 つだけ実装している。このメソ 次に、 ComputeEngine クラスは、 executeTask とい ラクションの過程でスローされる。 するための通信リソースか利用できない場合に、コンスト Exception は、リモート・オプジェクトか呼出しを受信 それを throws 節に定義しなければならない。 Remote- をスローするため、 ComputeEngine コンストラクタは 数なしのコンストラクタは java. rmi. RemoteException ンストラクタがおこなう。 UnicastRemoteObject の引 られるようにするための処理は、このスーパークラスのコ モート・オプジェクトがクライアントからの呼出しを受け クタは、スーパークラスのコンストラクタを呼び出す。リ moteObject を拡張する。 ComputeEngine コンストラ 成するのに使われるクラス java. rmi. server. UnicastRe- イス Compute を実装し、リモート・オプジェクトを生 ComputeEngine クラスは、リモート・インターフェ クトを実装してみよう ( リスト 1 ) 。 は完了した。次は、計算工ンジンとなるリモート・オプジェ これで、計算工ンジンに必要なインターフェイスの定義 タスクを送信できるようになった。サ→ヾーは、名前付き 参照をバインドすると main メソッドを終了してしまう が、 JVM はリモート・オプジェクトのバインドがレジス トリから削除されるまで終了しない。 クライアント・プログラムは、タスクを定義したあと、 リモート・オプジェクト Compute への参照を取得し、 executeTask メソッドを呼び出してタスクを実行しなけ ればならない。そして最後に、タスクの実行結果を出力す る必要がある。 ( ネステッドクラス Pi として ) タスクを 定義し、引・算工ンジンへの参照を取得する main メソッド を備え、 executeTask メソッドを呼び出して結果を出力 するクライアント・プログラムをリスト 2 に示す。このフ ログラムは、冗の値を指定された小点以下第れ位まで計 算する。 ComputePi クライアントは、コマンドラインで引数を 2 っ要求する。最初の引数には、引算工ンジンか実行され るリモートホストを指定する。 2 番目の引数には、冗の計 算をおこなう際の小数部の桁数を指定する。 このアプリケーションを導入するには、一方のマシン でサーバーを、もう一方のマシンでクライアントを実行す る必要がある。サーバーを実行するには、ます rmic を 使って計算工ンジン・オプジェクトの、、スタブ " を生成し、 rmiregistry を実行してレジストリを起動しなけれはなら ない。 RMI は、計算工ンジンへのスタブのクラス・バイトコー ドをクライアントのホストにダウンロードし、クライアン トのタスク・オプジェクトをサーバーのホストにダウン ロードする。クラスのダウンロードができるようにするに は、サーバーの起重加こ、サーバーから送信されるオプジ ェクトのクラスの場所 (URL) を指定しなければならない ( サーバーのスタブクラスのコードベース ) 。同じように クライアントを起動する際にはタスク・オプジェクトのク ラスの場所を指定しなけれはならない。クラスの場所は、 java. rmi. server. codebase プロノヾティに孑日疋する。これ により、送信しなければならない情報と JVM から送信 されるオプジェクトのクラスが RMI に通知さ受け手 がクラスをダウンロードできるようになる。 RMI アプリ ケーションの構築と実行については、オンライン・チュ トリアルを参照してはしい ( 末尾の URL を参照 ) 。 今回の例で、言 t 算工ンジンか評価するタスクを定義する 87
0 領域をドラッグしてパターンを指定する方法と組み合 わせると、さらに便利な使い方ができます。たとえば、 pi*10" という文字列があるとき、辞書に pi/3.14 と定義してあれば、、 pi" お尺しで甫となる、、 3.14 " に 置き換え、、、 3.14 * 10 " という文字列に変換できます。さ らにこの文字列全体を尺すると、一甫として、、 31.4 " が 得られます。このように、普通のテキストを表言 1 システ ムのように使えます。 拡張モジュールの本告 拡張モジュールとして、福本修仁さんが作成したプロ グラム「 Drag&Drop 」 4 て使う形式のものを利用します。 Drag&Drop は、 Palm のテキスト枠ー . ヒで領よ尺した文 字列をドラック髞作で別の場所に移動したり、別の文字列 に変換したりするプログラムで、決められた形式のアプリ ケーション・モジュールを呼び出すことができます。現 在、辞書呼出しモジュール、大文字 / 小文字変換モジュー ルなど、数多くのモジュールが公開されています。 モジュールは PalmPilot 用アプリケーションとして実 装され、構造の詳細は福本さんの web ページ 5 で解説さ れています。 図 3 ~ 5 の例では、引算モジュールとして SRA のはし さんが作成した「 CalcPad 」モジュール 6 を使用していま す。 CaIcPad は数式の値を計算する PalmPilot のアプ リケーションですが、 Drag&Drop からも呼び出せます。 拡張モジュールの呼出し POBox の辞書は、図 6 のようにパターンと単語を並べ た形式です。 これを孑別長し、単語の代わりにモジューノレ名を指定する と、↑嚇甫として計算結果か表示されるようにします。 「 ds 」と入力したとき、、 PBTS " というクリエータ ID7 を もつ、、 TimeStamp ' モジュールを呼び出すには、下記の 4 http://www.umap.net/MacPalm/S0ft/DragDrop/ index-J. html 5 http://www.umap.net/MacPalm/Soft/DragDrop/ module-J. html 6 http://www.sra.co ・ jp/people/hoshi/palmos/calcpad. html 7 PaIm では、アプリケーションを直寉に区号けるために、各アプリケー ションにユニークな ID を割り当てます。 160 図 6 POBox 列 kanj i / 漢字 ような辞書工ントリを使います。クリエータ ID の後ろの 数字は、モジュールの引数として使います。 ds0/{PBTS0} dsI/{PBTSI} ds2/{PBTS2} ds3/{PBTS3} CaIcPad のクリエータ ID は、、 CPAD" なので、上記 の計算を実現するには下記のエントリを辞書に記述してお 1 2 3 きます。 1 、 2 、 ・・の後ろの空白は、いかなる入力文字にもマッ /{CPAD} /{CPAD} /{CPAD} チするパターンです。、、 123 十 4 " のような入力は上の辞書 の 1 行目にマッチするので、 CaIcPad モジュールか 1 平び 出されて引算結果として、 127 " カ区されます。 拡張モジュールのプログラム例 現在の日付や日駭リを引算する TimeStamp モジュ の例を図 7 に示します。 Emacs 版 POBox ーノレ 前回も書いたように、ネットワークを介していつでもど こでも個人の好みや状況に即した辞書を使えるのか将来の 辞書の想的な形態だと思います。しかし、ネットワーク がそこまで進化していない現伏では、個人または機械ごと に辞書を用意しておき、機械のあいだで辞書を同期させる はうか現実的です。 UNIX や Windows などでは、携帯端末と共通の辞書 を利用する、、 POBox サーノヾー " を用意し、いろいろなク ライアントから呼び出して使えるようにしておけば、すく なくともその欟戒では 1 つの辞書か共有できます。 則号で POBox サーバーと Emacs 版 POBox を紹介 しましたが、今回は Emacs 版 POBox の使い方を詳し く説明します。 UNIX MAGAZINE 2000.8
インターネットの起源』 リックライダー 大学を中心ロも匿しつつあった。彼らが。。時分割 (time- sharing) システム " と命名したこのオ既念は、従来の。。バッ 軍とコンピュータ企業との関係は、現代のコンピュータ チ”処理という時間も手間もかかるガ去に代わるものとし 産業そのものとともに始まった。第 2 次世界 : 戈中に、人 て誰の目にも明らかな魅力をもっていた。 間のオペレータか動かす機械式の言算オ齠羊よりも高速な演 バッチ処理は、手間のかかる計算方法だった。どんな 算能力が必要だとの認帋ミ高まり、軍は数多くのコンピュ に小さなプログラムを作成するときでも、そのコードをパ ータ実験に資金を投入した。海軍が麪爰したハーヴァード ンチカードに打ち込み、それを“制御カード”と組み合わ 大学の数学者ハワード・エイケンは、大型の言算機の開発 せて計算処理をするという手順が必要だった。オペレータ を目指し、最終的に Mark I を完成させた。幅 51 フィー は、 1 つのバッチ処理をおこなうたびにカードをコンピュ ト ( 約 15.3 メートル ) 、高さ 8 フィート ( 約 2.4 メートル ) ータに挿入するか、処理用の磁気テープに言当求しなければ のスイッチボードをもち、オペレータの手を借りずに演算 ならない。キュー ( 待ち行列 ) の長さとプログラムの複雑さ ができる機械である。陸軍も、ペンシルヴァニア大学で によっては、長時間待たされる可能生もあった。結果カ咄 進められていた有名な ENIAC (Electronic NumericaI るまでに 1 日以上かかることも珍しくはなかった。 lntegrator And Calculator) 言ー fl 画を支援した。その後、 時分割システムは、その名が示すように、多くのユーザ MIT では最初に海軍が、次いで空軍が Whirlwind と呼 ーがそれぞれの端末からコンピュータに対話式にアクセス はれるコンピュータの開発フロジェクトを支援した。 できるようにする新しいガ去だった。端末さえあれば、ユ 1950 年代の初めには、コンピューティングといえば ーサーはコンピュータ本体を対話式に操作できた。このシ 高速な演算を意味した。企業とくに銀行は、大莫な演算 ステムの革命的なところは、バッチ処理につきものの長い をおこなうためにこれらの機械を導入した。 1953 年、す 待ち時間がほとんどなくなる点にある。時分割システムに でに米国最大のタイムレコーダーおよび電風オ戒式カード よって、ユーサーはコンピュータを対話式に直孑巣作して 型糸充言機のメーカーとなっていた IBM (lnternational 即座に結果が得られる端末を手にしたのである。 MIT の Business Machines) は、大型の電子計算機製造の市場 コンピュータ科学者フェルナンド・コノレヾトは、当時を思 に参入した。未来のビジネスマシンである。 IBM のオ戒 い出して「こちらのほうがはるかに使いやすそうだった」 は UNIVAC (ENIAC の後身 ) より優れていたわけではな と言う。ただし、「誰かが『ただて機賊をあげる』と言った いが、伝説となった販売スタッフのおかげで IBM の機械 ら、『時分割システムは必要ない』と答えたかもしれない」。 の売上げが UNIVAC を追い越すのは時間の間題だった。 当時のコンピュータは、やたらに図体か大きかった。大き な部屋を占領し、膨大な部品があるため絶えすメンテナン そして 1950 年代末、 IBM か売上げ 10 億ドルを突破 スが必要だった。コルバトの言葉を借りれば、「けして気 しつつあったちょうどそのころ、個人主義て歯に衣着せ 楽に使えるものではなかった」のだ。当時のコンピュー ぬケン・オルセンが MIT のリンカーン研究所で開発され タは高嶺の花で、専用のマシンではあっても、個人か所有 ていた新しいマシンを中心とした技術をビジネスにしよう するなどということは思いもよらなかった。「これをなん と、 70 , 000 ドルのべンチャー・キャピタルを手に研究所を とか変えなければと本気でっていた。不茴だらけだった 離れた。このマシンが TX-2 である。オルセンは、 DEC んだ」とコルバトは言った。時分割システムに対する言面 (Digital Equipment Corporation) を設立してコンピ は、人びとがコンピュータに直接アクセスしなければなら ータ部品を製造販売するとともに、それ以前にはなかっ ない量にそのまま上 tf 列していた。そして、一殳にプログラ たまったく新しいものを創った。ューザーが対話式に茁妾 ムを作成すればするほど、茁妾アクセスできることの価値 操作できるミニコンピュータと呼ばれる小型コ / ヒュータ がよく分かるようになった。 を開発したのである。対話式に操作するコンピュータとい うアイデアの源は、 MIT の先駆的なコンピュータ研究者 時分割システムでは、異なるユーサーからの競合する要 集団だった。それよりすこし若手のグルーフ。が考案した、 求をマシン上で調整する手間をなくすことまではできなか コンピュータの利用法を劇的に変化させる概念が、とくに った。その性質上、ユーサーがコマンドを入力すると、そ 96 UNIX MAGAZINE 2000.8
0 図 8 (b) (c) (d) (e) 漢字の入力 Ck] ( こと ) ( ことは ) ( ことも ) ( ことを ) ( ことが ) ( から ) ( か ) ( この ) ( これ ) ( 今日 ) Cke] ( 検索 ) ( 研究 ) ( 結果 ) ( 研究所 ) ( 計算 ) ( 計算機 ) ( けど ) ( 研究会 ) ( 検出 ) ( 研 ) [ 計算 ] ( 計算機 ) ( けど ) ( 研究会 ) ( 検出 ) ( 研 ) ( 見 ) ( 系 ) ( 結構 ) ( 見学 ) ( 検討 ) 計算 [s] ( する ) ( するのは ) ( するように ) ( して ) ( します ) ( システム ) ( さ ) ( し ) Ck] ( 計算 ) ( こと ) ( ことは ) ( ことも ) ( ことを ) ( ことが ) ( から ) ( か ) ( この ) ( これ ) 漢字入力 POBox モードで「 k 」と入力すると、読みが、、 k " て始 まる単語か 1 甫として表示されます ( 図 8-a)0 さらに「 e 」を入力すると、読みが、、 ke " て始ま引嚇甫 単語が表示されます ( 図 8-b)0 ー甫を j 尺するには空白文字を入力します。図 & b の状 態で空白文字を 5 回入力すると図 & c のようになります。 こで改行キーを入力すると、、計算 " か確定しますが、 続けて文字を入力すると前の↑甫の確定後凵嚇甫の検索表 示か続きます。たとえば、図 8 ー d のように続けて「 s 」と入 力すると、、、引・算 " の後ろに続く単語が予測表示されます。 選択された単語はサーバー側で学習されるので、この よう嚠嚇尺をおこなったあとで再度「 k 」を入力する と、今度は、、言算 " か最初の候補として表示されます ( 図 8-e)0 学結果を反映した辞書は、 POBox モードの終了 時にファイルに書き出されます。 単漢字入力 「 shi 」と入力してから改行文字を入力すると、以下のよ うにパターンが入力文字に完全に一致する単語のみかー甫 として表示されます。 ( し ) ( シ ) ( shi ) ( 市 ) ( 氏 ) ( 使 ) ( 仕 ) ( 史 ) ( 四 ) ( 子 ) カタカナ入力 / 無変換 「 kana 」と入力すると、以下の状態になります。 [kana] ( かな ) ( かなり ) ( かな漢字 ) ( 仮名 ) ( 神奈川 ) ( 必ず ) ( 必すしも ) ( 仮名漢字 ) ここで CtrI-K を入力すると、一嚇甫の状態にかかわりな く入力パターンがカタカナに変換されて確定します。 162 カナ CtrI-K の代わりに CtrI-G を入力すると、 kana 記号 のように、パターンか変換されずに確定します。 たとえは、「 jidou 」と入力すると以下の候補か彳等られ 択されてい甫は自重加勺に確定します。 字を入力すると次のパターン文字とみなさその前に選 単漢判旨定がおこなわれた場合、空白または改行以、タ ) 文 ます。ただし、空白キーによる候尺や改行キーによる 尺中の↑嚇甫を確定するには改行キーを押す必要があり 連続入力 ( V ) (\begin{itemize}) (\verb + + ) (\section{}) ( \ ) (v) トを書くときに便利です。 \ て始まる単語を辞書に登録しておくとのテキス 記号です ) 。 能です ( 以下の例の、、 & # 148 ; " は HTML の閉じ引用符 パターンとして、、 , , " などの記号列を指定することも可 に記号が候補として表示されます。 ( ピリオド ) に重の記号を割り当てておくと、以下のよう カ文字列パターンに単語を定義できます。たとえば、 Emacs 版 POBox では、かなだけではなく任意の入 ます。 UNIX MAGAZINE 2000.8
いつでも使えるインターネット 「私の言算機 ( サイト ) には盜む価値のある 1 帯長はないから・・ と言ってセキュリティ対策を講しない人がいます。こういう人は、 おそらく則記のようなイメージをもっているのだと思います。 皆さんの言 1 算機を攻撃するのは、このような SF 的な侵入者で はありません。 99.999... パーセントは Script Kiddie と呼 ばれる輩です。 Script Kiddie とは、、お手軽に " 侵入できる計算機を探し求 める者たちです。彼らの目的は、なんらかの情報を得ようとした 、なるべくお手 り、狙いをつけた企業に侵入することではなく、 軽に " 侵入し、、なるべくお手軽に " 管理名権限を奪うことです。 そして、侵入した言算機から別の計算機へ侵入し、それを限りな く繰り返します。「なぜ ? 」と訊いてはいけません。「そんなことし て何か楽しいのやろ」と考えても無駄です。そういうものだと思っ てください。 Script Kiddie は、計算機に侵入するために、いくつかのセ キュリティ・ホールを攻撃するプログラムを使用します。これ らはひろく知られたセキュリティ・ホールで、たいていの場合は CERT/CC からすでに報告されています。さらにいえば、報告 されてから半年以 - はを茴したものを攻撃する場合がはとんどです。 ー殳には知られていないセキュリティ・ホールか攻撃されるこ ともありますが、ごくごく稀であり、そもそもそのような攻撃を するのは Script Kiddie ではありません。 Script Kiddie カイ屯用する攻撃プログラムは、アンダーグラウ ンド・サイトからダウンロードしたものです。自分で作ることもあ るかもしれませんが、これもめったにありません。多くの Script Kiddie は、攻撃プログラムがセキュリティ・ホールに対して何を するのかを理解していません。おそらくは、使い方も十分には理 解していないでしよう ( 丘の攻撃フログラムの多くは、 Script Kiddie 対策として、そのままでは動かないように書かれていま す。ただし、伺属のドキュメントを読めば、どこを修正すれはよ いのかが分かるようにはなっています ) 。 Script Kiddie が 1 回の攻撃で対象にするセキュリティ・ホー ルの不頁は、通常は片手で数えられるほど、多くても両手で数え られる程度とごく少ないのか特徴てす。すべての不頁の攻撃に失 敗した場合は侵入をあきらめます。 こオけごけて終るのなら、、興未本位でやってみた " だけの、にわ かクラッカー " です。 Script Kiddie のもう 1 つの特徴は、攻撃 する計算機の数が尋常ではなく、たいていは佃佰 ~ 何千台の言算 機に次々と攻撃を f 廱トけることです。そして、、たまたま " セキュ リティ・ホールをふさいでいなかった計算機を探すのです。 Script Kiddie は、まず最初に攻撃する計算機のリストを作成 するプログラムを実行します。次に、そのリストにある計算機に 対して攻撃プログラムを実行します。この 2 つのプログラムは、 別々であることもあれは、 1 つのパッケージにまとめられている こともあります。リストの作成と攻撃は同時におこなわれるとは かぎらす、ある程度の日数をおいて実行されることもあります。 攻撃対象のリストを作成するガ去はいろいろありますが、たと えば、次のようなものか上如勺よく用いられるようです。 特定の範用の IP アドレス空川すべて たとえは、、このプロバイダのユーザーはセキュリティ対策が 甘そうだ " と見当をつけ、その ISP の管轄ードにある IP アドレ 56 スのプロック全体を攻撃することがあります。しかし実際の ところすべての IP アドレスに言 t 算機か割り当てられているわ けではないので、アクセスのタイムアウト待ちなどを考えると 攻撃の効率はあまりよくありません。 ・ DNS のゾーン中幻逶を利用 DNS のゾーンデータのなかには、サブドメイン名やホスト名、 IP アドレスなどの情報か書かれています。これを利用すれは効 率よく攻撃できます。 ・ IP スキャンツールを利用 特定の範用の IP アドレス空間本を効率的にスキャンし、接 続されている計算機を探し出すようなツールを利用してリスト を生成します。この種のツールのなかには、計算機 ( ルータも 含む ) て動いている OS の不頁やバージョンを孑則できる機能 をもつものもあります。たとえば、その後に攻撃するセキュリ ティ・ホールか特定の OS に依存するものである場合、この OS 擱印腰能を利用すれは、たいへん効率的な攻撃かて、きます。 ・ドメイン名のリストか引則 ドメイン名の前に www や ftp 、 ns 、 mail など、よく使われ るホスト名を j 助日してリストを作ることもあります。この場合、 ドメイン名のリストをもっていることがⅲ醍になりますが、各 地の NIC からダウンロードしたりにのような不正使用が原 因で、現在は非公開になっていることが多いようです ) 、アン ダーグラウンドで出回っているリストを入手したりします。す こし頑張れば ( ? ) 、サーチェンジンの本結果から生成するこ とも可能です。 Script Kiddie は特定のサイトを狙って攻撃しているわけでは ありません。困ったことに、現在このような Script Kiddie は 星の数ほど・・・・とはいわないまでも、とにかくかなりの人数がい るようです。その結果、インターネットに接続したその日から攻 撃を受けることもあります。サイトによっては、毎日のように攻 撃さその数があまりに多いので日常化しているところさえある そうです。 「 Script Kiddie の攻撃を防ぐ力法はないの ? 」 残念ながら、 Script Kiddie は手当たりしだいに攻撃してくる ので、インターネットに接続しているかぎり防ぐ方法はありませ ん。しかし、攻撃から守るのは簡単です。 Script Kiddie による 攻撃の大半は、一イ殳によく知られたセキュリティ・ホールの悪用を 試み、失敗すればすぐにあきらめるといった叫屯明快なものです。 そのため、 CERT / CC ゃべンダーから送られてくるセキュリティ のドキュメントに従って対策を講したり、ファイアウォール て攻撃を遮断するようにしておけば、被害を未然に防ぐことかて、き ます。 ところが、ある日、どこかの国の Script Kiddie が、たまた 、たまたま " 皆さんの言算機を攻 ま " 実行した攻撃プログラムが、 撃し、、たまたま " 未対策のセキュリティ・ホールへの攻撃に成功 することもあります。「自分だけは大丈夫」という油断は禁物てす。 UNIX MAGAZINE 2000.8