2020年3月31日火曜日

2019年度未踏&研究体験記(BI-SGX)

2019年度未踏IT人材発掘・育成事業に「生命情報解析向けインタプリタを搭載した秘密計算用クラウド」のテーマで採択されておりましたaosでございます。


私はこのプロジェクトにおいて、Intel SGXという技術を用いて、主に生命情報解析向けの秘密計算クラウド「BI-SGX」を開発しました。BI-SGXの詳細については、以下の記事を御覧下さい。



本記事では、未踏に採択され9ヶ月間開発を行っての所感や、同時に研究室において展開された指導教員との熾烈なバトル非常に有意義なやり取りについて書き散らそうと思います。


未踏申し込み~採用まで

元々、未踏に申し込んだのは所属している研究室の指導教員からの勧めがきっかけでした。というのも、実は私自身非常に逆張りといいますか、悪い意味で極度に保守的な性格で、「どうせ俺の開発なんて採択されないだろ」「そういう環境は概してITイキリオタク(SNS等でひたすら恣意的にIT知識をひけらかして自己満足している人種)が多そうだから嫌だ」くらいの印象を抱いていました(荒唐無稽すぎる偏見)。


よって、M1終盤までは大学院の研究としてBI-SGXの開発を進めるつもりでした。しかし、ありがたいことに相当BI-SGXに可能性を見出してくれたのか、未踏への申込みをかなり推されたので、ちょっくら申し込みしてみるか、と考えた次第です。


1次審査(書類審査)向けの書類の作成

それまであくまでも生命情報解析や秘密計算といった分野の人間に対する発表や説明を行っていたため、より広い分野の方々を対象としたこの書類は大分骨が折れました。そもそも、Intel SGXとか言うカスを万人にわかるように説明するのが極めて困難なのもあって、正直最終的に仕上がった書類もわかりやすいものとはかけ離れた出来だったと思います(笑)。


しかし、その時点でRAによるホスト間認証及び鍵交換を実行する部分や、Enclave内で駆動可能なインタプリタを実装済みだったため、かなり系統立った、かつ高めの実現性を匂わせられる書類にはなっていたと思います。


当然、書類には書いたけれども実装しなかった(これは合理的判断に基づき棄却したものです)要素や、逆に書類には書いていないけれどもゴリゴリに実装したものもあるので、ガチガチに辿るべきロードマップを記載しなければならない、とは考えなくて良いと思います(雑なのは当然良くないと思いますが)。


また、自己紹介的な項目では割と個を出す感じで書きました。例えば趣味の欄では、たまに触っているMOS6502アセンブリ(いわゆるファミコンプログラミング)の話や、ファミコン上で直接再生できる音楽の作曲とかを書いた気がします。何と言いますか、あまり参考にはならないかも知れませんが、未踏の場合堅すぎない事も重要なのかな、とは感じました。


ちなみに、指導教員に書類を見せた所、落合陽一さんの学振かなんかの申請書類を引き合いに出されボロカスに叩かれましたが、ほぼそのまま提出しました(笑)。


2次審査

指導教員にはボロクソに言われましたが、ありがたい事に無事1次審査を突破しました。


次は2次審査でプレゼン審査をしなければならないので、当然綿密に発表資料を作成しました。私の場合特異かも知れませんが、私はあくまでも「2次審査で専門的な質問をされても対応できる事」は全く念頭に入れておらず、「如何に提案するシステムを凄そうに見せるか」に全力を注いでいました(笑)。


というのも、Intel SGXという技術に関しては、唐突のイキリですが少なくとも日本中のどの大学院生よりも自分が精通している、と自負していたので、審査で言い負かされる気がしなかったからです。


しかも、私の指導教員による日頃の詰めが苛烈そのものであり、1ミリでも分からない部分があれば些末な部分であっても猛攻を受け、納得させるまでひたすらに答えていかなければならない、という非常にストイックな環境におかれていました。SGXのRAについて説明した時は、3時間くらいひたすら問答を繰り返して最終的にしぶしぶ納得してもらった経験もあります。ですので、未踏とは言えこれ以上に苛烈な質疑応答は課してこないだろ、と確信していたので、より「詰め」に対する警戒感は持っていませんでした。


反面、「如何に凄そうに見せるか」については大分苦心しました。生命情報解析という情報科としてはニッチな分野をメインターゲットにし、更にSGXという日本人でやってる人間いるのか?みたいな技術を使っていたので、PMの方々に未踏として意義のある提案であると示せるか、という不安はありました。


ここで、「如何に凄そうに見せるか」は、「如何にわかりやすく説明するか」とは決して等価ではありません。SGXがニッチすぎるという一見欠点にしか見えない要素は、上手く使えばより効果的に凄いことを目指していそう、と見せつけられるという利点にもなり得るのです。


よって、最初は生命情報解析における秘密計算の必要性や、既存技術の実用性の欠如をわかりやすく説明した後は、ある程度専門的にSGXを説明しました。その中でも、Enclaveにインタプリタを載せる世界初の試みをする、など、直感的にわかりやすいフレーズも加える事で、わかりやすさのギャップを利用して効果的に印象を高められるようにしたつもりです(とはいえPMの方々にはとうに見破られていそうですが笑)。


質疑応答は、やはり指導教員によるものとは正直遠く及ばないレベルで、全て自分の知識や経験で余裕を持って回答できる、ある意味ベタなものが多かったです。また、特にこの時点から竹内統括PMからはかなりの絶賛を頂いており、非常に心強かったのを鮮烈に覚えています。


未踏における開発作業

ある日、未踏事務局さんからメールが届いたので確認した所、無事未踏プロジェクトとして採択して頂きました。その喜びようと言ったら凄まじく、下の階にいる母親に「お前大丈夫か?」と心配されるレベルの奇声を上げていました。正直、第一志望の内定が決まった時よりも断然喜んでいたと思います(笑)。


未踏での開発は、週毎に作業した分の報告をしなければならないので、怠惰な性分の私には非常に相性が良かったです。サボればそれだけ予定していた進捗から遠ざかるので、凄くいい形で開発を継続できていたと思います。ただ、当然開発のロードマップは自分で自分自身の限界と照らし合わせながら組み立てたものなので、首が絞められるような事は一切ありません。あくまでも、怠惰な人間が正常な人間らしく開発を進める為のいい手助けとして働いてくれた、と自分は感じております。


開発は、ひたすら家で一人でしていました。研究室のマシンにリモートで接続し、CUI上で無限にコーディングやデバッグ、テストを繰り返しまくるイメージです。


未踏で享受できる恩恵の使い方

未踏で採択してくれるPMは、必ずしも自分の分野に精通している人間とは限りません。寧ろ、そのような制約が仮に存在すれば、未踏はかなり狭苦しいものになってしまうでしょう。


よって、必然的に、私は未踏に対して開発において用いる技術を使いこなす・理解する為の補助としての役割は一切要求していませんでした。何故ならば、SGXについては絶対的な自信があったからです。BI-SGXの構成要素である言語処理系などについての知識は未熟でしたが、それをSGXに組み込むというステージに踏み込む人間はまあそうそういないので、あくまでも開発に使用する技術の知識については全て今までの自分の知見と独学を頼りにしていました。


反対に、開発手法に関してはかなりお世話になりました。特に、私を担当してくださいました藤井PMはIT系ビジネスのプロ中のプロで、当然開発手法についても精通しているので、今まで野生児同然な開発をしていた所を、垢抜けたアジャイル開発を出来るようになる為にとても丁寧にご指導頂けました。


人によって特に享受できる部分は大きく異なるとは思いますが、特に私のように野生児じみた開発者に足りていないスキルを成長させてくれる基盤は非常に充実しているな、と未踏を経験して強く感じました。


進捗報告会や会議

未踏では、おおよそ月ごとに開催される小規模な「進捗報告会」と、OBや外部の方々も呼んでの「会議」が存在します。


成果報告会に関しては、主にPMによる質問が(私の場合は)多かったです。やはり、ビジネス展開を考えた時の展望について聞かれる事が多く、「BI-SGXのペルソナはどういう人なのか」「開発できている部分とそうでない部分をより明確化に視覚化すべき(ユーザストーリーマッピングの利用)」と言った指摘をPMから受ける事が多かったです。


反面、SGXを始めとした技術や、BI-SGXについては正直並外れた知識を固めていたので、開発技術面ではほとんど質問される事はありませんでした(あってもインタプリタのパフォーマンスについての質問が殆ど)。


「会議」では、藤井PMのように開発手法について緻密にアドバイスして下さる方がOBや来客、及び同期には少ないため、より独壇場感が強まっていました。しかし、オーディエンスが多い分より専門性の高い方がいらっしゃる確率は増えるわけで、現に医療系・バイオ系の方からは踏み込んでおりかつ非常にありがたいご指摘を頂けました。特に、7月のブースト会議でバイオインフォマティクス系のOBの方から頂いた指摘は、秘密計算クラウドとして根源的な存在意義を果たす上で当時のBI-SGXの機能が致命的に欠如していた事を示して下さっており、後にGWAS機能を実装する事を決定する大きな手助けとなりました。


また、発表手法に関しては可能な限りオーディエンスの笑いを取れるようにしました。SGXのゴミカスさに対し皮肉じみた罵倒をしながら面白おかしく説明したり、様々なパロディネタを取り入れたデモ動画を流したり(詳細は前回記事参照)、オーディエンスを笑わせられたモン勝ちだなとは思います。

v.s. 指導教員

未踏への申込みを勧めてくれ、研究室において恩人である指導教員ですが、実は少なからずいざこざがありました。というのも、未踏における開発作業は全く苦ではなかったのですが、研究室での研究作業がひたすらに苦行であった為です。


ここで先に断っておくのは、指導教員は決して悪意があったわけではないという事です。ただし、指導教員が教授なだけあって生来の天才である事、そして極限状態に置かれた私が苛まれたパラノイアに起因して、最悪な形で軋轢が生じてしまったのです。


未踏に採択された為、未踏の開発内容を研究室での研究に流用する形を取っていましたが、正直情弱な自分にとっては指導教員によるタスクの要求は苛烈でした。この軋轢には2フェーズ存在するので、それぞれ紹介しようと思います。


第1フェーズ

まずは、8月・9月です。この時、指導教員はNDSSというカンファレンスに出せるように、BI-SGXにおけるGWAS機能の実装を早く済ませるように強く求めていました。


しかし、前回・前々回の記事を読んだ方はご存知の通り、SGXプログラムの開発は鬼のような難易度を誇ります。Enclave上でGWASを動作させる事は勿論、GWASに利用するデータを適切な形でロード・整形する事ですら、血反吐を吐くような労力が要求されます(寧ろ後者の方がしんどい)。


しかし、指導教員はSGXの専門家ではないので、「この程度のGWASくらい簡単に出来るでしょ」くらいの感覚で締め切りを念押ししてきます。


いや、無理です。


そう言えればよかったものの、私にはそう発言する勇気はありませんでした。相手は天才の教授だし、そもそも私は意見をするほど気の強い人間ではありません。なので、私は言われるがままに、未踏では到底要求されないようなペースで開発を進めました。


結果、SSHクライアントを見るだけで吐くようになりました。


でも、それでも指導教員に言い出す勇気はありません。なので、私はプログラムを開発する時は胃を完全に空にした状態で作業する事で、少しでも嘔吐による弊害を軽減するように努めました。


しかし、人間限界があり、ついに指導教員に期日までの実装が無理である事を伝え、NDSSは残念ながら見送りになりました。


第2フェーズ

私という人間は極めて気が弱い人間で、上記のような経験を経ても無理に我慢する癖を直せずにいました。NDSSが流れた後、指導教員は10月頃にUSENIXへの投稿を勧めてきました。この時、私はBI-SGXへのGWAS関数の実装は終えていた(一部に関しては、研究テーマに困っていた同期にBI-SGXの共同開発を無理矢理教授に提案され、その同期が非SGXでも動くようなGWASアルゴリズムを記述し、私がSGXで動くように最適化した)ので、提出は英字論文さえ書けば容易だと最初は思っていました。


しかし、指導教員はBI-SGXに対して「このままでは足りないね」と宣います。


いや知らねぇよ


指導教員は、セキュリティ施策上BI-SGXがVCFチャンクを全走査で読み込んでいる部分(オーダにしてO(n)というなかなかの好成績である)にイチャモンをつけ、Oblivious RAM(ORAM)というどう考えても実装コストに見合わない高速化手法を要求してきたのです。


ORAMは、ファイルへのアクセスパターンを秘匿するような技術ですが、USENIXに提出するにあたってBI-SGXにはこれが必要であると言い寄ってきました。故に、BI-SGXに寄生協力していた同期がEnclave上で動作するSGXSDKによる縛りを比較的受けないアルゴリズム部分、そして私がORAMアルゴリズムを動作させる為の低レイヤな部分を担当しました。




おわかりでしょうか?指導教員はSGXSDKの残虐さを理解していません。特にSGXSDKが牙を剥く分野がファイル入出力・整形や通信、暗号処理、パースといった低いレイヤである事は当然知りません。よって、何が起きたかというと、


教授「同期はちゃんとORAMを実装してるのに、お前は全然進んでいないよね」


というニュアンスを醸し出した議論をしてきたのです。


しかし、私はこれにも耐えようとしました。同期が乗っかってきて私が提案したBI-SGXが乗っ取られすらしかねない中、咳が止まらないほど体調が悪くても、週7で朝4時までひたすらにSGXコーディングをしました。


その結果、今度はSSHクライアントを前にしただけで手が震え、涙が出てくるようになりました。これを唯一解決できるのがでした。毎日9%の酒を1L飲み、苦痛を麻痺させる事で、何とか未踏では本来要求されていない苛烈なタスクをこなそうと試みていました。


しかしながら、ある日真の限界を迎えました。デバッグしていてバグの原因がEnclave及びソースコードの境界を10回ほど超えた所に存在する事が分かった途端、脳内でプツンと切れる物がありました。「これ以上は無理だ」と感じました。すぐさま同期にはこれ以上無理である旨を伝え、藤井PMに救援を求めました。


当時の私は完全な極限状態であり、「教授が同期を持ち上げようとしており、私を散々にこき使った上に蔑ろにしようとしている」という重度のパラノイアに迫られていました。よって、私は藤井PMに藤井PMから指導教員にストップをかけて貰うように懇願しました。


恥ずかしい話ですが、未踏の他のクリエータの前では決して表さなかったものの、当時藤井PMとビデオ会議して懇願する際、顔面丸写りなのにも関わらず号泣するくらいには精神的にやられていました。泣きじゃくりながら心境を打ち明け、藤井PMに慰めてもらった記憶は色濃く残っています。もし未踏に受かっておらず、藤井PMの支援を受けられずに同じ状況にいれば、恐らく自害していたレベルに追い込まれていました。故に、藤井PMは命の恩人であり、今でもこの上なく感謝しています。


とりあえず、教授に連絡するので一旦休息を得るべきという事、そしてこういった過度な使命感への対処の仕方を藤井PMに助言いただき、ある意味ドクターストップという形でUSENIXへのタスクは中止させてもらいました。


この時、自分の二枚舌じみた側面や我慢しすぎる部分についてのカウンセリングまでしてもらったので、藤井PMには本当に感謝しております。一方で、前述の通り指導教員も全く悪気はなかった模様です。前述の通り限界を迎えた時、割と慇懃無礼な言葉でSlackで教授に心境をぶち撒けてしまった為、ちょっと後悔しています。コミュ障オタクだとろくな事がありませんね(笑)。


最終的に、藤井PMのおかげで、その後は無理のない範囲(未踏で達成すべきタスクとして予定していたロードマップ通り)で、大学院の研究も進めて完了できました。また、大学の保健センターでの臨床心理士によるカウンセリングも受け、今ではピンピンしています。ちなみに修論はSGXのせいで86ページになっています笑


私が伝えたいのは、マジで研究無理をすると死にかねないので、皆さんも十分気をつけて下さい、という事です(笑)。

成果報告会&フィニッシュ

元々大きなイベントの前は理由なく滅茶苦茶に緊張する(それこそ会議でもそうでした)のですが、成果報告会(未踏で最後の発表)では頂点でした。しかし、誰よりもSGXをしばいてきた事、そして研究で並ならぬ苦痛を味わってきた事を糧にし、自分の中では及第点な発表を出来たと思います。


成果報告会では、今までのどのフェーズにも増して「如何に凄そうに見せるか」「如何にわかりやすく説明するか」の両立に苦心しました。成果報告会では今まで以上により広い分野の方々に説明する必要があるので、後者に関してもある程度考慮しなければならないからです。もっとコミュ力が高い人はより上手いプレゼンが出来たと思いますが、コミュ障の私としましては最大限死力を尽くして発表致しました(笑)。


成果報告会で使用したデモ動画を以下に掲載しますので、興味のある方は是非ご覧ください。



多くの闘いを経て来ましたが、少なくとも個人的にはいい形で未踏を終えることが出来たと思います(というか未踏は全く苦ではなかったので、どちらかというと完全に大学院の研究とのバトルでしたが)。BI-SGXもまだまだ未熟なシステムですが、Switchless Callの導入やインタプリタの性能強化などの余地も数多く残されているので、将来性のあるシステムを提供できたかな、とは思っています。


ただし、最近滅茶苦茶に心臓に悪いリーク情報がありまして、


SGXが2020年末のIntel CPU(Rocket Lake-Sアーキテクチャ)から廃止される


という話が流れ込んできたので、正直滅茶苦茶に焦りました。ただ、実際は廃止されたとしても一部モデルでのみ廃止されるにとどまるらしいので、今後の動向次第ですね。正直集中治療室の患者の容態を眺めている気分です。


未踏コミュニティ

未踏には未踏を経験した人間、あるいは未踏関係者(PM等含む)による独自のコミュニティがある、という話があるようですが、私はあまりそれに関しては気にしていませんでした。


何度も言う通り、SGXに関してはありえないほどの自信を持っているので、例えコミュニティが何らかのバイアスを持って質疑応答して来ようが、全て俺様の知識でブチのめしてやろう、くらいの意気込みでした(性格悪いw)


ただ、私は未踏コミュニティという意味では、ひたすらオタク友達を同期のクリエータから見つけて仲良くなり、ひたすら飲み散らかして夜中には散策したり、一生モノの仲間を得る非常に有効な使い方しかしていないと思います。同時に、その中には幸運なことに同期に私と同じく秘密計算をテーマとしていたプロジェクト(準同型暗号によるバーチャルセキュアプラットフォーム(VSP))に取り組んでいた方々もいたので、技術的な意味でも非常に切磋琢磨できました(根本的には同一の思想である秘密計算同士とは言え、達成すべきゴールについてはお互いに宗教が微妙に異なるので割と期間中はプロレスしていましたが笑)


一方で、高レイヤな人たちへの当たりは会議にしろ成果報告会にしろ強めだな、とは感じました。私などは比較的レイヤが低く、SGXとか言うカスなど知ってる人間もいないので「詰め」は受けなかったのですが、高レイヤなプロジェクトをしている人はより質問攻めにあっていたイメージです。


これはもう人間の性だと思うんですが、質疑応答権あるいは発言権を持つオーディエンスとして発表を聞いた場合、より「口を出しやすい」のは高レイヤ、あるいは目的を理解しやすいプロジェクトで、ついついそういった対象に質問をぶつけがちになると思うんです。それでも進捗報告会や会議ではそこまで的外れな質問や意見は出ないんですが、問題は「成果報告会」の「ニコ生コメント」です笑。


私の成果報告会のニコ生でコメントを見ていましたが、炎上覚悟で言わせて頂きますと、まあ酷い事(笑)。私のような秘密計算や同期のVSP、ファジングのような一般的に「理解が難しい」プロジェクトにはへこたれて全然コメント付けないくせに、高レイヤを始めとした少しでもわかりやすいプロジェクトになった瞬間、コメントする側は匿名なのをいい事にまあ酷い。そのプロジェクトが想定している背景や哲学も考慮せず(それどころか内容すらろくに理解せず)、叩きたいだけの人間がナンセンスなコメントをぶち撒け、正直傍から見ていて非常に不快でした。


同期として各人の達成すべき哲学や背景を少なくとも最低限は理解していたつもりなだけあって、不快感甚だしいの一言です。理解のある方によるアドバイスはFacebook Groupにて受けられるので、今後はコメント不可能な形の配信に限定すべきだと私は強く思いました。「ニコ生のコメントはより一般的な人間による意見だ」という意見はあるかも知れませんが、私にはどうにもそうは思えず、叩きたいだけの輩でしかない、という印象です(勿論ちゃんとしたコメントをしてくれる方もいますが)。未踏事務局さん、ここだけは改善して頂ければと思います。


未踏に望むにあたっての心構え

あまりエラそうな事は言えませんが、「自分が絶対的に強い」と思える武器を持つ事が、未踏で上手くやっていく秘訣だと思います。私の場合はそれがSGXでした。これがあるだけで、審査の段階から進捗報告会や会議のような発表の段階まで、大分有利に進められると思います。


勿論オールマイティに強い、という形も全然有りだとは思いますが、私は未踏と研究の経験上、ある程度分野を絞った上で(SGXだったり生命情報解析だったり)、プロジェクトを展開・進捗していくのがより効果的なような気がしました。


冴えないオタクの戯言ですが、未踏を目指している方は是非「弱みを補完する」事よりも、「強みを最強に仕上げていく」事に力を注いでみて下さい。あなたの弱みは付け焼き刃で補完しなくても、担当して下さる経験豊かなPMが必ず教育して下さると思います。



まとめ

私は、未踏を経験して割とかなり満足感を得たと思っています。元々非常に自己肯定感の低い(SGX以外)人間なので、未踏に採択された中で開発を進められたのはかなり精神的な支えになりました。


最後に謝辞ですが、PMの方々や未踏事務局の方々、同期のクリエイタにはとてもお世話になりました。特にVSPのクリエイタの方々には何度もヒントを頂けたので、感謝の限りです。


SGXの経過観察含め、随時Twitter(@dd_cliffford)で発信しておりますので、興味のある方は是非フォロー頂ければと思います。