IBM i のウンチクを語ろう
~ その4:セキュリティ
皆さん、こんにちは。今回はIBM i におけるセキュリティの意義と、その実装について考えてみましょう。セキュリティの意義だなんて考慮するのはあたり前だし、しっかりとした暗号化とかSSLを実装するのが第一歩でしょ、なんて声が聞こえてきそうです。そのとおりなのですが、ここはこのコラムの根底にある、「ビジネスのためのシステム」というコンセプトに立ち返って考えるのがポイントです。
ビジネス用途のシステムの特徴を問われたら、皆さんは何を挙げますか?セキュリティの観点からIBM i の開発者が着目したのは、一台のマシンの上で、同時に複数のプログラムを複数のユーザーが使う傾向がある、という点です。万が一にも他人のデータを改ざんしてしまったりするような誤動作をさせてはいけません。その一方で IBM i の設計者は、コンピュータはセキュリティ面において、極めて脆弱な基盤の上で稼動している、という点も理解していました。
ボードにプロセッサやメモリなど各種部品を剥き出しのままハンダ付けした、マイクロ・コンピュータと呼ばれる機械が趣味の世界でかつて流行ったことがありました。個人で使うことを前提にしていましたので、セキュリティなどという発想は微塵もありません。いくつかプログラミングの腕試し的な課題があって、その中の有名なものの一つに「自殺プログラム」がありました。プログラムが自分自身を書き換えながら動作して、最後にはプログラム領域を含む全メモリ空間をゼロに書き換えるという、きわめてアクロバティックなものです。原始的なコンピュータでは、プログラムは書き換えができないという、今でこそ当然のセキュリティの概念すらもなく、こんなことも実行可能でした。ちなみにかつてのIntel製8ビット・プロセッサでは、命令コードとしてゼロを与えると「NOP = No Operation」、すなわち何もせずに次の命令を実行しようとします。
さてビジネスの世界に話を戻して、例えば販売管理アプリケーションで使う商品マスターのようなものを考えてみましょう。そこには様々なデータが蓄えられており、例えば商品番号というフィールドならば参照したり検索をかけたり、といった作業を行う可能性があります。しかしながら商品番号は10桁の数字だからという理由で、何かの数字と足し算をしたり、消費税を求めようと8%を掛けたりといった演算を行うことは意味がありません。
一方で、同じ数字であっても商品単価のフィールドであれば、これらの演算を行う可能性は十分にあります。またどちらの数字であっても、これをプロセッサの命令コードであるとして実行させると、予期できない結果を産みます。システムは暴走状態に陥ってしまい、停止させるには強制的に電源を遮断するしか方法がありません。
私達は同じ10桁の数字であっても、商品コードだとか商品単価はどういう性質のものであり、だからどのような演算を行うのが妥当である、と理解してプログラミングを行います。しかしながらコンピュータにとっては、あらゆるデータは単なる「0」と「1」の並びでしかないと同時に、命じられさえすれば「疑問」に思うことなく何でも実行してしまいます。コンピュータは賢くはないのです。
人間とコンピュータとの決定的な違いは、データに対する理解の有無です。そこで、それぞれのデータはどのような属性を持っているのかを明示的に定義しておき、それに基づいてどういった演算は実行しても良い、ということをあらかじめ「教え込んで」おきます。そして、指定された以外の演算は決して行ってはいけない、とコンピュータに「言い含めて」おけば安心です。データを中心に実行できる演算(メソッド)を定義する、オブジェクト指向プログラミングと同じ発想です。IBM i はこの考え方を全面的に取り入れたシステムです。この属性情報は厳密に定義されており、権限を持たないユーザーは書き換えることができないよう防護されています。
IBM i が開発された当時は「オブジェクト指向」といった用語すら存在せず、開発者達はせいぜい「データ中心の」といった言葉でこの先進的な概念を表現していました。マーケティングの観点から見ると、ちょっともったいなかったですね。ちなみにIBM i 産みの親と言われているDr.F.ソルティス氏はその著書の中で、いくつかあるIBM i の特徴の中でどれか一つだけを挙げるとしたら、このオブジェクト・アーキテクチャーを選ぶと述べています。
さて、データには属性情報を伴うものなのですが、これが全く防護されていないシステムもあります。例えばWindowsにおけるファイルの属性情報は、実質的にファイル名拡張子で決定されます。例えば実行プログラムには通常exeという拡張子が与えられますが、これをtxt、すなわちテキスト・ファイルであるかのように、誰でも簡単に書き換えることができます。我々はテキスト・ファイルは実行プログラムではないから、セキュリティ上まず安全であるという認識を持っています。でも実態はウィルス・プログラムが偽装されたものかも知れません。
もちろんセキュリティはデータに対する属性情報のみで守られるわけではありません。ネットワーク・ポートを監視したり、バックアップ時の暗号化を行ったりと、IBM i は他のシステムにも実装されているのと同様の機能も備えています。さらにバックアップ・テープをどのようにして保管するのか、システム管理を行うためのコンソールはどこに設置するのか、といったことも広義のセキュリティです。100%完璧な対策は存在しないと言われています。ですが、IBM i の設計者達は、ビジネスのためのシステムということを意識しながら、そのごく中核部分にユニークで現在においてもきわめて頑強なセキュリティの仕組みを埋め込んでいたわけです。
ではまた。次回はオールインワンについて述べる予定です。