JP2014191509A - 情報処理装置、情報処理プログラム - Google Patents

情報処理装置、情報処理プログラム Download PDF

Info

Publication number
JP2014191509A
JP2014191509A JP2013065227A JP2013065227A JP2014191509A JP 2014191509 A JP2014191509 A JP 2014191509A JP 2013065227 A JP2013065227 A JP 2013065227A JP 2013065227 A JP2013065227 A JP 2013065227A JP 2014191509 A JP2014191509 A JP 2014191509A
Authority
JP
Japan
Prior art keywords
unit
secure
mode
execution module
memory
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2013065227A
Other languages
English (en)
Other versions
JP6067449B2 (ja
Inventor
Hiroshi Isozaki
宏 磯崎
Jun Kanai
遵 金井
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Toshiba Corp
Original Assignee
Toshiba Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Toshiba Corp filed Critical Toshiba Corp
Priority to JP2013065227A priority Critical patent/JP6067449B2/ja
Priority to US14/150,157 priority patent/US9191202B2/en
Publication of JP2014191509A publication Critical patent/JP2014191509A/ja
Application granted granted Critical
Publication of JP6067449B2 publication Critical patent/JP6067449B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/08Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
    • H04L9/0816Key establishment, i.e. cryptographic processes or cryptographic protocols whereby a shared secret becomes available to two or more parties, for subsequent use
    • H04L9/0819Key transport or distribution, i.e. key establishment techniques where one party creates or otherwise obtains a secret value, and securely transfers it to the other(s)
    • H04L9/0825Key transport or distribution, i.e. key establishment techniques where one party creates or otherwise obtains a secret value, and securely transfers it to the other(s) using asymmetric-key encryption or public key infrastructure [PKI], e.g. key signature or public key certificates
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/604Tools and structures for managing or administering access control systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/53Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by executing in a restricted environment, e.g. sandbox or secure virtual machine
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/62Protecting access to data via a platform, e.g. using keys or access control rules
    • G06F21/6218Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
    • G06F21/6281Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database at program execution time, where the protection is within the operating system
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/08Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
    • H04L9/0816Key establishment, i.e. cryptographic processes or cryptographic protocols whereby a shared secret becomes available to two or more parties, for subsequent use
    • H04L9/0819Key transport or distribution, i.e. key establishment techniques where one party creates or otherwise obtains a secret value, and securely transfers it to the other(s)
    • H04L9/0822Key transport or distribution, i.e. key establishment techniques where one party creates or otherwise obtains a secret value, and securely transfers it to the other(s) using key encryption key
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/08Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
    • H04L9/0894Escrow, recovery or storing of secret information, e.g. secret key escrow or cryptographic key storage
    • H04L9/0897Escrow, recovery or storing of secret information, e.g. secret key escrow or cryptographic key storage involving additional devices, e.g. trusted platform module [TPM], smartcard or USB
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3234Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving additional secure or trusted devices, e.g. TPM, smartcard, USB or software token
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3236Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3247Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving digital signatures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Automation & Control Theory (AREA)
  • Databases & Information Systems (AREA)
  • Storage Device Security (AREA)

Abstract

【課題】ノンセキュアOS部にて実行される実行モジュールの改ざんの有無を検出する。
【解決手段】 バスから受信した状態情報に基づいて、メインプロセッサ部のモードを判定し、セキュアモニタメモリ設定部による設定にしたがって、メインプロセッサ部からメインメモリ部へのリードとライトの許可、及び禁止を制御するアドレス空間制御部と、セキュアOS部で実行する実行モジュールをメインメモリ部の共有領域へと書き込む共有領域ライト部と、共有領域に書き込まれた実行モジュールを、実行モジュール用のメモリ領域へとライトする実行モジュールロード部と、実行モジュール用のメモリ領域にライトされた実行モジュールを実行するアプリ実行部と、を備える。
【選択図】図27

Description

本発明の実施形態は、情報処理装置、情報処理プログラムに関する。
従来、ソフトウェアとして実装されるシステムにおいて、鍵などの秘密情報を解析から防止したり、処理の内容を書き換えられないようしたりする事が求められる場面が存在した。このような場合に対処するためのシステムとして、メインプロセッサにセキュアモードと、ノンセキュアモードの二つのモードを持たせ、改変や解析などの攻撃を防止する必要のあるプログラムはセキュアモードで実行させ、汎用のプログラムはノンセキュアモードで実行させるプロセッサのアーキテクチャが提案されている。
このアーキテクチャでは、セキュアモードとノンセキュアモードで動作させる動作用ソフトウェアであるOS(Operation System)を別々に用意し、データを暗号化したり復号化したりする処理はセキュアモードで動作するセキュアOS、又はセキュアOS上で動作するアプリケーションソフトウェアで実行する。一方、二次記憶部からのデータのリードなどの汎用の処理はノンセキュアモードで動作するノンセキュアOS部、又はノンセキュアOS部上で動作するアプリケーションソフトウェアとして実行する。すなわち、必要に応じてセキュアモードとノンセキュアモードを遷移させながら実行する構成である。
さらにメインメモリに対するアクセス制御により、ノンセキュアOS部からセキュアOSの領域を読んだり、改変したりする事は不可能となっている。これにより、仮にノンセキュアOS部やノンセキュアOS部上で動作するアプリケーションに不具合(バグ)が組み込まれており、この不具合を不正に利用して、ノンセキュアモードで動作するソフトウェアからセキュアOS、又はセキュアOS上で動作するアプリケーションのデータを盗み見たり、改変したりしようとしても、これを防止することができる。このため、保護対象の処理を改変したり、保護対象のデータを取得したりする攻撃を防止することができる。
特開2008―135004号公報
ARM Security Technology, ARM
しかしながら、OSを分離させ、ノンセキュアモードからセキュアモードへのメモリアクセスを防止する手段は提供されていたが、不正なノンセキュアOS部を動作させる事を防止したり、セキュアOS上で動作するアプリケーションがメインメモリ外にデータを出力する際にデータを保護したりするための技術は実現されていなかった。本発明では、鍵などの秘密情報が不正に取得されることを防止し、ひいては、プログラムの不正改変や不正なデータ取得を防止し得るようにした情報処理装置を提供することを目的とする。
上述した課題を解決し、目的を達成するために、本発の実施形態明は、データを記憶するメインメモリ部と、セキュアモードとノンセキュアモードとに選択的に切り替えることが可能であって、現在の前記モードを示す状態情報をバスに送信する状態送信部を有し、前記メインメモリ部から記憶されたデータをリード、及び前記メインメモリ部へデータをライトし、前記メインメモリ部にセキュアOS部自身のOS実行イメージをライトするメインプロセッサ部と、を備える。セキュアOS部は、前記メインプロセッサ部によって、前記セキュアモードの場合に実行される。実行モジュール部は前記メインプロセッサ部によって、前記セキュアモードの場合に実行される。セキュアモニタメモリ設定部は、前記メインプロセッサ部のモードが前記セキュアモード及び前記ノンセキュアモードの時にリードとライトを許可する共有領域と、前記メインプロセッサ部のモードが前記セキュアモードの時にリードとライトを許可し、前記メインプロセッサ部のモードが前記ノンセキュアモードの時にリードとライトを禁止する実行モジュール用のメモリ領域とをアドレス空間制御部に対して設定する。アドレス空間制御部は、前記バスから受信した前記状態情報に基づいて、前記メインプロセッサ部のモードを判定し、前記セキュアモニタメモリ設定部による設定にしたがって、前記メインプロセッサ部から前記メインメモリ部へのリードとライトの許可、及び禁止を制御する。共有領域ライト部は、前記セキュアOS部で実行する実行モジュールを前記メインメモリ部の前記共有領域へと書き込む。実行モジュールロード部は、前記共有領域に書き込まれた前記実行モジュールを、前記実行モジュール用のメモリ領域へとライトする。アプリ実行部は、前記実行モジュール用のメモリ領域にロードされた実行モジュールを実行する。
図1は、第1の実施形態の情報処理装置のハードウェア構成図。 図2は、第1の実施形態のメインプロセッサ部で動作するソフトウェアの機能構成図。 図3は、第1の実施形態のセキュアモニタメモリ設定部がメインメモリ部のメモリ領域を区分けした一例を示す図。 図4は、第1の実施形態のメモリ部の各メモリ領域に対するアクセスの可否のポリシーを示すデータ構成図。 図5は、第1の実施形態の情報処理装置で、電源投入からノンセキュアOS部を起動させるまでの処理を示すフロー図。 図6は、第1の実施形態の変形例1における、メインプロセッサ部で動作するソフトウェアの機能構成図。 図7は、第1の実施形態の変形例2の情報処理装置で、電源投入からノンセキュアOS部を起動させるまでの処理を示すフロー図。 図8は、第1の実施形態の変形例3のメインメモリ部の各メモリ領域に対するアクセスの可否のポリシーを示すデータ構成図。 図9は、第1の実施形態の変形例3のセキュアモニタメモリ設定部がメインメモリ部のメモリ領域を区分けした一例を示す図。 図10は、第1の実施形態の変形例3のメインプロセッサ部で動作するソフトウェアの機能構成図。 図11は、第1の実施形態の変形例3の情報処理装置で、電源投入からノンセキュアOS部を起動させるまでの処理を示すフロー図。 図12は、第1の実施形態の変形例4のメインプロセッサ部で動作するソフトウェアの機能構成図。 図13は、第1の実施形態の変形例4のメインメモリ部の各メモリ領域に対するアクセスの可否のポリシーを示すデータ構成図。 図14は、第1の実施形態の変形例4の情報処理装置で、電源投入からノンセキュアOS部を起動させるまでの処理を示すフロー図。 図15は、第1の実施形態の変形例5のメインプロセッサ部で動作するソフトウェアの機能構成図。 図16は、第1の実施形態の変形例5の情報処理装置で、電源投入からノンセキュアOS部を起動させるまでの処理を示すフロー図。 図17は、第1の実施形態の変形例6のメインプロセッサ部で動作するソフトウェアの機能構成図。 図18は、第1の実施形態の変形例6の情報処理装置で、電源投入からノンセキュアOS部を起動させるまでの処理を示すフロー図。 図19は、第1の実施形態の変形例6のセキュアモニタメモリ設定部がメインメモリ部のメモリ領域を区分けした一例を示す図。 図20は、第1の実施形態の変形例6のセキュアモニタメモリ設定部がメインメモリ部のメモリ領域を区分けした一例を示す図。 図21は、第1の実施形態の変形例7のメインプロセッサ部で動作するソフトウェアの機能構成図。 図22は、第1の実施形態の変形例7のメインメモリ部の各メモリ領域に対するアクセスの可否のポリシーを示すデータ構成図。 図23は、第1の実施形態の変形例7のセキュアモニタメモリ設定部がメインメモリ部のメモリ領域を区分けした一例を示す図。 図24は、第1の実施形態の変形例7の情報処理装置で、電源投入からノンセキュアOS部を起動させるまでの処理を示すフロー図。 図25は、第2の実施形態のメインプロセッサ部で動作するソフトウェアの機能構成図。 図26−1は、第2の実施形態の情報処理装置で、タイマー割り込みが発生した時の処理を示すフロー図。 図26−2は、第2の実施形態の情報処理装置で、タイマー割り込みが発生した時の処理を示すフロー図。 図27は、第3の実施形態のメインプロセッサ部で動作するソフトウェアの機能構成図。 図28は、第3の実施形態のセキュアモニタメモリ設定部がメインメモリ部のメモリ領域を区分けした一例を示す図。 図29は、第3の実施形態の情報処理装置で、ノンセキュアOS部にて実行モジュールを実行する際の処理を示すフロー図。 図30は、第3の実施形態の変形例8の情報処理装置で、メインプロセッサ部で動作するソフトウェアの機能構成図。 図31は、第3の実施形態の変形例9の情報処理装置で、ノンセキュアOS部にて実行モジュールを実行する際の処理を示すフロー図。 図32は、第3の実施形態の変形例10のメインプロセッサ部で動作するソフトウェアの機能構成図。 図33は、第3の実施形態の変形例10のセキュアOS部で実行させる実行モジュールの機能構成図。 図34は、第3の実施形態の変形例10の情報処理装置で、ノンセキュアOS部にて実行モジュールを実行する際の処理を示すフロー図。 図35は、第3の実施形態の変形例11のメインプロセッサ部で動作するソフトウェアの機能構成図。 図36は、第3の実施形態の変形例12のメインプロセッサ部で動作するソフトウェアの機能構成図。 図37は、第3の実施形態の変形例12の情報処理装置で、ノンセキュアOS部にて実行モジュールを実行する際の処理を示すフロー図。
(第1の実施形態)
以下、実施の形態について図面を参照して詳細に説明する。図1は、第1の実施の形態で説明する情報処理装置100のハードウェア構成を概略的に示している。この情報処理装置100としては、例えばデジタルテレビジョン放送受信装置やSTB(Set Top Box)、監視カメラ等を想定している。従来、ノンセキュアモードとセキュアモードを分離し、保護対象の処理はセキュアモードで実行するアーキテクチャについては提案されている。しかしながら、ノンセキュアモードで実行するソフトウェアも保護する場合もある。たとえば、攻撃者はノンセキュアモードで動作するOSの内容を改変し、ノンセキュアOS部からセキュアOS部に遷移させず保護対象の処理が実行されないように妨害する、いわゆるDoS(Denial of Service)攻撃を仕掛けるかもしれない。また、レガシーシステムでは、そもそもセキュアOS部で秘密の処理を行う事を想定しておらず、ノンセキュアOS部で秘密の処理を行う場合もあり得る。ノンセキュアOS部は二次記憶装置に格納される事が一般的であるため、情報処理装置を一旦停止させ、二次記憶装置を物理的に抜き出してノンセキュアOS部を改変したのち、情報処理装置を起動させるような攻撃が想定される。本実施形態では、これらの攻撃に対して、対応を可能とするものである。
この情報処理装置100は、メインプロセッサ部101、アドレス空間制御部102、メモリ制御部103、メインメモリ部104、ブートROM部105、二次記憶部制御部106、二次記憶部107、ブリッジ部108、及びI/O処理部109を備えている。メインプロセッサ部101、ブートROM部105、アドレス空間制御部102、二次記憶部制御部106、及びブリッジ部108はバス1によって接続されている。また、I/O処理部109はブリッジ部108とバス2によって接続されている。
メインプロセッサ部101は、メインメモリ部104からロードした命令やデータを逐次的に処理し、処理した結果をメインメモリ部104に記憶させる。このメインプロセッサ部101は、たとえばARM(登録商標)Cortex―Aシリーズのような汎用のプロセッサである。このメインプロセッサ部101は、少なくともセキュアモードとノンセキュアモードの二つの状態を持ち、メインプロセッサ部101の動作状態は、セキュアモードとノンセキュアモードとに選択的に切り替えられる。すなわち、メインプロセッサ部101の動作用ソフトウェアは、必要に応じてセキュアモードとノンセキュアモードとを交互に切り替えながらプログラムを実行する。さらに、メインプロセッサ部101は、現在どちらの状態にあるかを示す少なくとも1ビットの状態情報をバス1に送信している(状態送信部)。すなわち、バス1に接続される各モジュールはバス1に送信されている状態情報を監視する事によってメインプロセッサ部101がどちらのモードにあるかを識別することができる。このモードを選択的に切り替えて実行する方法として、たとえばARMプロセッサのセキュリティ機能であるTrustZone(登録商標)機能を利用すればよい。
メインメモリ部104は汎用の主記憶装置である。例えばDRAM(Dynamic Random Access Memory)やMRAM(Magnetic RAM)を用いることができる。メモリ制御部103はメインプロセッサ部101からの指示に基づいてメインメモリ部104に対するリード・ライト命令及び対象データを受信したり、メインメモリ部104のリフレッシュなどを制御したりする。メインメモリ部104がDRAMの場合、たとえばDRAMコントローラを想定している。
アドレス空間制御部102は、メインプロセッサ部101からメモリ制御部103へのアクセスを監視し、アドレス範囲ごとにアクセス制御を行う。たとえば、メインプロセッサ部101は、メインプロセッサ部101がセキュアモードの状態にある時のみメインメモリ部104の特定のアドレス領域に対してアクセスが可能であり、ノンセキュアの状態にある時にはアクセスを許可しないといった設定をあらかじめ行う。メインプロセッサ部101からその指定した特定の領域へのアクセスがあった場合に、アドレス空間制御部102はバス1に流れる状態からプロセッサがセキュアモードかノンセキュアモードであるかを識別する。そして、アドレス空間制御部102はプロセッサがセキュアモードにあるならばアクセスを許可し、そうでない場合はアクセスを許可せず例外信号(フォールト信号またはアボート信号)を割り込み信号としてメインプロセッサ部101に送信する。アドレス空間制御部102がメインメモリ部104の領域を設定する方法については後述する。
ブートROM部105は、情報処理装置100がブート(起動)する際のプログラムコードを格納しておく。情報処理装置100はブートすると、まずこのブートROM部105からプログラムを呼び出し実行を開始する。ブートROM部105はROM(Read Only Memory)であるため、出荷時に書きこまれた内容を書き換える事はできない。
二次記憶部107はメインメモリ部104よりも大容量な不揮発性のメモリである。たとえば磁気ディスクやフラッシュメモリを用いることができる。二次記憶部制御部106は、メインプロセッサ部101からの指示に基づいて二次記憶部107に対するリード・ライト命令及び対象データを受信し、二次記憶部107にデータをリード・ライトの制御を行う。二次記憶部107がフラッシュメモリの場合、たとえばフラッシュメモリコントローラを想定している。
ブリッジ部108はバス1とバス2を接続するブリッジコントローラである。バス1はたとえばAXI(Advanced eXtensible Interface)仕様を想定し、バス2はたとえばAPB(Advanced Peripheral Bus)規格に準拠したものを想定している。
I/O処理部109はマウスやキーボードなどの入出力デバイスと接続し、それらの入出力デバイスを制御する。キーボードやマウスからの入力があった場合にはブリッジ部108を介して割り込み信号としてメインプロセッサ部101に送信する。
図2はメインプロセッサ部101で動作するソフトウェアの構成の一例を示している。図2に示されるように、ソフトウェアとしては、セキュアモニタ部200、セキュアOS部300、ブートローダ部400、ノンセキュアOS部500を備えている。なお、ハードウェアであるアドレス空間制御部102、二次記憶部制御部106も記載しているが、本質的にはこの図面はソフトウェア構成を示すものである。
メインプロセッサ部101はセキュアモードとノンセキュアモードの二つの状態を選択的に切り替えながらソフトウェアを実行するが、セキュアモードで動作するOS(Operating System)がセキュアOS部300であり、ノンセキュアモードで動作するOSがノンセキュアOS部500である。
セキュアモニタ部200はセキュアOS部300とノンセキュアOS部500を切り替える処理を行う。セキュアモニタ部200はまた起動時にセキュアOS部300をロードして実行する処理も行う。セキュアOS部300はセキュアモードで動作させるためのOSである。
ノンセキュアOS部500はノンセキュアモードで動作させるためのOSである。ノンセキュアOS部500は、たとえばLinux(登録商標)のような汎用のオペレーティングシステムを想定している。ブートローダ部400はノンセキュアOS部500を二次記憶部107から読み込み、メインメモリ部104に展開して実行を開始する。ブートローダ部400はノンセキュアモードで実行することを想定している。
セキュアモニタ部200は、ローダー部201と、OS切替部202と、セキュアモニタメモリ設定部203を含んでいる。ローダー部201は、二次記憶部107、又はブートROM部105にファイルとして格納されているセキュアOS部300をロードして実行する処理を行う。
OS切替部202はメインプロセッサ部101の動作状態をセキュアモードとノンセキュアモードとに選択的に切り替える処理を行う。切り替えるタイミングとしては、セキュアOS部300、又はノンセキュアOS部500から明示的な切り替え命令を実行した時、タイマーや外部モジュールからの割り込み信号を受信した時などがある。セキュアOS部300が明示的な切り替え命令を実行した場合は、メインプロセッサ部101はセキュアOS部300からセキュアモニタ部200のOS切替部202に処理を遷移させる。そして処理をノンセキュアOS部500に切り替える。
ノンセキュアOS部500から明示的な切り替え命令を受信した場合は、メインプロセッサ部101はノンセキュアOS部500からセキュアモニタ部200のOS切替部202に処理を遷移させて処理をセキュアOS部300に切り替える。OS切替部202は、この切り替えの際、切り替え前のOSが元の状態に復帰できるように切り替え前のOSの状態(コンテキスト)をメインメモリ部104に保存しておく処理も行う。たとえば、ノンセキュアOS部500からセキュアOS部300に切り替える場合、OS切替部202はノンセキュアOS部500が利用中のレジスタの値、すなわちコンテキストを、セキュアモニタ部200が管理する所定のメモリ領域に退避させ、セキュアOS部300を実行する。
OS切替部202は、セキュアOS部300からノンセキュアOS部500に切り替える際には退避しておいたノンセキュアOS部500のコンテキストをレジスタに復帰させる。同様に、セキュアOS部300からノンセキュアOS部500に切り替える際もコンテキストの退避と復帰の処理を行う。なお、セキュアOS部300からノンセキュアOS部500に遷移させる際、ノンセキュアOS部500に遷移した後にノンセキュアOS部500からレジスタの値を見る事によりセキュアOS部300で実行していた状態が読まれてしまう事を防ぐため、OS切替部202は、セキュアOS部300が利用していたレジスタの値をクリアすることが望ましい。
なお、タイマーや外部モジュールからの割り込み信号でモードを切り替える場合には、あらかじめOS切替部202に対してどちらのモードに遷移させるのかを指示しておく。たとえば、アドレス空間制御部102から例外信号が送信されてきた場合、メインプロセッサ部101がセキュアモードの状態にある時にはセキュアOS部300の割り込みハンドラを実行し、ノンセキュアモードの状態にある時には強制的に状態を切り替えてセキュアOS部300の割り込みハンドラを実行するといった処理を行う。
セキュアモニタメモリ設定部203はメインメモリ部104に対して領域を設定し、各領域に対してアクセス制御の設定を行う。
図3は、セキュアモニタメモリ設定部203がメインメモリ部104のメモリ領域を区分けした一例を示している。この区分けの設定は、セキュアモニタメモリ設定部203によって機器起動時の処理の一部としてなされる。すなわち、メインメモリ部104のメモリ領域には、ノンセキュア領域121とセキュア領域122と共有領域123とが設定される。セキュア領域122には、セキュアOS(セキュアOSのOS実行イメージ)、セキュアOS用データ、メモリエリア設定レジスタ、セキュアモニタ(セキュアモニタのOS実行イメージ)、及びセキュアモニタ用データ等が格納される。また、共有領域123には、セキュアモードとノンセキュアモードの両方からアクセスする必要のあるデータが格納される。さらに、ノンセキュア領域121には、ノンセキュアOS部500(ノンセキュアOSのOS実行イメージ)及びノンセキュアOS部500用データ、ブートローダ(ブートローダのOS実行イメージ)等が格納される。OS用データとはOSが使う様々なデータ(コンテキストを含む)である。各領域の隙間の部分は明示的に説明がない限り、ノンセキュア領域121とする。OS実行イメージは、OSを実行するためのバイナリーイメージをいう。
図4は、メインメモリ部104の各メモリ領域に対するアクセスの可否のポリシーを示している。このアクセス制御の設定は、セキュアモニタメモリ設定部203によって情報処理装置100の起動時の処理の一部としてなされる。図4の場合、メインプロセッサ部101は、セキュアモードにある場合、メインプロセッサ部101で動作するソフトウェアがメインメモリ部104のセキュア領域122、共有領域123、及びノンセキュア領域121に全てアクセスが可能である。つまり、セキュアOS部300は、メインメモリ部104のセキュア領域122、共有領域123及びノンセキュア領域121に全てアクセスが可能である。
また、メインプロセッサ部101は、ノンセキュアモードにある場合、メインメモリ部104のセキュア領域122にアクセスが不可であり、共有領域123及びノンセキュア領域121にはアクセスが可能である。つまり、ノンセキュアOS部500は、メインメモリ部104のセキュア領域122にアクセスが不可であり、共有領域123及びノンセキュア領域121にはアクセスが可能である。なお、アクセスとは、メインメモリ部104に対して書き込みや読み出しを行なうことである。
このようなメインメモリ部104に対するアクセス制御は、以下の処理により実現される。すなわち、まずアドレス空間制御部102がメインプロセッサ部101からメインプロセッサ部101がセキュアモードであるかノンセキュアモードであるかを示す信号を受信する。そして、アドレス空間制御部102は、その信号からメインプロセッサ部101の状態を把握して、メインプロセッサ部101からメインメモリ部104にアクセスがあった場合、どのメモリエリアにアクセスが可能であるかを判別する。
続いて、図2に示されるように、セキュアOS部300は、仮想TPM部310(Trusted Platform Module)、ハッシュ計算部320、メモリリード部330、メモリライト部340、遷移命令呼び出し部350、期待値格納部360、ハッシュ値検証部370、及びハッシュ値送信部380を備えている。なお、ハッシュ値送信部380は設けないでおくことも可能である。
仮想TPM部310は、さらにハッシュ値格納部311、署名計算部312、秘密鍵格納部313を備えている。なお、署名計算部312、及び秘密鍵格納部313は設けないでおくことも可能である。
ハッシュ値格納部311は複数のハッシュ値を格納する。ハッシュ値格納部311はハッシュ計算部320によって計算された入力値と、もともとハッシュ値格納部311に格納されている値を使い、以下の式に従って計算した値をハッシュ値格納部311に格納する。ここで、fはハッシュ関数を示す。ハッシュ関数としては、たとえばSHA1やSHA―256、SHA3やMD5などよく知られたハッシュアルゴリズムを用いればよい。また、||は結合(コンカチネート)の計算を示す。もともとハッシュ値格納部311に格納されている値の初期値、すなわちこの関数を初めて実行する時には値が0であるものとして計算する。ハッシュ値格納部311は格納している値を少なくとも情報処理装置100がシャットダウンするまで記憶しておく。
新たにハッシュ値格納部311に格納する値=f(入力値||もともとハッシュ値格納部311に格納されている値)
さらに、ハッシュ値格納部311は任意の値をハッシュ値格納部311に設定するインターフェースを持たない。たとえば、入力値を初めて設定すると以下のような計算がなされる。
新たにハッシュ値格納部311に格納する値=f(入力値||0)
ハッシュ値格納部311に格納する値は上記値となるが、ここで関数fを通さず入力値を直接ハッシュ値格納部311に設定することはできない。
秘密鍵格納部313は、署名計算部312で利用する秘密鍵を格納する。仮想TPM部310は、公開鍵と秘密鍵を生成し、秘密鍵格納部313に秘密鍵を格納する。なお、秘密鍵はセキュアモニタ部200、又はセキュアOS部300以外のソフトウェアがリードできないような不揮発性メモリに格納しておく事が望ましい。もちろん、秘密鍵格納部313はセキュアモニタ部200、又はセキュアOS部300以外のソフトウェアがリード、及びライトができないようになっていてもよい。また、情報処理装置100を製造する際、あらかじめ公開鍵ペアを計算しておき、秘密鍵の値をブートROM部105に格納しておいてもよい。いずれにしろ、秘密鍵格納部313に格納されている鍵は確率的に情報処理装置100に固有の値である事が望ましい。
署名計算部312は、秘密鍵格納部313に格納されている秘密鍵を使い、ハッシュ値格納部311に格納されている値に対して署名計算を行いその結果を出力する。署名計算に用いる公開鍵アルゴリズムとしては、たとえばRSAやDSA、ECDSAなどのアルゴリズムを用いればよい。
メモリリード部330はメインメモリ部104に格納されたデータをロード(リード)する。このロードの処理はアドレス空間制御部102を介して行われる。メモリライト部340はデータをメインメモリ部104にストア(ライト)する。このストアの処理はアドレス空間制御部102を介して行われる。
ハッシュ計算部320はメモリリード部330でリードしたデータに対するハッシュ値を計算し、仮想TPM部310のハッシュ値格納部311に格納する処理を行う。このハッシュ関数としては、たとえばSHA1やSHA―256、SHA3やMD5などよく知られたハッシュアルゴリズムを用いればよい。
ハッシュ値検証部370は、ハッシュ値格納部311に格納されている値と、期待値格納部360に格納されている値が一致するか、比較処理を行う。期待値格納部360は、ハッシュ値検証部370で一致検査処理を行うための値を格納しておく。この期待値格納部360には、情報処理装置100の製造時にノンセキュアOS部500のイメージを上述の数式に従ってあらかじめ計算しておいた値を格納しておくか、セキュアモニタ部200、又はセキュアOS部300が情報処理装置100のブートに先立ちあらかじめ計算しておいた値を格納しておく。すなわち、ノンセキュアOS部500が改ざんされることなく起動された場合のハッシュ値は、この期待値格納部360に格納された値と一致するようになる。なお、期待値格納部360に格納される値は、セキュアモニタ部200、又はセキュアOS部300以外のソフトウェアがライトできないような不揮発性メモリに格納しておく事が望ましい。もちろん、工場出荷時に書きこむ場合は、以後ライトができないようにROM(Read Only Memory)の構成になっていてもよい。
遷移命令呼び出し部350は、メインプロセッサ部101のモードをセキュアモードからノンセキュアモードに遷移させる命令を実行する処理を行う。この命令が実行されると、メインプロセッサ部101はセキュアモニタ部200のOS切替部202に処理を遷移させる。
ハッシュ値送信部380は、仮想TPM部310のハッシュ値格納部311に格納されている値に対して秘密鍵格納部313に格納されている秘密鍵を使い、署名計算部312で署名を生成するよう仮想TPM部310に依頼し、仮想TPM部310から署名済みハッシュ値を取得する処理を行う。
ブートローダ部400は、起動部401、メモリライト部402、OSリード部403、遷移命令呼び出し部404を備えている。OSリード部403は、二次記憶部107からノンセキュアOS部500を読み込む処理を行う。
メモリライト部402は、OSリード部403で読み込んだノンセキュアOS部500をメインメモリ部104に書きこむ処理を行う。なお、この書きこむ処理とは、アドレス空間制御部102に対して書きこみ命令と書きこみ対象のデータを送信する処理のことを指す。アドレス空間制御部102がメインメモリ部104にデータを書きこむ処理の可否判断を行い、メモリ制御部103が実際にメインメモリ部104にデータを書きこむ処理を行うため、メモリライト部402がメインメモリ部104にデータを書きこむ処理を行う訳ではない。
起動部401は、メインメモリ部104にノンセキュアOS部500の書き込みが完了した場合に、ノンセキュアOS部500の実行を開始する処理を行う。遷移命令呼び出し部404は、セキュアモニタ部200のOS切替部202に対してOS遷移命令を送信する。なお、このOS遷移命令はセキュアOS部300に対して遷移後の処理を指示する少なくとも1ビットの情報を伝えるパラメタを持つ。このパラメタの要素として、セキュアOS部300に対してOS遷移後にメモリリードを行うのか、ハッシュ値の検証を行うのか伝える。このパラメタについては後述する。また、OS遷移後にメモリリードを指示する場合、メインメモリ部104のどのアドレスにライトしたのかを伝えるアドレスデータをセキュアOS部300に伝えるパラメタを合わせて伝えてもよい。
図5は、情報処理装置100で、電源投入からノンセキュアOS部500を起動させるまでの処理を示すフロー図である。まず、電源が投入されると、ブートROM部105に格納されたプログラムが実行される(ステップS101)。この状態ではメインプロセッサ部101はセキュアモードの状態にある。次いで、ブートROM部105から起動されるプログラムによって、セキュアモニタ部200が二次記憶部107から読み込まれ、メインメモリ部104に書きこまれることで、起動される(ステップS102)。セキュアモニタ部200が起動されると、セキュアモニタ部200のセキュアモニタメモリ設定部203がメインメモリ部104のメモリ領域のアクセス制御設定を行う。具体的には、図3に示したようにメインメモリ部104の領域を分割し、図4に示したようなアクセス制御を設定する処理である。
次にセキュアモニタ部200はセキュアOS部300を二次記憶部107から読み込み、メインメモリ部104に書きこんでセキュアOS部300を起動する(ステップS103)。セキュアOS部300は初期化処理を実行すると、遷移命令呼び出し部350で、セキュアOS部300のOS切り替え命令を実行する。すると、メインプロセッサ部101は処理をセキュアモニタ部200のOS切替部202に遷移させる。OS切替部202はコンテキストの退避・復帰処理とモードの切り替え処理を行う。この時点でメインプロセッサ部101はノンセキュアモードの状態になる。
そして、メインプロセッサ部101は、ブートローダ部400を実行する(ステップS104)。このブートローダ部400の実行は、セキュアモニタ部200がブートROM部105に格納されたプログラムを読み込んで、メインメモリ部104に書きこんで実行し、そのブートROM部105に格納されたプログラムが二次記憶部107からブートローダ部400を読み込み、メインメモリ部104に書きこんで実行させてもよい。また、セキュアモニタ部200がメインプロセッサ部101の状態をノンセキュアモードに遷移させた後、セキュアモニタ部200が二次記憶部107からブートローダ部400を読み込み、メインメモリ部104に書きこんで実行させてもよい。
次に、ブートローダ部400はノンセキュアOS部500のディスクイメージを二次記憶部107から読み込み、メインメモリ部104の共有領域123に書きこむ(ステップS105)。ノンセキュアOS部500はLinux(登録商標)のような比較的イメージサイズの大きいソフトウェアを想定している。このため、1命令でノンセキュアOS部500全体を二次記憶部107からメインメモリ部104の共有領域123に読み込む事はできない。ブートローダ部400は二次記憶部107からノンセキュアOS部500の一部分(データAと呼ぶ)を読み込み、メインメモリ部104の共有領域123にデータAを書きこむと、遷移命令呼び出し部404を利用してOS間遷移の命令を実行する(ステップS106)。この時、セキュアOS部300に処理が遷移した後に、セキュアOS部300がメモリリードを行う事を示す情報、及びブートローダ部400はメインメモリ部104のどのアドレスにデータAを書きこんだのかを示す情報(たとえば、データAの開始アドレスとデータ長)をパラメタとしてつける。
セキュアモニタ部200のOS切替部202によってOS間遷移がなされると、セキュアOS部300はパラメタをチェックする。セキュアOS部300はパラメタからメモリリードが実行された事を認識する。さらにセキュアOS部300はデータAが書きこまれているメインメモリ部104の共有領域123のアドレスとデータAの長さに関する情報を取得する。そして、セキュアOS部300はメモリリード部330を通じてデータAをメインメモリ部104の共有領域123から取得して、ハッシュ計算部320でデータAのハッシュ値を計算し、その値を仮想TPM部310のハッシュ値格納部311に格納する(ステップS107)。
そして、メモリリード部330とメモリライト部340は、ノンセキュアOS部500のデータAをメインメモリ部104の共有領域123からノンセキュア領域121にコピーする(ステップS108)。すなわち、これによりメインメモリ部104のノンセキュア領域121に書かれているデータはハッシュ計算部320によってハッシュ計算が完了したデータとなるようにすることができる。そして、セキュアOS部300は遷移命令呼び出し部350でOS遷移命令を実行する(ステップS109)。
セキュアモニタ部200のOS切替部202によってOS間遷移がなされると、ブートローダ部400は全てのノンセキュアOS部500のデータのイメージの読み込みが完了したか否かを判定する(ステップS110)。読み込みが完了していないと判定された場合(ステップS110:No)、ブートローダ部400は、二次記憶部107からノンセキュアOS部500の残りの一部分(データBと呼ぶ)を読み込み、ステップS105からの処理を繰り返す。
ブートローダ部400がノンセキュアOS部500のイメージ全体を二次記憶部107から読み込まれたと判定されると(ステップS110:Yes)、ブートローダ部400は遷移命令呼び出し部404を利用してOS間遷移の命令を実行する(ステップS111)。これは、すなわち、ノンセキュアOS部500全体がメインメモリ部104のノンセキュア領域121にライトされ、かつそのハッシュ値が仮想TPM部310のハッシュ値格納部311に格納されたか否かの判定である。この時、セキュアOS部300に処理が遷移した後に、セキュアOS部300がハッシュ値の検証を行う事を示す情報をパラメタとして付ける。
セキュアモニタ部200のOS切替部202によってOS間遷移がなされると、セキュアOS部300はパラメタをチェックする。セキュアOS部300はパラメタからハッシュ値の検証を実行する事を認識する。そして、セキュアOS部300は、ハッシュ値検証部370を通じて、ハッシュ値格納部311に格納された値と、期待値格納部360に格納された値とをチェックし(ステップS112)、一致するか否かを判定する(ステップS113)。
期待値とハッシュ値が一致する場合(ステップS113:Yes)、セキュアOS部300は遷移命令呼び出し部350でOS遷移命令を実行する。セキュアモニタ部200のOS切替部202によってOS間遷移がなされると、ブートローダ部400はメインメモリ部104のノンセキュアOS部500用のノンセキュア領域121に書かれているノンセキュアOS部500の実行を開始し、起動させる(ステップS114)。一方、ハッシュ値と、期待値とが一致しないと判定された場合(ステップS113:No)、メインプロセッサ部101は、エラー処理を行う(ステップS115)。
なお、エラー処理として、システムを停止させる方法、情報処理装置100に接続されている表示画面(不図示)に検証処理が失敗したことを伝えるメッセージを表示させる方法、成功した時と同様に遷移命令呼び出し部350でOS遷移命令を実行し、ノンセキュアOS部500を実行させる方法がある。
ここで、期待値格納部360に格納してある値とブート時に計算したハッシュ値を一致させるには、期待値格納部360に格納してある値を計算する時のデータAやデータBのデータサイズと、セキュアOS部300のハッシュ計算部320の計算に使ったデータAやデータBのデータサイズは同じでなければならない。
以上のように本実施形態の情報処理装置100にあっては、二次記憶部107に格納されたノンセキュアOS部500が、あらかじめ計算しておいたノンセキュアOS部500のイメージである事を確認することができる。したがって、仮にノンセキュアOS部500の改ざんがあった場合に、これを検出することができるようになる。これは特に二次記憶部107としてHDDやSSDのように汎用のインターフェースを持った装置を使い、二次記憶部107を物理的に着脱させることで二次記憶部107のデータを容易に書き換える事が可能な場合に特に有用である。
ノンセキュアOS部500は情報処理装置100を稼働させておく上で必要な様々な処理を行う。もし、二次記憶部107のデータが不正な攻撃者によって書き換えられてしまうと、利用者又はシステム管理者の予期しない動作を引き起こすおそれがある。たとえば、情報処理装置100のノンセキュアOS部500でDRM(Digital Rights Management)に関する判定処理(たとえば、コンテンツを再生して良いかどうかの判定処理)を行っていたとする。この時、攻撃者は本来コンテンツの再生が許可されていない状態であったとしても、常に再生できるように判定処理をスキップさせるようにノンセキュアOS部500を改変するかもしれない。これを防止するには、情報処理装置100の実装者が意図したノンセキュアOS部500が実行されていることを、ノンセキュアOS部500の実行前に確認する必要がある。この実施形態では、あらかじめノンセキュアOS部500のハッシュ値を計算しておき、ノンセキュアOS部500を実行する前に、二次記憶部107からリードしたノンセキュアOS部500のイメージのハッシュ値を計算し、その値が一致するかどうかをノンセキュアOS部500の実行前に検査する事ができる。したがって、ハッシュ値が一致しない場合には、表示画面にエラーが表示されるようにすることなどによって、実装者がノンセキュアOS部500の実行前に改変を検知することができるようになる。
さらに、本実施形態では、検証処理に要するオーバーヘッドを極力削減して実現することが期待できる。一般的に二次記憶部107からの読み込み速度は、メインメモリ部104への書き込み、読み込み速度に比べて遅い。本実施形態において、ノンセキュアOS部500が二次記憶部107からデータのリードを要求して受信するまでの待ち時間の間に、OS間遷移とハッシュ値の計算を行うことができれば、検証処理を行わない場合と同等の時間でノンセキュアOS部500の検証処理を行うことができる。
(変形例1)
なお、仮にノンセキュアOS部500の検証処理が失敗したとしても、その失敗したという情報をノンセキュアOS部500等が知り得るのであれば、ノンセキュアOS部500のブート処理を継続する事が有用な場合もある。たとえば、上述のDRM処理の例では、情報処理装置100上で保護対象のデータと非保護対象のデータ(権利フリーのコンテンツ)を再生する場合、非保護対象のデータを再生する際にはDRMに関する計算処理を行う必要はなく、DRMに関する処理の部分が改変されていたとしても問題ない。また、必要に応じてノンセキュアOS部500が検証に成功しているか否かを確認することが有用な場合もある。
図6は、必要に応じてノンセキュアOS部500が検証に成功したか否かを確認する場合のメインプロセッサ部101で動作するソフトウェアの機能構成を示している。図6に示すように、情報処理装置100は、コンテンツ配信サーバ700と接続されている。コンテンツ配信サーバ700は、インターネットなどのネットワークを経由して情報処理装置100に対して映画や音楽などのコンテンツを配信する機能を持つ装置である。コンテンツを配信する際に、情報処理装置100のノンセキュアOS部500が検証済であるか否かを検査し、検査が成功した場合のみコンテンツ配信サーバ700は情報処理装置100にコンテンツを配信するものとする。
情報処理装置100のセキュアOS部300、セキュアモニタ部200、ブートローダ部400は図2と同様の構成である。ノンセキュアOS部500は通信処理部501、コンテンツ受信部502、DRM処理部503、コンテンツ再生部504、ハッシュ値送信部505、及び遷移命令呼び出し部512を備えている。通信処理部501はコンテンツ配信サーバ700と通信処理を行う。コンテンツ受信部502は、コンテンツ配信サーバ700から送信されてくるコンテンツを受信する。コンテンツはAES等の暗号アルゴリズムによって鍵を用いて暗号化されて配信されることを想定している。
DRM処理部503は、コンテンツを復号するためのDRMに関する鍵計算処理などを行う。DRM処理部503は、コンテンツ配信サーバからダウンロードしたコンテンツ復号用暗号化鍵を入力し、DRM処理部503に含まれる鍵を用いてコンテンツ復号用暗号化鍵を復号し、コンテンツ復号用鍵を計算によって求める処理を行う。コンテンツ再生部504は、DRM処理部503にて計算したコンテンツ復号用鍵を使い、コンテンツ受信部502にて受信した暗号化コンテンツを復号し、再生処理を行う。ハッシュ値送信部505は、セキュアOS部300のハッシュ値送信部380が取得した、署名付きのノンセキュアOS部500のハッシュ値を取得し、コンテンツ配信サーバ700に送信する。
まず、コンテンツ配信サーバ700はコンテンツの配信に先立ち、署名付きのノンセキュアOS部500のハッシュ値を送信するよう情報処理装置100へ依頼する。具体的には、ハッシュ値送信部505が遷移命令呼び出し部512に対してセキュアOS部300から署名付きのノンセキュアOS部500のハッシュ値を取得するよう依頼する。まず、遷移命令呼び出し部512は、OS切り替え命令を実行する。すると、メインプロセッサ部101は処理をセキュアモニタ部200のOS切替部202に遷移させる。OS切替部202はコンテキストの退避・復帰処理とモードの切り替え処理を行い、メインプロセッサ部101の状態をセキュアモードにし、セキュアOS部300のハッシュ値送信部380を実行する。ハッシュ値送信部380は仮想TPM部310の署名計算部312に対して、秘密鍵格納部313に格納されている鍵を使い、ハッシュ値格納部311の値に対して署名付きハッシュ値を計算するよう依頼し、その結果を取得する。この結果が署名付きのノンセキュアOS部500のハッシュ値である。そして、その値をメインメモリ部104の共有領域123に書きこみ、遷移命令呼び出し部350を実行して、処理を再びノンセキュアOS部500に戻す。ノンセキュアOS部500のハッシュ値送信部505は共有領域123から署名付きのノンセキュアOS部500のハッシュ値を取得し、コンテンツ配信サーバ700からの依頼に基づいてその値をコンテンツ配信サーバ700へと送信する。コンテンツ配信サーバ700はセキュアOS部300の仮想TPM部310の秘密鍵格納部313に格納されている秘密鍵に対応する公開鍵を有している。この公開鍵を使い、コンテンツ配信サーバ700はノンセキュアOS部500のハッシュ値を検証する。さらに、コンテンツ配信サーバ700はハッシュ値がノンセキュアOS部500のハッシュ値の期待値と一致するか検証する。両方の検証が成功した場合に限り、コンテンツ配信サーバ700は、コンテンツを情報処理装置100に送信する。
このようにすることで、コンテンツ配信サーバ700は期待するノンセキュアOS部500が情報処理装置100で動作している時のみコンテンツを配信する事ができ、不正に改変された情報処理装置100(ノンセキュアOS部500)に対してコンテンツを提供してしまう事でコンテンツが不正に利用されるという事を防止する事ができる。この場合は、ノンセキュアOS部500は、エラー処理がされずに、コンテンツ配信サーバ700と連携した処理以外は通常通り稼動するようにしてもよい。
(変形例2)
図7は図5の別例である。図5では電源投入時にブートROM部105に格納されたプログラムが二次記憶部107に格納されたセキュアモニタ部200を実行した。図7に示すフローではまずブートROM部105に格納されたブートローダ部400が実行され、次にブートローダ部400が二次記憶部107に格納されたセキュアモニタ部200をロードして実行する(ステップS201)。その後は図5と同様の手順でセキュアOS部300を実行する。セキュアOS部300の起動処理が完了するとセキュアOS部300は遷移命令呼び出し部350によりOS遷移命令を実行する。メインプロセッサ部101はセキュアモニタ部200に処理を遷移させる。セキュアモニタ部200はセキュアモードからノンセキュアモードに状態を遷移させ、ノンセキュアモードでブートローダ部400を実行する(ステップS202)。その後の処理は図5と同一である。なお、ブートローダ部400はブートROM部105に格納されるため、二次記憶部107に格納されるデータのように外部から改変される恐れはない。このため、ブートローダ部400は管理者が期待するものを確実に実行することができる。
図5ではセキュアモニタ部200とブートローダ部400それぞれにOSをロードして実行する機能を備える必要があった。図7のように構成することで、セキュアOS部300、ノンセキュアOS部500に限らずOSをロードして実行する汎用的な機能をブートローダ部400に備えることができ、OSをロードして実行する機能をブートローダ部400のみに実装すれば済むため、開発コストを削減することができる。
(変形例3)
図8、及び図9は、メインメモリ部104の領域設定と、アクセスポリシーの別例を示している。図9に示されるように、メインメモリ部104は、セキュア領域A122aとセキュア領域B122b、ノンセキュア領域121、共有領域123に区分されており、ノンセキュアモードがリードアクセスとライトアクセスに分けてアクセス権を設定している点が図4との違いである。なお、セキュアモードもリードとライトに分けてアクセス権を設定するように構成してもよいが、ここでは説明を簡単にするため、セキュアモードはリードとライト共通の設定になっているものとする。すなわち、セキュアモードでアクセス可と記されている部分はリードアクセスもライトアクセスも許可されているものとする。
すなわち、メインプロセッサ部101がセキュアモードの状態にある場合、メインプロセッサ部101で動作するソフトウェアがメインメモリ部104のセキュア領域A122a、セキュア領域B122b、共有領域123及びノンセキュア領域121に全てアクセスが可能である。つまり、セキュアOS部300は、メインメモリ部104のセキュア領域A122a、セキュア領域B122b、共有領域123及びノンセキュア領域121に全てリードとライトのアクセスが可能である。
また、メインプロセッサ部101は、ノンセキュアモードにある場合、メインメモリ部104のセキュア領域A122aについてはリードのアクセスもライトのアクセスも禁止される。一方、メインプロセッサ部101は、セキュア領域B122bについてはライトのアクセスは禁止であるがリードのアクセスは許可される。メインプロセッサ部101は、共有領域123及びノンセキュア領域121にはリードもライトもアクセスが可能である。つまり、ノンセキュアOS部500は、メインメモリ部104のセキュア領域A122aにリードもライトもアクセスが不可であり、セキュア領域B122bはリードのみ許可され、共有領域123及びノンセキュア領域121にはリードもライトもアクセスが可能である。
図9は、セキュアモニタメモリ設定部203がメインメモリ部104のメモリ領域を区分けした一例を示している。この区分けの設定は、セキュアモニタメモリ設定部203によって機器起動時の処理の一部としてなされる。すなわち、メインメモリ部104のメモリ領域には、セキュア領域A122aとセキュア領域B122bと共有領域123とノンセキュア領域121とが設定される。
セキュア領域A122aには、セキュアOS(セキュアOSのOS実行イメージ)、セキュアOS用データ、メモリエリア設定レジスタ、セキュアモニタ(セキュアモニタのOS実行イメージ)及びセキュアモニタ用データ等が格納される。また、セキュア領域B122bにはノンセキュアOS(ノンセキュアOSのOS実行イメージ)が格納される。また、共有領域123には、セキュアモードとノンセキュアモードの両方からアクセスする必要のあるデータが格納される。さらに、ノンセキュア領域121には、ノンセキュアOS用データ等が格納される。
ノンセキュアOS部500はノンセキュアOS部500用のメモリ領域、すなわちセキュア領域B122bにライトされるが、このライトの処理はセキュアOS部300が行う必要がある。図8に示したアクセス制御のポリシーではセキュアモードでセキュア領域B122bにデータをライトする事は許可されている。セキュアOS部300はセキュアモードで実行されるため、このライトは成功することになる。
ノンセキュアOS部500を実行するにはブートローダ部400及びノンセキュアOS部500自身がノンセキュアOS部500の設置されたメモリ領域であるセキュア領域B122bをリードする必要がある。図8で示したポリシー設定によりブートローダ部400とノンセキュアOS部500はセキュア領域B122bのリードが許可されているため問題ない。一方、ノンセキュアOS部500からセキュア領域B122bへの書き込みは禁止されている。これは情報処理装置100をブート後に、不正なプログラムによってノンセキュアOS部500のメモリ領域を改変するような攻撃を防止するためである。ノンセキュアOS部500にソフトウェアのバグなどが存在した場合、このバグを不正に利用してノンセキュアOS部500の処理を不正に改変する攻撃が一般的によく知られている。しかし、図8のような設定にしておけば、仮にノンセキュアOS部500のメモリ領域の変更、すなわちセキュア領域B122bに対する書き込みを試みたとしても、アドレス空間制御部102はノンセキュアモードでセキュア領域B122bに対する書きこみが行われた事を検出し、これをブロックするため、ノンセキュアOS部500を改変することはできない。
このように、セキュアモニタ部200のセキュアモニタメモリ設定部203でアドレス空間制御部102を通じたメモリ制御のアクセス権を設定することで、ノンセキュアOS部500の実行を阻害せず、ノンセキュアOS部500が設置されているメインメモリ部104のデータを書き換えるような攻撃を防止する事が出来る。
図10は、図2のソフトウェアの機能構成の別例を示す図である。図2に示した構成ではブートローダ部400は二次記憶部107からノンセキュアOS部500の一部分を読み込むと、ブートローダ部400が遷移命令呼び出し部404を利用して明示的にOS間遷移の命令を実行しなければならなかった。図10の構成では、このブートローダ部400のOS間遷移の明示的な呼び出しを省略することができる。なお、この変形例1では、メインメモリ部104のアクセス制御には、図8、図9で示した設定が用いられる。
図10に示すとおり、セキュアモニタ部200はモニタハンドラ部204と割り込み設定部205を、セキュアOS部300はアボートハンドラ部390を、それぞれ備えている。なお、図2と同様、ブートローダ部400は遷移命令呼び出し部404を備えているが、これはノンセキュアOS部500の一部分を読み込んだ後に行うものではなく、ノンセキュアOS部500全体をメインメモリ部104に読み込んだ後のハッシュ値の検証をセキュアOS部300に依頼する時に呼び出すためにあるものである。すなわち、図5で示した、ステップS106の処理では、遷移命令呼び出し部404は処理を行わない。
割り込み設定部205は、メインプロセッサ部101がアドレス空間制御部102やタイマー割り込みなどの例外信号が発生した場合にモニタハンドラ部204を呼び出すようにメインプロセッサ部101に設定を施す。この設定処理はセキュアモニタ部200の初期化処理時の一処理として実行される。
モニタハンドラ部204は、メインプロセッサ部101がアドレス空間制御部102で例外信号が発生した場合に呼び出される。モニタハンドラ部204はもし割り込みが発生した時点での状態がノンセキュアモードであるならばノンセキュアOS部500のコンテキストを保存し、状態をセキュアモードに切り替える処理を行う。その後、処理をアボートハンドラ部390に引き継ぐ。
アボートハンドラ部390は、モニタハンドラ部204から処理を引き継ぎ、メインメモリ部104からデータを読み込んだり、データのハッシュ値を仮想TPM部310に蓄積したりする。
図11は、図10の構成における情報処理装置で、電源投入からノンセキュアOS部500を起動させるまでの処理を示すフロー図である。ブートローダ部400をロードして実行するまでは図5と同様の処理を行う。なお、本実施形態ではセキュアモニタメモリ設定部203は、設定したメモリの領域で、アクセスのポリシー違反があった場合の処理についても設定する。
上述したようにアドレス空間制御部102は設定したポリシーに違反するアクセスがあった場合、そのアクセスを許可せず、例外信号を割り込み信号としてメインプロセッサ部101に送信する。このための設定として、セキュアモニタ部200がロードされて実行されると(ステップS301)、割り込み設定部205は、この割り込み信号が発生した場合に、セキュアモニタ部200のモニタハンドラ部204を実行するようにメインプロセッサ部101に設定を行う。この設定によって、セキュア領域B122bに対してノンセキュアモードからライトの要求があった場合、メインプロセッサ部101はノンセキュアOS部500の処理を強制的に中断し、メインプロセッサ部101の状態をセキュアモニタ部200のモニタハンドラ部204に処理を遷移させる。
次に、セキュアモニタ部200がセキュアOS部300をロードして実行し(ステップS103)、さらにブートローダ部400をロードして起動する(ステップS104)までは図5と同様の処理を行えばよい。
そして、ブートローダ部400はノンセキュアOS部500を二次記憶部107から読み込み、メモリライト部402でメインメモリ部104のセキュア領域B122bに書きこもうとする(ステップS302)。図5で示した、ステップS105と異なり、共有領域123ではなく、セキュア領域B122bに書き込もうとする。つまり、ブートローダ部400は二次記憶部107からノンセキュアOS部500の一部分(データAと呼ぶ)を読み込み、メインメモリ部104のセキュア領域B122bにデータAを書きこもうとする。
この時、メインプロセッサ部101の状態はノンセキュアモードの状態である。図8に示したように、ノンセキュアモードではセキュア領域B122bへのライトが許可されていない。そこで、アドレス空間制御部102はメインプロセッサ部101に例外を発生させ、メインプロセッサ部101は上述の割り込み設定部205の設定に従いモニタハンドラ部204に処理を遷移させる。
モニタハンドラ部204はノンセキュアOS部500のコンテキストを保存する。この処理はOS切替部202がノンセキュアOS部500からセキュアOS部300に遷移する際に行うコンテキスト保存の処理と同じように行えばよい。そしてメインプロセッサ部101の状態をノンセキュアモードからセキュアモードに遷移させ、最後にセキュアOS部300のアボートハンドラ部390を実行する。
セキュアOS部300のアボートハンドラ部390は例外が発生する直前の命令をメインメモリ部104から読み込む。例外が発生する直前の命令は、データAをメインメモリ部104のノンセキュアOS部500用のセキュア領域B122bに書きこむ命令である。アボートハンドラ部390はこの書きこみ先のアドレス(アドレスAと呼ぶ)とデータAを取得し、ハッシュ計算部320を使ってデータAのハッシュ値を計算し、そのハッシュ値を仮想TPM部310のハッシュ値格納部311に格納する(ステップS303)。
そしてアボートハンドラ部390は、データAをメモリライト部340を通じて、ノンセキュアOS部500用のセキュア領域B122bにおけるアドレスAに書きこむ(ステップS304)。セキュアOS部500はセキュアモードで実行されるが、図8に示したようにセキュアモードからセキュア領域B122bへの書き込みは許可されているため、この書きこみは成功する。ステップS303とステップS304とは順番を入れ替えてもよい。
続いて、遷移命令呼び出し部350は、OS間遷移命令を実行してメインプロセッサ部101の状態をノンセキュアモードに切り替え、ノンセキュアOS部500が例外発生の直前に処理していた処理に戻す(ステップS305)。すなわち、ノンセキュアOS部500はメインメモリ部104のノンセキュアOS部500用のセキュア領域B122bに自らがデータAを書きこんだかのようにふるまう。
次いで、セキュアOS部300によってノンセキュアOS部500のイメージ全体がメインメモリ部104のノンセキュアOS部500用のセキュア領域B122bにライトされたか否かをブートローダ部400は判定する(ステップS306)。イメージ全体がライトされていないと判定された場合(ステップS306:No)、全てのイメージがライトされるまでステップS302からの処理を繰り返す。一方、イメージ全体がライトされていると判定された場合(ステップS306:Yes)、ブートローダ部400は遷移命令呼び出し部404を利用してOS間遷移の命令を実行する(ステップS111)。なお、図5とは異なり、ノンセキュアOS部500の遷移命令呼び出し部404はこの場合しか利用されない。図5ではパラメタによってセキュアOS部300に実行させる命令を区別していたが、命令を区別するためのパラメタは不要である。その後の処理は図5と同様の処理を行えばよい。
(変形例4)
続いて、図12は、図10で示した情報処理装置の別の構成を示すものである。図10で示した構成の場合、ブートローダ部400はノンセキュアOS部500のイメージ全体をメインメモリ部104のノンセキュアOS部500用のセキュア領域B122bに書きこんだ後、遷移命令呼び出し部404を使って明示的にセキュアOS部に遷移させる必要があった。図12は、この明示的な遷移を省略するものである。
図12に示すとおり、セキュアOS部300のアボートハンドラ部390がハッシュ値検証部370と接続されている点、ブートローダ部400に遷移命令呼び出し部404がない点が図10とは異なる。アボートハンドラ部390は図10の場合の処理に加えて、例外を起こした原因を識別し、メインメモリ部104へのデータ書き込み違反である場合にはハッシュ値検証部370を呼び出す処理を行う。
図13に、図12の構成におけるメインメモリ部104の各メモリ領域に対するアクセスの可否のポリシーを示す。なお、このアクセス制御の設定も、図8に示したのと同様にセキュアモニタメモリ設定部203によって機器起動時の処理の一部としてなされる。メインプロセッサ部101がノンセキュアモードにある場合で、リードアクセスがある場合、図8の場合ではリードアクセスは許可されていたが、図13ではセキュア領域B’122b’としてリードもライトも不可である点が図8との違いである。
図14は図12の構成における情報処理装置100で、電源投入からノンセキュアOS部500を起動させるまでの処理を示すフロー図である。ブートローダ部400がノンセキュアOS部500のイメージ全体をメインメモリ部104のノンセキュアOS部500領域に書きこみを完了させるまでは図11と同様の処理を行えばよい。
ブートローダ部400がノンセキュアOS部500のディスクイメージ全体をメインメモリ部104のノンセキュアOS部500領域に書きこんだことを検出すると(ステップS306:Yes)、ブートローダ部400はノンセキュアOS部500を実行する(ステップS401)。この実行はノンセキュアOS部500用のデータが記憶されるセキュア領域B’122b’のコード(データ)を読み込む処理である。ここで、アドレス空間制御部102のポリシーが図13のように設定されている。すなわち、ブートローダ部400はメインプロセッサ部101がノンセキュアモードの状態で動作しており、ノンセキュアOS部500のデータが記憶される領域はセキュア領域B’122b’のポリシーとして設定されているため、このデータ読み込み処理はアドレス空間制御部102が許可せず、メインプロセッサ部101に例外を発生させる。メインプロセッサ部101は割り込み設定部205の設定に従いモニタハンドラ部204に処理を遷移させる。
モニタハンドラ部204はノンセキュアOS部500のコンテキストを保存する。この処理はOS切替部202がノンセキュアOS部500からセキュアOS部300に遷移する際に行うコンテキスト保存の処理と同じように行えばよい。そしてメインプロセッサ部101の状態をノンセキュアモードからセキュアモードに遷移させ、最後にセキュアOS部300のアボートハンドラ部390を実行する。
セキュアOS部300のアボートハンドラ部390は例外が発生する直前の命令をメインメモリ部104から読み込む。例外が発生する直前の命令は、メインメモリ部104のノンセキュアOS部500用の領域であるセキュア領域B’122b’からデータを読み込む命令である。この読み込み先のアドレス(アドレスBと呼ぶ)を取得し、セキュア領域B’122b’に属する事を確認する。もしセキュア領域B’122b’に属さない場合はエラー処理を行い、以後の処理は行わない。セキュア領域B’122b’に属する場合は、正常な動作であると判断し、セキュアOS部300はハッシュ値検証部370を使って、ハッシュ値格納部311に格納された値が、期待値格納部360に格納された値と一致するか否かをチェックする(ステップS112、ステップS113)。
なお、ブートローダ部400はノンセキュアOS部500を実行するため、ノンセキュアOS部500のメモリ領域であるセキュア領域B’122b’のコード(データ)を読み込む処理を繰り返し行う。また、ノンセキュアOS部500のブート後もノンセキュアOS部500は自身の処理を行うため、必要に応じてノンセキュアOS部500領域からコードを読み込む処理を行う。このようにノンセキュアモードにおいて、ノンセキュアOS部500用のメモリの領域のリードアクセスは繰り返し発生するが、その都度、ハッシュ値の検証処理を行うのは冗長である。従って、期待値と一致すると判断した場合、OS間遷移でノンセキュアモードに戻る前に、ノンセキュアモードでノンセキュアOS部500用の領域へのリードが発生したとしても以後、例外を発生させないようにアドレス空間制御部102を設定するようにしてもよい。すなわち、アドレス空間制御部102のアクセス制御のポリシー設定を図13の状態から図8の状態に変更するよう、アドレス空間制御部102に対して設定命令を送信してもよい。この設定はセキュアOS部300が行ってもよいし、セキュアモニタ部200の割り込み設定部205に依頼し、割り込み設定部205が設定処理を行ってもよい。図8のポリシー設定であれば、ノンセキュアモードからのセキュア領域Bへのリードアクセスは許可されているため、ブートローダ部400やノンセキュアOS部500がノンセキュアOS部500用のメモリの領域(セキュア領域B)にリードアクセスしたとしても例外は発生せず、セキュアOS部300のアボートハンドラ部390が実行されることもない。
以上述べてきたように、図14の構成ではブートローダ部400が明示的にセキュアOS部300に遷移させる必要がなくなる。ブートローダ部400からみると、一般的なシステムのブート手順に従ってノンセキュアOS部500を二次記憶部107から読み込んでメインメモリ部104にロードし、ノンセキュアOS部500を実行するだけの処理を行えばよいようになる。すなわち、本実施形態用にブートローダ部400を修正する必要がなくなるため、機器の実装コストを省略することができる。
(変形例5)
図15は図12の別例である。図12に示した構成ではメインプロセッサ部101がシングルコアであることを想定していた。図15はメインプロセッサ部101がマルチコアである場合の構成である。図15に示すとおり、セキュアOS部300がコア設定部391を備えている点が図12とは異なる。コア設定部391は、ハッシュ値検証部370による検証処理が完了するまで動作するコアを1つに制限し、検証処理が完了した後、残りのコアを動作させる処理を行う。
図16は、図15の構成における情報処理装置100で、電源投入からノンセキュアOS部500を起動させるまでの処理を示すフロー図である。セキュアモニタ部200をロードして実行するまでは図14と同様の処理を行えばよい。
コア設定部391は、セキュアOS部300からOS間遷移でノンセキュアモードに遷移する前に、メインプロセッサ部101に備わっているコア数をチェックする。もし、メインプロセッサ部101のコアが1である場合は以後の処理を行う必要はない。メインプロセッサ部101のコア数が2以上の場合、メインプロセッサ部101で動作中のコアが1であることを確認する。コア設定部391は、もし2つ以上のコアが動作中である場合は、動作中のコアを1つに制限する(ステップS117)。そしてノンセキュアモードに遷移してブートローダ部400を実行する(ステップS104)。
その後、ハッシュ値検証部370でノンセキュアOS部500領域に展開されたノンセキュアOS部500のイメージのハッシュ値と、期待値格納部360に格納された値とが一致するか否かを検証する処理を行うまで(ステップS113まで)は図14と同様の処理を行えばよい。そしてハッシュ値が期待値と一定する場合(ステップS113:Yes)、コア設定部391は、制限した他のコアを有効化して(ステップS116)、ノンセキュアOS部500が起動する(ステップS114)。なお、ブートローダ部400によって動作中のコア数が変更されてしまう事を防ぐために、動作コア数を設定するレジスタに対応したメインメモリ部104のメモリ領域をセキュア領域B、すなわちノンセキュアモードからのライトが禁止となっている領域に設定してもよい。また、ブートローダ部400の実行中にノンセキュアモードからセキュアモードに遷移し、仮想TPM部310のハッシュ値格納部311にデータを書きこむ前後に、ブートローダ部400によって動作コア数が変更されていないかチェックする処理を行ってもよい。もし、ブートローダ部400によってコア数が変更されてしまった場合には、システムを停止させるか、表示画面(不図示)にコア数が変更されたことを伝えるメッセージを表示させるかなどエラー処理を行う。
(変形例6)
図17は図14の別例である。図12に示した構成ではセキュアOS部300側でノンセキュアOS部500をメインメモリ部104に書きこむ処理を行っていた。図17はブートローダ部400でノンセキュアOS部500をメインメモリ部104に書きこむ事ができるが、検証対象となった領域はセキュアOS部300によってライト不可として設定される。
図17に示すとおり、セキュアOS部300によってノンセキュアOS部500のデータがメインメモリ部104に書きこまれるわけではないため、セキュアOS部300はメモリライト部を備えない。さらにハッシュ値格納部311にデータを格納する毎にアドレス空間制御部102のメモリ領域設定を変更するため、セキュアOS部300がメモリ設定部393、およびタイマー割り込みハンドラ部392を新たに備えている点が図12とは異なる。
メモリ設定部393は、セキュアモニタ部200のセキュアモニタメモリ設定部203と同様に、アドレス空間制御部102に対して、アクセス制御のポリシーを設定する処理を行う。
図18は、図17の構成における情報処理装置100で、電源投入からノンセキュアOS部500を起動させるまでの処理を示すフロー図である。また、図19にセキュアモニタメモリ設定部203がメインメモリ部104のメモリ領域を区分けした一例を示している。この区分けの設定は、セキュアモニタメモリ設定部203によって機器起動時の処理の一部としてなされる。初期状態ではノンセキュアOS部500に割り当てられている領域がノンセキュア領域121として設定されている。
ところで、メインプロセッサ部101はある一定周期で時間が経過すると割り込みを検出する、いわゆるタイマー割り込みを検出する事ができる。これは、メインメモリ部104に対するアクセスでポリシー違反が発生した時にアドレス空間制御部102がメインプロセッサ部101に送信する例外と同様の仕組みで実現される。割り込み設定部205はタイマー割り込みが発生した場合、モニタハンドラ部204に処理を遷移させるようにアドレス空間制御部102を設定しておく。この設定は、セキュアモニタ部200がロードされて起動した際に、割り込み設定部205によって機器起動時の処理の一部としてなされる(ステップS701)。
ブートローダ部400はノンセキュアOS部500の一部分を二次記憶部107から読み込み、メインメモリ部104のノンセキュアOS部500用のノンセキュア領域121に書きこむ。書き込みの処理はノンセキュアモードで動作するブートローダ部400によってなされるが、図19に示したようにノンセキュアOS部500が書きこまれる領域はノンセキュア領域121として設定されている。従って、アドレス空間制御部102はこの書きこみを許可し、実際にノンセキュアOS部500の一部がメインメモリ部104のノンセキュア領域121に書きこまれる。ブートローダ部400はこの書きこみ処理を繰り返す。
ここで、ブートローダの処理の最中でタイマー割り込みが発生し、メインプロセッサ部101はブートローダ部400の処理を強制的に中断させ、セキュアモニタ部200のモニタハンドラ部204に遷移させる(ステップS501)。モニタハンドラ部204はブートローダ部400のコンテキストを保存する。この処理はOS切替部202がノンセキュアOS部500からセキュアOS部300に遷移する際に行うコンテキスト保存の処理と同じように行えばよい。そしてメインプロセッサ部101の状態をノンセキュアモードからセキュアモードに遷移させ、最後にセキュアOS部300のタイマー割り込みハンドラ部392を実行する。
タイマー割り込みハンドラ部392は、ノンセキュアOS部500領域の中でブートローダ部400がノンセキュアOS部500のイメージの書きこみを完了した部分までのハッシュ値を計算し、その値をハッシュ値格納部311に格納する(ステップS502)。さらに、タイマー割り込みハンドラ部392はメモリ設定部393を利用してその検証が完了したメモリ領域に対して図13で示されるセキュア領域B’122b’のポリシーを設定し、ノンセキュアモードからはリードもライトも不可能とする(ステップS503)。すなわち、検証が完了した領域についてはノンセキュアモードからのリードもライトも禁止するといった設定になる。この時のメインメモリ部104の領域設定の様子を図20に示す。
図20に示されるように、検証が完了したメインメモリ部104の部分についてはセキュア領域B’122b’に設定されており、まだ検証が完了していないメインメモリ部104の部分についてはノンセキュア領域121として設定されている。そして、遷移命令呼び出し部350は、メインプロセッサ部101をセキュアモードからノンセキュアモードに遷移させ(ステップS504)、コンテキストを復帰させて、タイマー割り込みによって中断させたブートローダ部400の処理を再開させる。
ブートローダ部400がノンセキュアOS部500のイメージ全体を二次記憶部107から読み込むと、ノンセキュアOS部500用のデータが格納されたノンセキュア領域121がすべてセキュア領域B’122b’、すなわちノンセキュアモードからのリードもライトも禁止されるといった状態になる。そしてノンセキュアOS部500のイメージ全体がノンセキュアOS部500のデータ用のノンセキュア領域121に書きこまれると、ブートローダ部400はノンセキュアOS部500が起動する(ステップS401)。
この起動はノンセキュアOS部500用のメモリ領域をリードすることから始まる。すると、ノンセキュアOS部500用のデータが書きこまれているメモリ領域はセキュア領域B’122b’、すなわち、リード禁止に設定されている。そのため、アドレス空間制御部102は読み込みを禁止し、メインプロセッサ部101に例外を発生させる。メインプロセッサ部101は割り込み設定部205の設定に従いモニタハンドラ部204に処理を遷移させる。
モニタハンドラ部204はノンセキュアOS部500のコンテキストを保存する。この処理はOS切替部202がノンセキュアOS部500からセキュアOS部300に遷移する際に行うコンテキスト保存の処理と同じように行えばよい。そしてモニタハンドラ部204はメインプロセッサ部101の状態をノンセキュアモードからセキュアモードに遷移させ、最後にセキュアOS部300のアボートハンドラ部390を実行する。
セキュアOS部300のアボートハンドラ部390は例外が発生する直前の命令をメインメモリ部104から読み込む。例外が発生する直前の命令は、ノンセキュアOS部500用のデータが記憶されたセキュア領域B’122b’を読み込む命令である。すなわち、これからノンセキュアOS部500を実行しようとしているとセキュアOS部300は判断し、ハッシュ値検証部370を使って、ハッシュ値格納部311に格納された値が、期待値格納部360に格納された値と一致するか否かをチェックする(ステップS112、ステップS113)。
ハッシュ値と期待値とが一致する場合、以後、ノンセキュアモードでノンセキュアOS部500用の領域へのリードが発生したとしても以後、例外を発生させないようにアドレス空間制御部102を設定する。具体的には、メインプロセッサ部101がノンセキュアモードの状態の時、ノンセキュアOS部500用の領域へのリードは許可・ライトは禁止という設定をメモリ設定部393がアドレス空間制御部102に施す(ステップS505)。セキュアOS部300は遷移命令呼び出し部350でOS遷移命令を実行する(ステップS114)。セキュアモニタ部200のOS切替部202によってOS間遷移がなされると、ブートローダ部400はメインメモリ部104のノンセキュアOS部500用のデータが記憶されたノンセキュア領域121に書かれているノンセキュアOS部500の実行を開始する。もし期待値と一致しない場合は、エラー処理を行う。
(変形例7)
図21は図17の別例である。図21に示した構成ではセキュアOS部300はタイマー割り込みハンドラ部392を持たない。図22に、図21の構成におけるメインメモリ部104の各メモリ領域に対するアクセスの可否のポリシーを示す。なお、このアクセス制御の設定も、セキュアモニタメモリ設定部203によって機器起動時の処理の一部としてなされる。メインプロセッサ部101がノンセキュアモードにある場合、図13ではセキュア領域B’122b’はリードアクセスもライトアクセスも許可されていなかった。一方、図21ではセキュア領域Cとしてライトが許可されている点が図13との違いである。
図23に、図21の構成におけるメインメモリ部104の各メモリ領域の構成を示す。なお、このアクセス制御の設定も、セキュアモニタメモリ設定部203によって機器起動時の処理の一部としてなされる。変形例6ではノンセキュアOS部500が書きこまれるノンセキュア領域121(ノンセキュアOS用のメモリ領域)に対して、メインプロセッサ部101がノンセキュアモードの状態にある場合、ライトアクセスもリードアクセスも許可されていたが、図23ではセキュア領域C122c、すなわちライトアクセスは許可されるがリードアクセスは禁止されるというように設定されている点が異なる。
図24は、情報処理装置100で、電源投入からノンセキュアOS部500を起動させるまでの処理を示すフロー図である。図24に示されるように、ブートローダ部400によってノンセキュアOS部500の全体が二次記憶部107から読み込まれ、メインメモリ部104のノンセキュアOS部500のセキュア領域C122cに書きこまれるまでは図18のステップS101〜S302と同様の処理でよい。
ブートローダ部400が実行される前の状態ではメインメモリ部104のノンセキュアOS部500のメモリ領域はセキュア領域C122cとして設定されており、メインプロセッサ部101がノンセキュアモードの状態にある場合、ライトアクセスは許可されるがリードアクセスは禁止された状態となっている。つまり、ノンセキュアモードで動作するブートローダ部400がノンセキュアOS部500のノンセキュア領域121に二次記憶部107から読み込んだノンセキュアOS部500を書きこんだとしても、アドレス空間制御部102はこの書き込みをブロックせず、許可する。またこの書きこみが発生したとしても、セキュアモニタ部200もセキュアOS部300も動作しない。さらに、タイマー割り込みがメインプロセッサ部101に通知されたとしても、セキュアモニタ部200もセキュアOS部300もそのタイマー割り込みをハンドルする訳ではない。
そしてノンセキュアOS部500のイメージ全体がノンセキュアOS部500のセキュア領域C122cに書きこまれると、ブートローダ部400はノンセキュアOS部500を実行する(ステップS401)。この実行はノンセキュアOS部500のセキュア領域C122cをリードすることから始まる。すると、ノンセキュアOS部500が書きこまれている領域は図22で示されるセキュア領域C122c、すなわち、リード禁止に設定されているため、アドレス空間制御部102は読み込みを禁止し、メインプロセッサ部101に例外を発生させる。メインプロセッサ部101は割り込み設定部205の設定に従いモニタハンドラ部204に処理を遷移させる。
モニタハンドラ部204はノンセキュアOS部500のコンテキストを保存する。この処理はOS切替部202がノンセキュアOS部500からセキュアOS部300に遷移する際に行うコンテキスト保存の処理と同じように行えばよい。そしてメインプロセッサ部101の状態をノンセキュアモードからセキュアモードに遷移させ、最後にセキュアOS部300のアボートハンドラ部390を実行する。
セキュアOS部300のアボートハンドラ部390は例外が発生する直前の命令をメインメモリ部104から読み込む。例外が発生する直前の命令は、ノンセキュアOS部500のセキュア領域C122cを読み込む命令である。すなわち、これからノンセキュアOS部500を実行しようとしているとセキュアOS部300は判断し、仮想TPM部310のハッシュ値検証部を使って、ハッシュ値格納部311に格納された値が、期待値格納部360に格納された値と一致するか否かをチェックする(ステップS112)。
もし期待値と一致する場合(ステップS113:Yes)、以後、ノンセキュアモードでノンセキュアOS部500用の領域へのリードが発生したとしても以後、例外を発生させないようにアドレス空間制御部102を設定する。具体的には、メインプロセッサ部101がノンセキュアモードの状態の時、ノンセキュアOS部500用の領域へのリードは許可・ライトは禁止という設定をメモリ設定部393がアドレス空間制御部102に施す。そして、セキュアOS部300は遷移命令呼び出し部350でOS遷移命令を実行する(ステップS114)。セキュアモニタ部200のOS切替部202によってOS間遷移がなされると、ブートローダ部400はメインメモリ部104のノンセキュアOS部500に書かれているノンセキュアOS部500の実行を開始する。もし期待値と一致しない場合は(ステップS113:No)、エラー処理を行う(ステップS115)。
このように構成することで、ノンセキュアOS部500の実行に先立ち、メインメモリ部104のノンセキュアOS部500のセキュア領域C122cに、期待するノンセキュアOS部500が書きこまれているかどうかを検査するという事を実現する。そして、ブートローダ部400がノンセキュアOS部500を二次記憶部107からメインメモリ部104に読み込む処理を行う際、ノンセキュアモードからセキュアモードへの遷移、およびセキュアモードからノンセキュアモードへの遷移を行う必要がないため、機器の起動を高速に行うことができる。また、本実施形態用にブートローダ部400を修正する必要がなくなるため、機器の実装コストを省略することができる。
(第2の実施形態)
次に第2の実施形態について説明する。第1の実施形態では、二次記憶部107に格納されているノンセキュアOS部500が改ざんされておらず、期待するイメージであるかどうかを、情報処理装置100のブート時、すなわちノンセキュアOS部500の実行時に、あらかじめ計算しておいたハッシュ値と比較することで確認する。そして、一致している場合のみノンセキュアOS部500の実行を許可する。
これにより、ノンセキュアOS部500がブート前に改ざんされる場合は、ブート時にこれを検出する事ができる。しかしながら別の攻撃として、ノンセキュアOS部500やノンセキュアOS部500上で動作するアプリケーションに不具合(バグ)が組み込まれており、この不具合を不正に利用して、ノンセキュアOS部500が動作中に、ノンセキュアOS部500の領域を改変されてしまう危険性がある。第2の実施形態では、この種の攻撃についても対処するものである。
第2の実施形態では、メインメモリ部104に書きこまれているノンセキュアOS部500が改ざんされていないかを検査する方法、又は現在メインメモリ部104に書きこまれているノンセキュアOS部500の署名付きハッシュ値を外部から取得できる方法について述べる。これにより、ノンセキュアOS部500のブート後、ノンセキュアOS部500の実行中に、不正なプログラムによってメインメモリ部104のノンセキュアOS部500の領域が改変されてしまったとしても、その改変を検出する事ができるようになる。
なお、第2の実施形態と第1の実施形態は両立が可能である。すなわち、第1の実施形態で述べた方法により、情報処理装置100のブート時に二次記憶部107に格納されているノンセキュアOS部500が改ざんされておらず、期待するイメージであるかどうかを確認し、かつ情報処理装置が稼働中にはメインメモリ部104に書きこまれているノンセキュアOS部500が改ざんされていないかを検査するといった使い方をすることもできる。
図25は、第2の実施形態で説明する情報処理装置100のメインプロセッサ部101で動作するソフトウェアの構成の一例を示している。ハードウェア構成は第1の実施形態と同じ構成でよい。図12との違いはセキュアOS部300にタイマー割り込みハンドラ部392を備えている点である。
タイマー割り込みハンドラ部392は、所定のタイマーが経過するごとに、ハッシュ値検証部370へとハッシュ値検証の依頼を送る。そして、ハッシュ値検証部370は、依頼を受けるごとに、メインメモリ部104のノンセキュアOS部500用のメモリ領域に書かれているノンセキュアOS部500のイメージを読み込み、そのハッシュ値を定期的に計算し、期待値と一致しているかどうか確認する。
図26−2は、情報処理装置100で、タイマー割り込みが発生した時の処理を示すシーケンス図である。なお、機器起動時の処理の一部として、セキュアモニタ部200の割り込み設定部205はタイマー割り込みが発生した場合、モニタハンドラ部204に処理を遷移させるように設定しておく。
処理は、情報処理装置100の実行中にタイマー割り込みが発生し、検出された際に開始される(ステップS601)。メインプロセッサ部101はノンセキュアOS部500の処理を強制的に中断させ、セキュアモニタ部200のモニタハンドラ部204に遷移させる。まず、モニタハンドラ部204はタイマー割り込みがノンセキュアOS部500実行中に発生したのか、又はセキュアOS部300実行中に発生したのかを判定する(ステップS602)。メインプロセッサ部101は割り込みが発生して処理をセキュアモニタ部200のモニタハンドラ部204に遷移させたとしても、モードは変更しないため、割り込み発生前のモードを調べるには、現在のメインプロセッサ部101の状態を調べれば分かる。
ノンセキュアOS部500のイメージを検証するには、メインメモリ部104からノンセキュアOS部500を読み込み、ハッシュ値を計算する必要がある。ノンセキュアOS部500のサイズは大きいため、読み込みとハッシュ値の計算は時間がかかる。従って、タイマー割り込みが発生してから次のタイマー割り込みが発生するまでの短い時間でノンセキュアOS部500全体をメインメモリ部104から読み込んでハッシュ値を計算できない場合がある。もしハッシュ値を計算する処理を継続してしまうと、その間はノンセキュアOS部500の処理を実行する事ができず、ノンセキュアOS部500が停止した状態になる。これはノンセキュアOS部500でタッチパネルなどのユーザインターフェースを提供している場合には応答時間が遅くなったり、ネットワーク通信を行っている場合にはタイムアウトしてしまったりする可能性があるため、長時間ノンセキュアOS部500の処理を中断させておくことは好ましくない。
そのため、セキュアOS部300実行中にタイマー割り込みが発生した場合(ステップS602:No)、セキュアOS部300の実行可能期限が切れたと判断してノンセキュアOS部500に処理を遷移させる(ステップS611)。この処理はOS切替部202がセキュアOS部300からノンセキュアOS部500に遷移する際に行うコンテキスト保存の処理と同じように行えばよい。一方、ノンセキュアOS部500実行中にタイマー割り込みが発生した場合(ステップS602:Yes)、セキュアOS部300によるノンセキュアOS部500の検査のタイミングが来たと判断して、セキュア状態に遷移させ、以降の処理を行う(ステップS613)。
なお、タイマー割り込みの発生の間隔が短い場合、タイマー割り込みが発生するたびにこの判断処理を行う必要はない。図26−1にその場合の処理を示すシーケンス図を示す。タイマー割り込みの時間間隔が短いと、セキュア状態にいる時にはすぐにノンセキュア状態に遷移してしまうため、セキュアOS部300の処理を行う時間が短くなり、セキュアOS部300がノンセキュアOS部500のイメージ検証を実行する頻度が少なくなってしまう。そこで、たとえばタイマー割り込みがN回してそのうち1回この判断処理を行うようにしてもよい。つまり、セキュア状態にいる間、タイマー割り込みがN回発生したとして、そのうち1回だけノンセキュア状態に遷移するようにしてもよい(ステップS603:Yes)。このようにN回目が来たのかどうか、すなわちセキュア状態の実行可能時間がタイムアウトしたかどうかを判断するようにしてもよい。
もし、ノンセキュアOS部500実行中にタイマー割り込みが発生した場合(ステップS602:Yes)、OS間遷移命令が実行され、ノンセキュアOS部500のコンテキストが保存される(ステップS613)。この処理はOS切替部202がノンセキュアOS部500からセキュアOS部300に遷移する際に行うコンテキスト保存の処理と同じように行えばよい。そしてメインプロセッサ部101の状態をノンセキュアモードからセキュアモードに遷移させ、最後にセキュアOS部300のタイマー割り込みハンドラ部392を実行する。
タイマー割り込みハンドラ部392は、メインメモリ部104に書かれているノンセキュアOS部500のメモリ領域からOSデータをリードする(ステップS604)。次いで、タイマー割り込みハンドラ部392は、ハッシュ計算部320を通じてリードしたメモリ領域のデータのハッシュ値を計算し(ステップS605)、仮想TPM部310のハッシュ値格納部311に格納する(ステップS606)。
上述のように、ノンセキュアOS部500のイメージサイズは大きいため、1回のメモリ読み込みではイメージ全体を読み込めず、メインメモリ部104のメモリ領域から順次読み込んでハッシュ値を計算する必要がある。そこで、全てのメインメモリ部104のメモリ領域の最後までリードが完了したか否かが判定される(ステップS607)。全てのリードが完了していない場合(ステップS607:No)、ステップS604からの処理が繰り返される。全てのリードが完了した場合(ステップS607:Yes)、ハッシュ値検証部370は、ノンセキュアOS部500のイメージと、期待値格納部360に記憶された正規のノンセキュアOS部500のイメージとが同一であるか比較する(ステップ608)。期待値と一致する場合(ステップS609:Yes)、すなわち改ざんが起こっていない場合、期待値格納部360に格納してある値と、セキュアOS部300が計算する値は一致させなければいけない。値を一致させるには、期待値格納部360に格納してある値を計算する時に逐次的に読み込んだデータサイズと、セキュアOS部300のハッシュ計算部200で計算する時に使う逐次的に読み込んだデータのデータサイズを同じにする必要がある。このデータサイズはあらかじめ所定のサイズに決めておく。
なお、セキュアOS部300がノンセキュアOS部500のハッシュ値を計算中にタイマー割り込みが発生し、ノンセキュアOS部500に処理が遷移した場合には、中間値が仮想TPM部310のハッシュ値格納部311に格納されている事になる。そしてノンセキュアOS部500実行中にタイマー割り込みによって再びセキュアOS部300のタイマー割り込みハンドラ部392に処理が戻ってきた時には、この中間値を計算した時点から処理が再開される。
ノンセキュアOS部500のハッシュ値を最後まで計算したならば、期待値格納部360に格納されている値と、ハッシュ値格納部311に格納されている値を比較する。一致している場合には、ノンセキュアOS部500が改ざんされていない事を示すため、正常な状態であると判断してOS間遷移命令を実行し(ステップS611)、ノンセキュアOS部500の処理を継続する(ステップS612)。値が一致していない場合にはエラー処理を行う(ステップS610)。
エラー処理としては、システムを停止させる方法、情報処理装置に接続されているモニター(不図示)に検証処理が失敗したことを伝えるメッセージを表示させる方法、成功した時と同様に遷移命令呼び出し部350でOS遷移命令を実行し、ノンセキュアOS部500を実行させる方法がある。
なお、仮にノンセキュアOS部500の検証処理が失敗したとしても、その失敗したという情報をノンセキュアOS部500等が知り得るのであれば、ノンセキュアOS部500のブート処理を継続する事が有用な場合もある。このため、仮想TPM部310のハッシュ値格納部311に格納されている値に対して、秘密鍵格納部313に格納されている値を秘密鍵として、署名計算部312によって署名を行い、その値をノンセキュアOS部500に渡す処理を行ってもよい。もちろん、検証処理が成功した場合でも、署名付きハッシュ値をノンセキュアOS部500に渡してもよい。
(第3の実施形態)
第3の実施形態は、保護対象のアプリケーションをノンセキュアOS部500上で実行させることで、アプリケーションの処理を不正な改変から保護したり、アプリケーションが生成したデータをそのアプリケーションからしかアクセスできないようにしたりが可能なデータ保護の仕組みを提供するものである。たとえば、セキュアOS部上で動作するアプリケーションがデータを生成し、そのデータを同じアプリケーションが再利用する場合には、仮にノンセキュア部、あるいは二次記憶装置に一旦出力したとしても、生成した値と、再利用する際の値が同一であり、改変を防止する手段を提供する事が望ましい。また、ユースケースによってはデータを生成した情報処理装置でしか再利用できないといった制約や、データを生成したアプリケーションしか再利用できないといった制約が必要な場合もある。第3の実施形態では、これらの課題を解決するものである。
図27は、第3の実施形態で説明する情報処理装置100のメインプロセッサ部101で動作するソフトウェアの構成の一例を示している。ハードウェア構成は第1の実施形態と同じ構成でよい。すなわち、ソフトウェアはセキュアモニタ部200、セキュアOS部300、ノンセキュアOS部500を含んでいる。
セキュアモニタ部200はセキュアOS部300とノンセキュアOS部500を切り替える処理を行う。セキュアモニタ部200はまた起動時にセキュアOS部300をロードして実行する処理も行う。
セキュアOS部300は、第1の実施形態と比較して、あらたに実行モジュールロード部394、モジュール署名生成部395、アプリ実行部396、命令セレクタ部397、及びパラメタロード部398を備えている。命令セレクタ部397は、ノンセキュアOS部500からセキュアOS部300に処理が遷移した際、次にセキュアOS部300内のどの処理を実行するか選択する。選択の方法については後述する。
実行モジュールロード部394は、セキュアOS部300上で動作させるアプリケーション(以後、実行モジュールと呼ぶ)をセキュアOS部300のメモリ領域にロードする処理を行う。パラメタロード部398は、セキュアOS部300上で動作させるアプリケーションに必要なパラメタをセキュアOS部300のメモリ領域にロードする処理を行う。アプリ実行部396は、セキュアOS部300のメモリ領域にロードしたアプリケーションを実行する。ハッシュ計算部320はセキュアOS部300のメモリ領域にロードしたアプリケーションに対するハッシュ値を計算する。モジュール署名生成部395は、ハッシュ計算部320が生成したハッシュ値に対して、仮想TPM部310に記憶された秘密鍵を使って署名を生成する。メモリライト部340はデータをメインメモリ部104にストア(ライト)する。このストアの処理はアドレス空間制御部102を介して行われる。仮想TPM部310、遷移命令呼び出し部350は、第1の実施形態と同様の構成でよい。ここで、パラメタとは実行モジュールが実行に必要なデータの事を指す。たとえば、実行モジュールが公開鍵暗号を使った暗号処理だった場合、暗号対象の平文データや公開鍵暗号処理の暗号計算に必要なパラメタのことを指す。また、実行モジュールが共通鍵暗号を使った復号処理だった場合、復号対象の暗号化されたデータの事を指す。なお、実行モジュールが実行時にパラメタを必要としない場合は、パラメタロード部398は必須ではない。
ノンセキュアOS部500は、パラメタ取得部506、実行モジュール取得部507、共有領域ライト部508、共有領域リード部509、検証処理部510、検証鍵管理部511、遷移命令呼び出し部512を備えている。遷移命令呼び出し部512は、第1の実施形態と同様の構成でよい。また、実行モジュールが実行時にパラメタを必要としない場合は、パラメタ取得部506は必須ではない。さらに、実行モジュールが実行後に共有領域123に対して何も出力を行わないのであれば、共有領域リード部509は必須ではない。
実行モジュール取得部507は、セキュアOS部300で実行する実行モジュールを二次記憶部107やネットワークで接続された装置等から取得する処理を行う。パラメタ取得部506は、セキュアOS部300で実行する実行モジュールに必要なパラメタを二次記憶部107やネットワークで接続された装置等から取得する処理を行う。共有領域ライト部508は、セキュアOS部300で実行する実行モジュールやパラメタをメインメモリ部104にストア(ライト)する。このストアの処理はアドレス空間制御部102を介して行われる。
共有領域リード部509は、セキュアOS部300で生成されたセキュアOS部300で実行する実行モジュールの署名付きハッシュ値や、セキュアOS部300上で実行されるアプリケーションが生成した実行モジュールの処理結果をメインメモリ部104からリード(ロード)する。このリードの処理はアドレス空間制御部102を介して行われる。
検証処理部510は、セキュアOS部300で生成された、セキュアOS部300で実行される実行モジュールの署名の正当性を公開鍵を用いて検証する。検証鍵管理部511は、検証処理部510で使う公開鍵を蓄積し、管理する。図28は、第3の実施形態におけるメインメモリ部104のメモリマップであり、セキュア領域A122aに実行モジュールと、実行モジュール用データが記憶されている点が第1の実施形態の図9とは異なる。すなわち、実行モジュールは、セキュアモードでなければ、ライトもリードも不可能となっている。
図29は、情報処理装置100で、ノンセキュアOS部500にて実行モジュールを実行する際の処理を示すフロー図である。まず、ノンセキュアOS部500、またはノンセキュアOS部500上で実行されるアプリケーションは、実行モジュール取得部507を通じてセキュアOS部300で実行する実行モジュールを取得し、共有領域ライト部508でメインメモリ部104の共有領域123に書きこむ(ステップS701)。さらに、ノンセキュアOS部500、またはノンセキュアOS部500上で実行されるアプリケーションは、セキュアOS部300で実行する実行モジュールに必要なパラメタも共有領域123に書きこむ(ステップS702)。アドレス空間制御部102によって共有領域123はノンセキュアモードからでも読み書きが可能な設定になっているため(図4参照)、これらの書きこみは成功する。
そして、遷移命令呼び出し部404は、OS間遷移を行うよう、メインプロセッサ部101に指示する(ステップS703)。このとき、遷移命令呼び出し部404は、実行モジュール及びパラメタのロード命令であることをセキュアOS部300に通知する。このロード命令であることを通知する方法として、共有領域123に命令種別を書きこむようにすればよい。
メインプロセッサ部101は、セキュアモニタ部200のOS切替部202を呼び出す。OS切替部202では、ノンセキュアOS部500のコンテキストの退避、及びセキュアOS部300のコンテキストの復帰処理とモードの切り替え処理を行う。そして、命令セレクタ部397を呼び出す。
命令セレクタ部397では、今回の遷移後に実行する命令が実行モジュール及びパラメタのロード命令であること識別し、実行モジュールロード部394とパラメタロード部398をそれぞれ呼び出す。この命令種別の識別方法として、共有領域123に書きこまれている命令種別を読み出すようにすればよい。
次いで、パラメタロード部398は、共有領域123に書きこまれている実行モジュールのパラメタをパラメタの領域であるセキュア領域A122aにコピーして書き込む。また、実行モジュールロード部394は、共有領域123に書きこまれている実行モジュールのイメージを実行モジュールの領域であるセキュア領域A122aにコピーして書き込む(ステップS705)。この時、パラメタロード部398も実行モジュールロード部394も、セキュアモードで動作しているが、実行モジュール、及びパラメタの領域であるセキュア領域A122aはセキュアモードから書きこみが可能な設定になっているため(図13参照)、これらの書きこみは成功する。そして、実行モジュールロード部394は、ハッシュ計算部320を呼び出す。
ハッシュ計算部320はセキュア領域A122aにコピーされた実行モジュールのハッシュ値を計算し、仮想TPM部310に送信する。仮想TPM部310は、受信したハッシュ値をハッシュ値格納部311に格納する(ステップS706)。そして、セキュアOS部300は遷移命令呼び出し部350でOS遷移命令を実行する(ステップS707)。セキュアモニタ部200のOS切替部202はセキュアOS部300のコンテキストの退避、及びノンセキュアOS部500のコンテキストの復帰処理とモードの切り替え処理を行い、ノンセキュアOS部500がOS間遷移で中断した処理を再開させる。
ノンセキュアOS部500、又はノンセキュアOS部500上で実行されるアプリケーションは、次にアプリ実行を命令する指示をメインメモリ部104の共有領域123に書きこむ(ステップS708)。そして、再び遷移命令呼び出し部404は、OS間遷移を実行する(ステップS709)。
セキュアOS部300の命令セレクタ部397では、共有領域123に書きこまれた命令種別から今回の遷移後に実行する命令が実行モジュールの実行であること識別し、アプリ実行部396を呼び出す。アプリ実行部396は、メインメモリ部104の実行モジュールの領域であるセキュア領域A122aに書かれているコードを実行する(ステップS710)。実行モジュールは必要に応じてセキュア領域A122aにコピーされたパラメタを使い、処理を実行する。
実行が終了すると、セキュアOS部300は遷移命令呼び出し部350でOS遷移命令を実行し、ノンセキュアOS部500の処理を再開させる(ステップS711)。
この際、実行モジュールは処理の結果を共有領域123に書き出してもよい。たとえば、実行モジュールが公開鍵アルゴリズムによって公開鍵と秘密鍵を生成する処理を行うコードだった場合、公開鍵がノンセキュアOS部500から利用できるように、生成した公開鍵をメインメモリ部104の共有領域123に書き出す処理を行ってもよい。なお、これまで実行モジュールのロード命令と実行モジュールの実行命令は別々の命令とし、命令セレクタ部がどちらの命令であるかを識別する方法について説明してきた。すなわち、ロード命令と実行命令でそれぞれセキュアモードへの遷移処理を行っていたが、これを実行モジュールのロード処理と実行処理を1回の遷移処理で行うようにしてもよい。その場合、ステップS706の後にノンセキュア状態に遷移することなくステップS710が実行されることになる。
また、ノンセキュアOS部500は、必要に応じて、セキュアOS部300で実行した実行モジュールが意図したものであるかどうか検証する処理を行ってもよい。これは、まず、あらかじめ仮想TPM部310の秘密鍵格納部313に格納されている秘密鍵に対応した公開鍵をノンセキュアOS部500が有している事を前提とする。これは、仮想TPM部310に対して公開鍵を取得するインターフェースを用意しておき、セキュアOS部300が公開鍵を共有領域123に書き出す処理を行うなどの方法をとればよい。
次に、ノンセキュアOS部500は、命令種別として検証処理を行う事を示す値を共有領域123に書きこみ、再び遷移命令呼び出し部404を使って、OS間遷移をさせる(ステップS713)。
セキュアOS部300の命令セレクタ部397は、共有領域123の命令種別を読み込み、今回の遷移後に実行する命令が実行モジュールの検証であること識別し、モジュール署名生成部395を呼び出す。モジュール署名生成部395は、仮想TPM部310のハッシュ値格納部311に格納されている値を取得する。この値はステップS706で計算した実行モジュールのハッシュ値である。そして、モジュール署名生成部395は取得した値に対して、秘密鍵格納部313に格納されている秘密鍵を使い、署名計算部312で署名を施す処理を依頼する。そしてモジュール署名生成部395は実行モジュールのハッシュ値に対する署名を生成して、署名付きハッシュ値を取得する(ステップS714)。
なお、セキュアOS部300は、実行モジュールを複数ロードできるようになっていてもよい。この場合、実行モジュールを一意に識別する番号を付け、実行モジュールごとにハッシュ値格納部311にハッシュ値を格納する。そしてその署名を要求する際、一意に識別する番号から、どの実行モジュールに対するハッシュ値を要求しているかを調べ、そのハッシュ値に対する署名付きハッシュ値を要求するように仮想TPM部310に指示するようにすればよい。
仮想TPM部310から署名付きハッシュ値、すなわち実行モジュールの署名付きハッシュ値を受信すると、セキュアOS部300はその値を共有領域123に書き出し(ステップS715)、遷移命令呼び出し部350でOS遷移命令を実行し、ノンセキュアOS部500の処理を再開させる(ステップS716)。
その後、ノンセキュアOS部500は、署名付きハッシュ値を共有領域123からリードし(ステップS717)、あらかじめ有している公開鍵を使ってハッシュ値の署名を検証する(ステップS718)。このようにして、ノンセキュアOS部500からセキュアOS部300で実行した実行モジュールの正当性を確認する事ができる。もちろん、この署名検証は必ずしもノンセキュアOS部500で行う必要はなく、あらかじめ公開鍵を検証者に渡して置き、検証要求に基づいて署名付きハッシュ値をネットワークで他機器に送信し、ネットワークで接続された機器が署名を検証するようにしてもよい。このようにすれば、情報処理装置100で実行された実行モジュールが正しいかどうかを遠隔地から検証する事が可能となる。
(変形例8)
なお、ハッシュ値格納部311は複数のハッシュ値を格納する事ができるが、この実行モジュールのハッシュ値は、まだ何の値も格納していない領域に格納してもよいし、セキュアOS部300のハッシュ値が格納されている領域に格納してもよい。この時の構成を図30に示す。図30ではセキュアモニタ部200にモニタハッシュ計算部206を備えている点が図27と異なる。
モニタハッシュ計算部206は、セキュアOS部300の実行に先立ち、メインメモリ部104に書きこまれたセキュアOS部300の領域であるセキュア領域122に対するハッシュ値を計算しておく。そして、セキュアOS部300の仮想TPM部310のハッシュ値格納部311の一つにその値を格納する。
なお、セキュアOS部300を実行する前はハッシュ値格納部311も動作していない。このため、セキュアOS部300のハッシュ値の計算は実行前に行っておき、セキュアOS部300実行後に、セキュアOS部300のハッシュ計算部320にその値を格納するように依頼してもよい。
たとえば、セキュアOS部300のハッシュ値をXとすると、セキュアOS部300のハッシュ値をハッシュ値格納部311に入れると、ハッシュ値格納部311の値は以下のようになる。
ハッシュ値格納部311の値=f(X || 0)
この状態で、図29の処理に従って、セキュアOS部300が実行モジュールのハッシュ値をハッシュ値格納部311に格納すると、ハッシュ値格納部311の値は以下のようになる。
ハッシュ値格納部311の値=f(実行モジュールのハッシュ値||ハッシュ値格納部311の値)
この値に対し、秘密鍵格納部313に格納されている秘密鍵を使い、署名計算部312で署名を施す処理を行って、検証者に渡す。すると、もし、ハッシュ値の値が一致しない場合、実行モジュールが不正に改変されているか、検証者が期待するセキュアOS部300ではないプラットホーム上で実行モジュールが実行されたか、又はその両方の場合であるため、検証者は、実行モジュールが期待するセキュアOS部300上で実行されたことを確認する事ができる。
(変形例9)
図31は、図29の別例である。図29では、実行モジュールをロードする命令、実行する命令、検証する命令をそれぞれ分けて、その都度、OS間遷移を実行していた。図31に示す例では、これらを1回のOS間遷移で済ませてしまう例である。
ステップS801〜ステップS807までの処理は図29のステップS701〜ステップS707までの処理と同様である。次に、セキュアOS部300はOS間遷移を行うのではなく、アプリを実行する(ステップS808)。アプリは必要に応じて処理結果を共有領域123に書き出す。
さらに、アプリの実行が終了すると、セキュアOS部300は、仮想TPM部310から実行モジュールに対する署名付きハッシュ値を取得し(ステップS809)、その値を共有領域123に書き出す(ステップS810)。そしてセキュアOS部300は、OS間遷移を実行する(ステップS811)。
その後、ノンセキュアOS部500は、署名付きハッシュ値を共有領域123からリードし(ステップS812)、あらかじめ有している公開鍵を使ってハッシュ値の署名を検証する(ステップS813)。このようにして、OS間遷移を1回で済ませることができるため、実行モジュールの実行とノンセキュアOS部500からセキュアOS部300で実行した実行モジュールの正当性を確認する処理を高速に行う事ができる。
(変形例10)
図32は、図27の別例である。図27の構成に加え、情報処理装置100は、仮想TPM部310がデータ暗号化部314、及びデータ復号化部315を備えている点と、セキュアOS部300がメモリリード部330を備えている。
なお、秘密鍵格納部313は公開鍵暗号の秘密鍵に加えて、共通鍵暗号の共通鍵を備えているものとする。共通鍵としては、秘密鍵を暗号化するための第1共通鍵、及び実行モジュールが生成するデータを暗号化する際に用いる第2共通鍵との少なくとも一方を含んでいる。なお、第1共通鍵、及び第2共通鍵はともに共通のものであってもよい。データ暗号化部314はアプリ実行部396の要求に基づいて、データを仮想TPM部310内の秘密鍵格納部313の共通鍵で暗号化する処理を行う。また、データ暗号化部314は、秘密鍵を共通鍵で暗号化する処理も行う。データ復号化部315はアプリ実行部396の要求に基づいて、暗号化してあるデータを仮想TPM部310内の秘密鍵格納部313の共通鍵で復号する処理を行う。
なお、データを暗号化する際、その引数としてハッシュ値格納部311の値を含めた以下の式で計算する。
暗号化データ=g(仮想TPM部310の共通鍵,データxorハッシュ値格納部311の値)
ここで、gはAESやDESなどの共通鍵暗号の暗号処理を示す。g(key,data)は、keyを鍵として、AESにてdataを暗号化する関数である。さらにデータの暗号化にハッシュ値格納部311の値が関与する。メモリリード部330は、共有領域123から暗号化データを取得する処理を行う。
図33は、図32のセキュアOS部300で実行させる実行モジュール600のソフトウェア構成の一例を示すブロック図である。実行モジュール600はデータ生成部601、データ暗号化依頼部602、データ送信依頼部603、データ受信依頼部604、データ復号化依頼部605、及び第2データ処理部606を備えている。
データ生成部601は、データを生成する処理を行う。たとえば、データとして公開鍵アルゴリズムを使った公開鍵ペアの生成処理などである。データ送信依頼部603は、セキュアOS部300のメモリライト部340に対して、実行モジュールのデータを共有領域123に書き出す事を依頼する処理を行う。データ暗号化依頼部602は、仮想TPM部310に対してデータを入力し、仮想TPM部310の秘密鍵格納部313に格納されている共通鍵を使って暗号化する事を依頼する処理を行う。データ受信依頼部604は、セキュアOS部300のメモリリード部330に対して、データを共有領域123から読み出す事を依頼する処理を行う。
データ復号化依頼部605は、データ受信依頼部604で受信したデータを仮想TPM部310に対して入力し、仮想TPM部310の秘密鍵格納部313に格納されている共通鍵を使って復号化する事を依頼する処理を行う。第2データ処理部606は、データ受信依頼部で受信したデータを仮想TPM部310に対して入力し、仮想TPM部310の秘密鍵格納部313に格納されている秘密鍵を使って署名値を計算する事を依頼する処理を行う。
図34は、図32の情報処理装置で図33の実行モジュールを実行する際の処理を示すフロー図である。処理の開始前には図29、又は図31の処理に従って実行モジュール600がメインメモリ部104の実行モジュールの領域であるセキュア領域A122aに書きこまれており、実行モジュールロード部394によって仮想TPM部310のハッシュ値格納部311に実行モジュール600のハッシュ値が格納されているものとする。
図34に示されるように、処理は、秘密鍵生成フェーズと署名計算フェーズとに区分される。ノンセキュアOS部500及び、セキュアOS部300上で実行される実行モジュール600以外の実行モジュールから実行モジュール600がデータ生成部601で生成した秘密鍵の値を読み取られないようにすることがこの実施形態の特徴である。
まず秘密鍵生成フェーズについて述べる。図34に示されるように、ノンセキュアOS部500、又はノンセキュアOS部500上で実行されるアプリケーション(以下、ノンセキュアアプリケーションとする)は、実行モジュール600に対して公開鍵ペアを生成するよう指示する命令種別を共有領域123に書き込む(ステップS901)。そして、ノンセキュアOS部500は、OS間遷移を実行する(ステップS902)。
セキュアOS部300の命令セレクタ部397では、今回の遷移後に実行する命令が実行モジュールの実行であること識別し、アプリ実行部396を呼び出す。実行モジュール600は共有領域123に書きこまれている命令種別から公開鍵ペア生成の命令であることを識別し、所定の公開鍵アルゴリズムによって秘密鍵と公開鍵を生成する(ステップS903)。この公開鍵アルゴリズムはたとえばRSAや楕円曲線暗号などのよく知られたものを利用すればよい。なお、共通鍵ペアを生成するに至る中間値を一次的にメインメモリ部104に格納する際には実行モジュール用データ用のセキュア領域A122aを利用する。この領域はセキュア領域A122aとして指定しているため、ノンセキュアOS部500やノンセキュアアプリケーションがアクセスすることはできない。
そして、実行モジュール600は、データ暗号化依頼部602を使ってセキュアOS部300に対してデータ生成部601で生成した秘密鍵を暗号化するよう依頼する(ステップS904)。セキュアOS部300のアプリ実行部396は仮想TPM部310のデータ暗号化部314を呼び出し、平文の秘密鍵を入力として与える。データ暗号化部314は、以下の式に従って秘密鍵を暗号化する。
暗号化秘密鍵=g(仮想TPM部310の共通鍵,秘密鍵xorハッシュ値格納部311の値)
なお、ここではハッシュ値格納部311の値に実行モジュール600の値のみ入力させた状態、すなわちf(実行モジュール600のハッシュ値||0)の値が格納されている事を想定している。しかしながら、ハッシュ値格納部311にはセキュアOS部300のハッシュ値を格納した後に実行モジュール600のハッシュ値が格納されていてもよい。その場合はハッシュ値格納部311の値は以下のような計算を行った結果となる。
ハッシュ値格納部311の値=f(実行モジュール600のハッシュ値||f(セキュアOS部300のハッシュ値||0))
そして、データ暗号化部314は、暗号化秘密鍵と公開鍵を共有領域123に書き出し(ステップS905)、OS間遷移を実行する(ステップS906)。ノンセキュアOS部500またはノンセキュアアプリケーションは、共有領域123から暗号化秘密鍵と公開鍵を読み込み(ステップS907)、それぞれファイルとして二次記憶部107に書き出す(ステップS908)。このようにして、実行モジュール600のハッシュ値にバインドして秘密鍵を暗号化する。
次に、署名計算フェーズについて説明する。まず、ノンセキュアOS部500またはノンセキュアアプリケーションが二次記憶部107から暗号化秘密鍵を読み込み(ステップS909)、共有領域123に書き出す。そして、ノンセキュアOS部500は、命令種別として実行モジュール600を実行し、さらに実行モジュール600は署名を施すよう指示する値と、署名対象のデータを共有領域123に書き込み(ステップS910)、OS間遷移を実行する(ステップS911)。
セキュアOS部300の命令セレクタ部397は、共有領域123に書きこまれている命令種別を読み出し、今回の遷移後に実行する命令が実行モジュールの実行であることを識別し、アプリ実行部396を呼び出す。実行モジュール600は共有領域123に書きこまれている命令種別を読み出し、その値から署名生成の命令であることを識別し、さらに暗号化秘密鍵、署名対象のデータを共有領域123から読み込む(ステップS912)。
そして、実行モジュール600は、データ復号化依頼部605を使ってセキュアOS部300に対して秘密鍵を復号化するよう依頼する(ステップS913)。セキュアOS部300のアプリ実行部396は仮想TPM部310のデータ復号化部315を呼び出し、暗号化された秘密鍵を入力として与える。データ復号化部315は、以下の式に従って秘密鍵を復号化する。
平文秘密鍵=g'(仮想TPM部310の共通鍵,平文秘密鍵xorハッシュ値格納部311の値)
ここで、g'は共通鍵暗号の暗号処理に対応する復号処理を示す。g'(key,data)は、keyを鍵として、たとえばAESにてdataを復号化する関数である。
次いで、署名計算部312は、出力として取得した平文秘密鍵を使って所定の署名アルゴリズムによって署名対象のデータに対して署名値を計算し、対象のデータに署名を施す(ステップS914)。そして、署名計算部312は、署名値を共有領域123に書き出し(ステップS915)、セキュアOS部300は、OS間遷移を実行する(ステップS916)。
ノンセキュアOS部500は署名値を共有領域123から読み出す(ステップS917)。そして、ノンセキュアOS部500またはノンセキュアアプリケーションは、必要に応じて公開鍵を使って署名の値を検証してもよい(ステップS918)。この署名検証は必ずしも情報処理装置100で行う必要はなく、公開鍵を持つネットワーク上で接続された装置の上で行ってもよい。
以上のような処理を行った場合の効果を以下で説明する。通常ステップS912においては、ハッシュ値格納部311には実行モジュール600のハッシュ値が格納されている。ここで、データの暗号化を指示した実行モジュール600とは別の実行モジュール600がロードされており、復号を試みたとする。この時、ハッシュ値格納部311にはデータの暗号化を指示した実行モジュール600とは異なる値が格納されているため、平文の秘密鍵を取得する事はできない。これは実行モジュール600が情報処理装置100の電源オフ時に二次記憶部107に格納されており、二次記憶部107を物理的に取り外して外部機器で実行モジュール600が改ざんされるといった攻撃に対しては有用である。
実行モジュール600が改ざんされた場合、ハッシュ値格納部311にはオリジナルの実行モジュール600とは異なるハッシュ値が格納される事になり、この改ざんされたモジュールで復号は失敗するからである。また、仮想TPM部310の共通鍵の値を情報処理装置100毎に異なる値にしておけば、もし他の情報処理装置で実行モジュール600が実行されており、暗号化秘密鍵を情報処理装置で復号を試みたとしても、仮想TPM部310の共通鍵の値が一致せず、平文の秘密鍵を取得する事は出来ない。すなわち、秘密鍵を暗号化した情報処理装置で、秘密鍵を暗号化した実行モジュールしか復号できないようにすることができる。
なお、秘密鍵生成フェーズと署名計算フェーズの間で情報処理装置100が再起動してもよい。その場合、実行モジュール600はメインメモリ部104からアンロードされる。しかし、署名計算フェーズの前に図29または図31の手順に従って実行モジュール600が再びロードされ、ハッシュ値格納部311に実行モジュール600のハッシュ値が格納される。
(変形例11)
図35は図32の別例である。セキュアモニタ部200に割り込み設定部205、モニタハンドラ部204と、セキュアOS部300にタイマハンドラ部381を備えている点が図32とは異なる。
割り込み設定部205は、メインプロセッサ部101でタイマー割り込みが発生した場合に、モニタハンドラ部204を呼び出すようにメインプロセッサ部101に設定を行う。この設定処理はセキュアモニタ部200の初期化処理時の一処理として実行される。
モニタハンドラ部204は、メインプロセッサ部101でタイマー割り込みが発生した場合に呼び出される。モニタハンドラ部204はもし現在の状態がノンセキュアモードであるならばノンセキュアOS部500のコンテキストを保存し、状態をセキュアモードに切り替える処理を行う。その後、処理をセキュアOS部300のタイマハンドラ部381に引き継ぐ。
タイマハンドラ部381はタイマー割り込みが発生すると遷移命令呼び出し部350でOS間遷移を実行させる。
図18で述べたようにメインプロセッサ部101はタイマー割り込みを検出することができるが、図35の構成ではセキュアOS部300で実行モジュールを実行中にメインプロセッサ部101によってタイマー割り込みが発生すると、実行モジュールの処理を中断してノンセキュアOS部500に遷移させる。
すなわち、実行モジュールを処理している最中にタイマー割り込みが発生すると、メインプロセッサ部101は実行モジュールの処理を強制的に中断させ、セキュアモニタ部200のモニタハンドラ部204に遷移させる。モニタハンドラ部204はセキュアOS部300のタイマハンドラに処理を移し、セキュアOS部300のタイマハンドラは遷移命令呼び出し部350を実行する。これにより、OS切替部202はセキュアOS部300のコンテキストを保存し、ノンセキュアOS部500に遷移させる。なお、タイマーの間隔が短い場合、タイマー割り込みが発生するたびにこの判断処理を行う必要はない。たとえば、タイマー割り込みがN回発生してそのうち1回に対して上記の判断処理を行うようにしてもよい。このようにN回目が来たのかどうか、すなわちタイムアウトしたかどうかを判断するようにしてもよい。
このようにすることで、ノンセキュアOS部500の処理を長時間中断させる事を防ぐことができる。たとえば、公開鍵暗号アルゴリズムに基づく公開鍵ペアを生成する処理は複雑であるため、実行モジュールの処理に長時間かかる可能性がある。図32に示した構成では、この間、ノンセキュアOS部500は処理を中断させたままの状態になる。もしノンセキュアOS部500またはノンセキュアアプリケーションでセンサーによるデータ取得処理やネットワーク通信など定期的な処理を実行する必要がある場合、実行モジュールを実行中はデータ取得やネットワーク通信ができなくなってしまう。これを防ぐために、実行モジュールが実行可能な時間をタイマーにより制限することで、ノンセキュアOS部500が長時間停止した状態に置かれる事を防ぐことができる。
(変形例12)
図36は図32の別例である。セキュアOS部300にモジュール検証部399を備えている点が図32と異なる。図36では実行モジュールに署名が添付されており、アプリ実行部396は実行モジュールの実行に先立ち、実行モジュールに添付された署名を検証し、検証が成功する場合のみ実行モジュールを実行させる。
図32の実行モジュールの形式はモジュールの実行に必要な実行コード領域と初期値などのデータ領域から構成されている事を想定していた。一方、図36の実行モジュールの形式は、それらの領域に加えて、実行モジュールに対する署名が付与されている事を想定している。
この署名に使う秘密鍵は、仮想TPM部310が管理していてもよいし、不図示の実行モジュール配布サーバなどの外部機器が管理してもよい。
図37は図36の情報処理装置で図33の実行モジュールを実行する際の処理を示すフロー図である。まず、ノンセキュアOS部500は、実行モジュールの署名生成に利用した秘密鍵に対応する署名検証用の公開鍵(パラメタ)を実行モジュールと共に共有領域123に書きこむ(ステップS1001、S1002)。さらに、命令種別として実行モジュール600の実行命令である事を示す値を共有領域123に書きこむ(ステップS1003)。ノンセキュアOS部500は、OS間遷移を実行する(ステップS1004)。
そして、セキュアOS部300の命令セレクタ部397は、共有領域123に書きこまれている命令種別を読み出し、今回の遷移後に実行する命令が実行モジュールの実行であることを識別し、実行モジュールロード部394とアプリ実行部396を呼び出す。セキュアOS部300の実行モジュールロード部394は実行モジュールを共有領域123からロードし、セキュア領域122に書きこむ(ステップS1005、S1006)。そして実行モジュールの実行に先立ち、セキュアOS部300は、実行モジュールの署名を公開鍵によって検証する(ステップS1007)。この署名は、PKI(Public Key Infrastructure)によってチェーン構造の証明書になっていてもよい。すなわち、ルートとなる公開鍵が仮想TPM部310の秘密鍵格納部313に格納されており、この公開鍵によってチェーンされた証明書を検証し、すべてのチェーンを検証することができたならば、その実行モジュールの検証が成功するというようになっていてもよい。
検証が失敗した場合(ステップS1008:No)、セキュアOS部300は、実行モジュールをセキュア領域122から削除し(ステップS1011)、OS間遷移を実行してノンセキュアOS部500に戻る(ステップS1012)。この場合は実行モジュールは実行されない。
検証が成功した場合(ステップS1008:Yes)、ハッシュ計算部320は、実行モジュールのハッシュ値を計算し、仮想TPM部310に格納する(ステップS1009)。以後の処理は図32と同じでよい。
このように実行モジュールに署名を付与する事で、実行モジュールが正当な配布者によって配布されたものであり、改ざんされていないことを確認する事ができる。たとえば、実行モジュールの署名の付与を情報処理装置が行うならば、情報処理装置で確認済みの実行モジュールしか実行されないように制限することができる。これは、実行モジュールが二次記憶部107で改ざんされる危険性のある場合には特に有用である。
なお、この発明は上記した実施の形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を種々変形して具体化することができる。また、上記した実施の形態に開示されている複数の構成要素を適宜に組み合わせることにより、種々の発明を形成することができる。例えば、実施の形態に示される全構成要素から幾つかの構成要素を削除しても良いものである。さらに、異なる実施の形態に係る構成要素を適宜組み合わせても良いものである。
1 バス
2 バス
100 情報処理装置
101 メインプロセッサ部
102 アドレス空間制御部
103 メモリ制御部
104 メインメモリ部
105 ブートROM部
106 二次記憶部制御部
107 二次記憶部
108 ブリッジ部
109 I/O処理部
121 ノンセキュア領域
122 セキュア領域
123 共有領域
200 セキュアモニタ部
201 ローダー部
202 OS切替部
203 セキュアモニタメモリ設定部
204 モニタハンドラ部
205 割り込み設定部
206 モニタハッシュ計算部
300 セキュアOS部
310 仮想TPM部
311 ハッシュ値格納部
312 署名計算部
313 秘密鍵格納部
314 データ暗号化部
315 データ復号化部
320 ハッシュ計算部
330 メモリリード部
340 メモリライト部
350 遷移命令呼び出し部
360 期待値格納部
370 ハッシュ値検証部
380 ハッシュ値送信部
381 タイマハンドラ部
390 アボートハンドラ部
391 コア設定部
392 タイマー割り込みハンドラ部
393 メモリ設定部
394 実行モジュールロード部
395 モジュール署名生成部
396 アプリ実行部
397 命令セレクタ部
398 パラメタロード部
399 モジュール検証部
400 ブートローダ部
401 起動部
402 メモリライト部
403 OSリード部
404 遷移命令呼び出し部
500 ノンセキュアOS部
501 通信処理部
502 コンテンツ受信部
503 DRM処理部
504 コンテンツ再生部
505 ハッシュ値送信部
506 パラメタ取得部
507 実行モジュール取得部
508 共有領域ライト部
509 共有領域リード部
510 検証処理部
511 検証鍵管理部
600 実行モジュール
601 データ生成部
602 データ暗号化依頼部
603 データ送信依頼部
604 データ受信依頼部
605 データ復号化依頼部
606 第2データ処理部

Claims (12)

  1. データを記憶するメインメモリ部と、
    セキュアモードとノンセキュアモードとに選択的に切り替えることが可能であって、現在のモードを示す状態情報をバスに送信する状態送信部を有し、前記メインメモリ部に記憶されたデータをリード、及び前記メインメモリ部へデータをライトし、前記メインメモリ部にセキュアOS部自身のOS実行イメージをライトするメインプロセッサ部と、
    前記メインプロセッサ部によって、前記セキュアモードの場合に実行されるセキュアOS部と、
    前記メインプロセッサ部によって、前記セキュアモードの場合に実行される実行モジュール部と、
    前記メインプロセッサ部によって、前記ノンセキュアモードの場合に実行されるノンセキュアOS部と、
    前記メインプロセッサ部のモードが前記セキュアモード及び前記ノンセキュアモードの時にリードとライトを許可する共有領域と、前記メインプロセッサ部のモードが前記セキュアモードの時にリードとライトを許可し、前記メインプロセッサ部のモードが前記ノンセキュアモードの時にリードとライトを禁止する前記実行モジュール用のメモリ領域とをアドレス空間制御部に対して設定するセキュアモニタメモリ設定部と、
    前記バスから受信した前記状態情報に基づいて、前記メインプロセッサ部のモードを判定し、前記セキュアモニタメモリ設定部による設定にしたがって、前記メインプロセッサ部から前記メインメモリ部へのリードとライトの許可、及び禁止を制御するアドレス空間制御部と、
    前記セキュアOS部で実行する実行モジュールを前記メインメモリ部の前記共有領域へと書き込む共有領域ライト部と、
    前記共有領域に書き込まれた前記実行モジュールを、前記実行モジュール用のメモリ領域へとライトする実行モジュールロード部と、
    前記実行モジュール用のメモリ領域にライトされた前記実行モジュールを実行するアプリ実行部と、
    を備えることを特徴とする情報処理装置。
  2. 前記ノンセキュアOS部が前記セキュアOS部へと依頼した命令が、前記実行モジュールの前記メインメモリ部の前記実行モジュール用のメモリ領域へのライト、又は前記実行モジュールの実行であるかを判定する命令セレクタ部と、
    を更に備え、
    前記実行モジュールロード部は、前記ノンセキュアOS部からの命令が、前記実行モジュールの前記メインメモリ部の前記実行モジュール用のメモリ領域へのライトである場合に、前記共有領域に書き込まれた前記実行モジュールを、前記実行モジュール用のメモリ領域へとライトし、
    前記アプリ実行部は、前記ノンセキュアOS部からの命令が、前記実行モジュールの実行である場合に、前記実行モジュール用のメモリ領域にライトされた実行モジュールを実行し、
    前記共有領域ライト部は、前記ノンセキュアモードで実行され、
    前記実行モジュールロード部、及び前記アプリ実行部は前記セキュアモードで実行される
    ことを特徴とする請求項1に記載の情報処理装置。
  3. 前記命令セレクタ部は、前記ノンセキュアOS部が前記セキュアOS部へと依頼した命令が、前記実行モジュールの署名の検証であるか否かを更に判定し、
    前記実行モジュール用のメモリ領域へライトされた前記実行モジュールのハッシュ値を計算して、記憶させるハッシュ値計算部と、
    前記命令セレクタ部により、前記ノンセキュアOS部からの命令が、前記実行モジュールの署名の検証であったと判定された場合に、前記ハッシュ値計算部によって計算された前記ハッシュ値に対して所定の秘密鍵で署名を行い、署名付きハッシュ値を前記共有領域にライトするモジュール署名生成部と、
    を更に備え、
    前記モジュール署名生成部、及び前記ハッシュ値計算部は、前記セキュアモードで実行される
    ことを特徴とする請求項2に記載の情報処理装置。
  4. 共通鍵を保存する秘密鍵格納部と、
    前記秘密鍵を前記秘密鍵格納部に保存された前記共通鍵で暗号化した暗号化秘密鍵と、前記公開鍵とを前記共有領域に書き込むデータ暗号化部と、を備え、
    前記モジュール署名生成部は、前記秘密鍵で前記署名を行い、
    前記データ暗号化部は前記セキュアモードで実行される
    ことを特徴とする請求項3に記載の情報処理装置。
  5. 第2共通鍵を保存する第2秘密鍵格納部と、
    前記実行モジュールが生成するデータを暗号化する際、前記ハッシュ値計算部によって計算された前記実行モジュールのハッシュ値と前記第2秘密鍵格納部に保存された前記第2共通鍵を用いて暗号化し、前記共有領域に書き込む第2データ暗号化部と、を備え、
    前記第2データ暗号化部は前記セキュアモードで実行される
    ことを特徴とする請求項3に記載の情報処理装置。
  6. タイマー割り込みを検出して、所定の時間が経過するごとに前記メインプロセッサ部を一方のモードから他方のモードへと移行させるタイマハンドラ部をさらに備える
    ことを特徴とする請求項1に記載の情報処理装置。
  7. データを記憶するメインメモリ部と、
    セキュアモードとノンセキュアモードとに選択的に切り替える事が可能であって、現在の前記モードを示す状態情報をバスに送信する状態送信部を有するメインプロセッサ部と、
    前記メインプロセッサ部によって、前記セキュアモードの場合に実行されるセキュアOS部と、
    前記メインプロセッサ部によって、前記ノンセキュアモードの場合に実行されるノンセキュアOS部と、
    前記メインプロセッサ部のモードが前記セキュアモード及び前記ノンセキュアモードの時にリードとライトを許可する共有領域と、前記ノンセキュアOS部のOS実行イメージをライトするノンセキュアOS部用のメモリ領域とをアドレス空間制御部に対して設定するセキュアモニタメモリ設定部と、
    前記バスから受信した前記状態情報に基づいて、前記メインプロセッサ部のモードを判定し、前記セキュアモニタメモリ設定部による設定にしたがって、前記メインプロセッサ部から前記メインメモリ部へのリードとライトの許可、及び禁止を制御するアドレス空間制御部と、
    装置の起動時に前記ノンセキュアモードにおいて、前記ノンセキュアOS部のOS実行イメージを前記メインメモリ部の所定のメモリ領域に書き込むブートローダ部と、
    を備え、
    前記セキュアOS部は、前記ノンセキュアOS部用のメモリ領域上に書き込まれた前記ノンセキュアOS部のOS実行イメージから算出されるハッシュ値と、想定される前記ノンセキュアOS部のOS実行イメージのハッシュ値の期待値とを比較し、一致する場合に書き込まれた前記ノンセキュアOS部のデータが正しいものとしてノンセキュアOSの実行を許可する
    ことを特徴とする情報処理装置。
  8. 前記セキュアモニタメモリ設定部は、前記ノンセキュアOS部用のメモリ領域を、前記セキュアモードの場合にライトを許可し、前記ノンセキュアモードの場合にライトを禁止するよう設定し、
    前記ブートローダ部は、前記ノンセキュアOS部のOS実行イメージを、前記共有領域に書き込み、
    前記セキュアOS部は、前記ハッシュ値の算出が完了した前記ノンセキュアOS部のOS実行イメージを前記共有領域から、前記ノンセキュアOS部用のメモリ領域へとコピーする
    ことを特徴とする請求項7に記載の情報処理装置。
  9. 前記アクセス空間制御部で禁止されるアクセスがあった場合に、例外処理を行って前記ノンセキュアモードから前記セキュアモードに移行させるモニタハンドラ部をさらに備え、
    前記セキュアモニタメモリ設定部は、前記ノンセキュアOS部用のメモリ領域を、前記ノンセキュアモードにおいてリードが可能、ライトが不可能なメモリ領域として設定し、
    前記ブートローダ部は、前記ノンセキュアモードにおいて起動時に前記ノンセキュアOS部用のOS実行イメージを前記ノンセキュアOS部用のメモリ領域に書き込む命令を送信し、
    前記モニタハンドラ部は、前記ブートローダ部による前記ノンセキュアOS部用のメモリ領域への書き込み命令が送信された際に、前記セキュアモードへと移行させて、前記セキュアOS部により処理を継続させ、
    前記セキュアOS部は前記セキュアモードにおいて、前記ノンセキュアOS部のOS実行イメージを前記ノンセキュアOS部用のメモリ領域へとコピーする
    ことを特徴とする請求項7に記載の情報処理装置。
  10. タイマー割り込みを検出して、所定の時間が経過するごとに前記メインプロセッサ部を前記セキュアモードに移行させるタイマハンドラ部をさらに備え、
    前記セキュアOS部は、前記タイマハンドラ部による前記タイマー割り込み処理が起こると、前記メインメモリ部に記憶された前記ノンセキュアOS部用のOS実行イメージのうち、ハッシュ値の算出が完了していないものについて、前記ハッシュ値を算出し、算出の完了後に、前記タイマー割り込み処理の開始前の前記ノンセキュアモードの状態に前記メインプロセッサ部を復帰させる
    ことを特徴とする請求項7に記載の情報処理装置。
  11. タイマー割込み処理を検出して、所定の時間が経過するごとに前記メインプロセッサ部を前記セキュアモードに移行させるタイマハンドラ部をさらに備え、
    前記セキュアOS部は、前記メインメモリ部に記憶された前記ノンセキュアOS部のOS実行イメージの前記ハッシュ値を算出し、前記ハッシュ値と、想定される前記ノンセキュアOS部のOS実行イメージのハッシュ値の期待値とを比較し、一致しない場合に書き込まれた前記ノンセキュアOS部が改変されたものとして識別し、前記ノンセキュアOS部に所定のエラー処理を実施させる
    ことを特徴とする請求項7に記載の情報処理装置。
  12. データを記憶するメインメモリ部と、
    セキュアモードとノンセキュアモードとに選択的に切り替えることが可能であって、現在の前記モードを示す状態情報をバスに送信する状態送信部を有し、前記メインメモリ部に記憶されたデータをリード、及び前記メインメモリ部へデータをライトし、前記メインメモリ部にセキュアOS部自身のOS実行イメージをライトするメインプロセッサ部と、を備えるコンピュータに、
    前記メインプロセッサ部によって、前記セキュアモードの場合に実行されるセキュアOS部と、
    前記メインプロセッサ部によって、前記セキュアモードの場合に実行される実行モジュール部と、
    前記メインプロセッサ部によって、前記ノンセキュアモードの場合に実行されるノンセキュアOS部と、
    前記メインプロセッサ部のモードが前記セキュアモード及び前記ノンセキュアモードの時にリードとライトを許可する共有領域と、前記メインプロセッサ部のモードが前記セキュアモードの時にリードとライトを許可し、前記メインプロセッサ部のモードが前記ノンセキュアモードの時にリードとライトを禁止する前記実行モジュール用のメモリ領域とをアドレス空間制御部に対して設定するセキュアモニタメモリ設定部と、
    前記バスから受信した前記状態情報に基づいて、前記メインプロセッサ部のモードを判定し、前記セキュアモニタメモリ設定部による設定にしたがって、前記メインプロセッサ部から前記メインメモリ部へのリードとライトの許可、及び禁止を制御するアドレス空間制御部と、
    前記セキュアOS部で実行する実行モジュールを前記メインメモリ部の前記共有領域へと書き込む共有領域ライト部と、
    前記共有領域に書き込まれた前記実行モジュールを、前記実行モジュール用のメモリ領域へとライトする実行モジュールロード部と、
    前記実行モジュール用のメモリ領域にライトされた前記実行モジュールを実行するアプリ実行部と、
    を実行させるための情報処理プログラム。
JP2013065227A 2013-03-26 2013-03-26 情報処理装置、情報処理プログラム Active JP6067449B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2013065227A JP6067449B2 (ja) 2013-03-26 2013-03-26 情報処理装置、情報処理プログラム
US14/150,157 US9191202B2 (en) 2013-03-26 2014-01-08 Information processing device and computer program product

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013065227A JP6067449B2 (ja) 2013-03-26 2013-03-26 情報処理装置、情報処理プログラム

Publications (2)

Publication Number Publication Date
JP2014191509A true JP2014191509A (ja) 2014-10-06
JP6067449B2 JP6067449B2 (ja) 2017-01-25

Family

ID=51622036

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013065227A Active JP6067449B2 (ja) 2013-03-26 2013-03-26 情報処理装置、情報処理プログラム

Country Status (2)

Country Link
US (1) US9191202B2 (ja)
JP (1) JP6067449B2 (ja)

Cited By (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9524189B2 (en) 2014-08-20 2016-12-20 Kabushiki Kaisha Toshiba Information processing device, information processing method, and computer program product
US9536113B2 (en) 2013-09-24 2017-01-03 Kabushiki Kaisha Toshiba Information processing apparatus, information processing system, and computer program product
WO2017034008A1 (ja) * 2015-08-25 2017-03-02 株式会社Seltech ハイパーバイザーを有するシステム
WO2018008605A1 (ja) * 2016-07-04 2018-01-11 株式会社Seltech 人工知能を有するシステム
KR20180019749A (ko) * 2015-08-07 2018-02-26 퀄컴 인코포레이티드 그래픽스 프로세싱 유닛들에 대한 하드웨어 강제 컨텐츠 보호
US10102391B2 (en) 2015-08-07 2018-10-16 Qualcomm Incorporated Hardware enforced content protection for graphics processing units
JP2019096338A (ja) * 2019-02-04 2019-06-20 ルネサスエレクトロニクス株式会社 半導体装置および半導体装置販売モデル
JP2019164647A (ja) * 2018-03-20 2019-09-26 株式会社東芝 情報処理装置、情報処理方法、およびプログラム
US10474494B2 (en) 2016-09-16 2019-11-12 Kabushiki Kaisha Toshiba Information processing apparatus, information processing method, and computer program product
JP2020009144A (ja) * 2018-07-09 2020-01-16 株式会社東芝 情報処理装置、移動体、情報処理方法、およびプログラム
JP2020123856A (ja) * 2019-01-30 2020-08-13 株式会社日立製作所 署名システム、署名方法及びプログラム
JP2020166757A (ja) * 2019-03-29 2020-10-08 株式会社デンソーテン 制御装置および制御方法
JP2021517409A (ja) * 2018-03-23 2021-07-15 マイクロン テクノロジー,インク. ストレージデバイスの認証修正
WO2023079743A1 (ja) * 2021-11-08 2023-05-11 日本電信電話株式会社 プログラム実行システム、データ処理装置、プログラム実行方法、及びプログラム

Families Citing this family (65)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9027102B2 (en) 2012-05-11 2015-05-05 Sprint Communications Company L.P. Web server bypass of backend process on near field communications and secure element chips
US9282898B2 (en) 2012-06-25 2016-03-15 Sprint Communications Company L.P. End-to-end trusted communications infrastructure
US8649770B1 (en) 2012-07-02 2014-02-11 Sprint Communications Company, L.P. Extended trusted security zone radio modem
US8667607B2 (en) 2012-07-24 2014-03-04 Sprint Communications Company L.P. Trusted security zone access to peripheral devices
US9183412B2 (en) 2012-08-10 2015-11-10 Sprint Communications Company L.P. Systems and methods for provisioning and using multiple trusted security zones on an electronic device
US9015068B1 (en) 2012-08-25 2015-04-21 Sprint Communications Company L.P. Framework for real-time brokering of digital content delivery
US9215180B1 (en) 2012-08-25 2015-12-15 Sprint Communications Company L.P. File retrieval in real-time brokering of digital content
US9161227B1 (en) 2013-02-07 2015-10-13 Sprint Communications Company L.P. Trusted signaling in long term evolution (LTE) 4G wireless communication
US9578664B1 (en) 2013-02-07 2017-02-21 Sprint Communications Company L.P. Trusted signaling in 3GPP interfaces in a network function virtualization wireless communication system
US9613208B1 (en) 2013-03-13 2017-04-04 Sprint Communications Company L.P. Trusted security zone enhanced with trusted hardware drivers
US9191388B1 (en) 2013-03-15 2015-11-17 Sprint Communications Company L.P. Trusted security zone communication addressing on an electronic device
US9374363B1 (en) 2013-03-15 2016-06-21 Sprint Communications Company L.P. Restricting access of a portable communication device to confidential data or applications via a remote network based on event triggers generated by the portable communication device
US9171243B1 (en) 2013-04-04 2015-10-27 Sprint Communications Company L.P. System for managing a digest of biographical information stored in a radio frequency identity chip coupled to a mobile communication device
US9324016B1 (en) 2013-04-04 2016-04-26 Sprint Communications Company L.P. Digest of biographical information for an electronic device with static and dynamic portions
US9454723B1 (en) 2013-04-04 2016-09-27 Sprint Communications Company L.P. Radio frequency identity (RFID) chip electrically and communicatively coupled to motherboard of mobile communication device
US9838869B1 (en) 2013-04-10 2017-12-05 Sprint Communications Company L.P. Delivering digital content to a mobile device via a digital rights clearing house
US9443088B1 (en) 2013-04-15 2016-09-13 Sprint Communications Company L.P. Protection for multimedia files pre-downloaded to a mobile device
US9560519B1 (en) 2013-06-06 2017-01-31 Sprint Communications Company L.P. Mobile communication device profound identity brokering framework
US9183606B1 (en) 2013-07-10 2015-11-10 Sprint Communications Company L.P. Trusted processing location within a graphics processing unit
US9208339B1 (en) 2013-08-12 2015-12-08 Sprint Communications Company L.P. Verifying Applications in Virtual Environments Using a Trusted Security Zone
US9185626B1 (en) 2013-10-29 2015-11-10 Sprint Communications Company L.P. Secure peer-to-peer call forking facilitated by trusted 3rd party voice server provisioning
US9191522B1 (en) 2013-11-08 2015-11-17 Sprint Communications Company L.P. Billing varied service based on tier
JP6194764B2 (ja) * 2013-11-08 2017-09-13 富士通株式会社 情報処理装置、制御方法、および制御プログラム
US9226145B1 (en) 2014-03-28 2015-12-29 Sprint Communications Company L.P. Verification of mobile device integrity during activation
JP6481900B2 (ja) * 2014-06-25 2019-03-13 インテル・コーポレーション ハードウェア構成レポーティング用の装置、ハードウェア構成アービトレーションの方法、プログラム、機械可読記録媒体、及び、ハードウェア構成アービトレーション用の装置
US9230085B1 (en) * 2014-07-29 2016-01-05 Sprint Communications Company L.P. Network based temporary trust extension to a remote or mobile device enabled via specialized cloud services
GB2531844B (en) * 2014-10-31 2019-06-26 Hewlett Packard Development Co Hardware-protective data processing systems and methods using an application executing in a secure domain
FR3028071B1 (fr) * 2014-11-05 2016-11-04 Oberthur Technologies Appareil electronique et procede mis en œuvre dans un tel appareil electronique
US10263959B2 (en) * 2014-11-28 2019-04-16 Samsung Electronics Co., Ltd. Method for communicating medical data
JP6380084B2 (ja) * 2014-12-19 2018-08-29 富士ゼロックス株式会社 情報処理装置及び情報処理プログラム
US9779232B1 (en) 2015-01-14 2017-10-03 Sprint Communications Company L.P. Trusted code generation and verification to prevent fraud from maleficent external devices that capture data
US9838868B1 (en) 2015-01-26 2017-12-05 Sprint Communications Company L.P. Mated universal serial bus (USB) wireless dongles configured with destination addresses
WO2016122590A1 (en) * 2015-01-30 2016-08-04 Hewlett-Packard Development Company, L.P. Processor state determination
US9563577B2 (en) * 2015-02-18 2017-02-07 Synopsys, Inc. Memory tamper detection
US9473945B1 (en) 2015-04-07 2016-10-18 Sprint Communications Company L.P. Infrastructure for secure short message transmission
CN104778794B (zh) * 2015-04-24 2017-06-20 华为技术有限公司 移动支付装置和方法
GB2540388B (en) * 2015-07-15 2019-01-23 Advanced Risc Mach Ltd Secure mode state data access tracking
US9819679B1 (en) 2015-09-14 2017-11-14 Sprint Communications Company L.P. Hardware assisted provenance proof of named data networking associated to device data, addresses, services, and servers
US10218702B2 (en) 2015-11-09 2019-02-26 Silvercar, Inc. Vehicle access systems and methods
US10282719B1 (en) 2015-11-12 2019-05-07 Sprint Communications Company L.P. Secure and trusted device-based billing and charging process using privilege for network proxy authentication and audit
US9817992B1 (en) 2015-11-20 2017-11-14 Sprint Communications Company Lp. System and method for secure USIM wireless network access
CN105825128B (zh) 2016-03-15 2020-05-19 华为技术有限公司 一种数据输入方法、装置及用户设备
US10289853B2 (en) * 2016-03-31 2019-05-14 Microsoft Technology Licensing, Llc Secure driver platform
EP3246845B1 (en) 2016-05-17 2018-12-05 Inside Secure Secure asset management system
WO2018119904A1 (zh) * 2016-12-29 2018-07-05 华为技术有限公司 一种实现安全操作系统切换的片上系统和方法
CN110383281A (zh) * 2017-01-04 2019-10-25 格哈德·施瓦茨 非对称系统与网络体系结构
US10365908B2 (en) * 2017-03-24 2019-07-30 Flexera Software Llc Secure reprogramming of smart devices to alter device functionality based on license rights
US10499249B1 (en) 2017-07-11 2019-12-03 Sprint Communications Company L.P. Data link layer trust signaling in communication network
JP6897438B2 (ja) * 2017-09-06 2021-06-30 富士通株式会社 情報処理装置、情報処理システム及びプログラム
JP6762924B2 (ja) * 2017-12-01 2020-09-30 株式会社東芝 情報処理装置、情報処理方法、およびプログラム
JP2019133345A (ja) * 2018-01-30 2019-08-08 東芝メモリ株式会社 データ蓄積装置、データ処理システムおよびデータ処理方法
US11347861B2 (en) 2018-04-10 2022-05-31 Raytheon Company Controlling security state of commercial off the shelf (COTS) system
US11178159B2 (en) 2018-09-07 2021-11-16 Raytheon Company Cross-domain solution using network-connected hardware root-of-trust device
US11423150B2 (en) 2018-09-07 2022-08-23 Raytheon Company System and method for booting processors with encrypted boot image
US10878101B2 (en) * 2018-09-07 2020-12-29 Raytheon Company Trusted booting by hardware root of trust (HRoT) device
JP7129296B2 (ja) * 2018-09-26 2022-09-01 キヤノン株式会社 画像処理装置、画像処理装置の制御方法
WO2020205497A1 (en) 2019-04-01 2020-10-08 Raytheon Company Root of trust assisted access control of secure encrypted drives
BR112021019741A2 (pt) 2019-04-01 2021-12-21 Raytheon Co Sistemas e método para proteção de dados
CN111125711B (zh) * 2019-12-03 2021-05-07 支付宝(杭州)信息技术有限公司 安全任务处理方法、装置、电子设备及存储介质
US11379588B2 (en) 2019-12-20 2022-07-05 Raytheon Company System validation by hardware root of trust (HRoT) device and system management mode (SMM)
JP7249968B2 (ja) * 2020-03-09 2023-03-31 株式会社東芝 情報処理装置およびストレージ
EP4211552A1 (en) * 2020-09-08 2023-07-19 Osom Products, Inc. Mobile device with secure private memory
KR20220059730A (ko) * 2020-11-03 2022-05-10 삼성전자주식회사 Drm 패키지를 이용한 신경망 모델의 구동 방법 및 이를 이용한 데이터 처리 방법
US20230229777A1 (en) * 2022-01-18 2023-07-20 Dell Products L.P. Cloud based boot integrity
CN115617560A (zh) * 2022-11-02 2023-01-17 地平线征程(杭州)人工智能科技有限公司 一种芯片监控方法及装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040153672A1 (en) * 2002-11-18 2004-08-05 Arm Limited Switching between secure and non-secure processing modes
WO2007125911A1 (ja) * 2006-04-24 2007-11-08 Panasonic Corporation データ処理装置、方法、プログラム、集積回路、プログラム生成装置
US20080196081A1 (en) * 2006-10-08 2008-08-14 International Business Machines Corporation Switching between unsecure system software and secure system software
JP2009282751A (ja) * 2008-05-22 2009-12-03 Toyota Infotechnology Center Co Ltd プログラム検査システムおよび方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4288292B2 (ja) 2006-10-31 2009-07-01 株式会社エヌ・ティ・ティ・ドコモ オペレーティングシステム監視設定情報生成装置及びオペレーティングシステム監視装置
US20110044451A1 (en) * 2007-07-25 2011-02-24 Panasonic Corporation Information processing apparatus and falsification verification method

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040153672A1 (en) * 2002-11-18 2004-08-05 Arm Limited Switching between secure and non-secure processing modes
JP2006506751A (ja) * 2002-11-18 2006-02-23 エイアールエム リミテッド 安全モードと非安全モードとを切り換えるプロセッサ
WO2007125911A1 (ja) * 2006-04-24 2007-11-08 Panasonic Corporation データ処理装置、方法、プログラム、集積回路、プログラム生成装置
US20090307783A1 (en) * 2006-04-24 2009-12-10 Manabu Maeda Data processing device, method, program, integrated circuit, and program generating device
US20080196081A1 (en) * 2006-10-08 2008-08-14 International Business Machines Corporation Switching between unsecure system software and secure system software
JP2009282751A (ja) * 2008-05-22 2009-12-03 Toyota Infotechnology Center Co Ltd プログラム検査システムおよび方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
JPN6016032324; 中嶋 健一郎 Kenichiro Nakajima: 'セキュリティ支援ハードウェアによるハイブリッドOSシステムの高信頼化 Enhancing reliability in Hybri' 情報処理学会研究報告 Vol.2008 No.116 IPSJ SIG Technical Reports 第2008巻, 20081120, pp.1-7, 社団法人情報処理学会 Information Processing Socie *

Cited By (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9536113B2 (en) 2013-09-24 2017-01-03 Kabushiki Kaisha Toshiba Information processing apparatus, information processing system, and computer program product
US9524189B2 (en) 2014-08-20 2016-12-20 Kabushiki Kaisha Toshiba Information processing device, information processing method, and computer program product
US10102391B2 (en) 2015-08-07 2018-10-16 Qualcomm Incorporated Hardware enforced content protection for graphics processing units
KR101869674B1 (ko) 2015-08-07 2018-07-23 퀄컴 인코포레이티드 그래픽스 프로세싱 유닛들에 대한 하드웨어 강제 컨텐츠 보호
KR20180019749A (ko) * 2015-08-07 2018-02-26 퀄컴 인코포레이티드 그래픽스 프로세싱 유닛들에 대한 하드웨어 강제 컨텐츠 보호
JP2017162483A (ja) * 2015-08-25 2017-09-14 株式会社Seltech ハイパーバイザーを有するシステム
JP2017146974A (ja) * 2015-08-25 2017-08-24 株式会社Seltech ハイパーバイザーを有するシステム
US10902112B2 (en) 2015-08-25 2021-01-26 Sekisui House, Ltd. System including a hypervisor
JP6130612B1 (ja) * 2015-08-25 2017-05-17 株式会社Seltech ハイパーバイザーを有するシステム
WO2017034008A1 (ja) * 2015-08-25 2017-03-02 株式会社Seltech ハイパーバイザーを有するシステム
JP6130617B1 (ja) * 2015-08-25 2017-05-17 株式会社Seltech ハイパーバイザーを有するシステム
JP2018085135A (ja) * 2016-07-04 2018-05-31 株式会社Seltech 人工知能を有するシステム
JP6329331B1 (ja) * 2016-07-04 2018-05-23 株式会社Seltech 人工知能を有するシステム
WO2018008605A1 (ja) * 2016-07-04 2018-01-11 株式会社Seltech 人工知能を有するシステム
JP2018085136A (ja) * 2016-07-04 2018-05-31 株式会社Seltech 人工知能を有するシステム
US10474494B2 (en) 2016-09-16 2019-11-12 Kabushiki Kaisha Toshiba Information processing apparatus, information processing method, and computer program product
JP2019164647A (ja) * 2018-03-20 2019-09-26 株式会社東芝 情報処理装置、情報処理方法、およびプログラム
US10872174B2 (en) 2018-03-20 2020-12-22 Kabushiki Kaisha Toshiba Information processing device, information processing method, and computer program product
JP2021517409A (ja) * 2018-03-23 2021-07-15 マイクロン テクノロジー,インク. ストレージデバイスの認証修正
US11902449B2 (en) 2018-03-23 2024-02-13 Micron Technology, Inc. Storage device authenticated modification
JP2020009144A (ja) * 2018-07-09 2020-01-16 株式会社東芝 情報処理装置、移動体、情報処理方法、およびプログラム
JP2020123856A (ja) * 2019-01-30 2020-08-13 株式会社日立製作所 署名システム、署名方法及びプログラム
JP7061083B2 (ja) 2019-01-30 2022-04-27 株式会社日立製作所 署名システム、署名方法及びプログラム
JP2019096338A (ja) * 2019-02-04 2019-06-20 ルネサスエレクトロニクス株式会社 半導体装置および半導体装置販売モデル
JP2020166757A (ja) * 2019-03-29 2020-10-08 株式会社デンソーテン 制御装置および制御方法
JP7141977B2 (ja) 2019-03-29 2022-09-26 株式会社デンソーテン 制御装置および制御方法
WO2023079743A1 (ja) * 2021-11-08 2023-05-11 日本電信電話株式会社 プログラム実行システム、データ処理装置、プログラム実行方法、及びプログラム

Also Published As

Publication number Publication date
US20140298026A1 (en) 2014-10-02
US9191202B2 (en) 2015-11-17
JP6067449B2 (ja) 2017-01-25

Similar Documents

Publication Publication Date Title
JP6067449B2 (ja) 情報処理装置、情報処理プログラム
US11416605B2 (en) Trusted execution environment instances licenses management
KR101397637B1 (ko) 다중 사용자 감응 코드 및 데이터를 보호하는 아키텍처를 포함하는 방법 및 장치
JP5690412B2 (ja) ハードウェアデバイスの鍵プロビジョン方法および装置
US8555089B2 (en) Program execution apparatus, control method, control program, and integrated circuit
US7788487B2 (en) Data processing apparatus
KR100792287B1 (ko) 자체 생성한 암호화키를 이용한 보안방법 및 이를 적용한보안장치
WO2019104988A1 (zh) Plc的安全处理单元及其总线仲裁方法
JP5980050B2 (ja) 情報処理装置
JP2006203564A (ja) マイクロプロセッサ、ノード端末、コンピュータシステム及びプログラム実行証明方法
US10282549B2 (en) Modifying service operating system of baseboard management controller
EP2270707B1 (en) Loading secure code into a memory
WO2009090706A1 (ja) 情報処理装置および携帯電話装置
US20120204254A1 (en) Method and apparatus for managing security state transitions
US11704442B2 (en) Instance handling of a trusted execution environment
US9213864B2 (en) Data processing apparatus and validity verification method
KR101885146B1 (ko) 애플리케이션 보호 장치 및 방법
JP6741236B2 (ja) 情報処理装置
JP4580030B2 (ja) セキュアデバイス
JP2007272923A (ja) サーバ
JP2007272923A5 (ja)
JP5234217B2 (ja) 情報処理装置、ソフトウェア更新方法及びプログラム
JP2013191226A (ja) 情報処理装置、ソフトウェア更新方法及び画像処理装置
JP2010061182A (ja) ソフトウェア管理方法、ソフトウェア管理装置およびソフトウェア管理プログラム
JP2004240719A (ja) ソフトウェア実行制御方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20150914

RD01 Notification of change of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7421

Effective date: 20151102

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20160818

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160830

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20161031

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20161122

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20161221

R151 Written notification of patent or utility model registration

Ref document number: 6067449

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151