スマートコンセントを応用した BYOD 環境におけるユーザ認証
宮下 卓也*

山﨑敦史**

User Authentication for BYOD with Smart Power Supply
MIYASHITA Takuya and YAMASAKI Atushi
BYOD PCs are student-managed and it is not authenticated by server on the school network. When a network trouble isoccurred by the BYOD PC, administrators cannot investigate the reason because they don’t know who is using the network.
This is a serious problem about information security.To solve the above problem, a smart power supply system for the PCs
was developed in this study. The system consisted of a controller computer, an IC card reader and some smart plugs. ThePCs were connected to the smart plugs and they were supplied under contorting by the smart plugs with application
programs for smart phones. The IC card reader could authenticate the students with their student card. The Raspberry Pi
was adopted as the controller computer.
Key Words: User Authentication, Smart Plug, BYOD, Information Security, Raspberry Pi

１．緒言

現代社会においてはコンピュータやインターネットを活用できる能力は必要不可欠と言っても過言ではない。それゆえ、文部科学省においては「情報活用能力」を学習の基盤となる資質・能力と位置付け、小学校学習指導要領にプログラミング教育を導入するなど、教育の情報化を推進している状況にある 1)。
津山工業高等専門学校（ 以下、津山高専と記す）
は高等教育機関であるため、初等教育機関における情報化推進より前から情報教育の必要性は気づいており、随分以前から校内に教育用パソコンを備えた演習室を設けている。しかしながら最近になり、教育用パソコンの導入・管理の費用がかさむことが問題となり、多くの教育機関で教育用パソコンを導入する代わりに BYOD（Bring Your OwnDevice）を推進するようになってきた。津山高専
でも令和 2 年度入学学生から、すべての新入生にノート PC の購入あるいは準備をすることになっている。
旧来の教育用パソコンは学校の管理下にあったため、そのパソコンが原因でネットワークトラブルが発生した際に利用状況を特定することは難し

原稿受付 令和 3 年 8 月 24 日
＊総合理工学科 情報システム系＊＊電子・情報システム工学専攻 1 年

いことではなかった。しかしながら BYOD PC は学生の管理下にあり、学生が望む時に望むままに利用されることになるため、ネットワークトラブルが発生した際に利用状況を特定するのが困難である。教育機関のネットワーク管理者としては、少なくとも利用者を特定し、当該学生から利用状況を確認する必要がある。そのためには BYOD PC のユーザ認証をする必要がある。
無線 LAN あるいは有線 LAN を利用する際に、IEEE802.1X 認証によるユーザ認証機能が利用されているならば、ネットワーク利用時にユーザを特定することが可能である。津山高専の基幹ネットワークにおいては、学生向けに公開されている無線 LAN では MAC アドレス登録と IEEE802.1X 認証が行われているので、利用者が特定できないという問題はない。ただし、構内の小規模な演習室においては、IEEE802.1X 認証が用意されていないことも少なくないと考える。その理由には、IEEE802.1X認証を構築するための費用や運用するための技術力が要求されることが考えられる。
そこで、BYOD 環境でのユーザ認証を行うシステムの開発を研究目的とした。具体的には、BYOD PCのために用意する電源コンセントに着目した。多くの学生は、電源コンセントが用意されていれば、ほぼ間違いなく電源コンセントを利用する。そこで、学生を認証してコンセントに通電するような仕組みを設ければ、利用者を特定できると考えた。
また、学生を認証するための情報源には、IC カード機能を有する津山高専の学生証が活用できると- 17 -

津 山 高 専 紀 要
考えた。
電源の通電あるいは遮断はリレー回路を用いれば実現できるが、商用電源は電力が決して小さくないため、安易な工作で発火などのトラブルが発生することが懸念される。そこで、本研究では電源の制御にスマートコンセントを用いることにした。スマートコンセントは、ネットワークを介して、家電製品への給電を制御できる製品である。
以上のことから、学生証を読み取り、その結果に応じてスマートコンセントによって、コンピュータへ電源を供給するシステムを実現すればよいという発想に至った。このようなスマートコンセントを応用し、ユーザ認証を行うシステムの開発をすることが、本研究の目的である。

条件 2

条件 3

(1) 学生 A がシステム操作画面（GUI）で、例えばPC1 をクリックする(2) 学生 A が自分の学生証を IC カードリーダに接触させる(3) 制御用コンピュータが学生証の ID 部分を抽出し、認証用データベースと照合する(4) 照合結果が正常であれば制御用コンピュータが IFTTT 経由で PC1 用のスマートコンセントのスイッチを入れる(5) その結果、スマートコンセント経由で PC1 にのみ電源が供給される(6) 学生 A は PC1 の電源ボタンを押し、PC の利用を開始する

本研究では開発するシステムを、電源制御シス
テムと記す。このシステムのイメージを図 1 に示す。

電源制御システムによって各 PC の電源が上記のように制御される結果、各 PC の利用者を学生証に基づいて特定することが可能となる。
なお、PC の利用が終わった際に上記とほぼ同じ手続きで終了通知をしてもらうべきであるが、面倒に感じる学生は終了手続きをしないことが考えられる。そこで、スマートコンセントの消費電力をモニターし、利用がなくなったら自動的にスマートコンセントをオフにするようにするか、タイマー機能によって電源を遮断するなどの対応をすることが考えられるが、現時点では未対応である。

電源制御システムの構成図

電源制御システムは、学生証（IC カード）を読み取る IC カードリーダ、スマートコンセント、およびそれらの制御用コンピュータによって構成される。このシステムの制御には、種々の機能との連携を考慮し、Python2)によるプログラムを用いる。
スマートコンセントは専用アプリである「TP-LinkKASA」または「Smart Life」により電源の ON ある
いは OFF を切り替える。このスマートコンセントの制御には、様々なサービスとサービスの連携を可 能 と す る API を 提 供 す る ク ラ ウ ド サ ー ビ ス
IFTTT3) を経由して行う。
図中の各 PC は、以下の条件を満たしたときに、スマートコンセントから電源が供給される。
条件 1

PC の利用前に学生証を IC カードリー

ダに読み取らせている
IC カードの読み取り結果が、認証用デー
タベースに登録されている学生証の情報と一致する
読み取られた IC の ID がすでに別の PCで使用されていない

学生 A が PC1 用コンセントを使用する際の手順と、電源制御システムの動作は以下のようになる。

２．電源制御システムの概要

図1

第 63 号 （2021）

３．ハードウェア構成要素のセットアップ
３．１ 制御用コンピュータと IC カードリーダ制御用コンピュータとして次の条件を満たすコンピュータを採用する。
・ネットワークに接続可能
・カギ付き BOX に収納可能な小型筐体
・OS およびプログラミング環境の存在
スマートコンセントは無線 LAN 経由で制御されるため、制御用コンピュータはスマートコンセントと同じ LAN に接続されている必要がある。また
電源制御システムを直接学生が触ることができる- 18 -

スマートコンセントを応用した BYOD 環境におけるユーザ認証 宮下・山﨑と、電源を別の場所からとったり、スマートコンセントを強制的に ON にしたりすることができるようになる。そのため、電源制御システムの根幹部分はカギ付き BOX などに収納する必要がある。
最後の条件については、本システムの機能を実現するために当然必要な条件である。
以上のような条件を満たすコンピュータとして、本研究では Raspberry Pi3 Model B（以下ラズパイ）を採用した。ラズパイを利用するためには、まず最初に OS をインストールする必要がある。本研究
では、Raspbian を OS として採用した。
IC カードである津山高専の学生証を読み取るために、ラズパイに IC カードリーダを USB ポート経由で接続する。今回は「非接触 IC カードリーダ/ライター Pasori（SONY 社製 RC-S380）」（以下カードリーダ）を使用した。ラズパイでカードリーダを使用するためには、「nfcpy」 4) の導入が必要である。nfcpy は Python で IC カードリーダを使用可能にするモジュールであり、ラズパイのターミナルで図 2 のコマンドによってインストールする。
$ sudo pip3 install –U nf cpy
図2

nfcpy インストールコマンド

続いて、プログラム実行時に sudo を不要にするために、USB デバイスに関する設定を変更した。
そのコマンドを図 3 に示す。なお、紙面の都合上で複数行表示としているが、実際には各先頭が$であり、合計 2 行のコマンドである。
以上の作業を行い、IC カードの読み取り試験を行ったところ、問題なく動作していることが確認された。
３．２ スマートコンセントとの接続
本システムでは制御用コンピュータから、サービスパイプ機能と言える Web サービスの IFTTT 宛に、電源を制御する命令を与える。制御命令を受け取った IFTTT は、スマートコンセントに対して制御信号を送る。このような処理を実現するための設定手順を説明する。
本研究では、IFTTT を利用してネットワーク経由で制御できるスマートコンセントして、Gosund（型番 Gs-wp6）と tp-link（型番 HS105）の 2 種類を用いた。
スマートコンセントは、本来はスマートフォンから電源の ON/OFF をする電源コンセントである。
その制御には、各メーカから提供されているスマートフォンアプリを用いる。具体的には、Gosund
は Smart Life - Smart Living 5)、tp-link は Kasa
Smart6) というアプリを使用する。この 2 つのス
マートコンセント制御アプリは IFTTT と連携可能なものである。
まず最初に、スマートコンセントの制御に関する設定作業を行った。各アプリを起動し、画面表示に従って作業を行ったところ、スマートフォンとスマートコンセントを接続することができた。
IFTTT では IFTTT に対応しているサービス同士を連携させることが可能である。IFTTT は「IF This
Then That」の頭文字であり、「もし、これをしたら、あれをする」という意味である。サービスを連携するときは「これをしたら」にあたる「トリガー」と「あれをする」にあたる「アクション」を設定する。本システムにおいては、トリガーは「スマートコンセントのスイッチを入れるための条件が満たされた」であり、アクションは「スマートコンセントのスイッチを入れる」となる。
先述のように、本研究で使用している 2 つのス
マートコンセントの制御アプリは、IFTTT に対応している。そのため、IFTTT のアクションに指定すれば、IFTTT を介してスマートコンセントの制御が可能となる。一方、トリガーは制御用コンピュータからの命令送信が該当することになる。ト
リ ガ ー の 実 現 の た め に 、 IFTTT に 対 応 し て い るWebhooks7) を使用した。
Webhooks とは、Web アプリケーションでイベントが実行された際に外部サービスへ HTTP で通知する仕組みである。IFTTT の公式サイトでトリガー
サービスとして Webhooks を選定すると、IFTTT アカウントに対してユニークな暗号キーが割り振られる。制御用コンピュータでは Python で作成した$sudo sh −c ’ echo SUBSYSTEM==¥” usb ¥ ” , ACTION==¥” add ¥ ” , ATTRS{ idVendor }==¥”054 c ¥ ” ,ATTRS{ i d P r o d u c t }==¥”06 c3 ¥ ” ,GROUP=¥” plugdev ¥” >> / e t c / udev / r u l e s . d / nf c d e v . r u l e s ’$ sudo udevadm c o n t r o l −R # t h e n re −a t t a c h d e v i c e

図3

USB デバイスの設定変更コマンド- 19 -

津 山 高 専 紀 要
制御プログラム（詳細は次節で述べる）が動作している。スマートコンセントを制御する場合には、制御プログラムが HTTP 通信で IFTTT の Webhooks
トリガーへ暗号キーを含めて POST する。その結果、
IFTTT で Webhook を受けて、スマートプラグが操作されることになる。

４．電源制御システム用プログラムの開発
４．１ 利用者向けの操作画面とマルチスレッ
ド処理
2 節で説明したように、電源制御システムによって管理しているコンセントを利用する際は、まず最初に利用者がシステム操作画面（GUI）で使用したいコンセントを選択する必要がある。このための操作画面について説明する。
Python には tkinter8) という標準のグラフィックユーザーインターフェース（以下 GUI）フレームワークがある。本研究では、システム操作画面を
実 現 す る に あ た っ て 、 tkinter を 拡 張 し た
tkinter.ttk モジュール 9)をインポートして使用した。作成したシステム操作画面を図 4 に示す。

第 63 号 （2021）
GUI クラスは操作画面を表示するために、根幹的な部分である root.mainloop( )関数を使用する必要がある。この関数はプログラムが停止するまで、その動作を繰り返すようになる。その結果、画面表示のために関数が実行された場合、繰り返し処理から抜け出すことができなくなり、他の処理を実行することができない。
この繰り返し処理の問題を解決するためにマルチスレッド処理を実装した。制御プログラムにおいて root.mainloop( )関数を実行する前に他の処理をマルチスレッドで実行するように実装し、図 5に示すように並行して処理を実行するようにした。

図5図4システム操作画面

図 4 中のボタンの色は各コンセントの使用状況を表示している。緑色であれば（その時点では）誰も利用していないことを意味しており、赤色であれば誰かが利用していること意味している。利
用者が PC を利用しようとして、ある空きコンセントを選択した場合にボタンは緑色からオレンジ色に変化する。
システム操作画面の GUI クラスは次の処理を実装した。
・操作画面の設定
・操作画面のループ表示
・操作から処理を実行
・IC カードの読み取り管理
・プラグ起動関数の呼び出し

GUI のマルチスレッド処理

４．２ 学生証の読み取りプログラムとマルチスレッド処理
先に述べた IC カードである学生証を読み取るための Python モジュールである nfc.py は、プログラム中で利用するとカードを読み取るまで待機状態となる。その結果、他の処理に移行することができない。もし利用者があるコンセントを選択し、学生証を読み取る時点で利用をとりやめたいと考えた場合は、すでに IC カード読み取りの待機状態となっているため、何らかの中断処理が必要となる。IC カードを読み取る前に動作を中断する方法はプログラムを停止させる以外に見つけることができなかった。そこで、別の選択キャンセルの方法を実現した。読み取り動作を中断せずに選択のキャンセルを行う方法を次ページの図 6 に示す。
図 6 に示すように、制御プログラム中から操作画面を表示する前に IC カードの読み取り動作がマルチスレッドかつ無限ループで実行される。そのスレッドではカードの読み取りプログラムが ICカードを読み取るまで待機状態となり、常に読み取り後に読み取り動作を繰り返す。操作画面で利用希望 PC の未選択状態で IC カードを読み取った- 20 -

スマートコンセントを応用した BYOD 環境におけるユーザ認証 宮下・山﨑
場合、不正な読み取りとして読み取り待機状態に戻る。ここで、利用希望の選択状態を判別するため変数 isSelect を実装した。isSelect の値は操
作画面の利用希望 PC が選択されているときにはTrue、選択されていないときには False が代入されている。

で読み取った後、IC カード情報に基づいてユーザ認証が行われる。認証を行うための身元情報はデータベースで管理するように実装した。電源制御
システムにおけるデータベースは図 7 に示す ER図のような構造で構築した。なお、現段階ではプロトタイプ作成を行っており、データベースの正規化は深く行っていない。
データベースは 3 つのテーブルに分かれている。
1 つめは学生の名前や学籍番号および IC カード IDなどの情報をレコードとして持つテーブルである。
2 つめはコンセント使用記録を保存するテーブルである。3 つめはその時点での利用状況を保存するテーブルである。
Python には簡易的にデータベースを作成可能な SQLite310)モジュールがある。本研究では、オブジェクト（DAO）を生成するクラス Dao.py を作成した。本システムの DAO は次のような機能を持つ。
・ 学生管理テーブルの作成
・ 使用ログ記録テーブルの作成
・ 利用状況テーブルの作成
・ 学生管理テーブルに学生の情報を追加
・ 学生管理テーブルから学生の情報を取得
・ 使用ログ記録テーブルに使用ログを追加
・ 使用ログ記録テーブルから使用ログを取得
・ 利用状況テーブルに利用状況を更新
・ 利用状況テーブルから利用状況を取得
・ データベース情報をファイルに保存

図6

カードの読み取り処理フローチャート

キャンセルボタンが押下されキャンセルされる処理が発生すると、isSelect に False が代入され未選択状態となる。先述したとおり未選択状態でIC カードを読み取った場合、不正な読み取りとなるためキャンセル処理が実装されている。
４．３ ユーザ認証用データベースの実装
電源制御システムにおいて、学生証を IC カード

図7

電源制御システムでは、上記の SQL 関係の機能を利用して、ユーザの認証をしたり、使用ログを記録したりしている。
４．４ 不正利用の通知機構の実装
電源制御システムでは、条件を満たされた場合にのみコンセントが利用可能となる。逆に、条件を満たさなかった場合は、何らかの不正利用状態となっている。そこで、この不正利用時にシステ

システムデータベース ER 図- 21 -

津 山 高 専 紀 要
ムがビープ音を鳴らし、利用者に注意喚起をするようにした。
注意喚起のビープ音は以下のいずれの条件で鳴る。その際は、スマートコンセントは ON にならないため、電源として利用することはできない。
・ 操作画面においてコンセントが選択されていないまま学生証を読み取ったとき・ データベースに登録されていない学生証 IDを読み取ったとき・ すでにコンセントを使用している学生証 IDを読み取ったとき

５．動作確認試作したシステムについて、3 人の正規利用者と1 人の非正規利用者を想定して、個別あるいは同時の利用状況を想定し、動作確認を行った。その概要と結果を以下に示す。なお、ユーザ A、B、C が正規利用者、ユーザ D は非正規（未登録）利用者とした。

第 63 号 （2021）
本システムで採用している IFTTT や Webhook の仕様が変わったり、あるいは利用料金の増加がなされるなどの利用制限が行われたりすると、根本からシステムの処理方法の変更が必要になる。さらにはインターネット経由でのクラッキングに対しての検討もまだできていない。これらの問題の解決は、今後の課題である。
また、そもそもの問題として、学生が電源コンセントを利用しない場合は、本システムではユーザ認証を行うことができない。ただし、津山高専
では無線ネットワーク利用時にユーザ認証が行われているため、現実に利用者が特定できない状況
はネットワークも電源も利用しないスタンドアローンな状況のみである。この場合は、そもそも構内ネットワークに対してのトラブルの原因となる可能性はかなり低いと考える。
参1)

文部科学省

考文

献

教育の情報化の推進: https://www.mext.

go.jp/a_menu/shotou/zyouhou/index.htm（参照 202108-14).

試験 1：ユーザ A による複数コンセントの利用
結果 1：2 つめ以降は利用不可だった2)

python: https://www.python.org/（参照 2021-08-15).

3)

IFTTT: https://ifttt.com/（参照 2021-08-15).

4)

ra spber ryP i に N FC リ ー ダ ー を つ な ぐ : https ://試験 2：ユーザ A、B、C が各 1 コンセント同時利用
結果 2：複数利用可能だった

qiita.com/irutack/items/61a783eb9d5c78d5a3f6 （参照2021-08-15).
5)

試験 3：ユーザ D による利用結果 3：認証不可のためコンセント利用不可だった

store/apps/details?id=com.tuya.smartlife&hl=ja&gl=
US（参照 2021-08-15).
6)以上の動作確認の結果、システムが正常に動作していることが確認できた。

KasaSmart: https://play.google.com/store/apps/
details?id=com.tplink.kasa_android&hl=ja&gl=US （参照 2021-08-15).

7)

６．まとめ

Webhooks: https://ifttt.com/maker_webhooks （ 参 照2021-08-15).

8)

本研究では、学生管理の BYOD PC に対して、スマートコンセントを応用してユーザ認証を行うシステムを開発した。
動作試験の結果、想定した利用に対しては、システムが正常に動作していることが確認された。
ただし、現段階は試作中のため、制御用コンピュータや IC カードリーダおよびスマートコンセン
トがむき出しの状態であり、カギ付き BOX には収容していない。また、現時点では問題ではないが、SmartLife - Smart Living: https://play.google.com/

Tkinter --- Tcl/Tk の Python インタフェース: https://docs.python.org/ja/3/library/tkinter.html（参照 202108-15).

9)tkinter.ttk --- Tk の テ ー マ 付 き ウ ィ ジ ェ ッ ト :https://docs.python.org/ja/3/library/tkinter.ttk.
html（参照 2021-08-15).

10)

SQLite3 --- SQLite データベースに対する DB-API 2.0
イ ン タ フ ェ ー ス : https://docs.python.org/ja/3/
library/sqlite3.html（参照 2021-08-15).

- 22 -