Douglas Crockford氏「The Seif Project」~東京Node学園祭2016 基調講演

2016年11月12日、13日の2日間に渡って、東京Node学園祭2016が開催されました。本稿では、13日に行われたDouglas Crockford氏による基調講演についてレポートします。

今回の発表は、彼が進めているオープンソースのプロジェクト「Seif Project」の紹介とその進捗についての話でした。

画像

The Web

Webは今や、公開されているアプリケーションの中で最も大切なものとなりました。重要で力のあるサービスはWebを通して全世界のみなさんに公開されています。しかし残念なことに、Webにはいくつかの問題があります。

The Problem

その問題は以下のようなものです。

  • Webアプリケーションの開発は時間がかかり、安全でないアプリケーションも存在すること
  • Webはもともとは文書を検索するシステムであり、アプリケーションを検索するシステムではなかったこと
  • Webには向いていないアプリケーションの配信を行っているため、複雑化していること
  • Webはパスワードによってセキュアになっているが、パスワードは解析されることがよくあったり、盗まれたり、忘れてしまったりすること

Many Have Tried

このようなWebの問題に対処するため、Webを新しいものに置き換えようとした企業が数社あります。Microsoft, Apple, Adobe, Oracleなどの会社が自社の製品に置き換えようとしました。

それらの試みで使用された技術の多くは、Webの技術よりかはずっといいものでした。しかしそれらはすべて、上記の問題の解決方法を公開してはいませんでした。Webの一番良いところは、オープンであるところであるにも関わらず、です。Webが得意としているのは公開情報を表示することなのです。

そしてそれらの試みが失敗に終わった原因は、人々をWebから新しいシステムに移行させる計画が示されていなかったことです。

Upgrade the Web

前例から、Douglas氏はWebを置き換えるのではなく、アップグレードしたいと考えています。Webの強みはそのまま活かそうとしています。

The Seif Project

既存のWebに新しい特徴を追加したい、これがSeif Projectです。Seif Projectは抜本的で、最小で、安全で、オープンな解決方法です。そのアーキテクチャはWebとは全く異なるものですが、Webブラウザを通じて提供されます。

画像

Seifシステムのユーザーはパスワードを使用することはありません。認証のためには、公開鍵暗号が使用されます。Seif Projectにおいては認証局は信頼されず、使用されません。

Seif Projectは5つの段階に分かれています。

画像

Part 1:seifnode

seifnodeはNode.jsにcryptographic servicesを追加するモジュールです。このモジュールには、一般的な暗号のすべてが入っているわけではなく、Seif Projectのために必要なものだけが入っています。認証のためにECC 521を使用し、リンクの暗号化のためにAES 256を使用し、HashのためにSHA3-256を使用します。

最も大切なのは乱数をサポートしているところです。暗号には乱数がとても大事です。Self Projectが十分に信頼できるものであるためには、優れた乱数が必要です。

乱数を生成するためのキーには、十分にエントロピーが必要です。seifnodeでは、OSからエントロピーを生成します。また、週次でマイクをオンにして、そのノイズを使用して生成します。さらに、1秒ごとにカメラをオンにして、写真を撮り、そのノイズを使用して生成します。これらのエントロピーを使ってとても強い乱数を作る方法を開発しています。

Part 2:Seif Protocol

Seif ProtocolはSecure JSON over TCPです。そしてEfficient sessionsをサポートしています。Self Protocolはメッセージを送るプロトコルであり、検索のためのプロトコルではありません。

Seif ProjectはECC 521の公開鍵を個人の認証に使用しています。そのため、パスワードは必要ありません。パスワードがないので、他人のパスワードを取得するといったことができず、パスワードを使用した場合より安全になります。

Seif ProjectではSymmetricとAsymmetricの2つの暗号の技術を使用します。これらは公開鍵暗号と呼ばれています。

画像

Seif HandshakeはSeif Projectの一部で、お互いを認証するためのものです。Seif HandshakeについてはSeif Projectサイトで詳しく解説されています。

画像

Self ProtocolはFull duplex protocolです。ユーザーはお互いにいつでもメッセージを送ることができ、相手のレスポンスが終わるのを待つ必要がありません。これはとても効率的なシステムで、requestやresponseのプロトコルを使う場合は複雑になってしまうような、個人間のコミュニケーションシステムを開発するのにも使えます。

Self Protocolは基本的にはSelf Projectのために作られました。しかし、ユーザー全員を繋げるようなアプリケーションを作成したい場合には便利で一般的に使えるようなものになっています。

Part 3:Self Resource Management

私達がリソースにアクセスする際には、リソースのハッシュを使っています。

ハッシュでリソースにアクセスすると、それが途中で傍受され変化させられていないことを保証できるので安全面でとても良いものになっています。また、パフォーマンスもとても良いです。なぜなら、どこからそのリソースを取得するかを問題としないからです。

バージョニングシステムも入っているため、ハッシュでリソースにアクセスすることは名前でアクセスするより良い、つまり問題も起きにくいだろうと考えられています。

Part 4:Seif Apps

Seif Appsはデスクトップやモバイルの端末にWebのアプリケーションを渡す新しい方法です。HTMLではなくJSベースのアプリケーションデリバリシステムとなっています。これらはNode.jsとQtで開発されます。

Qtとはノルウェーで作られた、デスクトップとモバイル端末のためのアプリケーションフレームワークです。もともとはノキアが開発していましたが、今はオープンソース化されました。Qtはアプリケーションを開発するのにとても良い方法です。完全にGPUをサポートしています。

Seif Appの中では、NodeとQtは同じファネルで別々のプロセス上で動きます。

画像

そのため、アプリケーションを2つの部分に分けることができます。1つはビジネスロジックを含む層で、LocalStrageやネットワークへの接続を行います。もう1つは表示の部分で、Qtで開発します。画面の描画や、UIを担当します。

それらを繋ぐのはJSONのチャンネルです。その2つのイベントループを同時に使用することになり、イベントループが1つの場合よりパフォーマンスがよくなっています。

これによって、アプリケーションのアーキテクチャはとても綺麗になります。なぜなら、ロジックと描画の部分が完全に別れているからです。これはとてもいいデザインです。

さらに複数の部分に分かれるアプリケーションもサポートしています。

画像

同じアプリケーション内で、関心の分離を行うことができます。それらはお互いに破壊することはできないようになっています。また、JSONでデータをやりとりします。それらはユーザーの利便性のため、同時に動きます。

人間は521bitの鍵を覚えることはできません。そのため、Trust Management Systemも提供します。Trust Management SystemではPetnameを使ってユーザーの認証を行います。すべての情報や関係やエンティティはクラウドに保存されるので、ユーザーはどの端末からでもアクセスできます。

Part 5:Seif Helper App

Seif Projectでは、ブラウザの中ですべてのSeifのアプリケーションを動かします。これには、ブラウザに実装されているHelper Appインターフェイスを使用します。

Seifのアプリケーションを使用するためには、ブラウザの中のSeifアプリケーションに動作の許可をしなければなりません。私達のようなエンジニアはその設定ができるので、Seifフレームワークのテストの許可を行うことができます。

Seif Projectの目的はセキュアで効率的なリレーションのマネジメントをWeb上で提供することです。Webはドキュメントを検索のためにはとても良いものですが、セキュアなリレーションをマネジメントするのは得意分野ではありません。

Transition Plan

このプロジェクトが成功するかどうかは技術の質ではなく、移行計画の質が鍵となっています。つまり、どうやって世界の皆をSeifに移行させるかが大事となっています。

以下に移行計画を示します。

画像

まず、先進的なブラウザ開発メーカー1つに対して、彼らのブラウザの中にSeif Helper Appを統合することを納得させる必要があります。

それはブラウザ開発メーカーにとっては簡単なものになるでしょう。なぜなら、Douglas氏らがブラウザ開発メーカーに求めているのはpixelで四角形を書けることと、JSONによる接続を行えることだけでよいからです。残りはDouglas氏らが実装します。ブラウザ開発メーカーにとっては、ブラウザをより面白いものにするいい機会となるでしょう。

次に、1つのセキュアなサイトに対して、サイトのユーザーにSeif Projectに対応したブラウザを使うよう要求することを納得させる必要があります。これもまた簡単なことだと考えています。なぜなら、多くの企業はセキュリティの問題によってビジネスが破壊されることを恐れているからです。

この試みが成功したら、リスクの軽減のために他のセキュアなサイトもSeif Projectに移行せざるを得なくなるでしょう。

これは以下のようにペンギンに例えられます。

  1. ① ペンギンは冬の間氷の上にいて、とても空腹です。
  2. ② 水の中に入って魚を食べたいと考えています。
  3. ③ 水の中にはそのペンギンを食べる動物もいます。
  4. ④ それが怖いので、水の中を見て、前のペンギンを押し続けます。
  5. ⑤ ペンギンのどれかが水の中に落ちます。
  6. ⑤ すべてのペンギンが見ていて、落ちたペンギンが生還したら全員が飛び込みます。

このプロジェクトも同じようなことになることを望んでいます。

次に、金融のコミュニティや政府やセキュリティ法人に「これがより信頼でき、より安全にアプリケーションを提供する方法です」と提示できたら、彼らは移行したいと考えるでしょう。

もしこれが成功したら、他のブラウザもSeif Serviceを実装したいと考えるでしょう。どのブラウザも、Seif Serviceを実装していない最後の1つのブラウザになりたくはないからです。

その後、改善されたセキュリティとより速く簡単にアプリケーションの開発を行うために、残りの人々も追いついてくるとDouglas氏は考えています。しかし、すべてを書き換えるのは無理ですし、変わらずにWebで動くものもあるでしょう。ただ、これから開発されるアプリケーションはSeifのシステムで開発されると良いと考えています。

最後まで、何も破壊的な変更はしません。また、Webに対しては何の変更も提案しません。古いWebは古いWebのままで今まで通り動きます。Douglas氏は今のWebをより安全にする方法はなく、そのため、並行で新しいWebを作ろうと考えています。

Difficulty of software security

安全なソフトウェアを作ろうという提案はいつでも難しいものです。次のことを確認することは難しいです。

  • ソフトウェアのあるべき姿
  • すべきでないことをしていないと判断すること

また、最初からセキュアなソフトウェアはありません。すべてのセキュアなシステムにはバグがありました。おそらく、このプロジェクトにもあると考えています。

しかし、このプロジェクトにおいては、バグは早く修正されます。システムアーキテクチャに対して必要最小限のアプローチを行っているため、だんだんと改善していき、いつか十分セキュアな状態になると考えています。複雑なシステムの場合はそれができません。

例えば、SSLは今まで20年存在していますが、変わらずにバグが見つかります。それは単純に、システムが複雑だからです。

There is nothing new here

このプロジェクトに新しいものは何もありません。新しい技術や考え方はありません。長い間使っている技術をパッケージングしているだけとなっています。

現在のSeif Projectの状態は次のとおりです。

画像

Part1のseifnodeは2年前に終わっています。Part2のSeif Protocolも昨年終わっています。これらはGitHubで公開されています。また、Self ProtocolのJVMやiOSバージョンでの実装も行われています。Self Protocolはどの環境でも使えるように開発しているからです。

それ以外は開発途中で、完了したら公開するという流れになっています。というのも、よいソフトウェアというのは開発に時間がかかるものであり、開発時間を縮めようとすると、さらに時間がかかったりするからです。そして、このプロジェクトの終わりはカレンダーではなく、品質のレベルで決まっています。そのため、Douglas氏が十分であると思うまで、公開されません。誰かに公開予定日を伝えてしまうと、その日付に縛られてしまい、品質が不安になるからです。

以上がSeif Projectです。プロジェクトでは一緒に動いてくれる人を募集しています。また、それぞれのPartが終わるたびにMITライセンスのOSSとして公開しています。

Seif Projectの詳細な情報については公式サイトまたはGitHubを確認してください。

まとめ

Webをアップグレードさせて新しいものを作るという、とても大胆で興味深い話を聴くことができました。今後 Seif Projectがどういった展開を見せていくのか、注目していたいと思いました。

おすすめ記事

記事・ニュース一覧