2017年12月9日土曜日

100円SIMのいいところと面倒なところ

2017年7月、NTTコミュニケーションズが100円SIMのサービスを発表しました。価格から惹かれるところがあり内容を伺ったところ、周囲の人からも「あれどう?」ときかれたことがあったのでメモを残しておきます。

Arcstar Universal Oneのオプションのような位置づけ

NTTコミュニケーションズのVPNサービスArcstar Universal Oneの契約が必須(VPNに接続する回線の設置工事等も必要)であり、100円SIM単独での利用はできません。さくらやSORACOMのようにSIMを購入して使うのではなく、VPNサービスへの入り口としてSIMが100円で提供されるというものです。

Arcstar Universal Oneは仮想とはいえ閉じているので、デバイスからのセンシティブなデータでも比較的安全に送信ができます。保存するデータベースは、NTTコミュニケーションズが提供するVPN内のサーバを使うパターンと、VPNからAWSやMicrosoft Azureなどの各種クラウドサービスに接続するパターンが用意されています。

大規模な業務用途向け

最低発注数量は100枚という記載もどこかにあったので、外部に絶対に流出させたくないセンサーデータを安全かつ大規模に収集するような用途等、業務用として使うものということでした。また、記載のような業務用なので、NTTコミュニケーションズの営業さんへの見積もりが必須です。個人もしくは小規模での3G/LTE回線がほしいという話ならば、sakura.ioやSORACOMの利用を検討したほうがよいと思います。

2017年2月13日月曜日

Web Bluetooth APIをつかうにあたって気になったこと

Chrome最新版でWeb Bluetooth APIが使えるようになり、実際に動かしてみました。コードを書いたり関連したドキュメントを読むにあたって、気になった箇所をまとめておきます。

なぜWeb Bluetooth APIを作ったのか

Until now, the ability to interact with bluetooth devices has been possible only for native apps. The Web Bluetooth API aims to change this and brings it to web browsers as well.
Interact with Bluetooth devices on the Web By François Beaufort

BLEに限らず、端末の各種ハードウェアを動かすにはネイティブアプリからでないと無理だった。Webアプリでもネイティブアプリがやっていることを実現できるようにしようとするのがこのAPIの目的です。WebGLやWeb Audioの流れと、これからUSBシリアル通信を実装しようとしている未来を考えれば、まあ実装するよねという感じがします。ブラウザがOSになろうとしていた時期の計画と野望を、着々と進めているんだなという印象です。

なぜ動作に制限が多いのか

コードを動作させるにあたって、(いま私が認識しているだけで)下記の制限があります。

  • HTTPでは動作しない(localhostを除く)。HTTPSやfile://では動作する。
  • クリック等のユーザーからのアクションがないと開始できない。onloadなどで自動的に開始するのは不可。
  • 一部接続しないサービスが定義されている

HTTPでは動作しない

localhostを除き、HTTP接続ではnavigator.bluetooth.requestDevice()を実行してもerrorとなります。HTTPでも許可されるのはlocalhostのみで、プライベートIPアドレスでもHTTPならerrorです。

これは、Web Bluetoothに限った話ではありません。ブラウザの強力な機能を使う際には、少なくともそのサーバの出処がはっきりしているものだけに制限しておきましょうというもので、"Secure Origins"と呼ばれています。

ユーザーからのアクションがないと開始できない

確実にユーザーの意思によって動作させる必要があります。ページ読み込みと同時にバックグラウンドで勝手に動かすのは不可です。たとえば、もしユーザーがBLEで座標を飛ばせるGPS受信機(こういうものはLocation and Navigation Serviceを使って飛ばしていると考えられます)を使っていたら、バックグラウンドでユーザーがどこにいるのかが結構な精度で取得されることも考えられます。

一部接続しないサービスが定義されている

キーボードやDFU等の特に扱いが敏感なサービスについては、そもそもAPIからブロックされています。ブロックリストはこちら。ちょっとした理由も含めて記載されています。

どのような場面で使うのがよいのか

スマホアプリの代用とした使い方がいいのかなと思います。ちょっとした機能としてのみ使うときに、わざわざ専用アプリをストアからインストールしてもらう必要がなくなります。特定の施設内に対応したビーコンを使うためとか、Amazon Dash Buttonのようなデバイスの接続設定を書き込むためとか、そのくらいの用途のためにわざわざアプリをインストールするとなると、面倒くさいからいいわとなるのを防げそうとは考えられます。

一方で、この「専用アプリをストアからインストールしない」が、そのまま脆弱性につながるように思います。どのサービス・キャラクタリスティックに接続しているかは、Webページが何もしなければ特に明示されません。ユーザーにきちんと明示しておくようと記載されています

参考文献

2017年1月20日金曜日

Intel Edisonのカーネルを自前でビルドして入れ替える方法

IntelのEdisonでfbtftを実行する方法が公開されていたので試してみようとしたら、カーネルビルドにすごい手間取ったので詰まった箇所をまとめておきます。

Intel配布の最新版は初回ビルドが通らない

これを書いているときの最新版はiot-devkit-yp-poky-edison-20160606.zipですが、bitbake edison-imageのコマンドでビルドを始めても、OpenJDKまで来るとビルドが止まります。フォーラムでキレている人自分でJavaを筆頭に最低限まで削ったソースを配布していますが、これは本当に最低限なのでNode.jsやconfigure_edison等は含まれません。とりあえずJavaだけなくなれば初回のビルドは通るので、ソースコード内の設定ファイルからOpenJDKとicedtea関係の箇所をどんどん削る必要がありました。どこをどう削ったかは忘れた。

それに加えて、iotkit-comm-jsとiotkit-comm-c-devも削る必要があります。これはIntelのIoT Analytics dashboardの運営が終了となったため、それにともなって対応するライブラリ群がIntelのGiuHubから削除されたことが原因になっています。修正箇所はフォーラムの記載を参照してください。

カーネルモジュールをビルドする

基本的にIntelが公開しているページの内容どおりです。が、上記最新版では.configの位置が build_edison/tmp/work/edison-poky-linux/linux-externalsrc/1.0-r2/linux-externalsrc-1.0/.config に、置き換えるdefconfigの位置が poky/linux-kernel/arch/x86/configs/i386_edison_defconfig にそれぞれ変わっています。

動きました

Intel Edison with TFT Display