(詳細な説明)
概して、図を参照すると、デジタルビットストリームのデータ難読化のためのシステムおよび方法が、説明される。本明細書に説明されるシステムおよび方法は、データパケットをエンコーディングおよびデコードし、データをセキュア化するために使用されてもよい。デジタルビットストリームは、本開示では、ビットストリーム、データストリーム、データパケット、またはデータと称され得、本開示における種々の専門用語の使用は、限定ではないことに留意されたい。
図をさらに参照すると、複数のデバイス間の難読化された通信を管理するためのシステムおよび方法が、説明される。複数のデバイス間の通信プロトコルは、キープロビジョニングを介して確立されてもよく、本明細書に説明される難読化技法は、通信をセキュア化するために使用されてもよい。
図1Aを参照すると、データ通信システムの実施形態が、示される。データ通信システムは、概して、1つまたはそれを上回る送信機100と、1つまたはそれを上回る受信機150とを含み、1つまたはそれを上回る送信機100は、1つまたはそれを上回るデータ伝送を1つまたはそれを上回る受信機150に提供する。図1Aの実施形態では、単に、1つの送信機100および受信機150が、示されるが、しかしながら、本明細書に説明されるシステムおよび方法は、本開示の範囲から逸脱することなく、複数の送信機および/または受信機のために実装されてもよい。
上記に説明されるように、データ伝送140におけるデータは、難読化され、データ伝送をサイバー攻撃から保護する。送信機100による伝送のためのデータの準備の間、データ変換モジュール102は、1つまたはそれを上回る関数およびマッピングを介して、データを難読化する。データ変換モジュール102は、伝送されるためのデータ(本開示では、「入力データ」と称される)と伝送されるためのデータデータパケットのためのOCTSヘッダ情報(すなわち、伝送されるためのデータデータパケットのペイロードセクションに現れるデータ)の両方を難読化する。用語「ヘッダ」および「ヘッダデータ」の使用は、本開示では、TCP/IP等の通信プロトコルにおけるパケットのヘッダ(ルーティング情報等の情報が記憶されるであろう)の代わりに、OCTSヘッダ情報を指すことに留意されたい。データ変換モジュール102は、データを難読化するプロセスを制御し(例えば、使用すべき関数およびマッピングとその順序とを判定する)、受信機がデータを難読化解除する(例えば、スクランブル解除する)ことを可能にし得る、情報を提供するように構成される、マネージャ104を含む。データ変換モジュール102はさらに、データを難読化するために使用される、3つのモジュールを含むように示される。データ変換モジュール102は、入力データを難読化するための入力データ難読化モジュール108と、データパケットのヘッダデータを難読化するためのヘッダデータ難読化モジュール110と、モジュール108、110からの難読化されたデータをともにマージするためのデータマージモジュール112とを含む。データ変換モジュール102は、難読化の間の使用のための複数のテーブル106を含んでもよい(例えば、後続図に説明されるように、キーとして)。
いったん難読化されたデータが、伝送され、受信機150によって受信されると、受信機150のデータ変換モジュール152は、送信機100のデータ変換モジュール102において実行される難読化プロセスを反転させる。データ変換モジュール152は、データを難読化解除するプロセスを制御するように構成される、マネージャ154を含む。データ変換モジュール152はさらに、データを難読化解除するための3つのモジュールを含むように示される。データ変換モジュール152は、受信されたデータをヘッダデータ部分および入力データ部分に分割するためのデータ分割モジュール158と、入力データ部分を難読化解除するための入力データ難読化解除モジュール160と、ヘッダデータ部分を難読化解除するためのヘッダデータ難読化解除162とを含む。データ変換モジュール152は、後続図に説明されるように、難読化解除の間の使用のための複数のテーブル156を含んでもよい。
2つのデータ変換モジュール102、152の3つのモジュールは、独立して駆動されるように構成されてもよい。言い換えると、各モジュールは、その独自の関数、テーブル等に従って、そのデータを難読化してもよい。これは、オリジナルのエンコードされていないデータが非認可動作主によって復元されるためには、3つ全ての独立モジュールが非認可動作主によって「突破」される必要があるであろうため、非認可動作主がオリジナルのエンコードされていないデータを取得しないように防止することに役立つ。さらに、3つの独立モジュールのうちの1つがデータを難読化した方法の判定も、他の2つのモジュールの難読化の判定方法に関して何ら手掛かりを提供しないであろう。
図1Aの実施形態では、データ変換モジュール102、152は、送信機100および受信機150のそれぞれ内に示される(例えば、データ変換モジュール102、152は、送信機デバイスまたは受信機デバイス内にある)。種々の例示的実施形態では、データ通信システムの任意のタイプの構成が、可能性として考えられる(例えば、送信機100は、難読化されるためのデータを遠隔データ変換モジュールに送信してもよく、受信機150は、難読化解除されたデータを遠隔データ変換モジュールから受信してもよい等)。データ変換モジュールの種々の関数は、いくつかの実施形態では、異なるコンピューティングデバイスにおいて施行されてもよい。全てのそのような変形例は、本開示の範囲内にあることが意図されることを理解されたい。
本開示は、データを難読化および難読化解除するために使用され得る、順方向マッピングおよび逆方向マッピング関数を説明する。順方向マッピング関数は、概して、入力ビットパターンの代わりに、新しいビットパターンを置換するために適用されてもよい一方、逆方向マッピング関数は、その置換を逆転させる。いくつかの実施形態では、送信機100は、順方向マップを記憶または含有してもよく、受信機150は、逆方向マップを記憶または含有してもよい。当業者は、送信機が順方向マップのみを含有する必要があり、受信機が逆方向マップのみを含有する必要があることを理解するであろう。加えて、当業者は、マップの一方のみを前提として、他方のマップが、容易に導出され、したがって、単一マップのみが送信機および受信機の両方に提供されることを要求し得ることを認識するであろう。
図1Bを参照すると、データ記憶システム180の実施形態が、示される。図1Aの実施形態では、データ難読化プロセスが、ビットデータストリームが送信機から受信機に伝送されるために説明される(例えば、「進行中のデータ」)。しかしながら、データ難読化プロセスはまた、または代替として、記憶されるためのデータに適用されてもよい(例えば、「停止中のデータ」)。図1Bの実施形態では、データ記憶システム180は、システムのメモリ(例えば、データベース182)内に記憶されるためのデータパケットを受信してもよい。データ記憶システム180は、図1Aに説明されるように、記憶の前にデータを難読化するために、入力データ難読化モジュール108と、ヘッダデータ難読化モジュール110と、データマージモジュール112とを含んでもよい。さらに、データ記憶システム180は、データベース182からの読出後、データをデコードするために、データ分割モジュール158と、入力データ難読化解除モジュール160と、ヘッダデータ難読化解除モジュール162とを含んでもよい。データ記憶システム180は、データをエンコードし、読み出されたデータをデコードするプロセスを管理するための1つまたはそれを上回るマネージャを含んでもよい。本開示は、主に、伝送されるためのデータのためのデータ難読化プロセスを説明するが、本明細書におけるシステムおよび方法は、本開示の範囲から逸脱することなく、データがローカルで記憶されるために適用されてもよいことを理解されたい。さらに、本開示は、主に、データベースを説明するが、記憶装置は、データベースフォーマットである必要はない。当業者は、データベーススキーマを含有するかどうかにかかわらず、任意の形態の記憶装置が、使用されてもよいことを認識するであろう。例えば、難読化されたデータは、スタンドアロンファイル内、ファイルシステムの一部として、可撤性媒体上等に記憶されてもよい。当業者はまた、システムが、難読化および難読化解除コンポーネントを異なるマシンまたはさらに異なるネットワーク上に拡散してもよく、それらの異なるマシンおよびネットワークは、異なるエンティティによって制御されてもよいことを認識するであろう。
ここで図2−3を参照すると、送信機100のデータ変換モジュール102が、より詳細に示される。データ変換モジュール102は、伝送されるための入力データを受信するように構成される、データ入力バッファ114を含む。データ入力バッファ114は、着信データを受け取り、必要な場合、データをフォーマットし(例えば、データを適切なサイズにフォーマットする)、エンコーディングのために、データを入力データ難読化モジュール108にパスする。データ入力バッファ114はさらに、データをマネージャ104に/から提供および受信してもよい。
マネージャ104は、データパケットが送信されるために採用されるであろう難読化のための構成を確立する、入力データ制御関数としての役割を果たすことができる。マネージャ104は、受信機150が、受信されると、データパケットをデコードすることを有効にする、識別子(例えば、1つまたはそれを上回る構成またはサブ構成)を作成する。マネージャ104はさらに、データの難読化において使用されるための1つまたはそれを上回るテーブルが変更されるべきであること、ハンドシェイク要求が送信または確認応答されるべきであることを示すコマンド、または難読化プロセスの設定および制御のために必要な他のコマンド等、入力データ制御コマンドをハンドリングする。マネージャ104は、識別子および入力データ制御コマンドをヘッダ難読化モジュール110にヘッダ情報の一部として提供してもよい。マネージャ104はさらに、乱数生成器(RNG)116を含む、または使用してもよい。RNG116は、いくつかの実施形態では、擬似RNG(PRNG)であってもよい。RNG116は、入力データ難読化モジュール108において入力データの難読化の間に使用すべきテーブルおよび/または関数を判定するために、識別子を作成するために使用されてもよい。PRNGはまた、データを用いた排他的OR(XOR)のため等の難読化関数のために、入力データ難読化モジュール108によって使用され得る、擬似乱数のストリームを生成するために使用されてもよい。
マネージャ104は、種々のレベルの精巧化を有してもよい。一実施形態では、マネージャ104は、ハードコード化されたパススルーとして実装されてもよい。言い換えると、マネージャ104は、決定を行わない、または任意のオプションを有していなくてもよく、単に、入力を受信し、自動的に、出力を生成してもよい(すなわち、データを受信する、データをRNG116の中に挿入する、および結果として生じるランダム化されたデータを出力する)。他の実施形態では、マネージャ104は、より精巧化され、値をランダムに生成する方法、難読化プロセスのためにデータ変換モジュール102を構成する方法等を判定するために使用され得る、複数の関数およびパラメータを受信してもよい。マネージャ104は、関数およびパラメータを、複数のサーバもしくは他のソースから、またはデータ変換モジュール102内の単一ソースから受信してもよい。マネージャ104は、マネージャにおいて受信されたデータの量に基づいて、難読化の複雑性を増加させることが可能であってもよい。
入力データ難読化モジュール108は、難読化のためにデータに適用可能な複数の関数124を含んでもよい。入力データ難読化モジュール108は、任意の数の関数124を含んでもよい(すなわち、モジュール108によって使用される関数の数、タイプ、および順序は、固定されてもよい、またはマネージャ104によって選定される値もしくは識別子および他の設定もしくはプロパティに基づいて、ランダムに変動してもよい)。例えば、入力データ難読化モジュール108によって使用される関数124は、伝送されているデータのためのユーザ要件、データのタイプ、データが関連する用途、および/またはデータの伝送のために利用可能なリソースに基づいて、選定されてもよい。
ヘッダ難読化モジュール110は、ヘッダ情報を難読化するための複数の関数を含む。例えば、ヘッダ難読化モジュール110は、ヘッダデータ内のビットをスワップするように構成される、1つまたはそれを上回るスクランブリング関数118を含む。さらに、ヘッダ難読化モジュール110は、伝送されるためのデータデータパケット内の入力データビットの代わりに、新しいビットパターンを置換するように構成される、1つまたはそれを上回る順方向マッピング関数120を含んでもよい。データ変換モジュール102は、入力をヘッダ難読化モジュール110の種々の関数に提供するように構成される、ヘッダ情報マネージャ126を含むように示される。
入力データが、入力データ難読化モジュール108によって難読化され、ヘッダデータが、ヘッダ難読化モジュール110によって難読化された後、データマージモジュール112は、2つのデータセットをともにマージする。データマージモジュール112は、両データセットからのビットをスクランブルし、2つのデータセットをともに連結するために、スクランブリングモジュール128と、連結モジュール130とを含む。マージされたデータは、受信機150への伝送のために、エンコードされたデータ出力バッファ132に提供される。
より具体的には、図3を参照すると、データ変換モジュール102の機能性が、より詳細に示される。実線は、データが難読化され、受信機150に伝送されるためのデータパスを表す。データは、データ入力バッファ114において受信され、エンコーディングのために、入力データ難読化モジュール108に提供される。さらに、エンコードされたヘッダ情報が、ヘッダ難読化モジュール110によってデータマージモジュール112に提供されるように示される。破線は、データ制御パスを表し、情報は、データを難読化する方法(例えば、使用すべき関数、使用すべきテーブル等)を判定するために使用される。点破線は、ヘッダ情報マネージャ126とヘッダ難読化モジュール110の種々の関数との間の制御パスを表す。
ここで図4−5を参照すると、受信機150のデータ変換モジュール152が、より詳細に示される。概して、データ変換モジュール152の種々のコンポーネントは、データ変換モジュール102のコンポーネントの反転である(すなわち、データを難読化解除するために、データを難読化するために使用されたものと同一の一般的プロセスを使用する)。データ変換モジュール152は、エンコードされたデータを受信し、データをデータ分割モジュール158に提供するように構成される、エンコードされたデータ入力バッファ164を含む。データ分割モジュール158は、スクランブリング解除モジュール166(スクランブリング関数118によってスクランブル解除されたビットをスクランブル解除するため)および分割モジュール168(ヘッダデータを入力データから分離するため)を介して、データを分割する。データ分割モジュール158は、入力をヘッダ情報マネージャ154から受信し、データ分割プロセスのための関連情報を判定する(例えば、データの難読化の間に使用されたテーブルについての情報を含む、データの部分を識別するため)。
一実施形態では、受信機150は、受信機によって認識可能なフォーマットでエンコーディングおよびフォーマットされる、データパケットを受信してもよい。例えば、パケットは、OCTSでエンコードされてもよい。受信されたパケットが、OCTSパケットではない場合、データパケットのさらなる処理は、受信機のために要求されない。しかしながら、パケットのいくつかの処理が、データ分割モジュール158において、データパケットがOCTSであるかどうかを判定するために要求されてもよい。データ分割モジュール158(または受信機150の別のモジュール)は、パケットがOCTSパケットであるかどうかを判定するための検証モジュール169を含んでもよい。検証モジュール169は、例えば、1つまたはそれを上回るフィールド(例えば、以下に説明されるようなクイックルックフィールドおよびチェックサムフィールド)をチェックし、パケットがOCTSパケットであるかどうかを選別してもよい。データ分割モジュール158は、OCTSパケットである場合、さらなる処理をデータパケットに実施し、パケットがスクランブリング解除およびデコードされることを可能にしてもよい。
分割されたデータは、マネージャ178に提供される。ヘッダデータおよびオリジナルメッセージは両方とも、本時点では、依然として難読化されたままである。マネージャ178は受信されたデータパケットのために入力データ難読化モジュール108によって使用された難読化のための構成を判定する。マネージャ178はさらに、PRNG182を含んでもよい。PRNG182は、一実施形態では、図2のRNG116に類似する、擬似乱数生成器であってもよい。例えば、RNG116が、PRNGである場合に、同一シード値が、RNG116およびRNG182内で使用される場合、RNG116およびRNG182からの出力は、同一であろう。難読化されたヘッダデータは、ヘッダ難読化解除モジュール162に転送される。ヘッダ難読化解除モジュール162は、1つまたはそれを上回るスクランブリング解除関数170と、1つまたはそれを上回る逆方向マッピング関数174とを含み、後続図に説明されるように、ヘッダデータを難読化解除する。ヘッダ難読化解除モジュール162は、データ変換モジュール102によってデータを難読化するために使用された関数のタイプおよび数に関連する構成情報をマネージャ178に返す。情報は、難読化された入力データとともに、入力データ難読化解除モジュール160に転送される。マネージャ178によって判定された構成情報に基づいて、入力データ難読化解除モジュール160は、1つまたはそれを上回る関数176(送信機100において入力データに適用された関数124に関連し得る)を適用し、データを難読化解除してもよい。入力データ難読化解除モジュールの結果は、記憶され、次いで、データ出力バッファ180内で利用可能にされる。
概して、図2および4を参照すると、RNG116、182が、マネージャ内に実装されるように示される。他の実施形態では、RNG関数は、データ変換モジュール102、152の他のモジュールのいずれか内に実装されてもよい。送信機100が、真乱数生成器を使用する(PRNGの代わりに)場合、RNGの出力は、受信機が、データを難読化解除するために、出力を受信する必要があるため、受信機150に送信されるべきである。送信機100が、PRNGを使用する場合、受信機150は、PRNGへの入力を前提として、PRNGと同一値を生成可能であってもよい。
より具体的には、図5を参照すると、データ変換モジュール152の機能性が、より詳細に示される。図3と同様に、実線は、データ変換モジュールによって難読化解除されるための入力データおよびヘッダデータのためのデータパスを表す。データは、エンコードされたデータ入力バッファ164において受信され、データ分割モジュール158に提供され、これは、順に、上記に説明されるように、データを2つの難読化解除モジュール160、162に提供する。破線は、データパス制御パスを表し、情報は、データを難読化解除する方法(例えば、使用すべき関数、使用すべきテーブル等)を判定するために使用される。点破線は、ヘッダ情報マネージャ154とヘッダ難読化解除モジュール162の種々の関数との間のヘッダ制御パスを表す。
概して、図6−11を参照すると、ヘッダ難読化プロセスの一実施形態が、より詳細に説明される。より具体的には、ヘッダ難読化モジュール110および送信機100のデータ変換モジュール102のアクティビティならびにヘッダ難読化解除モジュール162および受信機150のデータ変換モジュール152のアクティビティが、より詳細に説明される。最初に、ヘッダ情報は、システムの動作において多くの目的を果たし得ることに留意されたい。例えば、ヘッダ情報は、制御情報を送信機100と受信機150との間でパスするための情報パスとして使用されてもよい。ヘッダ情報はまた、具体的受信機のために意図されるデータのパケットを識別し、したがって、他の受信機のために意図されるパケットを拒否するために使用されてもよい。このように、ヘッダ情報は、具体的割り当てられたセキュア化されたネットワークの中へのエントリを得るために使用されることができる。ヘッダ情報はまた、パケットが本発明の側面に従ってエンコードされたものではないことが保証されるかどうかを判定するために使用されてもよい。そのような判定は、パケットが本発明の側面に従ってエンコードされていないことを判定することが、受信機150がデコーディングステップを完全にバイパスすることを可能にするため、受信機150において有用であり得る。これは、無駄にされるコンピューティングサイクルを防止する。加えて、ヘッダ情報は、エンコードされた入力データの難読化解除を有効にするために必要な情報を含有してもよい。一般に、ヘッダ情報は、パケットのサイズと比較して比較的に小さい。例えば、一実施形態では、ヘッダ情報は、20バイト未満である一方、パケットは、1,500バイトを含有してもよい。
ヘッダ難読化モジュール110は、概して、ヘッダ情報を難読化し、意図される受信者以外の任意の者がデータを使用または閲覧する能力を否定する。ヘッダ難読化モジュール110は、入力データの難読化のため、またはデータマージのために使用されるものと異なる一意の関数のセットを使用し、全体的難読化プロセスの複雑性を増加させてもよい。代替として、難読化モジュール110は、データ変換モジュールの他のモジュールと同一難読化関数を使用してもよい。難読化モジュール110は、例えば、1つまたはそれを上回る置換またはマッピング関数(例えば、第1のビットパターンを第2のビットパターンで置換する)、1つまたはそれを上回るホワイトニング関数、および/または1つまたはそれを上回る転置関数を使用してもよい。これらの関数は、後続図により詳細に説明される。
ここで図6Aを参照すると、送信機100のヘッダ難読化モジュール110のブロック図が、示される。ヘッダ難読化モジュール110の出力は、送信機が同じメッセージを再伝送または送信するように強制される場合、出力を繰り返さないように設計される。言い換えると、ヘッダ難読化モジュール110の各出力は、ヘッダ情報が同一であるかどうかにかかわらず、一意であるべきである。
図6Aの実施形態では、2つのタイプの難読化関数が、図示される。ヘッダ難読化モジュール110は、ヘッダ情報ビットスクランブリング関数206と、ヘッダ情報順方向マッパ212とを含む。他の実施形態では、ヘッダ難読化モジュール110は、任意の数の一意の関数を含んでもよい。
ヘッダ情報ビットスクランブリング関数206は、概して、設定数のビット内でビットをスワップするように構成される。例えば、関数206は、16ビット内の任意の単一ビットをワード内の任意の他の場所に移動する能力を用いて、かつ反転関数を実施する(例えば、受信機において)または各ビットをそのオリジナル場所に返す能力を用いて、ビットを16ビットワード内でスワップしてもよい。ビットのグループをスワップする関数が、使用されてもよく、スワップされているビットのグループサイズおよび場所は両方とも、スワップのレベルおよび場所によって定義される。概して、図7−9を参照すると、1つのそのような例示的関数は、16ビットワードに関して図示される。16ビットを伴う実施例が、図7−9に示されるが、種々の実施形態では、スワップ関数は、任意の数のビットのために適用可能であってもよいことを理解されたい。
図7の実施形態では、16ビットワードのためのスワップ関数が、示され、ワードの各要素は、[0,15]としてインデックス化される。本関数は、3つのレベルの数を定義し、レベル0スワップ、レベル1スワップ、レベル2スワップ、およびレベル3スワップをもたらす。レベル3では、ビットは、それぞれ、8ビットの21=2グループにグループ化され、レベル2では、ビットは、それぞれ、4ビットの22=4グループにグループ化される等となる。同様に長さ16ビットのスクランブリングキー224(図8−9に示される)が、事前に交換される、初期化プロセスの間に交換される、またはRNG116によって生成されてもよい。スクランブリングキー224の16ビットは、入力ワードのビットがスクランブルされる方法を判定する。
例えば、図7に示されるように、レベル3スワップは、スクランブリングワードのビット0によって駆動されるように示される。スクランブルキー224のビット0が、1である場合、ビット[0,7]および[8,15]の2つのグループ間のスワップは、実施される。スクランブルキー224のビット0が、0である場合、スワップは、実施されないであろう。レベル2スワップは、スクランブルキー224のビット1および2によって駆動されるように示される。スクランブルキー224のビット1が、1である場合、2つのグループ[0,3]と[4,7]との間のスワップは、実施される。スクランブルキー224のビット2が、1である場合、2つのグループ[8,11]と[12,15]との間のスワップは、実施される。本プロセスは、示されるように、各レベルおよびビットを通して繰り返される。図8を参照すると、関数206によって受信された入力ワード220に関して、スクランブル解除されたワード222が、生成される。各強調されるエリアは、スワップが1の値を有するスクランブルキー224のビットに基づいて生じた場所を図示する。例えば、ビット0が1であったため、スワップが、ビット[0,7]と[8,15]との間で実施された。スワップ関数は、レベル3から開始し、レベル0まで作用する。図7−9に示されるように、14のスワップのみが、必要であって、したがって、スクランブルキー224のビット15は、無視されることに留意されたい。
図9を参照すると、ビットワード220のスクランブリング解除が、示される(図6Bを参照して以下に説明されるように、ヘッダ難読化解除モジュール162において実施される)。ビットワード220をスクランブル解除するプロセスは、反転されてもよい、すなわち、最初に、ビット14から開始し(図7に示されるように、ビット15は、無視される)、レベル0スワップを適用し、ビット0まで、レベル0スワップが適用されるであろう。
再び、図6Aを参照すると、ヘッダ情報順方向マッパ208(および図6Bの逆方向マッパ258)が、ヘッダ難読化プロセスにおいて使用される。概して、「順方向マップ」および「逆方向マップ」は、ヘッダ難読化プロセスのマッピング関数のためのベクトルペアとして提供される。順方向マップは、ヘッダをエンコードするための関数を提供し、逆方向マップは、ヘッダをデコードするための関数を提供する。順方向マッピング関数は、ヘッダ値の一部または全部のための新しい値を置換する。逆方向マップは、エンコードされた値をそのオリジナル値に返すために使用される。
順方向マッパ212および逆方向マッパ258は、合致される。使用されるマップは、基本マップ(例えば、単一値と固定の新しい値の事前に設定されたマッピング)、単一変数の関数として駆動されるデータ駆動マップ、または複数の変数の関数として駆動されるデータ駆動マップであってもよい。マップの複雑性のレベルは、所望の保護のレベルに基づいて増加してもよい。マッピングは、図13−14を参照してより詳細に説明される。
マネージャ104によってヘッダ難読化モジュール110(したがって、図6Aに示される関数206、212)にパスされた情報は、データをエンコードするためにデータパスにおいて現在使用中の構成およびテーブルを識別する、1つまたはそれを上回るテーブル識別子および/または制御情報を含んでもよい。情報は、具体的OCTS(最適化されたコードテーブルシグナリング)構成に依存してもよい。通信プロセス管理のための情報はまた、制御情報の一部として含まれてもよい。マネージャ104によってヘッダ難読化モジュール110にパスされた情報はさらに、RNG106からの出力または使用されるRNGシーケンスの出力から導出される入力を含んでもよい。マネージャ104によってヘッダ難読化モジュール110にパスされた情報はさらに、ヘッダ難読化モジュール110によってヘッダデータをエンコードするために必要とされる、フレーム長(可変であり得る、フレーム長のサイズを識別するため)または任意の他の情報を含んでもよい。また、図10を参照すると、テーブルは、マネージャ104によってヘッダ難読化モジュール110に提供され得る、ある情報を識別するように示される。情報はさらに、チェックサムまたはクイックルック入力を含み、伝送のためのデータを検証するため(すなわち、受信されたフレームがデータ変換モジュールのための意図されたものであることを確実にする、ヘッダメッセージが正確なおよびアドレス指定されていることを検証するため等)に使用されてもよい。図10に示されるフィールドは、ヘッダ情報内に含まれ得る、例示的フィールドとして提供される。より一般的には、ヘッダ情報は、メッセージをデコードするために必要な情報を含み、テーブルID、送信機によって使用されるマッピングテーブルを識別する構成フィールド、システム構成情報、1つまたはそれを上回るランダム抽出値(単に、スクランブルワードの代わりに)、データサイズフィールド(難読化されたデータの量を示す)、および/または随意のフレーム長(以下に説明されるように、ダミーデータを識別するために使用され得る)等の情報を含んでもよい。ヘッダ難読化モジュール110は、異なる技法を使用して、ヘッダデータの各フィールドを難読化してもよい。前述の開示は、ヘッダ内でパスされ得る情報のタイプの限定を意味するものではなく、当業者は、他の情報も、必要に応じて、情報をデコーダに提供し、メッセージが適切にデコードされたことを確実にするためにヘッダ内に含まれ得ることを認識するであろう。
より具体的には、クイックルックフィールドを参照すると、フィールドは、伝送されたデータパケットが本明細書に開示される種々の実施形態によってエンコードされたタイプではなかったかどうかを迅速に判定する使用されてもよい。例えば、クイックルックフィールドは、データパケットがOCTS構成を有するかどうかを判定するために使用されてもよい。これは、OCTSを使用してエンコードされたパケットが、OCTSでエンコードされていないパケットとネットワーク上に共存することを可能にする。受信されたパケット毎に、ネットワークデバイスは、クイックルックフィールドを使用して、パケットがOCTSパケットではないかどうかを判定することができる。該当しない場合、次いで、さらなるOCTS処理は、必要ではなく、パケットは、パケットがハンドリングされる従来の方法でハンドリングされる。しかしながら、クイックルックフィールドが、パケットがOCTSでエンコードされたパケットであり得ることを示す場合、さらなる処理が、必要である。一実施形態では、クイックルックフィールドは、XOR関数を使用して生成されてもよい。例えば、クイックルックフィールドは、テーブル識別子のうちの2つ等、ヘッダの2つの他の部分のXOR関数の結果であってもよい。速度および効率のために、クイックルックフィールド自体は、難読化される必要はなく、ヘッダの難読化された部分のXOR関数の結果であってもよい。このように、いったんクイックルックフィールドの場所およびXORに入力されるであろうフィールドが、受信および識別されると、単一XORおよび単一比較が、迅速に実施され、パケットがさらなる処理を要求し得るかどうかを判定することができる。データパケットを受信する受信機は、クイックルックフィールドをチェックし、データパケットが適切なフォーマット(例えば、OCTS構成)であるかどうかを判定してもよい。種々の実施形態では、XOR関数以外の関数が、クイックルックフィールドを作成するために使用されてもよい。
より具体的には、チェックサムフィールドを参照すると、フィールドは、ヘッダ難読化の間、難読化されてもよい。チェックサムフィールドは、概して、伝送、記憶の間、エラーを検出する、またはパケットを1つの本開示の技法を使用してエンコードされたものとして選別するために使用されてもよい。チェックサムフィールドは、チェックサムを作成するために周知の方法のいずれかを使用して、送信機100において難読化されたデータの全てまたはデータのいくつかのサブセットに基づいて作成されてもよい。例えば、チェックサムは、クイックルックフィールドを除き、伝送されるための全てのデータを使用することによって計算されてもよい。チェックサム関数は、データセットのためのチェックサムを計算可能であるべきであって、難読化関数は、データパス難読化関数から一意であって、入力変数の数は、異なり、使用される関数は、ランダム変数によって判定され、各要素は、難読化関数によって駆動される少なくとも1つの変換を受ける。受信機は、その独自のチェックサムを受信されたデータパケットの難読化解除されたヘッダデータで計算し、パスされたチェックサムに合致するかどうか確認してもよい。種々の実施形態では、送信機は、受信機が伝送の間にエラーが存在するかどうかまたは提供される情報に悪意があるかどうかを判定することを可能にする、情報をヘッダ内に提供するための任意の他のタイプのエラー検出方法を使用してもよい。例えば、受信機は、データサイズが許容可能境界内にあるかどうかをチェックしてもよく、これは、伝送の間のエラーまたは受信機に分析を受信されたものより大きいデータバッファに実施させるための悪意のある試みのいずれかを示し得る。
ヘッダ情報内の各フィールドは、具体的かつ定義された数のビットを含んでもよい。ビットは、受信機がデータ難読化解除の間、ヘッダ情報を識別し得るように定義されてもよい。例えば、データIDは、7ビット、スクランブルワードは、4ビット、クイックルックフィールドは、16ビット、チェックサムは、16ビット等であってもよい。ヘッダは、任意の方法でフォーマットされてもよく、ヘッダが受信機によって識別可能である限り、任意の数のフィールドのための任意の数のビットを含んでもよいことを理解されたい。
ヘッダ情報ビットスクランブリング関数206およびヘッダ情報順方向マッパ212は、ヘッダ情報およびPRNG値をヘッダ情報マネージャ126から読み出す。ヘッダデータおよびPRNG値は、使用すべきマッピング関数のタイプ(例えば、使用すべき1つまたはそれを上回る順方向マッピング関数208)を定義してもよく、さらに、受信機によって難読化されたデータのヘッダ部分を識別するために使用され得る、識別情報を含んでもよい。図6Aに示されるように、1つまたはそれを上回る順方向マッピング関数208が、選択され、データを難読化する際に使用するために、ヘッダ情報ビットスクランブリング関数206に提供されてもよい。関数の選択は、ヘッダ情報マネージャ126から読み出される情報に基づいてもよい。
図6Aを依然として参照すると、ヘッダ情報が、ヘッダ情報ビットスクランブリング関数206によってスクランブルされた後、ヘッダ情報順方向マッパ212は、難読化されたヘッダデータをマップするように構成される。順方向マッパ212は、テーブルルックアップと同様に単純であってもよい、またはローリングオフセットを使用したデータ駆動マッピングを採用してもよい。順方向マッパ212は、ビットスクランブリング関数206から独立して、第2の独立難読化関数として提供される。データが、マッピングによって難読化された後、データは、エンコードされたヘッダ情報214として、データ変換モジュールの別のモジュールに提供されてもよい(入力データと組み合わせるため)。
ここで図6Bを参照すると、受信機150、より具体的には、ヘッダ難読化解除モジュール162のアクティビティが、より詳細に示される。上記に説明されるように、ヘッダ難読化解除モジュール162は、概して、送信機100のヘッダ難読化モジュール110によって実施されるデータ難読化を逆転させてもよい。エンコードされたヘッダ情報214は、送信機100から受信され、エンコードされたデータをエンコードされたヘッダ情報およびエンコードされた入力データに分割するために、データ分割モジュール254に提供される。ヘッダ情報マネージャ256は、エンコードされたヘッダ情報を受信し、データを難読化するために使用された関数または方法と関連付けられたパラメータとともに、1つまたはそれを上回る関数または方法を判定してもよい。ヘッダ難読化解除モジュール162は、ヘッダデータに適用されるマッピング関数を逆転するためのヘッダ情報逆方向マッパ258と、ヘッダデータに適用されるビットスクランブリング関数を逆転するためのヘッダ情報ビットスクランブリング解除関数260とを含む。
ここで図11Aを参照すると、例示的実施形態による、ヘッダ情報をエンコードするためのプロセス300のフローチャートが、示される。プロセス300は、例えば、ヘッダ難読化モジュール110によって実行されてもよい。プロセス300は、ヘッダ情報(302)およびPRNG値(304)を受信することを含む。受信されたヘッダ情報は、単に、エンコードされ、受信機に伝送されるためのデータパケットに関連する情報を含んでもよい。PRNG値は、ヘッダデータ値に基づいて擬似ランダムに生成された値を含んでもよい。プロセス300はさらに、データをヘッダ情報に追加し、受信機によるデータ情報のデコーディングを有効にすることを含む(306)。
プロセス300はさらに、PRNG値を使用して、ヘッダ情報を難読化するための1つまたはそれを上回るパラメータを判定することを含む(308)。上記に説明されるように、ヘッダは、ビットまたはバイトスワッピング関数、マッピング関数のために使用すべきルックアップテーブル、使用すべきマッピングまたはスクランブリングのタイプ、マップまたはスクランブルするためのヘッダ要素、および同等物を識別してもよい。ヘッダ情報を難読化する方法を識別後、識別された1つまたはそれを上回る関数は、ヘッダ情報を難読化するために使用される(310)。例えば、また、図7−9を参照すると、データを難読化するために使用され得る、関数の一実施例は、ビットスワッピング関数である。種々の実施形態では、関数は、データ変換モジュールによって識別されてもよい、または関数のうちの1つまたはそれを上回るものは、特定の顧客または用途のための一意の関数セットであってもよい(例えば、特定の顧客は、特定のタイプの難読化関数を使用して、個人またはクライアントが、その独自の個人化された保護をデータセットに追加することを可能にする)。ヘッダデータ自体は、単一関数を使用して難読化されてもよいが、また、ヘッダの異なる部分が異なる関数を使用して難読化される、複数の関数を使用して難読化されてもよい。加えて、ヘッダのいくつかの部分は、難読化されないままであってもよい、またはある用途では、ヘッダを難読化する必要が全くない場合がある。
プロセス300はさらに、順方向マッピング関数(312)を使用して、さらにヘッダデータを難読化することを含む。順方向マッピング関数は、例えば、ブロック308において識別された関数であってもよい。難読化されたヘッダ情報は、次いで、入力データとのスクランブリングおよび連結のために、別のモジュールに提供される(314)。上記に説明されるように、入力データおよびヘッダデータは、2つの異なるモジュールにおいて別個に難読化され、次いで、第3のモジュールにおいて組み合わせられ、スクランブルされる。
ここで図11Bを参照すると、例示的実施形態による、ヘッダ情報をデコードするためのプロセス350のフローチャートが、示される。プロセス350は、例えば、ヘッダ難読化解除モジュール162によって実行されてもよい。プロセス350は、エンコードされたデータパケットを送信機から受信すること(352)と、データパケットをヘッダ部分および入力データ部分に分割すること(354)とを含む。例えば、ブロック354は、概して、エンコードされたデータパケットを分割およびスクランブル解除することによって、ヘッダ情報を識別するステップを含む。プロセス350はさらに、ヘッダ情報を検証すること(356)を含む。再び、図10を参照すると、ヘッダ情報の検証は、概して、チェックサム値をチェックすること、クイックルックフィールドを確認し、受信機が意図される受信者であるかどうかを判定すること等を含んでもよい。
プロセス350はさらに、データパケットをエンコードするために使用される、1つまたはそれを上回る難読化関数を識別することを含む(358)。例えば、受信機150のマネージャ178は、依然として難読化されたままのヘッダ情報を精査し、乱数をPRNGから取得してもよい。マネージャ178は、ヘッダ情報を介して送信機100のPRNGによって使用されるシード値を判定し、同一シード値をそのPRNGのために使用してもよい。これは、ヘッダ難読化解除モジュール170が、送信機100によってデータを難読化するために使用される関数を複製することを可能にし得る。プロセス350はさらに、ヘッダ情報をスクランブル解除および逆方向マップすること(360)を含む。いったんヘッダ情報が、難読化解除されると、ヘッダ内の情報は、入力データを難読化解除するために使用されてもよい(後続図により詳細に説明される)。
概して、図11C−Dを参照すると、ヘッダ情報をエンコードおよびデコードするプロセスは、より技術的詳細に示される。図11Cは、ヘッダ情報をエンコードするための一実施形態を図示する。プロセスは、PRNGシーケンスを用いたヘッダ情報のXORを含む(370)。PRNGシーケンスは、データ変換モジュールのマネージャによって擬似ランダムに生成されたデータのシーケンスである。プロセスはさらに、チェックサムを計算すること(371)と、チェックサムをマップすること(372)とを含む。ブロック371−372は、概して、伝送されるための全てのヘッダデータのためのチェックサムを計算し、伝送のためのチェックサムフィールドを難読化することを含んでもよい。プロセスはさらに、データテーブル識別子およびデータサイズフィールドのためのビットスクランブリング関数(373)と、フィールドのマッピング(374)とを含む。プロセスはさらに、各ランダム抽出をマップすること(375)を含む。例えば、ブロック375は、図10に示されるように、ワード1およびワード2フィールドをマップすることを含む。プロセスはさらに、上記に説明されるように、クイックルックフィールドを計算すること(376)を含む。プロセスはさらに、ヘッダデータを他の難読化されたデータと連結し、2つのデータセットをともにスクランブルすること(377)を含む。
図11Dは、ヘッダ情報をデコードするための一実施形態を図示する。概して、デコーディングプロセスは、単に、エンコーディングプロセスの反転であってもよい。プロセスは、ヘッダデータをスクランブル解除し、他の難読化されたデータから分離すること(380)を含む。プロセスはさらに、クイックルックフィールドをチェックし、ヘッダがOCTSヘッダ(またはデータの受信機が受信することを予期する別のヘッダタイプ)であるかどうかを検証すること(381)を含む。逆方向マッピングは、ヘッダの検証に応じて、各ランダム抽出(382)および種々のデータフィールド(383)に適用される。プロセスはさらに、データテーブル識別子およびデータサイズフィールドをスクランブル解除すること(384)を含む。プロセスは、次いで、チェックサムを逆方向マップすること(385)と、チェックサムを使用して、ヘッダデータにエラーがないことを検証すること(386)を含む。
概して、図12−25を参照すると、入力データ難読化プロセスの一実施形態が、より詳細に説明される。より具体的には、入力データ難読化モジュール108および送信機100のデータ変換モジュール102のアクティビティならびに入力データ難読化解除モジュール160および受信機150のデータ変換モジュール152のアクティビティが、より詳細に説明される。入力データは、概して、送信機100によって受信機150に伝送されるために所望されるデータである。入力データは、送信機100によってエンコードされるように構成される、任意のサイズまたはタイプであってもよい。入力データ難読化モジュールは、概して、入力データを難読化し、意図される受信者以外の任意の者がデータを使用または閲覧する能力を否定する。入力データ難読化モジュールは、ヘッダデータの難読化またはデータマージのために使用されるものと異なる一意の関数のセットを使用するか、またはヘッダデータ難読化および/またはデータマージのために使用されるものと同一の一意の関数のセットを使用するかのいずれかであってもよい。
ここで図12Aを参照すると、送信機100の入力データ難読化モジュール108のブロック図が、示される。入力データ難読化モジュール108は、概して、入力データマネージャ402によって送信されるためのデータおよびデータの伝送のために利用可能なリソースのための要件に最良に合致するように選定され得る、関数のセットを含む。入力データマネージャ402は、データを難読化し、データ難読化プロセスを初期化および更新するために使用すべき関数を判定するように構成される。入力データマネージャ402は、関数および関数のための1つまたはそれを上回るパラメータをランダムに選択するために使用され得る、RNG(例えば、図2に説明されるようなRNG116)を含んでもよい。RNGが、使用される場合、生成された選択は、受信機にパスされる必要がある一方、PRNGは、送信機および受信機が同一シードを使用して同一擬似乱数を生成し得るように使用され得る。加えて、PRNGは、XOR関数またはビット置換またはビット転置関数において使用すべき一連のビットを生成するために使用されてもよい。
入力データ難読化モジュール108は、任意の数の関数を実装してもよい。例えば、図12Aに示されるように、第1の難読化関数404、第2の難読化関数406、最大n番目の難読化関数408が、入力データに連続して適用されてもよい。入力データマネージャ402は、入力を各関数に提供し、関数の1つまたはそれを上回るパラメータを制御してもよい。使用され得る、データ難読化関数または方略のいくつかの実施例は、置換またはマッピング(例えば、入力データ内の第1のビットパターンを第2のビットパターンで置換する)、ホワイトニング(例えば、エンコードされたデータストリームの統計を均一分布確率関数に変換する)、および転置(例えば、入力データの2つまたはそれを上回る要素の交換)を含む。本開示は、そのような関数の種々の実施例を提供するが、他の実施形態では、これらの関数または他の難読化関数の任意のタイプの変形例が、本明細書に説明されるシステムおよび方法と併用されてもよいことを理解されたい。
ここで図12Bを参照すると、受信機150、より具体的には、入力データ難読化解除モジュール160のアクティビティが、より詳細に示される。入力データ難読化解除モジュール160は、概して、送信機100の入力データ難読化モジュール108によって実施される入力データ難読化を逆転させてもよい。ヘッダ難読化解除モジュール162は、上記に説明されるように、エンコードされたヘッダ情報およびエンコードされた入力データを受信されたエンコードされたデータから識別してもよい。マネージャ420は、エンコードされた入力データ部分を受信し、データを元々エンコードするために使用された1つまたはそれを上回る関数および関数のためのパラメータを判定してもよい。他の実施形態では、マネージャ420は、単に、エンコードされた入力データ部分の受信に応じて関数コールを行う、より受動的モジュールであってもよい。入力データ難読化解除モジュール160は、次いで、データをエンコードするために送信機100によって使用される関数に関連する(例えば、その反転である)、入力難読化解除モジュール422、424、426等を使用して、データをデコードしてもよい。入力データ難読化解除モジュール160は、受信機150による使用のためのデコードされた入力データ428を出力する。
概して、図13−20を参照すると、マッピング関数の種々の実施例が、より詳細に示される。マッピング関数は、データを難読化するために、入力データ(またはヘッダデータ)に適用可能であってもよい。本開示に提供される実施例は、一例にすぎず、他のマッピング関数または置換方法も、データを難読化するために使用されてもよく、マッピング関数または置換方法の任意の組み合わせが、使用されてもよいことを理解されたい。
図13を参照すると、基本マッピング関数が、図示される。図13は、入力データをエンコードするための順方向マッピングテーブルと、入力データをデコードするための逆方向マッピングテーブルとを図示する。順方向マッピングテーブルが、入力データ難読化モジュール108によって使用されてもよい(難読化関数402、404、または406として)一方、逆方向マッピングテーブルは、入力データ難読化解除モジュール160によって使用されてもよい。図13の順方向マップおよび逆方向マップは、以下のように、ベクトルペアとして提示されてもよい。
‘順方向マップ’={010 100 011 101 001 111 000 110}
‘逆方向マップ’={110 100 000 010 001 011 111 101}
図13の実施例では、入力値のエンコードされた値は、入力値を順方向マッピングベクトル内のインデックスとして使用して見出される。例えば、順方向マッピングにおけるインデックス4内の要素は、1(10進数では、1、2進数では、001)であって、オリジナルデータ内のインデックス4に元々位置する要素が、ここでは、エンコードされたデータ内のインデックス1にあることを意味する。逆方向マップを介したデコーディングに関して、インデックス1は、4にマップされ、エンコードされたデータ内のインデックス1に位置する要素がインデックス4に返されることを意味する。言い換えると、encode(4)=1およびdecode(1)=4である。順方向マップおよび逆方向マップは、相互交換可能であってもよい、すなわち、順方向マップおよび逆方向マップは、反転され、反対マップとして使用されてもよい。
順方向マップが、例えば、ベクトル要素を並べ替えるように構成される、シャッフル関数を使用して作成されてもよい。一実施形態では、シャッフル関数は、上記に説明されるように、RNGまたはPRNGによって駆動される。具体的インデックスにマップされるn−要素ベクトル内の要素毎の確率は、1/nであって、各要素は、異なるインデックスにマップされる。図14を参照すると、シャッフル関数によって生成され得る、インデックス化されたソートが、図示される。順方向マップに示されるように、入力データ(すなわち、コンテンツ列)内の要素をシャッフル後、昇順ソートが、入力データ(すなわち、コンテンツ列)に適用され、インデックス列要素は、コンテンツ列にスレーブ化される。逆方向マップが、次いで、示されるように、2つの列内の要素を交換することによって、インデックス化されたソートから生成される。基本マッピング関数は、マップ検証プロセス(すなわち、全ての要素に関してdecode(encode(x))=xであることを検証する)を含んでもよい。図13−14に示される実施形態は、2進数において導出される実施例を図示し、nビットおよび2n要素を伴う。他の実施形態では、テーブルは、可能性として考えられる要素の数がchnであるように、任意の進数chにおけるインデックス値および入力データ値のために導出されてもよい。
種々の実施形態では、順方向マッピングおよび逆方向マッピングは、完全テーブルとして、オフラインで構築され、データ変換モジュール102に提示されてもよい、またはマネージャ104からの入力に基づいて生成されてもよい。例えば、順方向および逆方向マッピングは、オフラインで生成されてもよいが、エンコーディングのための付加的難読化複雑性を提供しながら、完全マッピングをデータ変換モジュール102に提供するために、余剰オーバーヘッドを要求してもよい。
シャッフル関数は、十分な深度を有し、シャッフルプロセスを検索およびクラックするプロセスを困難にしてもよい。例えば、8ビットマップに関して、8ビットマップ内の要素の数は、28または256である。8ビットマップのためのテーブル空間は、したがって、256!,=1.3122E+254である。本大テーブル空間は、シャッフルのシャッフルを前提として達成可能である。例えば、シャッフリングのプロセスは、いくつかのデータセンタを横断して分散されてもよく、1つのデータセンタが、第2のデータセンタのシャッフルされたテーブルを再シャッフルする。
種々の実施形態では、マッピング関数内に含まれるテーブルは、4、8、または16ビットワードを含んでもよい。そのようなサイズは、エンコードされるための16ビットワードを効率的に利用し得る。しかしながら、他の実施形態では、本明細書における方法は、任意のビットサイズのために適用されてもよい。難読化の観点から、敵が、単に、エンコードされたデータ伝送を観察することによって、テーブルサイズを判定することは困難であろう。加えて、マネージャ104からの入力に基づいて、各伝送は、異なるサイズビットワードを使用してエンコードされてもよい。
ここで図15を参照すると、データ駆動難読化方略が、説明される。入力データ、RNG、または別のソースのいずれかによって駆動される、エンコーディング関数の実装は、難読化関数の難読化複雑性を増加させることができる。データ駆動エンコーディング関数は、各フレームがスタンドアロンであり得るように、単一フレームからサンプリングされてもよい、または前のフレームからサンプリングされてもよい。
データ駆動マッピング関数を有する1つの方法は、各テーブルエントリへのインデックスをオフセットすることである。例えば、単一値オフセットが、入力データに基づいて選択され、マッピング関数内の値に適用されてもよい。図15では、オフセット値=3が、順方向および逆方向マッピングにおけるインデックス4に適用される。マッピングに適用されるオフセットを表す方程式は、以下である。
offset_value=3,x=4
offset_encodeは、encode index+offset_valueの剰余和に対して実施される。
offset_encode(4)=encode((4+3)%8)=encode(7)=6であって、式中、x%yは、剰余yにおけるxの値を示す。
offset_decodeは、offset_decode(6)=(decode(6)+8−offset)%vector_element_countとして評価される。
この場合、offset_decodeは、offset_decode(6)=(decode(6)+8−offset)%8=(7+8−3)%8=12%8=4である。
いくつかの実施形態では、フレーム全体のために固定オフセットを使用する代わりに、オフセットは、フレームのための複数の変数の関数であってもよい。所与の値xのためのオフセットは、以下のようになり得る。
encode(x)=‘Forward map’[(x+offset)%(sizeof(‘Forward map’)]であって、式中
offset=(element index*random draw)%(sizeof(‘Forward map’)であって、
x%yは、剰余y内のxの値を示す。
本関数は、要素およびフレームベースの各完全フレームの要素毎に、一意のオフセットを提供する。いったんオフセットが、判定されると、エンコードおよびデコード関数は、図13−15に示されるものに類似し得る。多くの技法が、オフセット項を生成するために使用されてもよいことに留意されたい。いくつかの実施形態では、非線形オフセット関数が、オフセット項を作成するために使用されてもよい。実施例として、剰余関数が、上記の例示的方程式に示されるように使用されてもよい。非線形オフセット関数を使用することによって、順方向マッピングが、一意の逆方向マッピングを有せず、難読化を増加させるように作製され得る。
オフセットを複数の変数の関数となるようにさせる一実施例が、図16A−Eに示される。図16Aに示されるように、メッセージ(「hello」)エンコードするために、asciiでエンコードされたメッセージが、作成され、そのバイナリコーディングに拡張される。メッセージは、3ビットデータ駆動マッピングのために3ビットチャンクに区画する。3ビットチャンクは、10進数に変換されて示され、インデックスカウントが、チャンク毎に確立され、それぞれのオフセットが、算出される。オフセットは、以下の方程式:offset=(random draw*index)%Table_size(式中、%は、剰余関数を表す)を介して算出される。値(x+offset)%Table_sizeが、算出され、エンコードテーブル(図16Bに示される)が、値encode[(x+offset)%Table_size]を見出すために使用される。
受信機によるデコーディングのために、デコードテーブル(エンコードテーブルを使用して生成され、図16Bに示される)が、各decode[message element]を見出すために使用されることができる。インデックスカウントが、受信機において3ビットチャンク毎に確立され、オフセット(offset=(Random draw*index)%Table_size)が、再び算出される。値x=(decode[message element]+Table_size−offset)%Table_sizeが、算出され、値xは、その3ビットバイナリ表現に逆変換され、これは、次いで、asciiに逆変換される。図16Cのテーブルは、データ駆動マップ関数を使用して図16Aにおいてエンコードされたデータをデコードする実施例を図示する。
図16D−Eのテーブルは、本明細書に説明されるマッピング関数の難読化特徴を図示する。両テーブルは、エンコーディングのために全てゼロビットを伴う、メッセージを図示する。図16Dのテーブルでは、29のランダム抽出値が、エンコーディングのために受信され、図16Eのテーブルでは、ランダム抽出値は、19である。異なるランダム抽出値の結果、異なるオフセットが、オリジナルメッセージのために計算され、オリジナルメッセージが同一であるにもかかわらず、異なるエンコードされた出力をもたらす。
いくつかの実装では、非対称テーブルが、順方向マッピングおよび逆方向マッピング関数とともに実装されてもよい。非対称テーブルは、m出力ビットへのn入力ビットのためのマッピング関数のために使用されてもよく、n>m(例えば、1対多マッピング)である。以下は、例示的2ビット入力、3ビット出力マッピングである。
‘forward map’={010 100 011 101 001 111 000 110}
‘reverse map’={11 10 00 01 00 01 11 10}。
図17A−Cを参照すると、非対称テーブルを使用してメッセージをエンコードおよびデコードするエンドツーエンド例証が、示される。図17Aでは、asciiメッセージが、そのバイナリコーディングに拡張され、2ビットチャンクに分割される(かつ10進数に変換される)ように示される。各インデックスは、(2*入力+(x%2))として算出される。エンコードテーブルが、次いで、encode[index]を見出し、エンコードされたデータをもたらすために使用される。結果として生じるエンコードされたデータは、3ビットシーケンスに分割されて示され、各そのようなシーケンスは、オリジナルデータ内の2ビットシーケンスに対応する。図17Bは、所与の値のために生成されたエンコードテーブルおよびデコードテーブルを図示する。
図17Cに示されるデコーティングに関して、デコードテーブルは、各decode[message element]を見出すために使用される。各エンコードされた値は、デコードされ、次いで、その2ビットバイナリ表現に逆変換され、次いで、asciiに逆変換される。デコードテーブルは、デコーティング関数がデータをエンコードするために使用されるエンコーディング関数にマップすることを確実にするために生成される。デコードテーブルは、例えば、外部サーバ(例えば、以下に説明されるようなポリシサーバ)によって生成されてもよい。本方法におけるデータ駆動コーディングを駆動するために使用される外部データは、エンコードおよびデコード関数の両方のために外部駆動データの知識を要求する、図16A−Eのデータ駆動マップと比較して、エンコーディングのためだけに要求されることに留意されたい。
図18を参照すると、2つの付加的非対称テーブルが、エンコードおよびデコードテーブル生成の実施例を図示するために示される。実施例では、コンテンツ列がシャッフルされた後、昇順ソートが、コンテンツ列に実施され、入力およびインデックス列が、コンテンツ列にスレーブ化される。逆方向マップが、次いで、列をリネーミングすることによってインデックス化されたソートから生成される。コンテンツ列は、インデックス列となり、入力列は、コンテンツ列となる。各実施例では、結果として生じるテーブル(逆方向マップ)は、オリジナルエンコードテーブル(順方向マップ)のためのデコードテーブルである。
入力は、入力のための2ビットのみであるため、4つの一意の要素のみが存在し、3ビット、8要素出力にマップされることができる。これは、本実施形態では、各入力要素が2つの出力にマップされることを可能にする。ケース1では、これは、各入力要素を生じるにつれて繰り返すことによって実装されることができる(例えば、00、00、01、01等)。ケース2では、これは、入力要素のシーケンス全体を繰り返すことによって実装されることができる(例えば、00、01、10、11、次いで、00に戻る)。種々の実施形態では、入力ビットの任意のタイプのシーケンスが、類似様式で使用されてもよい。
数学的用語では、ケース1に関して、図18における入力からインデックスへのデータ駆動変換は、index=(input*2+(x%2))であって、式中、xは、データ駆動入力であって、一般に、index=input*2m−n+(x%2m−n)である。
非対称テーブルは、入力ビットの数が、常時、エンコードされたビットの数未満であるため、それらと関連付けられたオーバーヘッドを有してもよい。オーバーヘッドは、パーセントで測定される、Overhead=(output bits−input bits)/input bitsとして測定される。例えば、8入力ビットおよび10出力ビットに関して、オーバーヘッドは、25%である。オーバーヘッドパーセンテージ範囲は、入力ビットおよび出力ビットの数に基づいて0%〜50%と変動してもよい。
図17−18に説明されるように、非対称テーブルは、その1対多(n対m)エンコーディングおよび多対1(m対n)デコードを解法する困難度に基づいて、入力データを難読化するために使用されている。代替は、代わりに、m−nビットをエラー制御コーディングに対して意図することである。使用され得る、エラー制御コードの2つの実施例は、BCHコードおよびLDPCコードである。本開示は、BCHコードの使用を説明するが、任意のタイプのエラーコーディングスキームが使用されてもよいことを理解されたい。
エラー制御コーディングは、OCTS(最適化されたコードテーブルシグナリング)テーブルを使用して実装されてもよく、テーブル生成は、バイナリBCHコードに基づく。BCHコードは、(n,k,t)コードとして説明され、nは、ビット単位のブロック長であって、kは、情報ビットの数であって、tは、補正され得るエラー中のビットの数である。nブロック長は、OCTSテーブルのサイズを設定し、これは、長さ2
nである(すなわち、n=7である場合、OCTSテーブル内には128個のエントリが存在し、n=15である場合、32,768個のエントリが存在する)。
図19は、BCHエンコーディングのための部分的エンコード/デコードテーブルを図示する。非対称テーブルの前述の実施例は、2ビットのみをエンコードしたが、完全3ビット出力テーブルを生成したことに留意されたい。BCHエンコードは、完全7ビット出力を生成するが、完全128要素テーブルではなく、16要素テーブルのみを生成する。図20Aは、図19の非対称テーブルを使用した破損したデータストリームの補正を図示する。
LDPCコード実装は、類似してもよく、テーブルルックアップとしての代わりに、算出として実施される。エラー補正能力は、受信機によってエラー内の受信されたビットの数を推定するために使用されることができる。図20Bに図示されるようなプロセスは、エラー補正され、デコードされたメッセージをエンコードすることによって、オリジナルメッセージのローカル推定値を作成し、本ローカル推定値と受信されたビットを区別するためのものである。推定値は、エラーの数がエラー補正の限界内にある限り、正確である。補正されていないエラーの場合、推定値は、高くなるが、エラーカウントを低減させるためにコードレートを変更すべきかどうかを決定するために使用される場合、依然として、有用であり得る。
再び、図12Aを参照すると、データを難読化するために実装され得る、別の例示的関数は、ホワイトニング関数であり得る。ホワイトニング関数は、任意のエンコードされたデータストリームの統計を均一分布確率関数に変換し、したがって、統計的測定値をホワイトニングするために使用されてもよい。ホワイトニングのための1つの技法は、難読化されるためのストリームと長さが等しい擬似ランダムに選定されたビットのシーケンスを作成し、ホワイトニングされるためのランダムに選定されたビットおよびデータのビット毎XORを作成することである。出力をホワイトニングするための別の技法は、エンコーディングのために各シンボルを表すために使用されているビットを追跡することによって、1対多のマッピングを使用して遂行されることができる。多くのマッピングのうちの1つを使用したシンボルのエンコーディングが、あまり均一ではないと思われるビットストリームをもたらすであろう場合、代替マッピングのうちの1つが、代わりに選定されてもよい。
ここで図21A−Bを参照すると、ホワイトニング関数の例示的実装が、示される。図21Aは、ホワイトニング難読化データを生成する方法を示し、図22は、ホワイトニング難読化データをデータ入力に適用し、データ入力を難読化する方法を示す。一実施形態では、履歴バッファの初期ロードは、ヘッダ情報から導出される。初期ロードは、ヘッダ情報の全体またはヘッダ情報のサブセットから成ってもよい。初期ロードは、ヘッダ内に現れるビットと同一シーケンス内にロードされてもよい、またはスクランブルされてもよい(すなわち、履歴バッファの中への初期ロードとヘッダ情報との間の正確な相関は、要求されない)。さらに、初期ロードは、難読化されていないヘッダ情報から導出されてもよく、これは、ホワイトニング関数が適用され得る前に、ヘッダ情報の難読化解除を要求することによって、セキュリティを増加させるであろう。図21A−Bに示される実施例では、初期ロードは、ヘッダ情報からの64ビットから成る(DEEA DBC5 BAC1 1AA1)。バッファはさらに、1つまたはそれを上回るヘッダデータプロパティ(例えば、時刻)から導出される、他の値を含んでもよい。
PRNGが、マネージャ104において初期化され、それぞれのPRNGが値(図21A−Bでは、PRNG_drawと称される)の同じシーケンスを生成するように、デコーダマネージャ154において複製される。受信機は、ヘッダ内に提供される情報に基づいて、送信機においてPRNGのために使用されるシード値を判定可能である。図21Bに示されるように、ヘッダデータ(例えば、ランダム抽出(「RD」)データ)の一部は、PRNGへの入力として使用されてもよい。言い換えると、ヘッダデータからのビットは、乱数生成プロセスを駆動してもよい。別の実施形態では、複数のランダム抽出は、単一PRNGがビットのより長いシーケンスを生成するために使用されてもよい。さらに別の実施形態では、複数のPRNGは、PRNG毎に、同一シードと併用されてもよい。さらに別の実施形態では、複数のPRNGは、それぞれ、異なるシードと併用されてもよい。
ホワイトニング関数は、履歴バッファ(DEEA)内の第1のブロックおよびPRNG_draw(A019)内の第1のブロックをとり、XOR関数を適用することによって開始する。本実施例では、結果は、7EF3である。他の実施形態では、各バッファ内の第1のブロック以外のブロックは、ともにXORされてもよい。本実施形態は、便宜上、それぞれ内の第1のブロックの使用を図示する。結果として生じる値7EF3は、次いで、データシーケンスとXORされる。
新しく生成された値(7EF3)は、履歴バッファの最後に追加される一方、他の値は、繰り上げられ、最初の値DEEAは、除去される。当業者は、履歴バッファが、循環バッファとしても同様に実装され得、新しく生成された値が、最近使用された値に取って代わり、使用されるべき次の値を示すポインタが、単に、バッファ内の次の値をポイントするように更新されることを認識するであろう。さらに、使用されたPRNG_drawからの値(A019)は、除去される。次いで、プロセスは、繰り返し、最初の値(現時点では、1AA1およびBC76)は、ともにXORされる。本プロセスは、PRNG_draw内の全ての値が使用されるまで繰り返す。
種々の実施形態では、プロセスは、上記に示されるように、一度に16ビット以外のデータの任意のサイズのために実行されてもよい。プロセスは、32ビットチャンク、12ビットチャンク等のために実行されてもよい。終了時、奇数のビットが残っている(一度に16ビットが使用されているとき、16ビット未満が残っている)場合、データは、ビットベースで処理されてもよい。
デコーダは、同一シード値(図21A−Bの実施例では、ヘッダから取得された、マップされたRD)を使用して、擬似ランダム値の同じシーケンスを生成する。デコーダにおいて生成された擬似ランダム値の本シーケンスは、別のXOR関数を使用して、受信されたデータとマージされ、オリジナルデータストリームを露見させる。
再び、図12Aを参照すると、データを難読化するために実装され得る、別の例示的関数は、転置関数(本開示では、パック関数とも称される)であってもよい。そのような関数は、asciiでエンコードされたテキストのパターンをディスラプトするための状況において使用されてもよく、各英数字文字の最初のビットは、0である。実施例として、図22A−Bでは、第8のビットをパックするための第2のソースの2つの実施例が、示される。第1の実施例は、エンコードされるためのメッセージの最後のバイトであって、第2の実施例は、送信機と受信機との間の通信のためのフレームカウントとしての役割を果たすためにもたらされるバイトである。PRNG等のデータをパックする他のソースも、使用されてもよい。
図22A−Bの基本的実施例では、一般的プロセスは、asciiエンコードのビット0−6をパックされたメッセージのビット0−6の中に移動し、asciiエンコードのビット56をパックされたメッセージのビット場所7の中に移動するためのものである。言い換えると、asciiエンコードの最初の7ビットが、とられ、次いで、第7のバイトからの最初のビットが、挿入される。本プロセスは、繰り返され、次の7ビットをasciiエンコード(一次ソース)から、次いで、次のビットを第7のバイト(二次ソース)から引き出す。
標準名称が、(a,b,c)の形態で示され、エンコーディングの基本単位は、(a+b)ビットの長さであって、ビットは、一次ソースからもたらされ、bビットは、二次ソースからもたらされる。図22−25に示される実施形態では、a+bは、全ての実施例において、8と等しく、他の実施形態では、他のビット長が、本明細書に説明されるアルゴリズムと併用されてもよいことに留意されたい。例えば、aおよびbのための値は、恣意的に選定されてもよい。識別子cは、パックされたビットまたは複数のビットのための開始ビット場所を定義する(本実施例では、基本インデックスとして0を用いる)。c値は、(0、…、a+b−1)の範囲内であるべきである。図22A−Bでは、a=7、b=1、およびc=7である。示されるように、文字「e」は、7番目の位置に示され、文字「e」を表すビットが転置関数において使用されるであろうことを示す。「e」の第1のビットは、メッセージ内の第1の文字の7番目の位置に移動され(a=7であるため)、「e」の第2のビットは、メッセージ内の第2の文字の7番目の位置に移動される等となる。転置されていない各ビットは、単に、転置されたビットのための空間を作るためのスポットまで移動される。
図23A−Bでは、第8のビットがインデックス7以外の場所にパックされる実施例が、示される。図23Aの実施形態では、パックされたビットは、インデックス4のみに設置される(c=4であるため)。言い換えると、転置されるための文字「e」のビットは、各バイト内の4番目の位置に移動される。図23Bでは、パックされたビットは、シーケンシャルインデックス場所内に記憶される(c=0、次いで、1、次いで、2等)。言い換えると、各バイトに転置されるための文字「e」の1ビットは、バイト内の異なる定義された場所に設置される。本パターンは、シーケンシャルとして示され、他の実施形態では、パターンは、任意の方法でランダム化されてもよい。
図24A−Bでは、異なる数のビットが第1のまたは一次ソースから引き出される、実施例が、示される。図24Aの実施形態では、6ビットが、一次ソースからもたらされ、したがって、2ビットが、二次ソースからもたらされる。言い換えると、他の実施例と比較して、「y」セグメントからのビットが、「e」セグメント内のビットと同様に使用される。2ビットが、各バイトの中に転置されるように示される。図24Bでは、8ビットのシーケンス毎に、5、6、または7ビットのいずれかが、一次ソースからもたらされる(すなわち、もたらされるビットの数は、シーケンス毎に可変である)。例えば、2ビットが、第1のバイトの中にも、1ビットが、第2のバイトの中に、2ビットが、第3のバイトの中にたらされる等となる。本実施例では、データパケット全体を横断して転置されるビットの総数は最後の2バイト内のビットの数と等しくあるべきであって、そこから、ビットは、読み出されることに留意されたい。図25は、パック機能性を規定する(転置されたビットが各バイト内に挿入される場所を定義する、cの値を変更する)ための付加的自由度を図示する。図25は、ストリーミング関数としての関数を図示し、cの値は、経時的に変化する。
以下のテーブルは、(a,b,c)フォーマットの使用を図示し、ストリーミングフォーマットの使用は、サイド・バイ・サイドベースである。テーブルの左側は、(a,b,c)フォーマットを図示し、各行は、連続(a,b,c)値を規定し、これは、具体的パック関数を識別する。右側のパックストリーミングスケジュールエリアもまた、示される。以下のように、すなわち、第1の行では、0ビットを一次ソースから引き出し、出力バッファ内に記憶し、2ビットを二次ソースから引き出し、ビットを出力バッファの中に連結するように解釈される。これは、パックストリーミングスケジュールが使い果たされるまで、全ての行に関して継続される。(a,b,c)フォーマットからパックストリーミングスケジュールに変換するためのマッピング関数は、中央の列に識別される。
以下のテーブルは、付加的複雑性のためのデータ駆動関数を追加する実装を図示する。本実装に関して、(a,b,c)フォーマットされたパックの完全セットは、パック関数自体の外部の変数の関数として修正されてもよい。
本実施例では、データ駆動パック変更は、リソースのより高次の管理が動的な低次のデータ駆動変更によって影響されないように、ブロック内に保たれる。例えば、以下のテーブルでは、4つの(a,b,c)値のグループが、ブロックとして取り扱われ、ブロック内のaの和は、24であって、ブロック内のbの和は、8であって、したがって、バイト指向管理と良好に整合する。
データ駆動パックを実装するための候補方略は、以下に示される基本テーブルとして以下を設定し、基本に対する変更を実装することである。導出は、以下のようになり得る。
−基本テーブルとして示される、4つのエントリのブロックを設計する。本テーブルは、データ駆動テーブルの(a,b)ペアがセット((7,1)、(6,2)、(5,3))からであるように設計される。これは、全ての基本テーブル(a,b)ペアを(6,2)として設定し、ペアを(+1,−1)、(0,0)、または(−1,+1)によって修正することによって遂行される。
−データ駆動パックテーブルの外部で生成された3ビットバイナリワードによって駆動されるように、パックテーブルの8つの変形例を設計する。
−ブロックを横断したaの和が24のままであって、ブロックを横断したbの和が8のままであるように設計する。
−各(a,b)ペアが合計8になるように設計する。本具体的ケースでは、これは、aまたはbのいずれかへの1の変更は、それぞれ、bまたはaへの−1の変更を伴うはずであるとまとめられる。
−c値が範囲(0,a+b−1)内であるように設計する。
以下のテーブルは、これらの制約を使用して作成される。
スタンドアロン方略として、パック関数は、ビットをエンコードされたストリームの中に挿入するが、ビットの順序を変更しない。したがって、前述の方略は、データの順序を転置する関数とペア化され得、これは、特に、転置される要素のサイズがパック関数内の要素の任意のシーケンスに対して素である場合、難読化スキームをはるかに強固にするであろう。
再び、図12Aを参照すると、入力難読化関数404は、プレフィックス一意の順方向および逆方向マッピング関数であってもよい。プレフィックス一意の順方向および逆方向マッピングの目的は、ハードウェア一意のデータ変換モジュールプラットフォーム群を提供する能力を確立することである。上記に説明されるように、例えば、図13では、順方向マップおよび逆方向マップペアが、示される。マッピングは、プレフィックス順方向および逆方向マップを含むように拡張されてもよい。例えば、図26に示されるように、プレフィックス順方向マップおよびプレフィックス逆方向マップも同様に、生成されてもよい。
図26における上部4つのテーブルは、新しいペアの順方向および逆方向マップを作成するために畳み込まれてもよく、畳み込みのプロセスは、インデックスをそのコンテンツにマップするための順方向マッピングを使用し、プレフィックスマップを使用して、コンテンツをプレフィックス順方向マップへのインデックスとして使用するためのものである。順方向マップは、プレフィックス順方向マップの中に畳み込まれ、プレフィックス逆方向マップへの逆向き作用は、逆方向マップの中に畳み込まれる。
ここで図27Aを参照すると、例示的実施形態による、入力データをエンコードするためのプロセス500のフローチャートが、示される。プロセス500は、例えば、入力データ難読化モジュール108によって実行されてもよい。プロセス500は、エンコードされるための入力データ(502)および入力データマネージャからの入力(504)を受信することを含む。一実施形態では、入力データマネージャからの入力は、RNGからの1つまたはそれを上回るランダムに選択された値を含む。例えば、マネージャからの入力は、データを難読化するために使用すべき1つまたはそれを上回る関数の選択と、関数によって使用されるための1つまたはそれを上回るランダムに選定された値とを含んでもよい。値は、例えば、入力データの中に挿入するため、入力データと組み合わせるため(例えば、XOR関数を介して)、またはその他のためのビットのストリングであってもよい。
プロセス500は、複数の関数を識別し、入力データに適用すること(506)と、入力データマネージャ入力および関数を使用して、データを難読化すること(508)と、を含む。例えば、ブロック508は、概して、入力データマネージャからの第1の関数および入力を介して、入力データを難読化し、次いで、さらなる難読化のために、難読化されたデータを第2の関数に提供することを含んでもよい。これは、任意の数の関数のために継続してもよい。プロセス500はさらに、ヘッダデータとのスクランブリングおよび連結のために、難読化された入力データを別のモジュールに提供すること(510)を含む。上記に説明されるように、入力データおよびヘッダデータは、2つの異なるモジュールにおいて別個に難読化され、次いで、第3のモジュールにおいて組み合わせられ、スクランブルされる。いくつかの実施形態では、ヘッダデータおよび入力データの一方または両方は、デコーダがデータを受信機においてデコードするために必要な情報を含んでもよい。
ここで図27Bを参照すると、例示的実施形態による、入力データをデコードするためのプロセス550のフローチャートが、示される。プロセス550は、例えば、入力データ難読化解除モジュール160によって実行されてもよい。プロセス550は、分割された入力データをヘッダ難読化解除モジュールから受信すること(552)を含む。上記に説明されるように、ヘッダ難読化解除モジュールは、エンコードされたデータパケットを送信機から受信してもよく、エンコードされたデータをエンコードされた入力データ部分およびエンコードされたヘッダデータ部分に分割するように構成されてもよい。ブロック552は、スクランブリング解除モジュールおよび分割モジュールに返された、エンコードされた入力データ部分を受信することを含んでもよい。
プロセス550はさらに、入力データを難読化するために使用される1つまたはそれを上回るパラメータを識別すること(554)と、複数の関数を識別し、エンコードされた入力データに適用すること(556)と、関数を使用して、データを難読化解除すること(558)とを含む。ブロック554、556、558は、概して、データを難読化するプロセスの反転を表し得る。例えば、ブロック554、556、558は、概して、送信機がデータをエンコードした方法を識別し、送信機が使用したプロセスを逆転させることを含む。
いくつかの実施形態では、パディング関数が、データ難読化の間、使用されてもよい。パディング関数は、概して、データセットが十分な複雑性のために十分に大きくない(すなわち、データセットが、適用される難読化関数の数にかかわらず、データが脆弱であるほど十分に小さい、またはデータセットがある関数のために不便な長さである)とき、データセットのために使用されてもよい。パディング関数は、データのための閾値に到達するまで、バッファをランダム値で充填してもよい。例えば、難読化されるためのデータパケットのデータ長が、200バイト等の最小値未満である場合、データは、擬似ランダム値でパティングされ、データパケットを最小長まで充填する。パディングは、典型的には、付加的難読化関数の前に行われ、追加される擬似ランダム値が直接暴露されないことを確実にしてもよい。
パディング関数が、使用されるとき、データ伝送の受信機は、データがパティングされたかどうかを判定する。例えば、現在のフレームサイズが、ヘッダ情報の一部として送信されるデータサイズ値を上回る場合、ビットサイズの差異は、データに追加されるパティングされるビットの数を表し得る。例えば、1,300バイトワードが、受信機によって受信され、データサイズ値が、1,233である場合、受信機は、67バイトパディングがデータに追加されたことを判定してもよい。データ伝送の最後の67バイトは、次いで、データ難読化解除の前に破棄される。パティングされたデータは、一実施形態では、データの終了に追加されてもよく、他の実施形態では、パティングされたビットは、受信機がどのビットがパティングされたビットであるかを区別可能である限り、任意の場所に追加されてもよい。
ここで図28A−Bを参照すると、送信機100によって受信機150に伝送されるためのデータを難読化するための連結およびスクランブリングプロセスが、説明される。概して、上記に説明されるように、伝送されるためのデータパケットのためのヘッダデータおよび入力データは、種々の関数を使用して、別個に難読化されてもよい。ヘッダ難読化モジュール110および入力データ難読化モジュール108はそれぞれ、独立して、データを難読化し、伝送のためのデータを提供してもよい。しかしながら、データが伝送される前に、第3の難読化ステップが、生じてもよく、ヘッダデータおよび入力データは、ともに組み合わせられ、連結され、スクランブルされる。図28Aは、データおよび入力をマネージャ602(例えば、ヘッダ情報マネージャ126に類似する)から受信するように構成される、データマージモジュール112を図示する。マネージャ602からの入力は、概して、ヘッダデータの難読化に関連するパラメータおよび他の情報を含んでもよく、これは、受信機がデータを難読化解除するための1つまたはそれを上回る関数またはパラメータを判定することに役立ち得る。
データマージモジュール112は、概して、連結モジュール604およびスクランブリングモジュール606を含んでもよい。連結モジュール604は、概して、2つのデータセットを結び付けるように構成されてもよく、スクランブリングモジュール606は、概して、両データセットからのビットが交絡されるように、2つのデータセットからのビットをともにスクランブルするように構成されてもよい。スクランブリングモジュール606は、以下に説明されるように、任意の数またはタイプのスクランブリング関数を実装してもよい。任意の数の異なる関数が、2つのデータセットからの組み合わせられたビットを難読化するために使用されてもよいことを理解されたい。データマージモジュール112が、データをマージするための2つのモジュール604、606を示すが、任意の数の異なる関数が、種々の実施形態では、データセットをともにマージするために使用されてもよいことを理解されたい。
図28Bを参照すると、データ分割モジュール158は、エンコードされたデータ入力を送信機100から受信するように構成される。データ分割モジュール158は、受信されたデータをスクランブル解除し、次いで、スクランブル解除されたデータをヘッダデータ部分および入力データ部分に分割するように構成される。データ分割モジュール158は、スクランブリング解除モジュール652と、分割モジュール654とを含むように示される。スクランブリング解除モジュール652は、1つまたはそれを上回る所定のパラメータに基づいて、データをスクランブル解除してもよい。例えば、パラメータは、送信機100がデータ伝送プロセスを開始する前に、ポリシサーバから受信された所定のパラメータであってもよい。データをスクランブル解除後、分割モジュール654は、データをヘッダデータ部分および入力データ部分に分割するように構成される。
ここで、概して、図29−34を参照すると、2つのデータセット(上記に説明されるように、ヘッダデータセットおよび入力データセット)を連結およびスクランブルするための種々の関数が、より詳細に説明される。ヘッダデータおよび入力データが、独立して難読化された後、第3のモジュールは、ヘッダデータおよび入力データを組み合わせ、データを伝送されるための単一データデータパケットとして難読化することによって、さらなる難読化を追加してもよい。本開示に説明されるように、ヘッダデータおよび入力データをともに難読化する1つのそのような方法は、両データセットのビットをともに単一データセットの中にスクランブルすることである。いくつかの実施形態では、スクランブリングの順序は、順方向マッピング関数またはデータの連続スワップを実施するために使用されるランダムに生成された値(例えば、RNG値)のテーブルの一方または両方によって駆動されてもよい。受信機は、次いで、データを入力データおよびヘッダデータに分割する前に、ランダムに生成された値のベクトル定義逆方向マッピング関数またはテーブルを使用して、データをデコードすることができる。
データマージプロセスは、概して、曖昧性の別の層を伝送されるためのエンコードされたデータストリームに追加する。プロセスのスクランブリング部分は、ビットの任意の数またはサイズに実施されてもよい(例えば、ビット、バイト、2バイト断片等によってデータをスクランブルする)。難読化の複雑性は、ビット転置のためのレートが、ビットスクランブリングのためのビットレートに対して素である場合、増加される。
連結関数は、2つのステップを伴ってもよい。すなわち、OCTSヘッダデータ要素を具体的順序の中に連結することと、OCTSヘッダデータを難読化された入力データと連結することとである。OCTSヘッダデータは、上記に説明されるように、ヘッダデータ難読化モジュール内で作成され、ヘッダデータと入力データの連結は、スクランブル関数に先行して実施される。スクランブリングに先立って、OCTSヘッダデータは、直接、入力データに先行するか、または後続するかのいずれかである。ヘッダデータが、入力データに先行する場合、ヘッダデータの処理は、受信されるとすぐに開始し、したがって、処理の前に、情報の完全フレームが到着することを待機する必要がないことによって、待ち時間を低減させることができる。TCP/IPプロトコルにおけるように、完全に到着するまでフレームを処理不可能である場合、ヘッダデータは、入力データに後続し、メムコピー関数が、処理の間、データをコピーするために使用される。
スクランブリング関数は、複雑性およびフレーム要素到着時間のために調節されてもよい。例えば、1,500バイトフレームに関して、バイト毎にスクランブルされ得る方法の数は、1500!であって、ビット毎にスクランブル解除され得る方法の数は、(8*1500)!であって、2バイト毎にスクランブルされ得る方法の数は、(1500/2)!である。
エンコーダおよびデコーダによって使用され得る、スクランブリングおよびスクランブリング解除関数は、前述の順方向マッピングおよび逆方向マッピング関数に類似し得る。例えば、スクランブリングおよびスクランブリング解除関数は、ベクトルペアとして表されてもよい。図29を参照すると、例示的スクランブリング関数が、27要素(6つのヘッダ要素および21の入力データ要素)を伴う、データフレームのために示される。要素毎に、スクランブリングマッピングおよびスクランブリング解除マッピング(図29では、順方向および逆方向マッピングとして標識される)が、示される。順方向マップは、データをスクランブルするために使用され、逆方向マップは、受信機においてマージされたデータをスクランブル解除し、データをそのオリジナル順序に戻すために使用される。
上記に説明されるものと同様に、順方向および逆方向スクランブリングマッピングは、畳み込まれてもよい。一意のプレフィックス順方向および逆方向マッピングベクトルが、識別されたユーザまたはデバイスに特有のマッピングを作成するために使用されてもよい。図30を参照すると、例示的畳み込み順方向および逆方向スクランブリングマッピングが、図示される。順方向マッピングおよびプレフィックス順方向マッピングは、畳み込み順方向マッピングを作成するために使用され、逆方向マッピングおよびプレフィックス逆方向マッピングは、畳み込み逆方向マッピングを作成するために使用される。
概して、図29−30を参照すると、スクランブリングマッピングは、受信機がヘッダデータを入力データから分離し得ることを確実にするために、ヘッダデータに関連するデータ要素がある位置に保たれることを保証するように生成されてもよい。例えば、マッピングは、全てのヘッダデータパケットを最初のnパケット内に保つように作成されてもよい。値nは、用途ベースであって、送信機および/または受信機のマネージャによって選定されてもよい。これは、受信機がより迅速または容易にヘッダデータを入力データから分離することを可能にし得る。
いくつかの実施形態では、ランダムに生成された値のテーブルが、データをスクランブルする方法を判定するために使用されてもよい。スクランブリング関数は、テーブル内のランダム値に基づいて、スワップインデックスを用いて、データストリーム内のインデックス化された値のスワップを識別する。テーブルは、送信機および受信機の両方に利用可能であってもよい。スクランブルテーブル実装の基本的実施例は、図31に示される。図31の実施例では、スクランブルされるためのベクトルは、20要素ベクトルである(例証目的のために、図31では、上部に列挙される)。
テーブルを使用してスクランブリング関数を実施するために、固定抽出ベクトルが、インデックス毎にデータ要素カウントを法として固定スクランブルテーブルを計算することによって作成される。スワップペアが、次いで、インデックスとその固定抽出をペア化することによって、インデックス毎に作成される。第1のインデックスから開始し、全てのインデックスを通して反復することによって、スワップペアによって識別されるスワップが、実施される。図31の実施例では、第1のスワップペアは、ヌルペアであって、データのコンテンツ[0]とデータ[0]をスワップする。第2のスワップペアは、データのコンテンツ[1]とデータ[18]をスワップする。図に示されるように、n番目のスワップペアは、データ[n−1]のコンテンツとデータのコンテンツ[データ要素の固定スクランブルテーブル[n]%番号]をスワップする。したがって、20番目のスワップに関して、データ[19]のコンテンツは、データ[760%20]のコンテンツとスワップされるであろう。したがって、データ[19]のコンテンツは、データ[0]のコンテンツとスワップされるであろう。スワップは、任意のスワップが生じる前のデータ[0]がn番目の反復時にデータ[0]と異なる値を含有し得るように漸次的であることに留意されたい。したがって、n番目のスワップは、0からn−1までの全てのスワップが完了した後、データ[n−1]内に含有される値のスワップをもたらす。本実装は、最大固定スクランブルテーブルの長さの任意のデータベクトル長のために使用され、スワップペアがデータベクトルの長さに依存するため、データベクトル長毎に一意のスクランブリングを提供することができる。したがって、所与の2つのデータベクトルを前提として、一方は、19のデータ要素を含有し、一方は、20のデータ要素を含有し、最初の19のデータ要素が同じであろうが、所与の同一固定スクランブルテーブルが与えられても、異なるスワップをもたらすであろう。図31に示されるテーブルに基づいて、20要素データベクトルのための第2のスワップは、データ[1]およびデータ[18]のスワップ(278%20=18)をもたらすであろうが、19要素データベクトルのための第2のスワップは、データ[1]およびデータ[12]のスワップをもたすであろう(278%19=12)。
図32を参照すると、第2の例示的スクランブリングテーブルが、示される。本実施形態では、オフセット項が、固定スクランブルテーブル内の開始点を識別するために使用される。例えば、第1のスワップをインデックス0において実施する代わりに、スワップは、インデックスのいずれかにおいて開始してもよい。オフセットは、データ駆動オフセットであって、したがって、データベクトル長毎だけではなく、また、選定されるオフセット毎に、データの一意のスクランブリングを作成してもよい。例えば、PRNGによって生成された擬似ランダム値は、オフセットとして使用されてもよい。擬似ランダム値は、同一入力を前提として、エンコーダおよびデコーダの両方が同一ランダム値をPRNGから生成し得るように生成されてもよい。代替として、乱数が、エンコーダによってオフセットとして使用される場合、使用すべきデコーダにパスされる必要がある。
図33を参照すると、第3の例示的スクランブリングテーブルが、示される。図33の実施例では、オフセット項評価内に含まれる項の数は、増加され、したがって、単一固定スクランブルテーブルを使用して広がるテーブル空間を増加させる。
図34を参照すると、例示的スクランブリング解除テーブルが、示される。スクランブリング解除テーブルは、図31に示されるスクランブリングテーブルに基づく(すなわち、図34のテーブルは、図31のテーブルによってスクランブルされるデータをスクランブル解除するために使用される)。受信されたデータセットをスクランブル解除するプロセスは、概して、データをエンコードする間、同一のスワップのセットであるが、逆順に実施することを含んでもよい。図34に示されるように、スクランブルテーブルの順序は、データのスクランブリング解除を生じさせるために逆転される。
概して、図35−37を参照すると、本明細書のシステムおよび方法によって提供され得る、付加的特徴が、より詳細に説明される。
ここで図35を参照すると、送信機100および受信機150とポリシサーバ702との間の通信が、示される。本開示に説明されるように、送信機100は、第1の関数のセットに従ってデータを難読化してもよく、受信機150は、第1の関数のセットに関連する第2の関数のセットに従って伝送を難読化解除する場合のみ、オリジナルデータを復元することができる。データが、受信機150に伝送されると、受信機は、データを難読化解除し、連続伝送をもたらすために使用すべき関数を把握しなければならない。図35を参照すると、送信機100および受信機150は、送信機100および受信機150に使用すべき難読化関数およびパラメータに関する情報を提供し得る、ポリシサーバ702と通信する。
図35の実施形態では、ポリシサーバ702は、送信機100および受信機150の両方と通信するように示される。送信機100は、特定の受信機との接続を確立することを所望してもよい(すなわち、データを受信機に伝送するために)。接続を確立するために、送信機100は、要求をポリシサーバ702に伝送する。ポリシサーバ702は、送信機100がデータを受信機150に伝送する許可を有するかどうかを判定してもよい。ポリシサーバ702が、送信機100がデータを受信機150に伝送し得ることを判定する場合、要求を承認し、それに応答して、データを送信機100および受信機150の両方に提供するであろう。例えば、ポリシサーバ702は、キー、マッピング関数において使用するためのテーブル、マッピングのために使用され得、かつ送信機100が受信機150に伝送されるデータのヘッダ内で選定されたテーブルを含むように選定し得る、複数のテーブル、または送信機100および受信機150への任意の他のタイプのパラメータもしくはデータ入力を伝送してもよい。送信機100および受信機150に提供されるデータは、関連する(すなわち、送信機100は、順方向マップが提供されてもよく、受信機150は、対応する逆方向マップが提供されてもよい)。ポリシサーバ702によって提供されるデータは、データをエンコードおよびデコードするとき、送信機100および受信機150が同一関数およびパラメータを使用することを可能にし、送信機が、受信機が具体的エンコーディング情報を送信機から受信せずデコードし得る、エンコードされたデータを伝送することを可能にしてもよい。
ポリシサーバ702は、送信機100および受信機150による難読化および難読化解除情報の使用を限定してもよい。例えば、情報は、単一伝送、単一セッション、最大数のパケット、または具体的時間周期のためだけに割り当てられてもよい。送信機100および受信機150は両方とも、ポリシサーバによって割り当てられる限界を行使することが期待される。しかし、最低でも、受信機150は、限界を行使し、受信することが認可されていないデータを処理しないように防止しなければならない。ポリシサーバ702によって設定された限界を行使する1つの利点は、受信機150によって使用される難読化解除情報がセキュアなままであることをさらに確実にすることである。いったんポリシサーバ702によって設定された限界に到達すると、送信機100が、付加的情報を受信機150に送信することを所望する場合、送信機100は、送信機100および受信機150の両方に返送されるための新しい難読化および難読化解除情報(例えば、新しいテーブル)を要求してもよい。
難読化および難読化解除情報の共有セットがない場合、送信機100は、受信機150が適切なフォーマットではない任意のデータ通信を無視し得るため、受信機150と通信しないように阻止され得る。したがって、送信機100および受信機150が開始する前の任意の通信前に、難読化および難読化解除データは、ポリシサーバ702によって送信機100および受信機150と共有されなければならない。言い換えると、送信機によるデータ難読化方法および受信機による難読化解除方法の設定の間、送信機と受信機との間の通信は、実際には、生じ得ない。要するに、ポリシサーバによる難読化データおよび難読化解除データの提供は、送信機と受信機との間の通信のためのあるタイプの認証として作用する。これは、相互に通信することが許可される、2つまたはそれを上回る送信機および受信機のグループと、相互に通信することができるが、別のサブグループのメンバと通信することができない、2つまたはそれを上回る送信機および受信機の異なるサブグループとの作成を有効にする。各送信機および受信機は、適切な伝送のためのデータをエンコードおよびデコードするために必要とされる情報を取得するために、ポリシサーバ702と通信してもよい。送信機100とポリシサーバ702および受信機150とポリシサーバ702との間の通信は、任意の共通データ暗号化方法(例えば、PGP)を介してセキュア化されてもよい。送信機100とポリシサーバ702および受信機150とポリシサーバ702との間の通信もまた、本明細書に説明されるOCTS技法を介してセキュア化されてもよい。
ポリシサーバ702は、独立送信機100および受信機150から独立して示されるが、他の実施形態では、ポリシサーバ702は、送信機100または受信機150においてローカルで実装されてもよいことを理解されたい。
図36は、ヘッダデータを入力データでスクランブルするために使用され得る、スクランブリング関数を図示する。上記に説明されるように、ヘッダデータおよび入力データが、別個に難読化された後、2つのデータセットは、連結およびスクランブルされるべきである。図36は、ヘッダ部分および入力データ部分と連結されたデータセットを図示する。ヘッダデータサイズは、16バイトであるように示される。当然ながら、他の実施形態では、ヘッダデータサイズは、任意の長さであってもよい。
異なる用途は、入力データ内のヘッダデータの異なるレベルの難読化を要求し得る。例えば、デコーティングの速度は、スクランブリングがより大きいチャンク(例えば、バイトレベル)で行われ、ヘッダが伝送の開始に比較的に近接してスクランブルされることを確実にすることによって、優先されてもよい。別の実施例として、スクランブリングは、ハードウェア(例えば、IC)内で、またはパラレルプロセッサを使用して行われてもよい。難読化が、より重要である場合、スクランブリングは、より小さい断片(例えば、ビットレベル)で行われることができ、ヘッダデータは、データ伝送のより大きい部分にわたって拡散されてもよい。
図36に示されるように、連結されたデータは、ヘッダデータ(16バイト)を伴う第1の部分と、入力データ(xバイト)を伴う第2の部分とを含む。データは、ヘッダデータを最初に、入力データを次に設置することによって連結される。送信機は、次いで、連結されたデータのためにスクランブリング関数を開始してもよい。スクランブリングプロセスは、開始の代わりに、ヘッダデータがある、データの終了時に開始してもよい。スクランブリングプロセスは、ビットをデータセットの後尾からデータセットの先頭にスクランブルし続けてもよい。代替として、図29に示されるように、別の例示的スクランブリング関数が、図示され、テーブルに基づくスワップを示す。
ヘッダデータを最後にスクランブルすることは、有利であるが、ヘッダデータは、依然として、入力データでスクランブルされ、難読化を増加させるべきである。例えば、図37に示されるように、最初の100または200バイトの連結されたデータが、ともにスクランブルされ、最初の200バイトの入力データでスクランブルされた16バイトヘッダデータをもたらしてもよい。これは、さらに数百を上回るバイトとなり得るデータセット全体を横断してヘッダデータをスクランブルすることの代替である。
いくつかの実施形態では、連結されたデータは、異なるチャンクに分割されてもよい。例えば、図36の最後の実施例では、連結されたデータは、ヘッダデータおよび入力データを含む、100バイトの第1のチャンクと、入力データの3つのチャンクとに分割される。これは、スクランブリング関数が、概して、データセットを通して連続して作用する、第1の実施例のスクランブリングと対比される。各チャンク内のデータは、スクランブリング関数によってスクランブルされてもよい。ヘッダデータは、入力データの一部でスクランブルされ、伝送されるためのデータデータパケットの難読化を増加させる。
図37は、例えば、データ変換モジュール102または152および/または本開示に説明される種々の他の例証的システムを実装するために使用され得る、コンピュータシステム900の描写を図示する。コンピューティングシステム900は、情報を通信するためのバス905または他の通信コンポーネントと、情報を処理するためにバス905に結合されるプロセッサ910とを含む。コンピューティングシステム900はまた、情報およびプロセッサ910によって実行されるための命令を記憶するためにバス905に結合される、ランダムアクセスメモリ(RAM)または他の動的記憶デバイス等のメインメモリ915を含む。メインメモリ915はまた、プロセッサ910による命令の実行の間、位置情報、一時的変数、または他の中間情報を記憶するために使用されることができる。コンピューティングシステム900はさらに、プロセッサ910のための静的情報および命令を記憶するためにバス905に結合される、読取専用メモリ(ROM)920または他の静的記憶デバイスを含んでもよい。ソリッドステートデバイス、磁気ディスク、または光ディスク等の記憶デバイス925が、情報および命令を永続的に記憶するためにバス905に結合される。
コンピューティングシステム900は、情報をユーザに表示するために、バス905を介して、液晶ディスプレイまたはアクティブマトリクスディスプレイ等のディスプレイ935に結合されてもよい。英数字および他のキーを含む、キーボード等の入力デバイス930が、情報およびコマンド選択をプロセッサ910に通信するために、バス905に結合されてもよい。別の実装では、入力デバイス930は、タッチスクリーンディスプレイ935を有する。入力デバイス930は、方向情報およびコマンド選択をプロセッサ910に通信するために、かつディスプレイ935上のカーソル移動を制御するために、マウス、トラックボール、またはカーソル方向キー等のカーソル制御を含むことができる。
いくつかの実装では、コンピューティングシステム900は、ネットワーキングアダプタ等の通信アダプタ940を含んでもよい。通信アダプタ940は、バス905に結合されてもよく、コンピューティングもしくは通信ネットワーク945および/または他のコンピューティングシステムとの通信を有効にするように構成されてもよい。種々の例証的実装では、任意のタイプのネットワーキング構成は、有線(例えば、Ethernet(登録商標)を介して)、無線(例えば、Wi−Fi(登録商標)、Bluetooth(登録商標)等を介して)、事前に構成されたad−hoc、LAN、WAN等の通信アダプタ940を使用して達成されてもよい。
種々の実装によると、本明細書に説明される例証的実装をもたらすプロセスは、プロセッサ910がメインメモリ915内に含有される命令の配列を実行することに応答して、コンピューティングシステム900によって達成されることができる。そのような命令は、記憶デバイス925等の別のコンピュータ可読媒体から、メインメモリ915の中に読み取られることができる。メインメモリ915内に含有される命令の配列の実行は、コンピューティングシステム900に、本明細書に説明される例証的プロセスを実施させる。マルチ処理配列内の1つまたはそれを上回るプロセッサもまた、メインメモリ915内に含有される命令を実行するために採用されてもよい。代替実装では、有線回路が、ソフトウェア命令の代わりに、またはそれと組み合わせて使用され、例証的実装を実装してもよい。したがって、実装は、ハードウェア回路およびソフトウェアの任意の具体的組み合わせに限定されない。
本明細書のシステムおよび方法は、AES等の他の暗号化技法より有利である。例えば、そのような技法は、プロトコルが全てのデータパッカが受信され、受信機において順序通り受信されることを確実にすることに配慮する、TCP/IPまたは他の類似プロトコルに依拠し得る。難読化の強度は、部分的に、ブロックチェーニングの使用に依拠し得、これは、伝送の順序を重要にする。しかしながら、本明細書におけるシステムおよび方法は、フレームが順序通り受信されることに依存せず、各フレームは、その独自の難読化方略でスタンドアロンとなり得る。これは、本明細書における難読化方法が、ビデオまたはオーディオ等のデータをストリーミングするためのUDPまたは他のプロトコル等のプロトコルのために使用されることを可能にする。
概して、本開示に説明されるように、種々のテーブルが、データ難読化および難読化解除プロセスの間、使用されてもよい。しかしながら、種々のタイプのテーブルは、難読化および難読化解除プロセスの一部として使用されてもよく、複数のタイプの複数のテーブルが、同一プロセスにおいて使用されてもよいことを理解されたい。例えば、第1の構造を伴う第1のタイプのテーブルは、ビットスクランブリングプロセスの間、使用されてもよく、第2の構造を伴う第2のタイプのテーブルは、ビットマッピングプロセスの間、使用されてもよい。本明細書におけるシステムおよび方法、種々のステップを横断して、任意の数の異なるテーブルタイプおよび構造の使用を生じさせるように適合可能であり得る。
データ難読化プロセスにおいて使用するためのテーブルは、任意のN個の要素のセットを含んでもよく、限定ではないが、これらの要素のグループ化を実装する物理的または仮想上の任意のものを含む。形式的または非形式的プロトコルは、要求されない。要素は、単一ビット、任意のビットの標準的グループ化(バイト、ワード、ダブルワード、またはクワッドワード等)、任意の固定もしくは浮動小数点バイナリ表現、または任意のビットの非標準的グループ化であってもよい。要素は、バイナリ、ターシャリ、クオタナリ、クワイナリ等のベース表現で表されてもよい。
テーブルは、ハードウェアまたはソフトウェア内で任意のフォーマットで表される、もしくは実装されてもよい。例えば、テーブルは、RAMまたはROM内に実装されてもよい。メモリの基本場所は、アドレスまたは行へのアクセスを与えてもよく、オフセットは、データまたは列へのアクセスを与えてもよい。別の実施例として、テーブルは、先入れ先出し(FIFO)機構として実装されてもよい。全てのテーブル要素は、FIFO内に記憶され、適切な要素の数をプッシュまたはポップすることによってアクセスされる。別の実施例として、テーブルは、シフトレジスタとして表されてもよい。要素インデックスは、シフトレジスタ内でエンコードされ、多くのシフトレジスタ間に並行して分割されてもよい。別の実施例として、テーブルは、値のアレイもしくはベクトル、または第1の要素を保持する第1のインデックス、第2の要素を保持する第2のインデックス等と組み合わせられる、複数のベクトルもしくはアレイとして表されてもよい。別の実施例として、テーブルは、バイナリ、テキスト、またはXMLドキュメント等のフォーマットされたドキュメントとして実装されてもよい。他の実施例として、テーブルは、格子構造、状態マシン、変調器/復調器、デジタル信号プロセッサ(DSP)等内に実装されてもよい。
さらなる実施例として、テーブルは、任意のタイプのソフトウェア実装で実装されてもよい。一実施例として、テーブルは、概して、図に示される、ルックアップテーブルとして実装されてもよく、あるインデックスにおけるテーブルへのアクセスは、そのインデックスにおける要素へのアクセスを与える。別の実施例として、テーブルは、バイナリ検索ツリー(または別のデータ構造)として実装されてもよい。入力ストリングは、ツリーの開始ノードからのデータのパスを判定し、テーブル演算の出力は、リーフノードに到達した後に与えられる。他の実施例として、テーブルは、仮想メモリマップ、ビットストリーム、スタック、アレイまたはベクトル、マトリクス、XMLドキュメント、テキストドキュメント、バイナリファイル等として、ソフトウェア内で実装されてもよい。
前の図および説明を参照すると、データ難読化のためのシステムおよび方法が、デバイス間の伝送のためにデータを難読化するために説明される。ここで後続特徴を参照すると、複数のデバイス間のデータ通信を管理するためのシステムおよび方法が、説明される。より具体的には、キー配布プロセスが、複数のデバイスが難読化された通信を有することを可能にする、プロトコルを複数のデバイスに提供するために説明される。そのようなシステムおよび方法は、複数のデバイスが、上記の図1−36に説明されるように、難読化方法を使用して通信することを可能にし得る。
マイクロコントローラは、概して、ローカルで、またはインターネットを通して、情報を交換し、インターネットを経由してアクセス可能となるように有効にされてもよい。複数のマイクロコントローラが、マイクロコントローラおよび/または他の電子機器が内蔵されるエリア内の種々のデバイスのネットワークである、IoTを形成するために使用されてもよい(例えば、建物、建物内のエリア、車両内等のいくつかのデバイス)。マイクロコントローラが関連付けられるデバイスは、例えば、センサ、ノード、または任意の他のタイプの機器であってもよい。IoTは、種々のデバイスが、データを受信および伝送することを有効にし得る。IoTは、典型的には、種々のデバイスが低電力構成においてデータを共有することを有効にする、ローカル低電力無線接続を要求する。IoTは、概して、種々のデバイスの接続を促進するために、ゲートウェイまたはクライアントを要求し得る。
ここで図38を参照すると、環境1000内の複数のデバイス間の通信プロトコルを確立するためのシステムが、示される。複数のデバイス1002が、環境1000内に示される。各デバイス1002は、他のデバイスとの無線通信のために構成される、任意のタイプのデバイスであてもよい。各デバイス1002は、概して、電力供給源1010を含んでもよい。一実施形態では、デバイスは、バッテリ給電式であって、低電力構成で動作するように構成されてもよい。他の実施形態では、デバイスは、1つまたはそれを上回る他の電力供給源を含んでもよい。本明細書に説明されるシステムおよび方法は、各デバイス1002の低電力ステータスのために適合され、デバイスが、他の低電力デバイスとのセキュア伝送を設定することを可能にする。なお、当業者が認識するであろうように、同一システムおよび方法はまた、低電力デバイスではないデバイスとも作用するであろう。各デバイス1002は、他のデバイスとの伝送を促進するためのマイクロコントローラを含む。本開示は、デバイス1002を説明するために、用語「デバイス」および「コントローラ」を同義的に使用する。
環境1000はさらに、複数のデバイス1002間およびそれらのデバイスとサーバ1006との間のデータ通信を管理するように構成される、ゲートウェイ1004を含む。ゲートウェイ1004は、例えば、データを受信し、複数のマイクロコントローラに伝送することができる、Raspberry PiTMまたは他の類似デバイス等のコンピューティングデバイスであってもよい。ゲートウェイ1004は、概して、種々のデバイス1002のための伝送プロトコルを確立してもよい。ゲートウェイ1004は、任意のRFまたは有線通信方法を介して(例えば、Bluetooth(登録商標)低エネルギー(BLE)、Zigbee(登録商標)、IEEE 802.15.4、または任意の他の通信プロトコルを介して)、デバイス1002と通信してもよい。
環境1000はさらに、ゲートウェイ1004が通信し得る、サーバ1006を含む。サーバ1006は、例えば、上記に説明されるようなポリシサーバ702に類似するポリシサーバであって、ゲートウェイ1004と種々のデバイス1002との間の相互作用を管理するように構成されてもよい。サーバ1006は、環境1000内の種々のデバイスのための許可を判定してもよく(例えば、デバイスが、データを相互に共有することが承認されるかどうか)、ゲートウェイ1004による使用のためのテーブル、キー、または他の情報を伝送し、難読化された伝送を環境1000内に設定してもよく、同等物を行ってもよい。
図38は、1つの特定の実施形態を示すが、他の構成も可能性として考えられることを理解されたい。例えば、サーバ1006において実施される1つまたはそれを上回るアクティビティは、代わりに、ゲートウェイ1004において実施されてもよい。別の実施例として、ゲートウェイ1004は、任意のタイプのクライアントデバイスであってもよい。ゲートウェイ1004は、クライアントデバイスまたはサーバデバイスであってもよい。
ここで図39を参照すると、2つのデバイス間の通信プロトコルを実装するためのプロセス1100のフローチャートが、示される。一実施形態では、ゲートウェイ1004は、キーをそれ自体とデバイス1002との間でセキュアに交換することによって、通信プロトコルを2つのデバイス間に実装する。
プロセス1100は、概して、秘密交換1102と、キー配布テーブル(KDT)生成1104と、データテーブル(DT)生成1106と、データテーブル交換1108と、ベクトル同期1110とを含む。秘密交換1102は、相互に通信することを所望するデバイスの2つのコントローラ間の「秘密」の交換であってもよい。「秘密」は、単に、コントローラとゲートウェイとの間で共有される番号であってもよい。秘密は、以下に説明されるように、テーブル配布キーを作成するために使用されるであろう、PRNG内の場所を表してもよい。言い換えると、秘密は、事前に計算されたPRNG場所であり得る。一実施形態では、秘密は、28バイトであって、12バイトは、擬似乱数生成(例えば、TinyMT)のためのパラメータ(例えば、乱数を生成するために使用される多項式の指数)を定義し、16バイトは、PRNGシーケンス内のジャンプベクトルを識別する。他の実施形態では、秘密は、異なるサイズであってもよく、合理的保護を生成するための任意のタイプのパラメータを定義してもよい。「秘密」は、TDKを生成するために、両者(コントローラおよびゲートウェイ)によって使用される。両者が、秘密を把握するため、両者は、同一PRNGアルゴリズムを使用して、PRNG値を計算することができる。
初期「秘密」は、製造時にコントローラ内に記録されることができる、またはプロビジョニング時に生成されてもよい。「秘密」は、製造番号またはユニバーサル一意識別子(UUID)であり得る。初期「秘密」の交換は、複数の方法で行われることができる。初期秘密を交換するための1つの技法は、手動である、すなわち、「秘密」は、人間等のオペレータを使用して、デバイス間で交換される。本技法では、初期「秘密」は、電子的に伝送されず、したがって、初期「秘密」が電子的に傍受される機会は、低減される。本技法では、コントローラは、「秘密」を表示可能なユーザインターフェース(UI)を含有してもよく、交換は、オペレータが、「秘密」をコントローラUIから読み取り、ゲートウェイUIを使用して、「秘密」を打ち込むことから成ってもよい。UIが、コントローラ上で利用不可能である場合、「秘密」は、デバイスまたはデバイスのためのパッケージングに取り付けられるラベル上に印刷されてもよい。それらのケースでは、オペレータは、「秘密」をラベルから読み取り、それをゲートウェイUIの中に打ち込むことができる。
オペレータが「秘密」をゲートウェイデバイスの中に打ち込むためのUIが、ゲートウェイに存在しない場合、「秘密」は、電子的に交換されなければならない。コントローラが、十分な算出リソースを有する場合、「秘密」は、種々のアルゴリズムを使用して、セキュアに共有されることができる。一実施形態では、Diffie−Hellmanアルゴリズムが、秘密を共有するために使用される。当業者が把握するであろうように、Diffie−Hellmanアルゴリズムは、2人の当事者が、相互に以前の知識を有しておらず、非セキュアチャネルを経由して共有秘密キーをともに確立することを可能にする、キー交換方法である。しかしながら、Diffie−Hellmanアルゴリズムは、算出上高価であって、したがって、低電力を用いるIoTデバイスでは、控えめに、したがって、初期秘密キーの交換のためだけに使用されるべきである。
別の実施形態では、秘密をセキュアに共有するために使用され得る、別のアルゴリズムは、非対称暗号化である。非対称暗号化は、パブリックおよびプライベートキーを使用し、データを暗号化および解読する。各クライアントデバイスまたはコントローラは、ゲートウェイのパブリックキーを有する。使用され得る、別のアルゴリズムは、パブリックキーインフラストラクチャであって、ゲートウェイは、証明書を各コントローラに送信し、コントローラは、認証局を使用して、証明書がゲートウェイに属することを検証する。そのような実施形態では、新しい秘密は、全てのセッションにおいて交換される。
別の実施形態では、プロセス集約的アルゴリズムに対して十分な算出電力を伴っていない、IoTデバイスは、近接プロビジョニングを使用して(すなわち、デバイスがゲートウェイに十分に近接するときのみ)、「秘密」を交換してもよい。近接プロビジョニングに関して、コントローラは、非常に弱い信号(例えば、−20デシベルミリワット)を伝送してもよく、ゲートウェイは、信号の受信された信号強度インジケータ(RSSI)を使用して、ゲートウェイとデバイスとの間の距離を算出してもよい(本距離は、デバイスがゲートウェイに十分に近接するかどうかを判定するために使用される)。別の実施例として、秘密は、ゲートウェイによって、その製造番号がゲートウェイに既知であるデバイスにのみ交換されてもよい。さらに別の実施例として、秘密は、秘密が公に交換され、ゲートウェイがデバイスが交換後に正しく動作することを検証する、信頼および検証方法を使用して、交換されてもよい。
秘密が交換された後、デバイスおよびゲートウェイは、秘密を記憶装置内に保存してもよく、保存された秘密は、一実施形態では、デバイスの電源が遮断された後、デバイスとセッションを再確立するために使用されてもよい。別の実施形態では、秘密は、いったんデバイスがゲートウェイとペアリングされると、任意の他のゲートウェイとペアリングされることができないように、単回使用のためだけにプロビジョニングされてもよい。種々の実施形態では、秘密は、記憶され、任意の回数だけ再使用されてもよい、またはゲートウェイ、サーバ、ユーザからの、もしくは製造時にプロビジョニングされた1つもしくはそれを上回るネットワーク選好に応じて、限定回数だけ使用されてもよい。PRNG内の場所を識別する16バイトの秘密は、初期PRNGデータベクトルとして定義される。
プロセス1100は、キー配布テーブル生成1104を含む。キー配布テーブルは、概して、以下に説明されるように、データテーブルを難読化および難読化解除において使用するためのデバイスに送信するために使用される。キー配布テーブルを生成するために、秘密の一部は、PRNGのためのジャンプベクトルとして使用され、結果として生じる擬似乱数シーケンスは、テーブルを生成するために使用される。任意のタイプのPRNGが、使用されてもよい(例えば、TinyMT)。キー配布テーブル生成は、ゲートウェイおよびコントローラの両方において行われる。各エンティティは、同一秘密を有するため、PRNGを介して、同一キー配布テーブルを生成するであろう。
図40を参照すると、キー配布テーブル生成1104が、より詳細に示される。キー配布テーブル生成1104は、テーブルを初期化すること(ブロック1120)を含み、これは、テーブル長およびテーブル内のエントリ毎の値を設定することを含んでもよい。例えば、ブロック1120は、テーブル内のI番目のエントリの値をIに設定することを含んでもよい。
テーブルの第1のインデックス(index=0)から開始し、スワップ関数(ブロック1124)が、テーブル内の値をスワップするために使用される。例えば、所与のインデックス値に関して、現在のインデックスとテーブル長との間の次の擬似乱数(S)が、見出される。Sは、次いで、インデックスI(KDT[I])における値とスワップされるべき値のためのインデックスとして使用される。スワップ後、インデックスは、インクリメントされ(ブロック1122)、インデックスがテーブルの長さ未満である限り(ブロック1126においてチェックされる)、スワップ関数が、再び適用される(ブロック1124)。KDT生成は、同一PRNGおよび秘密を使用して行われるため、各デバイスは、同一テーブルを生成するであろう。
再び、図39およびプロセス1100を参照すると、プロセスは、データテーブル生成1106を含む。初期データテーブル(DT0)は、ゲートウェイにおいてのみ生成される。データテーブルを生成するためのアルゴリズムは、キー配布テーブルを生成するためのアルゴリズム(図40に示される)に類似し得るが、擬似乱数の代わりに、真乱数を使用して、スワップすべきインデックスを判定する。真乱数は、システムのエントロピに基づき得る。例えば、当業者が認識するであろうように、IOX(MAC OS)では、0と255との間の真乱数が、コード:File=*rnd_file=fopen(“/dev/random”,“r”);rand=fgetc(rnd_file)を使用して生成され得る。別の実施例を用いると、当業者が把握するであろうように、Linux(登録商標)では、ランダム値が、カーネルエントロピプールから取得され得る。データテーブルDT0は、ゲートウェイにおいてのみ生成されるため、真乱数が、使用されることができる。ゲートウェイは、以下により詳細に説明されるように、コントローラおよびゲートウェイが同期しなくなる場合に使用するために、DT0をRAM内に記憶してもよい。ゲートウェイは、コントローラ毎に、別個のデータテーブルを維持する。
プロセス1100はさらに、データテーブル交換1108を含む。データテーブル交換プロセスは、概して、KDT(以下に説明される)を使用して、データテーブルをシャッフルアルゴリズムでエンコードし、エンコードされたテーブルをコントローラに伝送することを含む。いったんコントローラがDT0を受信すると、以下により詳細に説明されるように、コントローラおよびゲートウェイが同期しなくなる場合に備えて、DT0のコピーもまたRAM内に維持してもよい。プロセス1100はさらに、ベクトル同期1110を含む。任意のデバイスが、そのパートナーと、秘密または秘密の一部(すなわち、単に、PRNGシーケンス内のジャンプベクトルを識別する16バイト、または多項式指数値およびジャンプベクトルの両方を含む、完全28バイト)を交換してもよい。1つを上回るPRNGシーケンスが、アルゴリズムによって使用される場合、1つを上回るベクトルおよび多項式は、デバイス間で交換されてもよい。
随時、ゲートウェイは、新しい秘密を生成し、コントローラに送信してもよい。このように、コントローラとゲートウェイの将来的再初期化は、異なる初期秘密、したがって、異なるKDTの交換をもたらすであろう。古い秘密は、ゲートウェイおよびコントローラの両方において、新しい秘密で上書きされるであろう。本プロセスは、攻撃者がデバイス間の通信についての付加的情報を判定することを可能にするであろう、コントローラおよびゲートウェイの反復的同期を防止することによって、全体的システムのセキュリティを増加させる。別の実施形態では、ゲートウェイは、特定の「秘密」が使用されることができる閾値回数を含んでもよい。さらに別の実施形態では、ゲートウェイは、複数の同期を連続して試みることが著しく困難になるように、同一「秘密」値の各後続使用間の時間量を増加させてもよい。
再び、図38を参照すると、環境1000は、随意に、デバイス1002、ゲートウェイ1004、およびサーバ1006のいずれかと通信可能なキー配布センタ1008を含んでもよい。代替実施形態では、キー配布センタ1008は、図39−40に説明されるように、キープロビジョニング特徴を提供してもよい。そのような場合では、キー配布センタ1008は、デバイス1002またはコントローラ毎に、識別情報を有してもよい。
コントローラ、ゲートウェイ、またはサーバが、最初にオンになると、セッションをキー配布センタ1008と確立してもよく、セッションは、コントローラ、ゲートウェイ、またはサーバのためのデータテーブルを作成する。したがって、セッション毎に、キー配布テーブルが、存在する(以下では、それぞれ、コントローラ、ゲートウェイ、およびサーバに関して、TC、TG、およびTSとして標識される)。いくつかの実施形態では、デバイス1002は、直接、キー配布センタ1008と通信不可能であり得る。それらのケースでは、デバイス1002からの通信は、ゲートウェイ1004によってキー配布センタ1008に中継されてもよい。
デバイス1002のコントローラが、ゲートウェイ1004とトークすることを所望する場合、データテーブルをキー配布センタ1008から要求してもよい。デバイス1002が、直接、キー配布センタ1008と通信することができないとき等、いくつかの実施形態では、ゲートウェイ1004およびデバイス1002が、相互に通信するためにまだプロビジョニングされていない場合でも、ゲートウェイ1004は、デバイス1002からのキー配布センタ1008に中継されるための要求を許可してもよい。一実施形態では、キー配布センタ1008は、新しいデータテーブル(DTCG)の2つのコピーをゲートウェイに送信し、テーブルの一方は、ゲートウェイのためのものであって、一方は、コントローラのためのものである。ゲートウェイのためのDTCGは、TGを使用してエンコードされ、コントローラのためのDTCGは、TCを使用してエンコードされる。ゲートウェイは、次いで、コントローラのTDK(TC)でエンコードされたDTCGをコントローラに中継する。ゲートウェイおよびコントローラはそれぞれ、その個別のキー配布テーブルを有し、したがって、DTCGのその独自のコピーをデコードすることができる。他の実施形態では、キー配布センタ1008は、DTCGを、直接、コントローラに送信し、再び、TCでエンコードされてもよい。
同様に、ゲートウェイが、コントローラとトークすることを所望する(またはコントローラがゲートウェイとトークすることを所望していることのメッセージをコントローラから受信する)と、ゲートウェイは、要求をキー配布テーブル1008に送信し、セッションを確立する。いったんセッションキー(TC)が、コントローラに送信されると、ゲートウェイは、ゲートウェイ−コントローラ通信において使用するためのデータテーブルのために、要求をキー配布テーブル1008に送信することができる。ゲートウェイは、次いで、上記に説明されるように、新しいデータテーブルの2つのコピーを受信し、エンコードされたデータテーブルをコントローラに中継する。
上記に説明されるように、いったんデータテーブルが、生成されると(ゲートウェイまたはキー配布センタのいずれかによって)、データテーブルが伝送される前に、シャッフルアルゴリズムが、データテーブルに適用され、テーブル内のデータを難読化してもよい。ここで図41を参照すると、データテーブル内のデータをエンコードする1つの方法が、説明される。図41に示されるプロセス1200は、コントローラへの最初のペイロード伝送のためと、次いで、後に、送信機および受信機が同期するために必要である場合に使用され得る、スタンドアロンエンコードアルゴリズムであってもよい。スタンドアロンエンコードアルゴリズムは、状態独立である(擬似ランダムシーケンス内の前の位置を把握する必要はない)。スタンドアロンエンコードアルゴリズムは、PRNGデータベクトル(例えば、秘密)を初期化または再初期化する必要があるとき、ゲートウェイによって開始される。本開示では、「秘密」および「PRNGデータベクトル」は、同義的に使用され得る。
プロセス1200は、真乱数を生成すること(ブロック1202)と、伝送されるためのフレームを設定すること(ブロック1204)とを含む。また、図42を参照すると、例示的フレームが、フレームの先頭に設定されたRND値(ブロック1202において判定された)と、フレームの後尾に設定されたCRC値(ブロック1206において判定された)とともに示される。プロセス1200はさらに、巡回冗長性コード(CRC)を計算すること(ブロック1206)を含む。CRCは、好ましくは、ペイロードおよび乱数に関してともに計算される。
プロセス1200はさらに、フレームを乱数のアレイとXORすること(ブロック1208)を含む。秘密は、RND値として設定され、PRNGは、秘密でシードされ、ペイロードおよびCRCと長さが等しい乱数のアレイを作成する。本生成されたアレイは、フレームをXORするために使用される。XORは、オリジナルペイロードおよびCRCを難読化し、データテーブルのデコードを試みるプレーンテキスト攻撃を防止する。
プロセス1200はさらに、シャッフルアルゴリズム(ブロック1210)を含む。データテーブルは、フレーム内のビットをシャッフルするために使用される。シャッフルは、ビットマスク、宛先バッファ、ビットインデックス、バイトオフセット、およびビットオフセットのアレイを使用する。データテーブルが、ペイロードである場合、TDKが、フレーム内のビットをシャッフルするために使用される。
ここで図43を参照すると、シャッフルアルゴリズムが、より詳細に示される。アルゴリズムは、宛先バッファ(例えば、宛先バッファを全てゼロに初期化する)を初期化すること(ブロック1220)を含む。フレーム内のビットインデックス毎に、以下が、実施されてもよい。
オフセットが、計算される(ブロック1222)。例えば、byte offset=bit index/8が、計算され、bit offset=bit index%8が、計算される。フレームビットが、試験され(ブロック1222)、bit mask[bit offset] AND frame[byte offset]の両方が真であるかどうかをチェックすることによって、フレームバイト内のビットが設定されるかどうかを判定する。両値が、真である場合、宛先ビットが、データテーブル(すなわち、destination bit index=DT[bit index]を使用して計算される(ブロック1226)。宛先オフセットが、計算される(ブロック1228)。例えば、destination byte offset=destination bit index/8およびdestination bit offset=destination bit index%8。宛先ビットが、設定される(ブロック1230)。例えば、宛先ビット(DB)は、DB[destination byte offset]と等しく設定される。別の実施例として、DB=mask[destination byte offset]。ブロック1222−1230は、フレーム内のビットインデックス毎に繰り返される(ブロック1232)。ステップ1208の一部として作成されたPRNGデータベクトルは、エンコード/デコードシーケンシャル伝送における後の使用のために、ゲートウェイのメモリ内に保存される。
ここで図44を参照すると、デコードスタンドアロンアルゴリズムが、コントローラがエンコードされたデータテーブルをゲートウェイから受信することによって実装され得るように示される(プロセス1240)。プロセス1240は、エンコードされたフレーム内のフレームビットをシャッフル解除する、シャッフル関数(ブロック1242)を含む。プロセス1240はさらに、PRNGデータベクトルまたは秘密として使用するためのフレームの開始時に位置する真乱数を読み出すこと(ブロック1244)を含む。PRNGは、秘密でシードされ、PRNGからの数字は、フレーム(例えば、ペイロードおよびCRC)をXORするために使用される(ブロック1246)。これは、オリジナルペイロード(例えば、オリジナルデータテーブル)を露見させる。CRCは、除去され(ブロック1248)、コントローラは、ペイロードおよび乱数のためにCRCを計算し、それを除去されたCRCと比較し、コントローラとゲートウェイとの間の同期を確実にする。CRC検査が失敗する場合、受信機は、同期が喪失されたと結論付ける。
同期が、コントローラとゲートウェイとの間で喪失される場合、コントローラは、オリジナルデータテーブル(DT0)を使用して、エンコードされた同期コマンドをゲートウェイに送信してもよい。ゲートウェイは、最初に、現在のデータテーブルを使用して、コマンドのデコードを試みるであろう。メッセージをデコードするその試みが、失敗する場合、ゲートウェイは、次いで、オリジナルデータテーブル(DT0)を使用して、メッセージのデコードを試みることができる。ゲートウェイが、DT0を使用してメッセージのデコードに成功する場合、コントローラが同期を喪失した(例えば、古いデータテーブルを使用していた)と結論付け得る。コントローラが、もはや現在のデータテーブルまたはDT0を有していない(例えば、電力を喪失した)場合、コントローラは、上記に説明されるように、秘密を使用して、TDKを生成し、ゲートウェイに、再同期するためにTDKでエンコードされた要求を送信することができる。ゲートウェイは、最初に、現在のデータテーブルを使用して、メッセージのデコードを試み、これは、CRC検査に失敗するであろう。ゲートウェイは、次いで、DT0を使用して、メッセージのデコードを試み、これもまた、CRC検査に失敗するであろう。最後に、ゲートウェイは、TDKを生成するために記憶された秘密値を使用して、メッセージのデコードを試みるであろう。TDKを用いてデコードの成功は、ゲートウェイに、コントローラが電力を喪失した(または別様にオリジナルデータテーブルを喪失した)ことを示す。ゲートウェイは、次いで、新しいDT0を生成し、TDKでエンコードされ、かつ図41において上記に説明されるように、スタンドアロンメッセージとしてエンコードされたそれをコントローラに送信することができる。
コントローラとゲートウェイとの間の喪失された同期の別の実施例として、ゲートウェイが、コントローラと同期していない(例えば、コントローラが、メッセージを送信したが、圏外であって、したがって、メッセージが、ゲートウェイによって受信されないが、コントローラは、次のテーブルにすでに切り替えている)ことを認識し得る。ゲートウェイは、エンコードスタンドアロンアルゴリズムを使用してTDKでエンコードされた、新しいPRNGデータベクトル(真RNGをシードとして使用してPRNGから生成される)をコントローラに送信することができる。コントローラは、現在のデータテーブルを用いて、メッセージのデコードを試みるであろう(CRC検査に失敗するであろう)。コントローラは、次いで、RAM内に記憶されるDT0を使用して、メッセージのデコードを試みるであろう(同様に、CRC検査に失敗するであろう)。コントローラは、次いで、記憶していた秘密を使用して、TDKを生成することができ、TDKを使用して、メッセージのデコードを試みることができる(成功するであろう)。ゲートウェイはまた、TDKを秘密から生成し、TDKを使用して、データテーブルを生成する。
コントローラとゲートウェイとの間の喪失された同期の別の実施例として、コントローラは、電力を喪失し、もはやTDKを有していない場合がある。コントローラは、したがって、ゲートウェイによって送信される新しい秘密をデコードすることが不可能である。コントローラは、次いで、記憶された秘密を使用して、TDKを生成し、ゲートウェイに、再同期のための要求を送信してもよく、要求は、TDKを使用してエンコードされる。ゲートウェイは、現在のデータテーブル(失敗)、DT0(失敗)、次いで、TDK(成功)を使用して、メッセージのデコードを試みる。ゲートウェイは、エンコードスタンドアロンアルゴリズムを使用して、新しいRNGをコントローラに送信する(新しい秘密またはPRNGデータベクトルを見出すためにPRNGと併用される)。ゲートウェイは、次いで、TDKを使用して、データテーブルを生成し、それをコントローラに送信する。
いくつかの実施形態では、ゲートウェイが、閾値時間量にわたって、コントローラとの通信に失敗する場合、全てのテーブルを破棄し、後続通信に応じて、コントローラと再初期化してもよい。いくつかの実施形態では、新しいデータテーブルが送信される度に、新しい秘密が、前述のように、同様に送信されてもよい。
概して、図41−44を参照すると、データをエンコードおよびデコードするためのエンコードおよびデコードスタンドアロンアルゴリズムが、説明される。別の実施形態では、エンコードおよびデコードするシーケンシャルアルゴリズムが、伝送されるためのデータをエンコードおよびデコードするために使用されてもよい。ここで図45を参照すると、例示的エンコードシーケンシャルアルゴリズム方法が、示される。シーケンシャルアルゴリズムでは、コントローラおよびゲートウェイの両方が、PRNGおよびテーブルの状態を保つ。パケット毎に、PRNGの位置は、PRNGデータベクトルに基づいて変化する(最初に、秘密、続いて、PRNGが前のパケット内で中断した場所)。テーブルは、ペイロードおよびPRNGシーケンスに基づいて変更される(すなわち、テーブルへのデータ駆動変更)。これは、「テーブルブロックチェーニング」と称され得る。
シーケンシャルアルゴリズムの間に変更されるテーブルの部分のサイズは、構成可能であって、「変更サイズ」と称される。一実施形態では、変更サイズは、素数であってもよく、および/またはデータテーブルのサイズは、変更サイズによって均一に分割可能であるべきではない。変更サイズとサイズが等しいテーブル修正バッファ(TMB)が、シーケンシャルアルゴリズムの間、変更ベクトルを一時的に記憶するために使用されてもよい。
図45のプロセス1300を参照すると、フレームが、ペイロードとともに設定され(ブロック1302)、CRCが、ペイロードのために計算される(ブロック1304)。CRCは、フレームの最後に追加される(例えば、図42に示されるように)。上記に説明されるように、スタンドアロンアルゴリズムでは、PRNGからの値(秘密を使用して)は、フレームとXORするために使用される(ブロック1306)。
第1の変更サイズXOR値は、テーブル修正バッファにコピーされる(ブロック1308)。データテーブルは、フレームビットをシャッフルするために使用され(ブロック1310)、データテーブルは、次の伝送と併用するために修正される(ブロック1312)。ここで図46を参照すると、テーブル修正ブロック1312が、より詳細に説明される。データテーブルは、各フレーム難読化後に修正されてもよい。テーブル修正プロセスは、概して、取って代わられるための次の値のインデックスを見出すことと、値をテーブル修正バッファ内のそのインデックスのための値に取って代えることとを含んでもよい。
インデックスi=0から開始し、TMB[i]内に記憶された値を読み出すことによって、スワップインデックスSを特定する(ブロック1320)。次いで、データテーブル内において、インデックスiおよびインデックスS内に記憶された値をスワップする(ブロック1322)。本プロセスは、テーブル修正バッファ内のエントリ毎に繰り返される(ブロック1324)。
次回、データテーブルが修正されると、修正は、前の反復において修正された最後のエントリ後の次のエントリから開始し得る。インデックスが、データテーブルのサイズに到達すると、ラップアラウンドし、データテーブルの開始時から継続する。PRNGデータベクトルは、次回使用するために、処理されたばかりのフレームの長さだけ増加される。例えば、変更サイズが、7であると判定され、データテーブルのサイズが、12である場合、DT1は、値DT0[0]からDT0[6]を値DT0[S[0]]からDT0[S[6]]とスワップさせることによって、DT0に基づいて生成され、Sは、テーブル修正バッファである。次回、DT2から始まり、次いで、値DT1[7]からDT1[12]を値DT1[S[0]]からDT1[S[6]]とスワップさせることによって、DT1に基づいて生成され、Sは、テーブル修正バッファ内に記憶される新しい値を含有する。
別の実施形態では、修正されるべきデータテーブルの部分は、テーブルと各後続変更の重複部分の変更等、代替方法において判定されてもよい。さらに別の実施形態では、データテーブルは、閾値数のフレームが送信/受信された後にのみ変化してもよい。さらに別の実施形態では、データテーブルの1つおきのビットのみが、変化してもよい。さらに別の実施形態では、テーブルのある部分は、スキップされ、改変されなくてもよい。データテーブル修正はまた、0インデックスからの代わりに、素のオフセットから開始してもよい。当業者は、任意の数の代替修正または組み合わせもまた、データテーブルを修正するために実装されてもよいことを認識するであろう。同様に、当業者は、PRNGデータベクトルを修正するための任意の数の代替技法を認識するであろう。
単独では、XOR関数およびシャッフル関数はそれぞれ、データ難読化のための比較的に脆弱な方法であるが、しかしながら、組み合わせられると、難読化の強度は、その一部の和より増加される。テーブル更新は、PRNGおよびペイロードの関数である。テーブルは、XORを介して修正されたペイロードデータに基づいて修正される。XORとシャッフル関数との間でテーブル更新を行うことは、ハッカーが反復攻撃を通してデータを判定することができないため、テーブル修正をハッキングの試みから保護する。
一実施形態では、シャッフルステップ(ブロック1310)後、付加的XORが、異なるPRNGシーケンスを使用して行われてもよい。複数のPRNGデータベクトルが、異なるPRNGシーケンスを使用するために、交換および使用されてもよい。他の実施形態では、付加的XORは、適用されなくてもよい、または図45に示されるXORおよびシャッフル関数に加え、付加的変換が、適用されてもよい。
一実施形態では、前述のプロセスに説明されるように、PRNG値は、シャッフルテーブルとXORされ、次いで、XORされた値は、データとXORされ、次いで、結果として生じるXORされたデータは、シャッフルされる。PRNG値とシャッフルテーブルのXORは、PRNGを隠蔽し、PRNGをプレーンテキスト攻撃に対して防御する。図45を参照すると、ブロック1306は、PRNG値とシャッフルテーブルのXORと、本最初のXOR結果とフレームのXORとを含むであろう。これは、フレーム毎に実施される。別の実施形態では、これは、最初のフレームのために行われてもよいが、後続フレームに関して、テーブルとXORするためにPRNG値を使用する代わりに、前のフレームからのXORされたデータ(シャッフル前であるが、全ての他の難読化後)が、PRNG値の代わりに、シャッフルテーブルとXORされる。本実施形態は、処理効率を増加させる。図45を参照すると、ブロック1306は、PRNG値の代わりに、前のフレームからのXORされたデータと新しいフレームのXORを含むであろう。各そのような実施形態では、デコードプロセスは、データをデコードするためのミラーステップを含む。
コントローラは、エンコードされた伝送をゲートウェイから受信し、デコードシーケンシャルアルゴリズムを使用し、データをデコードすることができる。コントローラは、データテーブルを使用して、フレームビットをシャッフル解除してもよく、シャッフル解除されたテーブルは、テーブル修正バッファ内で使用されることができる。データテーブルは、次いで、テーブル修正バッファ内のテーブルを使用して、かつ図46に説明されるものと同一修正ステップを使用することによって、次の伝送と併用するために修正される。次いで、PRNGからの数字は、フレームをXORし、ペイロードおよびCRCを露見させるために使用される。最後に、コントローラは、ペイロードのためのCRCを計算し、それをフレームからのCRCに対して比較し、コントローラがゲートウェイと同期していることを検証することができる。CRCが、同一である場合、メッセージは、コントローラによって承認され、PRNGデータベクトルは、次の伝送のために使用するためのフレームの長さだけ増加される。
概して、図38−46を参照すると、通信が完全であることが保証されない、複数のデバイスとゲートウェイとの間の通信プロトコルを促進するためのプロトコルおよびアルゴリズムが、説明される。ここで後続段落を参照すると、ゲートウェイと遠隔サーバとの間のより高い帯域幅通信を促進するためのアルゴリズムが、説明される。より高い帯域幅通信が可能である場合、情報は、概して、TCP−IPを経由して渡されるように構成され得る。TCP−IPプロトコルを使用することによって、ペイロードの伝送は、TCP−IPプロトコルの中に組み込まれる再伝送技法に起因して、完全であることが保証される。それらのケースでは、アルゴリズムは、所与のデータパケット(例えば、データテーブル)に関して、そのテーブルサイズ(例えば、上記に説明されるように、データテーブルのサイズ)によって分割可能であるフレームサイズを受け取り得る。例えば、160のテーブルサイズに関して、アルゴリズムは、1,600バイトフレームを受け取り得る。別の実施例として、256のテーブルサイズに関して、アルゴリズムは、1,024バイトフレームを受け取り得る。
各フレームは、複数のブロックから作製され、ブロックは、データテーブルサイズと同一サイズを有する。アルゴリズムは、各ブロックをエンコードする。図38−46のアルゴリズムと比較して、これらのブロックをコーディングするためのアルゴリズムは、同様に作用し得るが、CRCを使用して、ブロックを検査する必要がない。
TCP−IPプロトコルを使用するときのエンコーディングアルゴリズムは、所与のフレームに関して、PRNGからの数字を使用して、フレームをXORし、したがって、オリジナルペイロードを隠蔽し、データテーブルのデコードを試みるプレーンテキスト攻撃を防止することを含む。XORされた値は、データテーブル更新において使用するためにTMBにコピーされる。データテーブルは、次いで、フレームビットをシャッフルするために使用され、データテーブルは、次いで、TMBを使用して修正される(上記に説明されるように)。シャッフル後、付加的XORが、異なるPRNGシーケンスを使用して行われてもよい。他の実施形態では、付加的XORステップは、存在しなくてもよい、または付加的変換が、基本的XORおよびシャッフルステップの周囲に追加されてもよい。
付随のデコーティングアルゴリズムでは、PRNGは、着信したエンコードされたバッファをXORするために使用された、PRNGデータベクトル(例えば、秘密)でシードされる。データテーブルは、次いで、フレーム内のビットをシャッフル解除するために使用される。データテーブルは、次いで、シャッフル解除されたバッファをTMBとして使用して修正される。PRNGからの数字は、次いで、フレームをXORし、オリジナルペイロードを露見させるために使用される。
いくつかの実施形態では、通信プロトコルが、複数のデバイス間に作成されてもよく、複数のデバイスは、1つまたはそれを上回る固定基地局と、1つまたはそれを上回るモバイルデバイスとを含む。例えば、本明細書に説明されるシステムおよび方法は、ユーザの複数のモバイルデバイスと、例えば、建物、走行経路、または同等物上の複数の固定基地局との間の通信を管理するように適合されてもよい。種々の交通機関管理のための固定基地局の実施例が、以下で使用され、他の実施形態では、固定基地局は、エリアを管理する、リソースを配分する、および同等物のための任意のタイプの固定基地局であってもよい。
固定基地局は、概して、情報を送信および受信するための限定量のスペクトルを有し得る。高速通信を提供するために、固定基地局は、固定基地局と同時に通信するユーザの数を限定する必要があり得る。したがって、固定基地局の全体的ネットワークが、多くのユーザを受け入れることを可能にするために、複数の固定基地局が、相互の比較的に近傍に設置されてもよく、モバイルデバイスは、サービスの中断を伴わずに、セッションを維持しながら、固定基地局間で切り替えてもよい。モバイルデバイスと固定基地局との間の認証は、モバイルデバイスが移動し、パッケージを複数の固定基地局から受信し、固定基地局が、パッケージを複数のモバイルデバイスから受信するにつれて生じるべきである。本明細書に説明されるシステムおよび方法は、両者(すなわち、固定基地局およびモバイルデバイス)に既知のキーを使用して、以下に説明されるように、パッケージを認証および難読化する。より具体的には、固定基地局とモバイルデバイスとの間のパッケージを認証およびデコードするために使用される、キーをモバイルデバイスに動的に提供するための予測アルゴリズムが、説明される。
図47を参照すると、複数の固定基地局1402と、複数のモバイルデバイス1404とを含む、環境1400が、示される。上記に説明されるように、複数の固定基地局1402は、相互の比較的に近傍に設置されてもよく、方略的理由から(例えば、エリア内により多くの無線ネットワークカバレッジを提供するため)、任意のパターンまたは順序で配列されてもよい。モバイルデバイス1404は、例えば、異なる固定基地局1402の範囲内外において、環境1400の周囲をトラバースする、携帯電話、可動物体に取り付けられるデバイス、または車両等であってもよい。図示されるように、モバイルデバイス1404は、移動するにつれて、固定基地局1402に対して任意の位置にあってもよく、複数の固定基地局の範囲内にあってもよい。本明細書に説明されるシステムおよび方法を使用して、モバイルデバイス1404は、第1の固定基地局に接続し、セキュア化された伝送を伴うセッションを確立し、次いで、第2の固定基地局に接続し、同一のセキュア化された伝送を伴う同一セッションを維持することが可能となり得る。
一実施形態では、モバイルデバイスまたは他のモバイルプラットフォームは、複数のユーザを有してもよい。例えば、上記に述べられた走行経路実施例を使用すると、モバイルプラットフォームは、一部の乗車者が、電話で会話しながら、または映画を鑑賞しながら、交通情報を複数の固定基地局から受信することができる、スマート自動車であってもよい。別の実施例では、モバイルプラットフォームは、個々のユーザがインターネットをブラウジングしながら、線路状況情報を受信することができる、電車であってもよい。固定基地局は、交通機関方法の通視線または経路内に位置してもよい。固定基地局は、例えば、高速通信チャネルを介してネットワークに接続される、ネットワーク化固定基地局であってもよい。別の実施例として、固定基地局は、情報をモバイルデバイスに提供するための固定情報基地局であってもよい(例えば、線路が閉鎖されている場合、または交通渋滞の場合、電車を停止または減速させるようにアラートする等、電車の線路状況についての情報)。スマートシティ情報システムでは、そのような基地局は、交通を動的に平衡し、車両が走行時間を最小限にすることを可能にするために使用されてもよい。固定基地局は、ネットワーク化されていない場合、鉄道線路内の遠隔固定基地局の場合のように、通過する車両によって更新されてもよい。
そのような通信プロトコルにおいて送信されるパッケージは、任意のサイズであってもよく、パッケージ全体または単にパッケージの一部が、本明細書に説明されるシステムおよび方法を介して難読化されてもよい。パッケージは、例えば、CRC値を使用して、認証されてもよい。別の実施例として、パッケージは、パッケージ内のタイムスタンプ情報を識別し、パッケージ上のタイムスタンプと宛先デバイス上の現在の時間を比較し、パッケージが最新のものであることを確実にすることによって、認証されてもよい。
パッケージは、完全または部分的に、予期される固定基地局への接続の数と、基地局とモバイルプラットフォームとの間のセッションをネゴシエートするために利用可能な時間量とに応じて、エンコードされてもよい。いくつかのパッケージは、固定基地局によってタイムリーな様式で処理される、セッションID番号または別の識別方法を含んでもよい。これらの値をエンコードしないことによって、パッケージ全体は、固定基地局によって、より迅速に処理およびハンドリングされ得る。明確な識別値はまた、固定基地局が、ユーザの識別を推測する必要なく、パッケージを正しいデータテーブルでデコードすることを可能にする。
ここで図48を参照すると、パッケージを固定基地局へおよびそこから伝送するための例示的方法1500が、示される。方法1500は、ペイロード1502と、パティングされた値1504とから成る、パッケージから開始する。パティングされたデータ1504は、ペイロード1502のエンコーディング、デコーティング、および認証を促進するための既存のパティングされたデータであってもよい。パティングされたデータ1504は、ハッシュ、タイムスタンプ、CRC、または他の値であってもよい。値を生成する代わりに、パティングされたデータ1504を使用して、データをエンコードおよびデコードすることによって、パッケージ1500の総サイズへの追加は、存在しない。
伝送のためのパッケージをフォーマットする際、パティングされたデータ1504が、最初に、パッケージから抽出され、次いで、擬似乱数1406を生産する、PRNGのためのシードとして使用される。
次に、XORが、擬似乱数1506を使用して、ペイロード1502に実施される。これは、オリジナルペイロードを隠蔽し、データをプレーンテキスト攻撃に対して防御する。これはまた、上記に説明されるように、PRNGをシャッフル/スクランブルテーブルとXORすることおよび/または以前のフレームのXORされたデータをPRNGと置換することを含んでもよい。抽出されるパティングされたデータ1504は、次いで、XORされたペイロード1502に再付加され、パッケージ全体が、スクランブルされる(1508)。
スクランブルされたパッケージ1508は、伝送され、宛先において受信される。宛先では、パッケージ1508は、スクランブル解除され、パティングされたデータ1504は、その既知の場所から抽出される。パティングされたデータ1504は、次いで、PRNGにシードし、送信機と同一擬似乱数を生産するために使用される。ペイロード1502は、擬似乱数とXORされ、オリジナルペイロードを生産する。
抽出されたデータの性質に応じて、ペイロードの真正性を検証するためのいくつかの方法が、存在する。一実施例として、予期されるCRC値が、計算され、抽出されたCRCと比較される。別の実施例として、ペイロードの予期されるハッシュが、算出され、抽出されたハッシュと比較される。別の実施例として、タイムスタンプは、宛先の現在の時間と比較される。
一実施形態では、スクランブリングアルゴリズムは、ペイロードのサイズに関するため、XORおよびスクランブルの範囲を調節することによって、明確な識別値を保存するように修正されることができる。同様に、識別値は、パティングされたデータとして取り扱われ、パッケージの残りをXORするために使用される。しかしながら、スクランブリングは、パティングされたデータを除外し、それを明確なテキストとして保つであろう。
キーが、パッケージをデコードするために使用される。固定基地局およびモバイルデバイス環境内でキーを提供する1つの方法が、図49に説明される。セッションサーバ1602は、経路内を移動するにつれて、モバイルデバイスにキーを動的にプロビジョニングするために使用される。セッションサーバ1602は、中継塔1506(例えば、固定基地局)との通信を維持する。塔1606が、電源投入される(例えば、オンラインになる)と、セッションが、セッションサーバ1602と確立される。
ポリシサーバ1604は、モバイルデバイス(例えば、ユーザ)を通信サーバと認証させてもよい。モバイルデバイス1608が電源投入されるとき、デバイスは、任意のテーブルベースのキーを有していない。必要なキーを入手するために、モバイルデバイス1608は、ネットワークに対して認証を行い、ネットワークを使用するための認可を受信してもよい。モバイルデバイス1608は、パブリックキーインフラストラクチャ(PKI)を使用して、セッションをポリシサーバ1604と確立してもよい。セッションは、セルラーネットワークを経由して、またはネットワーク送受信塔と通信することによって、確立されることができる。ネットワーク送受信塔は、ブートストラップ要求をポリシサーバ1604に転送してもよい。
接続が、ポリシサーバ1604と確立されると、その署名された証明書をモバイルデバイス1608に送信する。デバイスは、PKIを使用して、証明書の真正性を検証し、真正である場合、ポリシサーバ1604のパブリックキーでエンコードされた秘密を生成し、それを送信する。ポリシサーバ1604は、そのプライベートキーを使用して、秘密を開放する。会話の両者は、秘密を使用して、擬似乱数のシーケンスを生成し、それらの数字を使用して、KDTを作成する。KDTが、作成された後、ポリシサーバ1604は、セッションデータテーブルを作成し、KDTを使用して、それをデバイス1608に送信する。ユーザ証明書が、データテーブルを使用して、ポリシサーバ1604と交換される。ユーザ(例えば、モバイルデバイス1608)が、サービスを使用することが認可される場合、ポリシサーバ1604は、セッションをセッションサーバ1602にハンドオーバする。
セッションが、ポリシサーバ1604からハンドオーバされると、セッションサーバ1602は、ユーザの近傍の固定基地局を特定する。セッションサーバ1602は、デバイスに送信されるための固定基地局のセットを識別してもよい。
ユーザは、識別された経路外または識別された経路内に存在してもよい。ユーザが、識別された経路内に存在しないとき、識別された固定基地局のセットは、全ての経路の最も近い固定基地局を含む。ユーザが、識別された経路内に存在する場合、ユーザの方向および速度が、GPSを使用して計算されることができ、ユーザに提供するための固定基地局のセットは、ある数Pの前の基地局と、ある数Nの次の基地局とを含み、通常、Pは、N未満である。
数Nの次の基地局は、次のネットワーク化および非ネットワーク化基地局を含む。ユーザの場所と次のネットワーク化基地局との間の全ての非ネットワーク化基地局は、固定基地局のセット内に含まれるであろう。非ネットワーク化基地局に加え、含まれるべき次のネットワーク化基地局は、ヒューリスティックに判定される。例えば、経路が、分岐を間もなく有する場合、分岐に沿った基地局のDNSが、経路に沿ったDNSとともに含まれるであろう。
セッションサーバ1602は、デバイスのデータテーブルを固定基地局のセット内のネットワーク化固定基地局に送信する。ある場合には、全ての経路内の全ての基地局が、デバイス1608に送信され、全ての固定基地局の認証を可能にしてもよい。これは、例えば、全ての自動車が、ネットワーク通信のためのバックボーンを使用しない場合でも、固定基地局を認証する方法を有するであろう、自動車警告システムにおいて、または進行し得る全ての線路に沿った全ての固定基地局を認証する必要がある、機関車によって、使用されることができる。
本時点で、デバイス1608は、そのデータテーブルを使用して、塔1606と認証を行うことができる。データテーブルセッションを使用して、サーバ1602は、近傍塔テーブルをデバイスに送信するであろう。塔テーブルは、塔ブロードキャストメッセージを認証するために使用される。
固定基地局とユーザとの間のメッセージは、データテーブルを用いて暗号化される。
次の基地局のキーテーブルが、ユーザデバイス1608に送信される。システムは、悪意のあるユーザが、実際の固定基地局であるかのように、固定基地局のキーテーブルを入手し、そのキーテーブルを使用して、情報を提供しないように防止する必要がある。
固定基地局のセット内のキーは、ユーザのセッションキーデータテーブルを用いて暗号化され、それらは、システムによって長期記憶装置(ハードディスク等)に保存されることは決してない。
全ての固定基地局キーがユーザのデバイス内に常駐するケースでは、それらは、ユーザのデータテーブルを用いて暗号化され、データテーブル自体は、パスワードを用いて暗号化されるであろう。パスワードは、データテーブルをメモリに移動させるために使用され、キーは、メモリに移動するにつれて、デコードされる。このように、ボックスが、モバイルプラットフォームまたはモバイルユーザ(車両または電車等)から盗まれる場合、キーは、復元されることができない。
キーが、認証のために使用されるとき、メッセージの一部は、ユーザまたは固定基地局キーテーブルを用いて暗号化される。会話の受信側は、パッケージの難読化された部分をデコードし、真正性を検証する。これは、タイムコード等のデータのある既知の断片をエンコードすることによって、ペイロードのCRCをエンコードすることにより行われることができる。パッケージが、デコードされた後、CRCまたはデータの既知の断片は、パッケージを認証するために使用される。
固定基地局は、認証されたパッケージのみを転送するように構成されてもよい。完全難読化が、所望されるとき、ペイロードは、本明細書で前述のように、別個のユーザ間セッションキーを使用して難読化されることができる。
パッケージは、タイムスタンプを含有し、基地局キーを用いてエンコードされてもよい。サービス妨害攻撃は、固定基地局に非認証着信メッセージを拒否させることによって回避されることができる。
ここで、概して、図50−56を参照すると、ネットワークアクセス制御システムが、説明される。ネットワークアクセス制御システムは、概して、例えば、証明書のリストを維持する、期限切れ証明書を管理する、証明書失効のリストを管理する、認証局失効リストを管理する、または同等物の必要なく、ネットワーク内の複数のノードのプロビジョニングおよび管理を可能にし得る。概して、本開示を参照すると、ノード間の通信のための難読化技法を提供するための種々のシステムおよび方法が、説明される。以下の説明は、ノード間に認可された通信を設定し、難読化されたデータがノード間で伝送されることを可能にするためのシステムおよび方法を説明する。
図50を参照すると、ネットワークアクセス制御システム1700の大まかなブロック図が、示される。ネットワークアクセス制御システム1700は、概して、アクセス要求側1702と、ネットワークアクセスサーバ1704と、ポリシサーバ1706とを含む。アクセス要求側1702は、ネットワークに接続するように構成される、任意のデバイス(例えば、ネットワーク1710内の種々のノードに接続することを試みるモバイルデバイス、ネットワーク内のノードのうちの1つ等)であってもよい。デバイスは、概して、本開示に説明されるような任意のタイプのデバイスであってもよい。ネットワークアクセスサーバ1704は、要求をアクセス要求側1702(例えば、ユーザデバイス)から受信し、接続をネットワーク1710内の複数のノード1708に提供する。ノード1708は、異なる実施形態に従って、実際のまたは仮想マシンであってもよい。ポリシサーバ1706は、概して、種々のノード1708間の通信を認証してもよく、上記に説明されるようなポリシサーバ702および1604に類似してもよい。
ネットワークアクセス制御システムでは、アクセス要求側1702は、セキュアリンクを経由して、ネットワークアクセスサーバ1704と通信し、これは、次いで、いったんアクセス要求側1702が認証されると、セキュアリンクを経由して、ポリシサーバ1706と通信する。ポリシサーバ1706は、次いで、ネットワーク1710内のノード1708へのアクセス要求側1702のアクセス権を判定する。先行技術では、ノードとサーバとの間の各リンクは、トランスポート層セキュリティ(TLS)プロトコル等のプロトコルによってセキュア化され得、証明書が、デバイス間の接続をセキュア化するために使用される。ノード1708は、概して、本開示に説明されるような任意のタイプのマシンまたはデバイス(例えば、実際のマシン、仮想マシン、プラットフォームコンポーネント、ソフトウェアコンポーネント等)であってもよい。
ここで、概して、本開示を参照すると、ネットワークアクセス制御システムが、説明される。図51−56の実施形態では、ノードは、証明書を管理する必要なく、通信のためにプロビジョニングされる。図51を参照すると、セッションをネットワーク1710内で確立するプロセス1800が、示される。プロセス1800は、2つのノードが、秘密をセキュアに交換すること(ブロック1802)を含み、その後、両ノードは、秘密を使用して、PRNGにシードする。PRNGの出力は、キー配布テーブルを作成するために使用される(1804)。ノードのうちの1つが、データテーブルを作成し(ブロック1806)、これは、次いで、キー配布テーブルを使用して、他のノードと交換される(ブロック1808)。データテーブルは、続いて、PRNGおよびデータに基づいて、ノード間に全てのパケット交換において修正される。プロセス1800は、概して、本開示の上記に説明されるようなセッションを確立するためのプロセスであって、以下の図は、セッションをネットワーク内で確立するであろうノードをプロビジョニングするためのプロセスを説明する。
ここで図52A−Bを参照すると、ネットワーク内のノードのプロビジョニングが、より詳細に示される。より具体的には、図52Aは、ノードがネットワークアクセスサーバ1904によってネットワーク内で使用されることを可能にするためのネットワーク内のノード1908の構成を図示する。ネットワーク内のノードの構成を促進するために、オペレータは、ノード1908にアクセスし、構成プログラム1912を開始してもよい。構成プログラム1912は、概して、ネットワークアクセスサーバパブリックキー1914を使用して、ネットワークアクセスサーバ1904と認証を行うように構成される。ネットワークアクセスサーバパブリックキー1914は、次いで、秘密をネットワークアクセスサーバ1904と交換するために使用され、セッション(1916)が、ノード1908とネットワークアクセスサーバ1904との間に確立される。図52Aの実施形態は、ネットワークアクセスサーバパブリックキーを示すが、他の実施形態では、他の認証方法(例えば、509証明書)が、ネットワークアクセスサーバをノードにおいて認証するために使用されてもよい。さらに他の本発明の実施形態では、セキュアセッションは、Diffie−Hellman、またはErdem Alkimによる「Post−quantum key exchange−a new hope」by(https://eprint.iacr.org/2015/1092.pdf)に開示されるもの、またはFrodoキー交換等のキー交換アルゴリズムを使用して確立されることができ、サーバは、セキュアセッションが、確立された後、かつユーザパスワードが交換される前に、認証されることができる。
いったんネットワークアクセスサーバ1904とのセッションが、確立されると、構成プログラム1912は、オペレータ証明書(例えば、ユーザの証明書)をネットワークアクセスサーバ1904に送信する。ネットワークアクセスサーバ1904は、ユーザをポリシサーバ1906と認証させ、ユーザがノード1908を構成することが認可されていることを検証してもよい。
構成プログラム1912による構成は、ノード1908のためのキー配布テーブルを作成し、キー配布テーブルをノードのセキュア記憶装置1918内に記憶することを含む。キー配布テーブルは、ネットワークアクセスサーバ1904に提供され、これは、キー配布テーブル(および他のノード情報)をサーバセキュアデータベース1920内に記憶する。別の実施形態では、キー配布テーブルを保存する代わりに、プライベート/パブリックキーが、ノード1908のために作成されてもよく、ノードのプライベートキーは、ノードに記憶される一方、パブリックキーは、記憶のためにネットワークアクセスサーバ1904に送信される。
ここで図52Bを参照すると、ノードをプロビジョニングするためのプロセス1950が、より詳細に示される。より具体的には、プロセス1950は、アクセス要求側からの要求の受信に応じて、ネットワークアクセスサーバからノードをプロビジョニングするプロセスを示す。ネットワークアクセスサーバは、プロセス1950において、仮想マシン(VM)内のノードを開始するように構成される。
プロセス1950では、ノードは、図52Aに説明されるように、プロビジョニングのためにすでに構成されている。プロセス1950は、ノードのイメージを探すこと(ブロック1952)を含む。ブロック1952は、概して、ネットワークアクセスサーバが、適切な動作ソフトウェアまたは他のソフトウェアを伴うノードのイメージを探すことを含んでもよい。ブロック1952はさらに、概して、任意の所望の設定または特性を伴うノードのイメージを検索することを含んでもよい。
プロセス1950はさらに、ノードイメージのコピーを作成すること(ブロック1954)と、ノードイメージのコピーをマウントすること(ブロック1956)とを含む。ネットワークアクセスサーバは、ノードへのセキュアアクセスをすでに有しているため、キー配布テーブルをノードイメージのコピーに書き込む(ブロック1958)。ネットワークアクセスサーバは、VMにノードイメージのコピーをロードし(ブロック1960)、キー配布テーブルは、ネットワークアクセスサーバの記憶装置内に保存される(ブロック1962)。
本開示に説明されるようなプロビジョニングシステムは、任意のタイプの動作環境を通して実装されてもよい。例えば、プロビジョニングは、サービスとしてのインフラストラクチャ(IaaS)、サービスとしてのプラットフォーム(PaaS)、またはサービスとしてのソフトウェア(SaaS)モデルを通して行われてもよい。IaaSモデルでは、プロビジョニングは、仮想プラットフォームを通して遂行され、仮想マシンとノードとの間の接続を確立してもよい。PaaSモデルでは、プロビジョニングは、データベース、ウェブページ等の物理または仮想サービスを通して遂行されてもよい(例えば、データベースとノードとの間の接続を確立する)。SaaSモデルでは、プロビジョニングは、ソフトウェアアプリケーションを通して遂行されてもよい(例えば、ブラウザとノードとの間の接続を確立する)。概して、図53−55を参照すると、各タイプの動作環境(IaaS、PaaS、SaaS)内のプロビジョニングが、より詳細に説明される。
図53は、IaaSセッションをネットワーク内のノード間に確立するプロセスを図示する、ブロック図である。アクセス要求側1902は、上記に説明されるように、ノード1908の使用を要求するために(ブロック2002として示される)、セキュアセッションをネットワークアクセスサーバ1904と確立してもよい。ポリシサーバ1906は、要求を受信し(リンク2004として示される)、アクセス要求側1902を認証し、ノード1908を使用するための権限を付与する(ブロック2006として示される)。ノード1908は、実際のまたは仮想マシンであってもよい。
ネットワークアクセスサーバ1904は、次いで、アクセス要求側1902の端末クライアント2014とノード1908の端末クライアント2016との間の通信のために使用されるためのデータテーブル(ブロック2008として示される)を作成する。データテーブルは、ノードのキー配布テーブルを用いて、ネットワークアクセスサーバ1904によって暗号化される(ブロック2010として示される)。データテーブルおよび暗号化されたキーが、アクセス要求側1902の端末クライアント2014に送信される(リンク2012として示される)。端末クライアント2014は、ノード1908の端末クライアント2016との接続を開放し、暗号化されたキーを転送する。本暗号化されたキーは、ノードのキー配布テーブルを使用して、ノードによってデコードされ、アクセス要求側1902とノード1908との間のセッションを開始するために使用される。
図54は、PaaSセッションをネットワーク内のノード間に確立するプロセスを図示する、ブロック図である。図54の実施例は、プラットフォームとしてセキュア接続をデータベース2020と確立することを図示する。プラットフォームコンポーネントは、例えば、図52Bのプロセス1950を使用して、プラットフォーム内のミドルウェアを通してプロビジョニングされる。図54の実施例では、nodeJSアプリケーションとデータベースとの間の相互作用が、示される。本明細書のシステムおよび方法は、他の用途およびプラットフォームにも適用可能であることを理解されたい。
アプリケーション2022が、セキュア接続をデータベース2020と確立する必要があるとき、ミドルウェア2024は、コールを傍受してもよい(リンク2026として示される)。ミドルウェア2024は、ネットワークアクセスサーバ1904とのセキュア接続を開放し(リンク2028として示される)、証明書2030(例えば、ユーザ証明書、アプリケーション証明書)をサーバにパスする。ネットワークアクセスサーバ1904は、アプリケーションの認証および認可を検証し、アプリケーション(nodeJS2022)のための新しいデータテーブルと、データベース2020のためにキー配布テーブルを用いて暗号化されたデータテーブルのコピーとを提供する。
ミドルウェア2024は、キー(データテーブル)を受信させ続け(リンク2032として示される)、暗号化されたキー(暗号化されたデータテーブル)を送信するために、データベース2020への接続を開放する(リンク2034として示される)。データベース2020は、キー配布テーブルを記憶し(ブロック2036として示される)、アプリケーション2022によって提供されると、それを使用して、データテーブルをデコードする。セキュア接続が、次いで、アプリケーションとデータベースとの間に確立される(ブロック2038として示される)。
図55は、SaaSセッションをネットワーク内のノード間に確立するプロセスを図示する、ブロック図である。図55の実施形態は、アクセス要求側1902によってノードとの接続を確立するために使用されるソフトウェアアプリケーションとしてのブラウザを示す。他の実施形態では、任意のタイプのソフトウェアアプリケーションが、使用されてもよい。アクセス要求側1902が、ブラウザ2040を通してアプリケーションを使用するとき、アプリケーション2042は、ブラウザにダウンロードされる。アプリケーション2042は、次いで、ネットワークアクセスサーバ1904とのセキュアセッションにおいて起動することができる(リンク2044として示される)。セキュアセッションは、TLSまたは任意の他のプロトコルを介して確立されてもよい。アプリケーション2042は、例えば、AugularJSアプリケーションであってもよい。
アクセス要求側1902が、ネットワークアクセスサーバ1904(およびポリシサーバ1906)によって認証および認可されると、サーバは、新しいデータテーブルと、ソフトウェアコンポーネントキー配布テーブルを用いて暗号化されたデータテーブルとをブラウザ2040に提供する(リンク2046として示される)。アプリケーション2042は、ソフトウェアバックエンド2048との接続を開放し、暗号化されたデータテーブルをソフトウェアバックエンドに提供する。ソフトウェアバックエンド2048は、ブラウザ2040内のアプリケーション2042とアプリケーションのサーバコンポーネントとの間の接続を確立するために、その記憶されたキー配布テーブル(ブロック2050として示される)を使用して、データテーブルを解読する。
ここで図56を参照すると、セッションが複数のノード間で配布または移行される方法を図示する、ブロック図が、示される。図56の実施形態では、アクセス要求側1902は、第1のノード2102とのセッション下にある(リンク2112として示される)。アクセス要求側1902が、付加的リソースをネットワークアクセスサーバ1904に要求すると(リンク2114として示される)、サーバは、セッションが、第2のノード2104に移動され、要求に適応すべきであることを判定してもよい。ネットワークアクセスサーバ1904は、新しいセッションキーをアクセス要求側1902に送信する(リンク2116として示される)。新しいセッションキーは、第1のノード2102のキー配布テーブルを用いて暗号化されたデータテーブルと、第2のノード2104のキー配布テーブルを用いて暗号化されたデータテーブルのコピーとを含む。
アクセス要求側1902は、データテーブルを第1のノード2102に転送する(リンク2118として示される)。第1のノード2102は、そのキー配布テーブルを使用して、データテーブルをデコードし、要求を認識し、第2のノード2104とのセッションを開放する。第1のノード2102は、第2のノード2104との接続を開放し、第2のノードのキー配布テーブルを用いて暗号化されたデータテーブルをノードにパスする(リンク2120として示される)。
リンク2120を介して受信された暗号化されたデータテーブルは、第2のノード2104においてデコードされ、セキュア接続を第1のノード2102と確立するために使用される(リンク2122として示される)。全てのデータが、2つのノード間で移動されると、ネットワークアクセスサーバ1904は、データテーブルを作成し、データテーブルに加えて、第2のノード2104のキー配布テーブルを用いて暗号化されたコピーをアクセス要求側1902に送信する(リンク2124として示される)。
アクセス要求側1902は、次いで、第2のノード2104との接続を開放し(リンク2126として示される)、暗号化されたデータテーブルをパスする。第2のノード2104は、データテーブルを解読し、それを使用して、ノードとアクセス要求側1902との間のセッションを確立する(リンク2128として示される)。プロセスが、移行プロセスである場合、第1のノード2102は、次いで、第2のノード2104への移行が完了するにつれて、アクセス要求側1902から解放されてもよい。
ここで図57を参照すると、ネットワークアクセス制御システム2150の大まかなブロック図が、示される。ネットワークアクセス制御システム1704、ポリシサーバ1706、およびクライアント(ノード)1708に加え、複数のバンプインザワイヤ(BITW)ノード2152が、システム内に示される。BITWノードは、既存のシステムの中に挿入され、各通信のエンドポイントにおけるノードを変更せずに、システム内の通信を改良し得る(すなわち、より高い信頼性およびセキュリティの通信)、ノードである。言い換えると、BITWノードは、メッセージを受信することになるノードとシステム2150の種々の他のコンポーネントとの間でメッセージを中継する。BITWノードは、本開示に説明されるような他のノードと同様に、以下に説明されるように、システム2150内の通信のためにプロビジョニングおよび設定されてもよい。
ネットワークアクセスサーバ1704は、認可のためにポリシサーバ1706から認可を受信後、キーを用いてBITWノード2152をプロビジョニングしてもよく、これは、通常のノードをプロビジョニングするプロセスに類似する。BITWノード2152は、以下に説明されるように、2つのインターフェース、すなわち、他のネットワーク内のノードとの通信を促進するためのネットワークバウンドインターフェースと、識別された特定のノードのためのクライアントバウンドインターフェースとを含んでもよい。各BITWノード2152は、図57では、クライアント1708と関連付けられて示される。各BITWノード2152と関連付けられた複数のノード1708を含む、BITWノード2152およびノード1708の任意の構成が、可能性として考えられ得ることを理解されたい。
BITWノード2152は、パッケージをリッスンし、パッケージが受信されると、クライアント宛先IPをパッケージから判定してもよい。BITWノード2152は、次いで、クライアント宛先IPを使用して、パッケージの意図される受信者を判定してもよい。BITWノード2152が、意図される受信者を把握しない場合、アクセス要求プロトコル(ARP)パケットは、近傍クライアント(ノード)に伝送されてもよく、BITWノード2152は、次いで、クライアントから、クライアントのIPアドレスを示す応答を受信してもよい。BITWノード2152が、クライアント宛先IPアドレスに合致するIPアドレスをパッケージから受信しない場合、BITWノード2152は、クライアント宛先IPがネットワーク内に存在しないことを把握する。IPアドレスが、ARPに応答して受信される場合、BITWノード2152は、将来的通信のために、関連付けられたMACアドレスを保存してもよい。
BITWノード2152が、新しいIPアドレスをネットワーク内で発見するにつれて、構成サーバ2154に知らせてもよい。構成サーバ2154は、次いで、ネットワーク内の全てのBITWノード2152に知らせ、全てのそのようなノードがネットワーク内の種々のクライアントのIPアドレスを把握することを可能にしてもよい。
BITWノード2152は、別のBITWノードがネットワークの中に挿入されると、宛先IPまたはクライアント1708へのパスの中に挿入されたBITWノードを検出するように構成されてもよい。新しいBITWネットワーク内のノードの追加を検出する、BITWノード2152は、新しいBITWノードとセッションを開始してもよい。オリジナルBITWノードは、セッションを認可するためのトークンを有してもよい、またはトークンをネットワークアクセスサーバ1704から要求および受信してもよい。
クライアント1708へおよびそこから送信されるメッセージの難読化および難読化解除は、パッケージの通信パス内のBITWノードにおいて生じてもよい。例えば、エンドクライアント1708に送信されるパッケージは、メッセージをクライアントに送信する対応するBITWノード2152によって難読化されてもよく、パッケージは、宛先BITWノードにおいて難読化解除されてもよい。
本明細書に説明されるプロビジョニングシステムおよび方法は、単一ポリシサーバが、ネットワーク内の全てのサーバを横断して全ての認証およびアクセスを制御することを可能にする。ポリシサーバは、ポリシサーバが問題を有する場合、システム全体の障害を防止するために、複製されてもよい。セッションを確立するプロセスは、プロセスと関連付けられたテーブルおよびプロセッサと関連付けられたテーブルを通して、ノードにおいてプロセッサに結び付けられる。セッションが、より多くのプロセッサに拡張される必要がある場合、テーブルは、拡張のために使用される。ノード間の同期が、喪失される場合、リアルタイムで、オリジナル設定と同一様式で再開されることができる。
概して、本開示を参照すると、ノード間の通信のための難読化技法を提供するための種々のシステムおよび方法が、説明される。本明細書に説明されるシステムおよび方法の一例示的環境は、車両であり得る。現代の車両は、多くの(例えば、70またはそれを上回る)電子制御ユニット(ECU)を含み得る。そのようなECUの実施例は、エンジン制御ユニット、トランスミッションシステム、エアバッグシステム、アンチロックブレーキシステム、クルーズコントロールシステム、電動パワーステアリング、オーディオシステム、パワーウィンドウ、ドア、ミラー調節システム、ハイブリッドまたは電気車両のためのバッテリもしくは再充電システム等を含んでもよい。概して、本開示を参照すると、本明細書におけるシステムおよび方法は、セキュア化された無線通信をサブシステム内のECUとまたはその間に確立するために使用されてもよい。より具体的には、以下の図58−62を参照すると、本開示のシステムおよび方法は、車両内の実装に関して説明される。
本明細書のシステムおよび方法はまた、複数のECUおよびノードを含む、任意の環境のために適用されてもよいことを理解されたい。図58−62に説明される実施形態は、車両内のシステムおよび方法の例示的実装として提供されるが、任意の他のタイプのネットワーク化環境内において適用されるように適合可能である。そのような例示的ネットワークは、建物エリア内の接続されたプリンタおよび他のコンピュータのネットワーク、監視またはアラームシステムのための複数のセンサ、エリア内の複数のモバイルまたは定常デバイス、および同等物を含んでもよい。
現代の車は、概して、限定された能力を伴う数百個のセンサを有し得、各センサは、ECUに接続され、エンジンコントローラ(例えば、車両の主要なコントローラ、また、以下では、単に、コントローラと称される)と通信可能である。いくつかのECUは、1つのセンサのみに接続されてもよく、いくつかの実施形態では、ECUおよびセンサは、同一デバイス上にある。他の実施形態では、ECUおよびセンサは、異なるデバイス上にあってもよい、または複数のセンサは、単一ECUに接続してもよい。ECUとエンジンコントローラとの間で伝送されるための情報は、認証および暗号化されるべきである。概して、本開示に説明されるように、ECUとエンジンコントローラとの間のセッションは、最初に、「キー」をその2つの間で共有することによって確立されてもよい。所与のECUのためのキーは、概して、一意の初期データテーブル(そのサイズは、各ECUのデータフィールドに調整される)とPRNGのための一意の多項式インデックスの組み合わせであってもよい。各ECUへのキーのプロビジョニングは、工場設定(または車両またはセンサが製造されている他の設定)等のセキュア環境内でのみ生じるべきである。
車両の電源投入に応じて、エンジンコントローラおよびECUは、データテーブルが、ECU毎にすでに事前にプロビジョニングされており、ECU毎の各データテーブルのコピーが、エンジンコントローラに保たれているため、「秘密」から開始し、キー配布テーブルを作成し、データテーブルを作成する必要はない(図39のプロセス1100に関して説明されるように)。代わりに、エンジンコントローラは、同一ランダム32ビットワードシードを各ECUに送信する(各エンジンコントローラは、ランダム32ビットワードで事前にプロビジョニングされる)。ECUは、ECUの一意のデータテーブルを使用して、本シードをスクランブルし、結果をベクトルとしてPRNG多項式と併用し、PRNGにシードする。このように、エンジンコントローラとの各ECUのセッションは、一意のデータテーブルおよび一意のPRNGシーケンスから開始する。各ECUは、データテーブルを恒久的メモリ内に、かつ事前にプロビジョニングされた多項式インデックスを揮発性メモリ内に保つ。本時点から、ECUとエンジンコントローラとの間のペイロードのセキュア通信が、概して、図41のプロセス1200に説明されるように進められることができる。
代替実施形態では、各ECUは、その独自のデータテーブルおよび秘密で事前にプロビジョニングされることができる(28バイトは、プロセス1100に説明されるように、PRNG多項式指数およびPRNGベクトルを構成する)。エンジンコントローラは、ECU毎のデータテーブルおよび秘密のコピーを恒久的メモリ内に保つ。本実施形態は、PRNGの計算が、ECUよりはるかに強力なプロセッサである、エンジンコントローラにおいて生じることを可能にするであろう。
概して、図58−62を参照すると、車両内の各ECUをキーでプロビジョニングする方法が、説明される。ECUは、車両内で経時的に交換され得る。例えば、タイヤと関連付けられたECUは、車両のタイヤが変更されると、変更され得る。ECUが、車両内で交換されると、新しいECUは、交換されているECU内のキーと異なるキーでプロビジョニングされてもよく、セッションは、新しいECUとエンジンコントローラとの間に確立されてもよい。しかしながら、新しいECUは、オペレータ(車所有者、ディーラー等)が、そのインストールの際に新しいECUに権限を付与するまで、エンジンコントローラによって信頼され得ない。
ここで図58を参照すると、エンジンコントローラと車両サブシステムのECUとの間の通信のプロセスを図示する、ブロック図が、示される。エンジンコントローラ2202は、コントローラエリアネットワーク(CAN)キュー2204を含み、そこからメッセージが、ECU2206へおよびそこから伝送される。したがって、コントローラ2202から伝送されるための全てのメッセージは、CANキュー2204に入れられ、CANバス2208に導入される。
図58のシステムは、シミュレーションモードおよびエミュレーションモードの両方をサポートしてもよい。エミュレーションモードでは、コントローラからのメッセージは、CANキュー2204を介して、CANバス2208に提供され、次いで、CANバス2208からECU2206に提供される。エミュレーションモードをサポートするために、キュー2204およびCANバス2208は、メッセージをエミュレートされている種々のECUに送信し、そこから受信するために使用される。メッセージは、キューに入れられ、順次、伝送のためにCANバス2208に導入される。CANキュー2204は、そのエンキューおよびデキュー方法において同期される。シミュレーションモードでは、コントローラ(CANキュー2204)からのメッセージは、直接、ECU2206に提供され、メッセージへのECU回答は、直接、CANキュー2204に提供される。
エンジンコントローラ2202は、車両内のECUをプロビジョニングするように構成される。プロビジョニングを開始するために、ユーザデバイス2210は、コントローラ2202と接続し、ペアリングを可能にしてもよい。ユーザデバイス2210は、車両サブシステムのための更新を提供することができる、携帯電話、ディーラーの店舗内の機器、または認可されたユーザ(例えば、ディーラー)に属する任意の他のタイプのデバイスであってもよい。ユーザデバイス2210およびコントローラ2202は、OBD−IIポートを介して、または任意の他の利用可能な方法によって、接続してもよい。ユーザデバイス2210およびコントローラ2202は、プロビジョニング方法に先立って、ペアリングされてもよい。ユーザデバイス2210は、概して、車両の1つまたはそれを上回るECUのために意図されるソフトウェア更新(または他の情報)を含む、1つまたはそれを上回るメッセージを提供する。ユーザデバイス2210とコントローラ2202との間の通信プロセスは、図63−65により詳細に説明される。
車両の種々のECUが、電源投入されると、各個々のECU2206は、プロビジョニング要求をコントローラ2202に送信してもよい(CANバス2208を介して)。そのような状況は、ECUがプロビジョニング要求を同時にサブミットし得るため、CANバス2208に多数の衝突を生じさせ得る。これは、エラーメッセージを頻繁に送信させる、または最終的に、CANバス2208もしくはコントローラ2202の「バスオフ」状態もしくは他のエラー状態を生じさせ得る。車両設定では、そのようなエラーメッセージの生成は、典型的には、車両に関する深刻な問題を示し得る。したがって、より深刻なエラーメッセージが、代わりに、認識され得るように、衝突を回避することが望ましい。本明細書に説明されるプロビジョニング方法は、ECUによって生成された種々の要求間の衝突を回避することに役立つ。
図58−62に説明される暗号化プロセスは、CANバス以外の任意のタイプのIoT用途のためにも実装可能であり得ることを理解されたい。CANバスは、複数のデバイスが相互に通信することを可能にするための例示的規格として提供されるが、デバイスは、任意の他のタイプの方法またはプロトコルを介して相互接続されてもよい。
また、図59A−Dを参照すると、プロビジョニングプロセスが、より詳細に示される。各個々のECU2206は、プロビジョニングされていない場合、通常通り伝送することによって開始する。その通常伝送の一部として、ECU2206は、そのIDを含んでもよい。コントローラ2202が、伝送を各ECU2206から受信すると、各ECU2206がプロビジョニングされ得るかどうかをチェックすることができる。そのために、コントローラ2202は、図59Aに示されるように、CANプロビジョニングメッセージ2302を伝送する。メッセージ2302は、CANプロビジョニングID2304を含み、これは、ECU2206によってプロビジョニングチェックとして認識可能な所定のメッセージIDである。メッセージ2302のペイロードは、ECU2206のIDと、拡張子ビットとを含み、随意に、18ビットの拡張子アドレスの後に、4ビットECUペイロードが続くように示される。
ECU2206が、メッセージ2302を受信すると、ECU2206が、プロビジョニングされることができ、メッセージ2302内のECU IDが、その独自のIDに合致する場合、ECU2206は、次いで、プロビジョニングを要求することができる。図59Bを参照すると、ECUプロビジョニングメッセージ2312が、示される。メッセージ2312は、プロビジョニングID2314を要求することを含み、これは、コントローラ2202によってプロビジョニング要求として認識可能な所定のメッセージIDである。メッセージ2312はさらに、概して、メッセージ2302に関して説明されるペイロードに類似するペイロードを含んでもよい。
コントローラ2202が、メッセージ2312をECU2206から受信すると、コントローラおよびECUがセキュア環境内にあることを検証すべきである。コントローラ2202が、セキュア環境を検証することができない場合、コントローラ2202は、ユーザ(ユーザデバイス2210を介して)がECU2206をプロビジョニングすることが容認可能であることを確認することを要求してもよく、確認の受信に応じて、プロビジョニングプロセスを継続してもよい。一実施形態では、コントローラ2202は、環境がセキュアであることを示す、ユーザ入力を待機してもよく、いったんコントローラ2202が環境がセキュアであることを確認可能になると処理され得るように、要求を保存してもよい。
いったん環境がセキュアになると、コントローラ2202は、図59Cに示されるように、メッセージ2322で応答してもよい。メッセージ2322は、プロビジョニングID2324を含み、これは、所定のメッセージIDである。メッセージ2322はさらに、概して、メッセージ2302、2312に関して説明されるものに類似する、ペイロードを含んでもよい。メッセージ2322が、送信された後、図59Dに示されるように、メッセージ2332等のさらなるメッセージが、コントローラ2202によって伝送されてもよい。メッセージ2332は、ECU2206に送信されるためのキーの一部を含む(「プロビジョニングID+N」として図59Dに示され、キーのN番目のブロックがメッセージ内で送信されていることを示す)。コントローラ2202によって複数のメッセージ2332を経由して送信されるキーは、概して、本開示に説明されるように、難読化プロセスにおいて使用されるためのテーブルおよびPRNGベクトルを含む。
一実施形態では、コントローラ2202は、種々のECUから受信されたメッセージのサイズに基づいて、キーをグループ化してもよい。例えば、同一サイズを伴うフレームをブロードキャストする、全てのECUは、メッセージをエンコードするために、コントローラ2202によって、同一キーを提供されてもよい。
ECU2206が、プロビジョニングされ、コントローラ2202との伝送のための準備ができた後、ECU2206が初期化されると(例えば、車両が始動すると)、コントローラ2202は、ランダム32ビットメッセージを車両内の全てのECUにブロードキャストする。各ECU2206は、次いで、ECU内の秘密のデータテーブル部分を使用して、32ビットメッセージをスクランブルし、結果として生じる値は、上記に説明されるように、PRNGのための初期ベクトルとして使用される。
ここで図60を参照すると、ECUおよびコントローラの難読化アクティビティ(エンコーディングおよびデコーティング)が、より詳細に説明される。一般に、環境内で要求されるセキュリティのレベルに応じて、暗号化および解読のために使用されるアルゴリズムは、以下に説明されるように、低レベルまたは高レベル暗号化/解読アルゴリズムであってもよい。
低レベル暗号化方法では、ECU2206からコントローラ2202に伝送されるためのデータは、概して、本開示に説明されるように、PRNGとXORされ、次いで、スクランブルされる。テーブルは、次いで、データをXORするために使用されるPRNGの値に基づいて、チェーニングされる。テーブルチェーニングは、図61により詳細に説明される。エンジンコントローラにおけるデコーティングのために、暗号化されたメッセージは、スクランブル解除され、データは、PRNGとXORされる。テーブルは、次いで、データをXORするために使用されるPRNGの値とチェーニングされる。チェーニングが失敗する場合、次のPRNG値が、次いで、使用されることができる。次のPRNG値は、データとXORされ、テーブルチェーニング内で使用される。本プロセスは、PRNGがテーブルのチェーニングの成功を生じさせたことが見出されるまで継続してもよい。
全体的プロセスが失敗する(すなわち、いずれのPRNG値もテーブルのチェーニングの成功を生じさせない)場合、再同期メッセージが、コントローラ2202によってECU2206に送信されてもよい。再同期メッセージは、図60に示されるようなフォーマットを有してもよい。再同期メッセージ2400は、再同期ID2402を含み、これは、所定のメッセージIDである。再同期メッセージ2400はさらに、シード2404を含み、これは、テーブルをスクランブルするために使用され、後続暗号化/解読プロセスにおいてPRNGにシードするために使用される、乱数である。シードは、任意のサイズ(例えば、32〜64ビット)であってもよい。再同期メッセージ2400はさらに、概して、伝送のために要求されるように、ECU IDおよび他のフィールドを含んでもよい。
高レベル暗号化方法では、ECU2206がデータをコントローラ2202に伝送するであろう初めてのとき、ECU2206は、上記に説明されるように、データをPRNGとXORし、データをスクランブルし、データをチェーニングしてもよい。しかしながら、後続反復(すなわち、さらなる伝送)のために、伝送されるためのデータは、PRNGからの値の代わりに、前のXORされたデータ(事前にスクランブルされ、XORされたデータ)とXORされる。データを前のXORされたデータとXORすることは、データの難読化レベルを増加させる。コントローラ2202は、次いで、上記に説明されるように、メッセージのデコーティングに進んでもよい。
図60において上記に説明されるように、ECU2206は、コントローラ2202に送信されるためのデータを難読化する。ECU2206は、典型的には、車両内の単一センサからのデータを伝送しているため、ECU2206は、概して、非常に少量のデータを伝送するように構成されてもよい。いくつかの実施形態では、ECU2206は、パケット全体をデータで充填し、次いで、パケットを伝送することを待機する代わりに、データがセンサから受信されるにつれて、順次、データを暗号化および伝送することが可能であってもよい。言い換えると、ECU2206は、一度に全ての代わりに、一度に1ビットまたは一度に1セグメント、伝送されるためのデータをエンコードする。概して、図61を参照すると、一度に1バイト(または1セグメント)、データをエンコードする、ECU2206のテーブルベースのシリアル暗号化プロセスが、より詳細に説明される。
シリアル暗号化プロセスに関して、ワンタイムパッドバッファが、ECU2206によって準備される。バッファは、任意のサイズであってもよい。いくつかの実施形態では、バッファは、160〜256バイトであってもよい。ECU2206が、最初の着信バイトをセンサから受信すると、バイトは、バッファの最初のバイトとXORされる。受信された次のバイトは、バッファの第2のバイトとXORされる等となる。ワンタイムパッドバッファの最後のバイトが、使用されるとき、ECU2206によって記憶されたテーブルは、修正され、新しいワンタイムパッドバッファが、さらなるデータのために準備される。種々の実施形態では、図61のシリアルプロセスは、1ビットから任意の数のバイトの任意のサイズパケットを一度にXORすることを可能にするように適合されてもよく、選定は、リソース制約および効率考慮点に基づいて行われてもよい。
バッファの最後のバイトが使用された後にテーブルを修正する一実施例が、ここで説明される。テーブル内の第1の17バイトのデコードされたデータが、ECU2206によって生成されたPRNGシーケンスの最初の17バイトとXORされる。テーブルチェーンポインタによってポイントされた次の17エントリは、次いで、XORされたデータ内の値と交換される。言い換えると、テーブルの最初の17バイト内のXORされたデータは、テーブル内のデータと交換され、その場所は、テーブルの次の17バイトによって識別される。種々の実施形態では、テーブルの修正は、テーブルの任意の数のバイトをXORし、テーブル内の任意の数のバイトを交換することを含んでもよい。
図61を参照すると、図60のワンタイムパッドバッファを準備するためのプロセス2500のフローチャートが、示される。プロセス2500は、バッファをPRNG2502によって生成されたPRNGシーケンス2504で充填することを含む。PRNGシーケンス2504は、テーブル2506内のデータとXORされる(ブロック2508)。結果として生じるXORされたデータは、テーブル値とシャッフルされ(ブロック2510)、結果として生じる値は、ワンタイムパッドバッファ2512内で使用される。種々の実施形態では、PRNGシーケンスは、任意のタイプの暗号またはアルゴリズム(例えば、AES256、AES128等)でエンコードされてもよい。
解読に関して、ワンタイムバッファが、同一テーブル、同一PRNG値(例えば、同一PRNG多項式)、およびPRNG内の同一場所を使用して準備され、同一値を暗号化において使用されたワンタイムバッファ内にもたらすことができる。着信バイトは、バッファの次の未使用バイトとXORされ、バッファの最後のバイトが使用されるとき、テーブルは、上記に説明されるように、修正され、新しいバッファを作成するために使用される。
概して、図62A−Bを参照すると、ECUによってコントローラに送信されるメッセージの認証が、より詳細に説明される。一実施形態では、コントローラ2202によるメッセージの認証は、メッセージのCRCコードを使用したインライン認証を使用して遂行されてもよい。本コードは、典型的には、その独自のフィールドをメッセージのペイロードの中に挿入させることができる。しかしながら、メッセージのペイロードが、CRCを含まない場合、またはペイロードが、十分なエントロピを提供するためには小さすぎる(すなわち、すなわち、メッセージが、CRCがペイロードに確実に追加されることができないほど、そのサイズのため、低エントロピを有する)とき、メッセージ認証は、以下に説明されるように、コントローラによってECUから受信された前のメッセージからのペイロードをエンコードすることによって遂行されてもよい。
メッセージは、前のいくつかのメッセージからのペイロードをエンコードすることによって認証されることができる。例えば、ECU2206からの前のいくつかのメッセージNに関して、ペイロードサイズNの循環バッファが、コントローラ2202によって、最後のN個のペイロードがECU2206によって送信され、確認応答され続けるために使用されてもよい。新しいメッセージを認証するために、64ビットハッシュが、循環キューから算出され、ハッシュは、図62Aに示されるように、暗号化され、メッセージ2600内で送信される。メッセージ2600は、ECU2206を認証するために使用される所定のIDである、ID2602と、暗号化されたハッシュ2604とを含む。コントローラ2202は、ハッシュ番号を検証し、認証を検証する。
コントローラ2202は、ECU2206からのメッセージの認証が要求される頻度を駆動させることができる。例えば、コントローラ2202は、図62Bに示されるように、メッセージ2610を送信することができる。メッセージ2610は、再認証ID2612を含み、これは、認証のためにECU2206に求めるために使用される所定のメッセージIDである。メッセージ2610はさらに、インターバルフィールド2614を含み、これは、ECU2206がそれ自体を認証すべきレートを規定する。例えば、インターバルが、100である場合、ECU2206は、100メッセージ毎に認証すべきである。インターバルが、ゼロである場合、ECU2206は、直ちに認証すべきである。メッセージ2610はさらに、認証のために使用される循環キューのサイズを判定する、フィールド2616を含む(例えば、認証プロセスにおいて使用するための前のメッセージの数を判定するため)。
図58−62のシステムおよび方法は、例えば、ソフトウェア更新を車両の種々のECU2206ならびにエンジンコントローラ2202自体に提供するために使用されてもよい。また、図63−65を参照すると、情報(ソフトウェア更新等)をシステムサーバからエンジンコントローラ2202に提供するためのシステムおよび方法が、より詳細に示される。図63−65のシステムおよび方法は、サーバからコントローラ2202に伝送されるファイルの完全性および機密性をセキュア化することを可能にする。ファイルは、任意のタイプのコネクティビティ方法(例えば、WiFi、セルラー、FM帯域等)を介して伝送されてもよく、異なるコネクティビティ条件のために、部分的および断片化された更新のために、ならびにファイル内の一部または全部のブロックの再伝送のために適合可能であってもよい。種々の実施形態では、エンジンコントローラ2202は、ファイルを直接システムサーバから受信してもよい、またはファイルをエンジンコントローラに中継するように構成される中間ユーザデバイスからファイルを受信してもよい。
図63Aを参照すると、ファイルをコンパイルし、ファイルをサーバからエンジンコントローラ2202に配布するためのプロセス2700が、示される。ファイル2702は、コンパイルブロック2704において、複数のブロックに分割される。各ブロックは、次いで、独立して暗号化され(ブロック2706)、次いで、エンジンコントローラ2202に伝送される(ブロック2708)。各ブロックを独立して伝送することによって、伝送失敗または割込の結果の任意の逸失ブロックが、再伝送されることができる。エンジンコントローラ2202は、各ブロックをデコードし(ブロック2710)、ファイル2702を再アセンブルする(ブロック2712)。
コンパイルプロセス(ブロック2704)は、図63Bにより詳細に示される。ファイル2702は、複数のブロック2720に分割されるように示される。各ブロック2720は、ヘッダ2722と、ペイロード2724とを含む。各ヘッダ2722は、多項式パラメータ2726と、擬似ランダムシーケンス内のその位置を表すベクトル2728と、そのブロック番号2730とを含んでもよい。多項式パラメータ2726は、概して、本開示に説明されるように、コントローラによって、PRNGを生成するために使用される。ブロック番号2730は、ファイル2702内の他のブロックに対するブロック2720の位置を識別する。ペイロード2724は、概して、ファイル内のブロックの数およびブロック毎のブロックサイズ等、更新ファイルのためのメタデータを含有する代わりに、最初のブロックのペイロードとともに、ファイルデータを含んでもよい。
暗号化プロセス(ブロック2706)が、図63Cにより詳細に示される。最初に、ヘッダテーブルおよびペイロードテーブルが、生成される(ブロック2740)。ブロック(ブロック2742)毎に、ヘッダは、暗号化され(ブロック2744)、ヘッダおよびペイロードは、ブロックテーブルを使用して、スクランブルされる(ブロック2746)。また、図63Dを参照すると、ヘッダ暗号化のためのブロック2744が、より詳細に示される。
ヘッダ暗号化2744は、乱数を生成すること(ブロック2750)を含む。一実施形態では、数字は、0〜232であってもよい(32ビット乱数に適応する)。乱数は、次いで、多項式パラメータを生成するためのパラメータとして使用される(ブロック2752)。第2の乱数が、上記のプロセス1100に説明されるように、生成され(ブロック2754)、PRNGのためのジャンプベクトルとして使用される(ブロック2756)。数字は、例えば、0〜2127−1であってもよい(ペイロードのサイズに適応する)。PRNGの状態およびブロック番号は、コピーされ(ブロック2758)、ヘッダは、ヘッダテーブルを用いて暗号化され(ビットスクランブルされ)(ブロック2760)、伝送のための暗号化されるヘッダを作成する。
図63Eを参照すると、ブロックのヘッダおよびペイロードをスクランブルするステップが、示される。スクランブリングステップは、上記の図63Aのブロック2706と相関してもよい。PRNGは、概して、本開示に説明されるように、擬似乱数のシーケンス2770を生成する。シーケンス2770は、ペイロード2724とXORされ、XORされたペイロード2772を作成する。XORされたペイロード2772は、次いで、ブロックテーブルを用いてバイトスクランブルされ、エンジンコントローラに伝送されるためのエンコードされたブロック2774を作成する。
ここで図64を参照すると、サーバ(またはユーザデバイス2210)とエンジンコントローラ2202との間の伝送プロセス2800が、より詳細に示される。より具体的には、図64のプロセス2800は、概して、本開示に説明される、パブリックおよびプライベートキー暗号化技法を使用して、車をプロビジョニングする(すなわち、ファイル更新を提供する)方法を説明する。サーバまたはユーザデバイス2210とエンジンコントローラ2202との間の通信は、典型的には、通信のための安全環境ではない、指定されたエリア内で生じ得る(すなわち、サーバまたはユーザデバイス2210およびエンジンコントローラ2202は、ディーラーまたは製造業者等のエリア、または指定されたガレージエリア、または同等物においてのみ、接続を確立してもよい)。エンジンコントローラ2202は、以下に説明されるように、通信リンクをセキュア化することによって、個々のセンサまたはECU情報がエリア内の任意のデバイスによって読み取られることができない、安全環境モードを有効にしてもよい。プロセス2800は、サーバまたはユーザデバイス2210とエンジンコントローラ2202との間のセキュア接続を確立するように具体的に構成される、ディーラー、製造業者、またはガレージにおける特殊機器を使用することを含んでもよい。
プロセス2800は、車両が、接続をサーバ(またはユーザデバイス2210)と確立し、509.x証明書を受信すること(ブロック2802)を含む。いくつかの実施形態では、サーバは、エンジンコントローラにアップロードされるための更新ファイル(または他のファイル)を生成または受信してもよい。他の実施形態では、エンジンコントローラは、直接、ユーザデバイスに接続し、更新ファイルをユーザデバイスから受信してもよい。プロセス2800はさらに、509.x証明書を検証することを含む(ブロック2804)。509.x証明書は、サーバとのセキュア通信を検証する目的のために、エンジンコントローラによって受信され得る、例示的証明書である。
プロセス2800はさらに、509.x証明書内のパブリックキーを使用して、秘密を生成し、秘密をサーバに送信する(ブロック2806)ことを含む。秘密はまた、エンジンコントローラのPRNGにシードするために使用される(ブロック2808)。結果として生じるPRNGシーケンスは、KDTを作成するために使用され(ブロック2810)、KDTは、更新キーをエンコードするために使用され(ブロック2812)、キーは、ヘッダテーブルと、ペイロードテーブルとを含む。
代替実施形態では、他の方法が、通信をサーバと確立し、更新キーを送信するために使用されてもよい。例えば、サーバとのセッションが、Diffie−Hellman、New−Hope、またはFrodo秘密交換プロトコルを使用して確立されることができ、次いで、他のプロトコルが、エンジンコントローラによって、パスワード、パブリック−プライベートキーを介して、またはシグネチャを作成するために使用される任意の他のプロトコルによって等、サーバを識別するために使用されることができる。
ここで図65を参照すると、エンジンコントローラにおいて更新ファイルをデコードおよびアセンブルするプロセス2900が、示される。プロセス2900は、サーバまたはユーザデバイスからの更新ファイル(または他のファイル)の各ブロックの受信を完了後、エンジンコントローラ2202によって実行されてもよい。プロセス2900は、エンジンコントローラによって受信された単一ブロックのデコーティングと、単一ブロックからのペイロードの更新ファイルの中への挿入とを説明する。更新ファイルは、複数のブロックから成ってもよい。
プロセス2900は、エンコードされたブロックを受信すること(ブロック2902)と、ブロックをバイトスクランブルすること(ブロック2904)とを含む。ブロックのヘッダは、エンジンコントローラによって記憶されたヘッダテーブルを用いてビットスクランブルされる(ブロック2906)。PRNGのステータスは、ヘッダからコピーされ(ブロック2908)、PRNGは、擬似ランダムシーケンスを生成するために使用される(ブロック2910)。シーケンスは、次いで、ペイロードとXORされる(ブロック2912)。ヘッダからのブロック番号は、ブロック内のペイロードのためのオフセットを計算し(すなわち、他のペイロードに対する各ブロックからのペイロード毎の正しい位置を判定するため)、ペイロードを最終のアセンブルされたファイルにコピーするために使用される(ブロック2914)。
任意のプロセスまたは方法ステップの順序もしくはシーケンスは、代替実施形態によると、変動または再シーケンス化されてもよい。他の置換、修正、変更、および省略もまた、本発明の範囲から逸脱することなく、種々の例示的実施形態の設計、動作条件、および配列に行われてもよい。
例示的実施形態に示されるような要素の構造および配列は、例証にすぎない。本開示の実施形態が、詳細に説明されたが、本開示を精査する当業者は、列挙される主題の新規教示および利点から著しく逸脱することなく、多くの修正が可能性として考えられることを容易に理解するであろう(例えば、種々の要素のサイズ、寸法、構造、および割合、パラメータの値、材料の使用、配向等の変動)。例えば、一体的に形成されるように示される要素は、複数の部品または要素から構築されてもよい。いくつかの同様のコンポーネントは、異なる図において同一参照番号を使用して本開示に説明されている。これは、これらのコンポーネントが全ての実施形態において同じであることの含意として解釈されるべきではなく、種々の修正が、種々の異なる実施形態において行われてもよい。