特許第6185487号(P6185487)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ エイアールエム リミテッドの特許一覧

特許6185487ドメイン間で切り替わる際のセキュアなデータの非セキュアなアクセスから隔離された状態での維持
<>
  • 特許6185487-ドメイン間で切り替わる際のセキュアなデータの非セキュアなアクセスから隔離された状態での維持 図000002
  • 特許6185487-ドメイン間で切り替わる際のセキュアなデータの非セキュアなアクセスから隔離された状態での維持 図000003
  • 特許6185487-ドメイン間で切り替わる際のセキュアなデータの非セキュアなアクセスから隔離された状態での維持 図000004
  • 特許6185487-ドメイン間で切り替わる際のセキュアなデータの非セキュアなアクセスから隔離された状態での維持 図000005
  • 特許6185487-ドメイン間で切り替わる際のセキュアなデータの非セキュアなアクセスから隔離された状態での維持 図000006
  • 特許6185487-ドメイン間で切り替わる際のセキュアなデータの非セキュアなアクセスから隔離された状態での維持 図000007
  • 特許6185487-ドメイン間で切り替わる際のセキュアなデータの非セキュアなアクセスから隔離された状態での維持 図000008
  • 特許6185487-ドメイン間で切り替わる際のセキュアなデータの非セキュアなアクセスから隔離された状態での維持 図000009
  • 特許6185487-ドメイン間で切り替わる際のセキュアなデータの非セキュアなアクセスから隔離された状態での維持 図000010
  • 特許6185487-ドメイン間で切り替わる際のセキュアなデータの非セキュアなアクセスから隔離された状態での維持 図000011
  • 特許6185487-ドメイン間で切り替わる際のセキュアなデータの非セキュアなアクセスから隔離された状態での維持 図000012
  • 特許6185487-ドメイン間で切り替わる際のセキュアなデータの非セキュアなアクセスから隔離された状態での維持 図000013
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6185487
(24)【登録日】2017年8月4日
(45)【発行日】2017年8月23日
(54)【発明の名称】ドメイン間で切り替わる際のセキュアなデータの非セキュアなアクセスから隔離された状態での維持
(51)【国際特許分類】
   G06F 21/74 20130101AFI20170814BHJP
   G06F 12/14 20060101ALI20170814BHJP
【FI】
   G06F21/74
   G06F12/14 510A
【請求項の数】36
【全頁数】32
(21)【出願番号】特願2014-556133(P2014-556133)
(86)(22)【出願日】2013年1月9日
(65)【公表番号】特表2015-510189(P2015-510189A)
(43)【公表日】2015年4月2日
(86)【国際出願番号】GB2013050029
(87)【国際公開番号】WO2013117896
(87)【国際公開日】20130815
【審査請求日】2016年1月4日
(31)【優先権主張番号】13/368,419
(32)【優先日】2012年2月8日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】594154428
【氏名又は名称】エイアールエム リミテッド
(74)【代理人】
【識別番号】110000855
【氏名又は名称】特許業務法人浅村特許事務所
(72)【発明者】
【氏名】グロカット、トーマス クリストファー
(72)【発明者】
【氏名】グリセンスウェイト、リチャード ロイ
【審査官】 伏本 正典
(56)【参考文献】
【文献】 特開2002−157115(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 21/74
G06F 12/14
(57)【特許請求の範囲】
【請求項1】
データ処理装置であって、
プログラムコードに応えてデータ処理動作を実施するためのデータ処理回路と、
複数のレジスタと、
データを格納するためのデータストアであって、各領域がセキュアレベルを有する、複数の領域を備え、セキュアなドメイン内で動作している前記データ処理回路がアクセス可能であり、よりセキュアでないドメイン内で動作している前記データ処理回路がアクセス不可能である機密データを格納するための少なくとも1つのセキュアな領域と、よりセキュアでないデータを格納するためのよりセキュアでない領域とを備える、データストアと、を備え、
前記データストアは、前記セキュアな領域内に1つのセキュアなスタック、および前記よりセキュアでない領域内に1つのよりセキュアでないスタックの少なくとも2つのスタックを備え、前記データ処理回路は、前記セキュアな領域内に格納されているプログラムコードを処理する際に、前記セキュアなドメイン内で動作し、前記よりセキュアでない領域内に格納されているプログラムコードを処理する際に、前記よりセキュアでないドメイン内で動作し、
前記データ処理回路は、実行される前記プログラムコードの前記格納位置に応えて、どのスタックにデータを格納するか、またはどのスタックからデータをロードするかを判定するように構成され、
第1の領域内に格納されているプログラムコードに応えて、実行される関数を呼び出し、前記関数コードは、第2の領域内に格納されており、前記第2の領域は、前記第1の領域とは異なるセキュアレベルを有し、前記データ処理回路は、前記第1の領域および前記第2の領域のうちのどちらがより低いセキュアレベルを有するかを判定し、前記プログラムコードおよび前記関数コードを実行する際、関数引数および戻りデータ値について、前記より低いセキュアレベルを伴う前記領域の前記スタックにアクセスするように構成される、データ処理装置。
【請求項2】
前記データ処理装置は、
スタック選択フラグを格納するための格納位置と、
フラグ設定回路と、をさらに備え、
前記データストアは、よりセキュアな領域およびよりセキュアでない領域の2つの領域を備え、
前記フラグ設定回路は、よりセキュアな関数を呼び出すよりセキュアでないプログラムコードに応えて、前記スタック選択フラグを設定し、任意の関数を呼び出すセキュアなプログラムコードに応えて、およびよりセキュアでない関数を呼び出すよりセキュアでないプログラムコードに応えて、前記スタック選択フラグを解除するように構成される、請求項1に記載のデータ処理装置。
【請求項3】
前記データ処理装置は、
スタック選択フラグを格納するための格納位置と、
フラグ設定回路と、をさらに備え、
前記フラグ設定回路は、前記スタック選択フラグを、前記データ処理回路が異なるセキュアレベルを有する領域間で遷移するのを検出するのに応えて、より低セキュアな領域を指示するよう設定し、前記データ処理回路が同一のセキュアレベルの関数呼び出しを実行するのを検出するのに応えて、現在のセキュアな領域を指示するよう設定するように構成される、請求項1に記載のデータ処理装置。
【請求項4】
前記データ処理回路は、前記プログラムコード内のスタック選択フラグ設定命令に応えて、前記スタック選択フラグを、よりセキュアでない領域を指示する値に設定するように構成され、よりセキュアでない関数を呼び出す前記プログラムコードは、前記関数引数を格納する前に、前記プログラムコード内に前記スタック選択フラグ設定命令を備える、請求項3に記載のデータ処理装置。
【請求項5】
前記プログラムコードに応答する前記データ処理回路は、前記関数引数および前記戻り値について、前記スタック選択フラグによって指示される前記スタックがアクセスされるように、前記スタック選択フラグに従って、前記関数引数および前記戻り値についてアクセスする前記スタックを判定する関数を呼び出す前記プログラムコードに応答する、請求項3または4のいずれか一項に記載のデータ処理装置。
【請求項6】
前記データ処理回路は、少なくとも1つのレジスタに、スタック上の少なくとも1つの位置の値がロードされることを指示する、前記プログラムコード内のレジスタスタックロード命令に応えて、前記スタック選択フラグおよび現在の処理ドメインの前記セキュアレベルに従って、どのスタックにアクセスするかを判定するように構成される、請求項2に記載のデータ処理装置。
【請求項7】
前記データ処理回路は、少なくとも1つのレジスタに、スタック上の少なくとも1つの位置の値がロードされることを指示する、前記プログラムコード内のレジスタスタックロード命令に応えて、前記スタック選択フラグに従って、どのスタックにアクセスするかを判定するように構成される、請求項3ないし5のいずれか一項に記載のデータ処理装置。
【請求項8】
前記データ処理回路は、少なくとも1つのレジスタ内に格納されている少なくとも1つの値が、スタック上の少なくとも1つの位置に格納されることを指示する、前記プログラムコード内のレジスタスタック格納命令に応えて、前記スタック選択フラグから、前記スタックが前記セキュアなスタックまたは前記よりセキュアでないスタックを備えるかを判定するように構成される、請求項3ないし5、または7のいずれか一項に記載されるデータ処理装置。
【請求項9】
前記データ処理回路は、少なくとも1つのレジスタ内に格納されている少なくとも1つの値が、スタック上の少なくとも1つの位置に格納されることを指示する、前記プログラムコード内のレジスタスタック格納命令に応えて、前記スタック選択フラグおよび現在の処理ドメインの前記セキュアレベルに従って、前記スタックが前記セキュアなスタックまたは前記よりセキュアでないスタックを備えるかを判定するように構成される、請求項2または6のいずれか一項に記載のデータ処理装置。
【請求項10】
前記データ処理回路は、前記関数コードが前記よりセキュアでない領域内にあり、前記プログラムコードが前記セキュアな領域内にあるのに応えて、戻りアドレスを前記セキュアなスタックにロードし、前記関数からの前記戻りアドレスが前記セキュアなスタック上にロードされていることを指示する値をリンクレジスタにロードする、ように構成される、請求項1ないし9のいずれか一項に記載のデータ処理装置。
【請求項11】
前記データ処理回路は、前記プログラムコード内のスタック選択フラグ設定命令であって、実行可能なコードの標的アドレスを格納するためのレジスタを指定する、スタックフラグ設定命令に応えて、前記標的アドレスが、現在の動作領域と比較してよりセキュアでない領域内であるか否かを判定し、前記標的アドレスが、現在の動作領域と比較してよりセキュアでない領域内である場合に、前記よりセキュアでない領域を指示するよう前記スタック選択フラグを設定するように構成される、請求項3ないし5、7、8、または、請求項3に従属する場合の10、のいずれか一項に記載のデータ処理装置。
【請求項12】
前記データ処理回路は、前記プログラムコード内のさらなるフラグ設定命令であって、実行可能なコードの標的アドレスを格納するレジスタを指定する、さらなるフラグ設定命令に応えて、前記標的アドレスが前記セキュアな領域内であるか、または前記よりセキュアでない領域内であるかを判定し、前記標的アドレスが前記よりセキュアでない領域内である場合に、前記よりセキュアでない領域を指示するように前記スタック設定フラグを設定し、さらなるフラグを設定するように構成される、請求項3ないし5、7、8、11、または、請求項3に従属する場合の10、のいずれか一項に記載のデータ処理装置。
【請求項13】
前記データ処理回路は、前記プログラムコード内の複数レジスタ消去命令に応えて、前記複数レジスタ消去命令によって指定される複数のレジスタ内に格納されている値を消去するように構成される、請求項1ないし12のいずれか一項に記載のデータ処理装置。
【請求項14】
前記データ処理装置は、現在実行しているコードが、セキュアな状態を格納するために、前記複数のレジスタのうちのどれを使用できるかを指示する値を格納するためのセキュアコンフィギュレーション格納位置を備え、前記データ処理回路は、よりセキュアな状態からよりセキュアでない状態に遷移する際に、前記セキュアコンフィギュレーション値によって指示される前記複数のレジスタを消去するように構成される、請求項1ないし13のいずれか一項に記載のデータ処理装置。
【請求項15】
前記データ処理回路は、例外処置回路を備え、前記例外処置回路は、例外の受信に応答して、前記レジスタのセット内に格納されている状態を消去するように構成され、前記レジスタの前記セット内の前記レジスタは、前記実行ドメインおよび前記例外が取り込まれる前記ドメインのセキュアレベルに依存する、請求項1ないし14のいずれか一項に記載のデータ処理装置。
【請求項16】
前記例外処置回路は、前記割り込みが前記セキュアなドメイン内で実行されており、前記さらなる割り込みの優先度が、同等以下であり、前記よりセキュアでないドメインへの切り替えを指示しており、その上、前記データ処理回路が、前記割り込みの完了後に前記さらなる割り込みを取り込むように構成されており、
割り込まれた前記元のコードが前記セキュアなドメイン内に存在し、前記セットおよび前記さらなるレジスタが、前記セキュアなスタックに格納されて消去されるように、さらなるレジスタ内に格納されている前記状態を保存するように構成されている場合、ならびに、割り込まれた前記元のコードが前記よりセキュアでないドメイン内に存在する場合に、レジスタの前記セットを消去するように構成されている場合、
を除き、前記割り込みが完了する前に、さらなる割り込みの受信に応答して、さらなるスタック格納動作を実施しないように構成され、
前記割り込みは、前記セキュアなドメイン内で実行され、前記さらなる割り込みは、前記よりセキュアでないドメイン内での実行への切り替えを指示し、優先度が前記割り込みと同等以上であり、前記さらなる割り込みは、前記割り込みの完了の前に取り込まれ、前記セットおよび前記さらなるレジスタ内に格納されている状態は、前記セキュアなスタックに保存され、前記セットおよびさらなるレジスタは、消去される、請求項15に記載のデータ処理装置。
【請求項17】
前記データ処理装置は、コードの現在実行している部分が、セキュアな状態を格納するために、前記複数のレジスタのうちのどれを使用できるかを指示する値を格納するためのセキュアコンフィギュレーション格納位置を備え、前記例外処置回路は、前記セキュアコンフィギュレーション格納位置に格納されている前記値、前記実行ドメインのセキュアレベル、および前記例外が取り込まれる前記ドメインから、前記レジスタの前記セット内の前記レジスタを判定する、請求項15または16のいずれか一項に記載のデータ処理装置。
【請求項18】
前記データ処理装置は、例外戻り値を格納するための格納位置を備え、前記データ処理回路は、前記例外の取り込みを受けて、前記データ処理装置が動作しているドメインを指示するよう前記例外戻り値を設定するように構成され、前記例外処置回路は、例外から戻るのを受けて、前記例外戻り値内に格納されている前記値に従って、どのレジスタを前記スタックからの値で更新するかを判定する、請求項15ないし17のいずれか一項に記載のデータ処理装置。
【請求項19】
前記データストアは、異なる機密度のデータを格納するための複数のセキュアな階層領域を備え、より低いレベルのセキュアなドメイン内で動作している前記データ処理回路は、より高いレベルのセキュアな領域内に格納されているデータにアクセス不可能であり、
前記データストアは、前記複数のセキュアな領域のそれぞれの中に少なくとも1つのスタックを備え、
前記スタック選択フラグを格納するための前記格納位置は、複数のビットを備え、
前記データ処理回路は、前記スタック選択フラグに従って、関数引数および戻り値についてどのスタックにアクセスするかを判定するように構成される、請求項3ないし5、7、8、11、12のいずれか一項、または、請求項3に従属する場合の請求項10もしくは13ないし18のいずれか一項に記載のデータ処理装置。
【請求項20】
前記データストアは、異なる機密度のデータを格納するための複数のセキュアな領域を備え、前記領域のうちの少なくとも2つは、同一の機密度のデータを格納する兄弟領域であり、より高いレベルのセキュアなドメイン内に格納されているデータは、前記兄弟領域内に格納されている前記データにアクセス可能であるが、より低いレベルのセキュアなドメイン内または他のセキュアな兄弟ドメイン内で動作している前記データ処理回路は、アクセス不可能であり、
前記データストアは、前記セキュアな領域のそれぞれの中に少なくとも1つのスタックと、前記兄弟領域のいずれかに格納されているプログラムコードがアクセス可能なさらなる兄弟スタックと、を備え、
前記兄弟領域のうちの一方に格納されているプログラムコードに応えて、関数を呼び出し、前記関数コードは、前記兄弟領域のうちの他方に格納されており、前記データ処理回路は、前記プログラムコードおよび前記関数コードを実行する際、前記関数によって使用される引数および前記関数から返されるデータを前記さらなる兄弟スタック上に格納するように構成される、請求項1ないし19のいずれか一項に記載のデータ処理装置。
【請求項21】
前記データストアは、異なる機密度のデータを格納するための複数のセキュアな階層領域を備え、より低いレベルのセキュアなドメイン内で動作している前記データ処理回路は、より高いレベルのセキュアな領域内に格納されているデータにアクセス不可能であり、前記領域のうちの少なくとも2つは、同一の機密度のデータを格納する兄弟領域であり、前記兄弟領域内に格納されている前記データは、より高いレベルのセキュアなドメイン内に格納されているデータにアクセス可能であるが、より低いレベルのセキュアなドメイン内または他方のセキュアな兄弟ドメイン内で動作している前記データ処理回路は、前記兄弟領域に格納されている前記データにアクセス不可能であり、
前記データストアは、前記複数のセキュアな領域のそれぞれの中に少なくとも1つのスタックと、前記兄弟領域のいずれかに格納されているプログラムコードがアクセス可能なさらなる兄弟スタックと、を備え、
前記スタック選択フラグを格納するための前記格納位置は、複数のビットを備え、前記スタック選択フラグ回路は、前記データ処理回路が、前記プログラムコードが格納されている前記領域、前記関数コードが格納されている前記領域、および前記セキュアレベルが等しく、前記兄弟セキュアレベルである前記領域のうちのより低いセキュアレベルの領域を指示する値に設定する関数に分岐する際、前記さらなる兄弟スタックを指示するように構成され、
前記データ処理回路は、前記スタック選択値に従って、前記関数引数および戻り値について、どのスタックにアクセスするかを判定するように構成される、請求項3ないし5、7、8、11、12、19のいずれか一項、または、請求項3に従属する場合の請求項10、13ないし18、もしくは20のいずれか一項に記載のデータ処理装置。
【請求項22】
データ処理装置上でデータを処理する方法であって、
プログラムコードに応えてデータ処理動作を実施するためのデータ処理回路と、
前記データ処理回路によって処理されるデータアイテムを格納するための複数のレジスタと、
データを格納するためのデータストアであって、前記セキュアなドメイン内で動作している前記データ処理回路がアクセス可能であり、よりセキュアでないドメイン内で動作している前記データ処理回路がアクセス不可能である機密データを格納するための少なくとも1つのセキュアな領域と、よりセキュアでないデータを格納するためのよりセキュアでない領域とを備える、データストアと、を備え、
前記データストアは、前記セキュアな領域内に1つのセキュアなスタック、および前記よりセキュアでない領域内に1つのよりセキュアでないスタックの少なくとも2つのスタックを備え、前記データ処理回路は、処理中に、前記スタックと前記レジスタとの間でデータを転送するように構成され、
前記データ処理回路は、前記セキュアな領域内に格納されているプログラムコードを処理する際に、前記セキュアなドメイン内で動作し、前記よりセキュアでない領域内に格納されているプログラムコードを処理する際に、前記よりセキュアでないドメイン内で動作し、前記方法は、
前記データストア内に格納されているプログラムコードを、前記データ処理回路に実行させることと、
実行されている前記プログラムコードの前記格納位置に応えて、どのスタックにデータを格納するか、またはどのスタックからデータをロードするかを、前記データ処理回路に判定させることと、
第1の領域内に格納されているプログラムコードが前記第1の領域とは異なるセキュアレベルを有する第2の領域に格納されている関数コードを呼び出すことに応えて、前記第1の領域および前記第2の領域のうちのどちらがより低いセキュアレベルを有し、関数引数および戻りデータ値について、前記より低いセキュアレベルを伴う、前記第1の領域または前記第2の領域の前記スタックにアクセスする前記プログラムコードおよび前記関数コードをいつ実行するかを判定することと、を含む、方法。
【請求項23】
異なるセキュアレベルの2つのドメイン間で遷移する際に、2つのドメインのうちのよりセキュアでないドメインを指示するスタック選択フラグを、前記データ処理回路に設定させることと、
前記スタック選択フラグに従って、どのスタックに関数引数および戻り値を格納するかを、前記データ処理回路に判定させることと、をさらに含む、請求項22に記載の方法。
【請求項24】
少なくとも1つのレジスタに、スタック上の少なくとも1つの位置からの値がロードされることを指示する、前記プログラムコード内のレジスタスタックロード命令に応えて、前記スタック選択フラグに従って、前記データ処理回路に、前記スタックが、前記セキュアなスタックまたは前記よりセキュアでないスタックを備えるかを判定させ、前記値を前記少なくとも1つのレジスタにロードさせることを含む、請求項23に記載の方法。
【請求項25】
少なくとも1つのレジスタ内に格納されている少なくとも1つの値が、スタック上の少なくとも1つの位置に格納されることを指示する、前記プログラムコード内のレジスタスタック格納命令に応えて、前記スタック選択フラグから、前記データ処理回路に、前記スタックが、前記セキュアなスタックまたは前記よりセキュアでないスタックを備えるかを判定させ、前記値を前記スタック内に格納させることを含む、請求項23または24のいずれか一項に記載の方法。
【請求項26】
前記プログラムコード内の、実行可能なコードの標的アドレスを格納するためのレジスタを指定するスタック選択フラグ設定命令に応えて、前記標的アドレスが、現在の動作領域と比較してよりセキュアでない領域内であるか否かを、前記データ処理回路に判定させ、前記標的アドレスが、現在の動作領域と比較してよりセキュアでない領域内である場合に、前記よりセキュアでない領域を指示するように、前記データ処理回路に、前記スタック選択フラグを設定させることを含む、請求項23ないし25のいずれか一項に記載の方法。
【請求項27】
前記プログラムコード内の、実行可能なコードの標的アドレスを格納するためのレジスタを指定するさらなるフラグ設定命令に応えて、前記標的アドレスが、現在の動作領域と比較してよりセキュアでない領域内であるか否かを、前記データ処理回路に判定させ、前記標的アドレスが、現在の動作領域と比較してよりセキュアでない領域内である場合に、前記よりセキュアでない領域を指示するように、前記スタック選択フラグを、前記データ処理回路に設定させ、前記さらなるフラグを、前記データ処理回路に設定させることを含む、請求項23ないし26のいずれか一項に記載の方法。
【請求項28】
前記プログラムコード内の複数レジスタ消去命令に応えて、前記複数レジスタ消去命令によって指定される複数のレジスタ内に格納されている値を、前記データ処理回路に消去させることを含む、請求項22ないし27のいずれか一項に記載の方法。
【請求項29】
レジスタスタックロード命令を実行するよう構成されたデータ処理回路を備えるデータ処理装置であって、
前記データ処理回路が、前記レジスタスタックロード命令に応じて、前記レジスタスタックロード命令によって指定される少なくとも1つのレジスタに、スタック上の少なくとも1つの位置の値をロードし、スタック選択フラグに従って、前記スタックが、データストアのよりセキュアな領域内にセキュアなスタックを備えるか、またはデータストアのよりセキュアでない領域内によりセキュアでないスタックを備えるかを判定する、ように構成されたデータ処理装置
【請求項30】
レジスタスタック格納命令を実行するよう構成されたデータ処理回路を備えるデータ処理装置であって、
前記データ処理回路が、前記レジスタスタック格納命令に応じて、前記レジスタスタック格納命令によって指定される少なくとも1つのレジスタ内の少なくとも1つの値を、スタック上の少なくとも1つの位置に格納し、スタック選択フラグに従って、前記スタックが、データストアのよりセキュアな領域内にセキュアなスタックを備えるか、またはデータストアのよりセキュアでない領域内によりセキュアでないスタックを備えるかを判定する、ように構成されたデータ処理装置
【請求項31】
スタック選択フラグ設定命令を実行するよう構成されたデータ処理回路を備えるデータ処理装置であって、
前記データ処理回路が、前記スタック選択フラグ設定命令に応じて、前記スタック選択フラグ設定命令によって指定されるレジスタ内に格納されている実行可能なコードの標的アドレスが、現在の動作領域と比較してよりセキュアでない領域内であるか否かを判定し、前記スタック選択フラグ設定命令によって指定されるレジスタ内に格納されている実行可能なコードの標的アドレスが、現在の動作領域と比較してよりセキュアでない領域内である場合に、前記よりセキュアでない領域を指示するよう前記スタック選択フラグを設定するように構成されたデータ処理装置
【請求項32】
さらなるフラグ設定命令を実行するよう構成されたデータ処理回路を備えるデータ処理装置であって、
前記データ処理回路が、前記さらなるフラグ設定命令に応じて、前記さらなるフラグ設定命令によって指定されるレジスタ内に格納されている実行可能なコードの標的アドレスが、現在の動作領域と比較してよりセキュアでない領域内であるか否かを判定し、前記さらなるフラグ設定命令によって指定されるレジスタ内に格納されている実行可能なコードの標的アドレスが、現在の動作領域と比較してよりセキュアでない領域内である場合に、前記よりセキュアでない領域を指示するよう前記スタック選択フラグを設定し、さらなるフラグを設定する、ように構成されたデータ処理装置。
【請求項33】
データ処理装置であって、
プログラムコードに応えてデータ処理動作を実施するためのデータ処理手段と、
複数のレジスタと、
データを格納するためのデータ格納手段であって、異なるセキュアレベルを有する複数の領域を備え、前記セキュアなドメイン内で動作している前記データ処理手段がアクセス可能であり、よりセキュアでないドメイン内で動作している前記データ処理手段がアクセス不可能である機密データを格納するための少なくとも1つのセキュアな領域と、よりセキュアでないデータを格納するためのよりセキュアでない領域とを備える、データ格納手段とを備え、
前記データ格納手段は、前記セキュアな領域内に1つのセキュアなスタック、および前記よりセキュアでない領域内に1つのよりセキュアでないスタックの少なくとも2つのスタックを備え、前記データ処理手段は、前記セキュアな領域内に格納されているプログラムコードを処理する際に、前記セキュアなドメイン内で動作し、前記よりセキュアでない領域内に格納されているプログラムコードを処理する際に、前記よりセキュアでないドメイン内で動作し、
前記データ処理手段は、実行されている前記プログラムコードの前記格納位置に応えて、どのスタックにデータを格納するか、またはどのスタックからデータをロードするかを判定し、
第1の領域内に格納されているプログラムコードに応えて、実行される関数を呼び出し、前記関数コードは、第2の領域内に格納されており、前記第2の領域は、前記第1の領域とは異なるセキュアレベルを有し、前記データ処理手段は、前記第1の領域および前記第2の領域のうちのどちらがより低いセキュアレベルを有するかを判定し、前記プログラムコードおよび前記関数コードを実行する際、関数引数および戻りデータ値について、前記より低いセキュアレベルの前記領域の前記スタックにアクセスする、データ処理装置。
【請求項34】
データ処理装置であって、
プログラムコードに応えてデータ処理動作を実施するためのデータ処理回路と、
複数のレジスタと、
データを格納するためのデータストアであって、各領域がセキュアレベルを有する複数の領域を備え、前記セキュアなドメイン内で動作している前記データ処理回路がアクセス可能であり、よりセキュアでないドメイン内で動作している前記データ処理回路がアクセス不可能である機密データを格納するための少なくとも1つのセキュアな領域と、よりセキュアでないデータを格納するためのよりセキュアでない領域とを備える、データストアと、を備え、
前記データストアは、前記セキュアな領域内に1つのセキュアなスタック、および前記よりセキュアでない領域内に1つのよりセキュアでないスタックの少なくとも2つのスタックを備え、
前記データ処理回路は、例外処置回路を備え、前記例外処置回路は、例外の受信に応答して、前記データ処理回路が、前記セキュアなドメイン内で実行しており、前記例外が、よりセキュアでないドメイン内のプログラムコードを実行するように切り替わることを指示する際に、前記レジスタのセットを消去するように構成され、前記レジスタの前記セット内の前記レジスタは、前記実行ドメインのセキュアレベルおよび前記例外が取り込まれる前記ドメインに依存する、データ処理装置。
【請求項35】
前記データ処理回路は、前記レジスタの前記セットを消去する前に、前記レジスタの前記セット内に格納されている状態を、前記データ処理回路が実行している前記ドメインの前記スタックに保存するようにさらに構成される、請求項34に記載のデータ処理装置。
【請求項36】
前記データ処理装置は、現在実行しているコードが、セキュアな状態を格納するために、前記複数のレジスタのうちのどれを使用できるかを指示する値を格納するためのセキュアコンフィギュレーション格納位置を備え、前記データ処理回路は、前記セキュアコンフィギュレーション値によって指示される前記複数のレジスタ、前記実行ドメインのセキュアレベル、および前記例外が取り込まれる前記ドメインに従って、どのレジスタがレジスタの前記セット内であるかを判定するように構成される、請求項34または35のいずれか一項に記載のデータ処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本技術分野は、データ処理の分野に関し、より具体的には、機密データおよびコードの処理に関する。
【背景技術】
【0002】
多くのデータ処理システムおよびアーキテクチャは、機密データおよびコードセクションを、無許可の人または過程によるアクセスから隔離し、保護する方法を提供する。セキュリティを提供することができることが重要ではあるが、この保護に関連する性能および回路エリアにおける諸経費が存在する。
【0003】
マイクロコントローラ等の小さいシステムでは、これらの諸経費を低く抑えることが非常に重要であり、したがって、一部では、セキュリティレベルと性能との間で妥協することが必要な場合もある。
【0004】
データおよびコードをセキュアに保つ1つの方法は、Trustzoneアーキテクチャを伴う、英国CambridgeのARM(登録商標)によって提供され、Trustzoneアーキテクチャには、セキュアな状態および非セキュアな状態が存在し、状態間で遷移するために、例外命令が使用され、例外ハンドラは、セキュアな側のセキュリティを保護する。この手法は、高度のセキュリティを提供するが、セキュリティ状態を変更するのに、ソフトウェア例外ハンドラの形態のかなりのソフトウェア介入が必要となり、これは、すべての呼び出しが例外ハンドラを通してプロキシされなければならないため、システムの性能を低下させ、セキュアなソフトウェアのための外部アプリケーションプログラムインターフェースAPIを開発するのに必要となる労力量が増加する。
【0005】
特許文献1および特許文献2は、データストアが、セキュアな側および非セキュアな側を有し、この現在実行されているコードのデータストア内の位置が、プロセッサが動作しているドメイン、およびしたがって、アクセスすることが許可されているデータを判定する、代替となるセキュアなシステムを開示する。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】米国特許第7966466号
【特許文献2】米国特許公開第2008/0250216号
【発明の概要】
【0007】
本発明の第1の態様は、プログラムコードに応えてデータ処理動作を実施するためのデータ処理回路と、複数のレジスタと、データを格納するためのデータストアとを備える、データ処理装置であって、該データストアは、各領域がセキュアレベルを有する複数の領域を備え、該セキュアなドメイン内で動作している該データ処理回路がアクセス可能であり、それ程セキュアではないドメイン内で動作している該データ処理回路がアクセス不可能である機密データを格納するための少なくとも1つのセキュアな領域と、それ程セキュアではないデータを格納するためのそれ程セキュアではない領域とを備え、該データストアは、該セキュアな領域内に1つのセキュアなスタック、および該それ程セキュアではない領域内に1つのそれ程セキュアではないスタックの少なくとも2つのスタックを備え、該データ処理回路は、該セキュアな領域内に格納されているプログラムコードを処理する際に、該セキュアなドメイン内で動作し、該それ程セキュアではない領域内に格納されているプログラムコードを処理する際に、該それ程セキュアではないドメイン内で動作し、該データ処理回路は、実行される該プログラムコードの該格納位置に応えて、どのスタックにデータを格納するか、またはどのスタックからデータをロードするかを判定するように構成され、第1の領域内に格納されているプログラムコードに応えて、実行される関数を呼び出し、該関数コードは、第2の領域内に格納されており、該第2の領域は、該第1の領域とは異なるセキュアレベルを有し、該データ処理回路は、該第1の領域および該第2の領域のうちのどちらがより低いセキュアレベルを有するかを判定し、該プログラムコードおよび該関数コードを実行する際、関数引数および戻りデータ値について、該より低いセキュアレベルを伴う該領域の該スタックにアクセスするように構成される、データ処理装置を提供する。
【0008】
本発明は、セキュアなデータおよびセキュアなコードへのアクセスが制限されていることが重要であるが、このセキュリティが低遅延でエリア効率良く提供されることも時に重要であることを認識する。
【0009】
メモリの異なるセキュアな領域内の異なるスタックの使用は、処理中にデータを格納する既知の方法である。これらのスタックは、タスク間およびドメイン間で切り替わる際、後で復元することができるように、プロセッサの現在の状態を格納するためにしばしば使用される。1つのドメイン内で処理されるデータおよびコードを、別のドメイン内で処理されるデータおよびコードから隔離することは、1つのドメイン内のプログラムが、別のドメイン内の関数を呼び出し、それら2つの間で関数引数および戻り値を受け渡す必要がある場合、より複雑になる。セキュアなドメインと非セキュアなドメインとの間で切り替わる際、ドメイン間でのいかなるデータ転送も、非セキュアなプログラムが機密データを入手可能になることを回避するために、慎重に制御されなければならない。本発明は、関数を呼び出したドメインおよび関数が実行しているドメインから、関数引数および戻り値にアクセスすることができ、その一方で、他のデータがそれ自体の領域内に維持されるように、セキュアな領域への切り替えをもたらす関数呼び出しを検出する際に、関数引数および戻り値についてどのスタックがアクセスされるかを制御するために、異なるセキュアな領域内のスタックを活用し、また、現在実行されているコードの格納位置から現在のセキュリティレベルを判定する能力も活用する。
【0010】
このようにして、わずかな追加のハードウェアを用いて、ルーチンを取り扱う専用ソフトウェアを用いずに、効率的に、異なるセキュリティドメイン間で切り替わること、およびそれらの間でデータを転送することができる。
【0011】
関数引数および戻りデータ値を格納するために、より低いセキュアレベルのスタックを使用することができるが、すべての関数引数および戻りデータ値がスタックに格納されない場合があり、いくつかの実施形態では、関数を呼び出したプログラムおよび呼び出された関数の両方がアクセス可能な特定のレジスタが、値を格納するために利用可能であってもよく、その場合、これらは、関数引数および戻りデータ値を格納するために使用されてもよく、プログラムコードと関数との間でより多くの値を受け渡す必要がある場合にのみ、より低いセキュアレベルのスタックが使用されることに留意されたい。
【0012】
関数を呼び出すステップは、コードの別のセクションに分岐するプログラム内のコードのうちの1つのセクションに関連し、2つのコードセクション間でデータ値を受け渡す必要があることに留意されたい。これは、関数を呼び出すプログラムとして記載されるが、2つのコードセクション間に大きな違いはなくてもよく、呼び出し側がプログラムと見なされ、呼び出される側が関数であると見なされることを理解されたい。したがって、呼び出し側は、特定のタスクを実施するためにより小さい関数を呼び出す大きいプログラムであってもよく、または別の同様のサイズのプログラムに分岐するプログラムであってもよく、またはさらなる関数もしくはアプリケーションを呼び出す関数であってもよい。
【0013】
いくつかの実施形態では、該データ処理装置は、スタック選択フラグを格納するための格納位置と、フラグ設定回路とをさらに備え、該データストアは、よりセキュアな領域およびそれ程セキュアではない領域の2つの領域を備え、該フラグ設定回路は、よりセキュアな関数を呼び出すそれ程セキュアではないプログラムコードに応えて、該スタック選択フラグを設定し、任意の関数を呼び出すセキュアなプログラムコードに応えて、およびそれ程セキュアではない関数を呼び出すそれ程セキュアではないプログラムコードに応えて、該スタック選択フラグを解除するように構成される。
【0014】
どのスタックが使用されるべきかを処理回路に指示する1つの方法は、プログラムコードがセキュアなドメイン間で切り替わる際に自動的に設定される、スタック選択フラグを使用することである。これは、回路が、特定の時点において、ハードウェアによって制御され、したがって、使用されるスタックを判定することを可能にする、セキュアかつ低遅延な簡単な方法である。2つのドメインがある場合、関数が呼び出される際に、ハードウェアが、セキュアな領域に対するいずれかの変更に従って設定または解除することができる、単純な1ビットフラグを使用することができる。この点において、フラグの設定とは、フラグを1に設定することを意味してもよく、又はフラグを0に設定することを意味してもよく、フラグの解除とは、フラグを他の値に設定することである。また、フラグを設定するハードウェア回路は、処理回路の一部であってもよく、またはデータ処理装置内のどこかに分散されてもよく、またはあるデータアクセス制御回路の一部であってもよいことにも留意されたい。
【0015】
いくつかの実施形態では、該データ処理装置は、スタック選択フラグを格納するための格納位置と、フラグ設定回路とをさらに備え、該フラグ設定回路は、該スタック選択フラグを、該データ処理回路が異なるセキュアレベルを有する領域間で遷移するのを検出するのに応えて、より低セキュアな領域を指示するよう設定し、該データ処理回路が同一のセキュアレベルの関数呼び出しを実行するのを検出するのに応えて、現在のセキュアな領域を指示するよう設定するように構成される。
【0016】
いくつかの実施形態では、スタック選択フラグは、処理回路が遷移している2つのセキュアな領域のうちのより低い方を指示してもよい。2つ以上の異なるセキュアレベルが存在する場合、単純なフラグの設定および解除は、レベル間を区別するには十分ではなく、フラグに複数ビット値が必要な場合があり、ハードウェアは、領域がその間で遷移する場合、それ程セキュアではない領域を指示する。
【0017】
いくつかの実施形態では、該データ処理回路は、該プログラムコード内のスタック選択フラグ設定命令に応えて、該スタック選択フラグを、それ程セキュアではない領域を指示する値に設定するように構成され、それ程セキュアではない関数を呼び出す該プログラムコードは、該関数を呼び出す前に、該プログラムコード内に該スタック選択フラグ設定命令を備える。
【0018】
回路は、スタック選択フラグを自動的に設定するように、ドメイン間での遷移に応答するが、これはまた、コードに挿入されるソフトウェア命令によっても設定することができる。これは、遷移が正しいフラグ設定を可能にするのに十分ではない場合に、重要であり得る。したがって、例えば、プログラムコードが、それ程セキュアではない関数を呼び出している場合、それ程セキュアではないコードへの遷移は、2つの異なるセキュアな領域のみが存在する場合には、フラグを解除し、3つ以上が存在する場合には、より低い領域を指示するようにフラグを設定する。しかしながら、遷移の前に、セキュアなプログラムは、関数引数をスタックに格納する必要があり、したがって、選択スタックフラグが、それ程セキュアではないスタックを指示するように設定されない限り、それ程セキュアではない関数によって使用される引数は、アクセスすることができないセキュアなスタック上に格納される。
【0019】
いくつかの実施形態では、該データ処理装置は、該プログラムコードが関数を呼び出すのに応答して、該スタック選択フラグによって指示される該スタックが、該関数引数および該戻り値についてアクセスされるように、該スタック選択フラグに従って、該関数引数および該戻り値についてアクセスする該スタックを判定する。
【0020】
前述されるように、実行されているプログラムコードの格納位置は、一般的に、どのスタックを使用するかのわかりやすい指示である。しかしながら、異なるセキュリティドメイン内の関数が呼び出されている場合、2つのドメイン間でデータ値が受け渡される場合に、両方の関数およびそれを呼び出しているプログラムがアクセス可能なスタックを使用する必要があり得るため、この場合では、どのスタックが使用されるべきかを判定するために、スタック選択フラグを使用することができる。
【0021】
いくつかの実施形態では、該データ処理回路は、少なくとも1つのレジスタに、スタック上の少なくとも1つの位置の値がロードされることを指示する、該プログラムコード内のレジスタスタックロード命令に応えて、該スタック選択フラグおよび現在の処理ドメインの該セキュアレベルに従って、どのスタックにアクセスするかを判定するように構成される。
【0022】
いくつかの実施形態では、該データ処理回路は、少なくとも1つのレジスタに、スタック上の少なくとも1つの位置の値がロードされることを指示する、該プログラムコード内のレジスタスタックロード命令に応えて、該スタック選択フラグに従って、どのスタックにアクセスするかを判定するように構成される。
【0023】
正しいスタックが選択されるように、スタックからレジスタに値がロードされる際に、スタック選択フラグが考慮されるべきであるということを指示する、特別命令を有すると便利である場合がある。このようにして、この新しい命令を使用することによって、ドメイン間でデータを受け渡すことを可能にする一方で、システムのセキュリティを維持することができる。スタック選択フラグは、ドメインを指示するのに十分であってもよく、またはフラグおよび現在の動作ドメインが、使用するスタックの指示を提供してもよい。
【0024】
いくつかの実施形態では、該データ処理回路は、少なくとも1つのレジスタ内に格納されている少なくとも1つの値が、スタック上の少なくとも1つの位置に格納されることを指示する、該プログラムコード内のレジスタスタック格納命令に応えて、該スタック選択フラグから、該スタックが、該セキュアなスタックまたは該それ程セキュアではないスタックを備えるかを判定するように構成される。
【0025】
いくつかの実施形態では、該データ処理回路は、少なくとも1つのレジスタ内に格納されている少なくとも1つの値が、スタック上の少なくとも1つの位置に格納されることを指示する、該プログラムコード内のレジスタスタック格納命令応えて、該スタック選択フラグおよび現在の処理ドメインの該セキュアレベルから、該スタックが、該セキュアなスタックまたは該それ程セキュアではないスタックを備えるかを判定するように構成される。
【0026】
スタックロード命令と同様に、異なるセキュリティドメインで動作可能な関数がプログラムから呼び出される場合に、異なるセキュリティドメイン間でデータ値を転送する際に、確実に正しいスタックが使用されるように、スタック選択フラグと関連して使用され、現在のセキュリティドメインと関連して使用されてもよい、スタック格納命令もまた存在する。
【0027】
いくつかの実施形態では、該データ処理回路は、該関数コードが該それ程セキュアではない領域内にあり、該プログラムコードが該セキュアな領域内にあるのに応えて、戻りアドレスを該セキュアなスタック上にロードし、該関数からの該戻りアドレスが該セキュアなスタック上にロードされていることを指示する値を該リンクレジスタにロードするように構成される。
【0028】
よりセキュアな領域からそれ程セキュアではない領域に遷移する場合、非セキュアな側は、戻りアドレスを入手可能であるべきではない。戻りアドレスを読み出すためにアクセスされるべきであるセキュアなスタックを指示するために、リンクレジスタを使用することは、最小限の追加のハードウェア費用または性能影響でプログラムカウンタのセキュリティを保護する、単純な方法である。
【0029】
いくつかの実施形態では、該データ処理回路は、実行可能なコードの標的アドレスを格納するレジスタを指定する、該プログラムコード内のスタック選択フラグ設定命令に応えて、該標的アドレスが、該セキュアな領域内であるか、または該それ程セキュアではない領域内であるかを判定し、該標的アドレスが該それ程セキュアではない領域内である場合に、該それ程セキュアではない領域を指示するように、該スタック選択フラグを設定するように構成される。
【0030】
前述されるように、スタック設定フラグは、自動的に設定されてもよく、または命令に応えて設定されてもよい。単純なスタックフラグ設定命令に加えて、実行可能なコード、例えば、実行される後続コードの標的アドレスを指示する、スタックフラグ設定命令もまた利用可能であってもよい。これは、プログラムがセキュアなドメイン内で実行している場合に、呼び出される関数が、呼び出したプログラムが実行しているドメインと同一のドメイン内で実行されるか否かが不明である場合に使用することができる。実際の実行中、この命令を使用することで、呼び出されたコードの標的アドレスを調べることが可能になり、呼び出しているコードと異なるセキュアな領域内である場合、これを指示するように、スタック選択フラグを適切な値に設定することができる。さらに、関数が実行された後でいずれかの戻り値を探す際、実行されたコードのアドレスは、必須情報を提供する。
【0031】
いくつかの実施形態では、該データ処理回路は、実行可能なコードの標的アドレスを格納するためのレジスタを指定する、該プログラムコード内のさらなるフラグ設定命令に応えて、該標的アドレスが、該セキュアな領域内であるか、または該それ程セキュアではない領域内であるかを判定し、該スタック選択フラグを設定し、該標的アドレスが該それ程セキュアではない領域内である場合に、さらなるフラグを設定するように構成される。
【0032】
同一の条件に応えて、スタック選択フラグを設定するだけではなく、またさらなるフラグも設定する、追加の命令もまた、有用である場合がある。プロセッサが特定の事象を条件とする命令を使用する場合、これらの事象を指示するようにフラグを設定することができる。いくつかの命令は、スタック選択フラグが設定されているか否かに従って実行されるべきである場合があり、その場合、スタック選択フラグおよびさらなるフラグの両方を設定する命令を使用することが、これを実現する便利な方法である可能性があり、次いで、このさらなるフラグを条件とする命令を使用することができる。使用することができるさらなるフラグの一例は、ゼロフラグである。
【0033】
いくつかの実施形態では、該データ処理回路は、該プログラムコード内の複数レジスタ消去命令に応えて、該複数レジスタ消去命令によって指定される複数のレジスタ内に格納されている値を消去するように構成される。
【0034】
処理回路が実行することのできる複数レジスタ消去命令を有することが有利である場合がある。セキュアなドメインから非セキュアなドメインに切り替わる際、非セキュアなドメインは、セキュアなドメイン内で実行しているセキュアなコードによってレジスタ内に格納された値を入手可能であるべきではない。したがって、単純に複数レジスタ消去命令を実行することが、これらの値を消去する便利な方法である場合がある。
【0035】
いくつかの実施形態では、該データ処理装置は、現在実行しているコードが、セキュアな状態を格納するために、該複数のレジスタのうちのどれを使用できるかを指示する値を格納するためのセキュアコンフィギュレーション格納位置を備え、該データ処理回路は、よりセキュアな状態からそれ程セキュアではない状態に遷移する際に、該セキュアコンフィギュレーション値によって指示される該複数のレジスタを消去するように構成される。
【0036】
セキュアな状態からそれ程セキュアではない状態に遷移する際、それ程セキュアではない側は、レジスタ内に格納されている機密データにアクセス可能であるべきではなく、そのため、レジスタは、遷移する前に消去されるべきである。場合によっては、機密データを格納するために、すべてのレジスタが使用されるわけではなく、これは、ドメインのセキュアレベルおよび実行されているコードに依存する場合がある。その場合、それ程セキュアではないドメインに切り替わる際に、処理回路が、単純に機密データを格納し得るレジスタを消去することができ、他のレジスタは、消去する必要がなく、それによって、時間および電力を削減するように、セキュアコンフィギュレーション格納位置内に格納されているこの情報が入手可能であれば有利である。この点において、多くの場合、セキュアなドメイン内で実行している際、レジスタを消去する前に、セキュアな状態は、保存されなければならず、その場合、どのレジスタにこの状態が格納されるか、およびしたがって、どのレジスタが保存するかを判定するために、セキュアコンフィギュレーションレジスタが使用されることに留意されたい。レジスタから状態を格納することは、時間および電力がかかり、したがって、任意の所与の時間に、消去し、保存するために必要な数を判定することができることが有利である。
【0037】
いくつかの実施形態では、該データ処理回路は、例外処置回路を備え、該例外処置回路は、例外の受信に応答して、該レジスタの該セットを消去するように構成され、該レジスタの該セット内の該レジスタは、該実行ドメインのセキュアレベルおよび該例外が取り込まれる該ドメインに依存する。
【0038】
セキュリティドメイン間で遷移する例外を取り込む際、処理回路は、レジスタを消去する必要がある場合があり、また、状態をスタックに格納する必要もある場合がある。状態を消去し、場合によっては格納する必要があるレジスタの数は、プロセッサが動作しているドメイン、および例外のドメインに依存する。例えば、それ程セキュアではない状態に遷移する際、機密データを格納するために使用され得るレジスタのセットは、それ程セキュアではない側がデータを入手不可能となるように、消去されるべきである。この点において、レジスタのセットは、現在実行しているコードによって、セキュアなデータを格納するために使用されてもよいレジスタである。したがって、これは、すべてのレジスタであってもよく、またはそれらの一部だけであってもよく、これは、おそらく、セキュアコンフィギュレーション値によって指示される。
【0039】
いくつかの実施形態では、該例外処置回路は、該割り込みが該セキュアなドメイン内で実行されており、該さらなる割り込みの優先度が、同等以下であり、該それ程セキュアではないドメインへの切り替えを指示しており、その上、該データ処理回路が、該割り込みの完了後に該さらなる割り込みを取り込むように構成されており、割り込まれた該元のコードが該セキュアなドメイン内に存在する場合に、該セットおよび該さらなるレジスタが、該セキュアなスタックに格納されて消去されるように、さらなるレジスタ内に格納されている該状態を保存するように構成されている場合、ならびに、割り込まれた該元のコードが該非セキュアなドメイン内に存在する場合に、レジスタの該セットを消去するように構成されている場合を除き、該割り込みが完了する前に、さらなる割り込みの受信に応答して、さらなるスタック格納動作を実施しないように構成され、該割り込みは、該セキュアなドメイン内で実行され、該さらなる割り込みは、該それ程セキュアではないドメイン内での実行への切り替えを指示し、優先度が該割り込みと同等以上であり、該さらなる割り込みは、該割り込みの完了の前に取り込まれ、該セットおよび該さらなるレジスタ内に格納されている状態は、該セキュアなスタックに保存され、該セットおよびさらなるレジスタは、消去される。
【0040】
異なるセキュリティの領域間で確実にデータが漏れないようにするために注意する必要があるさらなる状況は、割り込みが受信される際である。本発明の実施形態が、関数呼び出しに応えて遷移するのを制御するのと同様に効率的かつ安全に、割り込み過程を制御するために、本発明の実施形態を使用することができる。この点において、一般的に、例外に続いて、プロセッサの現在の状態を保持するレジスタのセットを復元する必要があり、一般的に、例外の取り込みを受けて、プロセッサの現在の状態を保持するレジスタのセットが、スタックに格納されるべきである。しかしながら、セキュアな状態から非セキュアな状態になる場合、非セキュアな側は、機密データを格納し得るすべてのレジスタ内の値を入手可能であるべきではなく、それらはすべて、セキュアなスタックに保存されて、消去される必要がある場合がある。第1の割り込みが完了する前にさらなる割り込みが到着する場合、さらなる問題が生じる。さらなるスタック格納動作を実施する必要はない場合があるが、しかしながら、さらなるデータ格納が必要である状況が存在し得る。
【0041】
例えば、第1の割り込みは、セキュアなドメインからのものであり、セキュアなドメイン内で実行するものであり、さらなる割り込みは、優先度がより低く、それ程セキュアではないドメイン内のものである場合、第1の割り込みが終了した際に、セキュアなドメインから非セキュアなドメインに変わり、その時点で、一般的にスタックに格納される(およびしたがって、既に格納されている)サブセット内ではなく、機密データを格納するレジスタセット内にあるレジスタは、セキュアなスタックに格納される必要がある。次いでレジスタを、さらなる割り込みが実行される前に、データの損失なく、安全に消去することができる。
【0042】
代替する状況では、第1の割り込みは、それ程セキュアではないドメインから取り込まれるが、セキュアなドメイン内で実行される。これが発生する場合、セキュリティ問題はなく、したがって、レジスタのサブセット(呼び出し側が保存したレジスタである)だけが、スタックに格納される。しかしながら、それ程セキュアではないドメイン内での実行への切り替えを指示する、さらなる割り込みが到着する場合、注意しなければならない、セキュアなドメインからそれ程セキュアではないドメインへの切り替えが存在する。さらなる割り込みの優先度が、第1の割り込みより高い場合、第1の割り込みの完了の前に、さらなる割り込みが取り込まれ、セット内のサブセットおよびさらなるレジスタ内に格納されている状態は、セキュアなスタックに保存され、レジスタが消去されるべきであり、これは、第1の割り込みの第1の命令が実行されたと見なす。そうではない場合、レジスタは、いかなるセキュアなデータも含有せず、レジスタを保存または消去する必要はない。しかしながら、さらなる割り込みの優先度がより低い場合、さらなる割り込みは、第1の割り込みが完了した後にのみ取り込まれ、この時点で、セキュアな状態はもはや要求されず、保存する必要はないが、しかしながら、機密データを格納し得るレジスタのセットは、消去されるべきである。
【0043】
いくつかの実施形態では、該データ処理装置は、コードの現在実行している部分が、セキュアな状態を格納するために、該複数のレジスタのうちのどれを使用できるかを指示する値を格納するためのセキュアコンフィギュレーション格納位置を備え、該例外処置回路は、該セキュアコンフィギュレーション格納位置に格納されている該値から、該サブセットおよび該レジスタのうちの該さらなる1つを判定する。
【0044】
データ処理装置は、多くのレジスタを有するが、いずれの時点でも、いくつかのみが、セキュアな状態を格納するために使用されてもよい。そのような場合、どのレジスタがセキュアな状態を格納するために使用されるかを指示する、セキュアコンフィギュレーション格納位置に格納されているセキュアコンフィギュレーション値を有することが有利である場合がある。そのような場合、この値から、レジスタのセットを判定することができ、これらのみを、セキュアなスタックに保存する必要があり、他のレジスタは、それらの値を完全なままにしておくことができる。同様に、これらのレジスタのみを消去する必要がある。
【0045】
いくつかの実施形態では、該データ処理装置は、例外戻り値を格納するための格納位置を備え、該データ処理回路は、該例外の取り込みを受けて、該データ処理装置が動作しているドメインを指示するよう該例外戻り値を設定するように構成されており、該例外処置回路は、例外から戻るのを受けて、該例外戻り値に格納されている該値に従って、どのレジスタを該スタックからの値で更新するかを判定する。
【0046】
このように割り込みを処置することは、わずかな追加のハードウェアまたはソフトウェアを必要とする場合があり、低遅延である場合があるが、例外が取り込まれたドメインのセキュアレベルの知識を必要とする場合がある。これは、どのスタックをレジスタで更新するか、およびいくつのレジスタがそのスタックに格納されるかを判定する際に重要である場合がある。特に、初期状態がセキュアな状態であり、非セキュアな状態によってレジスタのセットが見られることを回避するために、レジスタのセットがセキュアなスタックに保存されている場合、これらのレジスタのすべてを復元することができるように、これは、既知である必要がある。状態がスタックに保存されているレジスタの数は、初期状態のセキュリティおよび遷移される状態のセキュリティによって変化するため、復元する際、初期状態に関する値情報が既知である必要がある場合がある。
【0047】
いくつかの実施形態では、該データストアは、異なる機密度のデータを格納するための複数のセキュアな階層領域を備え、より低いレベルのセキュアなドメイン内で動作している該データ処理回路は、より高いレベルのセキュアな領域内に格納されるデータにアクセス不可能であり、
該データストアは、該複数のセキュアな領域のそれぞれの中に少なくとも1つのスタックを備え、
該スタック選択フラグを格納するための該格納位置は、複数のビットを備え、該データ処理回路は、該スタック選択フラグに従って、関数引数および戻り値についてどのスタックにアクセスするかを判定するように構成される。
【0048】
いくつかの実施形態では、1つのセキュアな領域、および1つの非セキュア、またはそれ程セキュアではない領域の2つの領域のみが存在する場合があるが、他の実施形態では、複数の異なる階層セキュアレベルを有する複数の異なる領域が存在してもよい。したがって、最もセキュアなドメイン内で実行されるコードは、すべての領域内に格納されているデータへのアクセスを有し、一方、それ程セキュアではないドメイン内で実行しているコードは、それ自体のセキュアな領域内および他のより低セキュアな領域内に格納されているデータへのアクセスのみを有する。そのようなセキュアな階層領域が存在する場合、スタック選択フラグは、アクセスされるスタックが存在する実際のセキュアな領域を指示するために、多数のビットを備える必要がある場合がある。そのような場合、指示される領域は、プログラムコードおよび関数コードが格納されている、2つの領域のうちのより低いセキュアレベルの領域である。このようにして、フラグは、関数引数および戻り値についてどのスタックにアクセスするかを指示する。
【0049】
いくつかの実施形態では、該データストアは、異なる機密度のデータを格納するための複数のセキュアな領域を備え、該領域のうちの少なくとも2つは、同一の機密度のデータを格納する兄弟領域であり、より高いレベルのセキュアなドメイン内に格納されているデータは、該兄弟領域内に格納されている該データにアクセス可能であるが、より低いレベルのセキュアなドメイン内または他のセキュアな兄弟ドメイン内で動作している該データ処理回路は、該兄弟領域内に格納されている該データにアクセス不可能であり、該データストアは、該セキュアな領域のそれぞれの中に少なくとも1つのスタックと、該兄弟領域のいずれかに格納されているプログラムコードがアクセス可能なさらなる兄弟スタックとを備え、該兄弟領域のうちの一方に格納されているプログラムコードに応えて、関数を呼び出だし該関数コードは、該兄弟領域のうちの他方に格納されており、該データ処理回路は、該プログラムコードおよび該関数コードを実行する際、該さらなる兄弟スタック上の、該関数によって使用される引数および該関数から返されるデータにアクセスするように構成される。
【0050】
階層セキュアレベルに加えて、また、兄弟セキュアレベルと称される同一のセキュアレベルを有するが、相互がアクセス不可能な特定の領域も存在してもよい。これは、異なる提供元からのコードが格納され、どちらも、他方がそれらのコードへのアクセスを有することを望まない場合に、有利であり得る。そのような場合、両方のセキュアな領域がアクセスすることができ、兄弟セキュアレベルのうちの一方の関数が、他方の兄弟セキュアレベルから呼び出される場合に、関数引数および戻り値を格納するために使用することができる、追加のスタックが存在してもよい。
【0051】
また、これらの兄弟セキュアレベルは、多くのセキュアレベルを有する階層システム内にも存在してもよいことに留意されたい。
【0052】
本発明の第2の態様は、プログラムコードに応えてデータ処理動作を実施するためのデータ処理回路と、該データ処理回路によって処理されるデータアイテムを格納するための複数のレジスタと、データを格納するためのデータストアであって、該セキュアなドメイン内で動作している該データ処理回路がアクセス可能であり、それ程セキュアではないドメイン内で動作している該データ処理回路がアクセス不可能である機密データを格納するための少なくとも1つのセキュアな領域と、それ程セキュアではないデータを格納するためのそれ程セキュアではない領域とを備える、データストアと、を備え、該データストアは、該セキュアな領域内に1つのセキュアなスタック、および該それ程セキュアではない領域内に1つのそれ程セキュアではないスタックの少なくとも2つのスタックを備え、該データ処理回路は、処理中に、該スタックと該レジスタとの間でデータを転送するように構成され、該データ処理回路は、該セキュアな領域内に格納されているプログラムコードを処理する際に、該セキュアなドメイン内で動作し、該それ程セキュアではない領域内に格納されているプログラムコードを処理する際に、該それ程セキュアではないドメイン内で動作する、データ処理装置上でデータを処理する方法であって、該データストア内に格納されているプログラムコードを実行することと、実行されている該プログラムコードの該格納位置に応えて、どのスタックにデータを格納するか、またはどのスタックからデータをロードするかを判定することと、第1の領域内に格納されているプログラムコードに応えて、実行される関数を呼び出すことであって、該関数コードは、第2の領域内に格納されており、該第2の領域は、該第1の領域とは異なるセキュアレベルを有する、ことと、該第1の領域および該第2の領域のうちのどちらがより低いセキュアレベルを有するかを判定することと、該プログラムコードおよび該関数コードを実行する際、関数引数および戻りデータ値について、該より低いセキュアレベルを伴う該第1の領域または該第2の領域の該スタックにアクセスすることとを含む、データ処理装置上のデータ処理方法を提供する。
【0053】
本発明の第3の態様は、処理回路によって実行される際、該レジスタスタックロード命令によって指定される少なくとも1つのレジスタに、スタック上の少なくとも1つの位置の値をロードし、スタック選択フラグに従って、該スタックが、データストアのよりセキュアな領域内にセキュアなスタックを備えるか、またはデータストアのそれ程セキュアではない領域内にそれ程セキュアではないスタックを備えるかを判定するように、該データ処理回路を制御する、レジスタスタックロード命令を備える、コンピュータプログラム製品を提供する。
【0054】
本発明の第4の態様は、処理回路によって実行される際、該レジスタスタック格納命令によって指定される少なくとも1つのレジスタ内の少なくとも1つの値を、スタック上の少なくとも1つの位置に格納し、該スタックが、スタック選択フラグに従って、データストアのよりセキュアな領域内にセキュアなスタックを備えるか、またはデータストアのそれ程セキュアではない領域内にそれ程セキュアではないスタックを備えるかを判定するように、該データ処理回路を制御する、レジスタスタック格納命令を備える、コンピュータプログラム製品を提供する。
【0055】
本発明の第5の態様は、処理回路によって実行される際、該命令によって指定されるレジスタ内に格納されている実行可能なコードの標的アドレスが、現在の動作領域と比較してそれ程セキュアではない領域内であるか否かを判定し、該命令によって指定されるレジスタ内に格納されている実行可能なコードの標的アドレスが、現在の動作領域と比較してそれ程セキュアではない領域内である場合に、該それ程セキュアではない領域を指示するよう該スタック選択フラグを設定するように、該データ処理回路を制御する、スタック選択フラグ設定命令を備える、コンピュータプログラム製品を提供する。
【0056】
本発明の第6の態様は、処理回路によって実行される際、該命令によって指定されるレジスタ内に格納されている実行可能なコードの標的アドレスが、現在の動作領域と比較してそれ程セキュアではない領域内であるか否かを判定し、該命令によって指定されるレジスタ内に格納されている実行可能なコードの標的アドレスが、現在の動作領域と比較してそれ程セキュアではない領域内である場合に、該それ程セキュアではない領域を指示するよう該スタック選択フラグを設定し、さらなるフラグを設定するように、該データ処理回路を制御する、さらなるフラグ設定命令を備える、コンピュータプログラム製品を提供する。
【0057】
本発明の第7の態様は、処理回路によって実行される際、該複数レジスタ消去命令によって指定される複数のレジスタ内に格納されている値を消去するように、該データ処理回路を制御する、複数レジスタ消去命令を備える、コンピュータプログラム製品を提供する。
【0058】
本発明の第8の態様は、プログラムコードに応えてデータ処理動作を実施するためのデータ処理手段と、複数のレジスタと、データを格納するためのデータ格納手段であって、異なるセキュアレベルを有する複数の領域を備え、該セキュアなドメイン内で動作している該データ処理手段がアクセス可能であり、それ程セキュアではないドメイン内で動作している該データ処理手段がアクセス不可能である機密データを格納するための少なくとも1つのセキュアな領域と、それ程セキュアではないデータを格納するためのそれ程セキュアではない領域とを備える、データ格納手段と、を備え、データ格納手段は、該セキュアな領域内に1つのセキュアなスタック、および該それ程セキュアではない領域内に1つのそれ程セキュアではないスタックの少なくとも2つのスタックを備え、該データ処理手段は、該セキュアな領域内に格納されているプログラムコードを処理する際に、該セキュアなドメイン内で動作し、該それ程セキュアではない領域内に格納されているプログラムコードを処理する際に、該それ程セキュアではないドメイン内で動作し、該データ処理手段は、実行されている該プログラムコードの該格納位置に応えて、どのスタックにデータを格納するか、またはどのスタックからデータをロードするかを判定し、第1の領域内に格納されているプログラムコードに応えて、実行される関数を呼び出し、該関数コードは、第2の領域内に格納されており、該第2の領域は、該第1の領域とは異なるセキュアレベルを有し、該データ処理手段は、該第1の領域および第2の領域のうちのどちらがより低いセキュアレベルを有するかを判定し、該プログラムコードおよび該関数コードを実行する際、関数引数および戻りデータ値について、該より低いセキュアレベルを伴う該領域の該スタックにアクセスする、データ処理装置を提供する。
【0059】
本発明の第9の態様は、
プログラムコードに応えてデータ処理動作を実施するためのデータ処理回路と、
複数のレジスタと、
データを格納するためのデータストアであって、各領域がセキュアレベルを有する複数の領域を備え、該セキュアなドメイン内で動作している該データ処理回路がアクセス可能であり、それ程セキュアではないドメイン内で動作している該データ処理回路がアクセス不可能である機密データを格納するための少なくとも1つのセキュアな領域と、それ程セキュアではないデータを格納するためのそれ程セキュアではない領域とを備える、データストアと、
を備え、
該データストアは、該セキュアな領域内に1つのセキュアなスタック、および該それ程セキュアではない領域内にそれ程セキュアではないスタックの少なくとも2つのスタックを備え、
該データ処理回路は、例外処置回路を備え、該例外処置回路は、該データ処理回路が該セキュアなドメイン内で実行しており、該割り込みが、それ程セキュアではないドメイン内でのプログラムコードの実行への切り替えを指示する際に、例外の受信に応答して、該レジスタのセットを消去するように構成され、該レジスタの該セット内の該レジスタは、該実行ドメインのセキュアレベルおよび該例外が取り込まれる該ドメインに依存する、
データ処理装置を提供する。本発明は、複数のセキュアな状態を有する処理装置では、例外の取り込みが、処理回路を異なるセキュアレベル間で遷移させる場合があることを認識する。
【0060】
例外は、外部事象によって引き起こされる割り込み等の非同期例外であってもよく、またはプログラムによって意図的に、もしくは障害に応えて引き起こされる同期例外であってもよい。いずれの場合でも、セキュアな状態から非セキュアな状態に遷移する場合、少なくともいくつかのレジスタを消去する必要があり、場合によっては、データのセキュリティが維持される場合には、それらの状態をスタックに格納する必要がある場合がある。状態を消去する必要があるレジスタの数は、プロセッサが動作しているドメインおよび例外のドメインに依存する。例えば、それ程セキュアではない状態に遷移する際、機密データを格納するために使用され得るレジスタのセットは、それ程セキュアではない側がデータを入手不可能となるように、消去されるべきである。それ程セキュアではない状態への遷移を要求しない例外を取り込む際、一般的に、消去する必要があるレジスタはない。本発明は、これらの遷移に応答して、要求されるレジスタを消去することができ、それによって、割り込みをプロキシする必要性を回避する、例外処置回路を提供する。
【0061】
いくつかの実施形態では、該データ処理回路は、該レジスタの該セットを消去する前に、該レジスタの該セット内に格納されている状態を、該データ処理回路が実行している該ドメインの該スタックに保存するようにさらに構成される。
【0062】
それ程セキュアではない状態に遷移する際、セキュアな状態を格納しているレジスタは、常に消去されなければならないが、多くの実施形態では、この状態は、保たれるべきであり、したがって、スタックに保存される。これは、かなり電力および時間を必要とする過程であり、したがって、要求されるレジスタを指定することができることで、数を制限することを可能にし、性能を改善することが可能になる。この点において、より低いセキュアレベルへの遷移がない例外を取り込む際、より低いセキュアレベルに遷移する場合より少ないレジスタをスタックに保存する必要がある。いくつかの実施形態では、例外がそれ程セキュアではない状態への遷移を引き起こさない限り、呼び出し側が保存したレジスタのみを保存する必要があり、その場合、それ程セキュアではない側からデータが見えることを回避するために、機密データを格納するいずれのレジスタも消去する必要があり、データが損失されるべきではない場合、データを保存する必要がある。
【0063】
本発明の上記および他の目的、特長、ならびに利点は、添付の図面と併せて読まれる以下の例証的な実施形態の詳細な説明から明らかになる。
【図面の簡単な説明】
【0064】
図1】本発明の実施形態による、セキュアな領域および非セキュアな領域を伴うデータストアを有する、データ処理装置を示す。
図2】本発明の実施形態による、2つの異なるセキュアな領域および非セキュアな領域を伴うデータストアを有する、データ処理装置を示す。
図3A】セキュアなプログラムからの非セキュアな関数の呼び出しを図式的に図示する。
図3B】本発明の実施形態による命令を示す。
図4】非セキュアなプログラムからのセキュアな関数の呼び出しを図式的に示す。
図5】いくつかのセキュアなドメイン階層構造を図式的に示す。
図6】兄弟ドメインを含むいくつかのセキュアなドメインの階層構造を図式的に示す。
図7】コード実行中の割り込みの取り込みを図式的に示す。
図8A】第1の例外が受信され、次いで第2の例外が受信される際の、保存される状態を示す。
図8B】割り込みの取り込みを受けて状態がスタックに保存されるレジスタを示す。
図9】本発明の実施形態による方法におけるステップを図示する、フロー図を示す。
図10】本発明の実施形態による命令が実行される際の、方法におけるステップを図示する、フロー図を示す。
【発明を実施するための形態】
【0065】
図1は、例えば、マイクロコントローラであってもよい、データ処理装置10を示す。これは、命令を処理するための処理回路20と、処理回路20によって処理されるデータを格納するため、およびまた、処理回路20が実行するプログラムコードも格納するためのデータストア30とを備える。
【0066】
データストア30は、異なるセキュリティの2つの領域、セキュアな領域32および非セキュアな領域34を有する。非セキュアな領域34内に格納されているコードは、実行している際、セキュアな領域32内に格納されているデータにアクセス不可能である。
【0067】
また、データ処理装置10は、セキュアな領域32および非セキュアな領域34へのアクセスを制御する、メモリ保護ユニットMPU40も有する。この制御は、メモリ保護ユニットによって行われてもよいが、他の実施形態では、現在実行されているコードが格納されている領域を監視し、これに従ってメモリの異なる領域へのアクセスを制御する、処理装置内の回路によって、より分散された方法で行われてもよい。
【0068】
本実施形態では、現在実行されているコードが格納されている領域から、処理回路20が実行しているセキュアなドメインが判定される。したがって、セキュアなデータストア32内に格納されているセキュアなプログラムコードは、セキュアなドメイン内で実行され、データ値を格納するために、セキュアなスタック36を使用する。同様に、非セキュアなデータストア34内に格納されている非セキュアなコードは、実行中にデータ値を格納するために、非セキュアなスタック38を使用する。
【0069】
処理回路20は、実行される命令をフェッチするためのフェッチ回路22を有する。これは、これらの命令を復号するための復号回路24と、それらを実行するための実行回路26とを有する。また、例外処置回路28も存在し、これは、後で記載される。
【0070】
実行される命令は、フェッチ回路22によって、データストア30からメモリ保護ユニットMPU40を介してフェッチされる。命令およびデータは、セキュアな領域および非セキュアな領域へのアクセスを制御し、セキュアなデータを非セキュアな側から隔離する、MPU40を介して読み出される。
【0071】
本実施形態では、データ処理中に使用される汎用レジスタを有するレジスタバンク60が存在する。これらの汎用レジスタは、どの命令が次に実行されるかを指示するプログラムカウンタPCと、スタック内のどの点で次のデータアクセスが行われるべきかを指示するスタックポインタSPとを有する。本実施形態では、セキュアな側内のスタックおよび非セキュアな側内のスタックが存在するため、セキュアなスタックポインタおよび非セキュアなスタックポインタが存在するが、実行されているプログラムは、いずれの時点でも、これらのうちの1つのみを直接見ることができる。いくつかの実施形態では、各スタックに複数のスタックポインタが存在する場合があるが、この場合も同様に、いずれの時点でも1つのみを見ることができることに留意されたい。
【0072】
また、レジスタバンク60内には、処理されるデータ値を格納するための汎用レジスタも存在する。本実施形態では、これらは、R0〜R12と標示されている。この場合、関数と関数を呼び出すプログラムとの間で値を転送するために、レジスタR0〜R3を使用することができ、この目的のために必要とされないこれらのレジスタのいずれも、それ程セキュアではないドメインに遷移する前に消去する必要がある。レジスタR0〜R3に格納することができるより多くの引数または戻り値が存在する場合、関数と関数を呼び出したプログラムとの間で遷移する際に、これらをスタック外に保存する必要がある。この点において、これらの値を保持するための特定のレジスタを特定することによって、スタックに保存する必要がある値の数を減らし、したがって、関数とプログラムとの間で遷移する際の時間を削減するが、しかしながら、過剰な数が特定される場合、システムは、他の観点において効率的ではない。本実施形態では、この目的に4つのレジスタが使用されるが、異なる数のレジスタを使用することができることが、当業者には明白であるべきである。あるいは、いくつかの実施形態では、データ値を格納するためにレジスタが使用されず、値は、スタック上に格納され、スタックポインタを介して間接的にアクセスされる。これは、明らかに、エリアは削減されるが、パフォーマンスヒットを伴う。
【0073】
非セキュアな側のコードが実行されており、それが関数を呼び出し、MPU40が、関数コードはセキュアな側内に格納されていると判定する場合、レジスタR0〜R3に納まらない、いずれの引数も、非セキュアな側のスタック38上に格納する必要がある。本実施形態では、CPSRレジスタ内のスタック選択フラグASSelは、処理回路20内のスタック選択フラグ設定回路が、非セキュアなプログラムコードからセキュアな関数が呼び出されていると判定する場合に、処理回路20内のスタック選択フラグ設定回路によって設定される。これは、非セキュアなスタック38が、スタック上に格納されているその関数の任意の引数にアクセスする必要があることを実行回路26に指示する。
【0074】
関数が実行している際、関数は、セキュアな関数であるため、セキュアなスタック36を使用し、終了すると、非セキュアな側のプログラムコードに戻り、セキュアな関数は、選択フラグASSelの値から、戻り値(R0〜R3に納まらない)を非セキュアなスタック38に格納するべきであることを知る。次いで、機密データを格納するために利用可能なレジスタ(これらは、コンフィギュレーションレジスタ62内に格納されている、セキュアコンフィギュレーションSCR値から判定することができる)が消去される。
【0075】
この点において、より低いセキュリティレベルからより高いセキュリティレベルに遷移するのを受けて、MPUハードウェア40からのセキュリティドメイン情報に基づき、より低いセキュリティレベルを指示するように、フラグを自動的に設定することができ、引数および戻り値にスタックが使用されるべきであり、同一のセキュリティレベルの関数が呼び出される場合に、またはより高いセキュリティレベルからより低いセキュリティレベルに遷移するのを受けて、スタックを自動的に消去することができる。しかしながら、この自動的なハードウェア設定は、常に正しい値を有するフラグをもたらすわけではないため、フラグが、ソフトウェアによって設定される必要がある場合が存在する。これは、後の実施形態に関して記載される。
【0076】
このようにして、一般的にハードウェアによって管理され、効率的である、容易かつ単純な方法で、非セキュアなスタックを使用して、2つのドメイン間でデータ値が転送される。
【0077】
MPUは、フラグの設定で使用される、セキュリティドメイン遷移に関する情報を提供すると記載されるが、この情報を判定する回路は、データ処理装置内の他の場所に位置することができることに留意されたい。この点において、いくつかの実施形態では、DMA(直接メモリアクセス)コントローラ等の周辺機器を介したデータストアへのアクセスが存在する場合があり、これらがMPUを介してデータストアにアクセスしない場合、非セキュアな側からのセキュアな状態の隔離が、回路によって実現されなければならず、DMAもまた、この対象である。
【0078】
また、図1は、浮動小数点レジスタ等の追加の専用レジスタを有する、追加のレジスタバンク64も示す。レジスタバンク60はまた、例外が取り込まれる、または関数が呼び出される際の戻りアドレスを格納するために使用されてもよい、リンクレジスタ65も備える。このレジスタは、あるいは、例外が取り込まれたドメインのセキュアレベルを指示する、EXC_RETURNを格納してもよく、これは、プロセッサが、状態を復元する際にどのスタックにアクセスするか、およびいくつのレジスタをロードする必要があるかを知ることを可能にし、これは、後で記載するものとする。
【0079】
手短に言えば、プログラム状態レジスタ(CPSR)内のASSel(Alternate Stack Select)フラグを使用することによって、ドメイン間呼び出し問題を克服し、複数のスタックと関連付けられるセキュリティを維持することが可能である。このフラグは、関数呼び出しが発生する際、メモリ制御論理が、呼び出しがセキュアな状態への遷移をもたらしたと判定した場合に、ハードウェアによって自動的に1に設定されてもよい。非セキュアな状態への関数呼び出し、および同一の状態内での関数呼び出しは、フラグを0に設定する。そのため、このフラグは、呼び出される側の関数に、関数引数および戻り値にアクセスするためには、バンク化スタックポインタ(すなわち、現在のセキュリティ状態と関連付けられるもの、または非セキュアなポインタ)のうちのどれにアクセスするべきかを指示する。これらの値へのアクセスは、ベースアドレスレジスタを明確に指定しない大部分の既存のロード/格納命令とは異なり、代わりに、ASSelフラグに基づき、ベースアドレスとして正しいスタックポインタを自動的に選択する、いくつかの新しいインデックス付き取り込みおよび格納命令を介して提供されてもよい。これらの命令は、後で記載される。スタック上の関数引数または戻り値へのアクセスが、サブ関数が戻った後に要求される場合、セキュアな状態に属する外部API関数は、いずれのサブ関数呼び出しの前後でも、ASSelフラグを保存し、復元しなければならない。これは、セキュアなドメインまたは非セキュアなドメインのいずれかからセキュアな関数を呼び出すことを可能にし、一方で、依然として、スタックを介して値を受け渡す能力を維持する。
【0080】
例外処置回路28は、例外の取り込みを制御し、これらの例外は、よりセキュアな状態からそれ程セキュアではない状態への遷移をもたらし、機密データを格納し得るレジスタのセットは、非セキュアな側が、これらのレジスタ内に格納されているデータを入手可能になることを回避するために、例外を取り込む前に消去される。例外から戻るのを受けて状態を復元することができるように、これらのレジスタ内に格納されている状態は、セキュアなスタック上に格納される。
【0081】
図2は、データストア30内に2つのセキュアな領域S1およびS2が存在し、S2がS1よりセキュアである、図1に代わる実施形態のデータ処理装置10を示す。本実施形態では、各領域は、それ自体のスタックを有する。したがって、実行されているプログラム20からは、いずれの時点でも1つのスタックポインタしか直接見えないが、3つのスタックポインタが存在する。
【0082】
前述されるように、関数を呼び出したプログラムとは異なるセキュアなドメイン内で実行されている関数引数または戻り値を格納するのに、どのスタックを使用するべきかを判定するために、CPSR内のスタック選択フラグASSelを使用することができる。いくつかの異なるセキュアレベルが存在する場合、適切なレベルを指示するためには、複数ビットフラグ値が必要である。より低いセキュリティレベルからより高いセキュリティレベルに遷移するのを受けて、MPUハードウェアからの情報に基づき、より低いセキュリティレベルを指示するようにフラグを自動的に設定することができ、同一のセキュリティレベルの関数が呼び出される場合、またはより高いセキュリティレベルからより低いセキュリティレベルに遷移する際、現在のセキュリティレベルを指示するようにフラグを設定することができる。この自動的なハードウェアによる設定は、常に正しい値を有するフラグをもたらすとは限らないため、フラグが、ソフトウェアによって設定される必要がある時がある。
【0083】
ソフトウェアによるフラグの設定の一実施例が、図3Aに関して記載される。図3Aは、非セキュアな関数を呼び出すセキュアなプログラムを図式的に示し、プログラムおよび関数は、図1の処理装置によって実行されている。この場合、関数を呼び出す前にASSelフラグを設定するプログラムコード内に、スタック選択フラグ設定命令が存在する。これは、関数に要求される引数が、非セキュアなスタック上に格納されるべきであることを処理装置に指示する。一般的に、セキュアな状態内で実行しているプログラムコードは、セキュアなスタック36を使用し、したがって、引数がこのスタック上に格納されるのを回避するために、この命令が必要である。したがって、いったんこのフラグが設定されると、スタック格納命令がある場合、ASSelフラグは、処理回路に、これらの値が格納されるスタックは、非セキュアなスタックであることを指示する。
【0084】
関数が呼び出される際、MPU40は、ここで実行されるコードが非セキュアな側34に格納されているという点で、非セキュアなドメインへの遷移を検出し、フラグが解除される。この時点で、処理回路は、非セキュアなドメイン内で実行しており、したがって、非セキュアなスタック38が使用される。セキュアなドメインに戻ると、スタックを介して任意の戻り値が受け渡される場合、命令によってASSelフラグが再度設定されなければならず、戻り値にアクセスする際に、非セキュアなスタック38が使用されるべきであることを処理回路に指示する。いったん非セキュアな関数の戻り値へのアクセスがもはや要求されなくなると、さらなる命令を使用してASSelフラグを解除することによって、いずれかのさらなる潜在的な関数呼び出しまたは戻りに対してセキュアなドメインを一貫した状態のままにするべきである。
【0085】
ASSelフラグを設定する命令は、単純な選択スタックフラグ命令であってもよく、または関数がどのドメイン内で実行されているかがコードからは不明である場合に使用されてもよい、標的アドレスのセキュアレベルを判定し、次いでそれに従ってフラグを設定する、命令であってもよいことに留意されたい。
【0086】
この点において、本発明の実施形態は、この挙動を可能にする命令を採用し、これらは、図3Bに示される表に提示される。
【0087】
したがって、ASSelフラグの値に依存する、値がレジスタにロードされるスタックを指示する、スタックロード命令がある。これは、スタックからロードされるレジスタ、およびそのスタックのスタックポインタのオフセットとして、それがロードされるアドレスを指定する。
【0088】
この場合も同様にASSelフラグに依存するスタックを指示する、ストアスタック格納命令がある。これは、レジスタ、およびそのスタックのスタックポインタのオフセットとして、格納されるアドレスを指定する。
【0089】
非セキュアなドメインからセキュアなドメインへの有効なエントリポイントを指示するために使用することができる、NSBT命令が存在する。
【0090】
命令によって指定される複数のレジスタを消去するために使用することができ、それ程セキュアではない側が確実にセキュアな側のデータを見ることができないようにするために使用することができる、複数レジスタ消去命令が存在する。
【0091】
また、標的アドレスのセキュアな状態を試験する命令も存在し、ASSelフラグを適切に設定するために使用することができる。これらは、ソフトウェアによってフラグを設定する必要があるが、呼び出される関数のセキュアなドメインがどれであるかが不明であるために、それがどの値を有するべきかが事前に明確ではない場合に有用である。場合によっては、命令は、関数のドメインが、どの動作が実施されるかに影響を及ぼす場合に、条件付き命令実行に使用することができる、さらなるフラグを設定してもよい。いくつかの命令セット内には、実行がフラグの値に依存する、条件付き命令が存在し、したがって、関数のセキュアなドメインに従ってこのフラグを設定することによって、条件付き命令の実行をセキュアなドメインに依存させることが可能になる。
【0092】
関数が、セキュリティドメイン間のインターフェースの一部であり、図3Bにリストされる新しい命令は、関数引数および結果にアクセスする際に必要であることをコンパイラに指示するために、単純なプラグマを使用することができる。このプラグマはまた、コンパイラに、セキュアな状態のレジスタ値を保護する必要があることも指示し得る。呼び出しからセキュアなドメインに戻る際、以下のステップ、
R0〜R3が戻り値を保持するために使用されない場合、R0〜R3を消去すること、を使用することができる。
非セキュアなドメインへの呼び出しの場合、以下のステップ、
R0〜R3が関数引数を保持するために使用されない場合、R0〜R3を消去すること、が実施されるべきである。
R4〜R12は、呼び出し側が保存したレジスタとして扱われ、関数呼び出しの前に消去されるべきである。
【0093】
図4は、命令を使用して選択スタックフラグを設定する必要があり得る、さらに簡略化した実施例を示す。この場合、2つのドメインが存在し、セキュアな関数は、非セキュアなドメインから呼び出される。非セキュアなドメインからセキュアなドメインに遷移する際に、フラグが設定される。関数は、浮動小数点乗算関数であり、本実施形態では、これは、すべてセキュアな関数である、順々に呼び出される複数の加算関数によって実現される。セキュアなドメインからのセキュアな関数の呼び出しは、ASSelフラグを解除し、したがって、非セキュアなドメインに戻る際、ASSelフラグは解除される。ASSelフラグが解除される場合、非セキュアなドメインに送信する必要がある戻り値は、セキュアなスタック内に格納され、アクセス不可能となる。したがって、これらの値が格納される前に実行される選択フラグ設定命令があることが重要である。非セキュアなドメインに戻るかが不明である場合、標的アドレスが調べられ、これに従ってASSelフラグが設定される、図3BのTTS命令を使用することができる。
【0094】
前述されるように、2つのセキュアなドメインがしばしば記載されるが、複数のセキュアなドメインが存在してもよい。図5は、階層配設された複数のドメインを図式的に示す。コードを有し、中にデータが格納されており、自体のスタックを有する、非セキュアなドメイン、第1のセキュアなドメインS1、およびオペレーティングシステムコードが格納されている、よりセキュアなドメインS2が存在する。これらの異なるセキュアなドメインのそれぞれは、それら自体のスタックを有し、ドメイン間で遷移する場合、それらの間でデータ値を送信する必要があり、両方のドメインがアクセスすることができるため、2つのドメインのうちのそれ程セキュアではない方のスタックを、値を格納するために使用することができ、本発明の実施形態は、この関数引数および戻り値の格納ならびにロードを制御することができる。
【0095】
他の実施形態では、同一のセキュアレベルを伴うが、それらの間でのアクセスが許可されていない、2つのセキュアな兄弟ドメインが存在してもよい。図6は、そのような配設を示す。そのような配置は、2つの販売業者が、同一のシステム上で使用するためのソフトウェアを供給している可能性があり、それらが、相互のソフトウェアから見えないことを望む場合に有利である。したがって、それらは、ソフトウェアを使用してもよいが、どのように実現されるかを見ることはできない。そのような場合、同一のセキュリティの追加の領域が存在し、追加領域内には、兄弟S1ドメインのうちの一方の中の関数が、他方の兄弟S1ドメイン内に格納されているコードによって呼び出される際に、引数および戻り値を格納するために使用することができる、スタック52が存在する。
【0096】
ドメイン間でのデータの制御が必要とされるさらなる方法は、割り込みを取り込むときである。いくつかのアーキテクチャでは、割り込みが発生した際、および完了した際に、ハードウェアによって、レジスタの一部の状態が自動的に保存され、復元される。そのようなアーキテクチャを、レジスタ全体の状態または少なくともセキュアなドメインが使用するすべてのレジスタの状態を保存し、消去するように拡張することによって、ハードウェアは、割り込みがセキュアから非セキュアへの遷移をもたらす事象において、割り込みの前後でセキュリティを維持することができる。
【0097】
上記されるように、本発明の実施形態の自動レジスタスタッキングシステムを拡張することによって、割り込みをセキュアな状態を通してプロキシする必要性を排除することが可能であると共に、処理回路がすべてのレジスタをスタックにプッシュし(単に呼び出し側がレジスタを保存する代わりに)、次いで、非セキュアな状態への切り替えの前に、それらの値を消去し、割り込みベクトルへジャンプすることを可能にすることができる。割り込みの待ち時間を可能な限り短く保つために、追加のレジスタ状態は、セキュアな状態から非セキュアな状態に遷移する際に、スタックにのみプッシュされる。これは、例外エントリ中により高い優先度の例外が発生する場合、またはテールチェーニング(tail chaining)例外の場合に、わずかな複雑性しか導入しない。図7は、いくつかの実施例を示す。
【0098】
第1のプログラム実施例では、コードは、セキュアな状態内で実行され、第1のセキュアな割り込みが受信される。レジスタのサブセットがスタックに保存され、次いで、非セキュアなドメイン内で動作する第2のより高い優先度の割り込みが受信される。第2のより高い優先度の割り込みが非セキュアな領域内で動作するため、セキュアなレジスタ内の情報は、新しいアプリケーションに見えるべきではなく、したがって、すべてのセキュアなレジスタが、セキュアなスタックに保存され、次いで、この割り込みを取り込む前に消去されるべきである。第2の割り込みが完了した際、完了していない最初のセキュアな割り込みに戻り、第2の割り込みに応えてセキュアなスタックにプッシュされたレジスタを復元することができる。この第1のセキュアな割り込みを完了することができ、これに次いで、スタックにプッシュされた元のサブセットを復元することができる。
【0099】
第2の実施例では、第2の割り込みは、第1の割り込みより低い優先度を有し、したがって、第2の非セキュアな割り込みが取り込まれる前に完了する。いったん第1の割り込みが完了すると、残りのレジスタがセキュアなスタックにプッシュされ、非セキュアな割り込みが取り込まれる前に、すべてのレジスタが消去される。非セキュアな割り込みの終わりに、セキュアなスタックにプッシュされたすべてのレジスタが復元される。
【0100】
第3の実施例は、レジスタの部分保存が行われる、セキュアな割り込みを受信する、非セキュアなコードを示す。次いで、より高い優先度を伴う第2の非セキュアな割り込みが受信される場合、第2の非セキュアな割り込みを取り込むことができる前に、すべてのセキュアなレジスタをセキュアなスタックにプッシュし、消去する必要がある。非セキュアな割り込みが完了する際、すべてのセキュアなレジスタをスタックからポップする必要があり、次いで、セキュアな割り込みが完了する際に、非セキュアなレジスタのサブセットがポップされる。
【0101】
第4の実施例は、呼び出し側が保存したレジスタをセキュアなスタックにプッシュさせるセキュアな割り込みを受信し、この過程が完了する前に、第2のより高い優先度の非セキュアな割り込みが発生する、セキュアなコードを示す。この第2の割り込みは、サブセットが完了した後に残りのレジスタをプッシュさせ、実施されているすべてのレジスタのプッシュをもたらす。次いで、非セキュアな割り込みが取り込まれる前に、すべてのレジスタが消去される。この割り込みが完了すると、セキュアな割り込みが取り込まれる前に、呼び出される側が保存したレジスタが、セキュアなスタックからポップされる。セキュアな割り込みが完了する際、レジスタの元のサブセットが、セキュアなスタックからポップされる。
【0102】
図8Aは、潜在的な割り込みおよび実施する必要がある状態の保存を表す表を示す。この点において、「サブセットをプッシュ」は、呼び出し側が保存したレジスタのサブセットのスタックへのプッシュであり、一方、「すべてをプッシュ」は、スタックポインタ以外のレジスタ状態全体のスタックへのプッシュである。この点において、いくつかのレジスタが、機密データを格納するのに利用不可能であり、これが既知である場合、これらのレジスタを、スタックにプッシュしなくてもよい。「残りをプッシュ」は、呼び出される側が保存したレジスタ状態のサブセットのスタックへのプッシュであり、「サブセットをプッシュ」と組み合わせると、「すべてをプッシュ」状態と等しい。
【0103】
表中、例外エントリ列は、第1の割り込みより高い優先度を有し、第1の割り込み例外ベクトルへの分岐の前に発生し、したがって、第1の割り込みが完了する前に取り込まれる、第2の割り込みを指示する。例外戻り列は、第1の割り込みが完了するまで取り込まれない、同等以下の優先度の割り込みを指示する。
【0104】
この点において、呼び出し側の関数が関与するレジスタ、および呼び出される側が関与するレジスタが存在し、したがって、呼び出し側の関数が関与するレジスタは、関数を取り込む前にスタックに格納される。しかしながら、セキュアな状態から非セキュアな状態に遷移する際、セキュアな状態を保存することができるすべてのレジスタ内の値を、非セキュアな側が入手不可能であるように、レジスタから移動させる必要があり、したがって、図8Aから明白であるように、追加の保存および消去が実施される。
【0105】
図8Bは、本発明の実施形態のレジスタスタック、同一またはそれ程セキュアではない状態から割り込みを取り込む際に保存される部分スタックフレーム、およびそれ程セキュアではない状態に遷移する際に保存される全スタックフレームを示す。この点において、後者の場合では、それ程セキュアではない状態が入手不可能であるべきであるセキュアな状態であるため、レジスタを、いかなる状態も格納したままにすることはできないため、より多くのレジスタを保存し、消去する必要がある。
【0106】
プログラムコードがセキュアな状態間で遷移する際、おそらく、関数を呼び出す際にスタックに格納されるレジスタの数は、状態に依存し、セキュアコンフィギュレーションレジスタ内の値によって指示することができ、そのため、この値を使用することによって、状態の保存およびレジスタの消去を限定することができる。この値は、特定の装置のコンパイラによって設定されてもよく、これは、特定の装置を異なる方法で使用することを可能にし、製品にある柔軟性を提供し、他の実施形態では、これは、おそらくシステムがブートしている際に、ソフトウェアによって設定されてもよい。
【0107】
留意されるように、処理回路は、例外が発生する際に、レジスタ状態の呼び出し側が保存したセクションを、スタックに自動的にプッシュおよびポップし、必要に応じて、使用されるスタックポインタ、およびしたがって使用されるスタックを変更する。これは、セキュアなドメインおよびそれ程セキュアではないドメインを伴うシステムにおいてでさえ、以下の利点、すなわち、割り込み待ち時間を低減すること、割り込みジッタを低減すること、例外ハンドラをアセンブラの代わりにCで記述することができること、例外エントリ上の例外やテールチェーニング(tail chaining)等の最適化を可能にすること、が存在することを可能にする。
【0108】
コアが、例外から戻る際に、どのスタックからレジスタ状態を復元するか、およびコアが戻るべきモードを知ることを可能にするために、リンクレジスタは、戻りアドレスというよりはむしろ、専用EXC_RETURNを保持してもよい。これは、処理装置に、例外が取り込まれる際に処理回路がいたドメインのセキュアレベルを指示する。戻るべき実際のプログラムカウンタ位置は、他のレジスタ状態と共に、このドメインのスタック上に格納されている。この場合、リンクレジスタ内のEXC_RETURN値は、戻りアドレスがスタック上にあること、およびどのスタックかを指示する。
【0109】
図9は、セキュアなドメインおよび非セキュアなドメインが存在する、本発明の実施形態による方法におけるステップを示す。最初に、ドメイン全体内のプログラムコードが実行され、セキュアな関数が呼び出される。次いで、関数呼び出しがセキュアなドメインからであるか否かが判定される。関数呼び出しがセキュアなドメインからではない場合、スタック選択フラグが設定される。関数呼び出しがセキュアなドメインからである場合、フラグが解除される。これは、一般的に、処理回路が、状態間で遷移し、データストアの同一の領域または異なる領域のいずれかからコードを読み出す際に行われ、このコードの読み出しは、ハードウェアにフラグを設定または解除させる。次いで、スタック選択フラグが設定されているか否かが判定される。スタック選択フラグが設定されている場合、非セキュアなスタック上の引数および戻り値がアクセスされる。スタック選択フラグが設定されていない場合、セキュアなスタック上の引数および戻り値がアクセスされる。このようにして、セキュアな関数および非セキュアなプログラムは、両方ともこれらの値にアクセスすることができ、その一方で、セキュアな関数およびセキュアなプログラムは、両方ともセキュアなスタックへのアクセスを有する。
【0110】
図10は、プログラムコードがセキュアなドメイン内で実行され、関数が呼び出される、本発明の実施形態による方法のステップを示す。関数を呼び出す前に、スタック選択フラグ設定命令が実行され、標的アドレスが非セキュアなドメイン内である場合は、ドメイン遷移が生じ、スタックフラグが設定され、標的アドレスが非セキュアなドメイン内ではない場合は、スタックフラグが解除される。次いで、レジスタスタック格納命令が実行され、スタックフラグ内の値に従って、適切なスタックに、関数が実行に必要とする引数が投入される。レジスタスタック格納命令は、スタックポインタに対するオフセットを指示し、スタックフラグ(非セキュアを設定し、セキュアを解除する)によって指示されるスタックのスタックポインタが使用される。関数がセキュアなドメイン内ではない場合、状態を保存するために、レジスタをセキュアなスタックに格納し、次いで消去する必要があり、ハードウェアによって、もしくはレジスタ消去命令によって、または両方によって、これを行うことができる。この点において、ハードウェアは、関数引数を保持しないセキュアなレジスタを自動的に消去してもよいが、関数引数を保持し得るセキュアなレジスタは、消去されない。関数引数を格納することができるレジスタが、関数引数に使用されていない場合、それを消去する命令が必要とされる。
【0111】
次いで、関数が呼び出され、実行され、戻ると、スタック選択フラグが、任意の戻り値にアクセスするために使用されるべきスタックポインタを指示するために以前に有した値に設定/解除される。この点において、以前の値を格納し、次いでそれを復元することによって、またはどの状態遷移が発生したかを判定するために、標的アドレスを使用することができる場合を判定する試験命令によって、スタック選択フラグを、それが以前に有した値に設定することができる。次いで、レジスタスタックロード命令が実行され、関数の戻り値が適切なスタックからロードされてもよい。
【0112】
いくつかの実施形態では、関数が非セキュアな関数であることが既知である場合、標的アドレスを試験する必要がない、単純なスタックフラグ設定命令を実行することができる。
【0113】
あるいは場合によっては、スタックおよびさらなるフラグ設定命令を使用することができる。この点において、標的アドレスがセキュアなドメイン内であるか否かに依存する、フローチャートを通る2つの経路は、標的アドレスが非セキュアである場合に、いくつかのレジスタをプッシュし、複数消去命令を使用するという事実以外は、同一であることに留意されたい。したがって、代わりの実施形態では、「ASSelフラグおよびさらなるフラグ設定」命令を使用することができ、この場合、この命令によって設定されるさらなるフラグの値に従って、レジスタのプッシュおよび複数消去命令を実施することができる。
【0114】
例証的な実施形態が、添付の図面を参照して、本明細書に詳細に記載されてきたが、特許請求の範囲は、これらの厳密な実施形態に限定されず、当業者によって、添付の特許請求の範囲の範囲および趣旨から逸脱することなく、それらに様々な変更および修正をもたらすことができることが理解される。例えば、独立請求項の特長と後続の従属請求項の特長とを様々に組み合わせることができる。
図1
図2
図3A
図3B
図4
図5
図6
図7
図8A
図8B
図9
図10