セキュリティ・キャンプ アワード 2024 レポート #4: 「CPUからWebサーバまで全部作る!森羅万象プロジェクト ~コンピュータ学習の入口になることを目指して~」
セキュリティ・キャンプ修了生たちの日常的な研究や活動に注目し、修了生の活躍の場、発表の場としてセキュリティ・キャンプ アワードを開催しました。
一次審査を通過した方にインタビューを行い、修了後に取り組んだプロジェクトや活動についてお伺いしました。
第4弾は、本アワードの最優秀賞を受賞した『CPUからWebサーバまで全部作る!森羅万象プロジェクト ~コンピュータ学習の入口になることを目指して~』を発表されたセキュリティ・キャンプ 全国大会 2023 の修了生グループ「森羅万象プロジェクト」の皆さんにインタビューしました。
森羅万象プロジェクトのメンバー: 秋山さん、松見さん、中神さん、木村さん、高棟さん (うち、高棟さんはインタビュー時欠席)
- アワードレポート #1: 「チャレンジ講師への挑戦と講義における工夫」
- アワードレポート #2: 「One Million ASUS Routers Under Control: ASUSルータに搭載されているDDNS機能の脆弱性と認証情報の取得」
- アワードレポート #3: 「セキュリティLTのすゝめ」
セキュリティ・キャンプへの参加のきっかけ
ーー よろしくおねがいします。最初に自己紹介をお願いします。
秋山)
セキュリティ・キャンプは学校の掲示で知りました。ミニキャンプに参加したあと、2023年の全国大会に参加しました。
松見)
自分もセキュリティ・キャンプ 全国大会 2020 オンラインに参加してからの全国大会への参加になります。ミニキャンプのときは、自分だけ教科書をなぞっているだけのような悔しい思いをしました。「キャンプだからこそできること」があまり出来なかったので、2023年の全国大会に再挑戦という意味でも参加しました。
中神)
セキュリティ・キャンプは学校でチラシなどが配られていて、そこで知りました。過去にも応募したことがあるのですが、落ちてしまい… その後受験などもあって応募できない年が続いたのですが、年齢制限的に応募できるのが最後の年だったので、2023年の全国大会に応募し、参加しました。
木村)
セキュリティ・キャンプについては高校の部活の先輩から教えてもらっていました。2022年のキャンプに参加した同級生から「良かったから行ってみなよ」と言われ、2023年の全国大会に参加しました。
ーー 皆さん2023年の全国大会参加なんですね。キャンプに参加してどうでした?
秋山)
参加前はセキュリティについて「概念は知っているけど、実際はどうやるのか」といったことが分からなかったりしました。自分は分散合意ゼミに参加し、そこで Go 言語で分散システムを作ったのですが、「実際に作れるんだ」というのを実感できたのは良かったです。
キャンプ中は課題の2割ぐらいしかできなかったんですが、学んだことは研究にも活かすことができましたし、技術に明るいメンバーと繋がることができたのも参加して良かったと思います。
中神)
参加後は SNS などでの交流の幅が広がった気がします。技術的なことを学べたというのはもちろんなんですけど、会場のあの独特な雰囲気を味わえたのは良かったなと思います。
あと、講義中に他の講義の様子を見に行ったりしたんですが、「こういう分野もあるんだ」「こんな面白いことをやっているんだ」というのを知ることができたのも良かったです。
ーー 他の講義の様子を見に行ったりしていたんですね
中神)
はい、他の部屋に行ったら「なんかルーター走ってんな…」とか笑
そんな感じで他分野を知れたのが良かったです。
ーー ハードウェア魔改造ゼミですね。あれはインパクトありますよね。
「森羅万象プロジェクト」とは
ーー アワードについてお聞きしたいのですが、「森羅万象プロジェクト」とは何ですか?
松見)
セキュリティ・キャンプのグループワークでの取り組みです。「CPU から Web サーバーまで、コンピュータシステムのすべてを作る」という意気込みで始まったプロジェクトです。
今年のグループワークでは、同じ分野に興味がある人でグループを作っていました。であれば「こんなこともできるのではないか」という感じで始まったのが経緯です。
活動は週に一回実施していまして、今は CPU の命令セット、CPU自体、アセンブラを作っていて、コンパイラにも着手しています。
ーー すごい、かなり野心的なプロジェクトですね。CPU は FPGA などの実機でも確認しているんですか?
松見)
はい、実機でも動作することを確認しています。オンラインで活動しているので、普段はシミュレーターで動作を確認しています。
ーー オンラインでの活動なんですね
松見)
Discord のボイスチャットで活動しています。最初は2,3時間作業するつもりだったんですが、20時から始めて盛り上がって日付跨いじゃうこともしばしば…
中神)
CPU などはこれまでの仕様に囚われずに、自分たちが仕様を決め、好きなことを詰め込んでやっているので、自然と継続できていますね。
ーー CPU やコンパイラを作っていくにあたって、前提知識が必要だと思うんですが、グループメンバー全員にその知識があったんですか?
秋山)
いえ、3人は CPU や OS 自作のゼミだったのですが、他はそうではなく…。自分は見ているだけみたいな…笑
中神)
毎週の開催でモブプログラミングで開発しているので、見ているだけというのはないと思いますよ笑
モブプログラミングで作業することで、みんなで技術力を高めていこうというところもあります。
ーー CPU 自作やモブプログラミングなど、講師の内田さんの影響を感じますね
秋山)
確かに。プロジェクト自体も内田さんの助言があって大きく方針が変わりましたね。
中神)
最初は RISC-V などを使って一般的な CPU 自作をやろうとしていましたんですが、内田さんから「どうせなら自分たちでオリジナルのものを作ったほうが面白いんじゃない?」と助言をもらいました。
なので CPU の命令セットの長さは 32bit や 64bit が普通なんですが、僕たちは 48bit でやったりとか。あとは、ハーバードアーキテクチャでデータと命令を別にしたりとか… いわゆる逆張りみたいな笑
モブプログラミングも内田さんがきっかけなので、結構影響を受けていますね。
ーー プロジェクトで難しかったこととかありますか?
中神)
普通 CPU を作るときは Verilog を使うんですが、僕らは Chisel を使っていて…。Chisel の仕様起因で悩むことが多かったですね。
松見)
Verilog と違って Chisel は設計しやすさのために簡略化されているものがあって、「かゆいところに手が届かない…」ということがありました。
中神)
シミュレーションがコケてしまう現象も、突き詰めてみると仕様をよく理解できていなかっただけ、みたいなことも。
ーー すごい、だんだん理解できない領域の話になってきました…笑
中神)
実は森羅万象プロジェクトの目標の一つに「入門記事を作る」というのがあります。
主に秋山さんが担当してくださっているんですが、僕らが歩いてきた過程をすべてブログ記事にして公開しています。
秋山)
Qiita や Zenn, GitHub で公開し、Xで発信しています。
情報工学を始めたばかりの学生を想定読者として、それこそ VSCode のセットアップなど基本的なことから書いています。
プロジェクトを振り返って
ーー アワードでは最優秀賞を取りましたよね。どういったフィードバックをもらいましたか?
中神)
一番印象に残っているのは「とことんやりきってください」という言葉ですね。
秋山)
「途中でやめちゃダメだよ」みたいな笑
秋山)
あとは、48bit の時点で初心者向けではないのではないか? とか笑
なので、できるだけ噛み砕いてブログ記事では説明しようと思っています。
ーー 改めて、プロジェクトを振り返ってみて思うところはありますか?
秋山)
一番は自分を置いていかないでくれたメンバーに感謝ですね。
「CPU って作れるんだ」「48bit って大丈夫かな…」「みんなができるんなら、やってみようか」という感じで始まって…。
やってみると文法も何も分からなかったのですが、一行一行丁寧に教えてくれて… それはすごくありがたかったです。
それを解説するブログ記事として書いていくことで、モチベーションを維持できました。
中神)
それで言うと、秋山さんが分からないところを質問してくれたおかげでコミュニケーションが円滑になったところも良かったですね。
松見)
全員が理解できるまで、とことん考えるというのは良かったかもしれないですね。
中神)
あとは、木村さんがコード上に細かくコメントを書いてくれていたので理解が進んだところもありますね。
木村)
「メンバー全員が理解できてこそ、入門記事も書ける」というのはありますよね。
ーー 確かに。ブログ記事を書くうえで改めて整理もできますし、良いサイクルですね。
ーー 最後に今後どうしていきたいかを聞きたいのですが… もちろん Web サーバーまで…ですよね笑
中神)
そうですね。ネットワークあたりまで実装できたら… 1年ぐらいでいけるんじゃないかな…と。来年のアワードに乞うご期待!という感じで笑
ーー 初の2連続最優秀賞かもしれませんね笑 期待しています、ありがとうございました!