ビーコンの創出

なんか作ったり報告したり。

SecHack365での1年間をワードクラウドで振り返る!(後編)

thumbnail(ポスターまとめ)

引き続き2019年度のSecHack365後半戦を振り返っていきます!

↓↓↓前回の記事↓↓↓ souring.hatenablog.com

10月 宮城回

松島や ああ松島や デモ展示や

公式レポート目線

#4 宮城回のワードクラウド(公式レポート)
#4 宮城回のワードクラウド(公式レポート)

宮城回のメインは展示であり、成果物のプロトタイプやそこにたどり着くための制作過程展示しました。

セキュリティイニシアティブの小笠社長からは、「コミュニティ参加しよう・発表しよう」というお話をいただきました。

その他トレーナーを囲む会、続・倫理講義、アイデア早指しなどがありました。

トレーニー目線

#4 宮城回のワードクラウド(Twitter)
#4 宮城回のワードクラウドTwitter

ナ イ ト チ ャ レ ン ジ

川合先生が人類を超越

パケット可視化するLANケーブルがバズってる!?の回

🎃Happy Halloween!🎃

12月 愛媛回

坊ちゃんもびっくりの温泉とお食事と発表が待っています。

公式レポート目線

#5 愛媛回のワードクラウド(公式レポート)
#5 愛媛回のワードクラウド(公式レポート)

今回は、ポスター・デモ・プレゼン全てで発表しました。

北条弁護士からのサイバーセキュリティ研究の注意点、マツダの山﨑さんからクルマを取り巻くセキュリティ桂三幸さんの現役落語などがありました。

トレーニー目線

#5 愛媛回のワードクラウド(Twitter)
#5 愛媛回のワードクラウドTwitter

松山空港着!道後温泉駅集合! 変な荷物が多いので手荷物検査が宿敵。

紅葉もキレイだったし、温泉もよかった。キャパ少ないサウナに人押し寄せすぎ。

JUST DO IT! (次回の沖縄まで頑張れ的な意味で)

1月 沖縄回

めんそーれ! 長いようで短い1年もついにファイナル。

公式レポート目線

#6 沖縄回のワードクラウド(公式レポート)
#6 沖縄回のワードクラウド(公式レポート)

沖縄回は最終成果発表会でした。

「やりたいこと」を「できる」に変える
さくらインターネット田中社長の講演がありました。

習慣化もファイナルで、今までの思い出とかもあったりして、なんだかちょっと感動的でした。

トレーニー目線

#6 沖縄回のワードクラウド(Twitter)
#6 沖縄回のワードクラウドTwitter

飛行機那覇進捗どうですか!!!

yt?l「朝食が食べれなくて超ショック!」

最終成果発表は1組20分で2日という長丁場でしたが、最後まで集中して意見を交わし合いました。

そのあとの突発的なLT大会、みんなLT経験豊富すぎだろと感じた。芸人でいうテレビのネタ出しかってくらい仕上がっている印象だった。

最終日はレクもあって、沖縄の聖地へ。暑い!アイス!サトウキビジュース! 沖縄回も最高楽しかったな!

作品まとめ

2019年の作品一覧 を使ってトレーニーの成果物をまとめてみました!

2019年度SecHack365作品まとめ
2019年度SecHack365作品まとめ

2019年度のSecHack365を修了したみんなからすると、「これこれ!」となる画像だと思います。

とにかく幅広く、専門的で、独創的な作品たちです。そしてセキュアですね!

成果発表会のお知らせ

そんな我々の成果物の発表会があります!ポスターやデモの展示、優秀作品のプレゼンテーションなどをご覧いただけます。

sechack365.nict.go.jp

開催は延期となってしまいましたが、みんなと再開して発表できる日を楽しみにしています。 それまでごきげんよう

SecHack365での1年間をワードクラウドで振り返る!(前編)

thumbnail(テカり芸)

はいどうも! 「#SecHack365」というハッシュタグを二度バズらせたsouringです。*1

国立研究開発法人情報通信研究機構(NICT)が主催する若手セキュリティイノベーター育成プログラム「SecHack365」に2019年度の学習駆動コースのトレーニーとして参加していました。25歳以下の学生・社会人が、1年間かけてサイバーセキュリティに関するものづくりをするハッカソンです。

今回は、ワードクラウドを使って、SecHack365での1年間を振り返ってみようと思います。

5月 神奈川回

公式レポート目線

以下のように、文章中の単語の頻度が高いものほど文字サイズを大きくまとまっています。 文章は、SecHack365公式の開催レポートを使いました。*2

#1 神奈川回のワードクラウド(公式レポート)
#1 神奈川回のワードクラウド(公式レポート)

神奈川回は、1年間のモノづくりをする上で大事なことが盛りだくさんでした。

主催しているNICTや習慣化の紹介大人たちトレーナーを囲む会や、イデアソン、コースごとのワークがありました。

トレーニー目線

そしてそして!神奈川回のTogetterまとめ*3の文章で生成したものがこちらです! 主にトレーニー(参加者)のツイート文章で作られているため、参加者目線のまとめと言えるでしょう。

#1 神奈川回のワードクラウド(Twitter)
#1 神奈川回のワードクラウドTwitter

新幹線」という単語があるあたり、まさにトレーニー目線ですね!最初の集合イベントであり、移動だけでもドキドキワクワク。

まだBacklogの使い方もわからず、Typetalkでトレーナーかトレーニーか区別がつかなかったあの頃。

自己紹介などを通して、つよつよすごい人たちが集まっていることを認識しました。

6月 北海道回

コースごとに与えられた課題などをこなして、北の大地で集合です。

公式レポート目線

#2 北海道回のワードクラウド(公式レポート)
#2 北海道回のワードクラウド(公式レポート)

北海道石狩市にあるさくらインターネットのデータセンターに訪問しました。サーバの冷却のための外気を取り込む仕組みなど、実物を見ながら説明を受けました。

縁日という名の、トレーナーによる実践形式の講座祭りがありました。ハンダ付け1000本ノックや、電子工作未経験で出来るBadUSB組み立て入門などバラエティ豊かでした。

その他、現役検事さんからの倫理講義やコースワーク、習慣化、修了生LTなどがありました。

トレーニー目線

#2 北海道回のワードクラウド(Twitter)
#2 北海道回のワードクラウドTwitter

やったーーー!北海道だ!!!ほぼみんなが飛行機での移動です。

さくらインターネットってすごい! 見学したからこそわかる。

縁日は、どれも魅力的でトレーニーたちは選ぶのに苦労しました。 思索駆動コースは大風呂敷(壮大な構想作り)をやっていたそうです。

Tシャツが配布されました。わーい!

Tシャツ支給(公式HPより引用)
Tシャツ支給(公式HPより引用)

個人的には、増田検事の倫理講義がかなり印象に残っています。これまで法律など一切興味が無かったのですが、増田検事の課題をやると法律が読み解けるようになったのです。法律に興味を持たせてくれてありがとうございます!

8月 福岡回

中間発表の準備を済ませてしながら、いざ博多へ。

公式レポート目線

#3 福岡回のワードクラウド(公式レポート)
#3 福岡回のワードクラウド(公式レポート)

福岡回では、nulabさんの見学、NICTサイバーセキュリティ研究井上室長のお話修了生LT、自然発想法などがありました。

中間発表が一大イベントであり、自分の活動内容をみんなに知ってもらうという有意義な時間となりました。

トレーニー目線

#3 福岡回のワードクラウド(Twitter)
#3 福岡回のワードクラウドTwitter

福岡といえばヌーラボと言っても過言ではないですよね。空港から向かった先が株式会社ヌーラボなんですから。

集合時間までの時間潰しで近くの喫茶店に行くと、緑のTシャツ着た集団がいたのは良い思い出。

みんなヌーラボさんの話を聞きながらいっぱいツイートしような💪 Backlogを支えるのがGo言語というのがグッときた。

全員が中間発表したあと、自然発想法でに!!! 海水Flood型DoS攻撃したり、サンドボックスにうずめたりして遊びました。

海で自然発想法(公式HPより引用)
海で自然発想法(公式HPより引用)

まとめ

これにて「SecHack365での1年間をワードクラウドで振り返る!(前編)」おしまいです。

2020年度のSecHack365参加者募集も始まったので、参加資格のある方はぜひ応募してみてください! sechack365.nict.go.jp

次回、展示〜最終発表。お楽しみに!

↓↓↓後編を投稿しました!↓↓↓

souring.hatenablog.com

*1:イルミパケットプログラミルクボーイ

*2:名詞と形容詞をのみを採用、「SecHack」や「コース」などの特徴的でない単語は除外

*3:かまぷさんによるTogetterまとめ

手打ちうどんの生地にプロジェクションマッピングしてみた

手打ちうどんの生地を伸ばすのって大変ですよね。

そこでもっと楽しく記事を伸ばすためのインタラクティブシステムを作ってみました!

youtu.be

(2年前の作品です。当時の動画をYouTuberっぽく編集したらめちゃくちゃYouTuberっぽくなりました!笑)

パケットが光るLANケーブルを作っています!(セキュリティ博物館プロジェクト)

[New!] Webサイトが完成しました↓↓↓ souring001.github.io

セキュリティ博物館を作りたい...。

その展示品の1つとして考えてみたのが

このパケットが光るLANケーブル(ILLUMI PACKET)です!

パケットが光るLANケーブル
パケットが光るLANケーブル

Twitterではものすごい反響がありました!


動画も作ったのでこちらもご覧ください!


パケットが光るLANケーブルは、通過するパケットの種類と向きに合わせて光ります。


例えば、


DNS(ドメイン名からIPアドレスを調べる時などに使われる)は緑色

異常検知されたパケットは赤色


に光ります。


パソコンを操作しながらパケットを観察できるので、「どういう操作」をした時に「どういうパケット」が発生するのかを体感することができるんです。

内科医評価システムJ-OSLERの症例登録の入力文字数を表示するツールを作った

J-OSLERの扱いに苦労している全国の内科研修医の方向けの記事です。

J-OSLERあるある

  • 症例登録フォームで今何文字入力してるかわからない
  • それなのに送信後に怒られる
  • Wordとかで文字数カウントしてから送信しないといけない

J-OSLERの入力フォーム送信後
J-OSLERの入力フォーム送信後

研修医の姉から、入力中に文字数がわからないかと相談されたので、表示するツールを作ってみました。

今後140回ほどこのフォームを入力しなければならないそうです...。

作ったもの

作ったツール適用後
作ったツール適用後

ボタンを1回押すだけで、フォームで入力しながら、その文字数を確認することができるようになります。

準備

ブックマークレットという機能を使います。

どのブラウザにもある機能なので、医療業界にありがちなInternet Explorerでも使うことができます。

ブックマークバーを表示する

利便性のため、ブラウザのブックマークを表示します。

ブックマークバーとは
ブックマークバーとは

表示方法は各ブラウザのサポートページをご覧ください。

ブックマークを作成

新しく以下のようなブックマークを登録します。

名前: J-OSLER 文字数カウンタ
URL: 以下の文字列(javascript:1E3)})();)

javascript:(function(){setInterval(function(){var a=document.querySelector("#shoreiHyokaIraiForm\\:shoreiNoGairyaku > div:nth-child(1) > iframe:nth-child(3)").contentDocument.documentElement.textContent.length;document.querySelector("table.work_table4:nth-child(10) > tbody:nth-child(2) > tr:nth-child(5) > td:nth-child(2) > span:nth-child(2)").innerHTML="[500\u6587\u5b57\u4ee5\u5185(\u6539\u884c\u542b\u3080)]<b> \u73fe\u5728: "+a+"\u6587\u5b57</b>";a=document.querySelector("#shoreiHyokaIraiForm\\:shoreiOKeikenShiteNoJikoSeisatsu > div:nth-child(1) > iframe:nth-child(3)").contentDocument.documentElement.textContent.length;document.querySelector("table.work_table4:nth-child(10) > tbody:nth-child(2) > tr:nth-child(6) > td:nth-child(2) > span:nth-child(2)").innerHTML="[300\u6587\u5b57\u4ee5\u5185(\u6539\u884c\u542b\u3080)]<b> \u73fe\u5728: "+a+"\u6587\u5b57</b>"},1E3)})();

ブックマーク登録
ブックマーク登録

これで準備完了です!

使い方

J-OSLERの症例登録ページで先ほど作成したブックマークを押すと、文字数が表示されるようになります。

使い方
使い方

注意

とりあえず「症例の概略」と「症例を経験しての自己省察」の2項目のみ対応しています。

改行が文字数に含まれていません

最後に

全国の内科研修医の方々のお役に立てれば嬉しいです。

何か他にも困っていることがあったらコメントください。

これがセキュリティ・ネクストキャンプ2019【参加記】

2019年の8月13日(火)から8月17日(土)にわたって開催されたセキュリティ・ネクストキャンプに参加してきました。 その様子を時系列に沿って書いていきます。

目次


ネクストキャンプとは

セキュリティ・キャンプ全国大会の次の教育機会を提供
遠慮も容赦もない超ハイレベルな講義の5日間!

セキュリティ・ネクストキャンプ2019 ホームより引用

セキュリティ・キャンプ全国大会の次のステップとして今年から始まったプログラムです。 年齢制限が25歳以下であり、全国大会行きたいけど行けない!という人でも、参加できます。

ネクストキャンプ2019参加者は6名、うち全国大会修了生は2人でした。

参加者Tシャツ2019(左)と2017(右)参加者Tシャツ
参加者Tシャツ2019(左)と2017(右)

自分は2年前に全国大会2017に修了した身としての参加となります。参加者Tシャツ2枚所持は、なかなかのレアです。

当時の様子:セキュリティ・キャンプ全国大会2017に行ってきました - ビーコンの創出


ネクストは、本当に容赦ない濃いぃ〜5日間でした...。


応募課題

応募課題は、以下の4項目について記述しました。

  1. 今までどのようなことをやってきたか
  2. 課題解決に関する問い
  3. 興味のある講義について
  4. アピールしたい点

2の課題解決に関する問いについてですが、「自身で何らかの疑問・課題・問題を設定し、それについて取り組み、その過程を示すことで、自身の技術力や課題に取り組むやりかたを説明してください。」 とのことでした。

設定する課題は何でも構わないとのことだったので、直近で一番頑張った出来事である「一週間後にみんなが集まれる場所(都内)であまりお金をかけずに本物の竹で流しそうめんを実施する」企画について、竹の伐採や下見・試作など全12工程について詳細に記述しました。

この課題、今振り返るととってもネクストキャンプらしさを感じます。詳細な手順など知らん、自分で定めて、自分で調べて、自分で解決しろ!というあたりが。


1日目

ネクストのみんなとのご対面。

ロバストプロトコルどうですか?」

キャンプ中はこの話題で持ちきりです。


会場のWi-Fiのパスワードの雰囲気で「あ、再びセキュリティ・キャンプに帰ってこれたんだ」と実感しました。


全国大会の皆さんがグループワークをしている初日、いきなり講義がスタート。


講義1 俺のTPM/TEEスキルで転生後も無敵です

耐タンパー性などの、厳密なアクセス制御のもとに鍵を保存する機能を持ったものをセキュアエレメントと言います。 身近なところだと、VISAのICチップやSuicaなどの決済系のデバイスにはセキュアエレメントが付いています。

TPM/TEEとはこのセキュアエレメントを実装するための仕様のことです。

この講義では、その実装のミスや脆弱性により引き起こる危険性について学びました。


宿題

ホームルーム・宿題時間という枠が毎日1~2時間ほど設けられていて、てっきり事前学習ができる時間だと思っていました。

ホームルームの時間には講師の方がやってきて、宿題というものが出されます。

  • 講義1「講義で出題した宿題を翌朝までに提出して」
  • 講義2「貸与PCでPythonの環境構築しておいて」
  • 講義3「VMから本番の環境にsshで接続できるか確認しておいて」
  • 講義4「明日の講義までに講義資料読んでおいて」
  • 講義6「本番で使うLANケーブル配布したよ、レギュレーション考えて、そのプロトコルも作って」

ボク「▂▅▇█▓▒ (’ω’) ▒▓█▇▅▂うわああああああ 」


VirtualBoxでホストOSからゲストOSにssh接続するところから詰まっていました。助けてくれたネクストのみんな、ありがとう。


2日目

講義2-1 攻撃検知エンジンの開発

XSS文字列と正常文字列を分類する機械学習モデルを作成するという講義です。

事前学習では、以下のようなレベル1のデータに対して、XSSか正常かを分類するモデルを作ってくるとのことでした。

レベル2以降は講義が始まってから順次解禁されていきます。

レベル 特徴
1 比較的単純な文字列 ></iframe><script>alert(1);</script> (XSS)
2 複雑なXSS文字列 "><script>eval("al"+"ert(1)");</script>(XSS)
3 教師なしデータ <strong><em>Doubleclick</em></strong> (ラベルなし)
4 XSSのような正常文字列 This alert is for the malicious script. (正常)

このような文字列を分類するには以下のような流れで行います。

入力文字列→前処理→ベクトル化→最後にモデルで学習して出力する


前半の講義では、レベル1で作ったモデルと結果・考察を発表し、講師の方からフィードバックをもらい、改善点を踏まえて次のレベル2のモデルを作成し発表をしました。

TF-IDFでのベクトル化は精度が高く、Word2Vecでのベクトル化はうまくいかないなど、6人全員がそれぞれ違ったアプローチを共有できたため、効率良く勉強になりました。

レベル3については、6人で1つクラスタリングで分類せよという宿題が出ました。


講義3-1 エミュレータによるCPU特殊命令の追加の実験

この講義では、SECCON CTF 2018 国際大会に出題された問題を、作問された坂井先生直々に解き方を学ぶことができます。

アーキテクチャの実行ファイルは、独自の特殊命令を利用しているため、普通に実行するとprogram stopped with signal 4 (Illegal instruction).のようになり実行できません。

これらの実行ファイルに対して、特殊命令が実装されていない手元のデバッガで静的解析したり、特殊命令が実装されたエミュレータ上で動的解析しながら、特殊命令を推測します。

アーキテクチャは全部で10種類あり、割り振られたアーキテクチャで特殊命令を推測して再実装するという宿題が出ました。


講義4-1/4-2 だまされないGPS

この講義では、GPSの仕組みを理解しながら、GPSをだませば何ができるか、だまされないためにどうすれば良いかを考えました。

改ざんされたGPSデータに対して手を動かしながら、異常な航法メッセージを特定したり、偽装された位置情報の推定をしていきます。 実際にスプーフィングを行うデモもありました。

GPSのセキュリティ脅威として以下が挙げられます。

  • ジャミング
  • ミーコニング
  • スプーフィング
  • 位置情報の偽装

これらの対策として、航法メッセージなどが正常かをチェックしたり、指向性アンテナを使用してGPS衛星が存在する方向から来る電波だけを受信するなどがあることを学びました。


宿題

今日出た新たな宿題です。

ロバストプロトコル未実装ボク「▂▅▇█▓▒ (’ω’) ▒▓█▇▅▂うわああああああ 」


3日目

講義2-2 攻撃検知エンジンの開発

昨日の食事の休み時間等を使って、我々が完成させた方法は、TF-IDFでベクトル化し、K-meansでクラスタリングするというものでした。

ラベルが分かっているレベル1, 2のデータで、ベクトル化、クラスタリングも様々な手法を試した結果この2つを採用したのですが、講師の方からダメ出しをされます。

講師「パラメータは調整しましたか?」

我々「い、いいえ」

講師「Grid Searchしないとダメでしょ」

データの分布とクラスタリング手法
データの分布とクラスタリング手法

どのクラスタリング手法を使うかは、まずベクトル化した特徴量をプロットして、大まかに判断できます。

その後それぞれのアルゴリズムでパラメータをGrid Searchをするものです。

クラスタ数がわからないときは、シルエット分析を使ってまだ分割できそうかを判断できます。


今までのフィードバックを踏まえてレベル4を作成して、発表しました。

また、講義として機械学習脆弱性について、Adversarial Examples、Model Extraction、Decision boundary manipulation、Neural trojanの4つ教わりました。中でもNeural trojanは、モデルにバックドアを仕込むという手法で、他人の作ったモデルが信頼できなくなるなあという印象を受けました。


講義5-1 暗号アルゴリズムFPGA実装

この講義では、AESの仕様書を読んで、FPGAで実装します。

事前学習でのAESのアルゴリズムc言語での実装、Verilogコードについて復習し、まだどこか高速化できないかを探しました。

Model Simでシミュレーションして、正しく動作しているかを確認します。

ModelSimでAESのVerilogコードをシミュレーション
ModelSimでAESのVerilogコードをシミュレーション

明日の講義ではこれを実機のFPGAで動作させます。


夕食をわずか30分で食べ終えたみんな「やった、1時間も宿題できんじゃん」


宿題

最終日に10分間成果発表をするということで、1人ずつ印象に残った講義について話すことにしました。

しかし、最終日の午前中まで講義がぎっしり詰まって、その課題に追われています。

一体いつ準備すればいいんだー!?


4日目

講義6-1 ロバストプロトコルを考案せよ

LANケーブルに物理的にノイズを入れた状態でも、ファイルをたくさん送信できるようなプロトコルを作りなさいという講義です。

最も多くファイルを転送できた人が優勝というコンペ形式でした。

この大会のレギュレーションもタイムスケジュールも全て自分たちで決めさせていただけるという、我々の自主性を発揮できる素晴らしい授業でした。


ノイズを注入するLANケーブルを作るところから事前学習で始まっていました。できたとは言っていない。

被膜を剥がすのですが、ダイソーのLANケーブルは極細なヨリ線のためちぎれやすくて無理でした。

ノイズを注入するためのLANケーブルを作る
ノイズを注入するためのLANケーブルを作る

最終日の大会に向けてレギュレーションとタイムスケジュールを話し合って決めました。


講義3-2 エミュレータによるCPU特殊命令の追加の実験

各自が担当したアーキテクチャについて宿題でどこまでわかったか、実演を交えながら発表しました。

自分はMN10300というアーキテクチャを担当しました。Panasonicの32ビットマイコンです。

MN10300をgdbでデバッグして特殊命令を推測する様子
MN10300をgdbデバッグして特殊命令を推測する様子

乱数生成アルゴリズムがXorshiftというところまでわかったのですが、アルゴリズムの理解が甘くて、どのタイプのXorshiftなのかまで特定できませんでした。

xorshiftは8種類(実質4種類)ある
Xorshiftは8種類(実質4種類)ある

その先のエミュレータへの特殊命令の実装まで行きたかったですね。その後の課題となります。

ARMのアーキテクチャを担当した方は、エミュレータへの実装で詰まっていましたが、坂井先生が解決してFlagが表示されるという素晴らしい展開に。お見事でした!


まとめ

以下、講師の坂井先生によるまとめです。心に響きました。


いろんなアーキテクチャを触るのはいいことで、共通点相違点が見つかる。

共通点がCPUの本質であり、相違点が実装の違い。 どのアーキにもレジスタがある(本質)けれど、引数や返り値をどう扱うかはそれぞれ違う。

これはCPUに限らずOSなど他のことでも言えること。 いろんな実装を見ることで見つかるものがある。


また、エミュレータとは実機の代替ではなく、実装技術を示すことができるもの。

イデアがありますだけだと予算は出ないので、話を通すためにサンプルを実装できるというのがエミュレータの使い方でもある。


講義5-2 暗号アルゴリズムFPGA実装

2回目の講義では、QuartusでVerilogコンパイルし、実機Cycolone IVで動作させました。

ノンブロッキング代入でスワップできることを使って、Shift Rowsを並列処理で実装することに成功しました。やったー!

FPGAが暗号化で39と出力している様子
FPGAが暗号化の結果を39と出力している様子


最後の晩餐にて

「熱っ!!!」

3人が鍋に手を当てて火傷していました。


宿題

残された宿題はあと1つ。

ロバストプロトコルを作成せよ。

今朝決まったレギュレーションに対応したプロトコルを完成させるだけだ。


5日目

みなさんはどれくらい睡眠できたのでしょうか。

明け方5時半にもSlackの通知がありました。


講義7 モブプログラミング

モブプログラミングとは、 1 台のパソコンを複数人で使うプログラミング手法です。1人がコードを打ち込む人(ドライバー)、残りが指示を出す人(ナビゲーター)となって、わいわいがやがやとプログラミングを行います。 ペアプログラミングの複数人バージョンとも言えるでしょう。

講義では、cyber-dojoを使ってテスト駆動開発をしました。言語はみんなが書けるPythonです。

この講義、自分が一番楽しかったと思う講義です。その理由は、

  • みんなプログラミングがめちゃくちゃできる
  • みんなのスマートな記述が非常に参考になる
  • 書き方がわからなくても、誰かがコードを口で言うのでそれをそのまま書けばいい
  • カンマの後にスペースを入れないと野次が飛ぶ
  • インデントがスペース2つだと野次が飛ぶ
  • swapを自分の名前っぽくタイポすると野次が飛ぶ

出会って5日目ということで、口出ししやすい環境だったというのが大きいです。

みんなプログラミング強すぎて、「100 doors」という問題がたったの15分で終わり、2問目「Reversi」に突入しました。

実際に書いたReversiのテストコード
実際に書いたReversiのテストコード

あとちょっとで完成でした...。

この講義だけ1時間30分しか無くて、あっという間に終わってしまいました。 もっとやりたかったな。


講義6-2 ロバストプロトコルを考案せよ

ラスボスです。

各自作成したプロトコルで、1分間にいくつのファイルを転送できるかの勝負です。 送信側、受信側のそれぞれにノイズを注入して2回計測します。

結果はなんと2位でした!!!

自分が作ったプロトコル

自分は損失を気にしないプロトコルを作成しました。 github.com

UDPで送れる最大データサイズは約64Kbytesなので、100Kbytesのファイルは2つのUDPパケットで送ることができます。 この最大データサイズレベルのUDPでも、レギュレーションの最小ノイズ間隔(100ms)でも1~2個送れることが昨夜の実験により明らかになったのです。

じゃあ、余計な再送処理とかせずに、誤ってもいいから、片っ端からファイル送りまくろうぜという結論になりました。

しかも、このプロトコルレスポンスが一切ありません(受信側の線を使わない)。 ノイズは片方にしか注入されないため、受信側にノイズがある時は、実質ノイズ無し状態で送信することが可能です。

UDPにファイルを2分割させて送信、損失は気にしない
UDPにファイルを2分割させて送信、損失は気にしない

誤りなく送信できたファイル数で競うというレギュレーションとノイズの間隔が地味に広いことを踏まえて出来上がりました。

果たしてプロトコルと言えるのか疑問が残るところですが、1回目(163/347)、2回目(792/799)という驚異的な記録となりました。幸い、2回目は競技時間外での計測となり、参考記録となったため、1位は免れました。こんなんじゃ1位受けとれないよ。

なお、1位のかわしんくんがこの講義についての詳細をブログにしています。損失率0%は素晴らしい!ぜひご覧ください。

kawasin73.hatenablog.com


ネクストキャンプ全ての講義を終えてのランチは清々しいものでした。


部屋のスイッチを切るとコンセントが切れるという現象に対して、PC、iPhoneの充電音(フォ〜ン♪)で気づいたなどの部屋あるあるで盛り上がってました。


ボク「風呂沸くの速いよね」

「え?湯船つかってないが」

「「シャワーだが」」

「風呂入ってる余裕ある?」

ボク「!?!?」


宿題

おおっと、まだ宿題がありました。

成果報告会のスライド作成と発表が残っています。


直前にスライドを完成させて...



無事発表できました。


感想

ネクストキャンプ全体の感想として、非常に疲れました

講義中だけでなく、大会期間中は常に焦っていていました。ほとんどの講義は日をまたいで2回行われ、次の回までに宿題を課せられていたからです。

食事もネクストのみんなは30分で済ませ、残りの1時間くらい宿題事前学習に費やしていました。 食事中の会話も、どうやって実装すればいいかについて話し合っていました。

部屋に戻ったら1時過ぎまで宿題、翌朝6時から宿題をしていました。ここまで追い詰められるのは初めてで、何度も心が折れそうになりました。

しかし、ネクストのみんなはとっても勉強熱心で、「自分もみんなみたいになりたい」という一心で必死にしがみついて行きました。


そんなネクストキャンプを乗り越えた今の自分は、本当に成長したと胸を張って言うことができます。

現段階で得たことは大きく3つあります。


1つ目は、あらゆる分野にも抵抗なく取り組めるようになったことです。

自分はコンピュータビジョンを専攻しており、今回の講義の内容は専門外の領域でした。 未知の領域の課題を自分で解決することが求められていました。

全国大会とは違い、手取り足取りやり方を教えてはくれません。 それが大変な反面、一番の勉強になっています。

今後自分が取り組んでいくであろう課題は、未知の分野でしょう。 それに対応していく力が身についたことが得られたこととして大きいです。


2つ目は、ネクストのみんなと共に課題に取り組み、その取り組み方を学べたことです。

講義6「ロバストプロトコルを考案せよ」では、具体的にこうやって作るなどの指示はありません。 プロトコルなど作ったことないし、どう作ったらいいかわからない状態でした。

ネクストのみんなはこの課題に対し、TCP/IPの本を読んだり、QUICの論文を読むなどしていました。 そうやって取り組むべきだったのかと反省しました。

また、僕が仮想環境にsshするやり方を聞いた時に、その多くの手順を一瞬で教えてくれました。 事前課題でやったことをノートアプリ等できちんとまとめていて、同じことがあったらすぐに解決できるようにしてあるそうです。

こうした取り組み方を知ることが非常に参考になりました。


3つ目は、ネクストのみんなに出会えたことです。

ネクストのみんなは非常に優秀であり、話を聞けばものの本質まできちんと理解しているんだなあと感じます。 同じ課題を与えられ、同じ問題を乗り越えていく、その過程をみんなと共有できたのが非常に楽しく刺激的でした。 仲間たちと過ごした5日間はあっという間で、本当に貴重な時間です。 そんな仲間と出会えたことが一番の大きなことだと感じています。

今後もネクストのみんなと共に大会に参加するなどして、仲良くしていきたいです。


みんなのブログ

すでに他のネクストキャンプ参加者の人たちがブログを投稿しています。

かわしんくんは講義6「ロバストプロトコルを考案せよ」で栄冠を手にしました。この講義および彼が作成したRobustpについて詳しく書かれています。 kawasin73.hatenablog.com

さわだくんはモブプログラミングでswapをsawapとタイポしていました。各講義について深くまでまとまっています。 takuzoo3868.hatenablog.com


頂戴したもの

頂戴したもの
ネクストキャンプ2019で頂戴したもの

セキュリティ・ネクストキャンプは、講師・運営の皆様、お国の税金、協賛企業などの数多のご支援によって成り立っています。 貴重な経験をさせてくださった皆様にこの場で感謝を申し上げます。


最後に

この記事をご覧になって参加資格がある人はぜひセキュリティ・ネクストキャンプに参加して欲しいです。 本当に貴重な経験になることを保証します。

30日でできる!OS自作入門でサクサクOS自作その1(0〜7日目)

30日でできる!OS自作入門(0〜7日目)

f:id:souring:20190320155854j:plain
7日目.完成の頃には蛇腹みたいになるかな

川合秀実さんの著書『30日でできる!OS自作入門』を今さらですが始めてみました。

今さらと言うのは、セキュリティ・キャンプの参加が決定した頃に「この本の著者いるよ!サイン貰えるよ!」と友達に勧められて記念に購入したのがこの本との出会いでした。

そうしたら本当にサインを貰えて、記念写真まで撮ってくださいました!

あれからもうすぐ2年になります。 自分の良くない癖でですね、本を買っただけで満足してしまうところが多々あります。

そのまま本棚に眠らせていては駄目でしょ!ということで、春休みを機に今さらですが始めることにしました。

現状

7日目まで作り終えた今、現状はこのようになっています。

f:id:souring:20190320154649g:plain
OS自作の様子(スクリーンショットのアニメーション)

環境はMacでやっています。 本書はWindows向けなのですが、偉大なる先人達がMacLinuxでも開発できるように環境を整えてくださっています。

僕はhikaliumさんのz_tools_osxを使わせてもらっています。ありがたい。Makefileを毎回書き直すだけで済んでいます。

参考: Mac OSX におけるはりぼてOSの開発環境を(再)整備した話

できたこと

0〜7日目の出来事を振り返るとこんな感じです

  • バイナリエディタで地道にイメージディスクを作成
  • アセンブリ言語でイメージディスクを作成
  • C言語でイメージディスクを作成
  • 白い画面表示
  • 四角形を描画
  • マウスカーソルを描画(動かない)←!?!?
  • 割り込みハンドラ作成
  • キーコードの取得

困ったりしたこと

  • フロッピーディスクとそれが使えるPCが無いので「フロッピーディスクからのhelloOSの起動」ができなかった
    • SDカードでできたりしないかなあ...
  • 公式のサポートページでMacのサポートはこちら!のページのリンクが切れてるため、路頭に迷った
    • naskではなくNASMでアセンブルしていたけれど、hikaliumさんのサイトに救われる
  • なんでこのMakefileだめなんだ!?!?\¥ならいけるぞ何故だ!?ってなった原因はShift-JIS
    • 本書のコード、Shift-JISで書かれています

得たこと

感想

勉強になる

この本すごく勉強になります。 なぜかというと、大学の情報工学科で学べなかった内容ばかりだからです。

例えば、ソースファイル分割やMakefileの作成はしたことがありませんでした。 すでに分割後のソースコードに書き加えたり、Makefileが用意されていたりすることはあったのですが、 自分で作り出すことは無かったのです。

コードが複雑になったら分割、Makefileで同じものを何度も書くのが面倒になったら一般規則を使うなど、 おお、こうやって作っていくものなのか!と手に取るようにわかります。

復習にもなる

また、大学で学んだけれど頭に入っていなかったことの復習になりました。

アセンブリ言語の授業を受けていた頃はレジスタなどというものの気持ちなどわからず、 どうしてAXで番地指定できないんだよ!とキレてました。

本書では、番地の指定に使えるレジスタは限られている(BX,BP,SI,DI)ことや、C言語と連携する場合はEAX, ECX, EDXのみ自由に使ってよくて他は大事な値があって変更しちゃいけない などの説明を、作りながら問題に直面した時に教えてくれるのですごく納得がいきます。

楽しい

そして何より、楽しく学べると思います。

作ってる最中に色々と改造したくなります。 こういうの作ろうかなというアイデアが浮かんできます。

初期のMacintosh OSを再現したいなーと思ったり。 CPUを自作したくなるという衝動に駆られました。

早く完成させたい!

次回予告

マウスがついに動き出す......