IP Force 特許公報掲載プロジェクト 2022.1.31 β版

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

▶ 大日本印刷株式会社の特許一覧

特許7559344認可に基づくリソースアクセス制御システム、セキュアなコンポーネント、デバイス及び認可に基づくリソースアクセス制御方法
<>
  • 特許-認可に基づくリソースアクセス制御システム、セキュアなコンポーネント、デバイス及び認可に基づくリソースアクセス制御方法 図1
  • 特許-認可に基づくリソースアクセス制御システム、セキュアなコンポーネント、デバイス及び認可に基づくリソースアクセス制御方法 図2
  • 特許-認可に基づくリソースアクセス制御システム、セキュアなコンポーネント、デバイス及び認可に基づくリソースアクセス制御方法 図3
  • 特許-認可に基づくリソースアクセス制御システム、セキュアなコンポーネント、デバイス及び認可に基づくリソースアクセス制御方法 図4
  • 特許-認可に基づくリソースアクセス制御システム、セキュアなコンポーネント、デバイス及び認可に基づくリソースアクセス制御方法 図5
  • 特許-認可に基づくリソースアクセス制御システム、セキュアなコンポーネント、デバイス及び認可に基づくリソースアクセス制御方法 図6
  • 特許-認可に基づくリソースアクセス制御システム、セキュアなコンポーネント、デバイス及び認可に基づくリソースアクセス制御方法 図7
  • 特許-認可に基づくリソースアクセス制御システム、セキュアなコンポーネント、デバイス及び認可に基づくリソースアクセス制御方法 図8
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-09-24
(45)【発行日】2024-10-02
(54)【発明の名称】認可に基づくリソースアクセス制御システム、セキュアなコンポーネント、デバイス及び認可に基づくリソースアクセス制御方法
(51)【国際特許分類】
   G06F 21/62 20130101AFI20240925BHJP
   G06F 21/78 20130101ALI20240925BHJP
   G06F 21/33 20130101ALI20240925BHJP
【FI】
G06F21/62
G06F21/78
G06F21/33
【請求項の数】 18
(21)【出願番号】P 2020072994
(22)【出願日】2020-04-15
(65)【公開番号】P2021170228
(43)【公開日】2021-10-28
【審査請求日】2023-02-21
【前置審査】
(73)【特許権者】
【識別番号】000002897
【氏名又は名称】大日本印刷株式会社
(74)【代理人】
【識別番号】100114557
【弁理士】
【氏名又は名称】河野 英仁
(74)【代理人】
【識別番号】100078868
【弁理士】
【氏名又は名称】河野 登夫
(72)【発明者】
【氏名】浅野 正徳
【審査官】吉田 歩
(56)【参考文献】
【文献】特表2017-537421(JP,A)
【文献】特表2017-503289(JP,A)
【文献】国際公開第2020/009659(WO,A1)
【文献】国際公開第2020/055574(WO,A1)
【文献】特表2015-530802(JP,A)
【文献】特開2017-157984(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 21/62
G06F 21/78
G06F 21/33
(57)【特許請求の範囲】
【請求項1】
ユーザ認証結果に基づいてリソースに対するアクセスを認可する認可サーバと、
前記認可サーバの認可結果に基づいてアクセスが制御されるリソースを有するリソースサーバと、
クライアントが動作するデバイスと
を備え、
前記デバイスは、
前記認可サーバがリソースに対するアクセスを認可した結果、前記クライアントが取得する、所定のサーバが発行するトークン情報を記憶するセキュアなコンポーネントを備え、
前記クライアントは、
前記セキュアなコンポーネントに記憶したトークン情報を前記リソースサーバへ送信し、
前記リソースサーバは、
前記所定のサーバが発行したトークン情報の正当性を検証し、前記トークン情報の検証結果に基づいて前記クライアントのリソースへのアクセスを制御し、
前記セキュアなコンポーネントは、
前記クライアントが取得したトークン情報の正当性を検証するトークン検証機能を備え、
検証が成功した場合、前記トークン情報を記憶する、
認可に基づくリソースアクセス制御システム。
【請求項2】
ユーザ認証結果に基づいてリソースに対するアクセスを認可する認可サーバと、
前記認可サーバの認可結果に基づいてアクセスが制御されるリソースを有するリソースサーバと、
クライアントが動作するデバイスと
を備え、
前記デバイスは、
前記認可サーバがリソースに対するアクセスを認可した結果、前記クライアントが取得する、所定のサーバが発行するトークン情報を記憶するセキュアなコンポーネントを備え、
前記クライアントは、
前記セキュアなコンポーネントに記憶したトークン情報を前記リソースサーバへ送信し、
前記リソースサーバは、
前記所定のサーバが発行したトークン情報の正当性を検証し、前記トークン情報の検証結果に基づいて前記クライアントのリソースへのアクセスを制御し、
前記セキュアなコンポーネントは、
前記クライアントを認証するクライアント認証機能を備え、
前記クライアントの認証結果に応じて、前記クライアントとの間での前記トークン情報の授受の可否を決定する、
認可に基づくリソースアクセス制御システム。
【請求項3】
前記セキュアなコンポーネントは、
トラステッド実行環境又はセキュアエレメントである、
請求項1又は請求項2に記載の認可に基づくリソースアクセス制御システム。
【請求項4】
前記セキュアなコンポーネントは、
前記クライアントが取得したトークン情報の正当性を検証するトークン検証機能を備え、
検証が成功した場合、前記トークン情報を記憶する、
求項2に記載の認可に基づくリソースアクセス制御システム。
【請求項5】
前記セキュアなコンポーネントは、
内部に保有する情報及び記憶したトークン情報を用いて新たなトークン情報を生成するトークン生成機能を備え、
前記クライアントは、
前記新たなトークン情報を前記リソースサーバへ送信し、
前記リソースサーバは、
前記新たなトークン情報の検証結果に基づいて前記クライアントのリソースへのアクセスを制御する、
請求項1から請求項のいずれか一項に記載の認可に基づくリソースアクセス制御システム。
【請求項6】
前記セキュアなコンポーネントは、
内部に保有する鍵を用いて改ざん検知コードを生成する検知コード生成機能を備え、
前記クライアントは、
前記新たなトークン情報に前記改ざん検知コードを付加して前記リソースサーバへ送信し、
前記リソースサーバは、
前記改ざん検知コードの検証結果に基づいて前記クライアントのリソースへのアクセスを制御する、
請求項に記載の認可に基づくリソースアクセス制御システム。
【請求項7】
前記セキュアなコンポーネントは、
内部に保有する暗号化鍵を用いて前記新たなトークン情報を暗号化するトークン暗号化機能を備え、
前記クライアントは、
暗号化されたトークン情報を前記リソースサーバへ送信し、
前記リソースサーバは、
前記暗号化されたトークン情報を復号して得られた前記新たなトークン情報の検証結果に基づいて前記クライアントのリソースへのアクセスを制御する、
請求項に記載の認可に基づくリソースアクセス制御システム。
【請求項8】
前記セキュアなコンポーネントは、
前記クライアントを認証するクライアント認証機能を備え、
前記クライアントの認証結果に応じて、前記クライアントとの間での前記トークン情報の授受の可否を決定する、
請求項1に記載の認可に基づくリソースアクセス制御システム。
【請求項9】
前記セキュアなコンポーネントは、
外部のサーバとの間で秘匿通信路を開設する開設機能を備え、
前記セキュアなコンポーネントの内部機能、及び前記セキュアなコンポーネントが内部に保有する情報又は鍵の少なくとも一部が前記外部のサーバから更新可能である、
請求項1から請求項のいずれか一項に記載の認可に基づくリソースアクセス制御システム。
【請求項10】
クライアントが動作するデバイスに実装されるセキュアなコンポーネントであって、
認可サーバが、ユーザ認証結果に基づいてリソースに対するアクセスを認可した結果、所定のサーバが発行するトークン情報を前記クライアントから取得して記憶し、
前記認可サーバの認可結果に基づいてアクセスが制御されるリソースを有し、前記所定のサーバが発行したトークン情報の正当性を検証し、前記トークン情報の検証結果に基づいて前記クライアントのリソースへのアクセスを制御するリソースサーバへ記憶したトークン情報を送信するために、前記記憶したトークン情報を前記クライアントへ出力
前記クライアントから取得したトークン情報の正当性を検証するトークン検証機能を備え、
検証が成功した場合、前記トークン情報を記憶する、
セキュアなコンポーネント。
【請求項11】
前記セキュアなコンポーネントは、
トラステッド実行環境又はセキュアエレメントである、
請求項10に記載のセキュアなコンポーネント。
【請求項12】
内部に保有する情報及び記憶したトークン情報を用いて新たなトークン情報を生成するトークン生成機能を備え、
前記新たなトークン情報を前記リソースサーバへ送信するために、前記新たなトークン情報を前記クライアントへ出力する、
請求項10又は請求項11に記載のセキュアなコンポーネント。
【請求項13】
内部に保有する鍵を用いて改ざん検知コードを生成する検知コード生成機能を備え、
前記改ざん検知コードを付加した前記新たなトークン情報を前記リソースサーバへ送信するために、前記改ざん検知コードを付加した前記新たなトークン情報を前記クライアントへ出力する、
請求項12に記載のセキュアなコンポーネント。
【請求項14】
内部に保有する暗号化鍵を用いて前記新たなトークン情報を暗号化するトークン暗号化機能を備え、
暗号化されたトークン情報を前記リソースサーバへ送信するために、前記暗号化されたトークン情報を前記クライアントへ出力する、
請求項12に記載のセキュアなコンポーネント。
【請求項15】
前記クライアントを認証するクライアント認証機能を備え、
前記クライアントの認証結果に応じて、前記クライアントとの間での前記トークン情報の授受の可否を決定する、
請求項10から請求項14のいずれか一項に記載のセキュアなコンポーネント。
【請求項16】
外部のサーバとの間で秘匿通信路を開設する開設機能を備え、
前記セキュアなコンポーネントの内部機能、及び前記セキュアなコンポーネントが内部に保有する情報又は鍵の少なくとも一部が前記外部のサーバから更新可能である、
請求項10から請求項15のいずれか一項に記載のセキュアなコンポーネント。
【請求項17】
請求項10から請求項16のいずれか一項に記載のセキュアなコンポーネントを備え、クライアントが動作する、
デバイス。
【請求項18】
ユーザ認証結果に基づいてリソースに対するアクセスを認可する認可サーバと、
前記認可サーバの認可結果に基づいてアクセスが制御されるリソースを有するリソースサーバと、
クライアントが動作するデバイスと
を備えるシステムの認可に基づくリソースアクセス制御方法であって、
前記デバイスは、
前記認可サーバがリソースに対するアクセスを認可した結果、前記クライアントが取得する、所定のサーバが発行するトークン情報をセキュアなコンポーネントに記憶し、
前記セキュアなコンポーネントは、
前記クライアントが取得したトークン情報の正当性を検証し、
検証が成功した場合、前記トークン情報を記憶し、
前記クライアントは、
前記セキュアなコンポーネントに記憶したトークン情報を前記リソースサーバへ送信し、
前記リソースサーバは、
前記所定のサーバが発行したトークン情報の正当性を検証し、前記トークン情報の検証結果に基づいて前記クライアントのリソースへのアクセスを制御する、
認可に基づくリソースアクセス制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、認可に基づくリソースアクセス制御システム、セキュアなコンポーネント、デバイス及び認可に基づくリソースアクセス制御方法に関する。
【背景技術】
【0002】
多くのWebサービスは、IETF(Internet Engineering Task Force)において、OAuth2.0として定められた標準規格に従っている。このようなWebサービスでは、特定サービス事業者における認証の実施を基礎として、他のサービスへのログインやサービス間でのAPI連携の認可を行うことが可能であり、サービス連携が円滑に行えるようになっている。認証はある主体が特定の主体であることを識別することであり、認可は認証を行った主体に対してアクセスなどの権限を付与することである。
【0003】
IoTシステムにおいても、Webサービスと同様に、認証(例えば、IoTデバイスの認証)と認可(例えば、IoTデバイスに対するAPI連携)のタイミングを分けて行われることが多い。また、IoTシステムでは、デバイス上で動作するアプリケーションのように、認証主体と認可主体が全てパブリックネットワーク上にあるとは限らない状況が存在する。このため、IoTシステムは、Webサービスのように、連携サービスが全てパブリックネットワーク上に存在する場合に比べて、セキュリティ的な課題がある。
【0004】
そこで、デバイス上で動作するアプリケーションに関して、OAuth2.0に従って、クライアント(クライアント端末上で動作するアプリケーション)が、予め記憶したシークレット(認可コード)を用いて認可サーバ(トークンエンドポイント)に対してアクセストークンの発行を要求し、認可サーバが発行したアクセストークンを受信し、そのアクセストークンを利用してリソースを取得するシステムが開示されている(特許文献1参照)。
【先行技術文献】
【特許文献】
【0005】
【文献】特開2018-84979号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかし、特許文献1のようなシステムでは、クライアント端末上にアクセストークンを保持するため、アクセストークン漏洩に基づくセキュリティリスクが存在する。すなわち、Webサービスと異なり、IoTデバイス上のアプリケーションだけでOAuth2.0を利用する場合、IoTデバイス上にアクセストークンを保持せざるを得なくなるが、万一漏洩した場合、第三者に不正なリソースへのアクセスを許すおそれがある。また、IoTシステムは、長期間に亘って稼動するという特性上、一度ログインしたら継続してログインを続けることが多く、アクセストークンを無効にするための作業時間を設定することが難しい。また、頻繁なアクセストークンの更新は、IoTシステムが苦手とする通信トラフィックの増加や集中を招く。
【0007】
本発明は、斯かる事情に鑑みてなされたものであり、発行されたアクセストークンを長期間にわたって安全に保護することができる認可に基づくリソースアクセス制御システム、セキュアなコンポーネント、デバイス及び認可に基づくリソースアクセス制御方法を提供することを目的とする。
【課題を解決するための手段】
【0008】
本発明の実施の形態に係る認可に基づくリソースアクセス制御システムは、ユーザ認証結果に基づいてリソースに対するアクセスを認可する認可サーバと、前記認可サーバの認可結果に基づいてアクセスが制御されるリソースを有するリソースサーバと、クライアントが動作するデバイスとを備え、前記デバイスは、前記認可サーバがリソースに対するアクセスを認可した結果、前記クライアントが取得する、所定のサーバが発行するトークン情報を記憶するセキュアなコンポーネントを備え、前記クライアントは、前記セキュアなコンポーネントに記憶したトークン情報を前記リソースサーバへ送信し、前記リソースサーバは、前記トークン情報の検証結果に基づいて前記クライアントのリソースへのアクセスを制御する。
【0009】
本発明の実施の形態に係るセキュアなコンポーネントは、クライアントが動作するデバイスに実装されるセキュアなコンポーネントであって、認可サーバが、ユーザ認証結果に基づいてリソースに対するアクセスを認可した結果、所定のサーバが発行するトークン情報を前記クライアントから取得して記憶し、前記認可サーバの認可結果に基づいてアクセスが制御されるリソースを有するリソースサーバへ記憶したトークン情報を送信するために、前記記憶したトークン情報を前記クライアントへ出力する。
【0010】
本発明の実施の形態に係るデバイスは、前述のセキュアなコンポーネントを備え、クライアントが動作する。
【0011】
本発明の実施の形態に係る認可に基づくリソースアクセス制御方法は、ユーザ認証結果に基づいてリソースに対するアクセスを認可する認可サーバと、前記認可サーバの認可結果に基づいてアクセスが制御されるリソースを有するリソースサーバと、クライアントが動作するデバイスとを備えるシステムの認可に基づくリソースアクセス制御方法であって、前記デバイスは、前記認可サーバがリソースに対するアクセスを認可した結果、前記クライアントが取得する、所定のサーバが発行するトークン情報をセキュアなコンポーネントに記憶し、前記クライアントは、前記セキュアなコンポーネントに記憶したトークン情報を前記リソースサーバへ送信し、前記リソースサーバは、前記トークン情報の検証結果に基づいて前記クライアントのリソースへのアクセスを制御する。
【発明の効果】
【0012】
本発明によれば、デバイスの長期稼働において、有効なトークンを保持し続けるリスク(漏洩等のセキュリティリスク)を低減しつつ、再認証やトークン更新に必要となる通信トラフィックを削減することができる。
【図面の簡単な説明】
【0013】
図1】本実施の形態の認可に基づくリソースアクセス制御システムの構成の一例を示す模式図である。
図2】RFC8252に基づいてトークンの取得を行う場合のフローの一例を示す説明図である。
図3】認可に基づくリソースアクセス制御システムでのトークンの取得を行う場合のフローの一例を示す説明図である。
図4】トークンの内部検証の例を示す説明図である。
図5】改ざん検知コードの付与による保護の例を示す説明図である。
図6】トークンの暗号化による保護の例を示す説明図である。
図7】クライアントアプリに対する認証の例を示す説明図である。
図8】秘匿通信路による外部管理の例を示す説明図である。
【発明を実施するための形態】
【0014】
以下、本発明をその実施の形態を示す図面に基づいて説明する。図1は本実施の形態の認可に基づくリソースアクセス制御システムの構成の一例を示す模式図である。認可に基づくリソースアクセス制御システムは、デバイスとしてのIoTデバイス100、認可サーバ200、トークンサーバ400を備える。認可に基づくリソースアクセス制御システムは、さらに、リソースサーバ300、セキュアなコンポーネント管理サーバ500を備えてもよい。図1の例では、認可サーバ200とトークンサーバ400とを別々のサーバとして構成しているが、認可サーバ200とトークンサーバ400とを1つのサーバとして統合してもよい。
【0015】
IoTデバイス100は、実装対象となっているデバイスであり、例えば、RTOS(Real Time Operating System)やLinux(登録商標)等が動作する組み込みボードなどを含む。IoTデバイスは、例えば、OSを搭載して独立動作をすることができるデバイス(電子デバイスとも称する)であり、「モノのインターネット」(IoT)でいうところの「モノ」に該当するデバイスである。IoTデバイス100は、内部に不図示のSoC(System on Chip)、及びセキュアなコンポーネント50を有する。IoTデバイス100は、セキュアなコンポーネント50を内蔵しつつ、リソースを使用するクライアントアプリ(クライアントとも称する)20が動作するデバイスである。IoTデバイス100の詳細は後述する。
【0016】
デバイス管理者は、IoTデバイス100の管理者であり、IoTデバイス100に対するアクセス権を持つと同時に、リソースを提供する事業者に対してユーザ登録を行っており、リソースを提供する事業者に対する認証を行う主体(ユーザ)である(Resource Ownerに相当する)。デバイス管理者は、IoTデバイス100でクライアントアプリ20を実行することで、所望の機能を実現することを期待しているユーザである。認可サーバ200上でユーザ登録がされている。
【0017】
認可サーバ200は、個々のユーザを認証した上で、当該ユーザの許可に基づき、リソースサーバ300が有するリソース301へのアクセスを認可するためのサーバである。認可サーバ200は、認可コード201を保持する。認可コード201は、デバイス管理者による認証、認可が行われた場合に動的に生成されるコードであり、基本的には1回限りの使い捨てのコードとすることができる。ここで、「認証」とは、あるユーザが特定のユーザであることを識別することであり、本実施の形態では、ユーザ名とパスワードで認証を行うこととしているが、認証方法は、これに限定されるものではない。また、「認可」は、認証を行ったユーザに対してアクセスなどの権限を付与することである。
【0018】
リソースサーバ300は、リソース301を保持するサーバである。リソース301は、クライアントアプリ20がアクセスを必要とするリソースであり、例えば、ファイル等のデータ、あるいは、データ以外として、例えば、API(例えば、ディープラーニング用APIなど)実行などの機能も含む。
【0019】
トークンサーバ400は、認可サーバ200の認可に基づき、トークン(アクセストークンとも称する)を発行するためのサーバである。なお、本明細書では、トークン情報は、トークンを意味するが、トークンに関連する情報やトークンに付随する情報を含めてもよい。トークンサーバ400の詳細は後述する。
【0020】
セキュアなコンポーネント管理サーバ500は、セキュアなコンポーネント50の遠隔管理を目的とすることができる。セキュアなコンポーネント管理サーバ500は、IoTデバイス100内のセキュアなコンポーネント50と通信(例えば、秘匿通信路経由の通信)を行い、セキュアなコンポーネント50内部の機能や状態を更新することができる。
【0021】
図1に例示した各サーバをどの事業者が運営するかは個々のビジネスケースに応じて異なる。本実施の形態では、認可サーバ200とリソースサーバ300は、サービス事業者によって運営され、トークンサーバ400とセキュアなコンポーネント管理サーバ500は、セキュアなコンポーネント50の製造者によって運営されている形態として説明するが、これに限定されるものではない。
【0022】
IoTデバイス100は、セキュアなコンポーネント50の他に、クライアントアプリ20、クライアントアプリ証明書21、ブラウザ10を備える。
【0023】
クライアントアプリ20は、リソースを提供する事業者の認可を経て、リソースにアクセスすることで機能を実現するアプリケーションである。クライアントアプリ20は、リソースを提供する事業者とは別の主体(ベンダー等)によって開発されたアプリケーションである。
【0024】
クライアントアプリ証明書21は、クライアントアプリ20に対するコードサイニング証明書である。コードサイニング証明書は、クライアントアプリ20にデジタル署名(例えば、クライアントアプリ20のハッシュ値に対して秘密鍵署名が施されている)を行う電子署名用の証明書であり、クライアントアプリ20の配布元を認証し、なりすましや内容の改ざんなどがされていないことを保証できる。
【0025】
ブラウザ10は、Webブラウザであり、クライアントアプリ20とは別のアプリケーションとして与えられる。
【0026】
セキュアなコンポーネント50は、IoTデバイス100内に存在する、通常のプログラム実行環境とは論理的又は物理的に隔離された、ストレージ(メモリ)を持つセキュアな実行環境である。本実施の形態では、セキュアなコンポーネント50は、主にセキュアエレメント(SEとも称する)を想定する。セキュアエレメントは、耐タンパ性を有するセキュリティチップで構成することができる。これにより、後述のように、発行されたトークン情報を長期間に亘って安全に保護することができる。また、トークン情報を頻繁に更新する必要もなく、トークン情報を無効にするための作業時間を設定する必要もない。
【0027】
セキュアなコンポーネント50は、トラステッド実行環境(TEEとも称する)でもよい。トラステッド実行環境は、SoC(System on Chip)上で、例えば、CPU仮想化支援技術(例えば、TrustZone(登録商標))と称される技術を用いることによって、SoC内で区分された領域(いわゆるTEE:Trusted Execution Environment)を指し、通常実行環境(REE:Rich Execution Environmentとも称する)よりもセキュアな領域である。
【0028】
クライアントアプリ20とセキュアなコンポーネント50との間の通信路は、セキュアなコンポーネント50の種類によって異なる。クライアントアプリ20とセキュアエレメントとの間の通信は、例えば、ISO7816/SPI/I2C等のシリアル通信路を用いることができ、クライアントアプリ20とTEEとの間の通信は、例えば、APII/Fを介して行うことができる。
【0029】
セキュアなコンポーネント50は、SE(TEE)ID51、カウンタ52、トークン53、トークン生成機能60、トークン署名検証機能61、トークン暗号化機能62、トークンMAC付与機能63、クライアント検証機能64、秘匿通信路開設機能65、トークン署名検証鍵(公開鍵)71、トークン暗号化鍵72、トークンMAC鍵73、及びクライアント検証鍵(公開鍵)74を内蔵する。
【0030】
SE(TEE)ID51は、セキュアなコンポーネント50を一意に識別するためのIDである。SE(TEE)ID51は、SEID51、又はTEEID51の意味である。
【0031】
カウンタ52は、セキュアなコンポーネント50がトークンを生成する際、生成回数を計数する。
【0032】
トークン53は、リソースサーバ300のリソース301に対する認可を受けていることを証明する秘密情報である。トークン53は、クライアントアプリ20経由でトークンサーバ400から受け取ることができる。トークン53のデータ構造、内容については、以降説明する個々の実施例によって異なる。
【0033】
トークン生成機能60は、セキュアなコンポーネント50自身がトークンを生成する場合に実行する機能である。トークン生成機能60は、SE(TEE)ID51やカウンタ52の値をトークン(初期のトークンとも称する)に付加する等の処理を行って動的なトークンを生成する。
【0034】
トークン署名検証機能61は、クライアントアプリ20経由でトークンサーバ400から受け取ったトークンに署名が添付されている場合、署名の検証を行う機能である。
【0035】
トークン暗号化機能62は、暗号化トークンを授受する際に暗号化を行う機能である。
【0036】
トークンMAC付与機能63は、トークンにMAC(Message Authentication Code:メッセージ認証コード)を付与する際に実行する機能である。
【0037】
クライアント検証機能64は、クライアントアプリ20との間でのトークン授受時にクライアント認証を行う際に実行する機能である。
【0038】
秘匿通信路開設機能65は、セキュアなコンポーネント管理サーバ500との間で秘匿通信路を開設する機能であり、例えば、TLS(Transport Layer Security)等の通信機能を想定している。
【0039】
トークン署名検証鍵(公開鍵)71は、受信したトークンに署名が添付されている場合、当該署名を検証するための鍵である。
【0040】
トークン暗号化鍵72は、暗号化トークンを送出する際にトークンの暗号化に用いる鍵である。
【0041】
トークンMAC鍵73は、トークンに付与するMACを計算するための鍵である。
【0042】
クライアント検証鍵(公開鍵)74は、クライアント認証を行う際にクライアント証明書を検証する鍵である。
【0043】
トークンサーバ400は、SE(TEE)ID401、カウンタ402、トークン403、トークン正当性確認機能410、トークン署名生成機能411、トークン復号機能412、トークンMAC検証機能413、トークン署名生成鍵(秘密鍵)420、トークン復号鍵421、及びトークンMAC検証鍵422を有する。
【0044】
SE(TEE)ID401は、トークンサーバ400が出力するトークンの出力先のIoTデバイス100内のセキュアなコンポーネント50を一意に識別するためのIDである。SE(TEE)ID401は、SEID401又はTEEID401の意味である。
【0045】
カウンタ402は、セキュアなコンポーネント50がトークンを生成する際、生成回数を計数するカウンタである。カウンタ402は、当該セキュアなコンポーネント50からのトークンの受信回数と同期している。
【0046】
トークン403は、リソース301に対する認可を受けていることを証明する秘密情報である。トークン403は、クライアントアプリ20からの適切な認可コード提示に応じて動的に生成される。
【0047】
トークン正当性確認機能410は、セキュアなコンポーネント50が生成した動的なトークンの正当性を確認する機能である。トークン正当性確認機能410は、SE(TEE)ID401やカウンタ402の値を参照してトークンの正当性を確認する。
【0048】
トークン署名生成機能411は、トークンに対して署名を生成し、当該トークンに付与する機能である。
【0049】
トークン復号機能412は、暗号化トークンを受信した際、暗号化トークンを復号する機能である。
【0050】
トークンMAC検証機能413は、トークンに付与されたMACを検証する機能である。
【0051】
トークン署名生成鍵(秘密鍵)420は、トークンに対して署名を生成する鍵である。
【0052】
トークン復号鍵421は、暗号化トークンを受信した際、暗号化トークンの復号に用いる鍵である。
【0053】
トークンMAC検証鍵422は、トークンに付与されたMACを照合するために使用する鍵である。
【0054】
セキュアなコンポーネント50が動的にトークンを生成する場合、トークンサーバ400は、トークンを生成可能なSE(TEE)ID401のリストと、当該SE(TEE)ID401がトークンを生成した回数を記録している。セキュアなコンポーネント50の製造者であれば、各個体のID管理を元々手掛けていることもあり、比較的容易に管理できるので、トークンサーバ400の運営は、セキュアなコンポーネント50の製造者又は当該製造者と協業関係にある事業者が行うことが好ましい。なお、トークンサーバ400を運営する事業者は、サービス事業者であってもよい。
【0055】
次に、本実施の形態の認可に基づくリソースアクセス制御システムの処理について説明する。デバイス(例えば、IoTデバイス100を含む)上で動作するアプリケーションがOAuth2.0を利用する場合については、IETF(Internet Engineering Task Force)は、RFC8252に基づく認可フローを定義している。従って、RFC8252は、NativeアプリケーションがOAuth2.0を使う際のベストプラクティスであると言える。OAuth2.0では、インプリシットグランドによる認可の手順を定めているが、インプリシットグランドは、RFC8252では非推奨となっているからである。そこで、まず、IoTデバイス100のクライアントアプリ20をNativeアプリケーションとみなし、RFC8252に基づく認可フローについて説明する。
【0056】
図2はRFC8252に基づいてトークンの取得を行う場合のフローの一例を示す説明図であり、図3は認可に基づくリソースアクセス制御システムでのトークンの取得を行う場合のフローの一例を示す説明図である。図2及び図3のいずれも、RFC8252に基づく認可のフローに従っている。図2で示す符号P1~P16は、図3で示す符号P1~P16に対応する。以下、符号P1~P16で示す処理について説明する。
【0057】
P1(クライアントアプリの実行):デバイス管理者は、クライアントアプリ20を実行する。
【0058】
P2(ブラウザのオープン):クライアントアプリ20は、認可コードを返すためのリダイレクトURI(Uniform Resource Identifier)をリクエストに含め、認可サーバ200の認可ページをブラウザ10で開く。リダイレクトURIは、クライアントアプリ20が承認され、認可コードが付与されたとき、認可サーバ200が、ブラウザ10を別の場所へ遷移させる(リダイレクトする)場所である。ここでは、リダイレクトURIは、IoTデバイス100内でクライアントアプリ20自身を示すURIとする。
【0059】
P3(認可ページの転送):ブラウザ10は、認可コードを返すためのリダイレクトURIをリクエストに含め、認可サーバ200の認可ページを開く。
【0060】
P4(認証要求):認可サーバ200は、リクエストに含まれているリダイレクトURIが事前登録された正当な値であることを確認した上で、デバイス管理者に対するユーザ認証を要求する。ここでは、ユーザID及びパスワードの入力を要求する。なお、ユーザ認証は、ユーザID及びパスワードの入力に限定されるものではなく、例えば、生体情報を入力してもよい。
【0061】
P5(認証情報入力と認可):デバイス管理者は、認可サーバ200に対してユーザ認証情報を入力して認証を完了する。認証完了後、デバイス管理者は認可サーバ200に対し、クライアントアプリ20のリソースアクセスを許可する。認可サーバ200は、ユーザの認可を確認した上で、トークン生成用の認可コードを生成する。
【0062】
P6(認可コード付きリダイレクトの実行):認可サーバ200は、ブラウザ10に対し、リダイレクトURIを認可コードと共に返送し、リダイレクトを行う。
【0063】
P7(認可コードの取得):ブラウザ10は、リダイレクトURIを認可コードと共に開くと、当該URIへのリクエストは、クライアントアプリ20が受理することになる。ここで、クライアントアプリ20は、ブラウザ10から認可コードを取得する。
【0064】
P8(認可コードの提示):クライアントアプリ20は、トークンサーバ400にアクセスし、認可コードを提示する。
【0065】
P9(認可コードの確認):トークンサーバ400は、クライアントアプリ20から提示された認可コードが正当であるかを照合する。照合に失敗した場合、ここで処理を中断する。
【0066】
P10(トークンの取得):照合に成功した場合、トークンサーバ400は、新たにトークンを生成し、生成したトークンをクライアントアプリ20に返送する。
【0067】
P11(トークンの保存):クライアントアプリ20は、セキュアなコンポーネント50に対してトークンの書き込みを行う。
【0068】
P12(トークンの取得要求):クライアントアプリ20は、リソース301を使用する際に、セキュアなコンポーネント50に対してトークンの取得を要求する。
【0069】
P13(トークンの取得):セキュアなコンポーネント50は、クライアントアプリ20に対して、保存しているトークンを返送する。
【0070】
P14(リソースへのアクセス(Withトークン)):クライアントアプリ20は、セキュアなコンポーネント50から取得したトークンを添付して、リソースサーバ300に対してリソース301へのアクセスを要求する。
【0071】
P15(トークンの確認):リソースサーバ300は、トークンサーバ400に対して、クライアントアプリ20から受領したトークンの正当性を確認する。トークンが正当でない場合、クライアントアプリ20からのアクセスを拒否し、ここで処理を終了する。
【0072】
P16(リソースの提供):トークンが正当な場合、リソースサーバ300は、クライアントアプリ20にリソース301へのアクセスを提供する。
【0073】
上述のように、クライアントアプリ20は、トークンサーバ400から取得したトークンをセキュアなコンポーネント50に保存する。これにより、IoTデバイス100の長期稼働において、所定のサーバ(例えば、トークンサーバ400)から取得した有効なトークンを保持し続けるリスク(例えば、漏洩等のセキュリティリスク)を低減しつつ、再認証やトークンの更新に必要となる通信トラフシックを削減することができる。また、トークンが安全に保存されるので、漏洩等を回避するために、トークンを頻繁に更新する必要もなく、トークンを無効にするための作業時間を設定する必要もない。
【0074】
セキュアなコンポーネント50内において、トークンサーバ400と同じトークン検証ロジックを実装しておくことにより、トークンをセキュアなコンポーネント50に保存する際、当該トークンが正当な値であるか(不適切なトークンでないか)を確認し、トークンの改ざん等を防止することができる。以下では、検証アルゴリズムとして、公開鍵署名を用いる場合について説明する。なお、検証アルゴリズムは、公開鍵署名に限定されるものではなく、他の検証方法を用いてもよい。
【0075】
図4はトークンの内部検証の例を示す説明図である。以下、符号P21~P32で示す処理について説明する。
【0076】
P21(クライアントアプリの実行):デバイス管理者は、クライアントアプリ20を実行する。
【0077】
P22(ブラウザのオープン):クライアントアプリ20は、認可コードを返すためのリダイレクトURIをリクエストに含め、認可サーバ200の認可ページをブラウザ10で開く。ここでは、リダイレクトURIは、IoTデバイス100内でクライアントアプリ20自身を示すURIとする。
【0078】
P23(認可ページの転送):ブラウザ10は、認可コードを返すためのリダイレクトURIをリクエストに含め、認可サーバ200の認可ページを開く。
【0079】
P24(認証要求):認可サーバ200は、リクエストに含まれているリダイレクトURIが事前登録された正当な値であることを確認した上で、デバイス管理者に対するユーザ認証を要求する。
【0080】
P25(認証情報入力と認可):デバイス管理者は、認可サーバ200に対してユーザ認証情報を入力して認証を完了する。認証完了後、デバイス管理者は認可サーバ200に対し、クライアントアプリ20のリソースアクセスを許可する。認可サーバ200は、ユーザの認可を確認した上で、トークン生成用の認可コードを生成する。
【0081】
P26(認可コード付きリダイレクトの実行):認可サーバ200は、ブラウザ10に対し、リダイレクトURIを認可コードと共に返送し、リダイレクトを行う。
【0082】
P27(認可コードの取得):ブラウザ10は、リダイレクトURIを認可コードと共に開くと、当該URIへのリクエストは、クライアントアプリ20が受理することになる。ここで、クライアントアプリ20は、ブラウザ10から認可コードを取得する。
【0083】
P28(認可コードの提示):クライアントアプリ20は、トークンサーバ400にアクセスし、認可コードを提示する。
【0084】
P29(認可コードの確認):トークンサーバ400は、クライアントアプリ20から提示された認可コードが正当であるかを照合する。照合に失敗した場合、ここで処理を中断する。
【0085】
P30(トークンの取得):照合に成功した場合、トークンサーバ400は、新たにトークンを生成する。このとき、トークンサーバ400は、トークン署名生成機能411を呼び出し、自身が保持するトークン署名生成鍵(秘密鍵)420を用いてトークンに対して署名を行い、クライアントアプリ20に返送する。
【0086】
P31(トークンの検証):クライアントアプリ20は、セキュアなコンポーネント50に対してトークンの書き込みを指示する。このとき、セキュアなコンポーネント50は、トークンの書き込みに先立って、トークン署名検証機能61を呼び出し、トークン署名検証鍵(公開鍵)71を用いて、トークンに添付された署名を検証し、トークンの正当性検証を行う。検証に失敗した場合は、ここで処理を終了し、トークンの保存を行わない。
【0087】
P32(トークンの保存):検証に成功した場合、セキュアなコンポーネント50は、トークンを保存する。P32以降の処理は、図3に示す符号P11以降の処理と同様であるが、リソースサーバ300がクライアントアプリ20から受領したトークンの正当性を確認する際に、P31の処理を同様に、トークン署名検証鍵を用いてトークンを検証してもよい。
【0088】
上述のように、セキュアなコンポーネント50がトークンを記憶する際、トークンの正当性を確認することにより、不正なトークンの挿入によるトークンの置き換え攻撃などのトークンの改ざん等を防止することができる。
【0089】
上述の例では、セキュアなコンポーネント50に対してトークンを保存する構成であったが、セキュアなコンポーネント50が動的にトークンを生成してもよい。以下では、トークンの改ざん検知コードの付与による保護及び暗号技術による保護について説明する。まず、トークンの動的生成と改ざん検知コードの付与による保護について説明する。
【0090】
図5は改ざん検知コードの付与による保護の例を示す説明図である。以下、符号P41~P58で示す処理について説明する。
【0091】
P41(クライアントアプリの実行):デバイス管理者は、クライアントアプリ20を実行する。
【0092】
P42(ブラウザのオープン):クライアントアプリ20は、認可コードを返すためのリダイレクトURIをリクエストに含め、認可サーバ200の認可ページをブラウザ10で開く。ここでは、リダイレクトURIは、IoTデバイス100内でクライアントアプリ20自身を示すURIとする。
【0093】
P43(認可ページの転送):ブラウザ10は、認可コードを返すためのリダイレクトURIをリクエストに含め、認可サーバ200の認可ページを開く。
【0094】
P44(認証要求):認可サーバ200は、リクエストに含まれているリダイレクトURIが事前登録された正当な値であることを確認した上で、デバイス管理者に対するユーザ認証を要求する。ここでは、ユーザID及びパスワードの入力を要求する。
【0095】
P45(認証情報入力と認可):デバイス管理者は、認可サーバ200に対してユーザ認証情報を入力して認証を完了する。認証完了後、デバイス管理者は認可サーバ200に対し、クライアントアプリ20のリソースアクセスを許可する。認可サーバ200は、ユーザの認可を確認した上で、トークン生成用の認可コードを生成する。
【0096】
P46(認可コード付きリダイレクトの実行):認可サーバ200は、ブラウザ10に対し、リダイレクトURIを認可コードと共に返送し、リダイレクトを行う。
【0097】
P47(認可コードの取得):ブラウザ10は、リダイレクトURIを認可コードと共に開くと、当該URIへのリクエストは、クライアントアプリ20が受理することになる。ここで、クライアントアプリ20は、ブラウザ10から認可コードを取得する。
【0098】
P48(認可コードの提示):クライアントアプリ20は、トークンサーバ400にアクセスし、認可コードを提示する。
【0099】
P49(認可コードの確認):トークンサーバ400は、クライアントアプリ20から提示された認可コードが正当であるかを照合する。照合に失敗した場合、ここで処理を中断する。
【0100】
P50(トークンの取得):照合に成功した場合、トークンサーバ400は、新たに初期トークンを生成し、生成した初期トークンをクライアントアプリ20に返送する。
【0101】
P51(トークンの保存):クライアントアプリ20は、セキュアなコンポーネント50に対して初期トークンの書き込みを行う。
【0102】
P52(トークンの取得要求):クライアントアプリ20は、リソース301を使用する際に、セキュアなコンポーネント50に対してトークンの取得を要求する。
【0103】
P53(IDおよびカウンタ付きトークンの生成):セキュアなコンポーネント50は、トークン生成機能60を呼び出し、自身が保持する固有のID51と、トークン生成回数を記録するカウンタ52の値を初期トークンに付加し、IDおよびカウンタ付きトークンを生成する。セキュアなコンポーネント50は、トークンを生成後、カウンタ52の値に1を加算する。
【0104】
P54(トークンへのMAC付与):セキュアなコンポーネント50は、自身が保持するトークンMAC鍵73を用いて、IDおよびカウンタ付きトークンに対するMAC(メッセージ認証コード)を計算し、計算したMACをトークンに付与する。MAC計算は、トークンのデータ列に対して、既存のMAC計算アルゴリズム(例えば、HMAC-SHA256など)を用いることができる。
【0105】
P55(リソースへのアクセス(Withトークン)):クライアントアプリ20は、セキュアなコンポーネント50から取得したIDおよびカウンタ付きトークンをMACとともに添付して、リソースサーバ300に対してリソース301へのアクセスを要求する。
【0106】
P56(トークンのMAC検証):リソースサーバ300は、トークンサーバ400に対して、クライアントアプリ20から受領したIDおよびカウンタ付きトークンの検証を依頼する。トークンサーバ400は、トークンMAC検証機能413を呼び出し、自身が保持するトークンMAC検証鍵422を用いてトークンに付与されているMACを検証する。基本的には、セキュアなコンポーネント50で実行したMAC計算と同一の計算を行ってMACを導出し、トークンに付与されているMACと一致比較すればよい。両者が不一致の場合、不正なトークンとみなし、ここで処理を終了する。
【0107】
P57(トークンの正当性検証):トークンサーバ400は、トークンからIDを取得してトークン送信元のセキュアなコンポーネント50を特定すると共に、当該IDに対応して保持しているカウンタ402の値を読み出し、リソースサーバ300から取得したトークンに埋め込まれたカウンタ値と比較する。比較終了後、トークンサーバ400は、カウンタ402の値に1を加算する。IDが見つからなかった場合、またはカウンタ値が一致しなかった場合、不正なトークンとみなし、ここで処理を終了する。
【0108】
P58(リソースの提供):トークンが正当な場合、リソースサーバ300は、クライアントアプリ20にリソース301へのアクセスを提供する。
【0109】
上述の例のように、セキュアなコンポーネント50は、内部に保有する情報及び記憶した初期トークンを用いて、IDおよびカウンタ付きトークン(新たなトークン)を生成する。内部に保有する情報は、新たなトークンを生成するための秘匿情報であれば、例えば、固有のID、トークン生成回数を記録するカウンタ値や乱数要素など、どのような情報を用いてもよい。
【0110】
クライアントアプリ20は、新たなトークンをリソースサーバ300へ送信する。リソースサーバ300は、新たなトークンの検証結果に基づいてクライアントアプリ20のリソース301へのアクセスを制御する。すなわち、検証が成功すれば、クライアントアプリ20はリソース301にアクセスすることができる。このように、クライアント側でトークンを動的に生成し、リソースサーバ300で当該トークンを検証することにより、トークンの再利用(トークンを用いたリプレイアタック)やなりすまし等を防止できる。
【0111】
また、上述のように、改ざん検知コード(上述の例では、MAC)をトークンに付与することで、秘密鍵を知らない攻撃者は改ざん検知コードを計算することができず、トークン検証側で正当に取り扱われるトークンとMACを生成することができなくなる。これにより、トークンの偽造や改ざんを防止できる。
【0112】
上述の例では、鍵付きハッシュによりMACを付与して改ざん検知を行っているが、改ざん検知のアルゴリズムは、上述の例に限定されるものではなく、適宜所要のアルゴリズムを用いることができる。
【0113】
次に、トークンの動的生成と暗号化による保護について説明する。
【0114】
図6はトークンの暗号化による保護の例を示す説明図である。以下、符号P61~P78で示す処理について説明する。
【0115】
P61(クライアントアプリの実行):デバイス管理者は、クライアントアプリ20を実行する。
【0116】
P62(ブラウザのオープン):クライアントアプリ20は、認可コードを返すためのリダイレクトURIをリクエストに含め、認可サーバ200の認可ページをブラウザ10で開く。ここでは、リダイレクトURIは、IoTデバイス100内でクライアントアプリ20自身を示すURIとする。
【0117】
P63(認可ページの転送):ブラウザ10は、認可コードを返すためのリダイレクトURIをリクエストに含め、認可サーバ200の認可ページを開く。
【0118】
P64(認証要求):認可サーバ200は、リクエストに含まれているリダイレクトURIが事前登録された正当な値であることを確認した上で、デバイス管理者に対するユーザ認証を要求する。ここでは、ユーザID及びパスワードの入力を要求する。
【0119】
P65(認証情報入力と認可):デバイス管理者は、認可サーバ200に対してユーザ認証情報を入力して認証を完了する。認証完了後、デバイス管理者は認可サーバ200に対し、クライアントアプリ20のリソースアクセスを許可する。認可サーバ200は、ユーザの認可を確認した上で、トークン生成用の認可コードを生成する。
【0120】
P66(認可コード付きリダイレクトの実行):認可サーバ200は、ブラウザ10に対し、リダイレクトURIを認可コードと共に返送し、リダイレクトを行う。
【0121】
P67(認可コードの取得):ブラウザ10は、リダイレクトURIを認可コードと共に開くと、当該URIへのリクエストは、クライアントアプリ20が受理することになる。ここで、クライアントアプリ20は、ブラウザ10から認可コードを取得する。
【0122】
P68(認可コードの提示):クライアントアプリ20は、トークンサーバ400にアクセスし、認可コードを提示する。
【0123】
P69(認可コードの確認):トークンサーバ400は、クライアントアプリ20から提示された認可コードが正当であるかを照合する。照合に失敗した場合、ここで処理を中断する。
【0124】
P70(トークンの取得):照合に成功した場合、トークンサーバ400は、新たに初期トークンを生成し、生成した初期トークンをクライアントアプリ20に返送する。
【0125】
P71(トークンの保存):クライアントアプリ20は、セキュアなコンポーネント50に対して初期トークンの書き込みを行う。
【0126】
P72(トークンの取得要求):クライアントアプリ20は、リソース301を使用する際に、セキュアなコンポーネント50に対してトークンの取得を要求する。
【0127】
P73(IDおよびカウンタ付きトークンの生成):セキュアなコンポーネント50は、トークン生成機能60を呼び出し、自身が保持する固有のID51と、トークン生成回数を記録するカウンタ52の値を初期トークンに付加し、IDおよびカウンタ付きトークンを生成する。セキュアなコンポーネント50は、トークンを生成後、カウンタ52の値に1を加算する。
【0128】
P74(トークンの暗号化):セキュアなコンポーネント50は、トークン暗号化機能62を呼び出し、自身が保持するトークン暗号化鍵72を用いて、IDおよびカウンタ付きトークンを暗号化する。使用する暗号化アルゴリズムは、非対称鍵暗号(RSA等)、対象鍵暗号(共通鍵暗号)(AES:Advanced Encryption Standard等)のいずれでもよい。本実施例では、共通鍵を用いてAESで暗号化している。
【0129】
P75(リソースへのアクセス(Withトークン)):クライアントアプリ20は、セキュアなコンポーネント50から取得した暗号化トークンを添付して、リソースサーバ300に対してリソース301へのアクセスを要求する。
【0130】
P76(トークンの復号):リソースサーバ300は、トークンサーバ400に対して、クライアントアプリ20から受領した暗号化トークンの検証を依頼する。トークンサーバ400は、トークン復号機能412を呼び出し、自身が保持するトークン復号鍵421を用いて暗号化トークンを復号し、IDおよびカウンタ付きトークンを得る。
【0131】
P77(トークンの正当性検証):トークンサーバ400は、トークンからIDを取得してトークン送信元のセキュアなコンポーネント50を特定すると共に、当該IDに対応して保持しているカウンタ402の値を読み出し、リソースサーバ300から取得したトークンに埋め込まれたカウンタ値と比較する。比較終了後、トークンサーバ400は、カウンタ402の値に1を加算する。IDが見つからなかった場合、またはカウンタ値が一致しなかった場合、不正なトークンとみなし、ここで処理を終了する。
【0132】
P78(リソースの提供):トークンが正当な場合、リソースサーバ300は、クライアントアプリ20にリソース301へのアクセスを提供する。
【0133】
上述の例においても、図5の場合と同様に、セキュアなコンポーネント50は、内部に保有する情報及び記憶した初期トークンを用いて、IDおよびカウンタ付きトークン(新たなトークン)を生成する。すなわち、トークンサーバ400が発行した固定値のトークンを使い続けるのではなく、セキュアなコンポーネント50とトークンサーバ400が、鍵とセキュアなコンポーネント50の状態に関する情報(例えば、ID、カウンタ)を個別に保持した上で、鍵を用いて両者の上方の整合性を検証する形でトークンの正当性検証を行う。
【0134】
OAuth2.0をはじめとする従来技術においては、トークンが搾取された場合の不正アクセスを防止することが技術的に困難であり、代替策としてトークンの有効期間の削減、トークンの無効化、署名検証等を行っていたが、いずれもクライアント側に対する通信負荷の増大をもたらしていた。
【0135】
一方で本実施例の場合、上述のように、セキュアなコンポーネント50側のIDをトークンに添付することで、トークン送信元の正当性を検証できる。また、カウンタをトークンに添付することで、トークンの再利用を防止できる。さらに、トークンは暗号化されているので、偽造や解読が困難である。これにより、IoTデバイス100は、トークンのリフレッシュ等の追加通信を行うことなく、リソースサーバ300に対する通信のみを行うことができ、セキュリティを維持しつつ最適な通信を行うことができる。
【0136】
なお、本実施例で採用しているトークンの暗号化、復号の方法や正当性検証方法(ID
とカウンタ)は一例であり、トークン生成や正当性検証に係るアルゴリズム、検証ポリシーは適宜の方法を用いることができる。
【0137】
セキュアなコンポーネント50にトークンを記憶することで、通常のファイルストレージのように直接搾取される危険性は低下したものの、クライアントアプリ20のふりをした不正なアプリによって、セキュアなコンポーネント50からトークンを読み出して搾取されるリスクはなお存在し得る。この場合、クライアントアプリ20とセキュアなコンポーネント50との間で共通鍵を保持し、クライアントアプリ20とセキュアなコンポーネント50との間でセキュアチャネルを開設することでトークンの搾取を防止できる。さらに、以下では、クライアント証明書の提示を行うことでクライアントアプリ20を検証する方法について説明する。
【0138】
図7はクライアントアプリに対する認証の例を示す説明図である。以下、符号P81~P98で示す処理について説明する。
【0139】
P81(クライアントアプリの実行):デバイス管理者は、クライアントアプリ20を実行する。
【0140】
P82(ブラウザのオープン):クライアントアプリ20は、認可コードを返すためのリダイレクトURIをリクエストに含め、認可サーバ200の認可ページをブラウザ10で開く。ここでは、リダイレクトURIは、IoTデバイス100内でクライアントアプリ20自身を示すURIとする。
【0141】
P83(認可ページの転送):ブラウザ10は、認可コードを返すためのリダイレクトURIをリクエストに含め、認可サーバ200の認可ページを開く。
【0142】
P84(認証要求):認可サーバ200は、リクエストに含まれているリダイレクトURIが事前登録された正当な値であることを確認した上で、デバイス管理者に対するユーザ認証を要求する。
【0143】
P85(認証情報入力と認可):デバイス管理者は、認可サーバ200に対してユーザ認証情報を入力して認証を完了する。認証完了後、デバイス管理者は認可サーバ200に対し、クライアントアプリ20のリソースアクセスを許可する。認可サーバ200は、ユーザの認可を確認した上で、トークン生成用の認可コードを生成する。
【0144】
P86(認可コード付きリダイレクトの実行):認可サーバ200は、ブラウザ10に対し、リダイレクトURIを認可コードと共に返送し、リダイレクトを行う。
【0145】
P87(認可コードの取得):ブラウザ10は、リダイレクトURIを認可コードと共に開くと、当該URIへのリクエストは、クライアントアプリ20が受理することになる。ここで、クライアントアプリ20は、ブラウザ10から認可コードを取得する。
【0146】
P88(認可コードの提示):クライアントアプリ20は、トークンサーバ400にアクセスし、認可コードを提示する。
【0147】
P89(認可コードの確認):トークンサーバ400は、クライアントアプリ20から提示された認可コードが正当であるかを照合する。照合に失敗した場合、ここで処理を中断する。
【0148】
P90(トークンの取得):照合に成功した場合、トークンサーバ400は、新たにトークンを生成し、生成したトークンをクライアントアプリ20に返送する。
【0149】
P91(クライアントアプリ証明書の送信):クライアントアプリ20は、トークンの書き込みに先立って、セキュアなコンポーネント50に対してクライアントアプリ証明書21を送信する。
【0150】
P92(クライアントアプリ証明書の検証):セキュアなコンポーネント50は、クライアント検証機能64を呼び出し、自身が保持しているクライアント検証鍵(公開鍵)74を用いて、送信されたクライアントアプリ証明書21を検証する。具体的には、セキュアなコンポーネント50は、クライアントアプリ20のハッシュ値を計算し、計算したハッシュ値と、クライアントアプリ証明書21に含まれる暗号化ハッシュ値を復号して得た値とを比較し、一致していることを確認する。不一致の場合、クライアントアプリ20は不正なクライアントアプリであるとみなし、ここで処理を終了する。
【0151】
P93(トークンの保存):クライアントアプリ証明書の検証が成功した場合、クライアントアプリ20は、セキュアなコンポーネント50に対してトークンの書き込みを行う。セキュアなコンポーネント50は、クライアントアプリ証明書の検証が完了していることを確認した上で、トークンを内部に保存する。
【0152】
P94(トークンの取得要求):クライアントアプリ20は、リソース301を使用する際に、セキュアなコンポーネント50に対してトークンの取得を要求する。このとき、P92で行った、クライアントアプリ証明書の検証を再度実施する。
【0153】
P95(トークンの取得):クライアントアプリ証明書の検証が成功した場合、セキュアなコンポーネント50は、クライアントアプリ20に対して、保存しているトークンを返送する。
【0154】
P96(リソースへのアクセス(Withトークン)):クライアントアプリ20は、セキュアなコンポーネント50から取得したトークンを添付して、リソースサーバ300に対してリソース301へのアクセスを要求する。
【0155】
P97(トークンの確認):リソースサーバ300は、トークンサーバ400に対して、クライアントアプリ20から受領したトークンの正当性を確認する。トークンが正当でない場合、クライアントアプリ20からのアクセスを拒否し、ここで処理を終了する。
【0156】
P98(リソースの提供):トークンが正当な場合、リソースサーバ300は、クライアントアプリ20にリソース301へのアクセスを提供する。
【0157】
上述の実施例によれば、不正なアプリによって、トークンの不正な設定や搾取を防止できる。
【0158】
クライアント検証鍵(公開鍵)74は、セキュアなコンポーネント50に予め保持されており、一般のユーザがクライアント検証鍵(公開鍵)74を変更することはできない。また、リプレイアタックを防止するため、クライアントアプリ20のハッシュ値計算は、セキュアなコンポーネント50自身が直接計算することが望ましい。なお、クライアントアプリ証明書21によるクライアント認証は一例であって、これに限定されるものではなく、他のどのような方法でクライアント認証を行ってもよい。
【0159】
以上のとおり、IoTデバイス100側にセキュアなコンポーネント50を組み込むことにより、IoTデバイス100上で適切にセキュリティを維持したまま、認可メカニズムを利用することができる。一方で、IoTデバイス100のセキュリティを維持するためには、内部に保持する鍵や各機能などの内部状態を適切に保守管理し、必要に応じて当該内部状態を更新できることが望ましい。以下では、IoTデバイス100の内部状態の更新について説明する。
【0160】
図8は秘匿通信路による外部管理の例を示す説明図である。以下、符号P101~P106で示す処理について説明する。
【0161】
P101(IoTデバイスの電源投入):デバイス管理者がIoTデバイス100を使用するためIoTデバイス100に電源を投入する。
【0162】
P102(セキュアなコンポーネントへの状態確認指示):IoTデバイス100は、電源が投入されると、セキュアなコンポーネント50に対して内部状態の更新が必要かどうか、状態確認指示を行う。
【0163】
P103(秘匿通信路開設機能の呼び出し):セキュアなコンポーネント50は、状態確認指示を受けて、自身の内部の秘匿通信路開設機能65を呼び出す。
【0164】
P104(秘匿通信路の開設):秘匿通信路開設機能65は、セキュアなコンポーネント管理サーバ500に対して秘匿通信路を開設する。ここでは、TLS(Transport Layer Security)通信を想定しているが、他の通信プロトコルを用いたセキュアチャネルを使用してもよい。セキュアなコンポーネント50が自らネットワーク通信機能を持たない場合は、IoTデバイス100の通信機能を使用してもよい。ただし、秘匿通信路のエンドポイントは、あくまでもセキュアなコンポーネント50とセキュアなコンポーネント管理サーバ500の間である。
【0165】
P105(更新対象コンテンツの準備):セキュアなコンポーネント管理サーバ500は、秘匿通信路開設を受けて、更新すべきコンテンツを準備する。本実施例では、例えば、トークン暗号化鍵の危殆化に備え、新たな鍵の更新を行うものとする。なお、更新対象は、トークン暗号化鍵に限定されない。セキュアなコンポーネント管理サーバ500は、更新対象となる鍵の生成、準備を行う。
【0166】
P106(コンテンツの送信):セキュアなコンポーネント管理サーバ500は、秘匿通信路経由でセキュアなコンポーネント50に対してコンテンツを送信する。ここでは、セキュアなコンポーネント管理サーバ500は、トークン暗号化鍵72をセキュアなコンポーネント50に送信している。本実施例のように、対向するコンテンツが他のサーバ上に存在する場合は、当該サーバに対して別途秘匿通信路を開設して更新を行うことができる。ここでは、トークンサーバ400に対して秘匿通信路を開設し、トークン復号鍵421の更新を同時に行う。
【0167】
これにより、セキュアなコンポーネント50のトークンに関する機能又は状態を遠隔で更新することができ、IoTデバイス100のセキュリティを維持することができる。
【0168】
上述の実施例では、鍵の更新について例示したが、更新対象は鍵に限定されるものではなく、セキュアなコンポーネント50が保持している任意のコンテンツを更新することができる。例えば、セキュアなコンポーネント50がJava Card(商標)プラットフォームをサポートしたセキュアエレメントの場合、各種処理(暗号化処理、生成処理、署名検証処理等)がJava Cardアプレットとして実装されていれば、アプレットの更新により各種機能を更新することができる。また、トークンに関する機能の有効化・無効化を切り替えるフラグを用意するような実施例の場合、当該フラグを秘匿通信路経由で更新することで、遠隔から認可機能の有効・無効を切り替えることが可能となる。また、本実施例では、更新を確実に行うため、電源投入を遠隔管理のトリガとしているが、これに限定されるものではなく、クライアントアプリの起動、IoTデバイス上の他のアプリの動作など、他のアクションをトリガとしてもよい。
【0169】
本実施の形態の認可に基づくリソースアクセス制御システムは、ユーザ認証結果に基づいてリソースに対するアクセスを認可する認可サーバと、前記認可サーバの認可結果に基づいてアクセスが制御されるリソースを有するリソースサーバと、クライアントが動作するデバイスとを備え、前記デバイスは、前記認可サーバがリソースに対するアクセスを認可した結果、前記クライアントが取得する、所定のサーバが発行するトークン情報を記憶するセキュアなコンポーネントを備え、前記クライアントは、前記セキュアなコンポーネントに記憶したトークン情報を前記リソースサーバへ送信し、前記リソースサーバは、前記トークン情報の検証結果に基づいて前記クライアントのリソースへのアクセスを制御する。
【0170】
本実施の形態のセキュアなコンポーネントは、クライアントが動作するデバイスに実装されるセキュアなコンポーネントであって、認可サーバが、ユーザ認証結果に基づいてリソースに対するアクセスを認可した結果、所定のサーバが発行するトークン情報を前記クライアントから取得して記憶し、前記認可サーバの認可結果に基づいてアクセスが制御されるリソースを有するリソースサーバへ記憶したトークン情報を送信するために、前記記憶したトークン情報を前記クライアントへ出力する。
【0171】
本実施の形態のデバイスは、前述のセキュアなコンポーネントを備え、クライアントが動作する。
【0172】
本実施の形態の認可に基づくリソースアクセス制御方法は、ユーザ認証結果に基づいてリソースに対するアクセスを認可する認可サーバと、前記認可サーバの認可結果に基づいてアクセスが制御されるリソースを有するリソースサーバと、クライアントが動作するデバイスとを備えるシステムの認可に基づくリソースアクセス制御方法であって、前記デバイスは、前記認可サーバがリソースに対するアクセスを認可した結果、前記クライアントが取得する、所定のサーバが発行するトークン情報をセキュアなコンポーネントに記憶し、前記クライアントは、前記セキュアなコンポーネントに記憶したトークン情報を前記リソースサーバへ送信し、前記リソースサーバは、前記トークン情報の検証結果に基づいて前記クライアントのリソースへのアクセスを制御する。
【0173】
認可サーバは、ユーザ認証結果に基づいてリソースに対するアクセスを認可する。リソースサーバは、認可サーバの認可結果に基づいてアクセスが制御されるリソースを有する。デバイス(IoTデバイスとも称する)は、クライアント(クライアントアプリケーション)が動作する。デバイスは、認可サーバがリソースに対するアクセスを認可した結果、クライアントが取得する、所定のサーバが発行するトークン情報を記憶するセキュアなコンポーネントを備える。
【0174】
すなわち、クライアントは、所定のサーバが発行するトークン情報を取得し、取得したトークン情報をデバイス内のセキュアなコンポーネントに記憶する。これにより、デバイスの長期稼働において、所定のサーバ(例えば、トークンサーバ)から取得した有効なトークン情報を保持し続けるリスク(例えば、漏洩等のセキュリティリスク)を低減しつつ、再認証やトークン情報の更新に必要となる通信トラフシックを削減することができる。
【0175】
クライアントは、セキュアなコンポーネントに記憶したトークン情報をリソースサーバへ送信する。リソースサーバは、トークン情報の検証結果に基づいてクライアントのリソースへのアクセスを制御する。すなわち、検証が成功すれば、クライアントはリソースにアクセスすることができる。これにより、発行されたトークン情報を長期間に亘って安全に保護することができる、認可に基づくリソースアクセス制御システムを実現できる。
【0176】
本実施の形態の認可に基づくリソースアクセス制御システムにおいて、前記セキュアなコンポーネントは、トラステッド実行環境又はセキュアエレメントである。
【0177】
本実施の形態のセキュアなコンポーネントは、トラステッド実行環境又はセキュアエレメントである。
【0178】
セキュアなコンポーネントは、トラステッド実行環境又はセキュアエレメントである。トラステッド実行環境は、SoC(System on Chip)上で、例えば、CPU仮想化支援技術(例えば、TrustZone(登録商標))と称される技術を用いることによって、SoC内で区分された領域(いわゆるTEE:Trusted Execution Environment)を指し、通常実行環境(REE:Rich Execution Environmentとも称する)よりもセキュアな領域である。セキュアエレメントは、耐タンパ性を有するセキュリティチップで構成することができる。これにより、発行されたトークン情報を長期間に亘って安全に保護することができる。また、トークン情報を頻繁に更新する必要もなく、トークン情報を無効にするための作業時間を設定する必要もない。
【0179】
本実施の形態の認可に基づくリソースアクセス制御システムにおいて、前記セキュアなコンポーネントは、前記クライアントが取得したトークン情報の正当性を検証するトークン検証機能を備え、検証が成功した場合、前記トークン情報を記憶する。
【0180】
本実施の形態のセキュアなコンポーネントは、前記クライアントから取得したトークン情報の正当性を検証するトークン検証機能を備え、検証が成功した場合、前記トークン情報を記憶する。
【0181】
セキュアなコンポーネントは、クライアントが取得したトークン情報の正当性を検証し、検証が成功した場合、トークン情報を記憶する。すなわち、セキュアなコンポーネントがトークン情報を記憶する際、トークン情報の正当性を確認する。これにより、不正なトークン情報の挿入によるトークン情報の置き換え攻撃などのトークン情報の改ざん等を防止することができる。
【0182】
本実施の形態の認可に基づくリソースアクセス制御システムにおいて、前記セキュアなコンポーネントは、内部に保有する情報及び記憶したトークン情報を用いて新たなトークン情報を生成するトークン生成機能を備え、前記クライアントは、前記新たなトークン情報を前記リソースサーバへ送信し、前記リソースサーバは、前記新たなトークン情報の検証結果に基づいて前記クライアントのリソースへのアクセスを制御する。
【0183】
本実施の形態のセキュアなコンポーネントは、内部に保有する情報及び記憶したトークン情報を用いて新たなトークン情報を生成するトークン生成機能を備え、前記新たなトークン情報を前記リソースサーバへ送信するために、前記新たなトークン情報を前記クライアントへ出力する。
【0184】
セキュアなコンポーネントは、内部に保有する情報及び記憶したトークン情報を用いて新たなトークン情報を生成する。内部に保有する情報は、新たなトークン情報を生成するための秘匿情報であれば、例えば、固有のID、トークン情報生成回数を記録するカウンタ値や乱数要素など、どのような情報を用いてもよい。
【0185】
クライアントは、新たなトークン情報をリソースサーバへ送信する。リソースサーバは、新たなトークン情報の検証結果に基づいてクライアントのリソースへのアクセスを制御する。すなわち、検証が成功すれば、クライアントはリソースにアクセスすることができる。このように、クライアント側でトークン情報を動的に生成し、リソースサーバで当該トークン情報を検証することにより、トークン情報の再利用(トークン情報を用いたリプレイアタック)やなりすまし等を防止できる。
【0186】
本実施の形態の認可に基づくリソースアクセス制御システムにおいて、前記セキュアなコンポーネントは、内部に保有する鍵を用いて改ざん検知コードを生成する検知コード生成機能を備え、前記クライアントは、前記新たなトークン情報に前記改ざん検知コードを付加して前記リソースサーバへ送信し、前記リソースサーバは、前記改ざん検知コードの検証結果に基づいて前記クライアントのリソースへのアクセスを制御する。
【0187】
本実施の形態のセキュアなコンポーネントは、内部に保有する鍵を用いて改ざん検知コードを生成する検知コード生成機能を備え、前記改ざん検知コードを付加した前記新たなトークン情報を前記リソースサーバへ送信するために、前記改ざん検知コードを付加した前記新たなトークン情報を前記クライアントへ出力する。
【0188】
セキュアなコンポーネントは、内部に保有する鍵を用いて改ざん検知コードを生成する。クライアントは、新たなトークン情報に改ざん検知コードを付加してリソースサーバへ送信する。リソースサーバは、改ざん検知コードの検証結果に基づいてクライアントのリソースへのアクセスを制御する。すなわち、検証が成功すれば、クライアントはリソースにアクセスすることができる。
【0189】
改ざん検知コードの付与を行うことにより、セキュアなコンポーネントの内部に保有する鍵(秘密鍵)を知らない攻撃者は改ざん検知コードを計算することができず、トークン情報の検証側で改ざん検知コードの検証を行うことができない。これにより、トークン情報の偽造や改ざんを防止できる。
【0190】
本実施の形態の認可に基づくリソースアクセス制御システムにおいて、前記セキュアなコンポーネントは、内部に保有する暗号化鍵を用いて前記新たなトークン情報を暗号化するトークン暗号化機能を備え、前記クライアントは、暗号化されたトークン情報を前記リソースサーバへ送信し、前記リソースサーバは、前記暗号化されたトークン情報を復号して得られた前記新たなトークン情報の検証結果に基づいて前記クライアントのリソースへのアクセスを制御する。
【0191】
本実施の形態のセキュアなコンポーネントは、内部に保有する暗号化鍵を用いて前記新たなトークン情報を暗号化するトークン暗号化機能を備え、暗号化されたトークン情報を前記リソースサーバへ送信するために、前記暗号化されたトークン情報を前記クライアントへ出力する。
【0192】
セキュアなコンポーネントは、内部に保有する暗号化鍵を用いて新たなトークン情報を暗号化する。クライアントは、暗号化されたトークン情報をリソースサーバへ送信する。リソースサーバは、暗号化されたトークン情報を復号して得られた新たなトークン情報の検証結果に基づいてクライアントのリソースへのアクセスを制御する。すなわち、セキュアなコンポーネントとリソースサーバとが対向する鍵を保持し、動的に生成されたトークン情報に暗号化技術を適用して保護する。
【0193】
トークン情報は、暗号化されているため、偽造や解読が困難であり、トークン情報の構造を攻撃者に把握されるリスクを無くし、トークン情報の改ざんによるリソースの不正使用を防止できる。
【0194】
本実施の形態の認可に基づくリソースアクセス制御システムにおいて、前記セキュアなコンポーネントは、前記クライアントを認証するクライアント認証機能を備え、前記クライアントの認証結果に応じて、前記クライアントとの間での前記トークン情報の授受の可否を決定する。
【0195】
本実施の形態のセキュアなコンポーネントは、前記クライアントを認証するクライアント認証機能を備え、前記クライアントの認証結果に応じて、前記クライアントとの間での前記トークン情報の授受の可否を決定する。
【0196】
セキュアなコンポーネントは、クライアントを認証し、クライアントの認証結果に応じて、クライアントとの間でのトークン情報の授受の可否を決定する。すなわち、クライアントが、トークン情報をセキュアなコンポーネントに記憶する場合、あるいは、クライアントが、セキュアなコンポーネントからトークン情報を取り出す場合、セキュアなコンポーネントは、要求元のクライアント(アプリ)を認証する。これにより、不正なアプリによって、トークン情報の不正な設定や搾取を防止できる。
【0197】
本実施の形態の認可に基づくリソースアクセス制御システムにおいて、前記セキュアなコンポーネントは、外部のサーバとの間で秘匿通信路を開設する開設機能を備え、前記セキュアなコンポーネントの内部機能、及び前記セキュアなコンポーネントが内部に保有する情報又は鍵の少なくとも一部が前記外部のサーバから更新可能である。
【0198】
本実施の形態のセキュアなコンポーネントは、外部のサーバとの間で秘匿通信路を開設する開設機能を備え、前記セキュアなコンポーネントの内部機能、及び前記セキュアなコンポーネントが内部に保有する情報又は鍵の少なくとも一部が前記外部のサーバから更新可能である。
【0199】
セキュアなコンポーネントは、外部のサーバとの間で秘匿通信路を開設する開設機能を備える。セキュアなコンポーネントの内部機能、及びセキュアなコンポーネントが内部に保有する情報又は鍵の少なくとも一部が外部のサーバから更新可能である。すなわち、セキュアなコンポーネントが開設した秘匿通信路経由でセキュアなコンポーネントの内部状態を変更することができる。これにより、セキュアなコンポーネントのトークン情報に関する機能又は状態を遠隔で更新することができ、デバイスのセキュリティを維持することができる。
【符号の説明】
【0200】
10 ブラウザ
20 クライアントアプリ
21 クライアントアプリ証明書
50 セキュアなコンポーネント
51 SE(TEE)ID
52 カウンタ
53 トークン
60 トークン生成機能
61 トークン署名検証機能
62 トークン暗号化機能
63 トークンMAC付与機能
64 クライアント検証機能
65 秘匿通信路開設機能
71 トークン署名検証鍵(公開鍵)
72 トークン暗号化鍵
73 トークンMAC鍵
74 クライアント検証鍵(公開鍵)
100 IoTデバイス
200 認可サーバ
201 認可コード
300 リソースサーバ
301 リソース
400 トークンサーバ
401 SE(TEE)ID
402 カウンタ
403 トークン
410 トークン正当性確認機能
411 トークン署名生成機能
412 トークン復号機能
413 トークンMAC検証機能
420 トークン署名生成鍵(秘密鍵)
421 トークン復号鍵
422 トークンMAC検証鍵
500 セキュアなコンポーネント管理サーバ
図1
図2
図3
図4
図5
図6
図7
図8