(57)【要約】  データ処理装置は、プログラムコードに応えてデータ処理動作を実施するためのデータ処理回路と、複数のレジスタと、データを格納するためのデータストアとを備え、データストアは、異なるセキュアレベルを有する複数の領域を備え、セキュアなドメイン内で動作しているデータ処理回路がアクセス可能であり、それ程セキュアではないドメイン内で動作しているデータ処理回路がアクセス不可能である機密データを格納するための少なくとも１つのセキュアな領域と、それ程セキュアではないデータを格納するためのそれ程セキュアではない領域とを備える。データストアは、セキュアな領域内に１つのセキュアなスタック、およびそれ程セキュアではない領域内に１つのそれ程セキュアではないスタックの少なくとも２つのスタックを備える。データ処理回路は、セキュアな領域内に格納されているプログラムコードを処理する際に、セキュアなドメイン内で動作し、それ程セキュアではない領域内に格納されているプログラムコードを処理する際に、それ程セキュアではないドメイン内で動作し、データ処理回路は、実行されるプログラムコードの格納位置に応えて、どのスタックにデータを格納するか、またはどのスタックからデータをロードするかを判定するように構成される。第１の領域内に格納されているプログラムコードに応えて、実行される関数を呼び出し、関数コードは、第２の領域内に格納されており、第２の領域は、第１の領域とは異なるセキュアレベルを有し、データ処理回路は、第１および第２の領域のうちのどちらがより低いセキュアレベルを有するかを判定し、プログラムコードおよび関数コードを実行する際、関数引数および戻りデータ値について、より低いセキュアレベルを伴う領域のスタックにアクセスするように構成される。
2015510189.tif 000002
【特許請求の範囲】
【請求項１】
データ処理装置であって、
プログラムコードに応えてデータ処理動作を実施するためのデータ処理回路と、
複数のレジスタと、
データを格納するためのデータストアであって、各領域がセキュアレベルを有する、複数の領域を備え、前記セキュアなドメイン内で動作している前記データ処理回路がアクセス可能であり、それ程セキュアではないドメイン内で動作している前記データ処理回路がアクセス不可能である機密データを格納するための少なくとも１つのセキュアな領域と、それ程セキュアではないデータを格納するためのそれ程セキュアではない領域とを備える、データストアと、を備え、
前記データストアは、前記セキュアな領域内に１つのセキュアなスタック、および前記それ程セキュアではない領域内に１つのそれ程セキュアではないスタックの少なくとも２つのスタックを備え、前記データ処理回路は、前記セキュアな領域内に格納されているプログラムコードを処理する際に、前記セキュアなドメイン内で動作し、前記それ程セキュアではない領域内に格納されているプログラムコードを処理する際に、前記それ程セキュアではないドメイン内で動作し、
前記データ処理回路は、実行される前記プログラムコードの前記格納位置に応えて、どのスタックにデータを格納するか、またはどのスタックからデータをロードするかを判定するように構成され、
第１の領域内に格納されているプログラムコードに応えて、実行される関数を呼び出し、前記関数コードは、第２の領域内に格納されており、前記第２の領域は、前記第１の領域とは異なるセキュアレベルを有し、前記データ処理回路は、前記第１の領域および前記第２の領域のうちのどちらがより低いセキュアレベルを有するかを判定し、前記プログラムコードおよび前記関数コードを実行する際、関数引数および戻りデータ値について、前記より低いセキュアレベルを伴う前記領域の前記スタックにアクセスするように構成される、データ処理装置。
【請求項２】
前記データ処理装置は、
スタック選択フラグを格納するための格納位置と、
フラグ設定回路と、をさらに備え、
前記データストアは、よりセキュアな領域およびそれ程セキュアではない領域の２つの領域を備え、
前記フラグ設定回路は、よりセキュアな関数を呼び出すそれ程セキュアではないプログラムコードに応えて、前記スタック選択フラグを設定し、任意の関数を呼び出すセキュアなプログラムコードに応えて、およびそれ程セキュアではない関数を呼び出すそれ程セキュアではないプログラムコードに応えて、前記スタック選択フラグを解除するように構成される、請求項１に記載のデータ処理装置。
【請求項３】
前記データ処理装置は、
スタック選択フラグを格納するための格納位置と、
フラグ設定回路と、をさらに備え、
前記フラグ設定回路は、前記スタック選択フラグを、前記データ処理回路が異なるセキュアレベルを有する領域間で遷移するのを検出するのに応えて、より低セキュアな領域を指示するよう設定し、前記データ処理回路が同一のセキュアレベルの関数呼び出しを実行するのを検出するのに応えて、現在のセキュアな領域を指示するよう設定するように構成される、請求項１に記載のデータ処理装置。
【請求項４】
前記データ処理回路は、前記プログラムコード内のスタック選択フラグ設定命令に応えて、前記スタック選択フラグを、それ程セキュアではない領域を指示する値に設定するように構成され、それ程セキュアではない関数を呼び出す前記プログラムコードは、前記関数引数を格納する前に、前記プログラムコード内に前記スタック選択フラグ設定命令を備える、請求項３に記載のデータ処理装置。
【請求項５】
前記プログラムコードに応答する前記データ処理回路は、前記関数引数および前記戻り値について、前記スタック選択フラグによって指示される前記スタックがアクセスされるように、前記スタック選択フラグに従って、前記関数引数および前記戻り値についてアクセスする前記スタックを判定する関数を呼び出す前記プログラムコードに応答する、請求項３または４のいずれか一項に記載のデータ処理装置。
【請求項６】
前記データ処理回路は、少なくとも１つのレジスタに、スタック上の少なくとも１つの位置の値がロードされることを指示する、前記プログラムコード内のレジスタスタックロード命令に応えて、前記スタック選択フラグおよび現在の処理ドメインの前記セキュアレベルに従って、どのスタックにアクセスするかを判定するように構成される、請求項２に記載のデータ処理装置。
【請求項７】
前記データ処理回路は、少なくとも１つのレジスタに、スタック上の少なくとも１つの位置の値がロードされることを指示する、前記プログラムコード内のレジスタスタックロード命令に応えて、前記スタック選択フラグに従って、どのスタックにアクセスするかを判定するように構成される、請求項３ないし５のいずれか一項に記載のデータ処理装置。
【請求項８】
前記データ処理回路は、少なくとも１つのレジスタ内に格納されている少なくとも１つの値が、スタック上の少なくとも１つの位置に格納されることを指示する、前記プログラムコード内のレジスタスタック格納命令に応えて、前記スタック選択フラグから、前記スタックが前記セキュアなスタックまたは前記それ程セキュアではないスタックを備えるかを判定するように構成される、請求項３ないし５、または７のいずれか一項に記載されるデータ処理装置。
【請求項９】
前記データ処理回路は、少なくとも１つのレジスタ内に格納されている少なくとも１つの値が、スタック上の少なくとも１つの位置に格納されることを指示する、前記プログラムコード内のレジスタスタック格納命令に応えて、前記スタック選択フラグおよび現在の処理ドメインの前記セキュアレベルに従って、前記スタックが前記セキュアなスタックまたは前記それ程セキュアではないスタックを備えるかを判定するように構成される、請求項２または６のいずれか一項に記載のデータ処理装置。
【請求項１０】
前記データ処理回路は、前記関数コードが前記それ程セキュアではない領域内にあり、前記プログラムコードが前記セキュアな領域内にあるのに応えて、戻りアドレスを前記セキュアなスタックにロードし、前記関数からの前記戻りアドレスが前記セキュアなスタック上にロードされていることを指示する値を前記リンクレジスタにロードする、ように構成される、請求項１ないし９のいずれか一項に記載のデータ処理装置。
【請求項１１】
前記データ処理回路は、前記プログラムコード内のスタック選択フラグ設定命令であって、実行可能なコードの標的アドレスを格納するためのレジスタを指定する、スタックフラグ設定命令に応えて、前記標的アドレスが、現在の動作領域と比較してそれ程セキュアではない領域内であるか否かを判定し、前記標的アドレスが、現在の動作領域と比較してそれ程セキュアではない領域内である場合に、前記それ程セキュアではない領域を指示するよう前記スタック選択フラグを設定するように構成される、請求項３ないし５、７、８、または、請求項３に従属する場合の１０、のいずれか一項に記載のデータ処理装置。
【請求項１２】
前記データ処理回路は、前記プログラムコード内のさらなるフラグ設定命令であって、実行可能なコードの標的アドレスを格納するレジスタを指定する、さらなるフラグ設定命令に応えて、前記標的アドレスが前記セキュアな領域内であるか、または前記それ程セキュアではない領域内であるかを判定し、前記標的アドレスが前記それ程セキュアではない領域内である場合に、前記それ程セキュアではない領域を指示するように前記スタック設定フラグを設定し、さらなるフラグを設定するように構成される、請求項３ないし５、７、８、１１、または、請求項３に従属する場合の１０、のいずれか一項に記載のデータ処理装置。
【請求項１３】
前記データ処理回路は、前記プログラムコード内の複数レジスタ消去命令に応えて、前記複数レジスタ消去命令によって指定される複数のレジスタ内に格納されている値を消去するように構成される、請求項１ないし１２のいずれか一項に記載のデータ処理装置。
【請求項１４】
前記データ処理装置は、現在実行しているコードが、セキュアな状態を格納するために、前記複数のレジスタのうちのどれを使用できるかを指示する値を格納するためのセキュアコンフィギュレーション格納位置を備え、前記データ処理回路は、よりセキュアな状態からそれ程セキュアではない状態に遷移する際に、前記セキュアコンフィギュレーション値によって指示される前記複数のレジスタを消去するように構成される、請求項１ないし１３のいずれか一項に記載のデータ処理装置。
【請求項１５】
前記データ処理回路は、例外処置回路を備え、前記例外処置回路は、例外の受信に応答して、前記レジスタのセット内に格納されている状態を消去するように構成され、前記レジスタの前記セット内の前記レジスタは、前記実行ドメインおよび前記例外が取り込まれる前記ドメインのセキュアレベルに依存する、請求項１ないし１４のいずれか一項に記載のデータ処理装置。
【請求項１６】
前記例外処置回路は、前記割り込みが前記セキュアなドメイン内で実行されており、前記さらなる割り込みの優先度が、同等以下であり、前記それ程セキュアではないドメインへの切り替えを指示しており、その上、前記データ処理回路が、前記割り込みの完了後に前記さらなる割り込みを取り込むように構成されており、
割り込まれた前記元のコードが前記セキュアなドメイン内に存在し、前記セットおよび前記さらなるレジスタが、前記セキュアなスタックに格納されて消去されるように、さらなるレジスタ内に格納されている前記状態を保存するように構成されている場合、ならびに、割り込まれた前記元のコードが前記非セキュアなドメイン内に存在する場合に、レジスタの前記セットを消去するように構成されている場合、
を除き、前記割り込みが完了する前に、さらなる割り込みの受信に応答して、さらなるスタック格納動作を実施しないように構成され、
前記割り込みは、前記セキュアなドメイン内で実行され、前記さらなる割り込みは、前記それ程セキュアではないドメイン内での実行への切り替えを指示し、優先度が前記割り込みと同等以上であり、前記さらなる割り込みは、前記割り込みの完了の前に取り込まれ、前記セットおよび前記さらなるレジスタ内に格納されている状態は、前記セキュアなスタックに保存され、前記セットおよびさらなるレジスタは、消去される、請求項１５に記載のデータ処理装置。
【請求項１７】
前記データ処理装置は、コードの現在実行している部分が、セキュアな状態を格納するために、前記複数のレジスタのうちのどれを使用できるかを指示する値を格納するためのセキュアコンフィギュレーション格納位置を備え、前記例外処置回路は、前記セキュアコンフィギュレーション格納位置に格納されている前記値、前記実行ドメインのセキュアレベル、および前記例外が取り込まれる前記ドメインから、前記レジスタの前記セット内の前記レジスタを判定する、請求項１５または１６のいずれか一項に記載のデータ処理装置。
【請求項１８】
前記データ処理装置は、例外戻り値を格納するための格納位置を備え、前記データ処理回路は、前記例外の取り込みを受けて、前記データ処理装置が動作しているドメインを指示するよう前記例外戻り値を設定するように構成され、前記例外処置回路は、例外から戻るのを受けて、前記例外戻り値内に格納されている前記値に従って、どのレジスタを前記スタックからの値で更新するかを判定する、請求項１５ないし１７のいずれか一項に記載のデータ処理装置。
【請求項１９】
前記データストアは、異なる機密度のデータを格納するための複数のセキュアな階層領域を備え、より低いレベルのセキュアなドメイン内で動作している前記データ処理回路は、より高いレベルのセキュアな領域内に格納されているデータにアクセス不可能であり、
前記データストアは、前記複数のセキュアな領域のそれぞれの中に少なくとも１つのスタックを備え、
前記スタック選択フラグを格納するための前記格納位置は、複数のビットを備え、
前記データ処理回路は、前記スタック選択フラグに従って、関数引数および戻り値についてどのスタックにアクセスするかを判定するように構成される、請求項３ないし５、７、８、１１、１２のいずれか一項、または、請求項３に従属する場合の請求項１０もしくは１３ないし１８のいずれか一項に記載のデータ処理装置。
【請求項２０】
前記データストアは、異なる機密度のデータを格納するための複数のセキュアな領域を備え、前記領域のうちの少なくとも２つは、同一の機密度のデータを格納する兄弟領域であり、より高いレベルのセキュアなドメイン内に格納されているデータは、前記兄弟領域内に格納されている前記データにアクセス可能であるが、より低いレベルのセキュアなドメイン内または他のセキュアな兄弟ドメイン内で動作している前記データ処理回路は、アクセス不可能であり、
前記データストアは、前記セキュアな領域のそれぞれの中に少なくとも１つのスタックと、前記兄弟領域のいずれかに格納されているプログラムコードがアクセス可能なさらなる兄弟スタックと、を備え、
前記兄弟領域のうちの一方に格納されているプログラムコードに応えて、関数を呼び出し、前記関数コードは、前記兄弟領域のうちの他方に格納されており、前記データ処理回路は、前記プログラムコードおよび前記関数コードを実行する際、前記関数によって使用される引数および前記関数から返されるデータを前記さらなる兄弟スタック上に格納するように構成される、請求項１ないし１９のいずれか一項に記載のデータ処理装置。
【請求項２１】
前記データストアは、異なる機密度のデータを格納するための複数のセキュアな階層領域を備え、より低いレベルのセキュアなドメイン内で動作している前記データ処理回路は、より高いレベルのセキュアな領域内に格納されているデータにアクセス不可能であり、前記領域のうちの少なくとも２つは、同一の機密度のデータを格納する兄弟領域であり、前記兄弟領域内に格納されている前記データは、より高いレベルのセキュアなドメイン内に格納されているデータにアクセス可能であるが、より低いレベルのセキュアなドメイン内または他方のセキュアな兄弟ドメイン内で動作している前記データ処理回路は、前記兄弟領域に格納されている前記データにアクセス不可能であり、
前記データストアは、前記複数のセキュアな領域のそれぞれの中に少なくとも１つのスタックと、前記兄弟領域のいずれかに格納されているプログラムコードがアクセス可能なさらなる兄弟スタックと、を備え、
前記スタック選択フラグを格納するための前記格納位置は、複数のビットを備え、前記スタック選択フラグ回路は、前記データ処理回路が、前記プログラムコードが格納されている前記領域、前記関数コードが格納されている前記領域、および前記セキュアレベルが等しく、前記兄弟セキュアレベルである前記領域のうちのより低いセキュアレベルの領域を指示する値に設定する関数に分岐する際、前記さらなる兄弟スタックを指示するように構成され、
前記データ処理回路は、前記スタック選択値に従って、前記関数引数および戻り値について、どのスタックにアクセスするかを判定するように構成される、請求項３ないし５、７、８、１１、１２、１９のいずれか一項、または、請求項３に従属する場合の請求項１０、１３ないし１８、もしくは２０のいずれか一項に記載のデータ処理装置。
【請求項２２】
データ処理装置上でデータを処理する方法であって、
プログラムコードに応えてデータ処理動作を実施するためのデータ処理回路と、
前記データ処理回路によって処理されるデータアイテムを格納するための複数のレジスタと、
データを格納するためのデータストアであって、前記セキュアなドメイン内で動作している前記データ処理回路がアクセス可能であり、それ程セキュアではないドメイン内で動作している前記データ処理回路がアクセス不可能である機密データを格納するための少なくとも１つのセキュアな領域と、それ程セキュアではないデータを格納するためのそれ程セキュアではない領域とを備える、データストアと、を備え、
前記データストアは、前記セキュアな領域内に１つのセキュアなスタック、および前記それ程セキュアではない領域内に１つのそれ程セキュアではないスタックの少なくとも２つのスタックを備え、前記データ処理回路は、処理中に、前記スタックと前記レジスタとの間でデータを転送するように構成され、
前記データ処理回路は、前記セキュアな領域内に格納されているプログラムコードを処理する際に、前記セキュアなドメイン内で動作し、前記それ程セキュアではない領域内に格納されているプログラムコードを処理する際に、前記それ程セキュアではないドメイン内で動作し、前記方法は、
前記データストア内に格納されているプログラムコードを実行することと、
実行されている前記プログラムコードの前記格納位置に応えて、どのスタックにデータを格納するか、またはどのスタックからデータをロードするかを判定することと、
第１の領域内に格納されているプログラムコードに応えて、実行される関数を呼び出すことであって、前記関数コードは、第２の領域内に格納されており、前記第２の領域は、前記第１の領域とは異なるセキュアレベルを有し、前記第１の領域および前記第２の領域のうちのどちらがより低いセキュアレベルを有するかを判定し、前記プログラムコードおよび前記関数コードを実行する際、関数引数および戻りデータ値について、前記より低いセキュアレベルを伴う、前記第１の領域または前記第２の領域の前記スタックにアクセスする、ことと、を含む、方法。
【請求項２３】
異なるセキュアレベルの２つのドメイン間で遷移する際に、スタック選択フラグを設定することであって、前記スタック選択フラグは、２つのドメインのうちのそれ程セキュアではないドメインを指示する、ことと、
前記スタック選択フラグに従って、どのスタックに関数引数および戻り値を格納するかを判定することと、をさらに含む、請求項２２に記載の方法。
【請求項２４】
少なくとも１つのレジスタに、スタック上の少なくとも１つの位置からの値がロードされることを指示する、前記プログラムコード内のレジスタスタックロード命令に応えて、前記スタック選択フラグに従って、前記スタックが、前記セキュアなスタックまたは前記それ程セキュアではないスタックを備えるかを判定し、前記値を前記少なくとも１つのレジスタにロードすることを含む、請求項２３に記載の方法。
【請求項２５】
少なくとも１つのレジスタ内に格納されている少なくとも１つの値が、スタック上の少なくとも１つの位置に格納されることを指示する、前記プログラムコード内のレジスタスタック格納命令に応えて、前記スタック選択フラグから、前記スタックが、前記セキュアなスタックまたは前記それ程セキュアではないスタックを備えるかを判定し、前記値を前記スタック内に格納することを含む、請求項２３または２４のいずれか一項に記載の方法。
【請求項２６】
前記プログラムコード内のスタック選択フラグ設定命令に応えて、前記スタックフラグ設定命令が、実行可能なコードの標的アドレスを格納するためのレジスタを指定し、前記標的アドレスが、現在の動作領域と比較してそれ程セキュアではない領域内であるか否かを判定し、前記標的アドレスが、現在の動作領域と比較してそれ程セキュアではない領域内である場合に、前記それ程セキュアではない領域を指示するように、前記スタック選択フラグを設定することを含む、請求項２３ないし２５のいずれか一項に記載の方法。
【請求項２７】
前記プログラムコード内のさらなるフラグ設定命令に応えて、前記さらなるフラグ設定命令が、実行可能なコードの標的アドレスを格納するためのレジスタを指定し、前記標的アドレスが、現在の動作領域と比較してそれ程セキュアではない領域内であるか否かを判定し、前記標的アドレスが、現在の動作領域と比較してそれ程セキュアではない領域内である場合に、前記それ程セキュアではない領域を指示するように、前記スタック選択フラグを設定し、前記さらなるフラグを設定することを含む、請求項２３ないし２６のいずれか一項に記載の方法。
【請求項２８】
前記プログラムコード内の複数レジスタ消去命令に応えて、前記複数レジスタ消去命令によって指定される複数のレジスタ内に格納されている値を消去することを含む、請求項２２ないし２７のいずれか一項に記載の方法。
【請求項２９】
処理回路によって実行される際、前記レジスタスタックロード命令によって指定される少なくとも１つのレジスタに、スタック上の少なくとも１つの位置の値をロードし、スタック選択フラグに従って、前記スタックが、データストアのよりセキュアな領域内にセキュアなスタックを備えるか、またはデータストアのそれ程セキュアではない領域内にそれ程セキュアではないスタックを備えるかを判定する、ように前記データ処理回路を制御する、レジスタスタックロード命令を備える、コンピュータプログラム製品。
【請求項３０】
処理回路によって実行される際、前記レジスタスタック格納命令によって指定される少なくとも１つのレジスタ内の少なくとも１つの値を、スタック上の少なくとも１つの位置に格納し、スタック選択フラグに従って、前記スタックが、データストアのよりセキュアな領域内にセキュアなスタックを備えるか、またはデータストアのそれ程セキュアではない領域内にそれ程セキュアではないスタックを備えるかを判定する、ように前記データ処理回路を制御する、レジスタスタック格納命令を備える、コンピュータプログラム製品。
【請求項３１】
処理回路によって実行される際、
前記命令によって指定されるレジスタ内に格納されている実行可能なコードの標的アドレスが、現在の動作領域と比較してそれ程セキュアではない領域内であるか否かを判定し、前記命令によって指定されるレジスタ内に格納されている実行可能なコードの標的アドレスが、現在の動作領域と比較してそれ程セキュアではない領域内である場合に、前記それ程セキュアではない領域を指示するよう前記スタック選択フラグを設定するように前記データ処理回路を制御する、スタック選択フラグ設定命令を備える、コンピュータプログラム製品。
【請求項３２】
処理回路によって実行される際、
前記命令によって指定されるレジスタ内に格納されている実行可能なコードの標的アドレスが、現在の動作領域と比較してそれ程セキュアではない領域内であるか否かを判定し、前記命令によって指定されるレジスタ内に格納されている実行可能なコードの標的アドレスが、現在の動作領域と比較してそれ程セキュアではない領域内である場合に、前記それ程セキュアではない領域を指示するよう前記スタック選択フラグを設定し、さらなるフラグを設定する、ように前記データ処理回路を制御する、さらなるフラグ設定命令を備える、コンピュータプログラム製品
【請求項３３】
処理回路によって実行される際、前記複数レジスタ消去命令によって指定される複数のレジスタ内に格納されている値を消去するように前記データ処理回路を制御する、複数レジスタ消去命令を備える、コンピュータプログラム製品。
【請求項３４】
データ処理装置であって、
プログラムコードに応えてデータ処理動作を実施するためのデータ処理手段と、
複数のレジスタと、
データを格納するためのデータ格納手段であって、異なるセキュアレベルを有する複数の領域を備え、前記セキュアなドメイン内で動作している前記データ処理手段がアクセス可能であり、それ程セキュアではないドメイン内で動作している前記データ処理手段がアクセス不可能である機密データを格納するための少なくとも１つのセキュアな領域と、それ程セキュアではないデータを格納するためのそれ程セキュアではない領域とを備える、データ格納手段とを備え、
前記データ格納手段は、前記セキュアな領域内に１つのセキュアなスタック、および前記それ程セキュアではない領域内に１つのそれ程セキュアではないスタックの少なくとも２つのスタックを備え、前記データ処理手段は、前記セキュアな領域内に格納されているプログラムコードを処理する際に、前記セキュアなドメイン内で動作し、前記それ程セキュアではない領域内に格納されているプログラムコードを処理する際に、前記それ程セキュアではないドメイン内で動作し、
前記データ処理手段は、実行されている前記プログラムコードの前記格納位置に応えて、どのスタックにデータを格納するか、またはどのスタックからデータをロードするかを判定し、
第１の領域内に格納されているプログラムコードに応えて、実行される関数を呼び出し、前記関数コードは、第２の領域内に格納されており、前記第２の領域は、前記第１の領域とは異なるセキュアレベルを有し、前記データ処理手段は、前記第１の領域および前記第２の領域のうちのどちらがより低いセキュアレベルを有するかを判定し、前記プログラムコードおよび前記関数コードを実行する際、関数引数および戻りデータ値について、前記より低いセキュアレベルの前記領域の前記スタックにアクセスする、データ処理装置。
【請求項３５】
データ処理装置であって、
プログラムコードに応えてデータ処理動作を実施するためのデータ処理回路と、
複数のレジスタと、
データを格納するためのデータストアであって、各領域がセキュアレベルを有する複数の領域を備え、前記セキュアなドメイン内で動作している前記データ処理回路がアクセス可能であり、それ程セキュアではないドメイン内で動作している前記データ処理回路がアクセス不可能である機密データを格納するための少なくとも１つのセキュアな領域と、それ程セキュアではないデータを格納するためのそれ程セキュアではない領域とを備える、データストアと、を備え、
前記データストアは、前記セキュアな領域内に１つのセキュアなスタック、および前記それ程セキュアではない領域内に１つのそれ程セキュアではないスタックの少なくとも２つのスタックを備え、
前記データ処理回路は、例外処置回路を備え、前記例外処置回路は、例外の受信に応答して、前記データ処理回路が、前記セキュアなドメイン内で実行しており、前記割り込みが、それ程セキュアではないドメイン内のプログラムコードを実行するように切り替わることを指示する際に、前記レジスタのセットを消去するように構成され、前記レジスタの前記セット内の前記レジスタは、前記実行ドメインのセキュアレベルおよび前記例外が取り込まれる前記ドメインに依存する、データ処理装置。
【請求項３６】
前記データ処理回路は、前記レジスタの前記セットを消去する前に、前記レジスタの前記セット内に格納されている状態を、前記データ処理回路が実行している前記ドメインの前記スタックに保存するようにさらに構成される、請求項３５に記載のデータ処理装置。
【請求項３７】
前記データ処理装置は、現在実行しているコードが、セキュアな状態を格納するために、前記複数のレジスタのうちのどれを使用できるかを指示する値を格納するためのセキュアコンフィギュレーション格納位置を備え、前記データ処理回路は、前記セキュアコンフィギュレーション値によって指示される前記複数のレジスタ、前記実行ドメインのセキュアレベル、および前記例外が取り込まれる前記ドメインに従って、どのレジスタがレジスタの前記セット内であるかを判定するように構成される、請求項３５または３６のいずれか一項に記載のデータ処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術分野は、データ処理の分野に関し、より具体的には、機密データおよびコードの処理に関する。
【背景技術】
【０００２】
多くのデータ処理システムおよびアーキテクチャは、機密データおよびコードセクションを、無許可の人または過程によるアクセスから隔離し、保護する方法を提供する。セキュリティを提供することができることが重要ではあるが、この保護に関連する性能および回路エリアにおける諸経費が存在する。
【０００３】
マイクロコントローラ等の小さいシステムでは、これらの諸経費を低く抑えることが非常に重要であり、したがって、一部では、セキュリティレベルと性能との間で妥協することが必要な場合もある。
【０００４】
データおよびコードをセキュアに保つ１つの方法は、Trustzoneアーキテクチャを伴う、英国CambridgeのＡＲＭ（登録商標）によって提供され、Trustzoneアーキテクチャには、セキュアな状態および非セキュアな状態が存在し、状態間で遷移するために、例外命令が使用され、例外ハンドラは、セキュアな側のセキュリティを保護する。この手法は、高度のセキュリティを提供するが、セキュリティ状態を変更するのに、ソフトウェア例外ハンドラの形態のかなりのソフトウェア介入が必要となり、これは、すべての呼び出しが例外ハンドラを通してプロキシされなければならないため、システムの性能を低下させ、セキュアなソフトウェアのための外部アプリケーションプログラムインターフェースＡＰＩを開発するのに必要となる労力量が増加する。
【０００５】
特許文献１および特許文献２は、データストアが、セキュアな側および非セキュアな側を有し、この現在実行されているコードのデータストア内の位置が、プロセッサが動作しているドメイン、およびしたがって、アクセスすることが許可されているデータを判定する、代替となるセキュアなシステムを開示する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】米国特許第７９６６４６６号
【特許文献２】米国特許公開第２００８／０２５０２１６号
【発明の概要】
【０００７】
本発明の第１の態様は、プログラムコードに応えてデータ処理動作を実施するためのデータ処理回路と、複数のレジスタと、データを格納するためのデータストアとを備える、データ処理装置であって、該データストアは、各領域がセキュアレベルを有する複数の領域を備え、該セキュアなドメイン内で動作している該データ処理回路がアクセス可能であり、それ程セキュアではないドメイン内で動作している該データ処理回路がアクセス不可能である機密データを格納するための少なくとも１つのセキュアな領域と、それ程セキュアではないデータを格納するためのそれ程セキュアではない領域とを備え、該データストアは、該セキュアな領域内に１つのセキュアなスタック、および該それ程セキュアではない領域内に１つのそれ程セキュアではないスタックの少なくとも２つのスタックを備え、該データ処理回路は、該セキュアな領域内に格納されているプログラムコードを処理する際に、該セキュアなドメイン内で動作し、該それ程セキュアではない領域内に格納されているプログラムコードを処理する際に、該それ程セキュアではないドメイン内で動作し、該データ処理回路は、実行される該プログラムコードの該格納位置に応えて、どのスタックにデータを格納するか、またはどのスタックからデータをロードするかを判定するように構成され、第１の領域内に格納されているプログラムコードに応えて、実行される関数を呼び出し、該関数コードは、第２の領域内に格納されており、該第２の領域は、該第１の領域とは異なるセキュアレベルを有し、該データ処理回路は、該第１の領域および該第２の領域のうちのどちらがより低いセキュアレベルを有するかを判定し、該プログラムコードおよび該関数コードを実行する際、関数引数および戻りデータ値について、該より低いセキュアレベルを伴う該領域の該スタックにアクセスするように構成される、データ処理装置を提供する。
【０００８】
本発明は、セキュアなデータおよびセキュアなコードへのアクセスが制限されていることが重要であるが、このセキュリティが低遅延でエリア効率良く提供されることも時に重要であることを認識する。
【０００９】
メモリの異なるセキュアな領域内の異なるスタックの使用は、処理中にデータを格納する既知の方法である。これらのスタックは、タスク間およびドメイン間で切り替わる際、後で復元することができるように、プロセッサの現在の状態を格納するためにしばしば使用される。１つのドメイン内で処理されるデータおよびコードを、別のドメイン内で処理されるデータおよびコードから隔離することは、１つのドメイン内のプログラムが、別のドメイン内の関数を呼び出し、それら２つの間で関数引数および戻り値を受け渡す必要がある場合、より複雑になる。セキュアなドメインと非セキュアなドメインとの間で切り替わる際、ドメイン間でのいかなるデータ転送も、非セキュアなプログラムが機密データを入手可能になることを回避するために、慎重に制御されなければならない。本発明は、関数を呼び出したドメインおよび関数が実行しているドメインから、関数引数および戻り値にアクセスすることができ、その一方で、他のデータがそれ自体の領域内に維持されるように、セキュアな領域への切り替えをもたらす関数呼び出しを検出する際に、関数引数および戻り値についてどのスタックがアクセスされるかを制御するために、異なるセキュアな領域内のスタックを活用し、また、現在実行されているコードの格納位置から現在のセキュリティレベルを判定する能力も活用する。
【００１０】
このようにして、わずかな追加のハードウェアを用いて、ルーチンを取り扱う専用ソフトウェアを用いずに、効率的に、異なるセキュリティドメイン間で切り替わること、およびそれらの間でデータを転送することができる。
【００１１】
関数引数および戻りデータ値を格納するために、より低いセキュアレベルのスタックを使用することができるが、すべての関数引数および戻りデータ値がスタックに格納されない場合があり、いくつかの実施形態では、関数を呼び出したプログラムおよび呼び出された関数の両方がアクセス可能な特定のレジスタが、値を格納するために利用可能であってもよく、その場合、これらは、関数引数および戻りデータ値を格納するために使用されてもよく、プログラムコードと関数との間でより多くの値を受け渡す必要がある場合にのみ、より低いセキュアレベルのスタックが使用されることに留意されたい。
【００１２】
関数を呼び出すステップは、コードの別のセクションに分岐するプログラム内のコードのうちの１つのセクションに関連し、２つのコードセクション間でデータ値を受け渡す必要があることに留意されたい。これは、関数を呼び出すプログラムとして記載されるが、２つのコードセクション間に大きな違いはなくてもよく、呼び出し側がプログラムと見なされ、呼び出される側が関数であると見なされることを理解されたい。したがって、呼び出し側は、特定のタスクを実施するためにより小さい関数を呼び出す大きいプログラムであってもよく、または別の同様のサイズのプログラムに分岐するプログラムであってもよく、またはさらなる関数もしくはアプリケーションを呼び出す関数であってもよい。
【００１３】
いくつかの実施形態では、該データ処理装置は、スタック選択フラグを格納するための格納位置と、フラグ設定回路とをさらに備え、該データストアは、よりセキュアな領域およびそれ程セキュアではない領域の２つの領域を備え、該フラグ設定回路は、よりセキュアな関数を呼び出すそれ程セキュアではないプログラムコードに応えて、該スタック選択フラグを設定し、任意の関数を呼び出すセキュアなプログラムコードに応えて、およびそれ程セキュアではない関数を呼び出すそれ程セキュアではないプログラムコードに応えて、該スタック選択フラグを解除するように構成される。
【００１４】
どのスタックが使用されるべきかを処理回路に指示する１つの方法は、プログラムコードがセキュアなドメイン間で切り替わる際に自動的に設定される、スタック選択フラグを使用することである。これは、回路が、特定の時点において、ハードウェアによって制御され、したがって、使用されるスタックを判定することを可能にする、セキュアかつ低遅延な簡単な方法である。２つのドメインがある場合、関数が呼び出される際に、ハードウェアが、セキュアな領域に対するいずれかの変更に従って設定または解除することができる、単純な１ビットフラグを使用することができる。この点において、フラグの設定とは、フラグを１に設定することを意味してもよく、又はフラグを０に設定することを意味してもよく、フラグの解除とは、フラグを他の値に設定することである。また、フラグを設定するハードウェア回路は、処理回路の一部であってもよく、またはデータ処理装置内のどこかに分散されてもよく、またはあるデータアクセス制御回路の一部であってもよいことにも留意されたい。
【００１５】
いくつかの実施形態では、該データ処理装置は、スタック選択フラグを格納するための格納位置と、フラグ設定回路とをさらに備え、該フラグ設定回路は、該スタック選択フラグを、該データ処理回路が異なるセキュアレベルを有する領域間で遷移するのを検出するのに応えて、より低セキュアな領域を指示するよう設定し、該データ処理回路が同一のセキュアレベルの関数呼び出しを実行するのを検出するのに応えて、現在のセキュアな領域を指示するよう設定するように構成される。
【００１６】
いくつかの実施形態では、スタック選択フラグは、処理回路が遷移している２つのセキュアな領域のうちのより低い方を指示してもよい。２つ以上の異なるセキュアレベルが存在する場合、単純なフラグの設定および解除は、レベル間を区別するには十分ではなく、フラグに複数ビット値が必要な場合があり、ハードウェアは、領域がその間で遷移する場合、それ程セキュアではない領域を指示する。
【００１７】
いくつかの実施形態では、該データ処理回路は、該プログラムコード内のスタック選択フラグ設定命令に応えて、該スタック選択フラグを、それ程セキュアではない領域を指示する値に設定するように構成され、それ程セキュアではない関数を呼び出す該プログラムコードは、該関数を呼び出す前に、該プログラムコード内に該スタック選択フラグ設定命令を備える。
【００１８】
回路は、スタック選択フラグを自動的に設定するように、ドメイン間での遷移に応答するが、これはまた、コードに挿入されるソフトウェア命令によっても設定することができる。これは、遷移が正しいフラグ設定を可能にするのに十分ではない場合に、重要であり得る。したがって、例えば、プログラムコードが、それ程セキュアではない関数を呼び出している場合、それ程セキュアではないコードへの遷移は、２つの異なるセキュアな領域のみが存在する場合には、フラグを解除し、３つ以上が存在する場合には、より低い領域を指示するようにフラグを設定する。しかしながら、遷移の前に、セキュアなプログラムは、関数引数をスタックに格納する必要があり、したがって、選択スタックフラグが、それ程セキュアではないスタックを指示するように設定されない限り、それ程セキュアではない関数によって使用される引数は、アクセスすることができないセキュアなスタック上に格納される。
【００１９】
いくつかの実施形態では、該データ処理装置は、該プログラムコードが関数を呼び出すのに応答して、該スタック選択フラグによって指示される該スタックが、該関数引数および該戻り値についてアクセスされるように、該スタック選択フラグに従って、該関数引数および該戻り値についてアクセスする該スタックを判定する。
【００２０】
前述されるように、実行されているプログラムコードの格納位置は、一般的に、どのスタックを使用するかのわかりやすい指示である。しかしながら、異なるセキュリティドメイン内の関数が呼び出されている場合、２つのドメイン間でデータ値が受け渡される場合に、両方の関数およびそれを呼び出しているプログラムがアクセス可能なスタックを使用する必要があり得るため、この場合では、どのスタックが使用されるべきかを判定するために、スタック選択フラグを使用することができる。
【００２１】
いくつかの実施形態では、該データ処理回路は、少なくとも１つのレジスタに、スタック上の少なくとも１つの位置の値がロードされることを指示する、該プログラムコード内のレジスタスタックロード命令に応えて、該スタック選択フラグおよび現在の処理ドメインの該セキュアレベルに従って、どのスタックにアクセスするかを判定するように構成される。
【００２２】
いくつかの実施形態では、該データ処理回路は、少なくとも１つのレジスタに、スタック上の少なくとも１つの位置の値がロードされることを指示する、該プログラムコード内のレジスタスタックロード命令に応えて、該スタック選択フラグに従って、どのスタックにアクセスするかを判定するように構成される。
【００２３】
正しいスタックが選択されるように、スタックからレジスタに値がロードされる際に、スタック選択フラグが考慮されるべきであるということを指示する、特別命令を有すると便利である場合がある。このようにして、この新しい命令を使用することによって、ドメイン間でデータを受け渡すことを可能にする一方で、システムのセキュリティを維持することができる。スタック選択フラグは、ドメインを指示するのに十分であってもよく、またはフラグおよび現在の動作ドメインが、使用するスタックの指示を提供してもよい。
【００２４】
いくつかの実施形態では、該データ処理回路は、少なくとも１つのレジスタ内に格納されている少なくとも１つの値が、スタック上の少なくとも１つの位置に格納されることを指示する、該プログラムコード内のレジスタスタック格納命令に応えて、該スタック選択フラグから、該スタックが、該セキュアなスタックまたは該それ程セキュアではないスタックを備えるかを判定するように構成される。
【００２５】
いくつかの実施形態では、該データ処理回路は、少なくとも１つのレジスタ内に格納されている少なくとも１つの値が、スタック上の少なくとも１つの位置に格納されることを指示する、該プログラムコード内のレジスタスタック格納命令応えて、該スタック選択フラグおよび現在の処理ドメインの該セキュアレベルから、該スタックが、該セキュアなスタックまたは該それ程セキュアではないスタックを備えるかを判定するように構成される。
【００２６】
スタックロード命令と同様に、異なるセキュリティドメインで動作可能な関数がプログラムから呼び出される場合に、異なるセキュリティドメイン間でデータ値を転送する際に、確実に正しいスタックが使用されるように、スタック選択フラグと関連して使用され、現在のセキュリティドメインと関連して使用されてもよい、スタック格納命令もまた存在する。
【００２７】
いくつかの実施形態では、該データ処理回路は、該関数コードが該それ程セキュアではない領域内にあり、該プログラムコードが該セキュアな領域内にあるのに応えて、戻りアドレスを該セキュアなスタック上にロードし、該関数からの該戻りアドレスが該セキュアなスタック上にロードされていることを指示する値を該リンクレジスタにロードするように構成される。
【００２８】
よりセキュアな領域からそれ程セキュアではない領域に遷移する場合、非セキュアな側は、戻りアドレスを入手可能であるべきではない。戻りアドレスを読み出すためにアクセスされるべきであるセキュアなスタックを指示するために、リンクレジスタを使用することは、最小限の追加のハードウェア費用または性能影響でプログラムカウンタのセキュリティを保護する、単純な方法である。
【００２９】
いくつかの実施形態では、該データ処理回路は、実行可能なコードの標的アドレスを格納するレジスタを指定する、該プログラムコード内のスタック選択フラグ設定命令に応えて、該標的アドレスが、該セキュアな領域内であるか、または該それ程セキュアではない領域内であるかを判定し、該標的アドレスが該それ程セキュアではない領域内である場合に、該それ程セキュアではない領域を指示するように、該スタック選択フラグを設定するように構成される。
【００３０】
前述されるように、スタック設定フラグは、自動的に設定されてもよく、または命令に応えて設定されてもよい。単純なスタックフラグ設定命令に加えて、実行可能なコード、例えば、実行される後続コードの標的アドレスを指示する、スタックフラグ設定命令もまた利用可能であってもよい。これは、プログラムがセキュアなドメイン内で実行している場合に、呼び出される関数が、呼び出したプログラムが実行しているドメインと同一のドメイン内で実行されるか否かが不明である場合に使用することができる。実際の実行中、この命令を使用することで、呼び出されたコードの標的アドレスを調べることが可能になり、呼び出しているコードと異なるセキュアな領域内である場合、これを指示するように、スタック選択フラグを適切な値に設定することができる。さらに、関数が実行された後でいずれかの戻り値を探す際、実行されたコードのアドレスは、必須情報を提供する。
【００３１】
いくつかの実施形態では、該データ処理回路は、実行可能なコードの標的アドレスを格納するためのレジスタを指定する、該プログラムコード内のさらなるフラグ設定命令に応えて、該標的アドレスが、該セキュアな領域内であるか、または該それ程セキュアではない領域内であるかを判定し、該スタック選択フラグを設定し、該標的アドレスが該それ程セキュアではない領域内である場合に、さらなるフラグを設定するように構成される。
【００３２】
同一の条件に応えて、スタック選択フラグを設定するだけではなく、またさらなるフラグも設定する、追加の命令もまた、有用である場合がある。プロセッサが特定の事象を条件とする命令を使用する場合、これらの事象を指示するようにフラグを設定することができる。いくつかの命令は、スタック選択フラグが設定されているか否かに従って実行されるべきである場合があり、その場合、スタック選択フラグおよびさらなるフラグの両方を設定する命令を使用することが、これを実現する便利な方法である可能性があり、次いで、このさらなるフラグを条件とする命令を使用することができる。使用することができるさらなるフラグの一例は、ゼロフラグである。
【００３３】
いくつかの実施形態では、該データ処理回路は、該プログラムコード内の複数レジスタ消去命令に応えて、該複数レジスタ消去命令によって指定される複数のレジスタ内に格納されている値を消去するように構成される。
【００３４】
処理回路が実行することのできる複数レジスタ消去命令を有することが有利である場合がある。セキュアなドメインから非セキュアなドメインに切り替わる際、非セキュアなドメインは、セキュアなドメイン内で実行しているセキュアなコードによってレジスタ内に格納された値を入手可能であるべきではない。したがって、単純に複数レジスタ消去命令を実行することが、これらの値を消去する便利な方法である場合がある。
【００３５】
いくつかの実施形態では、該データ処理装置は、現在実行しているコードが、セキュアな状態を格納するために、該複数のレジスタのうちのどれを使用できるかを指示する値を格納するためのセキュアコンフィギュレーション格納位置を備え、該データ処理回路は、よりセキュアな状態からそれ程セキュアではない状態に遷移する際に、該セキュアコンフィギュレーション値によって指示される該複数のレジスタを消去するように構成される。
【００３６】
セキュアな状態からそれ程セキュアではない状態に遷移する際、それ程セキュアではない側は、レジスタ内に格納されている機密データにアクセス可能であるべきではなく、そのため、レジスタは、遷移する前に消去されるべきである。場合によっては、機密データを格納するために、すべてのレジスタが使用されるわけではなく、これは、ドメインのセキュアレベルおよび実行されているコードに依存する場合がある。その場合、それ程セキュアではないドメインに切り替わる際に、処理回路が、単純に機密データを格納し得るレジスタを消去することができ、他のレジスタは、消去する必要がなく、それによって、時間および電力を削減するように、セキュアコンフィギュレーション格納位置内に格納されているこの情報が入手可能であれば有利である。この点において、多くの場合、セキュアなドメイン内で実行している際、レジスタを消去する前に、セキュアな状態は、保存されなければならず、その場合、どのレジスタにこの状態が格納されるか、およびしたがって、どのレジスタが保存するかを判定するために、セキュアコンフィギュレーションレジスタが使用されることに留意されたい。レジスタから状態を格納することは、時間および電力がかかり、したがって、任意の所与の時間に、消去し、保存するために必要な数を判定することができることが有利である。
【００３７】
いくつかの実施形態では、該データ処理回路は、例外処置回路を備え、該例外処置回路は、例外の受信に応答して、該レジスタの該セットを消去するように構成され、該レジスタの該セット内の該レジスタは、該実行ドメインのセキュアレベルおよび該例外が取り込まれる該ドメインに依存する。
【００３８】
セキュリティドメイン間で遷移する例外を取り込む際、処理回路は、レジスタを消去する必要がある場合があり、また、状態をスタックに格納する必要もある場合がある。状態を消去し、場合によっては格納する必要があるレジスタの数は、プロセッサが動作しているドメイン、および例外のドメインに依存する。例えば、それ程セキュアではない状態に遷移する際、機密データを格納するために使用され得るレジスタのセットは、それ程セキュアではない側がデータを入手不可能となるように、消去されるべきである。この点において、レジスタのセットは、現在実行しているコードによって、セキュアなデータを格納するために使用されてもよいレジスタである。したがって、これは、すべてのレジスタであってもよく、またはそれらの一部だけであってもよく、これは、おそらく、セキュアコンフィギュレーション値によって指示される。
【００３９】
いくつかの実施形態では、該例外処置回路は、該割り込みが該セキュアなドメイン内で実行されており、該さらなる割り込みの優先度が、同等以下であり、該それ程セキュアではないドメインへの切り替えを指示しており、その上、該データ処理回路が、該割り込みの完了後に該さらなる割り込みを取り込むように構成されており、割り込まれた該元のコードが該セキュアなドメイン内に存在する場合に、該セットおよび該さらなるレジスタが、該セキュアなスタックに格納されて消去されるように、さらなるレジスタ内に格納されている該状態を保存するように構成されている場合、ならびに、割り込まれた該元のコードが該非セキュアなドメイン内に存在する場合に、レジスタの該セットを消去するように構成されている場合を除き、該割り込みが完了する前に、さらなる割り込みの受信に応答して、さらなるスタック格納動作を実施しないように構成され、該割り込みは、該セキュアなドメイン内で実行され、該さらなる割り込みは、該それ程セキュアではないドメイン内での実行への切り替えを指示し、優先度が該割り込みと同等以上であり、該さらなる割り込みは、該割り込みの完了の前に取り込まれ、該セットおよび該さらなるレジスタ内に格納されている状態は、該セキュアなスタックに保存され、該セットおよびさらなるレジスタは、消去される。
【００４０】
異なるセキュリティの領域間で確実にデータが漏れないようにするために注意する必要があるさらなる状況は、割り込みが受信される際である。本発明の実施形態が、関数呼び出しに応えて遷移するのを制御するのと同様に効率的かつ安全に、割り込み過程を制御するために、本発明の実施形態を使用することができる。この点において、一般的に、例外に続いて、プロセッサの現在の状態を保持するレジスタのセットを復元する必要があり、一般的に、例外の取り込みを受けて、プロセッサの現在の状態を保持するレジスタのセットが、スタックに格納されるべきである。しかしながら、セキュアな状態から非セキュアな状態になる場合、非セキュアな側は、機密データを格納し得るすべてのレジスタ内の値を入手可能であるべきではなく、それらはすべて、セキュアなスタックに保存されて、消去される必要がある場合がある。第１の割り込みが完了する前にさらなる割り込みが到着する場合、さらなる問題が生じる。さらなるスタック格納動作を実施する必要はない場合があるが、しかしながら、さらなるデータ格納が必要である状況が存在し得る。
【００４１】
例えば、第１の割り込みは、セキュアなドメインからのものであり、セキュアなドメイン内で実行するものであり、さらなる割り込みは、優先度がより低く、それ程セキュアではないドメイン内のものである場合、第１の割り込みが終了した際に、セキュアなドメインから非セキュアなドメインに変わり、その時点で、一般的にスタックに格納される（およびしたがって、既に格納されている）サブセット内ではなく、機密データを格納するレジスタセット内にあるレジスタは、セキュアなスタックに格納される必要がある。次いでレジスタを、さらなる割り込みが実行される前に、データの損失なく、安全に消去することができる。
【００４２】
代替する状況では、第１の割り込みは、それ程セキュアではないドメインから取り込まれるが、セキュアなドメイン内で実行される。これが発生する場合、セキュリティ問題はなく、したがって、レジスタのサブセット（呼び出し側が保存したレジスタである）だけが、スタックに格納される。しかしながら、それ程セキュアではないドメイン内での実行への切り替えを指示する、さらなる割り込みが到着する場合、注意しなければならない、セキュアなドメインからそれ程セキュアではないドメインへの切り替えが存在する。さらなる割り込みの優先度が、第１の割り込みより高い場合、第１の割り込みの完了の前に、さらなる割り込みが取り込まれ、セット内のサブセットおよびさらなるレジスタ内に格納されている状態は、セキュアなスタックに保存され、レジスタが消去されるべきであり、これは、第１の割り込みの第１の命令が実行されたと見なす。そうではない場合、レジスタは、いかなるセキュアなデータも含有せず、レジスタを保存または消去する必要はない。しかしながら、さらなる割り込みの優先度がより低い場合、さらなる割り込みは、第１の割り込みが完了した後にのみ取り込まれ、この時点で、セキュアな状態はもはや要求されず、保存する必要はないが、しかしながら、機密データを格納し得るレジスタのセットは、消去されるべきである。
【００４３】
いくつかの実施形態では、該データ処理装置は、コードの現在実行している部分が、セキュアな状態を格納するために、該複数のレジスタのうちのどれを使用できるかを指示する値を格納するためのセキュアコンフィギュレーション格納位置を備え、該例外処置回路は、該セキュアコンフィギュレーション格納位置に格納されている該値から、該サブセットおよび該レジスタのうちの該さらなる１つを判定する。
【００４４】
データ処理装置は、多くのレジスタを有するが、いずれの時点でも、いくつかのみが、セキュアな状態を格納するために使用されてもよい。そのような場合、どのレジスタがセキュアな状態を格納するために使用されるかを指示する、セキュアコンフィギュレーション格納位置に格納されているセキュアコンフィギュレーション値を有することが有利である場合がある。そのような場合、この値から、レジスタのセットを判定することができ、これらのみを、セキュアなスタックに保存する必要があり、他のレジスタは、それらの値を完全なままにしておくことができる。同様に、これらのレジスタのみを消去する必要がある。
【００４５】
いくつかの実施形態では、該データ処理装置は、例外戻り値を格納するための格納位置を備え、該データ処理回路は、該例外の取り込みを受けて、該データ処理装置が動作しているドメインを指示するよう該例外戻り値を設定するように構成されており、該例外処置回路は、例外から戻るのを受けて、該例外戻り値に格納されている該値に従って、どのレジスタを該スタックからの値で更新するかを判定する。
【００４６】
このように割り込みを処置することは、わずかな追加のハードウェアまたはソフトウェアを必要とする場合があり、低遅延である場合があるが、例外が取り込まれたドメインのセキュアレベルの知識を必要とする場合がある。これは、どのスタックをレジスタで更新するか、およびいくつのレジスタがそのスタックに格納されるかを判定する際に重要である場合がある。特に、初期状態がセキュアな状態であり、非セキュアな状態によってレジスタのセットが見られることを回避するために、レジスタのセットがセキュアなスタックに保存されている場合、これらのレジスタのすべてを復元することができるように、これは、既知である必要がある。状態がスタックに保存されているレジスタの数は、初期状態のセキュリティおよび遷移される状態のセキュリティによって変化するため、復元する際、初期状態に関する値情報が既知である必要がある場合がある。
【００４７】
いくつかの実施形態では、該データストアは、異なる機密度のデータを格納するための複数のセキュアな階層領域を備え、より低いレベルのセキュアなドメイン内で動作している該データ処理回路は、より高いレベルのセキュアな領域内に格納されるデータにアクセス不可能であり、
該データストアは、該複数のセキュアな領域のそれぞれの中に少なくとも１つのスタックを備え、
該スタック選択フラグを格納するための該格納位置は、複数のビットを備え、該データ処理回路は、該スタック選択フラグに従って、関数引数および戻り値についてどのスタックにアクセスするかを判定するように構成される。
【００４８】
いくつかの実施形態では、１つのセキュアな領域、および１つの非セキュア、またはそれ程セキュアではない領域の２つの領域のみが存在する場合があるが、他の実施形態では、複数の異なる階層セキュアレベルを有する複数の異なる領域が存在してもよい。したがって、最もセキュアなドメイン内で実行されるコードは、すべての領域内に格納されているデータへのアクセスを有し、一方、それ程セキュアではないドメイン内で実行しているコードは、それ自体のセキュアな領域内および他のより低セキュアな領域内に格納されているデータへのアクセスのみを有する。そのようなセキュアな階層領域が存在する場合、スタック選択フラグは、アクセスされるスタックが存在する実際のセキュアな領域を指示するために、多数のビットを備える必要がある場合がある。そのような場合、指示される領域は、プログラムコードおよび関数コードが格納されている、２つの領域のうちのより低いセキュアレベルの領域である。このようにして、フラグは、関数引数および戻り値についてどのスタックにアクセスするかを指示する。
【００４９】
いくつかの実施形態では、該データストアは、異なる機密度のデータを格納するための複数のセキュアな領域を備え、該領域のうちの少なくとも２つは、同一の機密度のデータを格納する兄弟領域であり、より高いレベルのセキュアなドメイン内に格納されているデータは、該兄弟領域内に格納されている該データにアクセス可能であるが、より低いレベルのセキュアなドメイン内または他のセキュアな兄弟ドメイン内で動作している該データ処理回路は、該兄弟領域内に格納されている該データにアクセス不可能であり、該データストアは、該セキュアな領域のそれぞれの中に少なくとも１つのスタックと、該兄弟領域のいずれかに格納されているプログラムコードがアクセス可能なさらなる兄弟スタックとを備え、該兄弟領域のうちの一方に格納されているプログラムコードに応えて、関数を呼び出だし該関数コードは、該兄弟領域のうちの他方に格納されており、該データ処理回路は、該プログラムコードおよび該関数コードを実行する際、該さらなる兄弟スタック上の、該関数によって使用される引数および該関数から返されるデータにアクセスするように構成される。
【００５０】
階層セキュアレベルに加えて、また、兄弟セキュアレベルと称される同一のセキュアレベルを有するが、相互がアクセス不可能な特定の領域も存在してもよい。これは、異なる提供元からのコードが格納され、どちらも、他方がそれらのコードへのアクセスを有することを望まない場合に、有利であり得る。そのような場合、両方のセキュアな領域がアクセスすることができ、兄弟セキュアレベルのうちの一方の関数が、他方の兄弟セキュアレベルから呼び出される場合に、関数引数および戻り値を格納するために使用することができる、追加のスタックが存在してもよい。
【００５１】
また、これらの兄弟セキュアレベルは、多くのセキュアレベルを有する階層システム内にも存在してもよいことに留意されたい。
【００５２】
本発明の第２の態様は、プログラムコードに応えてデータ処理動作を実施するためのデータ処理回路と、該データ処理回路によって処理されるデータアイテムを格納するための複数のレジスタと、データを格納するためのデータストアであって、該セキュアなドメイン内で動作している該データ処理回路がアクセス可能であり、それ程セキュアではないドメイン内で動作している該データ処理回路がアクセス不可能である機密データを格納するための少なくとも１つのセキュアな領域と、それ程セキュアではないデータを格納するためのそれ程セキュアではない領域とを備える、データストアと、を備え、該データストアは、該セキュアな領域内に１つのセキュアなスタック、および該それ程セキュアではない領域内に１つのそれ程セキュアではないスタックの少なくとも２つのスタックを備え、該データ処理回路は、処理中に、該スタックと該レジスタとの間でデータを転送するように構成され、該データ処理回路は、該セキュアな領域内に格納されているプログラムコードを処理する際に、該セキュアなドメイン内で動作し、該それ程セキュアではない領域内に格納されているプログラムコードを処理する際に、該それ程セキュアではないドメイン内で動作する、データ処理装置上でデータを処理する方法であって、該データストア内に格納されているプログラムコードを実行することと、実行されている該プログラムコードの該格納位置に応えて、どのスタックにデータを格納するか、またはどのスタックからデータをロードするかを判定することと、第１の領域内に格納されているプログラムコードに応えて、実行される関数を呼び出すことであって、該関数コードは、第２の領域内に格納されており、該第２の領域は、該第１の領域とは異なるセキュアレベルを有する、ことと、該第１の領域および該第２の領域のうちのどちらがより低いセキュアレベルを有するかを判定することと、該プログラムコードおよび該関数コードを実行する際、関数引数および戻りデータ値について、該より低いセキュアレベルを伴う該第１の領域または該第２の領域の該スタックにアクセスすることとを含む、データ処理装置上のデータ処理方法を提供する。
【００５３】
本発明の第３の態様は、処理回路によって実行される際、該レジスタスタックロード命令によって指定される少なくとも１つのレジスタに、スタック上の少なくとも１つの位置の値をロードし、スタック選択フラグに従って、該スタックが、データストアのよりセキュアな領域内にセキュアなスタックを備えるか、またはデータストアのそれ程セキュアではない領域内にそれ程セキュアではないスタックを備えるかを判定するように、該データ処理回路を制御する、レジスタスタックロード命令を備える、コンピュータプログラム製品を提供する。
【００５４】
本発明の第４の態様は、処理回路によって実行される際、該レジスタスタック格納命令によって指定される少なくとも１つのレジスタ内の少なくとも１つの値を、スタック上の少なくとも１つの位置に格納し、該スタックが、スタック選択フラグに従って、データストアのよりセキュアな領域内にセキュアなスタックを備えるか、またはデータストアのそれ程セキュアではない領域内にそれ程セキュアではないスタックを備えるかを判定するように、該データ処理回路を制御する、レジスタスタック格納命令を備える、コンピュータプログラム製品を提供する。
【００５５】
本発明の第５の態様は、処理回路によって実行される際、該命令によって指定されるレジスタ内に格納されている実行可能なコードの標的アドレスが、現在の動作領域と比較してそれ程セキュアではない領域内であるか否かを判定し、該命令によって指定されるレジスタ内に格納されている実行可能なコードの標的アドレスが、現在の動作領域と比較してそれ程セキュアではない領域内である場合に、該それ程セキュアではない領域を指示するよう該スタック選択フラグを設定するように、該データ処理回路を制御する、スタック選択フラグ設定命令を備える、コンピュータプログラム製品を提供する。
【００５６】
本発明の第６の態様は、処理回路によって実行される際、該命令によって指定されるレジスタ内に格納されている実行可能なコードの標的アドレスが、現在の動作領域と比較してそれ程セキュアではない領域内であるか否かを判定し、該命令によって指定されるレジスタ内に格納されている実行可能なコードの標的アドレスが、現在の動作領域と比較してそれ程セキュアではない領域内である場合に、該それ程セキュアではない領域を指示するよう該スタック選択フラグを設定し、さらなるフラグを設定するように、該データ処理回路を制御する、さらなるフラグ設定命令を備える、コンピュータプログラム製品を提供する。
【００５７】
本発明の第７の態様は、処理回路によって実行される際、該複数レジスタ消去命令によって指定される複数のレジスタ内に格納されている値を消去するように、該データ処理回路を制御する、複数レジスタ消去命令を備える、コンピュータプログラム製品を提供する。
【００５８】
本発明の第８の態様は、プログラムコードに応えてデータ処理動作を実施するためのデータ処理手段と、複数のレジスタと、データを格納するためのデータ格納手段であって、異なるセキュアレベルを有する複数の領域を備え、該セキュアなドメイン内で動作している該データ処理手段がアクセス可能であり、それ程セキュアではないドメイン内で動作している該データ処理手段がアクセス不可能である機密データを格納するための少なくとも１つのセキュアな領域と、それ程セキュアではないデータを格納するためのそれ程セキュアではない領域とを備える、データ格納手段と、を備え、データ格納手段は、該セキュアな領域内に１つのセキュアなスタック、および該それ程セキュアではない領域内に１つのそれ程セキュアではないスタックの少なくとも２つのスタックを備え、該データ処理手段は、該セキュアな領域内に格納されているプログラムコードを処理する際に、該セキュアなドメイン内で動作し、該それ程セキュアではない領域内に格納されているプログラムコードを処理する際に、該それ程セキュアではないドメイン内で動作し、該データ処理手段は、実行されている該プログラムコードの該格納位置に応えて、どのスタックにデータを格納するか、またはどのスタックからデータをロードするかを判定し、第１の領域内に格納されているプログラムコードに応えて、実行される関数を呼び出し、該関数コードは、第２の領域内に格納されており、該第２の領域は、該第１の領域とは異なるセキュアレベルを有し、該データ処理手段は、該第１の領域および第２の領域のうちのどちらがより低いセキュアレベルを有するかを判定し、該プログラムコードおよび該関数コードを実行する際、関数引数および戻りデータ値について、該より低いセキュアレベルを伴う該領域の該スタックにアクセスする、データ処理装置を提供する。
【００５９】
本発明の第９の態様は、
プログラムコードに応えてデータ処理動作を実施するためのデータ処理回路と、
複数のレジスタと、
データを格納するためのデータストアであって、各領域がセキュアレベルを有する複数の領域を備え、該セキュアなドメイン内で動作している該データ処理回路がアクセス可能であり、それ程セキュアではないドメイン内で動作している該データ処理回路がアクセス不可能である機密データを格納するための少なくとも１つのセキュアな領域と、それ程セキュアではないデータを格納するためのそれ程セキュアではない領域とを備える、データストアと、
を備え、
該データストアは、該セキュアな領域内に１つのセキュアなスタック、および該それ程セキュアではない領域内にそれ程セキュアではないスタックの少なくとも２つのスタックを備え、
該データ処理回路は、例外処置回路を備え、該例外処置回路は、該データ処理回路が該セキュアなドメイン内で実行しており、該割り込みが、それ程セキュアではないドメイン内でのプログラムコードの実行への切り替えを指示する際に、例外の受信に応答して、該レジスタのセットを消去するように構成され、該レジスタの該セット内の該レジスタは、該実行ドメインのセキュアレベルおよび該例外が取り込まれる該ドメインに依存する、
データ処理装置を提供する。本発明は、複数のセキュアな状態を有する処理装置では、例外の取り込みが、処理回路を異なるセキュアレベル間で遷移させる場合があることを認識する。
【００６０】
例外は、外部事象によって引き起こされる割り込み等の非同期例外であってもよく、またはプログラムによって意図的に、もしくは障害に応えて引き起こされる同期例外であってもよい。いずれの場合でも、セキュアな状態から非セキュアな状態に遷移する場合、少なくともいくつかのレジスタを消去する必要があり、場合によっては、データのセキュリティが維持される場合には、それらの状態をスタックに格納する必要がある場合がある。状態を消去する必要があるレジスタの数は、プロセッサが動作しているドメインおよび例外のドメインに依存する。例えば、それ程セキュアではない状態に遷移する際、機密データを格納するために使用され得るレジスタのセットは、それ程セキュアではない側がデータを入手不可能となるように、消去されるべきである。それ程セキュアではない状態への遷移を要求しない例外を取り込む際、一般的に、消去する必要があるレジスタはない。本発明は、これらの遷移に応答して、要求されるレジスタを消去することができ、それによって、割り込みをプロキシする必要性を回避する、例外処置回路を提供する。
【００６１】
いくつかの実施形態では、該データ処理回路は、該レジスタの該セットを消去する前に、該レジスタの該セット内に格納されている状態を、該データ処理回路が実行している該ドメインの該スタックに保存するようにさらに構成される。
【００６２】
それ程セキュアではない状態に遷移する際、セキュアな状態を格納しているレジスタは、常に消去されなければならないが、多くの実施形態では、この状態は、保たれるべきであり、したがって、スタックに保存される。これは、かなり電力および時間を必要とする過程であり、したがって、要求されるレジスタを指定することができることで、数を制限することを可能にし、性能を改善することが可能になる。この点において、より低いセキュアレベルへの遷移がない例外を取り込む際、より低いセキュアレベルに遷移する場合より少ないレジスタをスタックに保存する必要がある。いくつかの実施形態では、例外がそれ程セキュアではない状態への遷移を引き起こさない限り、呼び出し側が保存したレジスタのみを保存する必要があり、その場合、それ程セキュアではない側からデータが見えることを回避するために、機密データを格納するいずれのレジスタも消去する必要があり、データが損失されるべきではない場合、データを保存する必要がある。
【００６３】
本発明の上記および他の目的、特長、ならびに利点は、添付の図面と併せて読まれる以下の例証的な実施形態の詳細な説明から明らかになる。
【図面の簡単な説明】
【００６４】
【図１】本発明の実施形態による、セキュアな領域および非セキュアな領域を伴うデータストアを有する、データ処理装置を示す。
【図２】本発明の実施形態による、２つの異なるセキュアな領域および非セキュアな領域を伴うデータストアを有する、データ処理装置を示す。
【図３Ａ】セキュアなプログラムからの非セキュアな関数の呼び出しを図式的に図示する。
【図３Ｂ】本発明の実施形態による命令を示す。
【図４】非セキュアなプログラムからのセキュアな関数の呼び出しを図式的に示す。
【図５】いくつかのセキュアなドメイン階層構造を図式的に示す。
【図６】兄弟ドメインを含むいくつかのセキュアなドメインの階層構造を図式的に示す。
【図７】コード実行中の割り込みの取り込みを図式的に示す。
【図８Ａ】第１の例外が受信され、次いで第２の例外が受信される際の、保存される状態を示す。
【図８Ｂ】割り込みの取り込みを受けて状態がスタックに保存されるレジスタを示す。
【図９】本発明の実施形態による方法におけるステップを図示する、フロー図を示す。
【図１０】本発明の実施形態による命令が実行される際の、方法におけるステップを図示する、フロー図を示す。
【発明を実施するための形態】
【００６５】
図１は、例えば、マイクロコントローラであってもよい、データ処理装置１０を示す。これは、命令を処理するための処理回路２０と、処理回路２０によって処理されるデータを格納するため、およびまた、処理回路２０が実行するプログラムコードも格納するためのデータストア３０とを備える。
【００６６】
データストア３０は、異なるセキュリティの２つの領域、セキュアな領域３２および非セキュアな領域３４を有する。非セキュアな領域３４内に格納されているコードは、実行している際、セキュアな領域３２内に格納されているデータにアクセス不可能である。
【００６７】
また、データ処理装置１０は、セキュアな領域３２および非セキュアな領域３４へのアクセスを制御する、メモリ保護ユニットＭＰＵ４０も有する。この制御は、メモリ保護ユニットによって行われてもよいが、他の実施形態では、現在実行されているコードが格納されている領域を監視し、これに従ってメモリの異なる領域へのアクセスを制御する、処理装置内の回路によって、より分散された方法で行われてもよい。
【００６８】
本実施形態では、現在実行されているコードが格納されている領域から、処理回路２０が実行しているセキュアなドメインが判定される。したがって、セキュアなデータストア３２内に格納されているセキュアなプログラムコードは、セキュアなドメイン内で実行され、データ値を格納するために、セキュアなスタック３６を使用する。同様に、非セキュアなデータストア３４内に格納されている非セキュアなコードは、実行中にデータ値を格納するために、非セキュアなスタック３８を使用する。
【００６９】
処理回路２０は、実行される命令をフェッチするためのフェッチ回路２２を有する。これは、これらの命令を復号するための復号回路２４と、それらを実行するための実行回路２６とを有する。また、例外処置回路２８も存在し、これは、後で記載される。
【００７０】
実行される命令は、フェッチ回路２２によって、データストア３０からメモリ保護ユニットＭＰＵ４０を介してフェッチされる。命令およびデータは、セキュアな領域および非セキュアな領域へのアクセスを制御し、セキュアなデータを非セキュアな側から隔離する、ＭＰＵ４０を介して読み出される。
【００７１】
本実施形態では、データ処理中に使用される汎用レジスタを有するレジスタバンク６０が存在する。これらの汎用レジスタは、どの命令が次に実行されるかを指示するプログラムカウンタＰＣと、スタック内のどの点で次のデータアクセスが行われるべきかを指示するスタックポインタＳＰとを有する。本実施形態では、セキュアな側内のスタックおよび非セキュアな側内のスタックが存在するため、セキュアなスタックポインタおよび非セキュアなスタックポインタが存在するが、実行されているプログラムは、いずれの時点でも、これらのうちの１つのみを直接見ることができる。いくつかの実施形態では、各スタックに複数のスタックポインタが存在する場合があるが、この場合も同様に、いずれの時点でも１つのみを見ることができることに留意されたい。
【００７２】
また、レジスタバンク６０内には、処理されるデータ値を格納するための汎用レジスタも存在する。本実施形態では、これらは、Ｒ０〜Ｒ１２と標示されている。この場合、関数と関数を呼び出すプログラムとの間で値を転送するために、レジスタＲ０〜Ｒ３を使用することができ、この目的のために必要とされないこれらのレジスタのいずれも、それ程セキュアではないドメインに遷移する前に消去する必要がある。レジスタＲ０〜Ｒ３に格納することができるより多くの引数または戻り値が存在する場合、関数と関数を呼び出したプログラムとの間で遷移する際に、これらをスタック外に保存する必要がある。この点において、これらの値を保持するための特定のレジスタを特定することによって、スタックに保存する必要がある値の数を減らし、したがって、関数とプログラムとの間で遷移する際の時間を削減するが、しかしながら、過剰な数が特定される場合、システムは、他の観点において効率的ではない。本実施形態では、この目的に４つのレジスタが使用されるが、異なる数のレジスタを使用することができることが、当業者には明白であるべきである。あるいは、いくつかの実施形態では、データ値を格納するためにレジスタが使用されず、値は、スタック上に格納され、スタックポインタを介して間接的にアクセスされる。これは、明らかに、エリアは削減されるが、パフォーマンスヒットを伴う。
【００７３】
非セキュアな側のコードが実行されており、それが関数を呼び出し、ＭＰＵ４０が、関数コードはセキュアな側内に格納されていると判定する場合、レジスタＲ０〜Ｒ３に納まらない、いずれの引数も、非セキュアな側のスタック３８上に格納する必要がある。本実施形態では、ＣＰＳＲレジスタ内のスタック選択フラグＡＳＳｅｌは、処理回路２０内のスタック選択フラグ設定回路が、非セキュアなプログラムコードからセキュアな関数が呼び出されていると判定する場合に、処理回路２０内のスタック選択フラグ設定回路によって設定される。これは、非セキュアなスタック３８が、スタック上に格納されているその関数の任意の引数にアクセスする必要があることを実行回路２６に指示する。
【００７４】
関数が実行している際、関数は、セキュアな関数であるため、セキュアなスタック３６を使用し、終了すると、非セキュアな側のプログラムコードに戻り、セキュアな関数は、選択フラグＡＳＳｅｌの値から、戻り値（Ｒ０〜Ｒ３に納まらない）を非セキュアなスタック３８に格納するべきであることを知る。次いで、機密データを格納するために利用可能なレジスタ（これらは、コンフィギュレーションレジスタ６２内に格納されている、セキュアコンフィギュレーションＳＣＲ値から判定することができる）が消去される。
【００７５】
この点において、より低いセキュリティレベルからより高いセキュリティレベルに遷移するのを受けて、ＭＰＵハードウェア４０からのセキュリティドメイン情報に基づき、より低いセキュリティレベルを指示するように、フラグを自動的に設定することができ、引数および戻り値にスタックが使用されるべきであり、同一のセキュリティレベルの関数が呼び出される場合に、またはより高いセキュリティレベルからより低いセキュリティレベルに遷移するのを受けて、スタックを自動的に消去することができる。しかしながら、この自動的なハードウェア設定は、常に正しい値を有するフラグをもたらすわけではないため、フラグが、ソフトウェアによって設定される必要がある場合が存在する。これは、後の実施形態に関して記載される。
【００７６】
このようにして、一般的にハードウェアによって管理され、効率的である、容易かつ単純な方法で、非セキュアなスタックを使用して、２つのドメイン間でデータ値が転送される。
【００７７】
ＭＰＵは、フラグの設定で使用される、セキュリティドメイン遷移に関する情報を提供すると記載されるが、この情報を判定する回路は、データ処理装置内の他の場所に位置することができることに留意されたい。この点において、いくつかの実施形態では、ＤＭＡ（直接メモリアクセス）コントローラ等の周辺機器を介したデータストアへのアクセスが存在する場合があり、これらがＭＰＵを介してデータストアにアクセスしない場合、非セキュアな側からのセキュアな状態の隔離が、回路によって実現されなければならず、ＤＭＡもまた、この対象である。
【００７８】
また、図１は、浮動小数点レジスタ等の追加の専用レジスタを有する、追加のレジスタバンク６４も示す。レジスタバンク６０はまた、例外が取り込まれる、または関数が呼び出される際の戻りアドレスを格納するために使用されてもよい、リンクレジスタ６５も備える。このレジスタは、あるいは、例外が取り込まれたドメインのセキュアレベルを指示する、ＥＸＣ＿ＲＥＴＵＲＮを格納してもよく、これは、プロセッサが、状態を復元する際にどのスタックにアクセスするか、およびいくつのレジスタをロードする必要があるかを知ることを可能にし、これは、後で記載するものとする。
【００７９】
手短に言えば、プログラム状態レジスタ（ＣＰＳＲ）内のＡＳＳｅｌ（Alternate Stack Select）フラグを使用することによって、ドメイン間呼び出し問題を克服し、複数のスタックと関連付けられるセキュリティを維持することが可能である。このフラグは、関数呼び出しが発生する際、メモリ制御論理が、呼び出しがセキュアな状態への遷移をもたらしたと判定した場合に、ハードウェアによって自動的に１に設定されてもよい。非セキュアな状態への関数呼び出し、および同一の状態内での関数呼び出しは、フラグを０に設定する。そのため、このフラグは、呼び出される側の関数に、関数引数および戻り値にアクセスするためには、バンク化スタックポインタ（すなわち、現在のセキュリティ状態と関連付けられるもの、または非セキュアなポインタ）のうちのどれにアクセスするべきかを指示する。これらの値へのアクセスは、ベースアドレスレジスタを明確に指定しない大部分の既存のロード／格納命令とは異なり、代わりに、ＡＳＳｅｌフラグに基づき、ベースアドレスとして正しいスタックポインタを自動的に選択する、いくつかの新しいインデックス付き取り込みおよび格納命令を介して提供されてもよい。これらの命令は、後で記載される。スタック上の関数引数または戻り値へのアクセスが、サブ関数が戻った後に要求される場合、セキュアな状態に属する外部ＡＰＩ関数は、いずれのサブ関数呼び出しの前後でも、ＡＳＳｅｌフラグを保存し、復元しなければならない。これは、セキュアなドメインまたは非セキュアなドメインのいずれかからセキュアな関数を呼び出すことを可能にし、一方で、依然として、スタックを介して値を受け渡す能力を維持する。
【００８０】
例外処置回路２８は、例外の取り込みを制御し、これらの例外は、よりセキュアな状態からそれ程セキュアではない状態への遷移をもたらし、機密データを格納し得るレジスタのセットは、非セキュアな側が、これらのレジスタ内に格納されているデータを入手可能になることを回避するために、例外を取り込む前に消去される。例外から戻るのを受けて状態を復元することができるように、これらのレジスタ内に格納されている状態は、セキュアなスタック上に格納される。
【００８１】
図２は、データストア３０内に２つのセキュアな領域Ｓ１およびＳ２が存在し、Ｓ２がＳ１よりセキュアである、図１に代わる実施形態のデータ処理装置１０を示す。本実施形態では、各領域は、それ自体のスタックを有する。したがって、実行されているプログラム２０からは、いずれの時点でも１つのスタックポインタしか直接見えないが、３つのスタックポインタが存在する。
【００８２】
前述されるように、関数を呼び出したプログラムとは異なるセキュアなドメイン内で実行されている関数引数または戻り値を格納するのに、どのスタックを使用するべきかを判定するために、ＣＰＳＲ内のスタック選択フラグＡＳＳｅｌを使用することができる。いくつかの異なるセキュアレベルが存在する場合、適切なレベルを指示するためには、複数ビットフラグ値が必要である。より低いセキュリティレベルからより高いセキュリティレベルに遷移するのを受けて、ＭＰＵハードウェアからの情報に基づき、より低いセキュリティレベルを指示するようにフラグを自動的に設定することができ、同一のセキュリティレベルの関数が呼び出される場合、またはより高いセキュリティレベルからより低いセキュリティレベルに遷移する際、現在のセキュリティレベルを指示するようにフラグを設定することができる。この自動的なハードウェアによる設定は、常に正しい値を有するフラグをもたらすとは限らないため、フラグが、ソフトウェアによって設定される必要がある時がある。
【００８３】
ソフトウェアによるフラグの設定の一実施例が、図３Ａに関して記載される。図３Ａは、非セキュアな関数を呼び出すセキュアなプログラムを図式的に示し、プログラムおよび関数は、図１の処理装置によって実行されている。この場合、関数を呼び出す前にＡＳＳｅｌフラグを設定するプログラムコード内に、スタック選択フラグ設定命令が存在する。これは、関数に要求される引数が、非セキュアなスタック上に格納されるべきであることを処理装置に指示する。一般的に、セキュアな状態内で実行しているプログラムコードは、セキュアなスタック３６を使用し、したがって、引数がこのスタック上に格納されるのを回避するために、この命令が必要である。したがって、いったんこのフラグが設定されると、スタック格納命令がある場合、ＡＳＳｅｌフラグは、処理回路に、これらの値が格納されるスタックは、非セキュアなスタックであることを指示する。
【００８４】
関数が呼び出される際、ＭＰＵ４０は、ここで実行されるコードが非セキュアな側３４に格納されているという点で、非セキュアなドメインへの遷移を検出し、フラグが解除される。この時点で、処理回路は、非セキュアなドメイン内で実行しており、したがって、非セキュアなスタック３８が使用される。セキュアなドメインに戻ると、スタックを介して任意の戻り値が受け渡される場合、命令によってＡＳＳｅｌフラグが再度設定されなければならず、戻り値にアクセスする際に、非セキュアなスタック３８が使用されるべきであることを処理回路に指示する。いったん非セキュアな関数の戻り値へのアクセスがもはや要求されなくなると、さらなる命令を使用してＡＳＳｅｌフラグを解除することによって、いずれかのさらなる潜在的な関数呼び出しまたは戻りに対してセキュアなドメインを一貫した状態のままにするべきである。
【００８５】
ＡＳＳｅｌフラグを設定する命令は、単純な選択スタックフラグ命令であってもよく、または関数がどのドメイン内で実行されているかがコードからは不明である場合に使用されてもよい、標的アドレスのセキュアレベルを判定し、次いでそれに従ってフラグを設定する、命令であってもよいことに留意されたい。
【００８６】
この点において、本発明の実施形態は、この挙動を可能にする命令を採用し、これらは、図３Ｂに示される表に提示される。
【００８７】
したがって、ＡＳＳｅｌフラグの値に依存する、値がレジスタにロードされるスタックを指示する、スタックロード命令がある。これは、スタックからロードされるレジスタ、およびそのスタックのスタックポインタのオフセットとして、それがロードされるアドレスを指定する。
【００８８】
この場合も同様にＡＳＳｅｌフラグに依存するスタックを指示する、ストアスタック格納命令がある。これは、レジスタ、およびそのスタックのスタックポインタのオフセットとして、格納されるアドレスを指定する。
【００８９】
非セキュアなドメインからセキュアなドメインへの有効なエントリポイントを指示するために使用することができる、ＮＳＢＴ命令が存在する。
【００９０】
命令によって指定される複数のレジスタを消去するために使用することができ、それ程セキュアではない側が確実にセキュアな側のデータを見ることができないようにするために使用することができる、複数レジスタ消去命令が存在する。
【００９１】
また、標的アドレスのセキュアな状態を試験する命令も存在し、ＡＳＳｅｌフラグを適切に設定するために使用することができる。これらは、ソフトウェアによってフラグを設定する必要があるが、呼び出される関数のセキュアなドメインがどれであるかが不明であるために、それがどの値を有するべきかが事前に明確ではない場合に有用である。場合によっては、命令は、関数のドメインが、どの動作が実施されるかに影響を及ぼす場合に、条件付き命令実行に使用することができる、さらなるフラグを設定してもよい。いくつかの命令セット内には、実行がフラグの値に依存する、条件付き命令が存在し、したがって、関数のセキュアなドメインに従ってこのフラグを設定することによって、条件付き命令の実行をセキュアなドメインに依存させることが可能になる。
【００９２】
関数が、セキュリティドメイン間のインターフェースの一部であり、図３Ｂにリストされる新しい命令は、関数引数および結果にアクセスする際に必要であることをコンパイラに指示するために、単純なプラグマを使用することができる。このプラグマはまた、コンパイラに、セキュアな状態のレジスタ値を保護する必要があることも指示し得る。呼び出しからセキュアなドメインに戻る際、以下のステップ、
Ｒ０〜Ｒ３が戻り値を保持するために使用されない場合、Ｒ０〜Ｒ３を消去すること、を使用することができる。
非セキュアなドメインへの呼び出しの場合、以下のステップ、
Ｒ０〜Ｒ３が関数引数を保持するために使用されない場合、Ｒ０〜Ｒ３を消去すること、が実施されるべきである。
Ｒ４〜Ｒ１２は、呼び出し側が保存したレジスタとして扱われ、関数呼び出しの前に消去されるべきである。
【００９３】
図４は、命令を使用して選択スタックフラグを設定する必要があり得る、さらに簡略化した実施例を示す。この場合、２つのドメインが存在し、セキュアな関数は、非セキュアなドメインから呼び出される。非セキュアなドメインからセキュアなドメインに遷移する際に、フラグが設定される。関数は、浮動小数点乗算関数であり、本実施形態では、これは、すべてセキュアな関数である、順々に呼び出される複数の加算関数によって実現される。セキュアなドメインからのセキュアな関数の呼び出しは、ＡＳＳｅｌフラグを解除し、したがって、非セキュアなドメインに戻る際、ＡＳＳｅｌフラグは解除される。ＡＳＳｅｌフラグが解除される場合、非セキュアなドメインに送信する必要がある戻り値は、セキュアなスタック内に格納され、アクセス不可能となる。したがって、これらの値が格納される前に実行される選択フラグ設定命令があることが重要である。非セキュアなドメインに戻るかが不明である場合、標的アドレスが調べられ、これに従ってＡＳＳｅｌフラグが設定される、図３ＢのＴＴＳ命令を使用することができる。
【００９４】
前述されるように、２つのセキュアなドメインがしばしば記載されるが、複数のセキュアなドメインが存在してもよい。図５は、階層配設された複数のドメインを図式的に示す。コードを有し、中にデータが格納されており、自体のスタックを有する、非セキュアなドメイン、第１のセキュアなドメインＳ１、およびオペレーティングシステムコードが格納されている、よりセキュアなドメインＳ２が存在する。これらの異なるセキュアなドメインのそれぞれは、それら自体のスタックを有し、ドメイン間で遷移する場合、それらの間でデータ値を送信する必要があり、両方のドメインがアクセスすることができるため、２つのドメインのうちのそれ程セキュアではない方のスタックを、値を格納するために使用することができ、本発明の実施形態は、この関数引数および戻り値の格納ならびにロードを制御することができる。
【００９５】
他の実施形態では、同一のセキュアレベルを伴うが、それらの間でのアクセスが許可されていない、２つのセキュアな兄弟ドメインが存在してもよい。図６は、そのような配設を示す。そのような配置は、２つの販売業者が、同一のシステム上で使用するためのソフトウェアを供給している可能性があり、それらが、相互のソフトウェアから見えないことを望む場合に有利である。したがって、それらは、ソフトウェアを使用してもよいが、どのように実現されるかを見ることはできない。そのような場合、同一のセキュリティの追加の領域が存在し、追加領域内には、兄弟Ｓ１ドメインのうちの一方の中の関数が、他方の兄弟Ｓ１ドメイン内に格納されているコードによって呼び出される際に、引数および戻り値を格納するために使用することができる、スタック５２が存在する。
【００９６】
ドメイン間でのデータの制御が必要とされるさらなる方法は、割り込みを取り込むときである。いくつかのアーキテクチャでは、割り込みが発生した際、および完了した際に、ハードウェアによって、レジスタの一部の状態が自動的に保存され、復元される。そのようなアーキテクチャを、レジスタ全体の状態または少なくともセキュアなドメインが使用するすべてのレジスタの状態を保存し、消去するように拡張することによって、ハードウェアは、割り込みがセキュアから非セキュアへの遷移をもたらす事象において、割り込みの前後でセキュリティを維持することができる。
【００９７】
上記されるように、本発明の実施形態の自動レジスタスタッキングシステムを拡張することによって、割り込みをセキュアな状態を通してプロキシする必要性を排除することが可能であると共に、処理回路がすべてのレジスタをスタックにプッシュし（単に呼び出し側がレジスタを保存する代わりに）、次いで、非セキュアな状態への切り替えの前に、それらの値を消去し、割り込みベクトルへジャンプすることを可能にすることができる。割り込みの待ち時間を可能な限り短く保つために、追加のレジスタ状態は、セキュアな状態から非セキュアな状態に遷移する際に、スタックにのみプッシュされる。これは、例外エントリ中により高い優先度の例外が発生する場合、またはテールチェーニング（tail chaining）例外の場合に、わずかな複雑性しか導入しない。図７は、いくつかの実施例を示す。
【００９８】
第１のプログラム実施例では、コードは、セキュアな状態内で実行され、第１のセキュアな割り込みが受信される。レジスタのサブセットがスタックに保存され、次いで、非セキュアなドメイン内で動作する第２のより高い優先度の割り込みが受信される。第２のより高い優先度の割り込みが非セキュアな領域内で動作するため、セキュアなレジスタ内の情報は、新しいアプリケーションに見えるべきではなく、したがって、すべてのセキュアなレジスタが、セキュアなスタックに保存され、次いで、この割り込みを取り込む前に消去されるべきである。第２の割り込みが完了した際、完了していない最初のセキュアな割り込みに戻り、第２の割り込みに応えてセキュアなスタックにプッシュされたレジスタを復元することができる。この第１のセキュアな割り込みを完了することができ、これに次いで、スタックにプッシュされた元のサブセットを復元することができる。
【００９９】
第２の実施例では、第２の割り込みは、第１の割り込みより低い優先度を有し、したがって、第２の非セキュアな割り込みが取り込まれる前に完了する。いったん第１の割り込みが完了すると、残りのレジスタがセキュアなスタックにプッシュされ、非セキュアな割り込みが取り込まれる前に、すべてのレジスタが消去される。非セキュアな割り込みの終わりに、セキュアなスタックにプッシュされたすべてのレジスタが復元される。
【０１００】
第３の実施例は、レジスタの部分保存が行われる、セキュアな割り込みを受信する、非セキュアなコードを示す。次いで、より高い優先度を伴う第２の非セキュアな割り込みが受信される場合、第２の非セキュアな割り込みを取り込むことができる前に、すべてのセキュアなレジスタをセキュアなスタックにプッシュし、消去する必要がある。非セキュアな割り込みが完了する際、すべてのセキュアなレジスタをスタックからポップする必要があり、次いで、セキュアな割り込みが完了する際に、非セキュアなレジスタのサブセットがポップされる。
【０１０１】
第４の実施例は、呼び出し側が保存したレジスタをセキュアなスタックにプッシュさせるセキュアな割り込みを受信し、この過程が完了する前に、第２のより高い優先度の非セキュアな割り込みが発生する、セキュアなコードを示す。この第２の割り込みは、サブセットが完了した後に残りのレジスタをプッシュさせ、実施されているすべてのレジスタのプッシュをもたらす。次いで、非セキュアな割り込みが取り込まれる前に、すべてのレジスタが消去される。この割り込みが完了すると、セキュアな割り込みが取り込まれる前に、呼び出される側が保存したレジスタが、セキュアなスタックからポップされる。セキュアな割り込みが完了する際、レジスタの元のサブセットが、セキュアなスタックからポップされる。
【０１０２】
図８Ａは、潜在的な割り込みおよび実施する必要がある状態の保存を表す表を示す。この点において、「サブセットをプッシュ」は、呼び出し側が保存したレジスタのサブセットのスタックへのプッシュであり、一方、「すべてをプッシュ」は、スタックポインタ以外のレジスタ状態全体のスタックへのプッシュである。この点において、いくつかのレジスタが、機密データを格納するのに利用不可能であり、これが既知である場合、これらのレジスタを、スタックにプッシュしなくてもよい。「残りをプッシュ」は、呼び出される側が保存したレジスタ状態のサブセットのスタックへのプッシュであり、「サブセットをプッシュ」と組み合わせると、「すべてをプッシュ」状態と等しい。
【０１０３】
表中、例外エントリ列は、第１の割り込みより高い優先度を有し、第１の割り込み例外ベクトルへの分岐の前に発生し、したがって、第１の割り込みが完了する前に取り込まれる、第２の割り込みを指示する。例外戻り列は、第１の割り込みが完了するまで取り込まれない、同等以下の優先度の割り込みを指示する。
【０１０４】
この点において、呼び出し側の関数が関与するレジスタ、および呼び出される側が関与するレジスタが存在し、したがって、呼び出し側の関数が関与するレジスタは、関数を取り込む前にスタックに格納される。しかしながら、セキュアな状態から非セキュアな状態に遷移する際、セキュアな状態を保存することができるすべてのレジスタ内の値を、非セキュアな側が入手不可能であるように、レジスタから移動させる必要があり、したがって、図８Ａから明白であるように、追加の保存および消去が実施される。
【０１０５】
図８Ｂは、本発明の実施形態のレジスタスタック、同一またはそれ程セキュアではない状態から割り込みを取り込む際に保存される部分スタックフレーム、およびそれ程セキュアではない状態に遷移する際に保存される全スタックフレームを示す。この点において、後者の場合では、それ程セキュアではない状態が入手不可能であるべきであるセキュアな状態であるため、レジスタを、いかなる状態も格納したままにすることはできないため、より多くのレジスタを保存し、消去する必要がある。
【０１０６】
プログラムコードがセキュアな状態間で遷移する際、おそらく、関数を呼び出す際にスタックに格納されるレジスタの数は、状態に依存し、セキュアコンフィギュレーションレジスタ内の値によって指示することができ、そのため、この値を使用することによって、状態の保存およびレジスタの消去を限定することができる。この値は、特定の装置のコンパイラによって設定されてもよく、これは、特定の装置を異なる方法で使用することを可能にし、製品にある柔軟性を提供し、他の実施形態では、これは、おそらくシステムがブートしている際に、ソフトウェアによって設定されてもよい。
【０１０７】
留意されるように、処理回路は、例外が発生する際に、レジスタ状態の呼び出し側が保存したセクションを、スタックに自動的にプッシュおよびポップし、必要に応じて、使用されるスタックポインタ、およびしたがって使用されるスタックを変更する。これは、セキュアなドメインおよびそれ程セキュアではないドメインを伴うシステムにおいてでさえ、以下の利点、すなわち、割り込み待ち時間を低減すること、割り込みジッタを低減すること、例外ハンドラをアセンブラの代わりにＣで記述することができること、例外エントリ上の例外やテールチェーニング（tail chaining）等の最適化を可能にすること、が存在することを可能にする。
【０１０８】
コアが、例外から戻る際に、どのスタックからレジスタ状態を復元するか、およびコアが戻るべきモードを知ることを可能にするために、リンクレジスタは、戻りアドレスというよりはむしろ、専用ＥＸＣ＿ＲＥＴＵＲＮを保持してもよい。これは、処理装置に、例外が取り込まれる際に処理回路がいたドメインのセキュアレベルを指示する。戻るべき実際のプログラムカウンタ位置は、他のレジスタ状態と共に、このドメインのスタック上に格納されている。この場合、リンクレジスタ内のＥＸＣ＿ＲＥＴＵＲＮ値は、戻りアドレスがスタック上にあること、およびどのスタックかを指示する。
【０１０９】
図９は、セキュアなドメインおよび非セキュアなドメインが存在する、本発明の実施形態による方法におけるステップを示す。最初に、ドメイン全体内のプログラムコードが実行され、セキュアな関数が呼び出される。次いで、関数呼び出しがセキュアなドメインからであるか否かが判定される。関数呼び出しがセキュアなドメインからではない場合、スタック選択フラグが設定される。関数呼び出しがセキュアなドメインからである場合、フラグが解除される。これは、一般的に、処理回路が、状態間で遷移し、データストアの同一の領域または異なる領域のいずれかからコードを読み出す際に行われ、このコードの読み出しは、ハードウェアにフラグを設定または解除させる。次いで、スタック選択フラグが設定されているか否かが判定される。スタック選択フラグが設定されている場合、非セキュアなスタック上の引数および戻り値がアクセスされる。スタック選択フラグが設定されていない場合、セキュアなスタック上の引数および戻り値がアクセスされる。このようにして、セキュアな関数および非セキュアなプログラムは、両方ともこれらの値にアクセスすることができ、その一方で、セキュアな関数およびセキュアなプログラムは、両方ともセキュアなスタックへのアクセスを有する。
【０１１０】
図１０は、プログラムコードがセキュアなドメイン内で実行され、関数が呼び出される、本発明の実施形態による方法のステップを示す。関数を呼び出す前に、スタック選択フラグ設定命令が実行され、標的アドレスが非セキュアなドメイン内である場合は、ドメイン遷移が生じ、スタックフラグが設定され、標的アドレスが非セキュアなドメイン内ではない場合は、スタックフラグが解除される。次いで、レジスタスタック格納命令が実行され、スタックフラグ内の値に従って、適切なスタックに、関数が実行に必要とする引数が投入される。レジスタスタック格納命令は、スタックポインタに対するオフセットを指示し、スタックフラグ（非セキュアを設定し、セキュアを解除する）によって指示されるスタックのスタックポインタが使用される。関数がセキュアなドメイン内ではない場合、状態を保存するために、レジスタをセキュアなスタックに格納し、次いで消去する必要があり、ハードウェアによって、もしくはレジスタ消去命令によって、または両方によって、これを行うことができる。この点において、ハードウェアは、関数引数を保持しないセキュアなレジスタを自動的に消去してもよいが、関数引数を保持し得るセキュアなレジスタは、消去されない。関数引数を格納することができるレジスタが、関数引数に使用されていない場合、それを消去する命令が必要とされる。
【０１１１】
次いで、関数が呼び出され、実行され、戻ると、スタック選択フラグが、任意の戻り値にアクセスするために使用されるべきスタックポインタを指示するために以前に有した値に設定／解除される。この点において、以前の値を格納し、次いでそれを復元することによって、またはどの状態遷移が発生したかを判定するために、標的アドレスを使用することができる場合を判定する試験命令によって、スタック選択フラグを、それが以前に有した値に設定することができる。次いで、レジスタスタックロード命令が実行され、関数の戻り値が適切なスタックからロードされてもよい。
【０１１２】
いくつかの実施形態では、関数が非セキュアな関数であることが既知である場合、標的アドレスを試験する必要がない、単純なスタックフラグ設定命令を実行することができる。
【０１１３】
あるいは場合によっては、スタックおよびさらなるフラグ設定命令を使用することができる。この点において、標的アドレスがセキュアなドメイン内であるか否かに依存する、フローチャートを通る２つの経路は、標的アドレスが非セキュアである場合に、いくつかのレジスタをプッシュし、複数消去命令を使用するという事実以外は、同一であることに留意されたい。したがって、代わりの実施形態では、「ＡＳＳｅｌフラグおよびさらなるフラグ設定」命令を使用することができ、この場合、この命令によって設定されるさらなるフラグの値に従って、レジスタのプッシュおよび複数消去命令を実施することができる。
【０１１４】
例証的な実施形態が、添付の図面を参照して、本明細書に詳細に記載されてきたが、特許請求の範囲は、これらの厳密な実施形態に限定されず、当業者によって、添付の特許請求の範囲の範囲および趣旨から逸脱することなく、それらに様々な変更および修正をもたらすことができることが理解される。例えば、独立請求項の特長と後続の従属請求項の特長とを様々に組み合わせることができる。
【図１】
2015510189.tif 000003
【図２】
2015510189.tif 000004
【図３Ａ】
2015510189.tif 000005
【図３Ｂ】
2015510189.tif 000006
【図４】
2015510189.tif 000007
【図５】
2015510189.tif 000008
【図６】
2015510189.tif 000009
【図７】
2015510189.tif 000010
【図８Ａ】
2015510189.tif 000011
【図８Ｂ】
2015510189.tif 000012
【図９】
2015510189.tif 000013
【図１０】
2015510189.tif 000014
【国際調査報告】
2015510189.tif 000015
2015510189.tif 000016