デジタル人材の育成
セキュリティを学び始める際, 必ずどこかでSSL/TLSという用語を耳にすることと思います. この用語は暗号化通信の方法の一つを表すもので, TLSは2023年時点のネットワーク・セキュリティに欠かせない基盤技術です. 本ゼミで学ぶのはこのような暗号化通信にまつわる技術であり, 特に実装を通じてこれを学びます.
暗号化通信において, 「プロトコル」「プリミティブ」の2観点は安全性を推し量る基準観点の基本です. プリミティブは暗号そのもの(AESやECDSA, RSA等が著名ですね)であり, プロトコルはその使い方・通信の手順です. どちらも安全性に深く影響します.
本当はプロトコル・プリミティブを両方同時に学べれば良いのですが, しかしそれには量が多すぎます. このため, 本ゼミではそのうち片方を選択する形となっています. そして講義の中で「自分でもう片方を埋められる力」を身につけて頂ければと考えています.
また, 本ゼミでは2コースに共通して「原典を読めること」を重要な目標とします. 簡単な要約は世の中枚挙にいとまがありませんが, ことセキュリティの文脈においては妥協・要約では済まされません. ゼロからの自作を目指す場合にも原典は必須です. このための基礎体力を養うこと, それが「原典を読めること」の意義です.
暗号技術は理論から実装まで幅広くまたがった横断的な分野です. 暗号化通信もそのほんの一部ですが, しかし尻込みする必要はありません. 喩えて言うなら, 我々は船の材料を一隻分提供し, 加えて船の造り方と操舵法, 海図の読み書きまでの全てを提供します. 皆さんに用意していただきたいのは, 船を造り乗りこなすための多少のプログラミングの知識と, 「あの島を目指すのだ」という知的好奇心だけです. 本ゼミを卒業した後には, 暗号技術のみならず情報セキュリティ, はては情報技術の海全体で開拓劇を繰り広げることを期待します.
【プロトコルコース】
「プロトコルコース」は今年から新しく作られたコースです. 暗号プロトコルの実装を通して, 暗号技術は現実世界でどのように利用されているのかを見ていこう!というのが本コースの目的です. 情報を秘密にするだけが暗号ではありません. 鍵管理や認証にも暗号技術が使われています. 暗号化通信では, 機密性と認証の両方を維持しないと, 本当の意味で”暗号化”したことにはなりません。
暗号技術を正しく理解し, 暗号プロトコルに組み込むことができ, その上で安全性の評価もできる. そんな暗号プロトコルに通じた人材を目標として, 学んでいきます。
実装するプロトコルはTLS 1.3を中心としたものを想定していますが, それ以外でも問題ありません。自分の興味がある暗号プロトコルでの応募をお待ちしております.
【プリミティブコース】
暗号の安全性は常に解読手法と隣り合わせです. 昨年まで実施されていた「暗号解読チャレンジゼミ」はこの点を特に強調し, 暗号における解読手法を軸としたゼミを実施していました.
しかしながら, プリミティブに偏ったゼミになっていたことは否定できません. 今回設定されたこの「プリミティブコース」はその流れを汲みますが, 特に「暗号プリミティブはどのように使われるのか」という視点をより重視するようになります.
プリミティブの構成・解読はいわば研究者の目線に近く, 「その実装が安全に使われるための条件は何か」「可能な限り少ない仮定で, 便利かつ安全に使われるためにはどうすればいいのか」といった視点はそこにありません. 本コースは, プロトコルコースと協調しながらこれらを学んでいきます.
ゼミで学ぶ対象となる暗号プリミティブは, 受講決定の後, 応募課題での選択肢等をもとに相談して決定します. 特に興味のあるプリミティブが存在するのであれば, 応募課題の時点でお知らせいただいても構いません.
「暗号のままで計算ができる」のが準同型暗号です。このゼミではその中でも「任意の回数論理演算ができる」TFHEという暗号を実装します。このゼミは、「準同型暗号の応用」よりも、「準同型暗号そのものを構成するにはどうしたらよいか?」という「暗号学の理論とその実装」を軸としたゼミです。本ゼミでは「暗号のままで計算ができる」ということを目指しますので、準同型暗号の「暗号としての安全性や攻撃法」はあまり扱いません。 進め方としては、まず暗号を数式として考え、それをプログラムに落とし込むということを繰り返して進めます。ですので、数学へ忌避感がないことが望ましく、初等的なベクトルと確率がわかっているとベターです。
TFHEは恐らくみなさんが考えるよりは簡潔で、数学として美しく、エンジニアリングとしても高速化や応用の余地があって楽しいものです。 準同型暗号は今も新しい研究成果が次々に出ています。今年は整数演算の評価も扱えれば良いと思っています。皆さんのやる気次第ではこのゼミの内容が学術的未踏領域に入ることもありえるでしょう。誰もやったことのないことに挑戦する意志のある人を期待しています。
普段何気なく書いているプログラミング言語というものが、いったいどうやって実装されているのか、気になったことがある人も多いでしょう。プログラムを書く人であればコンパイラはそれなりに身近な存在かと思いますが、コンパイラが内部で何をしているのか、どのようにできているのかという点に目を向けてみたらますます面白いと思いませんか?
本ゼミでは、C言語のソースコードを受け取って対応するアセンブリを出力する「Cコンパイラ」をゼロから自作します。自分の力でゼロからCコンパイラを作り上げていくことで、身近で遠い存在だったコンパイラの中身がどんどんと明らかになり、C言語の仕様やアセンブリの知識も自然と身についていきます。
コンパイラなどという複雑怪奇で大きなソフトウェアを作るなんて大変そうだと思うかもしれませんし、実際簡単なことではありません。ですが、最初は極限まで小規模なものから始め、そこから少しずつ機能を増やしていくので、実装・テスト・デバッグの繰り返しを続けるうちにどんどんコンパイルできるコードが増えていきます。あっという間に書いている本人よりもコンパイラの方が賢くなっていって驚くことでしょう。その過程を十全に楽しめるよう、大会期間前には多めに事前学習期間を設けてじっくりと開発できるようにします。実装のためのテクニックやC言語のややこしい仕様に関するフォロー、豊富なテストの提供やデバッグなどといった様々な面で講師陣がサポートしていきますので、ご安心ください。
C言語は長年にわたって多岐にわたる使われ方をしてきた言語ですから、Cコンパイラを自作することにより様々な目標を狙うことができます。たとえば、自作コンパイラのソースコードを自作コンパイラ自身でコンパイルする「セルフホスト」。自分のコードのバグが予測外の箇所に悪影響を及ぼし、頭を抱えながらバグを探す経験は、セルフホスト以外ではなかなか味わえない醍醐味と言えるでしょう。他にも、既存のOSSの大きなコードを動かすことを目標としても面白いでしょう。そんなのをコンパイルできるほど完成度を上げるなんて気が遠くなると思うかもしれませんが、穴だらけの自作コンパイラであっても実は既存資産が結構読めたり動かせたりします。他人の書いた実用的なコードをコンパイルする過程で自分の実装の思わぬミスを見つけることができるため、何を動かせて何をまだ動かせないか調べていくことでコンパイラがどんどん磨かれていきます。
もちろん、これらの目標を達成できるコンパイラを作るには、それなりに多くの構文や仕様に対応する必要がありますし、出力される大量のアセンブリをかき分けてデバッグする必要もあり、決して簡単な道筋ではありません。しかしながら、このゼミを通じて、低レイヤと高レイヤの橋渡しをするための共通言語としての地位を確立している言語である C 言語と必ずや真剣に向き合うことができるでしょう。皆さんが今後どのような道を進むのかは我々には知るよしもありませんが、そのような経験は、今後いかなる方面でセキュリティや低レイヤに触れようとも必ず役立つものとなると信じております。皆さんの応募、お待ちしております。
分散型アプリケーションの脆弱性は、ときに多額の資金流出やガバナンスの乗っ取りなど甚大な被害をもたらします。2022年だけでも約5000億円に相当する資産が攻撃により失われたと報告されています。このゼミでは、現実世界で起こった分散型アプリケーションのエクスプロイトを解析し、その理論の理解および攻撃コードの実装を行い、(テスト環境で)実際に攻撃を再現することを通して、安全な分散型アプリケーションの構築技術を学びます。
あるデータをマシン内外の脅威から厳密に保護しながらそのデータを用いた処理を行うという試みは、一昔前までは実現が不可能であるか、実現するにしても外部から遮断された隔離部屋での缶詰作業のような、極めて非効率な手法に依存する必要がありました。
しかしながら、最近では技術の発展も相まって、この問題を解決する様々な技術が提案されてきています。中でも、データを保護しながら計算や分析を行う「秘密計算」やそれに関連する要素技術(準同型暗号、秘密分散など)の発展には目覚ましいものがあります。
そんな中、近年頭角を現しつつある比較的新しい技術に「TEE(Trusted Execution Environment; 信頼可能な実行環境)」というものがあります。
TEEとは、ハードウェア(多くの場合CPU)の機能でRAM上に(ユーザが動作定義を実装可能な)保護領域を生成し、秘密情報をその保護領域と安全なCPUパッケージ内でのみ取り扱い処理を進める事で、上記のようなデータを保護しながらの処理を実現する技術です。
TEEには、秘密計算に利用されるような関連技術、即ち準同型暗号や秘密分散と比較してみても計算コストが小さめで効率的であり、その上で高度な安全性を提供できるというメリットがあります。
一方で、ハードウェアに依存する以上ベンダを信頼する必要がある、サイドチャネル攻撃にはデフォルトでは脆弱といった独特な性質などにより、特に準同型暗号には相対的に安全面で劣ります。
殊に、TEEの代表的な実例である「Intel SGX(Software Guard Extensions)」は、そういったTEEの性質や、CPU及びSGX自身の抱える脆弱性を突かれ、おびただしい数の攻撃の餌食となっています。
本講義では、TEEの基本的な背景をご紹介した後、特にIntel SGXを用いた開発を実践的に行います。
SGXを用いた基礎的なプログラミングから、最終的にはSGXを利用した鍵管理ソフトウェア等の開発を行う事で、現代の情報技術における安全性と速度のトレードオフの最適解の1つである「TEE」という技術の魅力に迫ります。
一方で、本講義ではTEE特有の性質やSGXに対する攻撃についても実践的に体験し、TEEが決して秘密計算実現の上でのワイルドカードではない事を確かめます。
SGXに対する攻撃には、Controlled-Channel Attacks、Sealing Replay Attack、Foreshadow、Plundervolt、LVI、ÆPIC Leakなど、名だたる高度かつ難しい攻撃が無尽蔵に存在しますが、あくまでもゼミ内で取り扱える範囲に簡略化して実践していきます。
本ゼミを通して、TEEといういい意味でも悪い意味でも混沌としたからくり屋敷の魅力に迫っていきましょう。
2024年4月8日
URLを変更しました