2023年02月06日

アンチウイルスソフトの矛盾

ある商人が「世界のどんなマルウェアでも侵入を防ぐアンチウイルスソフト」と「世界のどんなアンチウイルスソフトでも破ることができるマルウェア」を売っていたとします。すると、そのアンチウイルスソフトをインストールしているPCをそのマルウェアで攻撃したらどっちが勝つのでしょうか?これが一般的な矛と盾となら矛盾となるわけですが、アンチウイルスソフト対マルウェアの場合はマルウェアが勝ちます。
わかりやすくするために「ソフトウェアの開発時点で入手可能な」という修飾をつけてみましょう。
「ソフトウェアの開発時点で入手可能などんなマルウェアでも
侵入を防ぐアンチウイルスソフト」
VS
「ソフトウェアの開発時点で入手可能などんなアンチウイルスソフトでも
破ることができるマルウェア」
マルウェアの開発者は商品として販売されているアンチウイルスソフトに対してすべてテストできますが、アンチウイルスソフトの開発者は比較的新しいマルウェアや潜伏中で姿を表していないマルウェアはその存在さえも知らないのでテストできていません。
つまり、マルウェアは秘密にされているのに対して一般に販売されているアンチウイルスソフトは誰でも入手可能です。そもそも、この2者の争いはそもそも不公平なルールのもとに行われているわけです。いたちごっこでさえありません。アンチウイルスソフトの開発者はゼロデイの攻撃を受けてから対応版を開発するのです。そういう意味で常にマルウェアの開発者が勝つわけです。
(ただし、誰でも手に入るようなマルウェアもあるとのことなので、そういうものに対しては公平になり、いたちごっこになるでしょう。)
私はこの戦いの非対称性に加えて以下の理由でアンチウィルスソフトは不要であると考えます。
  • 世界中の大量のコンピュータで電力を消費しており、サステイナブルでない
  • OS付属のアンチウィルスソフトでも一定の効果が得られる
  • そもそもファイルをダウンロードせず、ブラウザだけで仕事をすればアンチウィルスソフトは不要である
今全世界でアンチウィルスソフトが消費している電力はどのくらいでしょうか?それが防いだマルウェア被害額はいくらでしょうか?
posted by プロキューブ at 18:29| Comment(0) | コンセプト

2021年02月04日

エコなシステム

要件定義の正しさ

今回はシステムの要件定義において、ある要件を実現することが正しいかどうかとはどうやって決まるかについて考えてみたいと思います。
私は、その要件のコストパフォーマンスがプラスである場合にのみその要件を実装することが正しいと考えます。つまり、要件から生じる顧客の利益がそれを実現するのにかかるコストよりも大きい場合にのみその要件を実現するべきであり、これを真の要件と定義します。
ところが、実際には真の要件ではないものが要件定義に紛れ込み、結果としてエコでないシステムが頻繁に構築されているように思われます。個々の要件について利益とコストを見積もることを怠ったためにそのようなことが起こるわけですが、要件の利益とコストを見積もることは難易度が高く、正確性を極めようとすると時間もかかるため、ある程度仕方がない面もあります。
また、利益とコストを比較するためにはそれぞれ金額に換算する必要があり、そう簡単にできることではありません。
しかし、難しいからと言ってやらなければ、暗いところでなくした鍵を明るいところで探すパターンになってしまいます。

要件がもたらす利益

要件を実現すると、顧客に利益がもたらされるわけですが、必ずしも目に見える効果がすぐに出るわけではありません。たとえば、システムで拡張性や可搬性が高いアーキテクチャを採用しても、システムに変更が行われるまでその性質のメリットを得ることはできません。また、可用性が高い、操作性が良い、スマホからでも使えるなどの性質もその要件の効果を金額換算するのが難しいでしょう。
重要なことはこれらの目に見えない利益も含めて評価することです。

要件の実現にかかるコスト

要件を実現するのにかかるコストについて、構築作業費のようなものであれば計算しやすいのですが、隠れたコストとなるものが多数あり、それに注意する必要があります。たとえば、セキュリティを強化する機能を導入したためにエンドユーザの負担が増えたという場合はには、その負担増加分を導入コストに算入すべきです。

要件の海

要件定義をITのコンサルタントにお願いすると、世の中で言われている様々な要件を列挙してくれます。バグはないほうがいい。実績があるほうがいい。先進的なアーキテクチャを採用している方がいい。脆弱性がないほうがいい。といった方針に基づいて抽象的で情報量の少ない要件が大量に提示されることになります。それぞれについて、顧客に必要であるか、ベンダが実装可能かの検討が必要ですが、もっとも重要なのは真の要件であるかどうかです。

これらの大量の要件を整理するためのベン図を書いてみました。

エコなシステム.png

気をつけなければいけないのは、真の要件でない要件が出やすい要注意領域です。
顧客側では技術的な難易度が判定できない状態で様々な要件を入れてしまい、コストが思ったより高いものが入ってしまうことが起こりがちです。
ベンダ側ではセカンドシステム症候群とも呼ばれるもので、第二バージョンを開発するとなると、顧客側の利益がどのくらいあるかを考えずに、豊富な機能で勝負しようとしてしまう傾向があることです。
極端なケースでは、バグ修正でさえお客様の利益にならず、新の要件とは言えない場合もあります。
特に日本のIT企業は非機能要件に必要以上にお金をかけたシステムを作りがちなので、真の要件だけを実装してエコなシステムを構築するよう心がける必要があります。
また、ベンダ側と顧客側の両方で必要であると思った要件でも、真の要件でないものもあります。バズワードや流行にのっていれてみても実際の利益がそれほど大きくない場合(ex. RPA)やセキュリティ要件のように誰も否定できず裸の王様の服のようにみんなから肯定されて入ってしまうものなどがあります。まあ、このようなものは前述の要注意領域にくらべれば問題は少ないと思います。

まとめ
プロキューブはソフトウェア製品ベンダですので、セカンドシステム症候群で自己満足で勝手に要件を追加しないように気をつけております。特にセキュリティや可用性などの非機能要件についてコスト対効果を無視して開発費をつぎ込むことは、最終的に製品の競争力を下げるだけでなくお客様のお金を無駄遣いする意味があり、 lose-lose となるため、避ける必要があると考えております。
posted by プロキューブ at 15:11| Comment(0) | コンセプト

2020年02月23日

脳を理解することができるか


人間は人間の脳を理解することができるか

この投稿は私が2020年2月19日から4日間にわたって「京都大学ELP主催 短期集中講座 『脳と心』 脳科学の新潮流」を受講し、その結果自分なりに悟った内容を記載するものです。ただし、これは講義の内容(もっというと脳科学)を解説するものではなく、受講した結果私が思いついたことを勝手に述べているものであることをご了承ください。

脳模型による思考実験

私の脳に対する理解を説明するために、一つの思考実験を行います。全知全能の神が存在し、その神が私の脳の模型を作ったと仮定します。その模型には私の脳のニューロンとそのシナプスが忠実に再現されています。その模型には特別な機能があり、模型の中の一つのニューロンを触ったときに、対応する概念(言語/ボキャブラリー)が存在する場合は、その模型がその内容を喋ってくれます。たとえば、

- しょうゆ顔の顔を見たときに発火するニューロンです
- 焼き鳥を思い出すときに発火するニューロンです
- 昨夜焼き鳥を食べたことを記憶しているニューロンです

のような感じです。しかし、対応する概念が無い場合は、その番号だけを答えてくれます。

- 無意識の312,354,323,213番ニューロンです。
- 無意識の331,163,096,300番ニューロンです。
- 無意識の80,187,327,537番ニューロンです。

というような感じです。ここで、前者を「意識ニューロン」、後者を「無意識ニューロン」と呼ぶとします。

では、この模型のニューロンを無作為に触って、意識ニューロンにあたる確率はどのくらいでしょうか?
母数であるニューロンの数の方はわかっていて、約1000億個と言われています。
これに対して、意識ニューロンの数はどのくらいでしょうか?人間の語彙数が10000程度であるところから類推して、せいぜいその2乗である1億個程度ではないかと思われます。この類推の根拠はないのですが、日常会話の内容から考えると、直感的にはもっと少ないのではないかと思います。
ただし、ニューロンは冗長化されており、一つの概念が同じ意味を持つ複数のニューロンで実装されているので、その冗長化の係数として10を想定し、10億個であるとしておきます。
つまり、楽観的に見積もっても、模型のニューロンを無作為に触って意識ニューロンにあたる確率は1% ということになります。

概念の共有のための拡張

さて、上記で「対応する概念がある場合/無い場合」と書きましたがこれは脳の模型の本人が触ることを仮定しています。
他人が触る場合を仮定すると、本人は意識にある概念であるが、触った人の方には対応する概念がない場合が考えられます。そこで、機能を拡張して、脳模型の本人の意識にはあっても触った人には概念がない場合、模型はその概念の番号を答えてくれることにします。

- 未知の概念1252番のニューロンです
- 未知の概念43222番のニューロンです

というような感じです。他人の脳模型で未知の概念に出会うケースとして

- 模型の脳が自分の知らない知識を持っている
- 模型の脳が個人固有の概念を持っている

などが考えられます。この模型では、複数の人間が同じ概念を持っている場合はそれらの人は同じニューロンを持っているということになります。
人によって言葉の割り当て方が微妙に違っていて一つのニューロンに違う言葉が割り当てられている場合や一つの言葉に対するニューロンが人によって異なる場合もあるかもしれません。
しかし、模型を生み出しているのが全知全能の神なのでそこは上手くやってくれることにしておきます。

いずれにせよ、これらを考慮してもやはり、無意識ニューロンのほうが圧倒的に数が多く、相変わらず、脳のニューロンのほとんどは無意識ニューロンであると言えるでしょう。

脳を理解するとは

脳を理解するというのは、この無意識ニューロンにラベルをつけることであると言えるのではないでしょうか。もし、すべての無意識ニューロンに意味のあるラベルをつけることができれば、脳に対する入力から最終的な出力が出るまでのニューロンの発火パターンを推測し、ルール化することができるように思われます。
実際に認知心理学者や脳科学者が行っているのはこの無意識ニューロンに対するラベル付けの作業であると言えるのではないでしょうか。
しかし、前述の楽観的な見積でも99%が無意識ニューロンであり、多少ラベルをつけることに成功したとしても脳に対する理解をすすめることは難しいと感じます。

シンギュラリティは来るか

ブログでシンギュラリティにふれるのは二回目ですが、私は上記の思考実験の結果、今回もシンギュラリティ来ないと判断しました。意識ニューロンに比べて無意識ニューロンのほうが圧倒的に多いにも関わらず、我々は意識ニューロンのことしか考えられていないように思われるからです。
人類はいまだにモランベックのパラドックスから抜けることができておらず、無意識ニューロンの洪水に溺れたまま浮上することができそうにありません。
ディープラーニングは新しい計算手法であり、それを使って革新的な新しいアプリケーションを開発することは可能ですが、そのことと脳を理解することとは関係ありません。
もし、ディープラーニングで脳と似た動きをするものを開発できたとしても、その重み付けの行列式の数値が無意識ニューロンと同様に理解不能なものであれば、仕組みを理解できないシステムとなり、なににも応用できないものと思われます。
posted by プロキューブ at 17:32| Comment(0) | コンセプト