晴耕雨読

working in the fields on fine days and reading books on rainy days

seccamp2023講師参加記

セキュリティキャンプ2023にL1講師として参加したので、感想と反省の雑文です。

はじめに

L1暗号化通信ゼミにはプリミティブコースとプロトコルコースの2種類を設けてゼミを行いました。 私はプロトコルコース側の講師であるため、ここではプロトコル側でどんなことをしたのかをメインに書いていきます。 プリミティブコースについて知りたい方は、緑川先生 (@elliptic_shiho) の seccamp 2023 講師参加記.md もご覧ください。

目指すべき目標

学校教育ではいかにテストや試験で高い点数を取ることができるか、という部分に注目されがちです。 一方で、セキュリティキャンプとは、選考時点では評価の優劣が発生するものの、目指すべきところは知識の多さではありません。 知性とは、自分自身が環境(物理的な環境や周りの人々など)に働きかけ、そこから情報を得て、そこからまた考察を深めて再度環境に働きかけるという繰り返しの中で育まれていくものです。 それは学校のテストや試験とはまったく異なるものです。一人で問題を読み一人で答える環境ではなく、研究のように書籍や文献を読んだり、周りの人に意見を求めるなどして、どのように知りたい情報を得るか、もしくは引き出せるかという面が重要になります。 そのために、セキュリティキャンプは、知性を働かせる環境と良い仲間づくりができる環境を提供しているだけに過ぎないのです。 なのでオンライン開催よりも合宿形式が最適です。 講師から出された応募用課題をすぐに解けたということで満足されては、セキュリティキャンプ修了後になったとたんに、褒めてくれる人がいなくなって歩みを止めてしまう可能性があります。 最終的には修了後も参加者は一人で歩みを進められるように支援することが、私個人の講師としての目標でした。 言葉を借りるなら、参加者に「インターネットという海の開拓者」になってほしい、という願いです。

インターネットという海の開拓者を送り出すという目標があっても、具体的な方向性がないと失速してしまいます。 そこで自分の得意分野である暗号技術やプロトコルの面から、知識の基礎固めをしつつ、参加者の目標を支援することを目標として取り組むことにしました。 同じゼミの緑川先生には、プロトコル面で一つテーマをやりたいです、と事前に宣言しておいたので、一つのゼミで2つの違ったテーマに取り組む段取りとなりました。 自分側のプロトコル側のテーマとしては、基本的な TLS 1.3 の実装を通して暗号技術を理解しつつ、興味のあるプロトコルを提示してくれれば、それを扱った技術の理解や実装などに取り組むのが良いと考えていました。

応募課題設計

L1暗号化通信ゼミのプロトコルコースの応募課題としては、暗号技術の2要素である「機密性」と「認証」について広く浅く設問を用意して、応募課題を解くことで暗号技術は暗号化だけではないということを実感できるような設問にしたいと考えていました。 実際この辺は効果的で、自己アピール欄に「応募課題を通して様々なことを知ることができて勉強になりました」という旨の回答もあり、次回もあればまたこの形式でやるかもしれないです。

また、最低限のプログラミングスキルは必要なので、いくつかの設問では好きな言語で実装するように課題を課しました。 これは過去の緑川先生の経験から、数学の知識は十分あるけどプログラミングの知識が不十分で大変苦労したという話を考慮したものです。 加えて、実装の課題は、暗号技術の実装をライブラリを使って誤魔化すか、はたまたRFCの仕様を読んでしっかり実装してくるか、という部分で応募者間の評価を差別化しやすいというメリットもあります。

最後に毎年恒例の自己アピール欄を用意しておき、どのような目的や目標を持っているのかや、このゼミに応募したきっかけなどから、応募者のモチベーション、好奇心、グリッド(長期的な目標を成し遂げる情熱と粘り強さ)の高さなどを推測できるようにして、最終判断材料の一つになるようにしました。

事前学習

参加者選考によってL1の暗号化通信ゼミは枠の関係上2名の参加者が参加することとなりました。 暗号化通信ゼミとしては、プリミティブ側1名、プロトコル側1名で、講師2名、チュータ1名の体制です。 プロトコル側の事前学習期間では、前半は応募で提出してもらった TLS1.3 の実装の続きから、という方向で進めてもらっていました。

講師はあくまでも道を外れないように誘導する立場であって、どんな進捗を出したいか(見せたいか)は本人自身の中に答えがあります。 そのため、週一回のミーティングを実施するにあたって、アドラー心理学の勇気づけに近い技法である「コーチング」を参考にしました。 コーチングとは、答えを与える代わりに、答えを作り出すサポートを行うためのコミュニケーション技術です。 その人の本当の目的や理想を明確にし、それを実現するための方法を探索したり、行動する勇気を与えることです。 コーチングによる目標到達へのサポートは、大雑把には次の流れになります。

  1. 参加者との信頼関係の構築
  2. 参加者の目標の明確化(他人の評価軸ではなく自分の評価軸による目標の設定)
  3. 参加者への勇気づけと意思決定の支援
  4. 実践したプロセスへのフィードバック(後は手順2に戻って繰り返しセッションを行う)

事前学習期間では、週一回のミーティングを通して、提出された応募用紙をベースに、応募したきっかけや興味のある技術領域などについてヒアリングを行いました。 そして、目的(何のためにこれをやるのか)、目標(何をやるのか)、手段(どうやって実現するか)の観点で質問しつつ、参加者自身の言葉で説明してもらいました。 目的・目標の設定が明確になったあたりから、他人(講師)の評価軸で行動するのではなく、参加者自身の評価軸で主体的に行動するように変化を感じ取ることができました。 余談ですが、保育の現場で働いている方が、子供主体の保育(自分でやりたいことを見つけて、方法を考えて達成していくこと)は手間がかかるので大変だ、と言っていて、今ならその気持ちよくわかります、という感想です。 まぁ、その分、面白さもあるんですけどね。

キャンプ当日

久しぶりの現地開催で、電車の乗り換え方法を覚えるのが大変でした。似たような駅名と似たような建物の構造がたくさんあって大混乱でした。 次回は朝の通勤ラッシュ時にバスには乗りたくないという気持ちです。 電車の遅延などもありながら、なんとか無事現地に着くことができました。 今年は受付時間に合わせて外でプラカード持って案内してくださる運営の方がいて暑い中お疲れ様でした。

セキュリティキャンプは8/7〜8/11の5日間ありますが、発表資料作成・最終発表などを考慮すると、せいぜい3日くらいしか開発に使える時間はありません。なので、事前学習期間に大きく広げた風呂敷をたたんで、着地点をどこにするかの落としどころ見つけるところから始まります。 最初はVPNの動きについて実際に動かしながら動作確認(デフォルトゲートウェイやネットワークデバイスなどの確認やパケットキャプチャーの結果解析)をしつつ、方向性はVPN通信をTLSでカプセル化して通信するプロトコルを作ることになりました。

2日目あたりで、朝の8:30になってL1受講生は揃っているのに、緑川先生とチューターが遅刻するというハプニングがありました。 講師が揃っていないところで、プリミティブ側でSIDHに対する攻撃の実装ができたーとの声が聞こえたので、とても良い機会なのでプリミティブ側がどんなことをやっているか教えてもらおうと思い、今回扱っている Castryck-Decru attack (2022/7) とはどういった攻撃なのかとか、そもそもSIDHとはどんな鍵交換アルゴリズムなのかを質問したりして教えてもらっていました。 数学に強いチューターさん (@Anko_9801) も議論に参加してくれたおかげで、数学の面の色々基本的な部分で勉強になることが多かったです。

教育というと講師から学習者への一方的な情報伝達になりがちですが、セキュリティキャンプは合宿形式で相互作用における学習では教え合うことで、知識を掘り下げたり関連づけたりして構築されていくため、プロトコル・プリミティブの両方の視点からどう見えるか、という観点で面白くなる余地がありそうだなと感じました。 次回はテーマにもよりますが、実装したプロトコルの上に新しい暗号化手法を追加するなどのプロトコル・プリミティブの相互作用ができれば楽しいだろうな、と思っています。

バグとり(玄関用の虫除け)の効果もあり、デバッグなどの作業も捗り、開発は順調に進めることができました。 プロトコル側は無事に最低限の機能がある状態で最終発表資料作成に臨めたので一安心でした。

最終発表では、ざっくりいうと「UDP over TLS」でTLSトンネリングを実装して、VPNのWireGuardの通信がDNS/HTTP/HTTPSだけが許可されているFWの制限を通るような仕組みを作成した、というところです。 難しいことをみんなにわかりやすく伝えるのもスキルの一つなので、Lトラック内の発表と最終発表を通して得られるものがあればいいなと思っています。

キャンプを終えて

セキュリティキャンプ修了は、終わりではなく、新しいキャリアへの始まりです。 主査の言葉をお借りすると、どのようにモチベーションを維持するか、そしてそれを自分でどう管理できるか、という点が重要になります。 目標の自己生成は決して簡単なことではありません。 学びを支える動機づけには競争動機(周囲に勝つ喜び)、理解動機(わかる喜び)、感染動機(憧れや希望により自分の行動が促されるもの)などがあります。 「ライバルを見つけなさい」という言葉があったと思いますが、これは競争動機の一つです 1。 全然わからないことは一旦諦めて、もう少しでわかりそうなところから始めるのは理解動機です。 セキュリティキャンプを通してあの講師やあのチュータ、もしくは技術力の高い同世代の参加者のようになりたいと思う気持ちは感染動機です。 参加者の皆さんが、セキュリティキャンプで触発されて、技術を学ぶモチベーションを維持するためのきっかけを見つけられること、そして学びを続けた先にある「インターネットという海の開拓者」になることを期待しています。

次回に向けて

講師として目指すべき目標は「参加者が自分ひとりでも遠く先にある技術領域に到達できるように支援すること」であり、人はどのように物事を認知し、どのように動機づけが働き、アドラー心理学の教育面でどのような考慮が必要なのか、色々考えさせられる回でした。 現地開催ということもあり、いろいろな対話を通した検証や実験ができたのがよかったです。 参加者に小手先のやり方や単なる真実を伝えるだけでなく、その先にあるものに向かわせる。そうした高い目線には、講師自身が探求を愛する探求者そのものであり、遠くを見据えなければならない、と改めて感じました。

もし、参加者の中からサイバーセキュリティ事件への関与が発生すると、本事業は継続不可能の危機に陥ります。 プロセスよりも結果を重視してしまうと、手段を問わずに(それが社会通念上良くないとされている方法でも)結果を出そうとする可能性があります。 アドラー心理学を推している人として、結果よりもプロセスを重視し、横の関係で、勇気づけされる側の興味関心に焦点をあてて行うことを、理論だけではなく現実においても実践できる貴重な経験になりました。次回も参加できる機会があれば継続して取り組みたいです。

前回同様、引き続き RFC Trans (RFC対訳サイト) の管理をしながら面白そうで実装しがいのあるプロトコルがないか探していきたいと思います。 比較的新しくてゼミでやってみたい or 個人的に興味あるーと思っているのは以下のあたりです。

次回の応募課題については、評価基準として「ライブラリを利用して誤魔化すのではなくRFCなどの元の仕様から自分で実装した痕跡があること」と「修了後を見据えたやりたいことがあること」は明記しようかなと思っています。 暗号技術のライブラリが使用できます、と言われても探索者としては不十分で、暗号技術に対する知見を評価できないからです。 また、設問に対する回答が丁寧で詳しく説明されていてRFCなどの原文も参照していて良い感じだったんだけど、修了後を見据えたやりたいことが明確ではなかったために優先度を下げた応募者の方もおり、非常に惜しいという気持ちなので、もしこの駄文を見てくださっていて次回もチャンスがあるのであれば、目的・目標設定を明確化した上で、ぜひ挑戦してみてほしいです。暗号化通信ゼミの講師一同お待ちしております(次回も講師として呼ばれたらの話ですが)。

交通系ICカードを服の中に入れたまま洗濯しちゃったり、自宅に帰った後で寝るときに使ったタオルをホテルに忘れて電話連絡で郵送してもらうなど、色々なやらかしもありましたが、この辺で筆を置くことにします。

以上です。

参考資料


  1. アドラー心理学を推している自分としては、競争原理ではなく協調原理を推奨したいところですが、モチベーションの維持方法は人それぞれなので … 


類似記事