セキュリティ・キャンプ キャンパー育成枠の活動録

セキュリティ・キャンプ2018の選考に選ばれ、参加してきた後の活動を紹介 育成枠というのは他キャンパーとの実力を相対的に見て低いと判断して名乗っています。

キャンパー育成枠のセキュリティ・キャンプ全国大会2018 応募文晒し

はじめに

最初に6月頃から応募分晒しますと言いつつキャンプ終了後に晒すことになったことをお詫びします。すみませんでした。

あとがき

応募文の前にあとがきです。大事なことは先に書いておきます。
今回、セキュリティ・キャンプ全国大会の選考に通過し、参加することが出来ましたが、私がどんな応募文を書いたのかを晒しておきます。
まず最初に説明しておきますが、応募文の回答に要した文字数は英字を含めて41251文字でした。キャンプに参加したいという熱意を込めて、少しでも多く文字を書こうとした結果こうなりましたww
応募文の製作期間は某社の就職面接が終わり次第開始し、念のため応募締め切り2日前に投稿した間の2,3週間です。1日1000~2000字ペースでの作成を目標として作りました。特に課題Bの期待するところの部分は業界ごとに考え始めたらきりがなく、日ごとに違う分野のIoTなどのことを考えていました。ここが重要なのですが、これだけの熱意を伝えて落選した場合は悔いはないという想いで最後まで作成しました。なのでこれを読んだキャンパー志望に言いたいことは、私は熱意を表現できるようにたくさん文章を書いたり、興味のあることを調べたということです。ただし、人によって熱意の伝え方は様々です。各々が得意な表現で伝えましょう。
はじめに伝えたいことは以上です。

まともに見ようとすると数時間はかかると思うので、斜め読みで構いません。コードを書いてる部分は埋め込み形式にしておきます。それと各問題に対して回答文の要約とその問題の感想「問題文・要約と感想・回答文」の順に記載しておくのでそちらだけでも全部読んでいただければと思います。頑張って編集したので絶対読んでください!!!!

フィジカルトラック応募課題

スキルを問う課題Aとあなたの興味や意気込みを問う課題Bを用意しました.
それぞれ2問以上選択して答えてください.ただし回答はテキストのみとします.図版や動画で表現したい場合はURLを記してください.また回答に際し、あなたの著作物、ソースコード、動画等があればURLを示してください.

課題A.スキルを問う問題

A1.あなたのプログラミングのスキルを推し量るエピソードがあれば書いてください.

ここは単純にプログラミングがどれくらい出来るか問われている部分でしたので、自分の書ける言語とその言語で何をしたのかについて書きました。※制作物の説明は動作を細かーーく書いているので真剣に読もうとするとめんどくさいと思います。

追記:勉強会カレンダーについては作品をアップロードをしました。
genkai-io.hatenablog.jp


1.私は、サーティファイ主催C言語プログラミング認定試験1級(URL:https://www.sikaku.gr.jp/js/cp/exam/content/)を取得しています。この検定は実技の検定でアスレチッククラブ会員管理プログラムというテーマプログラムの機能を追加・更新する問題を2問解答します。私は関数strcmp を活用し、入力された値が数値で入力されているか?特定の文字で入力されているか?をチェックしたり、デバッグ用にprintf(“line:%d [%d]\n”,__LINE__,num)を使用してその行数で入力された値がどう変化しているかを確認したりしてプログラムを理解しました。本試験ではこれまで過去問題に出ていなかったファイル出力についての問題が出ましたが、これまで授業で学んできたfprintfなどの知識をフル活用することで合格しました。

2.また、C言語の成果物としてはステップカウンタなどを作成しました。複数回行う行表示処理をメソッド化し、できる限る最低行数で各処理を描いて、最低限の行数になるように工夫を凝らして作成しました。コメント行や空白行なども計算し実行プログラム・空白行・コメント行の行数と割合を表示できるプログラムカウンタにしました。また、実際のコンピュータがIPアドレスサブネットマスクからネットワークアドレス・ホストアドレス・ブロードキャストアドレス・接続可能なノードの台数を計算する仕組みを理解するため、論理演算を多用したIPアドレス計算システムを作りました。(以上の2つのプログラムは、A6の解答に記述している機能の一部として実装しています。)

3.Java言語はサーティファイ主催Java言語プログラミング認定試験1級(URL: https://www.sikaku.gr.jp/js/jv/exam/content/)を取得しています。前述のC言語プログラミング認定試験1級と同様に実技の検定で、人材派遣管理プログラムというテーマプログラムの機能を追加・更新する問題を2問解答します。こちらは、公式の過去問題がなかったので、仕様書のクラス図や状態遷移図などの仕様をもとに、ソース解析を行いました。ソース解析はeclipseデバッグ機能を使って、渡される変数の値を理解することで捗りました。また、公式のサンプル問題のみを解答して勉強しました。特に、多くのクラスを理解することは難しく、HashMapはこの検定ではじめて見たので、苦労しました。

4.検定以外では、オブジェクト指向を理解するために、自動販売機システムを作成しました。例えば、Drinkクラスを親クラスとし、温かい飲み物のHotDrinkクラスと冷たい飲み物のColdDrinkクラスという子クラスを作り、さらに飲む振る舞いをすると「目が覚めてスッキリした。」というメッセージを返すCoffeeクラスや同じく飲む振る舞いをすると「シュワシュワしておいしい!」というメッセージを返すSodaクラスという孫クラスを作りました。システムはターミナル(コマンドプロント)との対話形式で実行します。機能としては、入金、購入、おつり返却、システム終了があります。入金機能はキーボードから入力を促し、入力した金額を入金します。文字が入力された場合やマイナスの値が入力された場合は再入力を促します。購入機能でははじめに自動販売機に入っている飲み物を表示します。続いて、購入したい飲み物についている番号を入力し、購入が成功すると、入金金額が減り、その飲み物に応じたリアクションの文章を表示します。存在しない商品の番号を入力したり、文字を入力したり、入金している額が商品の値段に足りない場合は、購入に失敗します。おつり返却機能は、現在、入金されている額を返却するメッセージを表示し、入金額を0にします。システム終了を押すと、システムを終了します。拡張性を持たせるために、飲み物関係のクラスは新たに増やしやすい親子クラス相関にしました。同じく、オブジェクト指向を理解するため、ITunesのミュージックプレイヤーを参考としたミュージックプレイヤーシステムを作りました。(※実際に音楽は再生されません。)オブジェクト指向を意識した開発をするため、CDクラスを格納するMusic playerクラスを作成しました。さらに、CDクラスには複数の曲が格納できるように作成し、その中に複数のMusicクラスを孫クラスとして持つようにしました。Musicクラスには曲名・作曲者・作詞者・アーティスト名を格納しました。ミュージックプレイヤーには再生・ランダム再生・アルバム・曲追加といった機能を実装し、実際のミュージックプレイヤーと同じ動作をするように作りました。

5.また、Javaサーブレットを使い、ログイン機能を搭載したコメントができる掲示板のWebアプリケーションも作りました。ログイン画面や掲示板にはSQLインジェクション対策にプレースホルダを用意し、掲示板へのクロスサイトスクリプティング対策も施しました。使用したデータベースはSQLiteです。

6.C#では、Windowsフォームアプリケーションを中心とした制作をしました。スタートボタンを押すと4×4マスのボタンにランダムに数字を振り分け、1から16まで押すのに何秒かかったかを競う数字ゲーム。こちらはかかった秒数とこれまでの上位の記録と照合して、ランクインしている場合は、更新し、ランキング画面を表示するランキング機能も付けました。ファイルの新規作成や保存について理解するために、実際のメモ帳と同じ上書き保存や名前をつけて保存などの機能を持ったメモ帳。データベースを利用して就職活動状況を管理する就活管理システム。これは、企業名・業種・職種・設立年・資本金・直近純利益・従業員数・代表者名・理念・社風・業務内容・メモ・志望動機を必要情報としてテーブルを作りました。機能は企業の登録・更新・削除があります。一覧表示して、絞り込み検索をする機能も搭載しました。自由に制限時間を設定して、3分前、1分前、終了時にベルが鳴り、タイマーの文字の色が変わっていくLTタイマーシステムも作りました。先ほどJavaで作った自動販売機システムをC#で開発することで、ターミナルでの文字で表示する形式から、Windowsフォームアプリケーションにすることで、画像やボタンを取り入れることにより、リアルな自動販売機のレイアウトにした自動販売機システム(C#版)を作りました。

7.特に技量と時間を使ったのが勉強会カレンダーです。これは要件定義から行い、設計・テストも丁寧に行い開発しました。このシステムは、メイン画面でカレンダー形式の画面を表示し、例えば、2018年8月14日にセキュリティ・キャンプ全国大会が登録されているとすると、その日付に該当するラベルの下のテキストボックスに「セキュリティ・キャンプ全国大会」と文字が表示されます。テキストボックスをクリックすると該当する日付の勉強会の情報が(この場合、セキュリティ・キャンプ全国大会の情報が)表示されます。表示する情報は勉強会名・主催者名・開催地・URL・使用プログラム・発表資料・メモ となっています。この使用プログラムと発表資料についてですが、実際のIT勉強会ではLTを含め、複数の発表が行われることが多々あります。そのときのパワーポイント資料をまとめるためにこの「発表資料」の欄を活用します。また、「使用プログラム」の欄についてですが、セキュリティ系のハンズオンでは、特に多くのアプリケーションを使います。例えば、Game Securityのハンズオンであれば、Android StudioやBurp Suite Scannerを併用したりします。仮想環境系であれば、oraclevm virtualboxやZenmap、PuTTYを併用します。このように、そのときに使用したアプリケーションをまとめるためにこの欄があります。また、勉強会中にメモの欄を使用することで、メモ帳を開かず直接ここにメモすることができます。表示している勉強会の画面は内容を編集して更新が可能です。必須入力項目に関しては入力していないと注意画面が出ます。データが壊れないようにSQLインジェクション対策も施しています。勉強会の削除機能もあります。 

 また、カレンダーの画面で勉強会が登録されていないときに2018年8月14日に該当するラベルの下のテキストボックスをクリックすると、クリックした日に行われる勉強会(例:セキュリティキャンプ全国大会)が登録可能です。こちらも
SQLインジェクション対策を行っています。 多くの勉強会を管理するのが大変なように、参加者を管理することも大変なので、参加者登録機能もつけています。メイン画面(カレンダー画面)から参加者登録ボタンを押すことで、参加者を登録します。参加者の持つ情報として、参加者名・所属・会った勉強会・TwitterFacebookの要素があります。会った勉強会・TwitterFacebookは何処であったどんな人か覚えやすくするために追加しています。また、会った勉強会のテキストボックスをクリックすると、その勉強会を表示することができます。参加者データと勉強会データを一覧表示する機能も用意しています。参加者の情報の閲覧はこの参加者一覧からのみ表示できる仕様にしています。また、一覧から絞込みをするために検索機能もあります。ここでもSQLインジェクション対策は施してあります。使用したデータベースがAccessデータベースだったので、実用的でなかった点やテーブルを複雑にしてしまった点が改善要素でした。

8.この勉強会カレンダーをWebアプリケーション化するために、ASP.NETで開発中です。特に、Webならではの機能を駆使できるように取り組んでいます。勉強会の情報を表示する際に、URLの部分をクリックするとそのサイトへジャンプするようにアンカータグで囲ってみる。同じく、TwitterFacebookに関しても、リンクするようにする。開催地に関しては、Googleマップにジャンプするようにする。各機能をWebサイトらしくメニューバーとして表示するなど、様々な機能追加を考えて開発中です。また、Windowsフォームアプリケーションの時はAccessデータベースを使っていましたが、SQLiteを使うことを検討して開発しています。Windowsフォームと違い、見た目の自由度もwebアプリケーションはあるのでCSSフレームワークを実装してデザイン面を作ろうとしています。目標としては、Webサイトのセキュリティ対策を十分に施し、ドメイン名取得、証明書発行、C#と親和性の高いクラウドのAzureで仮想サーバーの構築を行い、一般公開がしたいです。また、広告の掲載あるいは企業とのスポンサー契約をすることで、サイトの恒久的な運営をしてみたいと思っています。このwebアプリケーションを普段、勉強会に参加しているエンジニアの方々に利用してもらい、IT勉強会界隈の活動の活性化につなげたいです。

9.Pythonは昨年から独学で学び始め、Java言語とC言語で培ったプログラミング能力を使うことで、言語を理解しました。作ったものとしては、後述のRaspberry Piで制御する信号機などがあります。セキュリティ系の勉強会やプログラミング系の勉強会でもよくPythonは使うので、その時にも使い、勉強しています。

A2.linuxunix)に関するあなたのスキルを推し量るエピソードがあれば書いてください.

ここは今まで使ったことのあるLinuxあれこれについて書きました。内容はほぼ無いので特に読まなくても大丈夫です。

VMwareやoracleVM virtualboxを使いました。また、OSとしては、Kali LinuxUbuntuLinux mintCentOSを使ったことがあります。普段はゴージャスLinuxを使用しつつ、ターミナルを開いて操作しています。基本的なディレクトリの移動やカレントディレクトリ内のファイルを見るlsコマンドやIPアドレスを確認するためのifconfigなどの各種コマンドを普段から使っています。また、Linuxの仮想環境でのプログラミングにシンプルLinuxではVimを使っています。現在は、CentOSを使い、LPIC受験に向けて勉強中です。CTFの問題でリバースエンジニアリング系の問題を解答するため、readelfコマンドやobjdmpコマンド・stringsコマンドなどを使用して逆アセンブリ化しました。GDB PEDAも同じリバースエンジニアリングツールとして、活用しています。また、CTFでは、直接サイトからダウンロードすることが多いのでcygwinを代用しています。

A3.電子回路、ハードウエア、HDL等のあなたのスキルを推し量るエピソードがあれば書いてください.

ここは今までにLチカしてみた以外、書けるものが無かったのでこの程度しか書けませんでした。電子回路は私の知らない世界でした(ˇωˇ)スヤァ…

Raspberry PiのGPIOピンを使って電力を供給し、各LEDを点灯・消灯を制御する信号機を作りました。(A5に記述したサンプルプログラムが実際に使用したプログラムです。)

A4.CPUにおける割り込みの果たす役割は何ですか.

ここは調べて出るような一般論しか書けませんでしたね。今なら「車で言えばブレーキなどの重要な命令を優先して処理する」っていうことも書けますけど情報処理試験で勉強した知見じゃこんなものでした。

CPUで処理する各種命令に優先度をつけ、実行するため。資源を有効利用するため。(ラウンドロビン方式などの処理で) 処理に時間のかかる命令の実行中に他の命令を実行できるようにするため。マルチタスクを実現するため。消費電力を抑えるため。

A5.Lチカのサンプルプログラムを示し、実際に発光ダイオードが点滅するまでの経緯を詳しく書いてください.

ぶっちゃけ「Lチカのためのプログラムを書いて、なんで光るか?って聞かれても電力の供給・遮断を繰り返してるだけじゃね?」って思いながらそれを細かく説明するような形で回答しました。ここは送る直前まで問題の意図を忖度しようと考えてたんですけど最後まで忖度しきれませんでした。

以下サンプルプログラム

#!/usr/bin/env python 

import RPi.GPIO as GPIO 

import time 

GPIO.setmode(GPIO.BOARD) 

GPIO.setup(8, GPIO.OUT) // 赤信号用 

GPIO.setup(10, GPIO.OUT) // 黄色信号用 

GPIO.setup(11, GPIO.OUT) // 青信号用 

while True: 

    GPIO.output(8, True) // 赤色点灯 

    time.sleep(30)// 30秒間待機 

    GPIO.output(8, False) // 赤色消灯 

    GPIO.output(10, True)  // 黄色点灯 

    time.sleep(2)// 2秒間待機 

    GPIO.output(10, False) // 黄色消灯 

    GPIO.output(11, True) // 青色点灯 

    time.sleep(30)// 30秒間待機 

    GPIO.output(11, False) // 青色消灯 

    GPIO.output(10, True) // 黄色点灯 

    time.sleep(2)// 2秒間待機 

    GPIO.output(10, False) // 黄色消灯(以下、赤色点灯し、無限ループ) 

//EOF 

上記のようなRaspberry Pi を使って、Lチカでできる信号機を作成しました。

使用言語はPythonです。

仕組みとしては、

1.まずRaspberry Pi (ハードウェア)とLEDをブレッドボード・ジャンプワイヤー、抵抗器を使い電子回路を作成し、GPIOピンで繋げます。

2.Raspberry Pi にGPIOを制御するライブラリをインストールします。

3.GPIO.setmodeとGPIO.setupで出力するピンを設定します。

4.GPIO14から電力を供給し、赤色のLEDを点灯。30秒間待機させる。

5.以下、6~9はwhile文でループ処理です。

6.電力の供給を遮断することで赤色を消灯し、GPIO15から電力を供給し黄色のLEDを点灯、2秒間待機する。

7.電力の供給を遮断することで黄色を消灯し、GPIO17から電力を供給し青色のLEDを点灯、30秒間待機する。

8.電力の供給を遮断することで青色を消灯し、GPIO15から電力を供給し黄色のLEDを点灯、2秒間待機する。

9.電力の供給を遮断することで黄色を消灯し、GPIO14から電力を供給し赤色のLEDを点灯、30秒間待機する。

以上のように実際の信号機に近い仕組みでLEDを点滅させ、疑似信号機を実装しました。尚、電力供給はONとOFFしかないので、時間制御をし、電力の供給・遮断を繰り返すことで、Lチカの点滅は実装可能です。

A6.Cの関数longjmp setjmpを用いてプログラムを書いてください.

文字通りの問題です。longjmp関数はsetjmp関数のある所に文字通りジャンプして、0以外の値を渡します。この問題は実際に組み込み機器でC言語を使って開発している場合、危険な状態に遷移しそうな時に停止するためのエラー処理のようなものだと判断しました。そのため、2つの関数をエラー処理するために使用しました。後は今までC言語で作ったものをアピールするために機能を実装しました。
#include<stdio.h> 
#include<ctype.h> 
#include <string.h> 
#include <setjmp.h> 
#include <stdlib.h> 
#include <math.h> 
#define MAX 100 

int lin =0,spt =0,dost =0,comcnt =0; /* lin:全行カウント用,spt:空白行カウント用,dost:実行行カウント用,comcnt:コメント行カウント用 */ 

jmp_buf env; 

void sosu(void); 
void ipAddress(void); 
void StepCount(void); 

void Printspt(char str[]); 
void Printcom(char str[]); 
void Printstep(char str[]); 

void main(void){ 

    char work[128]; 

    int i,loop = 1; 

 

    while(loop == 1){ 

        i = setjmp(env); /* 各機能のエラー処理時または「終了」メニューの選択時にlongjmpで移動。 */ 

        if( i == 0 ){ 

            printf( "\n" ); 
            printf( "\n *******************************************" ); 
            printf( "\n  C言語で作ったいろいろな機能一覧" ); 
            printf( "\n *******************************************" ); 
            printf( "\n 機能を選択してください" ); 
            printf( "\n 1:素数計算機能" ); 
            printf( "\n 2:IPアドレスとサブネットマスクの計算機能" ); 
            printf( "\n 3:ステップカウンタ機能" ); 
            printf( "\n E:終了" ); 
            printf( "\n ? " ); 

            /* 処理区分入力 */ 
            work[ 0 ] = '\0'; 
            scanf( "%s", work ); 

            /* 入力桁数チェック -> 1以外 ? */ 

            if( strlen( work ) != 1 ) { 

                printf( "\n 入力ミスです" ); 
                continue; 
            }
         

            switch( work[ 0 ] ) { 

                case '1':       /* 素数計算 */ 
                    sosu( ); 
                    break; 

                case '2':       /* IPアドレスとサブネットマスクアドレスの計算 */ 
                    ipAddress( ); 
                    break; 

                case '3':       /* ステップカウンタ */ 
                    StepCount( ); 
                    break; 

                case 'e':       /* 終了 */ 
                case 'E': 
                    longjmp(env, 2); 
                    break; 

                default: 
                    printf( "\n 入力ミスです" ); 
                    break; 
            } 
        }else{ 
            printf("\nプログラムを終了します。"); 
            loop = 0; 
        } 
    } 
} 

/**********************/ 

/* 素数計算システム  */ 

/**********************/ 

void sosu(void) { 

    int i,j,n,isSosu[MAX + 1]; 
    char work[ 128 ]; 

    printf("素数計算機能\n"); 
    printf("数字を入力してください。(0~%d):",MAX); 

    work[ 0 ] = '\0'; 
    scanf("%s",&work); 

    /* 入力値チェック */ 

    if(strspn( work, "1234567890" ) < strlen( work )){ /* 数字以外が入力されているか? */ 

        printf("\n数字以外の入力を検知しました。"); 
        longjmp(env, 1); 
    } 

    n = atoi(work); 

    if(n > MAX || 0 > n){ 

    printf("\n%dより大きい数値の入力を検知しました。",MAX); 
    longjmp(env, 1); 

    } 

    printf("---%dまでの素数---\n",n); 

    for(i = 0; i < n;i++) 
        isSosu[i] = 1; /* 初期化 */ 

    for(i = 2;i < n;i++) { 

        if(isSosu[i] == 1){ /* i番目の値がこれまで素数じゃない場合 */ 

            for(j = 2; j < n / i + 1;j++){ 
                isSosu[ j * i ] = 0; 
            } 

        printf("%d\n",i); 
        } 
    } 
    printf("-END-"); 
    printf("\n"); 
    printf("\nメニュー画面に戻ります。"); 
    printf("\n"); 
} 

/*******************************************************/ 

/* IPアドレスとサブネットマスクアドレスの計算システム */ 

/*******************************************************/ 

void ipAddress(void) 
{ 
    unsigned int i,j,n,ip,sb,net,host,broad,mask=255; 
    unsigned int low = 0, high = 255; 
    unsigned int data10[4]; /* 10進数格納 */ 
    char work[ 128 ]; // 入力用 

    /*初期値入力*/ 
    ip = 0;sb =0; 

    printf("IPアドレス計算機能\n"); 
    /* IPアドレス入力 */ 
    for(i = 0; i < 3; i++) { 
        printf("IPアドレス0~255を入力(%d回目)>",i+1); 
        scanf("%s",&work); 

        if(strspn( work, "1234567890" ) < strlen( work )){ /* 数字以外が入力されているか? */ 
            printf("\n数字以外の入力を検知しました。"); 
            longjmp(env, 1); 
        } 

        n = atoi(work); 

        if(n < low || n > high){ /* 0~255以内が入力されているか? */ 
            printf("\n範囲外の入力を検知しました。"); 
            longjmp(env, 1); 
        } 
        printf("\n"); 

        ip = ip + n;/* 入力値をプラス */ 
        ip = ip << 8;/* 8ビット左にシフト */ 
    } 

    printf("IPアドレス0~255を入力(%d回目)>",i+1); /* 4回目の入力 */ 
    scanf("%s",&work); 

    if(strspn( work, "1234567890" ) < strlen( work )){ /* 数字以外が入力されているか? */ 
        printf("\n数字以外の入力を検知しました。"); 
        longjmp(env, 1); 
    } 

    n = atoi(work); 

    if(n < low || n > high){ /* 0~255以内が入力されているか? */ 
        printf("\n範囲外の入力を検知しました。"); 
        longjmp(env, 1); 
    } 

    ip = ip + n; 
    printf("\n"); 

 
    /* サブネットマスクアドレス入力 ※数値チェックはなし */ 
    for(i = 0; i < 3; i++){ 
        printf("サブネットマスクアドレス0~255を入力(%d回目)>",i+1); 
        scanf("%s",&work); 

       if(strspn( work, "1234567890" ) < strlen( work )){ /* 数字以外が入力されているか? */ 
            printf("\n数字以外の入力を検知しました。"); 
            longjmp(env, 1); 
        } 

        n = atoi(work); 

        if(n < low || n > high){ /* 0~255以内が入力されているか? */ 
            printf("\n範囲外の入力を検知しました。"); 
            longjmp(env, 1); 
        } 
        printf("\n"); 
        sb = sb + n ; 
        sb = sb << 8; 
    } 

    printf("サブネットマスクアドレス0~255を入力(%d回目)>",i+1); /* 4回目の入力 */ 

    scanf("%s",&work); 

    if(strspn( work, "1234567890" ) < strlen( work )){ /* 数字以外が入力されているか? */ 
        printf("\n数字以外の入力を検知しました。"); 
        longjmp(env, 1); 
    } 

    n = atoi(work); 

    if(n < low || n > high){ /* 0~255以内が入力されているか? */ 
        printf("\n範囲外の入力を検知しました。"); 
        longjmp(env, 1); 
    } 

    printf("\n"); 
    sb = sb + n ; 
    net = ip & sb; /* IPアドレスとサブネットマスクアドレスの論理積 */ 
    printf("\nネットワークアドレスは>"); 

    for(i =0; i < 3; i++) { 
        /* 計算したネットワークアドレスを8ビットずつ格納 */ 
        data10[i] =net & mask;  
        net = net >> 8; 
    } 

    data10[i] = net; 

    /* 格納したネットワークアドレスを表示 */ 

    for(i = 3 ;i>0 ;i--){ 
        printf("%u.",data10[i]);  
    } 

    printf("%u\n",data10[i]); 
    printf("\nホストアドレスは>"); 

    i = ~ sb ; /* サブネットマスクアドレスを反転 */ 
    host = ip & i ; /* IPアドレスとサブネットマスクアドレスを反転したものの論理積 */ 

    for(i =0;i<3;i++) { 
    /* 計算したホストアドレスを8ビットずつ格納 */ 
        data10[i]=host & mask; 
        host = host >> 8; 
    } 

    data10[i] = host; 

    /* 格納したホストアドレスを表示 */ 
    for(i = 3 ;i>0 ;i--){ 
        printf("%u.",data10[i]); 
    } 

    printf("%u\n",data10[i]);  

    /* ブロードキャストアドレス計算 */ 

    printf("\nブロードキャストアドレスは>"); 

    i = ~ sb; /* サブネットマスク反転 */ 
    broad = ip | i; /* IPアドレスとサブネットマスクを反転したものの論理和*/ 

    for(i =0;i<3;i++) { 
        /* 計算したブロードキャストアドレスを8ビットずつ格納 */ 
        data10[i]=broad & mask; 
        broad = broad >> 8; 
    } 

    data10[i] = broad; 

    /* 格納したブロードキャストアドレスを表示 */ 

    for(i = 3 ;i>0 ;i--){ 
        printf("%u.",data10[i]); 
    } 

    printf("%u\n",data10[i]); 

    /* 接続台数 */ 

    i = ~ sb + 1 ; /* サブネットマスクを反転して1足す(2の補数反転) */ 
    i = i - 2; /* ネットワークアドレスとブロードキャストアドレスの分は減らすので、-2する */ 

    printf("\nネットワークに収容できる最大端末数は%d台です",i); 
    printf("\n"); 
    printf("\nメニュー画面に戻ります。"); 
    printf("\n"); 
} 

/****************************/ 

/* ステップカウンタシステム */ 

/****************************/ 

void StepCount(void){ 

    char str[255] ,com[255],work[255]; 
    int i,flg; /* flgはコメント行の判定に使用: 0 = false, 1 = true */ 
    FILE *fp; 

    printf("\nステップカウンタ機能"); 
    printf("\n実行方法:ファイル名を入力(※拡張子含む)>>"); 

    scanf("%s", work); 

    if((fp = fopen(work,"r")) ==NULL){ /* ファイルの展開に失敗時、メイン画面に戻る */ 

        printf("%sのオープンに失敗しました\n",work); 
        longjmp(env, 1); 

    }else  { //以下、ステップカウンタ実行 

        /* 行数初期化 */ 

        lin = 0;  
        spt = 0; 
        dost = 0; 
        comcnt = 0; 

        for(i =0;i < 255; i++) 
            com[i] ='\0'; /* コメント行判定用配列を初期化 */ 

        while(fgets(str,sizeof(str),fp) != NULL){ 

            if(str[0] == '\n'){  
                /* 一文字目から改行の場合 */ 
                Printspt(str); 

            }else{ 
                for(i = 0; str[i] != '\n'; i++){ 
                    if(str[i] == '/'){  
                        /* 「/」と次の文字を格納 */ 
                        com[0] = str[i]; 
                        com[1] = str[i+1]; 

                        /* 「/*」か判定 */ 
                        if(strcmp(com,"/*") == 0){  
                            flg = 1; /* コメント行の判定をtrueに */ 
                            do{ 
                                for(;str[i] != '\n';i++){ 
                                    com[0] =str[i]; 
                                    com[1] =str[i+1]; 

                                    /* コメント行終わりか判定 */ 
                                    if(strcmp(com,"*/") == 0){ 
                                        flg =0; /* コメント行の判定をfalseに */ 

 
                                        /* コメントの後ろは実行行か? */ 
                                        for(i = i+2; str[i] != '\n'; i++){ 
                                            if(isgraph(str[i])){ 
                                                Printstep(str); 
                                                break; 
                                            } 
                                        } 
                                        break; 
                                    } 
                                }  

                                /* その行に「*/」がなかった場合、コメント行出力 */ 

                                if(!isgraph(str[i]) ){ 
                                    Printcom(str); 
                                    break; 
                                } 

                                fgets(str,sizeof(str),stdin); 
                                i =0; 

                            }while(flg == 1); /* コメントが記述されている行が続く間、常にflgは1 */ 

                            } else if(strcmp(com,"//") ==0){ 

                                /* コメント出力 */ 
                                Printcom(str); 
                                break; 
                            } 
                        } 

                    if(strcmp(com,"*/") == 0){ /* ループでコメント行出力をしたか */ 
                        com[0] = '\0'; 
                        break;             

                    /* 空白またはタブの場合、次の文字を判定 */ 
                    }else if(isspace(str[i])){  
                        continue; 

                    }else if(isgraph(str[i])){ /* 実行行か判定 */ 
                        if(isgraph(str[i+1])){ 
                            Printstep(str); 
                            break; 
                        }else { 
                            Printspt(str); 
                            break; 
                        } 
                    } 
                } 

                if(str[i] != '*'){ 

                    if(isspace(str[i-1])){ 

                        for(; str[i] != '\n'; i++){ 
                            if(isgraph(str[i])){ 
                                break; 
                            } 
                        } 

                        if(!isgraph(str[i])){ 
                            Printspt(str); 
                        } 
                    } 
                } 
            } 
        } 

        printf("\n総行数:%d\n",lin); 
        printf("空白行数:%d\n",spt); 
        printf("コメント行数:%d\n",comcnt); 
        printf("実行ステップ:%d\n",dost); 
        printf("コメント率:%.0f%\n",(double)comcnt / (lin-spt)*100); 
        printf("\n"); 
        printf("\nメニュー画面に戻ります。"); 
        printf("\n"); 
    } 

} 

/* 空白行出力処理 */ 

void Printspt(char str[]){ 

    printf("空%d:%s",lin+1,str); 
    lin++; 
    spt++; 
} 

/* コメント行出力処理 */ 

void Printcom(char str[]){ 

    printf("コ%d:%s",lin+1,str); 
    lin++; 
    comcnt++; 
} 

/* 実行行出力処理 */ 

void Printstep(char str[]){ 

    printf("実%d:%s",lin+1,str); 
    lin++; 
    dost++; 

} 

A7.高級言語のみでOSを記述することは可能だと思いますか.いずれの場合もその理由も書いて

この問題文を見るまでは高級言語でOSが記述できることは知りませんでした。なので実際に調べてそれをまとめることで回答としました。

可能です。なぜなら、過去の歴史として、元々、アセンブリ言語で記述されていたUNIXC言語で書き直されたという記録があり、歴史的にも可能という証明がされています。このUNIX高級言語で書くことで、ほかのプラットフォームへの移植を容易にしたという記録もあります。C言語でOSが作られたメリットとして、アセンブラ言語より高利的に開発できるという点があります。また、C++でも、組み込み機器用OSを記述することができるという意見もあります。しかし、IPAによると、C言語及びC++言語はコンピュータを乗っ取れるような脆弱性を生みやすい特徴があります。バッファオーバーフロー・フォーマット文字列・整数オーバーフローのような脆弱性を持つようです。

課題B.興味や意気込みを問う問題

ここは自分の意気込みを存分に売り出すチャンスだと考え、一番時間をかけて回答しました。

B1.いままで作ったもの(ソフトウエア、電子字辞書、燻製、陶芸、パズル、その他なんでも)で自慢したいものがあれば教えてください.

とりわけすごいと言われるものを今まで作ったことがなかったのでとにかく過去に作ったものを書き記していきました。

1.勉強会で名刺交換をするための名刺を作りました。最初に作った名刺はwebからテンプレートをダウンロードして特記事項をある程度記載した程度で、名刺の台紙もA4の12枚綴りのものを使ったため、角がギザギザしていて手作り感が強かったです。2度目に作ったものは、デザインを色々なものから吟味して選び、記載内容もFacebookのURLとアイコンを入れる工夫をしました。最新のものは、eight社で作りました。デザインもフリーでダウンロードできるものより質の高いものを選ぶことができ、記載内容もシャープな見た目に仕上げました。特に台紙がしっかりとした作りをしている部分が特徴的な名刺となりました。

2.プラモデルの組み立てをたまに行うのですが、制作時に、部品をニッパーでカットした部分の出っ張りの「ゲート」をデザインナイフやヤスリで処理し、パーツの溝を黒ペンなどで塗りつぶす「墨入れ」を行い、自分なりに「ここをこんな風に塗装するとかっこいいだろうな」と考えて塗装して作っています。出来上がりは、ゲートを削っている分きれいに仕上がり、墨入れによってメリハリのある見た目になります。

3.国家試験の過去問題を解答した後の得点をデータ化してグラフで表示するなどのスプレッドーシート作成も力を入れています。いままでのテストの得点をすべて記録し、自分の得点の推移を見るために使っています。

4.一枚板から本棚を作りました。細かく採寸し、小説を読むので、文庫本のサイズに合わせました。2段の本棚にし、角はヤスリで徹底的に磨き触っても痛くなく、スベスベするまで時間をかけて磨きました。また、板に無駄が出ないように、設計して作ったところもこだわりました。仕上げはニスでツヤを出して完成させました。

5.ラジオを作りました。基盤に部品を半田ごてでつけていき、LED懐中電灯・AMラジオの視聴・FMラジオの視聴・イヤホンジャック・ソーラーパネル・手回し発電。これらの機能がついたラジオを中学生の時、作りました。このラジオを使って試験勉強のお供としてよく使用しています。

B2.自由に使える半導体製造装置が手元にあるとしたら、それで作りたいものを具体的に書いてください.

今まで、半導体についてよく勉強したことがなかったので、半導体から作れるものを調べ、それを作るならどんなものにしたいか考えて書きました。

全ての部品を自分で作り、それを組み立てて、1から素早い処理速度・高画質な画面・大容量のメモリ・高解像度のカメラ・高音質のデュアルスピーカー・高性能のマイク。これらすべてを持ち合わせたスマーフォンが作りたいです。また、それと連動するウェアラブル端末や家電製品の拡張パーツを作りたいです。これにより自分の作りたいIoT機器とスマートフォンが作りたいです。

 また、大容量・高速処理が可能のSSDやどのCPUよりも高速でセキュアなCPU・高画質のグラフィックを実現するためのグラフィックボード・高音質な音声を出力するためのサウンドカードとスピーカー・これらすべてのパーツの性能をフルに活用でき、メモリの拡張性のあるマザーボード・1枚当たりの性能が市販品と比べて高いメモリ・ブルーレイの映像・音声を最大限に読み取れるブルーレイドライブ。これらすべてを作り、組み立てることで、高性能な自作パソコンが作りたいです。

B3.ロボットに期待するところと危惧するところは何ですか.

期待と危惧シリーズ①です。ロボットがあればこの状況やこの業界ではどんなことができるか?どんなリスクがあるか?を考えて書きました。この後のIoT・ドローン等でも書いていますが、リスク面では、ロボットへのサイバー攻撃が人体被害あるいは死に繋がりかねないという点を最も考えています。

1.レスキューロボットは大規模な震災が発生した際に人が入れないようなところに突入して、人を助けることができるよう期待しています。現在、日本の災害対応は人間の決死隊ありきで行われています。人間だけに頼った救助では限界があります。その限界を超えるためにはレスキューロボットが必要です。レスキューロボットは瓦礫を自らの力で排除し、人では危険な道を進みます。瓦礫の下敷きになっている人をサーモグラフィ越しに見つけた時、その瓦礫を排除して救出します。また、福島の原子力発電所の調査をロボットに行わせているように人が入れないところに入ることができる強みがあります。今後、核に関係する事故が発生した時、防護服を着たレスキュー隊よりも安全に侵入し、救助や危険物質の拐取をロボットはしてくれるでしょう。このように、災害時の探索範囲を拡大することで人命の救助率向上につながってほしいです。また、ゲーム機コントローラーのようなユーザーインターフェースを導入することで誰でも操作することができるようにするという研究開発も行われています。万が一の時、決死隊が駆けつけることができず、決死隊がロボットを操作できない状況になったとき、誰かがロボットを操作して救助できるよう、救助ロボット操作の資格ができることを期待します。

2.介護用ロボットの開発は必須です。現在介護の仕事をしている方の重労働低賃金が問題をなっています。さらに、介護職員の人材不足も問題視されています。この危機を解決するために、介護用ロボットの開発と普及は必須です。要介護者にとって買い物をすることは重要だといわれています。理由は、ただ必要なものを買い揃えるということだけでなく、体を動かす機会になり、社会性を保つことにもつながるからです。その買い物を支援するために、足に装着して自分で立つことを支援し、自分で歩くことができるようなロボットの開発を期待しています。自ら歩くことで、人としての尊厳の保持につながることも期待します。また少しでも歩くことで運動する頻度が増えると、介護が必要ない状態になる。という変化が起こることも期待しています。

3.清掃ロボットは学校・オフィス・駅・コンビニなどのあらゆる場面で活躍を期待しています。清掃業界は有効求人倍率が平均より高い2.1倍で清掃員の平均年齢も52.2歳。清掃員の清掃スキルの均一化といった問題を抱えています。その問題を解決するため、清掃ロボットは必要です。また、コンビニでは店員が接客・商品陳列・清掃と複数の業務をしなければなりません。その問題を解決するため清掃ロボットを導入することで、店員の負担軽減につながることを期待します。更に、負担軽減によってコンビニであれば、店舗ごとに必要な店員を削減し、人件費を削減することで、コンビニの新たなサービスの実装を期待します。

4.建設用ロボットは建設業界の問題解決案として期待しています。建設業界には「きたない・きつい・危険」の3Kという問題があります。また、国土交通省が「給料・休日・希望」の新3Kというスローガンを提唱しています。天候に左右されやすいという要因や労働時間を制限した場合の工期の長期化やコストアップがこのスローガン実現の障害となっているようです。こういった背景を解決するためには建設用ロボットが介入して建設業界をサポートすべきだと考えます。

5.農作業ロボットは現在JAXAも参加し、準天頂衛星「みちびき」が位置情報を共有するGPS衛星の役割として注目されています。これが成功すると農作業ロボットは設定された耕地とGPS情報を照らし合わせ正確な農作業をすることを期待しています。また、北海道で実験が進められているクボタのトラクターの自動運転で農作業を行うロボット農機も注目しています。田植え機やコンバインなどの他農機と複数同時に使用すれば、作業効率が格段に上がるといわれています。農機のロボット化には約300万円かかるといわれています。これは農機を扱える作業員を雇う人件費と同じと言われています。複数年このロボット農機を使うと考えると、コストは低減できると言われています。私は農業の作業負担低減のため、期待しています。

6.国民に真実を伝えられるメディアとしてニュース記事や報告書を自動で作成するロボット記者に期待しています。昨今では、国の重要な報告書や文書の記録漏れ・改ざんがニュースとなっています。また、記者会見で会見内容の全文を起こすライターはとても負担がかかる作業だと思われます。このような問題を解決するのにロボットは相性がいいでしょう。正確に文章を記録させることで、記録漏れを防ぎ、人に文章を改ざんさせる権利を与えさせないことで、改ざん事件も防ぐことができます。また、議事録や会見内容をすべて漏れなく記録することで、内容の全文を一般の人に公開することでマスメディアの都合のいい編集の手からも遠ざけることができるでしょう。昨今のスキャンダル・事件・フェイクニュースを防ぐ要因として、ロボットが活躍することを期待します。

7.私は国会議事堂などのある永田町に行ったとき、各施設の前に警察官が複数人配置されているところを見ました。永田町は国の政治が1カ所に集まっている点から、警察官が多いです。しかし、長時間その場に立って警備し続けることは負担がかかります。それを改善するために、警備ロボットの普及を望んでいます。警備ロボットであれば、バッテリー次第で長時間警備し続けることができるでしょう。また、襲撃者・不審人物が現れた時、対応できるような機能を持ち合わせることができれば、永田町に立つ警察官もいなくなるでしょう。人が監視しなくても架空実に守ることができる警備状況ができることを私は期待しています。

8.飲食業界では、調理ロボットが活躍することを期待します。現在、中華料理を作れる調理ロボットや寿司のシャリを握れるロボットなどの職人の技を再現できるロボットが開発されています。この職人の技を再現できるロボットの存在は、チェーン店を含めた飲食店の味の均一化を見込めます。数人の従業員がロボットの動作の管理を行い、配膳を担当することで、調理担当の従業員の人件費削減・料理の販売価格の削減ができることを希望します。

9.ロボットは今後、ロボットに搭載されたAIが自ら考え、各ロボットに与えられた役割を行うことが多々あるでしょう。そこでロボット自身が暴走を起こすようになった時、人より効率が悪くなってしまう恐れがあります。また、ロボットを本来意図しない用途で使用することにより、事故が発生する案件も危惧しなければなりません。また、ロボットによって仕事がなくなる人がその後どう働くか・どう生きるかについても考えなければなりません。また、普段ネットワークに繋がり動作するロボットがネットワークの繋がらない状態になった場合も、意図しない動作が実行されてしまった場合どうなるのかの予測を事前にしなくてはなりません。

B4.ドローンに期待するところと危惧するところは何ですか.

期待と危惧シリーズ②です。ドローンに対する知見が応募時は充分ではなかったため、主に妄想で書きました。一部はロボットと似ている点もあります。※実際に講義を聞いたところ、今後のドローンビジネスは撮影ドローンが増えていくと考えられているそうです。ドローンに荷物を搭載すると、消費するバッテリーのことを考えるとガソリンをエネルギーに動くものでない限り、実現は難しいようです。

1.ドローン空撮の技術が発展することにより、厳重警戒地域での上空からの偵察に活用することができるようになることを期待しています。特に人が集まるようなところでは、いくら警備員を動員しても警備が難しくなるというリスクがあります。そのような状況で、ドローンは活躍すると考えます。また、映像を録画することで、事故・事件が発生してもその映像を撮影することで事故・事件の状況の把握・犯人の特定につながります。さらに、複数台のドローンをオートで滞空状態にすることで、最低一人の監視者がすべてのドローンの映像を見ることができるので、1人1台をわざわざ操作する必要がありません。これにより、警備員の必要人数の削減につなげることができます。

2.しかし、ドローン墜落のリスクもあるため、墜落しないようなドローンづくり、墜落しても安全な場所から撮影しても映像を認識できるレベルのカメラの搭載などが必要だと考えます。

3.宅配用ドローンの普及にも期待しています。空路を使うことで目的地へ直線で移動できるドローンは速度次第では最も早く宅配することができます。積載重量が増えるにつれ、宅配のドローンが占める割合を上昇させ便利な宅配になることを期待します。しかし、バードストライク悪天候時の飛行の事故発生リスクについては危惧しなければなりません。

4.また、災害発生時にもドローンが活躍できると考えます。山火事が発生した場合に消火剤を搭載したドローンが突入することで、火元を効率的に消火することが期待できます。また、ドローンは起動してすぐ現場に飛行させるという点では道路の混雑状況や、ヘリコプターのように飛行前の特別な準備もないため、最も早く駆けつけることができる消防隊になることが期待できます。行方不明者の捜索にもドローンが活躍することを望みます。ドローンは空中・低空を飛行することができるメリットから、人が入れない場所やトンネル内など捜索できるメリットがあります。サーモグラフィなどを搭載した多数の探索用ドローンで人を探し、救助用ドローンあるいはヘリで行方不明者を救出することで救えない命を減らすことに繋がるのではないいかと考えられます。避難所への物資の調達を先ほど言ったような宅配用ドローンで実行することができると考えます。そのために、充分な物資を運送できるドローンの開発を期待します。複数のドローンでネットワークを中継できる無線LAN中継ドローンの登場も期待しています。災害時、電波が通じないようなところでも、複数台のドローンで電波を中継しようという希望です。これにより、避難所が陸の孤島化することを防ぎ、いつでも生活情報を取得でき、離れた家族・友人と会話することができるといいと思います。

5.私が最も期待しているのは、誰もが簡単に操作することができるようないくつかの共通規格の作成です。パソコンからはWASDキーによる前後左右の操作とマウスによる高度調整で操作が可能であれば、簡単だと考えます。それ以外ではゲームコントローラー型が理想的だと考えます。スマートフォンを使ったジャイロ操作は直感的でわかりやすいかもしれません。現在、ドローン操作は機種によって操作の難しさが異なっています。しかし、緊急時を含め、ドローンは普及するとあらゆる人が操作することになります。そのため、どんな機種でも誰もが操作できるような共通規格が必要なため、期待しています。

6.その他、危惧する点は攻撃者が警戒区域に攻撃用ドローンを侵入させて標的を襲うような脅威もあります。同様に殺人ドローンが開発されることでドローンが通り魔となる恐れもあります。そのような違法ドローンの対策も必要です。

7.以前上空からお菓子を撒くドローンが落下して、6人が負傷しました。この事件では、安全対策が十分施されていない状態で、航空局から許可を得ていたと聞きます。今後も、イベントでドローンを飛行させる機会は多くなるでしょう。その時、安全に配慮してイベントが催されているのか?という疑いが出てきます。そうならないよう、厳しい審査を設けて許可を出す必要があります。

B5.自律走行車両に期待するところと危惧するところは何ですか.

期待と危惧シリーズ③です。個人的に発展に期待しているものが自動運転車です。様々な業界でも活躍の機会があり、今後必要になる生活手段です。今回は、各業界がどんな自動運転車両を作っていて、それがどのように発展するとよくなるのかについて考えて書きました。セキュリティ・キャンプ応募前から興味があったので、調べていたところが回答に役立ちました。特に現在の事故発生件数などの背景は危惧するところを書くのに応用することができました。(データを活用)

1.私がIoTの中で最も普及を期待しているのがコネクテッドカーです。今後のコネクテッドカーの持つ要素のコアな部分として自律走行機能は当然必要とされます。道路を走行している自律走行車両各車がサーバーへ位置情報・道路状況・天候の情報を送信します。そうすることで、サーバー側がどこにどれくらいの車が走り、道路状況はどうなのかを計算します。その結果、各車が渋滞せずに最速で到着するルートを提供し、各車そのルートを自動運転するような要素を期待します。また、国土交通省が行っているトラックの縦列走行実験も現在期待しています。これは先頭車両にはドライバーが乗るのですが、後方の車両にはドライバーが乗っておらず、前の車を追従する形で自動運転を行います。先頭車両を含め、この実験が成功すると、3台のトラックを1人で運転することができることとなります。これにより、流通業界のドライバー不足が解消されることを期待しています。

2.今後、さらに高齢化社会が発展していく中で、特に公共交通機関がない場所で自律走行車両は活躍するでしょう。公共交通機関で町に行くことができない人が町に行くには自分で車を運転するかタクシーを呼ぶかしか方法がありません。しかし、歳を取るにつれ、運転をするリスクは高まります。それを改善するために自律走行車両が活躍することを期待します。また、高齢者にとって頻繁に町へ出かけるきっかけとなることも期待します。

3.宅配業界ではヤマト運輸ディー・エヌ・エーが開発した「ロボネコヤマト」が無人宅配の実証実験に4月末成功しました。走行距離は約6kmで神奈川県藤沢市内を時速5~10kmで走行しました。仕組みとしては、場所と時間を指定して利用者が受け取るというものです。最短で40分で届けられ、10分単位で指定できるところも魅力です。現在は一部地域でのみ利用可能ですが、今後全国各地で利用できるようになることを期待しています。また、過度な労働がニュースになる宅配業界では、このような自動運転宅配車の普及で、重かったり大きすぎたりする荷物のみ従業員が運ぶようにし、人手不足解消につながることも期待しています。高速道路を経由して長距離を配送することができるようになることにも期待します。

4.農業はクボタがGPS、あらかじめ登録された農地の形状・広さをもとに自動でハンドルや耕作装置を制御するトラクターがあります。発売予定は2018年ということでこれから一般的に普及するところが期待されます。また、米作りなどの単純な農業を完全自動化することで、特殊なブランド品の農産物の製作に力を入れることができる見込みがあるという点で期待をしています。もちろん、高齢者が農業を行えない問題や農業の人口減少解消の解決に関しても期待しています。

5.建設現場では、コマツ無人ダンプトラックをはじめとした自動運転建機を実現させています。ダンプトラックはドライバーにとって労働条件が悪い乗り物だそうです。そのため、運転手の乗り手がいないことを改善するために2008年から無人化に取り組みました。無人ダンプは有人車両が近づくと減速し、有人ダンプ側が無人ダンプを停止できるボタンを取り付けて有人車両のドライバーを安心させる仕組みを取り入れました。また、ICTブルドーザーに自動制御機構を組み込み、熟練オペレーター以上の整地の精度を実現するなど人ができないことを取り組んでいるようです。これにより、建設現場が自動運転を通しての負担軽減・精度向上を期待します。

6.パトカーはアメリカのフォード・モーターが自動運転パトカーの特許を申請しています。このパトカーは1台のパトカーが交通違反車両を見つけると他の自動運転パトカーや普通のパトカーに違反者情報を送信します。また自動追跡をして、違反切符を切ることをします。追跡時は車両のセンサー・カメラの他に道路に設置されている監視カメラを利用して追跡でき、違反車が逃げてもナンバープレートを控えることができるそうです。今後、このパトカーが実用化されることで、いわゆる「ながらスマホ」で運転している車両を見つけるなどをして事故発生件数の減少につながっていくことを期待しています。

7.タクシー業界では、ベンチャー企業ZMP社が自動運転レベル4の自動運転タクシーを開発し、都内の公道での実証実験を始めています。レベル4とは、システムがすべての運転タスクを実施(限定領域内)・作動継続が困難な場合、利用者が応答することは期待されない。という基準となっています。タクシー業界はタクシードライバーが乗ることを前提としたレベル2~3の推進派が多い中、なぜレベル4なのかということは、ZMPの社長は「自動運転はドライバーの仕事を奪うものではない。ドライバーと自動走行タクシーは相互補完の関係にある」と言っており、ドライバーの不足分を無人タクシーで補い、有人タクシーでは収益性が低い地域や深夜早朝の時間帯を補完することを目的としているようです。このように、タクシー業界のドライバー不足・高齢化問題をこの無人タクシーが解決することを期待しています。

8.ヤマハの低速自動車は自動運転するゴルフカートをベースに作られました。この車の用途として施設内の移動などに期待します。広いテーマパーク内での移動やリゾート地でゆっくりと走行するので景色を眺めながら移動してくれます。観光目的の自立走行車両としては屋根があり、椅子は多人数が乗れるようなつくりとなっているので観光地での移動手段として今後期待しています。

9.自律走行車両の安全性向上のために、5G回線の普及を期待しています。高速な回線速度によって車両とサーバー間の通信の遅延時間を減らし、遠隔制御のリスクの軽減を見込めます。また、高速回線により、利用者へリアルタイムの道路状況などを伝えることができるというメリットがある点でも、5G回線は活躍することを期待しています。また、5G回線によって人間の反応よりも速く反応することができると言われており、自律走行車の万が一の時の反応の速さが事故減少につながってほしいです。

10.危惧することとしては、車両に不正な案内情報及び地図情報を送ることで交通事故が起こされる危険性があります。また、車自体をハッキングして車を盗難されたり、故意に事故を発生させてしまったりすることが自律走行車両への信頼の低下及び需要の低下となるため、絶対に防がなくてはなりません。特に死亡事故となると、これまでは攻撃者の攻撃というのはデータが奪われるなど直接は人命に関わることは起こってきませんでした。しかし、自律走行車両は人命が関わります。そのために、なんとしてもこれは防がなくてはなりません。また、前述のロボネコヤマトなどは鈍器などで物理的に襲われたとき、周りに人がおらず、人が乗っていない上に無防備な場合、車自体を破壊され、車内の宅配物を盗難される恐れがあります。現在、自律走行車の死亡事故はテスラ社とウーバー社で2件発生しています。死亡事故は遺族に自律走行車の嫌なイメージを与え、ニュースを見た人も自律走行車の嫌なイメージを与えます。そうなると、自律走行車は普及しません。そうならないよう対策する必要があります。

B6.IoTに期待するところと危惧するところは何ですか.

期待と危惧シリーズ④です。ここでは自分が欲しいもの・欲しい機能を序盤は書きました。ウェアラブル端末の点は書けば書くほど色々な応用が効くなと思いながら書いていました。(マジで全部実現してほしい・・・)後半は自動運転だけではない自動車のIoT化(コネクテッドカー)について書きました。コネクテッドカーだけで結構な量を書くことができたので、やはりキャンプ前に調べものをしていてよかったなと思った部分でした。

1.ウェアラブル端末に期待しています。GoogleカレンダーGoogleマップと連携して、○○時に〇〇駅の〇〇の電車に乗ってください。と端末からメッセージが来る機能は、複雑な路線を通勤・出張する際に役立ちます。また、ICカードを登録することで、決済ができる点も魅力です。私の趣味はランニングなため、かさ張るスマートフォンを持ち歩く必要がなくなる点はすごく便利だと思います。ヘルスケアにより燃焼したカロリーや心拍数などを計測する機能などもランニングに合わせると良い機能だと思います。今後は、免許証のデータやマイナンバーを登録することで本人証明・年齢証明が楽になるといいなと思っています。近未来的な発想をすると、端末からホログラムを投影して、目の前に地図やメッセージを表示するような技術が完成すると、魅力的だと思います。また、健康状況を把握する機能を使うことで、ウェアラブル端末をすべての人が着用することで、健康状況を管理し、新国立競技場で発生したような過労自殺を防ぐきっかけにもつながると考えます。過労による自殺だけでなく、危険な仕事をやるような職業の場合は健康状況の悪い端末の持ち主を休ませることで事故を防ぐ要因になることを期待しています。その他にも転売などで問題視されるスポーツや音楽などのイベントの観戦・観覧チケットを完全電子化しウェアラブル端末で来場することができる仕組みがあると転売問題解決に期待できます。高齢化社会になるにつれて、独居老人の安否を家族に伝える通知機能にも期待しています。また、家族だけでなく国や地方自治体に伝えるようにする必要もあるでしょう。先日、事件現場清掃会社の社長がテレビに出ていました。その中で、男性が高級マンションの一室で死後、二年間放置されていた部屋を清掃するという話がありました。発見当初、遺体は白骨化していたということでした。その番組を見て、孤独死が実際に起こっており、長い間発見されず遺体の状態が酷い状態で発見されるということがよく発生しているということを知りました。このような状況が改善されるよう、一人暮らしをしている人にウェアラブル端末の取り付けをするようにし、体調の異常を感知すると救急搬送できるような環境が実現してほしいです。

2.在宅テレワークの普及を希望しています。現在シンクライアントのPCを支給してテレワークの試験運用を進めている企業があると聞きます。しかし、実際に在宅テレワークを実現するためには、シンクライアントPCではコストがかかり過ぎてしまいます。そうならないよう、会社とVPN通信をしてwebカメラが搭載されたIoT機器を付けることで在宅テレワークを実現すれば、低コストになるでしょう。コミュニケーションが必要な業務と、作業だけの業務を日ごとに分けることで、コミュニケーションを重要視する職種にもテレワークを実装できるかと思われます。専用線接続などを怠ると、通信の傍受によって作業データが漏えいする恐れがあります。その対策についても、今後考える必要があります。

3.教育業界へのIoT導入も期待しています。中学・高等学校での教員の重労働が問題になっています。中学教員志望の友人に聞いたところ、教員重労働の問題点として、複数クラスに入るため、同じ内容を何度も黒板に書く必要がある・テストを作るのが大変・普段の課題の採点が大変・課題の提出状況の管理も大変・部活動の顧問も同時にやらないといけないといった問題点がありました。それを解決するために、IoTが活躍することを期待しています。黒板に同じ内容を何度も書くのが大変という問題点は、電子黒板化で解決できるでしょう。授業データをパワーポイント形式などで、準備することで、一度授業資料を作るだけで全クラス分の授業の準備ができるメリットができます。また、字を書くのが苦手な教員も電子黒板を使えばその問題を解決することができます。テスト作成や課題作成に関しては、教科書のページを入力して、教科書データを格納しているデータセンタにAIが指定したページ間のデータからテスト・課題を作成し、パソコンなどの端末にテストのデータを送信する機能が実装できればいいと思います。これにより、各学校の授業の進行状況別で学校ごとに中間・期末テストを作成することができ、難易度を指定できるようにすると、学校ごとに差別化も図れます。また、テスト・課題の採点もOCR・OMRで行うことにより、採点ミスもなく、採点の手間もなくなります。また、問題の解答に記号だけでなく筆記問題があるほうが好ましいということがあり、正解が限られているものは文字を読み取って採点できるようにし、複数の解答があり、書き方も様々で複雑な問題の場合は教員が採点できるような仕様になるといいでしょう。課題の提出状況管理は、生徒にタブレットを配布する形式にすると解決できるでしょう。生徒に課題データを送信し、タブレットで解答させます。解答が済むと、解答した課題データを送信し、サーバー側が提出状況を管理します。これにより紙で課題を提出する時の手間の削減、紙自体の削減、教員の提出状況チェックの手間の削減につながります。また、生徒にタブレットを配布することで、教科書や参考書・資料・辞書をタブレットにデータ化することができます。登校する際に基本的な持ち物として、タブレットと筆記用具だけを持っていけばよくなり登下校の手間も改善されます。辞書はタブレットに入れることにより、検索が容易になります。教科書も電子化することで、指定されたページをすぐに開くこともできます。また、タブレットの教科書に文字を書けるようにすることで、紙の教科書のメリットも取り入れられるといいです。また、タブレットを通してリアルタイムに電子黒板の内容をシェアすることで、目の悪い生徒も黒板の内容を不自由なく見ることが期待できます。部活動の問題は地域コミュニティとのつながりが解決の近道になるでしょう。学校を近隣住民が部活動に必要な顧問の募集状況や「野球の顧問」をしたいといった近隣住民の立候補情報から外部顧問を雇用することが解決になります。これにより、負担のかかる運動部を自主的でない限り教員が顧問をする必要がなく、生徒の視点として、精度の高い専門的な教育をしてもらえる見込みがあるというメリットが得られます。このように、地域社会と学校がつながることで地域コミュニティの活性化にもつながり、部活動生の質の向上も期待できます。これをどうIoTで実現するかというと、役所などに触れるサイネージを設置し、学校側はパソコンなどで募集状況を発信し、近隣住民側はサイネージから募集している部活動を探し、学校に連絡します。これにより、上記のアイデアの実現ができることを期待しています。

4.エンターテインメント及び情報共有技術として、AR、VRの技術の向上も期待しています。最近バーチャルYouTuberが流行している背景から、AR、VRへの関心が高まっているとみて取れます。また、PlayStation VRの発売、関連ソフトの発売からVRゲームにも関心が向いています。IoTセンサーを使うことで、VRの世界のオブジェクトを触る・投げる・蹴るなどができます。これを応用すると、自宅でスポーツが楽しめたり、リアルな視点のFPSゲームが楽しめたりとe-sportsの新たな側面になるのではないかと考えます。また、ARでは、ヘッドマウントディスプレイなどを装着して何もない部屋を例えば、中世ヨーロッパの宮殿に見立てて遊ぶリアル脱出ゲームが面白そうです。映画館をARで投影することができれば、既存の4D上映と組み合わせ、より、実際にその場にいるような臨場感を得られ、新たな映画撮影のきっかけになるかもしれません。また、在宅テレワークの新たな側面としてVRは活用できるかもしれません。チームが同じVR空間に集まり、会議を行うなどすることで、コミュニケーションが必要な業務に関しても家で行えるようになるかもしれません。ロボット開発をする際、設計段階でVRを活用することで、デザイン開発をチームで一緒に行えるようになると、言葉では言い表せない概念がVRを使って表現することができ、作業効率も上昇することが期待できます。具体的には、先ほどのバーチャルYouTuberの新キャラクターを制作する際に、複数人でモデリングするケースがあった場合、目の前にあるモデルを見てお互いに意見しあって制作をすることができます。このようなVR技術の実現を支えるために、IoT製品は必要となります。現実では実現できないことがVRでは実現できるので、新たな楽しみ方・新たな働き方のきっかけになることを希望します。

5.高齢者や体の弱い人の多くは複数の薬を服用します。薬の服用を忘れないようにするため、薬の包装を捨てることで薬を飲んだことを確認できるゴミ箱があればいいなと思います。薬の包装が捨てられる瞬間に落ちてくる包装を確認し、服用したことを記録することができれば実装できるかもしれません。もう1つの案として、薬ケースをIoT化する案があります。薬ごとに収納し朝、飲まなければいけない薬があれば、その薬が入っている薬のケースのLEDが点灯し、服用するよう促します。また、朝の時間帯を6時から9時と定義しているとき、6時にスマートフォンへ服用の通知を行い、飲み忘れている場合、8時30分に「まだ服用していない薬があります。」と通知し、飲み忘れを防止します。朝に飲まなければいけない薬を全て飲むと「この時間帯の服用する薬をすべて飲みました。」といった通知をし、本人が薬を飲んだことを確認させます。このようなIoT製品の普及で、薬の飲み忘れ問題解決を期待します。

6.在宅診療をIoTで実現することは高齢化社会において重要です。家から出られないような人を支援するために在宅診療は今注目されています。ウェアラブル端末によって心拍数や体重などをサーバーに発信しAIによって監視させます。心拍数などに異常があった場合、AIがナースコールを発信し、担当医・担当看護師を呼びます。普段はテレビ電話を通しての問診を行うことで、普段の体調を把握します。このように、1つのIoT機器を付けるだけで、体調をAIに管理してもらい、定期的な問診も病院へ行かずにできるようにすることで、高齢者の健康管理や通院負担を軽減させることを期待します。

7.家の鍵をICカードウェアラブル端末、生体認証で解錠してくれるIoT機器の普及も期待しています。私は時々、駅の自動改札口でICカードと間違えて鍵を出してしまうことがあります。このような出来事があるのでこの製品が普及してくれると個人的に嬉しいです。危惧する点としては、生体認証の場合、対タンパ性の調整によって自分以外の人でも解錠できてしまわないかという心配があります。他にも、既存のドアの上に機器を取り付けるタイプの場合、機器自体を破壊された場合、ちゃんと取り外すことができなければ鍵自体の解錠ができない心配もあります。

8.特に、災害時はこのウェアラブル端末が活躍するでしょう。津波などの水害に巻きもまれても水没することのない防水・防塵設計。ネットワーク回線が遮断された場合にはある程度の範囲に対して居場所を発信できる発信機能。災害時に自動的に「00000JAPAN」の無線LANに接続しようとする緊急機能。災害発生時に最も近くて安全な避難所を案内する緊急案内機能。ヘルスケアと位置情報を応用することで、家族へ安否状況を報告する機能。万が一、電源が切れたり、ウェアラブル端末が破損したりした場合の直前の位置情報を発信する機能。公衆トイレをIoT化することで、避難生活中、トイレが空いているかどうかを確認する機能。同じく避難生活中の食糧配給の際の整理券自動配布機能。避難生活中の自分に必要な生活情報を受信する災害時情報受信機能などを実装すれば様々なシーンでウェアラブル端末が活躍するのではないかと思われます。特に、災害時の行方不明者発見は非常に困難な作業のため、行方不明者が自分の居場所を報告する用途としてウェアラブル端末が活躍することを期待しています。

9.危惧する点は、個人情報を端末に登録したり、ICカード及びクレジットカードを登録したりしていると、紛失・盗難・通信情報の漏えいの際にその情報をどう守るかが重要となります。また、誤った地図情報・電車情報を発信すると、移動面で悪影響を受ける恐れもあります。ウェアラブル端末がバッテリー不良で発火・爆発すると、身に着けているため、ケガは避けられません。

10.また、IoTのなかで、コネクテッドカーも魅力だと思っています。2017年には交通事故発生件数は47万2165件ありました。また、死亡事故件数は3630件もありました。この交通事故のうち、高齢者が関与している割合は22.3%です。これは、増加傾向にあり、高齢者が安全に運転できる車を開発する必要があります。その一要因がコネクテッドカーです。コネクテッドカーは自律走行運転を含め様々なネットワークとつながりを持った車のことを意味します。平成27年経済産業省情報通信白書によると、52.5%がコネクテッドカーを「利用したい」あるいは「利用してもよい」と回答しています。この利用意向を向上するためには、コネクテッドカー開発を進める必要があります。また、コネクテッドカーによる事故が発生すると、国民の「利用したい」と思う信頼は減ってしまします。そうならないために、事故が発生しないコネクテッドカーを開発する必要があります。コネクテッドカーにはテレマティクス保険という要素があります。これは、従来の保険と違い、ドライバーの普段の運転によって保険料が決まる仕組みです。例えば、急発進・急ブレーキ・法定速度を超えた速度での運転をすると、保険料が上がります。逆に安全な運転を心掛け、滑らかなブレーキや法定速度以内の速度での運転をすれば保険料が安くなります。私の意見としては、この保険が必須化することで、各ドライバーが安全な運転を心掛けることで、事故発生件数が減ってほしいです。また、テレマティクス保険(テレマティクス保険に関する国内事例への画像リンク http://www.soumu.go.jp/johotsusintokei/whitepaper/ja/h28/image/n1204030.png)の検知要素として、車間距離の要素が入るといいと思っています。例えば、時速60㎞で走行する車はドライバーが反応してから急ブレーキをかけ、完全に停止するまでに距離にして45m必要だと言われています。これを秒数に換算すると、約3秒かかると九州大学の研究で発表されています。交通事故発生件数が毎年ワースト上位な福岡県内でこの九州大学の教授が2車間の通過時間を調査したところ、平均約1秒しか開いていないという結果が出たと発表されています。これは前の車両が急停止した際に止まり切れず、衝突してしまう恐れがあり、そのために事故発生件数が多いという推測がされています。そのために車間距離が安全な状態かを検知するテレマティクス端末の実装を強く望んでいます。例えば、その時の天候・時速・ドライバーの健康状態もブレーキまでの反応に影響するので健康状態から安全な車間距離を計測します。2車間の車間距離はセンサーを通して計算し、車間距離未満になるとアラート音を発し、その情報をサーバーへも発信し保険料を加算します。さらに、危険な車間距離になるとより大きな音でアラート音を発し強制的に速度を減速させます。これにより、安全な車間距離を維持させることで、事故が減ってほしいと考えています。

11.コネクテッドカーの要素として、盗難車両追跡システムがあります。これは物理的に盗難された場合及び攻撃者にハッキングされて盗難された場合の両方で有効です。国内では、トヨタ自動車が2002年より提供しているサービスの1つとしてこのサービスを搭載しており、契約者の要望により盗難車両を追跡できる機能となっています。また、事故が派生した際にすぐに警察と救急・消防が駆けつける緊急通報システムも魅力的です。事故発生後に失われる人名を減らすことができます。欧州では2018年4月より「eCall」システム(緊急通報システム)の新型車への搭載が義務化されるなどこのシステムを積極的に導入しています。また、ロシアでもeCallと似た「ERA-GLONASS」の導入が進められており2017年1月の時点で、ロシアで販売されすべての新型車への搭載の義務化がされています。

12.スマートスピーカーのCMが最近はよく流れていますが、コネクテッドカーの要素として発展することを期待しています。ナビゲーションにスマートスピーカーが実装すれば、これまで、住所や電話番号から目的地を登録することが多かった従来のカーナビゲーションから、行先を一言いうだけで目的地を登録してくれるスマートスピーカーは魅力的です。また、音楽を再生する時や空調の温度を変更するのも一言で済ませられるのは大変便利です。スマートスピーカースマートフォンウェアラブル端末と連動させるとドアロックの開閉も可能になるでしょう。運転中に買っておかないといけないものがあるときにも一言いえば通信販売で購入することもできるでしょう。道路状況を受信し、ドライバーに音声通知することも実現可能です。また、スマートスピーカーにおススメの店を教えてもらい、行先を登録するコンシェルジュ機能や○○に電話してといえば繋がるハンズフリー通話機能もあれば、充実したドライビングが実現できると考えます。ただ目的地に行くために運転するのではなく、運転しながら日常のあれこれをこなすことができるコネクテッドカーとスマートスピーカーの共存に期待しています。

13.トヨタと東京ハイヤー・タクシー協会とKDDIで「つながるタクシー」という実証実験が行われています。これは、タクシー協会が実証実験に使うタクシー500台、タクシー事業者との調整を行い、KDDIドライブレコーダー「TransLog」のSIM、4GLTEネットワークを提供し車両データ処理時のネットワーク品質の確認、次世代のネットワーク構築に必要な要件を検討します。トヨタは各タクシーに通信型のドライブレコーダー「TransLog」を搭載させ、実際の走行画像や車両データをリアルタイムに収集します。その収集したビッグデータを解析することで、モビリティサービス・プラットフォームの機能拡充、タクシー事業者向け新サービスの開発、次世代タクシーの開発に活用します。このように、KDDIトヨタとタクシーを「つなげ」、新サービス・次世代タクシーの開発に向けて取り組んでいます。ここで危惧すべきなのは、ビッグデータを他社に傍受されないような通信網の確立が必要だと考えます。同じくトヨタでは、JPN TAXIという車両を開発しました。この車両は現在、実際に日本国内で走行しています。特に道路交通情報の収集能力に特化しています。この道路交通情報の収集能力はGoogleストリートビューの撮影カーより高度な収集能力をもっており、前述のトヨタが行っているビッグデータ収集に活用されるということです。この道路収集機能が一般車両にも搭載されると、その時点でのあらゆる道路の状況を把握することができ、サービス提供につなげられるのではないかと期待しています。ここでも、道路のデータを発信する際に、独自の方法でサーバーに発信したり、データ送信時に通信を暗号化したりしなければ、どの車両がどんなところを走っているかの「ストーカー」事件につながる恐れがあるので対策する必要があります。ウーバー社の提供する配車アプリもコネクテッドカーの繋がりとして期待しています。自律走行車両が発展すると、指定した場所と日時に車両を配車できる仕組みを作ることで、レンタカーを柔軟に借りることができることが想像することができます。これにより、若者の車離れというものが危惧されていますが、自動運転してくれる車が自分の好きな時間、好きな場所に来てくれて自動で走ってくれることにより、車の所有によってかかる税金を意識する必要も減り、車を購入する額のことも気にする必要がなくなるので、若者の車離れ対策に繋がるかもしれません。また各メーカーがレンタカー事業による利益を増幅することで、車を生産しても売れないという状況を改善するヒントになるかもしれません。

14.車の各部品に摩耗状況を送信できるIoT機器の導入にも期待しています。現在、ブリジストンMicrosoftクラウドであるAzureと繋がることでタイヤの摩耗状況がわかるIoTサービスを行っています。このようなサービスを他の部品にも応用することができれば、バッテリー液の量の把握やエンジンオイルの把握が容易になります。さらにエンジン本体などの部品自体の整備状況をチェックすることができ、整備が必要な状態になるとドライバーへ通知し、整備状況を説明する必要がなく、通知された摩耗状況などを共有することで、整備士の作業も楽にすることができます。また、事故発生時に故障していた部分や事故での破損状況などの情報がすぐに共有しやすくなる利点ができることを期待しています。このような整備状況・摩耗状況を「見える化」することを電車や飛行機などの機器にも応用することができれば、整備不良の事故の削減に繋がり、整備士の整備の負担の削減にも繋がることを期待しています。

15.また、「見える化」という観点では、農業などにも応用することができます。例えば、水田であれば、水の総量を計測し、常にアプリケーションでみることができれば、水管理が容易となり、さらに、管理機器に水量の調整機能も取り付けることができれば、水田の管理が楽になることを期待しています。スポーツ界も選手の体にセンサーを取り付け、選手のパフォーマンスが観客に「見える化」すると面白いと思います。例えば野球でいえば、キャッチャーやバッター・審判にパフォーマンスの邪魔にならないようなカメラを取り付け、その映像を球場内の誰でもが今、選手が何を見てどう反応しているかを見ることができて面白いと思います。また、ボール内に小型で安価なセンサーを埋め込み、1・3塁線にもセンサーをグラウンド内に埋め込んでおくことで、正確にフェアかファールかを判断できるようにし、審判の誤審防止・負担軽減に繋がるといいです。

16.他にも、電車やバス、飲食店などの空席を「見える化」すると便利です。特に長距離移動をする人にとっては、電車に座らなければ大きな疲れを与えてしまいます。そのような人のために、「この椅子に座っている人は○○で降りる(定期券や切符からどの区間の間、乗車しているかの情報を得る。)」といったウェアラブル端末などから発せられる情報をスマートフォンなどで共有すると、利用者が椅子に座れるようになるのではないかと考えます。それを発展することができれば、座る座席を整理券のように制御することができ、早く乗っていた人がちゃんと座れるような公共交通機関の実装ができると思います。

17.すべてのIoTに総じて言えることが、脅威はネットワーク上だけでなく、物理上にもあるということです。製品を破壊されればネットワークを介して攻撃することなく攻撃されてしまいます。例えば、IoT機器のセンサーやアンテナ部分を取り外されればそれはただのモノと化してしまいます。そうならないための対策は必要です。また、「見える化」することで、見せてはいけない部外者にその情報を見せないようにすることも重要です。

B7.ロボットをよりセキュアーにするためのあなたなりのアイデアを聞かせてください.

先ほどの期待と危惧シリーズを踏まえて、じゃあどうすればセキュアにできるか?というセキュアーにしようシリーズ①です。特に攻撃された際に停止するなど安全面を徹底的に書きました。

1.全てのロボットに共通することですが異常な行動・急停止・暴走に対して、安全に停止することができる仕組み(フェールセーフ)を搭載すべきです。例えば、前述の介護ロボットが止まらなくなると、転落事故・交通事故に繋がってしまう恐れがあります。体に取り付けられるロボットは特に緊急時に脱出ができるように作る必要があります。

2.人に直接応対する対話型のロボットに関しては、過度な馬力を持たないモーターを取り付けるべきだと考えます。過度に力のあるロボットであればハッキングによって操縦されたときに人に危害を加える恐れがあります。その対策のため、それぞれのロボットに適切な力を与えるのがネットワーク権限よろしく、セキュリティとして適切です。

3.農作業ロボットなどが、バッテリー切れを起こした際に、その場で立ち尽くさないよう、バッテリーの残量によって自ら充電に行く仕組みも必要となります。また、警備ロボットであれば充電に向かうロボットの影響で監視漏れがないように、同時に交代して監視する待機状態のロボットも必要となるでしょう。

4.物理的な攻撃を目的として開発された違法ロボットによる襲撃時に、どのロボットにも必ず必要な制御装置の基盤となる部品(CPUのようなもの)を世界が認める信頼されたベンダーが作ることで、緊急時に情報セキュリティを利用して停止させることができるような事前の対策ができればいいと思います。

B8.ドローンをよりセキュアーにするためのあなたなりのアイデアを聞かせてください.

セキュアーにしようシリーズ②です。業務用のドローンに攻撃を仕掛けられた際の対応と攻撃用ドローンが現れた際にどう対応するかについて書きました。

1.ドローンの飛行中に電源を切る命令が送られると、墜落して人に当たるなど事故が発生する恐れがあります。そうならないために、電源切断をするときは、高度を計算して、ゆっくりと降下するような緊急システム(フェールセーフを実現する仕組み)を用意するといいと思います。また、制限速度を超えるような移動命令(暴走命令)を受けた場合は、その命令を破棄するようなエラー処理を導入するといいと思います。また、攻撃者を特定するために、命令の送信元のログ取得は常に行うのが望ましいです。ログを常にとることで、デジタルフォレンジックを発見することを容易にできる見込みがあります。

2.攻撃者が警戒区域に攻撃用ドローンを侵入させて標的を襲うような事件が発生しないようにする対策として、警備ドローンで攻撃ドローンを捕獲するケースも想定できます。また、これはエクスプロイトコードが公になってしまった場合のリスクがありますが、攻撃用ドローンをハッキングできるエクスプロイトコードを埋め込むことで緊急時にそれを使って操縦権を奪い、回収するようなこともできると思います。

3.個人で所有しているドローンがクラウドやネット回線を通して映像を閲覧している場合、その映像が第3者に漏えいしないよう、閲覧用のアプリケーションにユーザ認証をつけ、映像の送受信回線をVPN接続するのが好ましいと思われます。また、起動中のドローンの操作が第3者にハッキングされ盗難されないよう、特定のコントローラーからの操作のみを受け付けるようにし、(IPアドレスMACアドレス、製品別の専用キーなどで識別)同時にその特定のコントローラーの成りすましが行われないよう本人のみが持ちうる情報(公開鍵暗号方式にたとえると、送信者の秘密鍵)を付加し、ハッキングを対策します。

4.天候によって制御ができなくなり、事故に繋がらないように、天候の情報を受信できる仕組みを作り、一定の基準値を上回る天候の場合、起動しないドローンを作ればいいと思います。

B9.自律走行車両をよりセキュアーにするためのあなたなりのアイデアを聞かせてください.

セキュアーにしようシリーズ③です。課題Aに出たsetjmp関数とlongjmp関数はここで使えるのでは?と考えてここに書きました。3のような自動運転車両はそもそも人や一般乗用車から切り離してみるアイデアも書いてみました。

1.自律走行車両には遠隔地からのハッキングのリスクが伴います。それに抵抗するため、制御システムの構成内容を変更するようなアップデートをするのが効果的だと考えます。車のハッキングに限らず「ありえない急カーブ」や「ありえない急加速」をする命令が出た場合、C言語のsetjmp関数とgetjmpが有効だと考えます。他言語で開発する際も、異常な命令が出る場合、命令を中断して停止あるいは安全な状態にする命令を実行させるのが効果的だと考えます。関数また、不正な道路情報を送り、歩道を走って人を轢くような事故が起こらないためには、地図情報を送受信しているポートに通信改ざんを行わせない暗号通信を行うのが最適解だと考えます。専用線を利用するのも良いかもしれません。また、前述のトラックの縦列走行であれば、雨・あられ・雷など天候の影響など物理的にセンサーが壊れた際には安全に止まれるようなフェールセーフの仕組みを用意しておくといいと思います。自律走行車による交通事故は「勝手に走ってくれる」というドライバーの不注意さから発生するものもあります。そのため、ドライバーがハンドルを握っていないと警告音を鳴らす機能を搭載するなどの必要があります。また、衝突が発生しそうになると停止しようとする「ぶつからないクルマ」の開発も同時にする必要があるのだと考えます。

2.自律走行車両はネットワーク上からの不用意な通信を防ぐため、不要なポートは閉じ、通信もホワイトリスト形式にするなど特定の相手とのみ通信するように設定すべきです。また地図情報の整合性を保つために地図のデータのハッシュ値による整合性確保も必要だと思います。攻撃を検知した際に、安全に止まることのできる仕組み(フェールセーフ)を用意することが必要だと思われます。サーバーと自律走行車両間で信頼性のある情報をやり取りするためにスリーウェイハンドシェイクのような通信の仕組みも必要だと思われます。しかし、道路を走っている以上、データの信頼性を確保する余裕のないものもあるので、例えば、地図情報のようなデータはある程度のタイムラグが許容されるため、各情報・命令ごとに信頼性が必要かどうかを事前に検討し、整合性チェックをするか判断します。

3.自律走行車両の専用道路を作り、道路の下にセンサーや光ファイバのようなケーブルを埋め込むことで、攻撃者の操作、車内のAIやドライバーの誤操作によって道路からはみ出すことのないような道路インフラを作ることが有効だと考えます。また、専用車線にすることで、各車両が判断することなく、専用線を通してまとめて複数台にアクセル・ブレーキの命令を受信することで道路状況も円滑にできるメリットも見込めます。また、自律走行していない車両と分けることで、いくつかの車が同時に停止・減速・加速する際にドライバーが驚いて運転ミスをしないようにできるメリットも見込めます。

B10.IoT機器をよりセキュアーにするためのあなたなりのアイデアを聞かせてください.

セキュアーにしようシリーズ④です。全てに共通する点は先に取り上げ、後半からはもしもこれならこうすればいいんじゃないか?ということを考えて書きました。

1.はじめに、製品自体が攻撃者に直接破壊されないような頑丈な製品づくりが情報レベルのセキュリティ対策をする前段階の物理レベルのセキュリティ保護に繋がります。1つの端末が破壊された場合でもシステムの継続が可能なフェールソフトあるいは安全な状態に停止するフェールセーフの設計も有効です。それを行ったうえで情報セキュリティが活躍するでしょう。端末とサーバー間の通信が漏えい・改ざん・なりすましされないように暗号通信を行うようにすることが基本となります。さらに、IoT製品用のアプリケーションに異常な入力を行っても正しくエラーを返せるようにしなければなりません。また、ウェアラブル端末などの小さくて盗難に逢いやすいものは利用者認証が必要となり、なおかつ、認証しないと中身のデータを見ることができないようなシンクライアントな作りをするのが好ましいと思います。また、認証方法はiphone10のような顔認証をはじめとした生体認証が有効でしょう。端末の記憶装置から情報を取ることが可能となると、ウェアラブル端末の盗難事件が続出する恐れもあるのでこの対策は盗難事故防止にも繋がると考えます。

 2.テレマティクス保険は、利用者が危険な運転をしているにも関わらず、安全な運転をしていると通信を偽装することを防がなくてはなりません。テレマティクス端末から発信する情報のAPIを第三者からは解読できないような構造にする。テレマティクス端末の持つ機能を単純化させるなどの対策が望ましいです。

 3.コネクテッドカーは走行データの盗聴によるストーカー被害に気をつける必要があります。発信する情報はサーバー間と独自の通信方法で通信し、通信ログも閲覧には厳しい権限を付ける必要があります。走行データを発信するクライアントの認証情報にナンバープレートの情報を付加すると、車を目撃した人がそれをもとに調べる可能性があるので付加しないほうがいいでしょう。地図データの整合性を確保できる手段をサーバーとコネクテッドカーのナビゲーション両方に取り付ける必要もあります。

4.ARやVRはグロテスクな映像を第三者から送り付けられることが恐怖となります。ネットワークを中継して行うサービスに関しては、サービス配信元のみがデータの送信を行えるよう設定する必要があります。また、VR空間での会議や設計模様を第三者に盗聴されないようにしなければなりません。遠隔地でVR会議を行う場合、専用線を設ける・ベンダー側が通信を保証する必要があります。

 5.「見える化」することで外部の人間に見られたくないような映像がある場合、同じ部署内の人間など一部の利用者のみがその情報を見える状態にしたい場合は、利用者認証を行うのが有効です。特殊なカンファレンスなど、その場所にいる人だけが見える状態にしたい場合は、位置情報による認証が有効だと思われます。

 6.IoTは盗難や器物破損などの物理的な脅威にも直面します。そのため、盗難・破損されても問題ないような仕組み、その後の利用者へのサポートが要求されます。私はそのような部分もIoTのセキュリティと言えるのではないかと考えます。また、すべてのモノがIoT化することでモノの価値が共通化すれば、特別標的にされることを防げるのではないかと思います。そのために、ウェアラブル端末は全てクラウドを利用したシンクライアントな端末でなければいけないなどの共通規格を設定することで、それぞれの端末ごとに、セキュリティ的に差がないようにするべきです。

 7.スマートスピーカーを搭載するIoTであれば独自開発したスマートスピーカー出ない場合、本来の用途で使う法のスマートスピーカー脆弱性やセキュリティ事故が発生した場合、対策をしなければなりません。発売元が出すパッチを使うことやIoT機器の追加要素として使っている場合は、一般のスマートスピーカーと設計を変える必要があるでしょう。

 

B11.半導体バイスをよりセキュアーにするためのあなたなりのアイデアを聞かせてください.

セキュアーにしようシリーズ⑤です。半導体に対するものは一般論しか書くことができなかった点が悔しかったです。

物理的に複製できないような特性を付与し、同じ型番の半導体でも同じということがないという特性からなりすまし・クローン複製を対策します。暗号鍵を盗もうとするような攻撃を受けた場合、それに応じて何らかの変化を行うことで、暗号鍵の盗難を防止します。ハードディスクのデータ漏洩を対策するためにセキュリティチップを実装するのが好ましいです。パソコンのハードディスクを抜き出されても、復号することが困難となり、情報漏洩対策になります。

B12.あなたの情報セキュリティに対し思うところを自由に書いてください.

私が情報セキュリティに触れたきっかけから書き始め、それから地方キャンプ・セキュリティ勉強会に参加して情報セキュリティを勉強したい!という経緯を1に書きました。2は応募当初の就職志望先を書いていました(IoTの中でも自動車関係にズームインして当時は考えていましたが、今はあまり固執せず、IoT全体とズームアウトして考えています。)3はSECCONに参加した感想文です。(獲得したフラグは実はwelcome問題のことでした。)5が当時のセキュリティ・キャンプに対しての本音です。ちなみにそれからセキュリティ・キャンプに対してどう思っているのかは近日ブログをアップ予定です。

1.以前、私には基本情報技術者試験合格程度のセキュリティ知識はありましたが、実際のセキュリティ技術はあまりありませんでした。しかし、セキュリティ・キャンプ地方大会に参加し、講座を受講することで、自分でも学べることがないか?自分でできる情報セキュリティにまつわることはないか?と考えるようになりました。また、この地方大会の最中に、少し離れたところでの開催ではありますが、興味を持った講座があったのでミニキャンプにも参加しました。普段触れることのない分野のセキュリティに触れ、貴重な講座も受講できたので、1人で参加できたことはとてもよかったです。それから、地元で開催されるセキュリティ系のIT勉強会にしばしば参加するようになりました。参加してもほとんど理解しきれないような状況が多々ありますが、少しでも持ち帰れるような知識はないか?と常に考え参加し、少しずつ知識と技術を身に着けました。今では、こうしてセキュリティ・キャンプ全国大会に出たい!と思えるほどに情報セキュリティのことを考えるようになりました。

2.私は今就活真最中です。あの時、セキュリティ・キャンプ地方大会に参加させていただいたおかげで、セキュリティ企業かセキュリティを取り扱っている大手IT企業。また、セキュリティについて調べていくうちにIoTの中で最もセキュリティが重要視されているコネクテッドカーセキュリティに興味を持ったため、自動車メーカーないし自動車関連企業に就職して、セキュリティの仕事がしたいと考えるようになりました。働きたい業界を決めるきっかけを情報セキュリティは私に作ってくれました。そのきっかけが良いきっかけとなるように、一番自分が入りたい会社に入社できるよう、就職活動を頑張っています。

3.また、校内でも同志に恵まれ、SECCON Beginners CTF 2018にも参加しました。私は1つのフラグを回収し、全体で19個のフラグのうち、9個のフラグの回収に成功しました。チームで役割を決めてフラグを手に入れるのは、すごくやりがいを感じました。また、初めてのCTFコンテストだったので、解答用のツールを常に増やしつつそのツールの使い方を見つつなんとか正解に導いていきました。Netcatなどの知らないツールについて知り、それを使うことは、問題解決のためにグーグルで検索してネット上でヒントを探して解く力・今まで見たことのない問題に立ち向かう力を得るきっかけとなりました。今後は専門学校生を対象としたセキュリティコンテストに参加し、少しでも良い順位に入賞しようと私を含めた5人で頑張っています。さらに、SECCONなどの大型CTFにも参加しようと意気込んでいます。情報セキュリティを通して同志と出会い、共に情報セキュリティについて取り組む仲間と会うきっかけになった情報セキュリティには感謝しています。

4.セキュリティに対するチャレンジ精神は特に大事にしています。株式会社ラックの『即!西本』特別技能CTFチャレンジに参加しました。CTFの問題は全て見て、挑戦したのですが、1問も正解にたどり着くことはありませんでした。しかし、少しでも正解に近づけるようにいろいろしようとするのは楽しかったです。また、Sechack365にも応募しました。やりたいことを全面に押し出して頑張って書いたのですが、残念ながら選考に落選してしまいました。思い切って長期ハッカソンに参加しようとした精神や応募文書に意気込みをありったけ書いたことは今でも役に立っています。

5. 恐らく、私は他の応募者と比べるとセキュリティ技術に関する能力は最も低いでしょう。しかし、情報セキュリティを学びたい・情報セキュリティをやりたいという気持ちは誰にも負けません。もし、採用された場合、事前課題は誰よりも解答が遅くなるかもしれませんが、必ずやり遂げてみせます。そしりたいという気持ち。キャンプ前・キャンプ中・キャンプ後もそのやる気・実行する力を継続して少しでも誰かの役に立てるような情報セキュリティ技術者になりたいです。

6.それから、仮想通貨など情報セキュリティにまつわる事件にはかなり敏感になるようになりました。最近でも、Twitterがパスワード流出した恐れがある事件が発生したり、メニコンの顧客情報が流出する事件が発生したりしました。特にメニコンはクレジットカードの情報が流出し、668万円の被害が出ています。これを見て、企業側は何か対策できることはなかったのだろうか。自分にできることはないだろうかとしばしば考えています。特に、仮想通貨については、ブロックチェーンなど高度な技術で行われていることが多く、かなり複雑だということを把握しています。そのような高度な技術が関わっている仮想通過ですが、コインチェックの「NEM」流出事件が発生しました。その際にホワイトハッカーが流出したNEMの追跡をしているという情報を見て、高度なホワイトハッカーの存在の重要さを知りました。

7.私は情報セキュリティに関わることで、多くの人と知り合うことができました。また就職するにあたって、やりたいことを導き出すきっかけにもなってくれました。そのような情報セキュリティを私は私自身の力でこれから発展させたいです。そのために、これからも新たな情報セキュリティを求め、勉強し続けたいです。また、いずれはセキュリティキャンプ講師となれるような技術力・プレゼンテーション能力を持って、私が取り組むコネクテッドカー・自律走行車両セキュリティについて広めたいです。

B13.あなたの作りたいものは何ですか。それは世の中をどの様に変えますか.

この部分は当時、自分がこんなことができたらいいなを書き連ねていました。

1.私は交通事故を減らせるようなコネクテッドカー(自律走行車両)のセキュリティ製品開発をしたいです。私が作るセキュリティ製品によって情報セキュリティ面で安全なコネクテッドカーを開発します。これにより、コネクテッドカーを普及させることで、次第に交通事故発生件数が減っていき、2025年には交通事故発生件数が10000件を切るような社会を日本で築き上げたいです。恐らく、年々コネクテッドカーへの攻撃が増え、コネクテッドカーによる交通事故が発生するでしょう。しかし、同じ事件を繰り返させないようにビックデータやAIを活用し学習させ、製品の新バージョンを作成し、アップデートしていき、脆弱性を減らしたいです。そうして、交通事故自体が無くなるようにしたいです。

2.私にはある理想があります。それは、車社会を完全な自律走行車社会とし、免許も最低限の訓練で取れるようにします。これにより、自ら車を所有することが趣味となり、車を所有する人が少なくなり、多くの人は自動車メーカーと携帯会社のような契約をして、サブスクリプション制で自動車に乗ります。利用者は配車アプリから車種・時間・場所を指定して配車します。車は基地局や大型の車庫から指定地に指定の時間通りに到着するよう自律走行します。指定地に利用者が着いたら、乗車し、目的地を指定します。目的地までも自律走行で案内します。利用料は月ごとに走行距離などから計算して支払いします。保険も自動的に加入して、この支払に含ませます。

このような自動車社会ができると、自動車メーカー側は携帯会社のように、車内の内装に斬新なアイデアを盛り込む・車の外装に流行色を取り入れる・社内Wi-Fiなどの独自のサービスを提供する・マッサージチェアを設置するなどして他メーカーと差を付け、利用者を増やすようになります。さらに、よくレンタルされる車のデータを閲覧することで、人気の車種の生産に必要な台数などを計算することができます。車がサブスクリプション制で手軽に乗れるようになり、自動車メーカーもサービスを売り上げやすくなることを期待します。また、好きな場所・好きな時間に配車ができるので、バスやタクシーなどの公共交通機関を撤廃し、バス・タクシードライバーに職業教育を施し、人手不足な業界に人材を供給することもできます。また、車両の走行状況をビッグデータ化して解析して渋滞緩和することで、時間のズレが生じずに走行できるようにすれば、到着予定時間も正確に予測することができます。特に、自律走行車両により交通事故の発生・死亡事故の発生が完全に抑制されるように変えることができればいいです。私はそんな社会が作りたいです。そのきっかけになるヒントをこのセキュリティ・キャンプで見つけ、この理想実現に近づけます。

3.普段、勉強会に参加しない社会人エンジニアや学生を対象としたかなり難易度の低い分野を問わない勉強会コミュニティを作りたいです。このコミュニティを作ることで、普段勉強会に行かない人に他のエンジニアと交流する機会を与え、普段触れない概念について説明をすることで、参加者のITに関する視野を広げさせたいです。例えば、営業が中心のシステムエンジニアプログラマーがプログラムあるあるを話すことでプログラマーが普段どんな考えや感情で仕事を行うかを知ります。ネットワークを介さない社内システムを構築するエンジニアにセキュリティエンジニアが内部過失の損害を話すことでこれまでセキュリティを考えてこなかったエンジニアにセキュリティについて考えてもらいます。学生に対しては、各業界のあるあるを聞くなどしてweb業界やセキュリティ業界などの働きたい分野を絞り、システムエンジニア・コーダー・プログラマー・運用エンジニア・セキュリティエンジニアといった働きたい職種を絞るきっかけになってもらえるような場を提供します。