以下の説明では、説明を目的として、以下に記載される本発明の実施形態の完全な理解を提供するために、多数の特定の詳細が示される。しかしながら、本発明の実施形態がこれらの特定の詳細のうちのいくつかを用いずに実施され得ることは、当業者には明らかである。他の例では、本発明の実施形態の根本的な原理を不明瞭にすることを避けるために、周知の構造及びデバイスをブロック図の形態で示す。
本発明の一実施形態は、新しいIoTデバイス及びアプリケーションを設計及び構築するために開発者によって利用され得るモノのインターネット(IoT)プラットフォームを含む。具体的には、一実施形態は、既定のネットワーキングプロトコルスタックを含むIoTデバイス、及びIoTデバイスがインターネットに連結されるIoTハブ用の基本ハードウェア/ソフトウェアプラットフォームを含む。加えて、一実施形態は、IoTサービスを含み、これを通じてIoTハブ及び接続されたIoTデバイスが、以下に説明するようにアクセスされ、管理され得る。加えて、IoTプラットフォームの一実施形態は、IoTサービス、ハブ、及び接続されたデバイスにアクセスし、それらを構成する、IoTアプリケーション又はウェブアプリケーション(例えば、クライアントデバイス上で実行される)を含む。既存のオンライン小売業者及び他のウェブサイトオペレータは、本明細書に記載されたIoTプラットフォームを利用して、既存のユーザベースに独自のIoT機能を容易に提供することができる。
図1Aは、本発明の実施形態を実装することができるアーキテクチャプラットフォームの概要を例示する。具体的には、図示の実施形態は、それ自体インターネット220を介してIoTサービス120に通信可能に連結されている中央IoTハブ110に、ローカル通信チャネル130を介して通信可能に連結された複数のIoTデバイス101〜105を含む。IoTデバイス101〜105のそれぞれは、ローカル通信チャネル130のそれぞれを有効にするために、IoTハブ110と最初にペアリングすることができる(例えば、後述するペアリング技術を使用して)。一実施形態では、IoTサービス120は、各ユーザのIoTデバイスから収集されたユーザアカウント情報及びデータを維持するためのエンドユーザデータベース122を含む。例えば、IoTデバイスがセンサ(例えば、温度センサ、加速度計、熱センサ、動作検出器など)を含む場合、データベース122は、IoTデバイス101〜105により収集されるデータを記憶するように継続的に更新され得る。次いで、データベース122内に記憶されたデータは、ユーザデバイス135上にインストールされたIoTアプリケーション又はブラウザを介して(又はデスクトップ若しくは他のクライアントコンピュータシステムを介して)エンドユーザに、かつウェブクライアント(例えば、IoTサービス120に加入しているウェブサイト130など)に、アクセス可能にされてもよい。
IoTデバイス101〜105には、それ自体及びその周辺に関する情報を収集し、収集された情報を、IoTハブ110を介してIoTサービス120、ユーザデバイス135、及び/又は外部ウェブサイト130に提供するための様々なタイプのセンサが備わっていてもよい。IoTデバイス101〜105のうちのいくつかは、IoTハブ110を介して送信される制御コマンドに応答して、指定された機能を実行することができる。IoTデバイス101〜105によって収集される情報の様々な具体例及び制御コマンドが以下に提供される。以下に説明する一実施形態では、IoTデバイス101は、ユーザ選択を記録し、ユーザ選択をIoTサービス120及び/又はウェブサイトに送信するように設計されたユーザ入力デバイスである。
一実施形態では、IoTハブ110は、4G(例えば、モバイルWiMAX、LTE)又は5Gセルラーデータサービスなどのセルラーサービス115を介してインターネット220への接続を確立するセルラー無線を含む。代替的に、又は加えて、IoTハブ110は、WiFiアクセスポイント又はルータ116を介してWiFi接続を確立するためのWiFi無線を含むことができ、これは、IoTハブ110をインターネットに(例えば、エンドユーザにインターネットサービスを提供するインターネットサービスプロバイダを介して)連結する。当然のことながら、本発明の基本的な原理は、特定のタイプの通信チャネル又はプロトコルに限定されないことに留意すべきである。
一実施形態では、IoTデバイス101〜105は、電池電力で長期間(例えば、数年)動作することができる超低電力デバイスである。電力を節約するために、ローカル通信チャネル130は、Bluetooth(登録商標) Low Energy(LE)などの低電力無線通信技術を使用して実装することができる。この実施形態では、IoTデバイス101〜105及びIoTハブ110のそれぞれには、Bluetooth LE無線及びプロトコルスタックが備わっている。
上述したように、一実施形態では、IoTプラットフォームは、ユーザが、接続されたIoTデバイス101〜105、IoTハブ110、及び/又はIoTサービス120にアクセスし、それらを構成することを可能にする、ユーザデバイス135上で実行されるIoTアプリケーション又はウェブアプリケーションを含む。一実施形態では、アプリケーション又はウェブアプリケーションは、そのユーザベースにIoT機能を提供するように、ウェブサイト130のオペレータによって設計されてもよい。例示したように、ウェブサイトは、各ユーザに関連するアカウント記録を含むユーザデータベース131を維持することができる。
図1Bは、複数のIoTハブ110〜111、190に対する追加の接続オプションを例示する。この実施形態では、単一のユーザが、単一のユーザ構内180(例えば、ユーザの自宅又はビジネス)にオンサイトでインストールされた複数のハブ110〜111を有することができる。これは、例えば、IoTデバイス101〜105のすべてを接続するのに必要な無線範囲を拡張するために行われ得る。上述したように、ユーザが複数のハブ110、111を有する場合、それらは、ローカル通信チャネル(例えば、Wifi、イーサネット(登録商標)、電力線ネットワーキングなど)を介して接続されてもよい。一実施形態では、ハブ110〜111のそれぞれは、セルラー115又はWiFi116接続(図1Bには明示されていない)を介してIoTサービス120への直接接続を確立することができる。代替的に、又は加えて、IoTハブ110などのIoTハブのうちの1つは、「マスター」ハブとして機能することができ、これは、IoTハブ111などのユーザ構内180上の他のすべてのIoTハブに接続性及び/又はローカルサービスを提供する(IoTハブ110とIoTハブ111を接続する点線で示すように)。例えば、マスターIoTハブ110は、IoTサービス120への直接接続を確立する唯一のIoTハブであってもよい。一実施形態では、「マスター」IoTハブ110のみに、IoTサービス120への接続を確立するためのセルラー通信インタフェースが備わっている。このように、IoTサービス120と他のIoTハブ111との間のすべての通信は、マスターIoTハブ110を通って流れる。この役割において、マスターIoTハブ110には、他のIoTハブ111とIoTサービス120との間で交換されるデータ(例えば、可能であれば、いくつかのデータ要求にローカルでサービスする)に対してフィルタリング動作を実行するための追加のプログラムコードが提供され得る。
IoTハブ110〜111がどのように接続されていようとも、一実施形態では、IoTサービス120は、ハブをユーザと論理的に関連付け、取り付けられたIoTデバイス101〜105のすべてを、インストールされたアプリケーション135(及び/又はブラウザベースのインタフェース)を有するユーザデバイスを介してアクセス可能な、単一の包括的なユーザインタフェースの下に結合する。
この実施形態では、マスターIoTハブ110及び1つ以上のスレーブIoTハブ111は、WiFiネットワーク116、イーサネットネットワーク、及び/又は電力線通信(power−line communications)(PLC)ネットワーキング(例えば、ネットワークの全部若しくは一部がユーザの電力線を介して実行される)とすることができる、ローカルネットワークを介して接続してもよい。加えて、IoTハブ110〜111に対して、IoTデバイス101〜105のそれぞれは、いくつか例を挙げると、WiFi、イーサネット、PLC、又はBluetooth LEなどの、任意のタイプのローカルネットワークチャネルを使用して、IoTハブ110〜111と相互接続してもよい。
図1Bはまた、第2のユーザ構内181にインストールされたIoTハブ190を示す。実質的に無制限の数のそのようなIoTハブ190は、世界中のユーザ構内のIoTデバイス191〜192からデータを収集するようにインストールされ、構成され得る。一実施形態では、2つのユーザ構内180〜181は、同じユーザに対して構成されてもよい。例えば、一方のユーザ構内180がユーザの基本的なホームであり、他方のユーザ構内181がユーザのバケーションホームであってもよい。そのような場合、IoTサービス120は、IoTハブ110〜111、190をユーザと論理的に関連付け、取り付けられたすべてのIoTデバイス101〜105、191〜192を、単一の包括的なユーザインタフェースの下に結合し、インストールされたアプリケーション135(及び/又はブラウザベースのインタフェース)を有するユーザデバイスを介してアクセス可能にする。
図2に例示するように、IoTデバイス101の例示的な実施形態は、プログラムコード及びデータ201〜203を記憶するメモリ210と、プログラムコードを実行しデータを処理する低電力マイクロコントローラ200とを含む。メモリ210は、ダイナミックランダムアクセスメモリ(dynamic random access memory)(DRAM)などの揮発性メモリであってもよいし、フラッシュメモリなどの不揮発性メモリであってもよい。一実施形態では、不揮発性メモリを永続記憶に使用し、揮発性メモリをプログラムコードの実行及びデータの実行に使用することができる。更に、メモリ210は、低電力マイクロコントローラ200内に統合されてもよく、バス又は通信ファブリックを介して低電力マイクロコントローラ200に連結されてもよい。本発明の根本的な原理は、メモリ210のいかなる特定の実装にも限定されない。
例示したように、プログラムコードは、IoTデバイス101のアプリケーション開発者によって利用され得る既定のビルディングブロックのセットを含む、IoTデバイス201及びライブラリコード202によって実行される特定用途向けの機能セットを定義するアプリケーションプログラムコード203を含むことができる。一実施形態では、ライブラリコード202は、各IoTデバイス101とIoTハブ110との間の通信を可能にするための通信プロトコルスタック201などのIoTデバイスを実装するために必要とされる基本機能のセットを含む。上述したように、一実施形態では、通信プロトコルスタック201は、Bluetooth LEプロトコルスタックを含む。この実施形態では、Bluetooth LE無線機及びアンテナ207は、低電力マイクロコントローラ200内に統合されてもよい。しかしながら、本発明の基本原理は、いかなる特定の通信プロトコルにも限定されない。
図2に示す特定の実施形態はまた、ユーザ入力を受信し、ユーザ入力を低電力マイクロコントローラに提供する複数の入力デバイス又はセンサ210を含み、低電力マイクロコントローラは、アプリケーションコード203及びライブラリコード202に従ってユーザ入力を処理する。一実施形態では、入力デバイスのそれぞれは、エンドユーザにフィードバックを提供するLED209を含む。
加えて、例示した実施形態は、低電力マイクロコントローラに電力を供給するための電池208を含む。一実施形態では、非充電式コイン型電池が使用される。しかしながら、別の実施形態では、統合された充電式電池を使用することができる(例えば、交流電源(図示せず)にIoTデバイスを接続することによって再充電可能)。
オーディオを発生するためのスピーカ205も設けられている。一実施形態では、低電力マイクロコントローラ299は、スピーカ205上にオーディオを発生するために圧縮されたオーディオストリーム(例えば、MPEG−4/アドバンストオーディオコーディング(Advanced Audio Coding)(AAC)ストリーム)を復号するための、オーディオ復号ロジックを含む。代替的に、低出力マイクロコントローラ200及び/又はアプリケーションコード/データ203が、ユーザが入力デバイス210を介して選択を入力すると、エンドユーザに口頭のフィードバックを提供するための、デジタルでサンプリングされたオーディオスニペットを含むことができる。
一実施形態では、IoTデバイス101が設計される特定用途に基づいて、1つ以上の他の/代替のI/Oデバイス又はセンサ250が、IoTデバイス101に含まれてもよい。例えば、温度、圧力、湿度などを測定するために環境センサを含めることができる。IoTデバイスがセキュリティデバイスとして使用される場合には、セキュリティセンサ及び/又はドアロックオープナが含まれてもよい。当然のことながら、これらの例は、単に例示のために提供されている。本発明の基本原理は、いかなる特定のタイプのIoTデバイスにも限定されない。実際に、ライブラリコード202が備わった低電力マイクロコントローラ200の高度にプログラマブルな性質を考慮すると、アプリケーション開発者は、新しいアプリケーションコード203及び新しいI/Oデバイス250を容易に開発して、実質的に任意のタイプのIoTアプリケーションのために低電力マイクロコントローラとインタフェースをとることができる。
一実施形態では、低電力マイクロコントローラ200はまた、通信を暗号化するための、及び/又は署名を生成するための暗号鍵を記憶するための安全な鍵ストアを含む。代替的に、鍵は、加入者識別モジュール(SIM)内に確保されてもよい。
一実施形態では、実質的に電力を消費していない超低電力状態からIoTデバイスを起動させるために、ウェイクアップ受信機207が含まれる。一実施形態では、ウェイクアップ受信機207は、図3に示すように、IoTハブ110上に構成されたウェイクアップ送信機307から受信されたウェイクアップ信号に応答して、IoTデバイス101をこの低電力状態から出させるように構成される。具体的には、一実施形態では、送信機307と受信機207は共に、テスラコイルなどの電気共振トランス回路を形成する。動作中、ハブ110が非常に低い電力状態からIoTデバイス101を復帰させる必要がある場合、エネルギは送信機307から受信機207への無線周波数信号を介して送信される。エネルギ移動の理由で、IoTデバイス101は、それが低電力状態にあるときには、ハブからの信号を継続的に「聞く」必要がないので、実質的に電力を消費しないように構成することができる(ネットワーク信号を介してデバイスを起動させることができる、ネットワークプロトコルの場合と同様に)。むしろ、IoTデバイス101のマイクロコントローラ200は、送信機307から受信機207に電気的に送信されたエネルギを使用することによって、事実上パワーダウンされた後にウェイクアップするように構成することができる。
図3に例示するように、IoTハブ110はまた、プログラムコード及びデータ305を記憶するためのメモリ317と、プログラムコードを実行しデータを処理するためのマイクロコントローラなどのハードウェアロジック301とを含む。広域ネットワーク(wide area network)(WAN)インタフェース302及びアンテナ310は、IoTハブ110をセルラーサービス115に連結する。代替的に、上述したように、IoTハブ110は、ローカルエリアネットワーク通信チャネルを確立するためにWiFiインタフェース(及びWiFiアンテナ)又はイーサネットインタフェースなどのローカルネットワークインタフェース(図示せず)を含むこともできる。一実施形態では、ハードウェアロジック301はまた、通信を暗号化するための、及び/又は署名を生成/検証するための暗号鍵を記憶するための安全な鍵ストアを含む。代替的に、鍵は、加入者識別モジュール(SIM)内に確保されてもよい。
ローカル通信インタフェース303及びアンテナ311は、IoTデバイス101〜105のそれぞれとのローカル通信チャネルを確立する。上述したように、一実施形態では、ローカル通信インタフェース303/アンテナ311はBluetooth LE規格を実装する。しかしながら、本発明の根底にある原理は、IoTデバイス101〜105とのローカル通信チャネルを確立するためのいかなる特定のプロトコルにも限定されない。図3においては別個のユニットとして示されているが、WANインタフェース302及び/又はローカル通信インタフェース303は、ハードウェアロジック301と同じチップ内に組み込まれてもよい。
一実施形態では、プログラムコード及びデータは、ローカル通信インタフェース303及びWANインタフェース302を介して通信するための別個のスタックを含むことができる通信プロトコルスタック308を含む。加えて、デバイスペアリングプログラムコード及びデータ306は、IoTハブを新しいIoTデバイスとペアリングすることができるようにメモリに記憶され得る。一実施形態では、各新しいIoTデバイス101〜105には、ペアリングプロセス中にIoTハブ110に通信される一意的なコードが割り当てられる。例えば、一意的なコードは、IoTデバイス上のバーコードに組み込まれてもよく、かつバーコードリーダ106によって読み取られてもよく、又はローカル通信チャネル130を介して通信されてもよい。別の実施形態では、一意的なIDコードがIoTデバイスに磁気的に組み込まれ、IoTハブは、無線周波数ID(radio frequency ID)(RFID)又は近距離通信(near field communication)(NFC)センサなどの磁気センサを有し、IoTデバイス101がIoTハブ110の数インチ内で移動するとき、コードを検出する。
一実施形態では、一意的なIDが通信されると、IoTハブ110は、ローカルデータベース(図示せず)に問い合わせること、コードが許容可能であることを検証するためにハッシュを実行すること、並びに/又はIoTサービス120、ユーザデバイス135、及び/若しくはウェブサイト130と通信することによって、一意的なIDを検証して、IDコードの妥当性を確認することができる。妥当性が確認されると、一実施形態では、IoTハブ110は、IoTデバイス101をペアリングし、メモリ317(これは、上述したように、不揮発性メモリを含むことができる)にペアリングデータを記憶する。ペアリングが完了すると、IoTハブ110は、本明細書に記載の様々なIoT機能を実行するためにIoTデバイス101と接続することができる。
一実施形態では、IoTサービス120を実行する組織は、開発者が新しいIoTサービスを容易に設計できるように、IoTハブ110及び基本ハードウェア/ソフトウェアプラットフォームを提供することができる。具体的には、IoTハブ110に加えて、開発者には、ハブ110内で実行されるプログラムコード及びデータ305を更新するためのソフトウェア開発キット(software development kit)(SDK)が提供されてもよい。加えて、IoTデバイス101については、SDKは、様々な異なるタイプのアプリケーション101の設計を容易にするために、ベースのIoTハードウェア(例えば、低電力マイクロコントローラ200及び図2に示す他の構成要素)用に設計された広範なライブラリコード202のセットを含んでもよい。一実施形態では、SDKは、開発者がIoTデバイスの入力と出力を指定するだけでよいグラフィカルデザインインタフェースを含む。IoTデバイス101がハブ110及びサービス120に接続することを可能にする通信スタック201を含むネットワーキングコードはすべて、開発者のために既に配置されている。加えて、一実施形態では、SDKは、モバイルデバイス(例えば、iPhone(登録商標)及びAndroidデバイス)用のアプリケーションの設計を容易にするライブラリコードベースも含む。
一実施形態では、IoTハブ110は、IoTデバイス101〜105とIoTサービス120との間のデータの連続的な双方向ストリームを管理する。IoTデバイス101〜105への/からの更新がリアルタイムで要求される状況(例えば、ユーザがセキュリティデバイス又は環境測定値の現在の状態を見る必要がある状況)では、IoTハブは、ユーザデバイス135及び/又は外部のウェブサイト130に定期的な更新を提供するためにオープンTCPソケットを維持することができる。更新を提供するために使用される特定のネットワーキングプロトコルは、基本用途のニーズに基づいて調整されてもよい。例えば、連続的な双方向ストリームを有することが理にかなっていない可能性がある場合、必要なときに情報を収集するために単純な要求/応答プロトコルを使用することができる。
一実施形態では、IoTハブ110及びIoTデバイス101〜105の両方が、ネットワークを介して自動的に更新可能である。具体的には、IoTハブ110について新しい更新が利用可能であるとき、IoTサービス120から更新を自動的にダウンロードしてインストールすることができる。それは、古いプログラムコードを交換する前に、まず、更新されたコードをローカルメモリにコピーし、実行して、更新を検証し得る。同様に、IoTデバイス101〜105のそれぞれについて更新が利用可能である場合、更新は、IoTハブ110によって最初にダウンロードされ、IoTデバイス101〜105のそれぞれにプッシュアウトされてもよい。各IoTデバイス101〜105は、IoTハブに関して上述したのと同様の方法で更新を適用し、更新の結果をIoTハブ110に報告することができる。更新が成功した場合、IoTハブ110は、更新をそのメモリから削除し、(例えば、各IoTデバイスについての新しい更新を確認し続けることができるように)それぞれのIoTデバイスにインストールされているコードの最新バージョンを記録することができる。
一実施形態では、IoTハブ110は、A/C電力を介して給電される。具体的には、IoTハブ110は、A/C電源コードを介して供給されるA/C電圧をより低いDC電圧に変換するための変圧器を備えた電源ユニット390を含むことができる。
図4Aは、IoTシステムを使用してユニバーサル遠隔制御操作を実行するための、本発明の一実施形態を例示する。具体的には、この実施形態では、IoTデバイス101〜103のセットには、(ほんの数例を挙げると)空気調節装置/ヒータ430、照明システム431、及び視聴覚機器432を含む、様々な異なるタイプの電子機器を制御する遠隔制御コードを送信するための、赤外線(infrared)(IR)及び/又は無線周波数(radio frequency)(RF)ブラスタ401〜403がそれぞれ備わっている。図4Aに示される実施形態では、IoTデバイス101〜103にはまた、以下に説明するように、それらが制御するデバイスの動作を検出するためのセンサ404〜406がそれぞれ備わっている。
例えば、IoTデバイス101におけるセンサ404は、現在の温度/湿度を検知し、それに応じて、現在の所望の温度に基づき空気調節装置/ヒータ430を制御するための温度及び/又は湿度センサであってもよい。この実施形態では、空気調節装置/ヒータ430は、遠隔制御デバイス(典型的には、それ自体が温度センサをその中に組み込んだ遠隔制御装置)を介して制御されるように設計されるものである。一実施形態では、ユーザは、ユーザデバイス135上にインストールされたアプリケーション又はブラウザを介して、所望の温度をIoTハブ110に提供する。IoTハブ110上で実行される制御ロジック412は、センサ404から現在の温度/湿度データを受信し、それに応じて、所望の温度/湿度に従ってIR/RFブラスタ401を制御するように、IoTデバイス101にコマンドを送信する。例えば、温度が所望の温度未満である場合、制御ロジック412は、温度を上げるように、IR/RFブラスタ401を介して空気調節装置/ヒータにコマンドを送信してもよい(例えば、空気調節装置をオフにすることか、又はヒータをオンにすることのいずれかによって)。コマンドは、IoTハブ110上のデータベース413に記憶された必要な遠隔制御コードを含んでもよい。代替的に、又は加えて、IoTサービス421は、指定されたユーザ選好及び記憶された制御コード422に基づき電子機器430〜432を制御するために、制御ロジック421を実装してもよい。
例示した実施例におけるIoTデバイス102は、照明431を制御するために使用される。具体的には、IoTデバイス102のセンサ405は、照明設備431(又は他の照明装置)によってもたらされている光の現在の輝度を検出するように構成された光センサ又は光検出器であってもよい。ユーザは、ユーザデバイス135を介して、IoTハブ110に所望の照明レベル(オン又はオフの表示を含む)を指定してもよい。それに応答して、制御ロジック412は、照明431の現在の輝度レベルを制御するように、IR/RFブラスタ402にコマンドを送信する(例えば、現在の輝度が低すぎる場合は照明を明るくするか、若しくは現在の輝度が高すぎる場合は照明を暗くするか、又は単純に照明をオン若しくはオフにする)。
例示した実施例におけるIoTデバイス103は、視聴覚機器432(例えば、テレビ、A/V受信機、ケーブル/衛星受信機、AppleTV(商標)など)を制御するように構成される。IoTデバイス103のセンサ406は、現在の周囲音量レベルを検出するためのオーディオセンサ(例えば、マイクロホン及び関連ロジック)、並びに/又はテレビによって生成された光に基づき、(例えば、指定されたスペクトル内の光を測定することによって)テレビがオンであるか、それともオフであるかを検出するための光センサであってもよい。代替的に、センサ406は、検出された温度に基づき、オーディオ機器がオンであるか、それともオフであるかを検出するための、視聴覚機器に接続された温度センサを含んでもよい。この場合も、ユーザデバイス135を介したユーザ入力に応答して、制御ロジック412は、IoTデバイス103のIRブラスタ403を介して視聴覚機器にコマンドを送信してもよい。
上記が本発明の一実施形態の単なる例示した実施例であることに留意すべきである。本発明の基本原理は、IoTデバイスによって制御されるいかなる特定のタイプのセンサ又は機器にも限定されない。
IoTデバイス101〜103がBluetooth LE接続を介してIoTハブ110に連結される実施形態では、センサデータ及びコマンドは、Bluetooth LEチャネルを介して送信される。しかしながら、本発明の基本原理は、Bluetooth LE又はいずれの他の通信標準にも限定されない。
一実施形態では、電子機器のそれぞれを制御するために必要とされる制御コードは、IoTハブ110上のデータベース413及び/又はIoTサービス120上のデータベース422に記憶される。図4Bに例示するように、制御コードは、IoTサービス120上で維持される異なる機器に対して、制御コード422のマスターデータベースからIoTハブ110に提供されてもよい。エンドユーザは、ユーザデバイス135上で実行されるアプリケーション又はブラウザを介して制御される電子(又は他の)機器のタイプを指定してもよく、それに応答して、IoTハブ上の遠隔制御コード学習モジュール491は、IoTサービス120上の遠隔制御コードデータベース492から、必要とされるIR/RFコードを取得してもよい(例えば、一意的なIDを有する各電子機器を識別する)。
加えて、一実施形態では、IoTハブ110には、遠隔制御コード学習モジュール491が、電子機器と共に提供された元の遠隔制御装置495から直接新しい遠隔制御コードを「学習」することを可能にする、IR/RFインタフェース490が備わっている。例えば、空気調節装置430と共に提供された元の遠隔制御装置の制御コードが、遠隔制御データベースに含まれていない場合、ユーザは、ユーザデバイス135上のアプリケーション/ブラウザを介してIoTハブ110と対話して、元の遠隔制御装置によって生成される様々な制御コードをIoTハブ110に教えてもよい(例えば、温度を上げる、温度を下げるなど)。遠隔制御コードが学習されると、それらは、IoTハブ110上の制御コードデータベース413に記憶されてもよく、かつ/又は中央遠隔制御コードデータベース492に含められるように、IoTサービス120に送り返されてもよい(続いて、同じ空気調節装置ユニット430を有する他のユーザによって使用されてもよい)。
一実施形態では、IoTデバイス101〜103のそれぞれは、極端に小さいフォームファクタを有し、両面テープ、小さい釘、磁気アタッチメントなどを使用して、それらの対応する電子機器430〜432の上又は付近に取り付けられてもよい。空気調節装置430などの1つの機器を制御するために、IoTデバイス101を十分に離して配置し、センサ404が自宅内の周囲温度を正確に測定することができるようにすることが望ましい(例えば、空気調節装置上に直接IoTデバイスを配置すると、温度測定値は、空気調節装置が作動しているときは低すぎになり、ヒータが作動しているときは高すぎになるであろう)。対照的に、照明を制御するために使用されるIoTデバイス102は、センサ405が現在の照明レベルを検出するために、照明設備431の上又は付近に配置されてもよい。
記載される一般的な制御機能を提供することに加えて、IoTハブ110及び/又はIoTサービス120の一実施形態は、各電子機器の現在の状態に関連した通知をエンドユーザに送信する。通知は、テキストメッセージ及び/又はアプリケーション特有の通知であってもよく、次いで、通知は、ユーザのモバイルデバイス135のディスプレイ上に表示されてもよい。例えば、ユーザの空気調節装置が長期間オンであるが温度が変化していない場合、IoTハブ110及び/又はIoTサービス120は、空気調節装置が適切に機能していないという通知をユーザに送信してもよい。ユーザが自宅におらず(このことは、動作センサを介して検出されてもよく、若しくはユーザの現在の検出された位置に基づいてもよい)、センサ406が、視聴覚機器430がオンであることを示すか、又はセンサ405が、照明がオンであることを示す場合、ユーザが視聴覚機器432及び/又は照明431をオフにすることを希望するか尋ねる通知がユーザに送信されてもよい。同じタイプの通知が、任意の機器のタイプに対して送信されてもよい。
ユーザが通知を受信すると、彼/彼女は、ユーザデバイス135上のアプリケーション又はブラウザを介して電子機器430〜432を遠隔制御してもよい。一実施形態では、ユーザデバイス135は、タッチスクリーンデバイスであり、アプリケーション又はブラウザは、機器430〜432を制御するためのユーザが選択可能なボタンを含む遠隔制御装置の画像を表示する。通知を受信した後、ユーザは、グラフィカル遠隔制御装置を開き、様々な異なる機器をオフにするか、又は調節してもよい。IoTサービス120を介して接続されている場合、ユーザの選択は、IoTサービス120からIoTハブ110に転送されてもよく、IoTハブ110は、次いで制御ロジック412を介して機器を制御することになる。代替的に、ユーザ入力は、ユーザデバイス135からIoTハブ110に直接送信されてもよい。
一実施形態では、ユーザは、電子機器430〜432に対して様々な自動制御機能を実行するように、IoTハブ110上の制御ロジック412をプログラミングしてもよい。上記の所望の温度、輝度レベル、及び音量レベルを維持することに加えて、制御ロジック412は、ある特定の条件が検出された場合に電子機器を自動的にオフにしてもよい。例えば、制御ロジック412が、ユーザが自宅にいないこと、及び空気調節装置が機能していないことを検出する場合、制御ロジック412は、空気調節装置を自動的にオフにしてもよい。同様に、ユーザが自宅におらず、センサ406が、視聴覚機器430がオンであることを示すか、又はセンサ405が、照明がオンであることを示す場合、制御ロジック412は、視聴覚機器及び照明をそれぞれオフにするように、IR/RFブラスタ403及び402を介してコマンドを自動的に送信してもよい。
図5は、電子機器530及び531を監視するためのセンサ503及び504が備わった、IoTデバイス104及び105の追加の実施形態を例示する。具体的には、この実施形態のIoTデバイス104は、コンロがオンのままであるときを検出するためにコンロ530の上又は付近に配置されてもよい、温度センサ503を含む。一実施形態では、IoTデバイス104は、温度センサ503によって測定された現在の温度をIoTハブ110及び/又はIoTサービス120に送信する。コンロが閾値期間を超えてオンであることが検出される場合(例えば、測定された温度に基づき)、制御ロジック512は、ストーブ530がオンであることをユーザに通知する通知を、エンドユーザのデバイス135に送信してもよい。加えて、一実施形態では、IoTデバイス104は、ユーザからの命令を受信することに応答して、又は自動的に(制御ロジック512がそうするようにユーザによってプログラミングされる場合)、のいずれかによって、コンロをオフにするための制御モジュール501を含んでもよい。一実施形態では、制御ロジック501は、コンロ530への電気又はガスを遮断するためのスイッチを備える。しかしながら、他の実施形態では、制御ロジック501は、コンロ自体内に統合されてもよい。
図5はまた、洗濯機及び/又は乾燥機などのある特定のタイプの電子機器の動作を検出するための動作センサ504を有する、IoTデバイス105を例示する。使用され得る別のセンサは、周囲の音量レベルを検出するためのオーディオセンサ(例えば、マイクロホン及びロジック)である。上記の他の実施形態のように、この実施形態は、ある特定の指定された条件が満たされた場合、エンドユーザに通知を送信してもよい(例えば、動作が長期間検出され、洗濯機/乾燥機がオフになっていないことを示す場合)。図5に示されないが、IoTデバイス105にはまた、自動的に、かつ/又はユーザ入力に応答して、(例えば、電気/ガスをオフに切り替えることによって)洗濯機/乾燥機531をオフにするための制御モジュールが備わっていてもよい。
一実施形態では、制御ロジック及びスイッチを有する第1のIoTデバイスは、ユーザの自宅内のすべての電力をオフにするように構成されてもよく、制御ロジック及びスイッチを有する第2のIoTデバイスは、ユーザの自宅内のすべてのガスをオフにするように構成されてもよい。次いで、センサを有するIoTデバイスは、ユーザの自宅内の電気又はガス駆動の機器の上又は付近に位置付けられてもよい。特定の機器がオンのままである(例えば、コンロ530)ことをユーザが通知された場合、ユーザは、自宅内のすべての電気又はガスをオフにするコマンドを送信して、損害を防止してもよい。代替的に、IoTハブ110及び/又はIoTサービス120の制御ロジック512は、そのような状況において電気又はガスを自動的にオフにするように構成されてもよい。
一実施形態では、IoTハブ110及びIoTサービス120は、周期的な間隔で通信する。IoTサービス120が、IoTハブ110への接続が切れていることを検出する場合(例えば、指定された継続時間、IoTハブからの要求又は応答を受信していないことによって)、IoTサービス120は、この情報をエンドユーザのデバイス135に通信することになる(例えば、テキストメッセージ又はアプリケーション特有の通知を送信することによって)。
通信のための装置及び方法
中間デバイスを通じたデータ
上述したように、Bluetooth LEなどのIoTデバイスを相互接続するために使用される無線技術は概して、近距離技術であるため、IoT実装のためのハブがIoTデバイスの範囲外にある場合、IoTデバイスは、IoTハブにデータを送信することができない(逆もまた同様)。
この欠陥に対処するために、本発明の一実施形態は、モバイルデバイスが範囲内にあるとき、1つ以上のモバイルデバイスと周期的に接続するために、IoTハブの無線範囲外にあるIoTデバイスのための機構を提供する。いったん接続されると、IoTデバイスは、IoTハブに提供される必要がある任意のデータをモバイルデバイスに送信することができ、次いでモバイルデバイスは、IoTハブにデータを転送する。
図6に例示するように、一実施形態は、IoTハブ110と、IoTハブ110の範囲外にあるIoTデバイス601と、モバイルデバイス611とを含む。範囲外のIoTデバイス601は、データを収集及び通信することが可能な任意の形態のIoTデバイスを含んでもよい。例えば、IoTデバイス601は、冷蔵庫内の利用可能な食料品、食料品を消費するユーザ、及び現在の温度を監視するように、冷蔵庫内に構成されたデータ収集デバイスを備えてもよい。当然のことながら、本発明の基本原理は、いかなる特定のタイプのIoTデバイスにも限定されない。本明細書に記載される技術は、ほんの数例を挙げると、スマートメータ、コンロ、洗濯機、乾燥機、照明システム、HVACシステム、及び視聴覚機器に関するデータを収集及び送信するために使用されるデバイスを含む、任意のタイプのIoTデバイスを使用して実装されてもよい。
更に、動作中のモバイルデバイスである、図6に例示するIoTデバイス611は、データを通信及び記憶することが可能な任意の形態のモバイルデバイスであってもよい。例えば、一実施形態では、モバイルデバイス611は、本明細書に記載される技術を促進するために、アプリケーションがその上にインストールされたスマートフォンである。別の実施形態では、モバイルデバイス611は、ネックレス若しくはブレスレットに取り付けられた通信トークン、スマートウォッチ、又はフィットネスデバイスなど、装着可能なデバイスを含む。装着可能なトークンは、スマートフォンデバイスを所有しない高齢のユーザ又は他のユーザにとって特に有用であり得る。
動作中、範囲外のIoTデバイス601は、モバイルデバイス611との接続性を周期的又は連続的にチェックしてもよい。接続を確立した後(例えば、ユーザが冷蔵庫の近くを移動する結果として)、IoTデバイス601上の任意の収集されたデータ605が、モバイルデバイス611上の一時データリポジトリ615に自動的に送信される。一実施形態では、IoTデバイス601及びモバイルデバイス611は、BTLEなどの低電力無線標準を使用して、ローカル無線通信チャネルを確立する。そのような場合、モバイルデバイス611は、既知のペアリング技術を使用してIoTデバイス601と最初にペアリングされてもよい。
いったんデータが一時データリポジトリに伝送されると、モバイルデバイス611は、IoTハブ110との通信が確立されるとデータを送信する(例えば、ユーザがIoTハブ110の範囲内を歩くとき)。次いで、IoTハブは、中央データリポジトリ413にデータを記憶してもよく、かつ/又はインターネット上で、1つ以上のサービス及び/若しくは他のユーザデバイスにデータを送信してもよい。一実施形態では、モバイルデバイス611は、異なるタイプの通信チャネルを使用して、IoTハブ110にデータを提供してもよい(潜在的に、WiFiなどのより高出力の通信チャネル)。
範囲外のIoTデバイス601、モバイルデバイス611、及びIoTハブはすべて、本明細書に記載される技術を実装するためのプログラムコード及び/又はロジックにより構成されてもよい。図7に例示するように、例えば、本明細書に記載される動作を実行するために、IoTデバイス601は、中間接続ロジック及び/又はアプリケーションにより構成されてもよく、モバイルデバイス611は、中間接続ロジック/アプリケーションにより構成されてもよく、IoTハブ110は、中間接続ロジック/アプリケーション721により構成されてもよい。各デバイス上の中間接続ロジック/アプリケーションは、ハードウェア、ソフトウェア、又はこれらの任意の組み合わせで実装されてもよい。一実施形態では、IoTデバイス601の中間接続ロジック/アプリケーション701は、モバイルデバイス上の中間接続ロジック/アプリケーション711(デバイスアプリケーションとして実装されてもよい)との接続を検索及び確立して、一時データリポジトリ615にデータを伝送する。次いで、モバイルデバイス611上の中間接続ロジック/アプリケーション701は、中央データリポジトリ413にデータを記憶するIoTハブ上の中間接続ロジック/アプリケーションに、データを転送する。
図7に例示するように、各デバイス上の中間接続ロジック/アプリケーション701、711、721は、手元のアプリケーションに基づき構成されてもよい。例えば、冷蔵庫に関して、接続ロジック/アプリケーション701は、周期的ベースで少数のパケットを送信するだけでよい。他のアプリケーション(例えば、温度センサ)に対して、接続ロジック/アプリケーション701は、より頻繁な更新を送信する必要があり得る。
モバイルデバイス611よりはむしろ、一実施形態では、IoTデバイス601が、IoTハブ110の範囲内に位置する1つ以上の中間IoTデバイスとの無線接続を確立するように構成されてもよい。この実施形態では、IoTハブの範囲外の任意のIoTデバイス601が、他のIoTデバイスを使用して「チェーン」を形成することによってハブにリンクされてもよい。
加えて、簡潔にするために、単一のモバイルデバイス611のみが図6〜7に例示されるが、一実施形態では、異なるユーザの複数のそのようなモバイルデバイスは、IoTデバイス601と通信するように構成されてもよい。更に、同じ技術が、複数の他のIoTデバイスに対して実装されてもよく、それにより、自宅全体にわたって中間デバイスデータ収集システムを形成する。
更に、一実施形態では、本明細書に記載される技術は、様々な異なるタイプの関連データを収集するために使用されてもよい。例えば、一実施形態では、モバイルデバイス611がIoTデバイス601と接続するたびに、ユーザの識別が、収集されたデータ605と共に含まれてもよい。このようにして、IoTシステムは、自宅内の異なるユーザの挙動を追跡するために使用されてもよい。例えば、冷蔵庫内で使用される場合、収集されたデータ605は、冷蔵庫のそばを通る各ユーザ、冷蔵庫を開ける各ユーザ、及び各ユーザによって消費される特定の食料品の識別を含んでもよい。異なるタイプのデータが、他のタイプのIoTデバイスから収集されてもよい。このデータを使用して、システムは、例えば、どのユーザが衣服を洗濯するのか、どのユーザが所与の日にテレビを観るのか、各ユーザが就寝及び起床する時間などを判定することが可能である。次いで、このクラウドソースデータのすべてが、IoTハブのデータリポジトリ413内にコンパイルされてもよく、かつ/又は外部サービス若しくはユーザに転送されてもよい。
本明細書に記載される技術の別の有益な用途は、補助を必要とし得る高齢のユーザを監視するためのものである。このアプリケーションに関して、モバイルデバイス611は、ユーザの自宅の異なる室内の情報を収集するために、高齢のユーザによって装着された非常に小型のトークンであってもよい。ユーザが冷蔵庫を開けるたびに、例えば、このデータは、収集されたデータ605と共に含まれ、トークンを介してIoTハブ110に伝送される。次いで、IoTハブは、1つ以上の外部ユーザ(例えば、高齢のユーザを世話する子供又は他の個人)にデータを提供してもよい。データが指定された期間(例えば、12時間)収集されていない場合、これは、高齢のユーザが自宅を動き回っていない、かつ/又は冷蔵庫を開けていないことを意味する。次いで、IoTハブ110又はIoTハブに接続された外部サービスは、これらの他の個人にアラート通知を送信し、彼らに高齢のユーザを確認するべきであることを通知してもよい。加えて、収集されたデータ605は、ユーザによって消費されている食品、並びに食料品店に行くことが必要であるかどうか、高齢のユーザがテレビを観ているかどうか、及びどれほど頻繁に観ているか、高齢のユーザが衣服を洗濯する頻度などの他の関連情報を含んでもよい。
別の実装例において、洗濯機、冷蔵庫、HVACシステムなどの電子デバイスに問題がある場合、収集されたデータは、交換される必要がある部品の指示を含んでもよい。そのような場合、通知は、問題を解決するための要求と共に技術者に送信されてもよい。次いで、技術者は、必要とされる交換部品を持って自宅に到着し得る。
本発明の一実施形態に従った方法が図8に例示される。本方法は、上記のアーキテクチャとの関連で実装され得るが、いかなる特定のアーキテクチャにも限定されない。
801において、IoTハブの範囲外にあるIoTデバイスは、データ(例えば、冷蔵庫の扉の開放、使用された食料品など)を周期的に収集する。802において、IoTデバイスは、モバイルデバイスとの接続性を周期的又は連続的にチェックする(例えば、BTLE標準によって指定されたものなど、接続を確立するための標準的なローカル無線技術を使用して)。802において、モバイルデバイスへの接続が確立され、判定された場合、803において、収集されたデータは、803においてモバイルデバイスに伝送される。804において、モバイルデバイスは、IoTハブ、外部サービス、及び/又はユーザにデータを伝送する。述べられたように、モバイルデバイスは、それが既に接続されている場合(例えば、WiFiリンクを介して)、すぐにデータを送信し得る。
IoTデバイスからデータを収集することに加えて、一実施形態では、本明細書に記載される技術は、データを更新するか、又は別様にIoTデバイスにデータを提供するために使用されてもよい。一例が図9Aに示され、それは、IoTデバイス601(又はそのようなIoTデバイスの群)上にインストールされる必要があるプログラムコード更新901を有する、IoTハブ110を示す。プログラムコード更新は、システム更新、パッチ、構成データ、及びIoTデバイスがユーザの要求どおり動作するために必要とされる任意の他のデータを含んでもよい。一実施形態では、ユーザは、モバイルデバイス又はコンピュータを介してIoTデバイス601に対する構成オプションを指定してもよく、それらは次いで、本明細書に記載される技術を使用して、IoTハブ110上に記憶され、かつIoTデバイスに提供される。具体的には、一実施形態では、IoTハブ110上の中間接続ロジック/アプリケーション721は、モバイルデバイス611上の中間接続ロジック/アプリケーション711と通信して、一時記憶装置615内にプログラムコード更新を記憶する。モバイルデバイス611がIoTデバイス601の範囲に入るとき、モバイルデバイス611上の中間接続ロジック/アプリケーション711は、IoTデバイス601上の中間/接続ロジック/アプリケーション701と接続して、デバイスにプログラムコード更新を提供する。一実施形態では、IoTデバイス601は次いで、新しいプログラムコード更新及び/又はデータをインストールするための自動更新プロセスに入ってもよい。
IoTデバイスを更新するための方法が、図9Bに示される。本方法は、上記のシステムアーキテクチャとの関連で実装され得るが、いかなる特定のシステムアーキテクチャにも限定されない。
900において、新しいプログラムコード又はデータ更新は、IoTハブ及び/又は外部サービス(例えば、インターネット上でモバイルデバイスに連結された)上で利用可能になる。901において、モバイルデバイスは、IoTデバイスの代わりにプログラムコード又はデータ更新を受信及び記憶する。IoTデバイス及び/又はモバイルデバイスは、902において接続が確立されているかどうかを判定するために周期的にチェックする。903において接続が確立され、判定された場合、904において、更新は、IoTデバイスに伝送され、インストールされる。
改善されたセキュリティのための実施形態
一実施形態では、各IoTデバイス101の低電力マイクロコントローラ200及びIoTハブ110の低電力ロジック/マイクロコントローラ301は、以下に記載される実施形態によって使用される暗号鍵を記憶するための安全な鍵ストアを含む(例えば、図10〜15及び関連する文章を参照されたい)。代替的に、鍵は、後述するように、加入者識別モジュール(SIM)内に確保されてもよい。
図10は、IoTサービス120、IoTハブ110、並びにIoTデバイス101及び102の間の通信を暗号化するために公開鍵インフラストラクチャ(public key infrastructure)(PKI)技術及び/又は対称鍵交換/暗号化技術を使用する、高レベルアーキテクチャを例示する。
公開/秘密鍵ペアを使用する実施形態をまず説明し、続いて、対称鍵交換/暗号化技術を使用する実施形態を説明する。具体的には、PKIを使用するある実施形態において、一意的な公開/秘密鍵ペアが、各IoTデバイス101〜102、各IoTハブ110、及びIoTサービス120に関連付けられる。一実施形態では、新しいIoTハブ110がセットアップされるとき、その公開鍵がIoTサービス120に提供され、新しいIoTデバイス101がセットアップされるとき、その公開鍵がIoTハブ110及びIoTサービス120の両方に提供される。デバイス間で公開鍵を安全に交換するための様々な技術を以下に説明する。一実施形態では、いかなる受信デバイスも、署名の妥当性を確認することによって公開鍵の妥当性を検証することができるように、すべての公開鍵が、受信デバイスのすべてに既知である親鍵(すなわち、一種の証明書)によって署名される。したがって、未加工の公開鍵を単に交換するのではなく、むしろこれらの証明書が交換されることになる。
例示したように、一実施形態では、各IoTデバイス101、102は、各デバイスの秘密鍵を記憶するセキュリティのために、それぞれ、安全な鍵ストア1001、1003を含む。次いで、セキュリティロジック1002、1304が、安全に記憶された秘密鍵を用いて、本明細書に記載される暗号化/解読動作を実行する。同様に、IoTハブ110は、IoTハブ秘密鍵、並びにIoTデバイス101〜102及びIoTサービス120の公開鍵を記憶するための安全な記憶装置1011、並びに、鍵を使用して暗号化/解読動作を実行するためのセキュリティロジック1012を含む。最後に、IoTサービス120は、それ自体の秘密鍵、様々なIoTデバイス及びIoTハブの公開鍵を記憶するセキュリティのための安全な記憶装置1021、並びに鍵を使用してIoTハブ及びデバイスとの通信を暗号化/解読するためのセキュリティロジック1013を含んでもよい。一実施形態では、IoTハブ110がIoTデバイスから公開鍵証明書を受信すると、IoTハブ110は、それを(例えば、上記の親鍵を使用して署名の妥当性を確認することにより)検証し、次いで、その中から公開鍵を抽出し、その公開鍵をその安全な鍵ストア1011内に記憶することができる。
例として、一実施形態では、IoTサービス120が、コマンド又はデータ(例えば、ドアを開錠するコマンド、センサを読み取る要求、IoTデバイスにより処理/表示されるべきデータなど)をIoTデバイス101に送信する必要があるとき、セキュリティロジック1013は、IoTデバイス101の公開鍵を使用してそのデータ/コマンドを暗号化して、暗号化されたIoTデバイスパケットを生成する。一実施形態では、次いで、セキュリティロジック1013は、IoTハブ110の公開鍵を使用し、IoTデバイスパケットを暗号化して、IoTハブパケットを生成し、IoTハブパケットをIoTハブ110に送信する。一実施形態では、デバイス101が、それが信頼されるソースから変更されていないメッセージを受信していることを検証することができるように、サービス120は、その秘密鍵又は上述の親鍵を用いて、暗号化されたメッセージに署名する。次いで、デバイス101は、秘密鍵及び/又は親鍵に対応する公開鍵を使用して、署名の妥当性を確認してもよい。上述したように、対称鍵交換/暗号化技術が、公開/秘密鍵暗号化の代わりに使用されてもよい。これらの実施形態では、1つの鍵をプライベートに記憶し、対応する公開鍵を他のデバイスに提供するのではなく、それぞれのデバイスに、暗号化のために、かつ署名の妥当性を確認するために使用されるものと同じ対称鍵のコピーを提供してもよい。対称鍵アルゴリズムの一例は高度暗号化標準(Advanced Encryption Standard)(AES)であるが、本発明の基本原理は、いかなるタイプの特定の対称鍵にも限定されない。
ある対称鍵実装形態を使用すると、各デバイス101は、IoTハブ110と対称鍵を交換するために、安全な鍵交換プロトコルに入る。動的対称鍵プロビジョニングプロトコル(Dynamic Symmetric Key Provisioning Protocol)(DSKPP)などの安全な鍵プロビジョニングプロトコルが、安全な通信チャネルを介して鍵を交換するために使用され得る(例えば、コメント要求(Request for Comments)(RFC)6063を参照されたい)。しかしながら、本発明の基本原理は、いかなる特定の鍵プロビジョニングプロトコルにも限定されるものではない。
対称鍵が交換されると、それらは、各デバイス101及びIoTハブ110によって、通信を暗号化するために使用され得る。同様に、IoTハブ110及びIoTサービス120は、安全な対称鍵交換を実行し、次いで、交換された対称鍵を使用して通信を暗号化し得る。一実施形態では、新しい対称鍵が、デバイス101とハブ110との間、及びハブ110とIoTサービス120との間で定期的に交換される。一実施形態では、デバイス101、ハブ110、及びサービス120の間での新しい通信セッションのたびに、新しい対称鍵が交換される(例えば、通信セッションごとに新しい鍵が生成され、安全に交換される)。一実施形態では、IoTハブ内のセキュリティモジュール1012が信頼される場合、サービス120は、ハブセキュリティモジュール1312とセッション鍵を交渉し得、次いで、セキュリティモジュール1012が、各デバイス120とセッション鍵を交渉することになる。次いで、サービス120からのメッセージは、ハブセキュリティモジュール1012で解読及び検証され、その後、デバイス101への送信のために再暗号化される。
一実施形態では、ハブセキュリティモジュール1012でのセキュリティ侵害を防止するために、1回限りの(恒久的な)インストール鍵が、インストール時にデバイス101とサービス120との間で交渉されてもよい。メッセージをデバイス101に送るとき、サービス120は、まずこのデバイスインストール鍵を用いて暗号化/MACし、次いでハブのセッション鍵を用いてそれを暗号化/MACし得る。次いで、ハブ110は、暗号化されたデバイスブロブを検証及び抽出し、それをデバイスに送ることになる。
本発明の一実施形態では、リプレイアタックを防止するためにカウンタ機構が実装される。例えば、デバイス101からハブ110へ(又は逆もまた同様)の連続する通信それぞれに、継続的に増加するカウンタ値が割り当てられ得る。ハブ110とデバイス101との両方がこの値を追跡し、デバイス間での連続する通信それぞれにおいてその値が正しいことを検証する。これと同じ技術が、ハブ110とサービス120との間に実装され得る。この方法でカウンタを使用すると、各デバイス間での通信を偽装することがより困難になるであろう(カウンタ値が誤ったものになるため)。しかしながら、これを用いずとも、サービスとデバイスとの間で共有されたインストール鍵は、すべてのデバイスに対するネットワーク(ハブ)規模の攻撃を防止するであろう。
一実施形態では、公開/秘密鍵暗号化を使用するとき、IoTハブ110は、その秘密鍵を使用してIoTハブパケットを解読し、暗号化されたIoTデバイスパケットを生成し、それを、関連付けられたIoTデバイス101に送信する。次いで、IoTデバイス101は、その秘密鍵を使用してIoTデバイスパケットを解読して、IoTサービス120を起点とするコマンド/データを生成する。次いで、IoTデバイス101は、データを処理し、かつ/又はコマンドを実行してもよい。対称暗号化を使用すると、各デバイスは、共有された対称鍵を用いて暗号化及び解読を行う。いずれかの場合であれば、各送信デバイスはまた、受信デバイスがメッセージの信頼性を検証することができるように、その秘密鍵を用いてメッセージに署名してもよい。
異なる鍵のセットが、IoTデバイス101からIoTハブ110への通信及びIoTサービス120への通信を暗号化するために使用されてもよい。例えば、ある公開/秘密鍵構成を使用すると、一実施形態では、IoTデバイス101上のセキュリティロジック1002が、IoTハブ110の公開鍵を使用して、IoTハブ110に送信されたデータパケットを暗号化する。次いで、IoTハブ110上のセキュリティロジック1012は、IoTハブの秘密鍵を使用して、データパケットを解読し得る。同様に、IoTデバイス101上のセキュリティロジック1002及び/又はIoTハブ110上のセキュリティロジック1012は、IoTサービス120の公開鍵を使用して、IoTサービス120に送信されたデータパケットを暗号化し得る(これは次いで、IoTサービス120上のセキュリティロジック1013によって、サービスの秘密鍵を使用して解読され得る)。対称鍵を使用すると、デバイス101及びハブ110は、ある対称鍵を共有し得、一方でハブ及びサービス120は、異なる対称鍵を共有し得る。
上記の説明において、ある特定の具体的詳細が上に記載されているが、本発明の基本原理は様々な異なる暗号化技術を使用して実装され得ることに留意すべきである。例えば、上述した一部の実施形態は非対称の公開/秘密鍵ペアを使用するが、別の実施形態は、様々なIoTデバイス101〜102、IoTハブ110、及びIoTサービス120の間で安全に交換される対称鍵を使用し得る。更に、一部の実施形態では、データ/コマンド自体は暗号化されないが、データ/コマンド(又は他のデータ構造)上の署名を生成するために鍵が使用される。次いで、受信者が、その鍵を使用して署名の妥当性を確認し得る。
図11に例示するように、一実施形態では、各IoTデバイス101上の安全な鍵ストアは、プログラマブル加入者識別モジュール(SIM)1101を使用して実装される。この実施形態では、IoTデバイス101は、IoTデバイス101上のSIMインタフェース1100内に据え付けられたプログラムされていないSIMカード1101と共にエンドユーザに最初に提供され得る。1つ以上の暗号鍵のセットを用いてSIMをプログラミングするために、ユーザは、プログラマブルSIMカード1101をSIMインタフェース500から取り出し、それをIoTハブ110上のSIMプログラミングインタフェース1102に挿入する。次いで、IoTハブ上のプログラミングロジック1125が、IoTデバイス101をIoTハブ110及びIoTサービス120に登録/ペアリングするように、SIMカード1101を安全にプログラミングする。一実施形態では、公開/秘密鍵ペアは、プログラミングロジック1125によってランダムに生成されてもよく、次いで、このペアの公開鍵は、IoTハブの安全な記憶デバイス411内に記憶されてもよく、一方で秘密鍵は、プログラマブルSIM1101内に記憶されてもよい。加えて、プログラミングロジック525は、IoTハブ110、IoTサービス120、及び/又は任意の他のIoTデバイス101の公開鍵を、(IoTデバイス101上のセキュリティロジック1302による発信データの暗号化に使用するために)SIMカード1401上に記憶してもよい。いったんSIM1101がプログラミングされると、新しいIoTデバイス101に、SIMを安全な識別子として使用して(例えば、SIMを用いてデバイスを登録するための既存の技術を使用して)IoTサービス120がプロビジョニングされ得る。プロビジョニング後、IoTハブ110とIoTサービス120との両方が、IoTデバイスの公開鍵のコピーを、IoTデバイス101との通信を暗号化する際に使用されるように安全に記憶する。
図11に関して上述した技術は、新しいIoTデバイスをエンドユーザに提供する際に多大な柔軟性を提供する。(現在行われているのと同様に)ユーザが販売/購入の際に各SIMを特定のサービスプロバイダに直接登録することを要するのではなく、SIMは、エンドユーザによりIoTハブ110を介して直接プログラミングされてもよく、プログラミングの結果は、IoTサービス120に安全に通信され得る。それ故に、新しいIoTデバイス101がオンライン又はローカルの小売業者からエンドユーザに販売され、後にIoTサービス120が安全にプロビジョニングされ得る。
SIM(加入者識別モジュール)という具体的な文脈において登録及び暗号化技術を上述したが、本発明の基本原理は「SIM」デバイスに限定されない。むしろ、本発明の基本原理は、暗号鍵セットを記憶するための安全な記憶装置を有する、いかなるタイプのデバイスを使用して実装されてもよい。更に、上記の実施形態は取り外し可能なSIMデバイスを含むのに対し、一実施形態では、SIMデバイスは取り外し可能でないが、IoTデバイス自体が、IoTハブ110のプログラミングインタフェース1102に挿入されてもよい。
一実施形態では、ユーザがSIM(又は他のデバイス)をプログラミングすることを要するのではなく、SIMは、エンドユーザへの流通前に、IoTデバイス101に予めプログラミングされる。この実施形態において、ユーザがIoTデバイス101をセットアップするとき、本明細書に記載される様々な技術が、IoTハブ110/IoTサービス120と新しいIoTデバイス101との間で暗号鍵を安全に交換するために使用され得る。
例えば、図12Aに例示するように、各IoTデバイス101又はSIM401は、IoTデバイス101及び/又はSIM1001を一意的に識別するバーコード又はQRコード(登録商標)1501と共に梱包されていてもよい。一実施形態では、バーコード又はQRコード1201は、IoTデバイス101又はSIM1001の公開鍵の符号化表現を含む。代替的に、バーコード又はQRコード1201は、IoTハブ110及び/又はIoTサービス120によって、公開鍵を識別又は生成するために使用されてもよい(例えば、安全な記憶装置内に既に記憶されている公開鍵に対するポインタとして使用される)。バーコード又はQRコード601は、別個のカード上に(図12Aに示されるように)印刷されてもよく、又はIoTデバイス自体上に直接印刷されてもよい。バーコードが印刷される場所に関わらず、一実施形態では、IoTハブ110には、バーコードを読み取り、得られたデータをIoTハブ110上のセキュリティロジック1012及び/又はIoTサービス120上のセキュリティロジック1013に提供するための、バーコードリーダ206が備わっている。次いで、IoTハブ110上のセキュリティロジック1012は、その安全な鍵ストア1011内にIoTデバイスの公開鍵を記憶してもよく、IoTサービス120上のセキュリティロジック1013は、その安全な記憶装置1021内に公開鍵を(後の暗号化通信に使用するために)記憶してもよい。
一実施形態では、バーコード又はQRコード1201内に含まれるデータはまた、インストールされたIoTアプリケーション又はIoTサービスプロバイダにより設計されたブラウザベースのアプレットを用いて、ユーザデバイス135(例えば、iPhone又はAndroidデバイスなど)によりキャプチャされてもよい。キャプチャされると、バーコードデータは、安全な接続(例えば、セキュアソケットレイヤー(secure sockets layer)(SSL)接続など)を介して、IoTサービス120に安全に通信され得る。バーコードデータはまた、安全なローカル接続を介して(例えば、ローカルWiFi又はBluetooth LE接続を介して)、クライアントデバイス135からIoTハブ110に提供されてもよい。
IoTデバイス101上のセキュリティロジック1002及びIoTハブ110上のセキュリティロジック1012は、ハードウェア、ソフトウェア、ファームウェア、又はそれらの任意の組み合わせを使用して実装され得る。例えば、一実施形態では、セキュリティロジック1002、1012は、IoTデバイス101とIoTハブ110との間にローカル通信チャネル130を確立するために使用されるチップ(例えば、ローカルチャネル130がBluetooth LEである場合は、Bluetooth LEチップ)内に実装される。セキュリティロジック1002、1012の具体的な位置に関わらず、一実施形態では、セキュリティロジック1002、1012は、ある特定のタイプのプログラムコードを実行するために安全な実行環境を確立するように設計される。これは、例えば、TrustZone技術(一部のARMプロセッサで利用可能)及び/又はトラステッド・エグゼキューション・テクノロジー(Intelにより設計)を使用することによって、実装され得る。当然のことながら、本発明の基本原理は、いかなる特定のタイプの安全な実行技術にも限定されない。
一実施形態では、バーコード又はQRコード1501は、各IoTデバイス101をIoTハブ110とペアリングするために使用され得る。例えば、Bluetooth LEデバイスをペアリングするために現在使用されている標準的な無線ペアリングプロセスを使用するのではなく、バーコード又はQRコード1501内に組み込まれたペアリングコードをIoTハブ110に提供して、IoTハブを対応するIoTデバイスとペアリングしてもよい。
図12Bは、IoTハブ110上のバーコードリーダ206が、IoTデバイス101に関連付けられたバーコード/QRコード1201をキャプチャする、一実施形態を例示する。上述したように、バーコード/QRコード1201は、IoTデバイス101上に直接印刷されてもよく、又はIoTデバイス101と共に提供される別個のカード上に印刷されてもよい。いずれの場合においても、バーコードリーダ206は、バーコード/QRコード1201からペアリングコードを読み取り、このペアリングコードをローカル通信モジュール1280に提供する。一実施形態では、ローカル通信モジュール1280は、Bluetooth LEチップ及び関連付けられたソフトウェアであるが、本発明の基本原理は、いかなる特定のプロトコル標準にも限定されない。ペアリングコードが受信されると、それは、ペアリングデータ1285を含む安全な記憶装置内に記憶され、IoTデバイス101とIoTハブ110とが自動的にペアリングされる。この方法でIoTハブが新しいIoTデバイスとペアリングされるたびに、そのペアリングに関するペアリングデータが、安全な記憶装置685内に記憶される。一実施形態では、IoTハブ110のローカル通信モジュール1280がペアリングコードを受信すると、それは、このコードを鍵として使用して、ローカル無線チャネルを介したIoTデバイス101との通信を暗号化し得る。
同様に、IoTデバイス101側では、ローカル通信モジュール1590が、IoTハブとのペアリングを示すペアリングデータを、ローカルの安全な記憶デバイス1595内に記憶する。ペアリングデータ1295は、バーコード/QRコード1201で識別される予めプログラミングされたペアリングコードを含んでもよい。ペアリングデータ1295はまた、安全なローカル通信チャネルを確立するために必要な、IoTハブ110上のローカル通信モジュール1280から受信されるペアリングデータ(例えば、IoTハブ110との通信を暗号化するための追加の鍵)を含んでもよい。
したがって、バーコード/QRコード1201は、ペアリングコードが無線で送信されないため、現在の無線ペアリングプロトコルよりも遥かに安全な方法でローカルペアリングを実行するために使用され得る。加えて、一実施形態では、ペアリングに使用されるものと同じバーコード/QRコード1201を使用して暗号鍵を識別し、IoTデバイス101からIoTハブ110へ、かつIoTハブ110からIoTサービス120への安全な接続を構築することができる。
本発明の一実施形態によるSIMカードをプログラミングするための方法が、図13に例示される。本方法は、上述のシステムアーキテクチャ内で実装され得るが、いかなる特定のシステムアーキテクチャにも限定されない。
1301において、ユーザは、空のSIMカードを備えた新しいIoTデバイスを受け取り、1602において、ユーザは、空のSIMカードをIoTハブに挿入する。1303において、ユーザは、1つ以上の暗号鍵のセットを用いて空のSIMカードをプログラミングする。例えば、上述のように、一実施形態において、IoTハブは、公開/秘密鍵ペアをランダムに生成し、秘密鍵をSIMカード上に、かつ公開鍵をそのローカルの安全な記憶装置内に記憶し得る。加えて、1304において、IoTデバイスを識別し、かつIoTデバイスとの暗号化通信を確立するために使用され得るように、少なくとも公開鍵がIoTサービスに送信される。上述したように、一実施形態では、「SIM」カード以外のプログラマブルデバイスが、図13に示される方法でSIMカードと同じ機能を実行するために使用されてもよい。
新しいIoTデバイスをネットワークに統合するための方法が、図14に例示される。本方法は、上述のシステムアーキテクチャ内で実装され得るが、いかなる特定のシステムアーキテクチャにも限定されない。
1401において、ユーザは、暗号鍵が予め割り当てられている新しいIoTデバイスを受け取る。1402において、この鍵がIoTハブに安全に提供される。上述のように、一実施形態では、これは、IoTデバイスに関連付けられたバーコードを読み取って、デバイスに割り当てられた公開/秘密鍵ペアの公開鍵を識別することを伴う。バーコードは、IoTハブによって直接読み取られても、又はアプリケーション若しくはブラウザを介してモバイルデバイスによってキャプチャされてもよい。別の実施形態では、Bluetooth LEチャネル、近距離通信(NFC)チャネル、又は安全なWiFiチャネルなどの安全な通信チャネルが、鍵の交換のためにIoTデバイスとIoTハブとの間に確立されてもよい。鍵の送信方法に関わらず、受信されると、鍵はIoTハブデバイスの安全な鍵ストア内に記憶される。上述のように、セキュアエンクレーブ、トラステッド・エグゼキューション・テクノロジー(Trusted Execution Technology)(TXT)、及び/又はTrustzoneなどの様々な安全な実行技術が、鍵の記憶及び保護のためにIoTハブで使用され得る。加えて、803において、鍵はIoTサービスに安全に送信され、IoTサービスは、この鍵をそれ自体の安全な鍵ストア内に記憶する。IoTサービスは次いで、この鍵を使用して、IoTデバイスとの通信を暗号化し得る。この場合も、この交換は、証明書/署名付き鍵を使用して実行されてもよい。ハブ110内では、記憶された鍵の改変/追加/除去を防止することが特に重要である。
公開/秘密鍵を使用してコマンド/データをIoTデバイスに安全に通信するための方法が、図15に例示される。本方法は、上述のシステムアーキテクチャ内で実装され得るが、いかなる特定のシステムアーキテクチャにも限定されない。
1501において、IoTサービスは、IoTデバイス公開鍵を使用してデータ/コマンドを暗号化して、IoTデバイスパケットを作成する。次いで、IoTサービスは、IoTハブの公開鍵を使用し、このIoTデバイスパケットを暗号化して、IoTハブパケットを作成する(例えば、IoTデバイスパケット周囲のIoTハブラッパーを作成する)。1502において、IoTサービスは、IoTハブパケットをIoTハブに送信する。1503において、IoTハブは、IoTハブの秘密鍵を使用してIoTハブパケットを解読して、IoTデバイスパケットを生成する。次いで、1504において、IoTハブは、IoTデバイスパケットをIoTデバイスに送信し、IoTデバイスは、1505において、IoTデバイス秘密鍵を使用してIoTデバイスパケットを解読して、データ/コマンドを生成する。1506において、IoTデバイスは、データ/コマンドを処理する。
対称鍵を使用するある実施形態において、対称鍵交換は、各デバイス間(例えば、各デバイスとハブと、及びハブとサービスとの間)で交渉され得る。鍵交換が完了すると、各送信デバイスは、対称鍵を使用して各送信を暗号化し、かつ/又はそれに署名し、その後、データを受信デバイスに送信する。
モノのインターネット(IoT)システムに安全な通信チャネルを確立するための装置及び方法
本発明の一実施形態では、通信チャネルをサポートするために使用される中間デバイス(例えば、ユーザのモバイルデバイス611及び/又はIoTハブ110など)に関わらず、データの暗号化及び解読は、IoTサービス120と各IoTデバイス101との間で実行される。IoTハブ110を介して通信する一実施形態が図16Aに例示され、IoTハブを必要としない別の実施形態が図16Bに例示される。
最初に図16Aで、IoTデバイス101とIoTサービス120との間の通信を暗号化/解読するために、IoTサービス120は、「サービスセッション鍵」1650のセットを管理する暗号化エンジン1660を含み、各IoTデバイス101は、「デバイスセッション鍵」1651のセットを管理する暗号化エンジン1661を含む。暗号化エンジンは、本明細書に記載するセキュリティ/暗号化技術を実行するとき、セッション公開/秘密鍵ペアを生成して、このペアのセッション秘密鍵へのアクセスを防止するための(他のものの中でも)ハードウェアセキュリティモジュール1630〜1631、及び導出したシークレットを使用してキーストリームを生成するためのキーストリーム生成モジュール1640〜1641を含む、異なるハードウェアモジュールに依拠することができる。一実施形態では、サービスセッション鍵1650及びデバイスセッション鍵1651は、関連する公開/秘密鍵ペアを含む。例えば、一実施形態では、IoTデバイス101上のデバイスセッション鍵1651は、IoTサービス120の公開鍵、及びIoTデバイス101の秘密鍵を含む。以下に詳細に説明するように、一実施形態では、安全な通信セッションを確立するために、セッション公開/秘密鍵ペア1650及び1651がそれぞれの暗号化エンジン、それぞれ1660及び1661によって使用されて、同じシークレットを生成し、このシークレットは次にSKGM1640〜1641によって使用されて、IoTサービス120とIoTデバイス101との間の通信を暗号化及び解読するキーストリームを生成する。本発明の一実施形態によるシークレットの生成及び使用に関連付けられた追加の詳細は、以下に提供される。
図16Aで、鍵1650〜1651を使用してシークレットが生成されると、クライアントは、クリアトランザクション1611によって示されるように常にIoTサービス120を介してIoTデバイス101にメッセージを送信することになる。本明細書で使用されるとき「クリア」は、根本的なメッセージが本明細書に記載された暗号化技術を使用して暗号化されていないことを示すことを意味する。しかし、例示したように、一実施形態では、セキュアソケットレイヤー(SSL)チャネル又は他の安全なチャネル(例えば、インターネットプロトコルセキュリティ(Internet Protocol Security)(IPSEC)チャネル)は、通信を保護するためにクライアントデバイス611とIoTサービス120との間で確立される。IoTサービス120上の暗号化エンジン1660は、次に、生成されたシークレットを使用してメッセージを暗号化して、1602で暗号化メッセージをIoTハブ110に送信する。メッセージを直接暗号化するためにシークレットを使用するのではなく、一実施形態では、シークレット及びカウンタ値を使用して、キーストリームを生成し、このキーストリームを使用して、それぞれのメッセージパケットを暗号化する。この実施形態の詳細は、図17に関して以下に説明する。
例示したように、SSL接続又は他の安全なチャネルは、IoTサービス120とIoTハブ110との間で確立することができる。IoTハブ110(一実施形態ではメッセージを解読する能力を有さない)は、1603で(例えば、Bluetooth Low Energy(BTLE)通信チャネルを介して)暗号化メッセージをIoTデバイスに送信する。IoTデバイス101上の暗号化エンジン1661は、次に、シークレットを使用してメッセージを解読して、メッセージコンテンツを処理することができる。キーストリームを生成するためにシークレットを使用する実施形態では、暗号化エンジン1661は、シークレット及びカウンタ値を使用してキーストリームを生成し、次にメッセージパケットの解読のためにキーストリームを使用することができる。
メッセージ自体は、IoTサービス120とIoTデバイス101との間の任意の形態の通信を含むことができる。例えば、メッセージは、測定を行ってその結果をクライアントデバイス611に通知して返すことなどの特定の機能を実行することをIoTデバイス101に命令するコマンドパケットを含むことができる、又はIoTデバイス101の動作を構成する構成データを含むことができる。
応答が必要とされる場合、IoTデバイス101上の暗号化エンジン1661は、シークレット又は導出されたキーストリームを使用して、応答を暗号化し、1604で暗号化応答をIoTハブ110に送信し、IoTハブ110は、1605で応答をIoTサービス120に転送する。IoTサービス120上の暗号化エンジン1660は、次に、シークレット又は導出されたキーストリームを使用して応答を解読して、1606で(例えば、SSL又は他の安全な通信チャネルを介して)解読された応答をクライアントデバイス611に送信する。
図16Bは、IoTハブを必要としない実施形態を例示する。むしろ、この実施形態では、IoTデバイス101とIoTサービス120との間の通信は、クライアントデバイス611を介して行われる(例えば、図6〜9Bに関して上述した実施形態におけるように)。この実施形態では、メッセージをIoTデバイス101に送信するために、クライアントデバイス611は、1611でメッセージの非暗号化バージョンをIoTサービス120に送信する。暗号化エンジン1660は、シークレット又は導出されたキーストリームを使用してメッセージを暗号化して、1612で暗号化メッセージをクライアントデバイス611に返送する。クライアントデバイス611は、次に、1613で暗号化メッセージをIoTデバイス101に転送し、暗号化エンジン1661は、シークレット又は導出されたキーストリームを使用してメッセージを解読する。IoTデバイス101は、次に、本明細書に記載されたようにメッセージを処理することができる。応答が必要とされる場合、暗号化エンジン1661は、シークレットを使用して、応答を暗号化し、1614で暗号化応答をクライアントデバイス611に送信し、クライアントデバイス611は、1615で暗号化応答をIoTサービス120に転送する。暗号化エンジン1660は、次に、応答を解読して、1616で解読された応答をクライアントデバイス611に送信する。
図17は、IoTサービス120とIoTデバイス101との間で最初に実行することができる鍵交換及びキーストリーム生成を例示する。一実施形態では、この鍵交換は、IoTサービス120及びIoTデバイス101が新しい通信セッションを確立するたびに実行することができる。代替的に、鍵交換を実行することができ、交換されたセッション鍵を指定された期間(例えば、一日、一週間など)使用することができる。簡潔にするために図17に中間デバイスは示されていないが、通信は、IoTハブ110及び/又はクライアントデバイス611を介して行うことができる。
一実施形態では、IoTサービス120の暗号化エンジン1660は、セッション公開/秘密鍵ペアを生成するために、コマンドをHSM1630(例えば、Amazon(登録商標)によって提供されるCloudHSMなどとすることができる)に送信する。HSM1630は、その後、このペアのセッション秘密鍵へのアクセスを防止することができる。同様に、IoTデバイス101上の暗号化エンジンは、セッション公開/秘密鍵ペアを生成してこのペアのセッション秘密鍵へのアクセスを防止するHSM1631(例えば、Atmel Corporation(登録商標)によるAtecc508 HSMなどの)にコマンドを送信することができる。当然のことながら、本発明の基本原理は、いかなる特定のタイプの暗号化エンジン又は製造業者にも限定されない。
一実施形態では、IoTサービス120は、1701で、HSM1630を使用して生成されたそのセッション公開鍵をIoTデバイス101に送信する。IoTデバイスは、そのHSM1631を使用して、それ自体のセッション公開/秘密鍵ペアを生成し、1702でそのペアの公開鍵をIoTサービス120に送信する。一実施形態では、暗号化エンジン1660〜1661は、楕円曲線Diffie−Hellman(Elliptic curve Diffie−Hellman)(ECDH)プロトコルを使用し、このプロトコルは、楕円曲線公開−秘密鍵ペアを有する2つの当事者が共有シークレットを確立することができる匿名鍵の取り決めである。一実施形態では、これらの技術を使用して、1703で、IoTサービス120の暗号化エンジン1660は、IoTデバイスセッション公開鍵及びそれ自体のセッション秘密鍵を使用してシークレットを生成する。同様に、1704で、IoTデバイス101の暗号化エンジン1661は、IoTサービス120のセッション公開鍵及びそれ自体のセッション秘密鍵を使用して同じシークレットを独自に生成する。より具体的には、一実施形態では、IoTサービス120上の暗号化エンジン1660は、シークレット=IoTデバイスセッション公開鍵*IoTサービスセッション秘密鍵という式に従って、シークレットを生成し、ここで(*)は、IoTデバイスセッション公開鍵がIoTサービスセッション秘密鍵によって点乗積されることを意味する。IoTデバイス101上の暗号化エンジン1661は、シークレット=IoTサービスセッション公開鍵*IoTデバイスセッション秘密鍵という式に従って、シークレットを生成し、IoTサービスセッション公開鍵は、IoTデバイスセッション秘密鍵によって点乗積される。結局、IoTサービス120及びIoTデバイス101は両方とも、以下に説明するように通信を暗号化するのに使用される同じシークレットを生成した。一実施形態では、暗号化エンジン1660〜1661は、シークレットを生成するための上記の動作を実行するKSGM、それぞれ1640〜1641などのハードウェアモジュールに依拠する。
シークレットが決定されると、シークレットは、暗号化エンジン1660及び1661によって使用されて、データを直接暗号化及び解読することができる。代替的に、一実施形態では、暗号化エンジン1660〜1661は、コマンドをKSGM1640〜1641に送信して、それぞれのデータパケットを暗号化/解読するためにシークレットを使用して新しいキーストリームを生成する(すなわち、それぞれのパケットに対して新しいキーストリームデータ構造が生成される)。具体的には、キーストリーム生成モジュール1640〜1641の一実施形態は、それぞれのデータパケットに対してカウンタ値が増加され、キーストリームを生成するためにシークレットと組み合わせて使用される、Galois/カウンタモード(Galois/Counter Mode)(GCM)を実装する。したがって、データパケットをIoTサービス120に送信するために、IoTデバイス101の暗号化エンジン1661は、シークレット及び現在のカウンタ値を使用して、KSGM1640〜1641に新しいキーストリームを生成させ、次のキーストリームを生成するためにカウンタ値を増加させる。次に、新たに生成されたキーストリームを使用して、データパケットを暗号化し、その後、IoTサービス120に送信される。一実施形態では、キーストリームは、データでXORされて、暗号化データパケットを生成する。一実施形態では、IoTデバイス101は、カウンタ値を暗号化データパケットと共にIoTサービス120に送信する。IoTサービス上の暗号化エンジン1660は、次に、KSGM1640と通信し、KSGM1640は、受信したカウンタ値及びシークレットを使用して、キーストリーム(同じシークレット及びカウンタ値が使用されるので同じキーストリームでなければならない)を生成し、生成されたキーストリームを使用して、データパケットを解読する。
一実施形態では、IoTサービス120からIoTデバイス101に送信されるデータパケットは、同じ方法で暗号化される。具体的には、それぞれのデータパケットに対してカウンタが増加されて、シークレットと共に使用されて、新しいキーストリームを生成する。キーストリームは、次に、データを暗号化するために使用され(例えば、データ及びキーストリームのXORを実行して)、暗号化データパケットは、カウンタ値と共にIoTデバイス101に送信される。IoTデバイス101上の暗号化エンジン1661は、次に、KSGM1641と通信し、KSGM1641は、カウンタ値及びシークレットを使用して、データパケットを解読するために使用される同じキーストリームを生成する。したがって、この実施形態では、暗号化エンジン1660〜1661は、それら自体のカウンタ値を使用して、データを暗号化するキーストリームを生成し、暗号化データパケットと共に受信したカウンタ値を使用して、データを解読するキーストリームを生成する。
一実施形態では、それぞれの暗号化エンジン1660〜1661は、それが他方から受信した最後のカウンタ値を追跡し、カウンタ値がシーケンス外で受信されたか否か又は同じカウンタ値が1回より多く受信されたか否かを検出するシーケンシングロジックを含む。カウンタ値がシーケンス外で受信された場合、又は同じカウンタ値が1回より多く受信された場合、これは、リプレイアタックが試みられていることを示し得る。それに応答して、暗号化エンジン1660〜1661は、通信チャネルから接続を切ることができる、及び/又はセキュリティアラートを生成することができる。
図18は、4バイトのカウンタ値1800と、可変サイズの暗号化データフィールド1801と、6バイトのタグ1802とを含む、本発明の一実施形態で用いられる例示的な暗号化データパケットを例示する。一実施形態では、タグ1802は、解読されたデータ(それが解読されたら)の妥当性を確認するチェックサム値を含む。
上述したように、一実施形態では、IoTサービス120とIoTデバイス101との間で交換されたセッション公開/秘密鍵ペア1650〜1651は、定期的に、及び/又はそれぞれの新しい通信セッションの開始に応答して生成することができる。
本発明の一実施形態は、IoTサービス120とIoTデバイス101との間のセッションを認証するための追加の技術を実装する。具体的には、一実施形態では、親鍵ペア、工場鍵ペアのセット、並びにIoTサービス鍵ペアのセット及びIoTデバイス鍵ペアのセットを含む、公開/秘密鍵ペアの階層が使用される。一実施形態では、親鍵ペアは、他の鍵ペアのすべてに対する信頼のルートを含み、単一の高度に安全な場所に(例えば、本明細書に記載されたIoTシステムを実装する組織の管理下に)維持される。マスター秘密鍵を使用して、工場鍵ペアなどの様々な他の鍵ペアの上に署名を生成する(及びそれによって認証する)ことができる。署名は、次に、マスター公開鍵を使用して検証することができる。一実施形態では、IoTデバイスを製造するそれぞれの工場は、それ自体の工場鍵ペアを割り当てられ、工場鍵ペアは、次に、IoTサービス鍵及びIoTデバイス鍵を認証するために使用することができる。例えば、一実施形態では、工場秘密鍵を使用して、IoTサービス公開鍵及びIoTデバイス公開鍵の上に署名を生成する。これらの署名は、次に、対応する工場公開鍵を使用して検証することができる。これらのIoTサービス/デバイス公開鍵は、図16A〜Bに関して上述した「セッション」公開/秘密鍵と同じではないことに留意されたい。上述したセッション公開/秘密鍵は、一時的であり(すなわち、サービス/デバイスセッションに対して生成される)、一方、IoTサービス/デバイス鍵ペアは、恒久的なものである(すなわち、工場で生成される)。
親鍵、工場鍵、サービス/デバイス鍵の間の上述の関係を念頭に、本発明の一実施形態は、IoTサービス120とIoTデバイス101との間の認証及びセキュリティの追加のレイヤを提供するために、以下の動作を実行する。
A.一実施形態では、IoTサービス120は、最初に、以下を含むメッセージを生成する。
1.IoTサービスの一意的なID:
・IoTサービスのシリアルナンバー、
・タイムスタンプ、
・この一意的なIDに署名するために使用される工場鍵のID、
・一意的なID(すなわち、サービス)のクラス、
・IoTサービスの公開鍵、
・一意的なIDの上の署名。
2.以下を含む工場証明書:
・タイムスタンプ、
・証明書に署名するために使用される親鍵のID、
・工場公開鍵、
・工場証明書の署名。
3.IoTサービスセッション公開鍵(図16A〜Bに関して上述したような)
4.IoTサービスセッション公開鍵署名(例えば、IoTサービスの秘密鍵で署名された)
B.一実施形態では、メッセージは、交渉チャネル(以下に説明する)上でIoTデバイスに送信される。IoTデバイスは、メッセージを解析して:
1.工場証明書の署名(メッセージペイロード内に存在する場合のみ)を検証する。
2.一意的なIDによって識別された鍵を使用して一意的なIDの署名を検証する。
3.一意的なIDからのIoTサービスの公開鍵を使用してIoTサービスセッション公開鍵署名を検証する。
4.IoTサービスの公開鍵、並びにIoTサービスのセッション公開鍵を保存する。
5.IoTデバイスセッション鍵ペアを生成する。
C.IoTデバイスは、次に、以下を含むメッセージを生成する:
1.IoTデバイスの一意的なID
・IoTデバイスのシリアルナンバー、
・タイムスタンプ、
・この一意的なIDに署名するために使用される工場鍵のID、
・一意的なID(すなわち、IoTデバイス)のクラス、
・IoTデバイスの公開鍵、
・一意的なIDの署名。
2.IoTデバイスのセッション公開鍵
3.IoTデバイスの鍵で署名された(IoTデバイスセッション公開鍵+IoTサービスセッション公開鍵)の署名
D.このメッセージは、IoTサービスに返送される。IoTサービスは、メッセージを解析して:
1.工場公開鍵を使用して一意的なIDの署名を検証する。
2.IoTデバイスの公開鍵を使用してセッション公開鍵の署名を検証する。
3.IoTデバイスのセッション公開鍵を保存する。
E.IoTサービスは、次に、IoTサービスの鍵で署名された(IoTデバイスセッション公開鍵+IoTサービスセッション公開鍵)の署名を含むメッセージを生成する。
F.IoTデバイスは、メッセージを解析して:
1.IoTサービスの公開鍵を使用してセッション公開鍵の署名を検証する。
2.IoTデバイスセッション秘密鍵及びIoTサービスのセッション公開鍵からキーストリームを生成する。
3.IoTデバイスは、次に、「メッセージング利用可能」メッセージを送信する。
G.IoTサービスは、次に、以下を実行する:
1.IoTサービスセッション秘密鍵及びIoTデバイスのセッション公開鍵からキーストリームを生成する。
2.以下を含めて、メッセージングチャネル上で新しいメッセージを作成する:
・ランダムな2バイト値を生成して記憶する。
・ブーメラン属性Id(以下に説明する)及びランダム値を有する属性メッセージを設定する。
H.IoTデバイスは、メッセージを受信して:
1.メッセージを解読することを試みる。
2.示された属性Id上と同じ値を有する更新を送信する。
I.IoTサービスは、メッセージペイロードがブーメラン属性更新を含むことを認識する:
1.そのペアリング状態を真に設定する。
2.交渉チャネル上でペアリング完了メッセージを送信する。
J.IoTデバイスは、メッセージを受信して、IoTデバイスのペアリング状態を真に設定する。
上述の技術は「IoTサービス」及び「IoTデバイス」に関して説明したが、本発明の基本原理は、ユーザのクライアントデバイス、サーバ、及びインターネットサービスを含む、任意の2つのデバイス間で安全な通信チャネルを確立するように実装することができる。
上述の技術は、秘密鍵が無線で共有されない(シークレットが片方の当事者から他方に送信される現在のBluetoothペアリング技術と対照的に)ので、高度に安全である。会話全体を聞いている攻撃者は、公開鍵を有するのみということになり、これは、共有シークレットを生成するために不十分である。これらの技術はまた、署名された公開鍵を交換することによる中間者攻撃を防止する。加えて、GCM及び別個のカウンタがそれぞれのデバイス上で使用されるため、任意の種類の「リプレイアタック」(中間者がデータをキャプチャしてそれを再度送信する)が防止される。いくつかの実施形態はまた、非対称カウンタを使用することによりリプレイアタックを防止する。
デバイスを正式にペアリングすることなくデータ及びコマンドを交換するための技術
GATTは、一般属性プロファイル(Generic Attribute Profile)に対する頭字語であり、これは、2つのBluetooth Low Energy(BTLE)デバイスがデータを往復して伝送する方法を規定する。これは、属性プロトコル(Attribute Protocol)(ATT)と呼ばれる一般データプロトコルを利用し、このプロトコルは、簡単なルックアップテーブルに、テーブルへの入力ごとに16ビットの特性IDを使用してサービス、特性、及び関連データを記憶するために使用される。一方で「特性」は、「属性」と呼ばれることもあることに留意されたい。
Bluetoothデバイス上で、最も一般的に使用される特性は、デバイスの「名前」(特性ID 10752(0x2A00)を有する)である。例えば、Bluetoothデバイスは、その近傍内の他のBluetoothデバイスを、GATTを使用してこれらの他のBluetoothデバイスによって発行された「名前」特性を読み取ることにより、識別することができる。したがって、Bluetoothデバイスは、デバイスを正式にペアリング/結合することなくデータを交換するための固有の能力を有する(「ペアリング」と「結合」とが時として交換可能に使用される点に留意されたい。この議論の残りは、用語「ペアリング」を使用することになる)。
本発明の一実施形態は、BTLE対応IoTデバイスと、これらのデバイスと正式にペアリングすることなく通信するために、この能力を利用する。それぞれの個別のIoTデバイスとのペアリングは、ペアリングするために必要とされる時間のため、及び同時に1つのペアリングされた接続のみを確立することができるため、著しく非効率であろう。
図19は、Bluetooth(BT)デバイス1910が、ペアリングされたBT接続を正式に確立することなくIoTデバイス101のBT通信モジュール1901とのネットワークソケットアブストラクションを確立する、特定の一実施形態を例示する。BTデバイス1910は、図16Aに示すようなIoTハブ110及び/又はクライアントデバイス611内に含めることができる。例示したように、BT通信モジュール1901は、特性ID、それらの特性IDに関連付けられた名前、及びそれらの特性IDに対する値のリストを含むデータ構造を維持する。それぞれの特性に対する値は、現在のBT標準に従って特性IDにより識別された20バイトのバッファに記憶することができる。しかしながら、本発明の基本原理は、いかなる特定のバッファサイズにも限定されない。
図19の実施例では、「名前」特性は、「IoTデバイス14」の特定の値を割り当てられたBTで規定された特性である。本発明の一実施形態は、BTデバイス1910との安全な通信チャネルを交渉するために使用される追加の特性の第1のセット、及びBTデバイス1910との暗号化通信のために使用される追加の特性の第2のセットを指定する。具体的には、例示した実施例で特性ID<65532>により識別された「交渉書込」特性は、発信交渉メッセージを送信するために使用することができ、特性ID<65533>により識別された「交渉読取」特性は、受信交渉メッセージを受信するために使用することができる。「交渉メッセージ」は、本明細書に記載されたような安全な通信チャネルを確立するためにBTデバイス1910及びBT通信モジュール1901によって使用されるメッセージを含むことができる。例として、図17で、IoTデバイス101は、「交渉読取」特性<65533>を介してIoTサービスセッション公開鍵1701を受信することができる。鍵1701は、IoTサービス120からBTLE対応IoTハブ110又はクライアントデバイス611に送信することができ、それらは、次に、GATTを使用して、特性ID<65533>により識別された交渉読取値バッファに鍵1701を書込むことができる。IoTデバイスのアプリケーションロジック1902は、次に、特性ID<65533>により識別された値バッファから鍵1701を読み取って、上述したようにそれを処理することができる(例えば、それを使用してシークレットを生成し、シークレットを使用してキーストリームを生成するなど)。
鍵1701が20バイト(一部の現在の実装形態での最大バッファサイズ)より大きい場合は、鍵は20バイトの部分に書き込むことができる。例えば、最初の20バイトは、BT通信モジュール1903によって特性ID<65533>に書き込んで、IoTデバイスアプリケーションロジック1902によって読み取ることができ、IoTデバイスアプリケーションロジック1902は、次に、確認応答メッセージを特性ID<65532>により識別された交渉書込値バッファに書込むことができる。GATTを使用して、BT通信モジュール1903は、この確認応答を特性ID<65532>から読み取ることができ、それに応じて、鍵1701の次の20バイトを特性ID<65533>により識別された交渉読取値バッファに書込むことができる。この方法で、特性ID<65532>及び<65533>により規定されたネットワークソケットアブストラクションは、安全な通信チャネルを確立するために使用される交渉メッセージを交換するために確立される。
一実施形態では、安全な通信チャネルが確立されると、特性ID<65534>(IoTデバイス101から暗号化データパケットを送信するための)及び特性ID<65533>(IoTデバイスにより暗号化データパケットを受信するための)を使用して、第2のネットワークソケットアブストラクションが確立される。すなわち、BT通信モジュール1903が送信する暗号化データパケット(例えば、図16Aの暗号化メッセージ1603などの)を有するとき、BT通信モジュール1903は、特性ID<65533>により識別されたメッセージ読取値バッファを使用して一度に20バイト、暗号化データパケットを書込み始める。IoTデバイスアプリケーションロジック1902は、次に、読取値バッファから一度に20バイト、暗号化データパケットを読み取り、必要に応じて特性ID<65532>により識別された書込値バッファを介して確認応答メッセージをBT通信モジュール1903に送信することになる。
一実施形態では、後述するGET、SET、及びUPDATEのコマンドを使用して、2つのBT通信モジュール1901と1903との間でデータ及びコマンドを交換する。例えば、BT通信モジュール1903は、特性ID<65533>を識別しSETコマンドを含むパケットを送信して、特性ID<65533>により識別された値フィールド/バッファに書込むことができ、それは次に、IoTデバイスアプリケーションロジック1902によって読み取ることができる。IoTデバイス101からデータを取得するために、BT通信モジュール1903は、特性ID<65534>により識別された値フィールド/バッファに向けられたGETコマンドを送信することができる。GETコマンドに応答して、BT通信モジュール1901は、特性ID<65534>により識別された値フィールド/バッファからのデータを含むUPDATEパケットをBT通信モジュール1903に送信することができる。加えて、UPDATEパケットは、IoTデバイス101上の特定の属性の変化に応答して、自動的に送信することができる。例えば、IoTデバイスが照明システムに関連付けられていて、ユーザが照明をオンにする場合、UPDATEパケットを送信して、照明アプリケーションに関連付けられたオン/オフ属性にこの変化を反映することができる。
図20は、本発明の一実施形態による、GET、SET、及びUPDATE用に使用される例示的なパケット形式を例示する。一実施形態では、これらのパケットは、交渉の後に、メッセージ書込<65534>及びメッセージ読取<65533>チャネルを介して送信される。GETパケット2001では、最初の1バイトのフィールドは、パケットをGETパケットとして識別する値(0X10)を含む。2番目の1バイトのフィールドは、現在のGETコマンドを一意的に識別する(すなわち、GETコマンドが関連付けられた現在のトランザクションを識別する)要求IDを含む。例えば、サービス又はデバイスから送信されたGETコマンドのそれぞれのインスタンスに、異なる要求IDを割り当てることができる。これは、例えば、カウンタを増加させて、カウンタ値を要求IDとして使用することにより、実行することができる。しかしながら、本発明の基本原理は、要求IDを設定するためのいかなる特定の方法にも限定されるものではない。
2バイトの属性IDは、パケットが向けられたアプリケーション特有の属性を識別する。例えば、GETコマンドが図19に例示したIoTデバイス101に送信されている場合、属性IDを使用して、要求されている特定のアプリケーション特有の値を識別することができる。上述の実施例に戻って、GETコマンドは、照明システムの電源状態などのアプリケーション特有の属性IDに向けることができ、この属性IDは、照明が電源がオン又はオフになっているかを識別する値(例えば、1=オン、0=オフ)を含む。IoTデバイス101がドアに関連付けられたセキュリティ装置である場合、値フィールドは、ドアの現在の状態(例えば、1=開いている、0=閉じている)を識別することができる。GETコマンドに応答して、属性IDにより識別された現在の値を含む応答を送信することができる。
図20に例示したSETパケット2002及びUPDATEパケット2003もまた、パケットのタイプ(すなわち、SET及びUPDATE)を識別する最初の1バイトのフィールド、要求IDを含む2番目の1バイトのフィールド、及びアプリケーションで定義された属性を識別する2バイトの属性IDフィールドを含む。加えて、SETパケットは、nバイトの値データフィールドに含まれたデータの長さを識別する2バイト長の値を含む。値データフィールドは、IoTデバイス上で実行されるコマンド、及び/又はなんらかの方法でIoTデバイスの動作を構成する(例えば、所望のパラメータを設定する、IoTデバイスの電源を切るなど)構成データを含むことができる。例えば、IoTデバイス101がファンの速度を制御する場合、値フィールドは、現在のファンの速度を反映することができる。
UPDATEパケット2003は、SETコマンドの結果の更新を提供するために送信することができる。UPDATEパケット2003は、SETコマンドの結果に関連したデータを含むことができるnバイトの値データフィールドの長さを識別する、2バイト長の値フィールドを含む。加えて、1バイトの更新状態フィールドは、更新されている変数の現在の状態を識別することができる。例えば、SETコマンドがIoTデバイスにより制御された照明をオフにすることを試みた場合、更新状態フィールドは、照明が正常にオフにされたか否かを示すことができる。
図21は、SET及びUPDATEコマンドを伴うIoTサービス120とIoTデバイス101との間の例示的なトランザクションのシーケンスを例示する。IoTハブ及びユーザのモバイルデバイスなどの中間デバイスは、本発明の基本原理を不明瞭にすることを避けるために示されていない。2101で、SETコマンド2101は、IoTサービスからIoTデバイス101に送信されて、BT通信モジュール1901により受信され、BT通信モジュール1901は、それに応じて、2102で特性IDにより識別されたGATT値バッファを更新する。SETコマンドは、2103で低電力マイクロコントローラ(microcontroller)(MCU)200により(又は図19に示すIoTデバイスアプリケーションロジック1902などの低電力MCU上で実行されているプログラムコードにより)値バッファから読み取られる。2104で、MCU200又はプログラムコードは、SETコマンドに応答して動作を実行する。例えば、SETコマンドは、新しい温度などの新しい構成パラメータを指定する属性IDを含むことができる、又はオン/オフなどの状態値(IoTデバイスを「オン」又は低電力状態に入らせるための)を含むことができる。したがって、2104で、新しい値がIoTデバイスに設定され、2105でUPDATEコマンドが返され、2106でGATT値フィールドの実際の値が更新される。場合により、実際の値は、所望の値に等しいであろう。他の場合では、更新された値は、異なることがある(すなわち、IoTデバイス101がある特定のタイプの値を更新するのに時間がかかることがあるため)。最終的に、2107で、GATT値フィールドからの実際の値を含むUPDATEコマンドがIoTサービス120に返送される。
図22は、本発明の一実施形態によるIoTサービスとIoTデバイスとの間で安全な通信チャネルを実装するための方法を例示する。本方法は、上述のネットワークアーキテクチャとの関連で実装され得るが、いかなる特定のアーキテクチャにも限定されない。
2201で、IoTサービスは、楕円曲線デジタル署名アルゴリズム(elliptic curve digital signature algorithm)(ECDSA)証明書を使用してIoTハブと通信するための暗号化チャネルを作成する。2202で、IoTサービスは、セッションシークレットを使用してIoTデバイスパケット内のデータ/コマンドを暗号化して、暗号化デバイスパケットを作成する。上述したように、セッションシークレットは、IoTデバイス及びIoTサービスによって独自に生成することができる。2203で、IoTサービスは、暗号化チャネルを介して暗号化デバイスパケットをIoTハブに送信する。2204で、解読することなく、IoTハブは、暗号化デバイスパケットをIoTデバイスに渡す。22−5で、IoTデバイスは、セッションシークレットを使用して、暗号化デバイスパケットを解読する。上述したように、一実施形態では、これは、シークレット及びカウンタ値(暗号化デバイスパケットと共に提供される)を使用してキーストリームを生成し、次にキーストリームを使用してパケットを解読することにより実現することができる。2206で、IoTデバイスは、次に、デバイスパケットに含まれたデータ及び/又はコマンドを抽出して処理する。
したがって、上述の技術を使用して、標準的なペアリング技術を使用して、BTデバイスを正式にペアリングすることなく、2つのBT対応デバイス間で双方向の安全なネットワークソケットアブストラクションを確立することができる。これらの技術は、IoTサービス120と通信するIoTデバイス101に関して上述したが、本発明の基本原理は、任意の2つのBT対応デバイス間で安全な通信チャネルを交渉して確立するように実装することができる。
図23A〜Cは、本発明の一実施形態によるデバイスをペアリングするための詳細な方法を例示する。本方法は、上述のシステムアーキテクチャとの関連で実装され得るが、いかなる特定のシステムアーキテクチャにも限定されない。
2301で、IoTサービスは、IoTサービスのシリアルナンバー及び公開鍵を含むパケットを作成する。2302で、IoTサービスは、工場秘密鍵を使用してパケットに署名する。2303で、IoTサービスは、暗号化チャネルを介してIoTハブにパケットを送信し、2304で、IoTハブは、非暗号化チャネルを介してIoTデバイスにパケットを転送する。2305で、IoTデバイスは、パケットの署名を検証し、2306で、IoTデバイスは、IoTデバイスのシリアルナンバー及び公開鍵を含むパケットを生成する。2307で、IoTデバイスは、工場秘密鍵を使用してパケットに署名し、2308で、IoTデバイスは、非暗号化チャネルを介してIoTハブにパケットを送信する。
2309で、IoTハブは、暗号化チャネルを介してパケットをIoTサービスに転送し、2310で、IoTサービスは、パケットの署名を検証する。2311で、IoTサービスは、セッション鍵ペアを生成し、2312で、IoTサービスは、セッション公開鍵を含むパケットを生成する。IoTサービスは、次に、2313で、IoTサービス秘密鍵でパケットに署名し、2314で、IoTサービスは、暗号化チャネルを介してパケットをIoTハブに送信する。
図23Bに移って、2315で、IoTハブは、非暗号化チャネルを介してパケットをIoTデバイスに転送し、2316で、IoTデバイスは、パケットの署名を検証する。2317で、IoTデバイスは、セッション鍵ペアを生成し(例えば、上述の技術を使用して)、2318で、IoTデバイスセッション公開鍵を含むIoTデバイスパケットが生成される。2319で、IoTデバイスは、IoTデバイス秘密鍵でIoTデバイスパケットに署名する。2320で、IoTデバイスは、非暗号化チャネルを介してIoTハブにパケットを送信し、2321で、IoTハブは、暗号化チャネルを介してIoTサービスにパケットを転送する。
2322で、IoTサービスは、パケットの署名を検証し(例えば、IoTデバイス公開鍵を使用して)、2323で、IoTサービスは、IoTサービス秘密鍵及びIoTデバイス公開鍵を使用して、セッションシークレットを生成する(先に詳細に説明したように)。2324で、IoTデバイスは、IoTデバイス秘密鍵及びIoTサービス公開鍵を使用して、セッションシークレットを生成し(また、上述したように)、2325で、IoTデバイスは、乱数を生成して、セッションシークレットを使用してその乱数を暗号化する。2326で、IoTサービスは、暗号化チャネルを介して暗号化パケットをIoTハブに送信する。2327で、IoTハブは、非暗号化チャネルを介して暗号化パケットをIoTデバイスに転送する。2328で、IoTデバイスは、セッションシークレットを使用してパケットを解読する。
図23Cに移って、2329で、IoTデバイスは、セッションシークレットを使用してパケットを再暗号化し、2330で、IoTデバイスは、非暗号化チャネルを介して暗号化パケットをIoTハブに送信する。2331で、IoTハブは、暗号化チャネルを介して暗号化パケットをIoTサービスに転送する。2332で、IoTサービスは、セッションシークレットを使用してパケットを解読する。2333で、IoTサービスは、乱数がIoTサービスが送信した乱数と一致することを検証する。IoTサービスは、次に、2334で、ペアリングが完了したことを示すパケットを送信し、2335で、その後のメッセージはすべて、セッションシークレットを使用して暗号化される。
専用のIoTハブ110が上記の多くの実施形態に示されているけれども、専用のIoTハブハードウェアプラットフォームが本発明の基本原理に従うのに必要ではない。例えば、上記の様々なIoTハブは、iPhones(登録商標)及びAndroid(登録商標)デバイスなどの様々な別のネットワーキングデバイス内で実行されるソフトウェア(例えば、IoTデバイスアプリ)として実装されてもよい。実際に、本明細書に記載されたIoTハブは、(例えば、BTLE又は別のローカル無線プロトコルを使用して)IoTデバイスと通信することができる、及び(例えば、WiFi又はセルラーのデータ接続を使用してIoTサービスに)インターネットを介して接続を確立することができる任意のデバイスに実装されてもよい。
マイクロコンローラと通信モジュールとの間の効率的な通信のためのインタフェース及び方法
上述したように、一実施形態では、それぞれのIoTデバイスは、(例えば、IoTデバイスによって実施される特定の機能に従って)特定用途向け機能を果たすプログラムコードを実行するIoTサービス及びマイクロコントローラユニット(MCU)との安全な通信チャネルを確立するためのセキュア通信モジュールを含む。一実施形態では、シリアル通信インタフェースは、MCUとセキュア通信モジュールとの間で通信可能に連結される。
図24は、シリアル周辺インタフェース(serial peripheral interface)(SPI)2410を使用して、MCU2401とセキュア通信モジュール2402との間で双方向通信を提供する特定の一実施形態を例示する。SPIインタフェース2410は、主に埋め込みシステムで近距離通信に使用される同期シリアル通信インタフェース仕様である。一実施形態では、SPI通信プロトコルに従って、MCU2401は、マスターとして動作し、セキュア通信モジュール2402は、スレーブとして動作する。したがって、後述のいくつかの実施形態では、MCUを単純に「マスター」と呼び、セキュア通信モジュールを「スレーブ」と呼ぶ。
本明細書で使用するとき、SPIインタフェース2410は、マスター2401をスレーブ2402と接続するSPIバスライン、並びにマスター及びスレーブ上のSPIインタフェース回路(より詳細に後述される)の両方を指す。SPIインタフェース2410の通信バスラインは、マスター2401によって生成されるシステムクロック(SCK)、マスター2401によって制御されるチップセレクト(CS)、マスター2401からスレーブ2402へデータを送信するためのマスターアウトスレーブイン(MOSI)通信回線、及びスレーブ2402からマスター2041へデータを送信するためのマスターインスレーブアウト(MISO)通信回線を含む。
標準SPIプロトコルでは、マスターが、スレーブとのすべての通信を開始する必要がある。したがって、スレーブからデータを受信するために、マスターは、チップセレクト(CS)ラインを制御し、データを必要とする若しくはデータを送信する必要があるとスレーブに対して知らせる必要がある。一定期間の後(2ms程度であってよい)、スレーブは、応答する準備ができると、データを送信する。マスターとスレーブとの間の通信を調整するためのハンドシェーキング及び待ち時間の量により、特にマスターとスレーブとの間で大量のデータをストリームする必要があるとき、現在のSPIプロトコルは非効率である。
このように、一実施形態では、制御ライン2410を追加して、マスター2401とスレーブ2402との間でSPIインタフェースを実行できる速度を向上させる。特に、マスター2401又はスレーブ2402のどちらかが、他方に送信される必要があるデータを有するとき、制御ライン2410をローにプルし、データを送信する準備ができていることを通知する。スレーブ2402がデータを送信したい場合に制御ライン2401をローにプルし、ラインがローであるのを発見すると、マスター2401がSPIインタフェース2410を使用してトランザクションを開始するので、このことは、SPIインタフェース2410上のトランザクションのすべてを、より効率の良い方法で調整する。スレーブ2402は、次にデータを送信する。一実施形態では、トランザクションは双方向であり、そのためデータを両方向に同時にストリームすることができる。トランザクションが完了すると、マスター2401及びスレーブ2402の両方(bother)は、制御ライン2410をリリースし、この制御ラインは再度、マスター及びスレーブの両方にいずれかのパーティが新しいトランザクションを開始することができることを示すハイになる。
図25は、MOSI及びMISOバスラインを介してデジタルデータを送受信するバスドライバなどの構成要素を含む、マスター2401上のインタフェース回路2550及びスレーブ2402上のインタフェース回路2560を含む本発明の一実施形態の更なる詳細を例示する。マスター2401又はスレーブ2402のどちらかが新しいトランザクションの開始を必要とするときに、制御論理2552、2562は、制御ライン2410をローにプルすることによって上述のように通信を制御する。例示した実施形態では、スレーブの制御論理2562は、第1のトランジスタ2402の基板と電気的に結合されており、マスター2401の制御論理2552は、第2のトランジスタ2503基板と電気的に結合されている。各トランジスタのドレインは、グランドに接続されており(GND)、各トランジスタのソースは、電圧が供給されるライン上のプルアップ抵抗2501に結合されている(V)。トランジスタ2502〜2503は、バイポーラ接合トランジスタ(BJT)又は電界効果トランジスタ(FET)を含む任意のタイプのトランジスタであってもよい。
動作において、マスターとスレーブのどちらもトランザクションの開始を必要としないとき、制御論理2552及び2562は、トランジスタ2503及び2502をそれぞれオフ状態に維持することによって、制御ライン2410をハイにプルする(即ち、電圧Vにプルアップされる)。マスター又はスレーブのどちらかが、トランザクションの開始を必要とするとき、制御論理2552、2562は、対応のトランジスタ2503、2502の基板に電圧を印加し、電流がトランジスタを通って流れるようにし、それによって制御ライン2410をグランドにプルする。
したがって、マスター2401又はスレーブ2402のどちらかは、制御ラインを、トランザクションが進行中であることを示すローにプルしてもよい。加えて、一実施形態では、制御ラインがローにプルされるとき、マスターとスレーブのどちらもトランザクションを開始しようとしないので、マスター2401とスレーブ2402との間の調整を確実に行う。
一実施形態では、この調整を使用して、現在のSPIインタフェースより著しく高速で動作するマスター2401とスレーブ2402との間の双方向ストリーミングインタフェースを確立する。一実施形態では、マスター2401及びスレーブ2402は、マスター2401とスレーブ2402との間でストリームされたデータをバッファリングするそれぞれ小さな(例えば、10バイト)データバッファ、2551及び2561を含む。結果的に、データバッファ2551、2561のサイズより大きなデータ量を、マスターとスレーブとの間で送信する必要があるとき、制御ライン2410は、他方のパーティがトランザクションが完了する前にインタフェースを制御しようとしないことを確実にするために、トランザクションを開始するパーティによってローにプルされ、維持されてもよい。例えば、スレーブ2402は、マスター2401に送信する100バイトを有する場合、制御ライン2410をローにプルすることによって制御し、最初の10バイトを送信し、マスターが最初の10バイトを受信する間、制御ラインロー2410を維持してもよい。マスターが、更にデータを受容することができることを示すと、スレーブ2402は、次の10バイトを送信する。100バイトのデータ全体が10バイトの増分でマスター2401に提供された後、スレーブ2402は、制御ライン2410をリリースして(ハイにプルされることを許可して)、マスターが制御し得ることを示す。マスターはまた、それぞれ10バイトバッファのデータを受信し処理する間、制御ライン2410をローに維持してもよい。マスターは、ひとたびデータの受信及び処理を完了すると、制御ライン2410をリリースする。
一実施形態では、汎用入出力(general purpose input/output)(GPIO)ラインを、マスター2401とスレーブ2402との間で共有して、この通信を有効にし得る。GPIOラインは、上述の方法と実質的に同じ方法で動作し得る。即ち、一方のパーティがトランザクションに入りたいとき、GPIOラインを、トランザクションが処理中であることを他方のパーティに通知するローにプルする。
本発明の一実施形態は、特別なバイトの配置を使用して、マスター2401とスレーブ2402との間の双方向通信及び信号伝達を可能にする。図26は、バイト0及び1が誤り訂正及び制御に使用され、バイト2〜9がデータに使用される、バイト0〜9として認識される例示的な10バイトセグメントを例示している。具体的には、バイト0は、バイト1〜9にわたるチェックサムを含み、伝送エラーを検出するために受信パーティによって使用され得る。例えば、受信パーティは、それ自身のバイト1〜9にわたるチェックサムを計算し、その結果をバイト0におけるチェックサムと比較し得る。結果が同じである場合は、次に、エラーが取り込まれなかったと想定され得る。チェックサムが同じでない場合は、次に、受信パーティは、10バイトセグメントの再送を要求し得る。
一実施形態では、バイト1は、データシーケンスの開始を識別するために、受信パーティによって使用される所定のビットの並び2601(例えば、この例において001)で配置される。一実施形態では、4番目のビット2602を使用して、その伝送がデータパケットの終了であるかどうかを示す。例えば、100バイトのデータパケットに関して上述のように、値2602は、最後の10バイトが送信されるときに、1にセットされ得る。次に受信パーティは、パケット伝送が完了したら、そのことを把握する。一実施形態では、次の4バイト2603(nnnnとして認識される)をセットして、バイト2〜9に保存された有効なデータのバイト数を示す。例えば、バイト2だけが有効なデータを含む場合、2603の値は0001であり得、バイト2及び3の両方が有効なデータを含む場合、2603の値は0010であり得るなどである。受信側は次に、有効なデータのみを処理し、残りを無視する。一実施形態では、マスターとスレーブとの間でトランザクションが発生するたびに、10バイトセグメントは、両方の方向に送信される(即ち、マスターからスレーブへの1方向及びスレーブからマスターへの1方向)。しかしながら、パーティが、送信するデータを有しない場合は、nnnn値2603を単純に0000に等しくセットする。両方のパーティが、送信するデータを有する場合は、データをそれぞれ同時に送信し、nnnn値2603を調節することによって有効なバイトの数を示す。
上記技術は、現在のSPIインタフェースが実行することができる速度を著しく増大させ、標準SPIのバスライン上の双方向ストリーミングプロトコルを確立する。これらの技術を使用すると、MCU2401上で実行するアプリケーション2503は、IoTサービス120にデータを効率よくストリームすることができ、同時に、IoTサービスは、アプリケーション2403にデータを効率よくストリームすることができる。加えて、一実施形態では、セキュア通信モジュール2402は、図16A〜図23Cに関して上述した様々な技術を使用して、IoTサービス120と安全な通信チャネルを確立する。
モノのインターネット(IoT)システムのための統合開発ツール
本発明の一実施形態は、IoT開発者が、新しいIoTデバイス、サービス、及びエンドユーザ用のクライアントアプリを容易に設計できるようにする統合開発ツールを含む。具体的には、一実施形態では、統合開発ツールによって、開発者は、それぞれのIoTデバイスによって実施される入出力機能、エンドユーザが利用できるGUI機能、及びIoTサービスによって実施されるバックエンド機能を指示できるようになる。これに応じて、統合開発ツールは、IoTデバイス用に第1のプロファイル、クライアントデバイスアプリ用に第2のプロファイル、及びIoTサービス用に第3のプロファイルを生成して、エンドツーエンドかつすべての機能のIoT実装を、限定された労力で実現する。
図27は、新しいIoT実装を設計するために開発者が使用できるグラフィカルユーザインタフェース2721と共に開発アプリケーション2720を含む統合開発ツールプラットフォーム2701の一実施形態を例示している。一実施形態では、統合開発ツール(IDT)プラットフォーム2701は、開発アプリケーション2720のプログラムコードを記憶するための記憶デバイス及びメモリ並びに実行時間中にプログラムコードを処理するためのプロセッサを有するコンピュータシステムを備える。加えて、図27に例示された様々な他のモジュール(例えば、2730〜2732)は、プロセッサによって実行されるプログラムコードとして実装されてもよい。
開発データベース2710は、ロードされ、異なるIoTデバイス構成、クライアント側アプリ用ユーザインタフェース機能、及びIoTサービス構成に関するデータを用いて継続的に更新される。例えば、開発データベース2710は、アナログデジタル(A/D)機能(例えば、アナログ電圧レベルを取得する)、デジタルアナログ(D/A)機能(例えば、アナログ電圧出力を供給する)、2値オン/オフ機能(例えば、ドアのロック解除する、アラームを始動する、照明をオンにするなど)、及び様々な汎用I/O(GPIO)機能が挙げられるがこれらに限定されない、IoTデバイス101〜102のそれぞれによって実施される異なる入出力(I/O)機能のタイプに関するデータを含み得る。
加えて、後述のように、開発者は、IoTデバイス102を、スタンドアローンのセキュア通信モジュール2402を使用して設計することができるかどうか、又はIoTデバイス101を、セキュア通信モジュール(nodule)2402及び(例えば、上述のSPIインタフェースを介して相互連結される)MCU2401の両方を使用して設計することができるかどうかを指定してもよい。単純なオン/オフ機能(例えば、電球に統合されたスイッチ)を実施するものなど比較的より単純なIoT実装にスタンドアローン実装を使用してもよいが、MCU実装をより複雑なデータ収集及び監視に使用してもよい(例えば、運動センサによって始動される遠隔に制御されるビデオカメラ)。
一実施形態では、ひとたび開発者が、開発アプリケーション2720を介してIoTデバイスによって実施される特定のI/O機能を指定すると、IoTデバイスエンジン2730は、開発アプリケーションから提供される構成データを使用して、セキュア通信モジュール2402用の構成パラメータを指定するIoTデバイスプロファイル2740を生成する。これは、例えば、セキュア通信モジュール2402がスタンドアローンモードであるか、MCU2401に結合されているかどうかを含む、セキュア通信モジュールがなるモードを含んでもよい。スタンドアローンモードである場合、IoTデバイスプロファイル2740は、IoTデバイス102に必要である機能を実施するようにセキュア通信モジュール2402の様々なI/Oライン2407を構成する。MCU2401と共に使用される場合、IoTデバイスプロファイル2740は、セキュア通信モジュール2402のI/Oライン2407及びMCUのI/Oライン2408を構成してもよく、またセキュア通信モジュール2402がMCU2401と相互作用できる方法を指定してもよい(例えば、SPIバスを介して通信して、データ及びコマンドを上述のMCUで実行されるアプリケーションと交換する)。
一実施形態では、IoTデバイスプロファイル2740を、セキュア通信モジュール2402上の不揮発性メモリ(例えば、フラッシュメモリ)にロードして、IoT機能を実装してもよい(例えば、低電力uC200によって実行されるアプリコード203、ライブラリコード202、及び通信スタックコード201を示す図2を参照)。別の実施形態では、IoTデバイスプロファイル2740を使用して、特定用途向け集積回路又はフィールドプログラマブルゲートアレイ(FPGA)を構成してもよい。本発明の基本原理は、セキュア通信モジュール2402のいかなる特定の構成にも限定されない。
一実施形態では、IoTデバイスを構成することに加えて、ひとたび開発者が、開発アプリケーション2720を介してIoTデバイスによって実施される特定のI/O機能を指定すると、IoTデバイスエンジン2730は、開発アプリケーションからの構成データを使用して、クライアントデバイス611上のIoTアプリ又はアプリケーションを実装するのに使用されるユーザエクスペリエンス(UX)プロファイル2741を生成する。UXプロファイルは、例えば、IoTアプリ又はアプリケーションのGUI内に表示される様々なグラフィカルI/O素子、及びそれらのグラフィカルI/O素子に使用される構成を指定し得る。例えば、IoTデバイス102が照明スイッチ(又はドアロックなどの他の単純なオン/オフデバイス)である場合は、次にUXプロファイルは、IoTデバイス102を制御するために単純なオン/オフスイッチを含み得る。IoTデバイス101がビデオキャプチャデバイスである場合は、次にUXプロファイルは、ビデオをクライアント611上に表示させるグラフィカル素子、及びビデオを表示するための特定のパラメータ(例えば、使用されるスケーリング、クライアントディスプレイ上の位置など)を指定し得る。実質的に無制限の数の異なるユーザインタフェース機能を、本発明の基本原理に沿ったままUXプロファイルにより指定し得る。
加えて、一実施形態では、IoTサービスエンジン2732は、新しいIoTデバイス101〜102のサービス側の必要条件に対応するためのクラウドAPIプロファイル2742を生成する。これは、例えば、IoTサービス120がコマンド及びデータを新しいIoTデバイスと交換することができる方法、並びに/又はIoTデバイスから受信したデータに応じてユーザのクライアントデバイス611に送信される通知を含み得る。例えば、IoTデバイスがドアロックである場合は、次にクラウドAPIプロファイルは、ドアが開き、かつユーザが在宅ではないときにいつも通知をクライアントデバイス611に送信するべきであることを指定し得る。加えて、クラウドAPIプロファイル2742は、新しいIoTデバイスを制御するために使用されるコマンドを指定し得る。一実施形態では、クラウドAPIプロファイル2742は、IoTサービス120が、新しいIoTデバイス101〜102の設計者によって実行されるIoTサービスなどの外部IoTサービスと通信することができる方法を指定する(例えば、APIを外部IoTサービスに公開する)。
IoTシステムのための統合開発ツールによって実装される方法が、図28に例示されている。本方法は、上記のシステムアーキテクチャとの関連で実装され得るが、いかなる特定のシステムアーキテクチャにも限定されない。
2801において、設計者は、開発アプリケーションのGUIを介して新しいIoTデバイスのためのパラメータを入力する。これは、例えば、IoTデバイスによって実施されるI/O機能、及びIoTデバイスがIoTサービスと相互作用できる方法を含んでもよい。2802において、開発アプリケーションからのデータを使用して、IoTデバイスエンジンは、IoTデバイスプロファイルを生成する。I/O機能の仕様に加えて、これは、セキュア通信モジュールが、スタンドアローンモードであるか、MCUと共に使用されるかどうかの指示を含んでもよい。2803において、IoTデバイスプロファイルは、IoTデバイスに適用される。一実施形態では、これは、IoTデバイス上の不揮発性記憶装置にプログラムコードをコピーすることを含む。
2804において、開発アプリケーションからのデータを使用して、クライアントアプリエンジンは、新しいIoTデバイスと相互作用する際にクライアント上に表示されるユーザインタフェースを(他のものの中で)指定するUXプロファイルを生成する。2805において、UXプロファイルは、クライアントに適用される。
2806において、開発アプリケーションからのデータを使用して、IoTサービスエンジンは、IoTサービスが新しいIoTデバイス、クライアントデバイス、及び/又は任意の外部IoTサービスと相互運用することができる方法を指定するクラウドAPIプロファイルを生成する。例えば、上述のように、IoTサービスは、APIを公開して1つ以上の外部IoTサービスとの通信を可能にし得る。2805において、クラウドAPIプロファイルは、IoTクラウドサービスに適用される。
したがって、本明細書に記載の統合開発技術を使用して、開発者は、新しいIoTデバイス、IoTサービス、及びユーザアプリを同時にプログラミングすることによって、それぞれの構成要素を独立してプログラミング及び構成する必要がある現在の実装と比較して著しい時間及び労力の量を節約することができる。
本発明の実施形態は、上で説明した様々な工程を含み得る。本工程は、汎用又は特殊目的のプロセッサに本工程を実行させるために使用され得る、機械実行可能な命令において具現化することができる。代替的に、これらの工程は、工程を実行するためのハードワイヤードロジックを含む特定のハードウェア構成要素によって、又はプログラミングされたコンピュータ構成要素及びカスタムハードウェア構成要素の任意の組み合わせによって、実行することができる。
本明細書に記載される場合に、命令は、ある特定の動作を行うように構成されるか、又は所定の機能若しくはソフトウェア命令が非一時的コンピュータ可読媒体中に具現化されたメモリ内に記憶されている、特定用途向け集積回路(ASIC)などの、ハードウェアの特定の構成を指し得る。したがって、図面に示される技術は、1つ以上の電子デバイス(例えば、エンドステーション、ネットワーク素子など)上に記憶及び実行されるコード及びデータを使用して実装され得る。そのような電子デバイスは、非一時的コンピュータ機械可読記憶媒体(例えば、磁気ディスク、光ディスク、ランダムアクセスメモリ、読み出し専用メモリ、フラッシュメモリデバイス、相変化メモリ)、並びに一時的なコンピュータ機械可読通信媒体(例えば、搬送波、赤外線信号、デジタル信号などの電気的、光学的、音響的又は他の形態の伝搬信号)などのコンピュータ機械可読記憶媒体を使用して、コード及びデータを記憶及び(内部で及び/又はネットワークを介して他の電子デバイスと)通信する。加えて、そのような電子デバイスは、典型的に、1つ以上の記憶デバイス(非一時的機械可読記憶媒体)、ユーザ入力/出力デバイス(例えば、キーボード、タッチスクリーン、及び/又はディスプレイ)、並びにネットワーク接続などの、1つ以上の他の構成要素に連結された1つ以上のプロセッサのセットを含む。プロセッサの組と他の構成要素との連結は、典型的には、1つ以上のバス及びブリッジ(バスコントローラとも呼ばれる)を通じて行われる。記憶デバイスとネットワークトラフィックを運ぶ信号のそれぞれは、1つ以上の機械可読記憶媒体及び機械可読通信媒体を表す。したがって、所与の電子デバイスの記憶デバイスは、その電子デバイスの1つ以上のプロセッサのセット上で実行するためのコード及び/又はデータを、典型的に記憶する。当然のことながら、本発明の実施形態の1つ以上の部分は、ソフトウェア、ファームウェア、及び/又はハードウェアの異なる組み合わせを使用して実装されてもよい。
この詳細な説明全体を通じて、説明を目的として、本発明の完全な理解を提供するために、多数の特定の詳細を記載した。しかしながら、本発明は、これらの具体的な詳細の一部がなくても実施され得ることは、当業者にとって明らかであろう。ある特定の例では、既知の構造及び機能は、本発明の主題を不明瞭にすることを回避するために、詳述しなかった。したがって、本発明の範囲及び趣旨は、以下の特許請求の範囲の観点から判断されるべきである。