SecHack365の2022年度の募集が開始されています.簡単に言うと,年間かけたハッカソンイベントです.

詳しくは以下を参照してください.

https://sechack365.nict.go.jp/

SecHack365ですが,どのコースやゼミに応募するかで悩んでいる人がいると思いますが,それについて,以下は私個人としての考えです.

SecHack365は今年は5コースからなり,またコース内がゼミで分かれているとこもあります.

で,やることややれることは,コースやゼミによって全然違ったりします.
コースやゼミによって方針ややりかたも全然違ったりします.

また,長期間に渡るイベントです.

なのでその方針ややりかたといったところでミスマッチ出るときついので,コースを十分に吟味して選んだほうがいいと思います.

つまりコースを選ぶとき,「この技術を扱っているから…」みたいにして技術分野だけでコースを選ぶのでなく,コース概要やゼミ説明を良く読んで,コースやゼミのやりかた・方針を調べて,それが自分に合うかどうかでコースを選ぶことをおすすめします,ということです.

なにせ長期間やるものですので,分野が合うか以上に,そのコースの方針が自分に合うかどうかが超重要です.

分野の違いは自身で努力・学習して自律的に開発することで埋められます.

でも方針が合わないのは埋めにくく,さらに長期間だと,自分に合わないやりかたでずっと続けるのはきついことになるからです.

なのでどのコースでどのような技術分野を扱うかだけでなく,そのコースの方針ややりかたをよく調べておくことをすすめます.

SecHack365のコースは「XX駆動コース」という名前になっています.「駆動」という言葉がついています.

この「駆動」という言葉の意味は「XXすることから物作りを始める」という,物作りに対するアプローチの違いです.
分野でなくそうしたアプローチの違いでコースを分けています.

あまり考えずにパッとライトにものづくりを始めてしまいたいとか,作る意義とか目的とか世の中の需要とかを充分に検討してからものづくりを始めたいとか,そういうアプローチの違いです.

こういうのは,どれが優れたやりかたかというものではなく,どのやりかたが自分に合うかの問題です.

長期間イベントなので,分野よりもアプローチが自分に合うかどうかのほうが重要です.しっかりコースを選ぼう.

 

で,私が担当させていただくのは学習駆動コースというところなのですが,まず以下に詳しく説明していますのでそちらを参考にしてください.
https://kozos.jp/sechack365/

学習駆動コースは,作りたいものをひたすら作っていただくコースです.
坂井ゼミ・今岡ゼミ・コンテンツゼミ・コンテストゼミ・砂場遊び開発ゼミの,5つのゼミがあります.
ゼミごとに方針ややれることが「全然」違うので,応募を考えているかたは必ずゼミ説明をよく読んで熟考してから応募してください.

坂井ゼミでは組込みやOSなどのソフトウェアの低レイヤー周りを扱います.
今岡ゼミではFPGAや通信といったフィジカル系を扱います.

コンテンツゼミでは,セキュリティを啓発するための何らかのコンテンツの作成と普及を目指します.
小説・絵本・マンガ・映像・競技などの「非技術系」のコンテンツでもOKです.

で,それらを自身で考案し,作り,作るだけでなく公開して世に普及させることを目指します.

作詞・作曲やダンスなども可能性があるかと思います.

コンテストゼミは,今年新設されました.

ここではなんらかの競技やコンテストを考案し,作り,実施し,普及させることを目指します.

自分で考えた競技を,自分で作って実施してみる,というのが趣旨です.


砂場遊び開発ゼミではオンライン開発を主体として「自発性」「非同期性」を重要視してグループ開発します.
具体的には役割分担や打合せや方針決めや互いの調整をしない・リーダーは決めない・途中での分離も自由として,緩い疎結合で非同期で各自が好きにものづくりします.

今年の開発テーマはこのブログでも紹介している「NLCC」です.(私が自作している独自のCコンパイラです)


学習駆動コースでは,基本的に作りたいものをどんどん作ってもらいます.さらに付加的な学習を,やりたいようにやっていただくことを推奨しています.(ただ推奨程度で,強制するようなことは無いです)
ものづくりが好きで,考えるよりもまず手が動く,自分で作ってみたい,ついでに興味の向くまま寄り道もしたい,いろんなことができるところがいい,という人に向いています.寄り道的な開発や学習を許すので,例年,いろんな寄り道をする人がいます.(むしろ寄り道することは推奨です)
 

学習駆動コースに向いてるのは「有用性とか考えてないが作りたいから作る」「とりあえず作ってみるというやりかたが好き」という人です.
凡庸なアイディアでも車輪の再発明でも非実用的でも作り捨てでもOKです.

作ってみたいと思ったらまずは作ってみて「作って作りまくる」「作って失敗したら,また別のを作ればいい」というコースです.

 

で,以下は私が担当する坂井ゼミについてです.

 

坂井ゼミではおすすめの開発テーマを提示しており,主に低レイヤー分野のテーマになるのですが,それ以外にも,持ち込みテーマを受け入れます.
ただし技術的なことは教えられない可能性が高いので,自身で自律的に開発を進められることが前提になります.
過去には動画編集ソフト開発といった持ち込みテーマがありました.

 

あと坂井ゼミの方針ですが,私は基本的にモチベーション至上主義です.
なので本人がやりたい・作りたいと思うことをまずやってもらい,それを止めたりすることは基本的にありません.
「これやりたいです」に対しては「あーいいんじゃない,やりたいならばやってごらん」です.

あと坂井ゼミでは,私自身も開発テーマを持って,年間かけてものづくりをします.

トレーニーと一緒に私もものづくりするという感じで進めます.
私がどんなふうにものづくりをしていくのか,リアルタイムで見ることができます.ぜひいっしょにものづくりをしましょう!
 

ブログが長らく休止状態になっていたのですが,現在,nlccという完全独自のCコンパイラを開発しています.
https://kozos.jp/nlcc/

nlの意味のひとつは「No Learn, No Listen」で,「何も見ず,聞かず,参考にせずに作る」です.まあ特別そうした確固たるポリシーがあるとかではないですが,そういうやりかたで作ってみたら面白い…というか独自性あるものになるかもと思って,そういうやりかたで作っています.

なのでおそらく,実装や用語や考え方が独自になっている部分が多いと思います.

前段階として,nlshという独自シェル(見ためはtcsh互換)と,nllibcという独自の標準Cライブラリを開発していて,それらと合わせた形で「nlux」として配布しています.

 

一応,gcc(に含まれる,cc1相当)の代替となることを目指して開発しています.

 

nlccやnlshは,nllibcを利用することで,システム標準のライブラリを一切使わずにビルドすることができます.ライブラリ的に完全に閉じてビルドできる,ということです.nllibcはスタートアップやシステムコールラッパーも持っているので,システムが持つそれらも不要です.
さらにnlcc/nlsh/nllibcも,nlccでコンパイルできます.
つまり,nllibcを使ってnlccをビルドして,そのnlccを使ってnllibcをビルドして,さらにそのnllibcを使ってnlccをビルドして...ということができます.

もちろん,システム標準のライブラリ(libc)を使ってビルドしたり,gcc/clang等を使ってビルドすることも可能です.

また,ヘッダファイルはシステム標準のものを使うが,ライブラリの本体はnllibcを使う,という方法でビルドすることも可能です.(ただこの対応はシステム依存部がややこしくなるので,将来的に廃止するかもしれない)

システム標準のヘッダファイルをインクルードしたファイルを,コンパイルすることもできます.(つまりFreeBSDやDebianが持つヘッダファイルもコンパイルを通すことができる,ということです)

FreeBSD/Debian/CentOSでのビルドに対応しています.(ただCentOS対応は将来的に廃止するかもしれない)
要するに,組合せ自由でビルドできる,ということです.

nlccの最大の特徴は,「アーキテクチャ対応する際の対応必要部分を最小限にしてある」という点です.
数百行程度のファイルを用意すれば,それで新規アーキテクチャに対応できます.
数百行のファイルを用意するだけで新しいアーキテクチャに対応できるとしたら,すごく面白いんではないかなと.

 

というように,nllibc使ってシステムのライブラリ使わずビルドできる,組合せ自由でビルドできる,アーキテクチャ対応しやすい,などといった特徴がありますが,まあ大熱血アセンブラ入門の著者がCコンパイラ作ったらこんなふうになるだろう,という考えでそうしてみました.

アーキテクチャ対応しやすいというのは,アーキテクチャ全体を俯瞰して処理や設計を極力共通化することと,ビルトインを充実させることで実現されています.
アーキテクチャ対応する際には,処理に応じたアセンブリの命令を登録するのですが,登録が面倒ならば未登録にしておけば,ビルトインで等価の処理をしてくれます.(もしくは等価の別処理(!=は==の演算での別処理に置き換えるとか)にしてくれます)
たとえばかけ算や割算は,命令を登録しなくてもOKです.登録しなければ,ビルトインが使われます.まあソフトウェア計算になるので要するにループ回した計算になるのでたいへん遅くなりますが,それでもとりあえず動くコードを生成してくれますし,対応の初期はとりあえずビルトインにしておいて検証して後できちんとした命令を登録する,ということが可能です.
まあもちろん,ビルトインが存在する処理に限られます.今のところシフト演算・かけ算・割算・剰余算・ビット反転(~n)・符号反転(-n)はビルトインに置き換え可能,符号拡張・比較演算の一部(==と<以外)は等価の別処理に置き換え可能です.つまりこれらは対応しなくても,とりあえずアーキテクチャ対応することはできます.

 

可変長引数,ビットフィールド,構造体の引数渡しにも対応しています.

(構造体の戻り値にも対応しているが,開放済みスタックを利用しているので不十分だがまあとりあえずは動くと思う)

 

現状,以下のアーキテクチャに対応しています.
x86/x86_64 (実際に動作し,テストセットがすべて通りnlcc自身をセルフビルドできるレベル)
AArch64/ARM/MIPS/PowerPC/Thumb/MIPS16 (とりあえずアーキテクチャ対応のファイルを用意し,アセンブリは出力できるが未検証,というレベル)
OSECPU (実験的実装のレベル)

 

nllibcも様々なアーキテクチャに対応しているので,原理的にはARMやMIPS上でもnllibc使ったセルフビルドができるはず...
(ただしnlccはコンパイラのみなので,プリプロセッサ・アセンブラ・リンカは別途必要)

64ビット対応はしてありますが,ホストが32ビットの場合には,long long のような64ビット値は64ビット値でなく,32ビット値として扱われます.(sizeofでは64ビット値として扱われるが,演算などは32ビットで行われる.なのでひとまず動作はするという感じ)

多種アーキテクチャを意識しているというのはあるのですが,そのぶん,最適化というものをほとんど一切していなくて,生成されるアセンブリの効率は悪いです.
gccでビルドしたnlccと,nlccでビルドしたnlccで,コンパイル速度を比較すると,明らかに遅いです.
原因はいろいろわかってはいるのですが,多種アーキテクチャに対応しやすいことを優先させていて,とりあえず速度向上の改良は後回しとしています.

先日,セキュリティ・キャンプ2017の募集が開始されました.現在,絶賛募集中です.

https://www.ipa.go.jp/jinzai/camp/2017/zenkoku2017.html

 

知らないかたのために説明すると,全国からU-22の学生を集めてセキュリティやその他IT分野の講義や演習を行う合宿演習です.お盆の時期に,4泊5日で行われます.

演習の内容は非常に高度で面白いのと,あと選考に通って参加できるようになれば,交通費・宿泊費・食費・教材費などの負担無く,無料で参加できるというのが嬉しいところです.講師はいろんな有名人が多く,とっても豪華な顔ぶれです.

 

私は集中コースの「言語やOSを自作しよう」というトラックで,組込みOS自作ゼミ」を担当します.

集中コースがどのようなものか,このトラックがどのようなものか,詳しくは以下に書きました.

http://kozos.jp/group/seccamp2017/

 

集中コースがどのようなものかというと,一言でいうと「ハッカソンによるものづくり」です.

セキュリティ・キャンプでは5日間のうち,専門講義は3日間あります.

「集中コース」ではこの3日間を通して,主に「ものづくり」をテーマとして,各自で開発テーマを決めて,ハッカソン形式で開発を行います. 

3日間,どっぷりとものづくりにひたることができるという,ものづくり好きには夢のような時間・環境を提供します. 

ものづくりが好きなひとは,ぜひ応募してほしいです.

youtubeに私のインタビューが出ているので,そっちも参考にしてください.応募についての話もあります.

https://www.youtube.com/watch?v=1cyWNT-3Aog

 

机上で議論するだけでなく実際にものづくりをすることで,コンピュータの動作原理を地に足ついた形で知り,脆弱性の根本原理を理解し本質的な対策を考えられ,そして実際に対策物を自分で作ることができるという素養を養う,というのが目的です.

 

ちなみに名前は「セキュリティ・キャンプ」ですが,セキュリティやっていないと参加できないかというと,そういうわけでもありません.個人的には,「もともと他の分野をやっていてセキュリティは興味無かった人が,セキュリティ・キャンプに参加することでセキュリティにも興味を持つようになった」というような「きっかけ」を作ることができればいいなと思っています.そういう卒業生も過去にいっぱいいます.

私自身も,もともとは組込み分野が専門でセキュリティにはあまり興味ありませんでしたが,セキュリティ・キャンプの講師をやるようになって,セキュリティにも興味を持つようになりました.

なので,「ものづくり大好きだけどセキュリティはやったことがありません」という人はむしろ大歓迎です!

 

応募ですが,今回は「選択コース」と「集中コース」の2つのコースがあります.

選択コースは5つのトラックがあります.選択コースに応募いただいた場合,選考に通ると,その5つのトラックから受講したい講義を,講義ごとに選んでいただくことになります.選ぶのは参加決定した後です.

集中コースは3つのトラックがあります.集中コースに応募いただく場合には,どのトラックを受講したいか応募の段階で決めて,そのトラックに対して応募していただくことになります.

ちなみに「選択コースと集中コース」や「集中コースのあるトラックと別のトラック」のようにして,重複して応募することはできません.(重複ある場合,どちらかが無効になります)

なのでセキュリティ・キャンプ2017では,選択コースにするか,集中コースのどのトラックにするかを選んだ上で,応募していただくことになります.

さらに集中コースでは,トラックによってはその中がゼミとして細分化されていて,どのゼミに入りたいかを選んで応募していただくことになります.

 

「SecHack365」という,若手セキュリティ人材育成プログラムが今年度よりスタートします.

主催はNICT(情報通信研究機構)です.

 

https://sechack365.nict.go.jp/


年間かけて,オンラインでハッカソンを行うのですが,2ヵ月に1箇所くらいのペースで各地を巡業し,見学会などのイベントなども行われます.

 

対象はU-25です.学生は無料で参加できます.

(社会人でも参加可能ですが,交通費や宿泊費などの実費が必要)

 

ハッカソンの際には,実行委員の大人たちが開発やアイディア出しなどをサポートします.

で,私もその実行委員として参加します.

またNICTの"NONSTOP"というクラウド開発環境が,オンラインで使えます.NONSTOP上の膨大な蓄積データを使って,研究や開発を行うことができます.

まあ詳しいことは,リンク先を見てみてください.

 

応募は課題ファイル申込期限が4月25日(火), 課題ファイル提出期限が4月28日(金) 17時必着です.
我こそはと思うひとはぜひ応募を!

 

久々の告知です.

3月のオープンソースカンファレンス2017Tokyo/Spring内で,コミュニティオリジナル企画として,今岡通博さんといっしょにいくつかのセミナーを実施します.

オープンソースカンファレンス2017Tokyo/Spring
https://www.ospn.jp/osc2017-spring/

コミュニティ オリジナル企画
https://www.ospn.jp/osc2017-spring/modules/article/article.php?articleid=5

ひとりプロジェクトの会
http://kozos.jp/group/hitori-prj-meeting/index.html

通常のセミナー枠でなく,長めの時間をとってコアな内容のセミナーを実施します.
要するに,マニアックな内容で参加者数とかをあまり考えずにやってみるという感じです.
日程・プログラムは以下です.
参加登録などはとくにありませんので,ご自由にご参加ください.

 

  • 日時 3月10日(金) 11:00-17:00
  • 場所 明星大学 日野キャンパス 26号館 510教室 (5F)
 
  • 11:00~12:50 「パケット大運動会ハンズオン」
    • 【担当】 坂井弘亮
    • 【概要】
      「パケット大運動会」は,指示されたネットワーク・パケットをいち早く作成 してサーバに送れば得点という競技です.時間中はサーバを立ち上げておきます ので,自由に参加して挑戦することができます.
      最初にバイナリエディタによるパケット作成の方法を説明します. パケットの作成方法について知りたいかたは,最初から参加してください.
      手作業によるパケット作成により,ネットワークの仕組みやパケットの構造を 実践的に知ることができます.
 
  • 13:00~14:50 「LANケーブル改造によるノード間のパケットモニタリング」
    • 【担当】 今岡通博
    • 【概要】
      LAN内のパケットをモニタリングすることはネットワークの理解を深めるるうえで 非常に有効な手段のひとつである。しかしスイッチングハブが一般的に なったためセキュリティ面では強化された一方、LAN内の他のノード間の パケットモニタリングすることが困難となった。 リピータハブを用いる方法もあるがスイッチングハブと比較し希少かつかなり 高価となった。 そこで容易かつ安価な方法でLAN内のパケットをモニタリングする手法を 紹介する。
      • リピーターHUBを使う方法
      • スプリッターを使う方法
      • LANケーブルを改造する方法
      • ミノムシクリップと改造ケーブルで活線LANから行う方法
 
  • 15:00~16:50 「SECCON2016決勝大会 マルチアーキ・デバッグプロトコル問題解説」