皆さん、こんにちは!Unityメンターのじろけんです。
本記事はLifeisTech!TokaiAdventCalenderの12/16です。
今回はUnityではないですが、僕が昨年参加した「セキュリティキャンプ全国大会2019」の参加記録を当時を思い出しながら綴っていきたいと思います。
セキュリティキャンプって何?
セキュリティキャンプはIPA(情報処理推進機構)が主催しています。公式サイトによると以下のような説明になるようです。
「セキュリティ・キャンプ」は、学生に対して情報セキュリティに関する高度な技術教育を実施し、次代を担う情報セキュリティ人材を発掘・育成する事業です。2004年に開始され、現在は全国大会を首都圏で毎年1回、2013年に開始された地方大会を毎年各地で10回程度開催しています。 全国大会、地方大会とも、参加するには応募課題を提出し、書類審査に通過する必要があります。
説明にもある通り、セキュリティキャンプには全国大会、地方大会とあり、僕は去年全国大会、地方大会in北海道,愛知に参加しました。今回は全国大会をメインに書いていきたいと思います。
ちなみに、2019の会場はクロスウェーブ府中と言う施設でしたが、交通費、食費、全て負担してもらえます。半端ないです。
参加動機
セキュリティキャンプを知ったきっかけは正直覚えていないのですが、大学生の時期は色々チャレンジしてみるべきだと言われたこともあり、挑戦しました。
事前課題について
セキュリティキャンプでは、事前課題がいくつか与えられ、自身のセキュリティキャンプに対する熱意に加えて事前課題に取り組んで提出しなければなりません。僕は、「高級言語ではできないことについて解説してください」と言う課題に取り組みました。たまたま提出したデータがまだ残っていたので、載せておきます。
B.3 高級言語ではできないことについて解説してください。
私が思う高級言語では出来ないこと、それは「軽量化」です。
高級言語はより抽象度が高く人間の言語に近いため、直感的にプログラミングすることができます。一方で、CPUの振る舞いを細かく正確にプログラムすることは難しいです。
それだけでなく、ハードウェアやその機能の利用も、人間に近い言語であるがために、一部制限されてしまいます。特に組み込みシステムは、CPUの性能やメモリ容量などの制約が大きいため、プログラムをより簡潔にすることが望ましいですが、高級言語では機械に対して、コンパイラを通して指示を出すため意図せず容量などが大きくなってしまい、低級言語の方が望ましいとされています。現代において組み込みシステムは幅広く使われています。その代表例がスマートフォンです。
スマートフォンが必需品と化している現代において、組み込みシステムは重要な役割を担っており、それを一部でも高級言語で記述できないことは、高級言語のデメリットと言えます。しかし、裏を返せば私が現在考える高級言語のデメリットはこれだけです。今後、より詳しく学んでいくと新たに発見をするのかもしれませんが、大きなデメリットはこれだけだと思っています。すなわち、高級言語をコンパイルする方法、つまり「人間語」を「機械語」に翻訳する方法をより簡潔にすればこのデメリットが解消できるのではないしょうか。現在、コンパイラは主に「字句解析」「構文解析」「実行コード生成」を行っています。この3ステップをより簡潔にすることでコンパイル自体が少し簡略化されるのではないでしょうか。簡潔にするためにすべきことは、暗号化に関する技術が応用できるように考えます。現時点では暗号化技術についてあまり知識がないですが、今後熱心に学びロボット開発に生かしていけたら、より社会に貢献できるロボットを開発できると考えます。
僕の所属している学科は電気電子ですし、事前課題に取り組んだ当時は1年生と言うこともあってあまり事前知識がある訳ではありませんでしたが、調べて自身が知っていることに結びつけたりしながら頑張って書きました。
勉強内容
僕がエントリーしたのはセキュリティキャンプの中でもフィジカルトラックと言うコースでIoTのセキュリティなどを学びました。講義数が多かったかつ講義内容が濃厚で一個ずつ書いていくと文庫本並の文量になる予感がするので、今回は一番僕のツボだった「USB通信ハック、OSSロジアナ解析とUSBパケット生成」について紹介したいと思います。講義内容を公式ホームページから引用しておきます。
中国から輸入した超小型Arduino互換Digispark開発ボードと24MHz/8CHのUSBロジックアナライザを参加者全員に配布し、組み込み機器プログラミングを体験してもらいます。オープンソースで開発されているソフトウェア版ロジックアナライザsigrokを用いて、USB1.1の通信内容を解析する方法を学びます。また、AVRマイコンATtiny85を用いて、マウスやキーボードのUSBプロトコルをしゃべるHIDデバイスを開発します。
何を作ったかと言うと、挿すだけでターミナル開いて勝手にいろいろ打ち込んだり、マウスカーソルを無限に動かしちゃう、いわゆるBadUSBを作りました。語彙力に欠けますが、はんだ付けしたりプログラミングしたり楽しかったです。セキュリティキャンプはこういったハンズオンで行う講座もあれば普通の座学もあるのですが、自分の好きな講座を受講することができるので大変充実した研修期間になります。
他どんな講座があったねん。と気になる方もいらっしゃると思いますが、そういった方は参考のところに公式ホームページのリンクを載せておきますので、そこから見ていただけると幸いです。
また、講座とは別にラストナイトイベントと言うものが、研修の最後の夜に行われ、あんなものやこんなものまで豪華景品がもらえちゃいます。僕は選ぶ順番がかなり後の方でしたが、ちゃんと本がもらえました。
最後に
僕がセキュリティキャンプで知識の他に得られたものは主に3つです。
1.コミュニティに積極的に参加しようと言う気持ち
今までは、存在を知らなかったり、知っていてもどこか行く事にためらっている自分がいたように感じます。しかし、今回講座を受けて、地元のコミュニティに参加しようと思えるようになりました。
2.仲間
周りの方のレベルは本当に高くて、一緒に時間を過ごしているだけで、勉強になりました。周りにこういった高いレベルの方はそんなに多くないので、存在を知るとともに、ツイッターなどで繋がることができたのはすごい大きいと感じます。
3.セキュリティに関する興味
セキュリティキャンプに行った事によって、もっとセキュリティを学びたい!という強い気持ちにかられました。(結果的に、キャンプ終了後1万円近くセキュリティの書籍を買ってしまいました笑)この気持ちがかりそめなものにならないよう、精進していきたいと思います。
ぜひ、皆さんの中にセキュリティに興味があるぞいと言う方が見えましたら、ぜひ参加してみてはいかがでしょうか。楽しいですよ。
P.S.セキュリティキャンプで全然写真を撮っていなかったせいでひたすら字を書き連ねてしまいました。写真撮って思い出として残しておくことって大事ですよね。反省します笑