JP2018512010A - セキュアなソフトウェアの認証と検証 - Google Patents

セキュアなソフトウェアの認証と検証 Download PDF

Info

Publication number
JP2018512010A
JP2018512010A JP2017551242A JP2017551242A JP2018512010A JP 2018512010 A JP2018512010 A JP 2018512010A JP 2017551242 A JP2017551242 A JP 2017551242A JP 2017551242 A JP2017551242 A JP 2017551242A JP 2018512010 A JP2018512010 A JP 2018512010A
Authority
JP
Japan
Prior art keywords
software
verification tag
verification
authentication
tag
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
JP2017551242A
Other languages
English (en)
Other versions
JP6371919B2 (ja
Inventor
アレクサンダー・ガントマン
デイヴィッド・メリル・ジェイコブソン
Original Assignee
クアルコム,インコーポレイテッド
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 クアルコム,インコーポレイテッド filed Critical クアルコム,インコーポレイテッド
Publication of JP2018512010A publication Critical patent/JP2018512010A/ja
Application granted granted Critical
Publication of JP6371919B2 publication Critical patent/JP6371919B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/30Authentication, i.e. establishing the identity or authorisation of security principals
    • G06F21/44Program or device authentication
    • 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/51Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems at application loading time, e.g. accepting, rejecting, starting or inhibiting executable software based on integrity or source reliability
    • 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/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/572Secure firmware programming, e.g. of basic input output system [BIOS]
    • 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/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/575Secure boot
    • 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/64Protecting data integrity, e.g. using checksums, certificates or signatures
    • 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
    • H04L9/3242Cryptographic 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 involving keyed hash functions, e.g. message authentication codes [MACs], CBC-MAC or HMAC
    • 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
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Bioethics (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Power Engineering (AREA)
  • Storage Device Security (AREA)
  • Stored Programmes (AREA)

Abstract

ソフトウェアがデバイスによる実行のために初めてロードされるときに、非セキュアストレージに記憶されたソフトウェアが認証される。ソフトウェアを認証することは、ソフトウェアに対する暗号操作とソフトウェアのデジタル署名とを含み得る。ソフトウェアの認証が成功した場合、ソフトウェアの検証タグが生成され得、検証タグは、ソフトウェアおよび少なくともデバイス固有の秘密データに基づく。検証タグは、デバイス内に記憶され得る。その後の各時間に、ソフトウェアは実行するためにロードされ、ソフトウェアの認証を回避しながら、ロードされるソフトウェアが検証タグを生成するために使用されたものと同じであることを確認するために、検証タグを使用することによって検証され得る(認証されない)。

Description

関連出願の相互参照
本出願は、その内容全体が参照により本明細書に組み込まれる、2015年4月15日に米国特許商標庁に提出された非仮出願第14/687,783号に対する優先権および利益を主張するものである。
本明細書に開示される様々な特徴は、一般に、セキュアストレージがないデバイスにおけるソフトウェアのハッキングを緩和するためのソフトウェアの認証に関し、より詳細には、ソフトウェアが初めて実行されるときにソフトウェア認証が実行され、その後、より効率的なソフトウェア検証が実行される方法に関する。
モバイル電話、モバイルデバイス、ポケットベル、ワイヤレスモデム、携帯情報端末、タブレット、個人情報管理ソフトウェア(PIM)、パーソナルメディアプレーヤ、パームトップコンピュータ、ラップトップコンピュータなどのデバイス、またはプロセッサを備えた他の任意のデバイスはますます普及し、普遍的になりつつある。そのようなデバイスにおいて生成、入力、記憶、および/または受信されたデータは、不正アクセスから保護されるべきである。デバイス内のデータへの不正アクセスのそのような危険の1つは、そのような不正アクセスを可能にするために修正された(たとえば、ハッキングされた)可能性があるデバイス上で動作するソフトウェアを含む。したがって、デバイス上で動作するソフトウェアは、修正されていないことを確認するために認証されるべきである。デバイス上のソフトウェアの認証は、修正されたソフトウェアがそれらのデバイス上で実行されることを防止する役割を果たす。すなわち、ソフトウェアは、それが侵害されて(たとえば、修正されて)いないことを検証するために、実行前にロードされるときに認証され得る。ソフトウェア認証は、デバイスがソフトウェアを安全に記憶するためのセキュアな、または信頼できる内部ストレージを持たない場合に特に重要である。ソフトウェア開発者は、デバイスに配布される前にソフトウェアにデジタル署名するために暗号を使用することがある。ソフトウェアに署名するために対称鍵が使用される場合、各デバイスは、ソフトウェアを認証するためにそのような対称鍵を受け取る。しかしながら、そのような対称鍵を取得するために単一のデバイスが侵害された場合、他のすべてのデバイスがさらされるため、すべてのデバイスのソフトウェアに同じ対称鍵を使用することは危険である。各デバイスのソフトウェアに署名するためにデバイスごとの対称鍵が使用され得るが、この手法は多数の対称鍵の管理を必要とする場合があり、したがって実装するのが煩雑である。あるいは、秘密鍵でソフトウェアに署名し、ソフトウェアを認証するために対応する公開鍵をデバイスに配布することによって、秘密/公開鍵暗号が使用され得る。しかしながら、認証のために公開鍵を使用することは、低電力であるか、または処理能力/リソースが最小限である多くのデバイスにとって、処理集中的で困難である。したがって、秘密/公開鍵手法は現実的な解決策ではない。
したがって、様々な処理能力を有するデバイス上で動作するソフトウェアを効果的に認証することを可能にする解決策が必要とされている。
第1の態様は、デバイス内のローディング中にソフトウェアを検証するための方法を提供する。デバイス内またはデバイスの外部の非セキュアストレージに記憶されたソフトウェアが取得される。一例では、ソフトウェアは、デバイスのブート時にロードされるオペレーティングシステムの一部であり得る。ソフトウェアが実行のためにロードされるとき、ソフトウェアの認証を回避しながら、ロードされるソフトウェアが事前生成された検証タグを生成するために使用されたものと同じであることを確認するために、事前生成された検証タグを使用することによってソフトウェアの検証を試みることができる。事前生成された検証タグは、ソフトウェアの以前の認証から取得され得る。そのような検証が成功すると、ソフトウェアが実行される。
あるいは、検証が失敗した場合、または事前生成された検証タグが利用可能ではない場合、ソフトウェアは、デバイスによって実行するためにロードされたときに認証される。ソフトウェアを検証することは、ソフトウェアを認証することよりも、かかる時間が少ない、および/またはリソースの消費が少ない場合がある点に留意されたい。ソフトウェアの認証が成功すると、ソフトウェアおよびデバイス固有の秘密データに基づいて、ソフトウェアの新しい検証タグが生成される。秘密データは、デバイスにのみ知られていてもよく、および/またはデバイスの外部ではアクセス不可能であってもよい。たとえば、秘密データは、デバイス内の物理的クローン不能関数に基づいて取得され得る。次いで、新しい検証タグが記憶され得る。いくつかの例では、事前生成された検証タグおよび/または新しい検証タグは、デバイス内またはデバイスの外部の非セキュアストレージまたは異なる非セキュアストレージに記憶され得る。
一例では、ソフトウェアが認証され得、認証が成功すると、事前生成された(たとえば、初期、第1の、事前の、など)検証タグが生成され得る。事前生成された検証タグは、ソフトウェアの後続の検証において使用するために記憶され得る。
一例では、ソフトウェアを認証することは、ソフトウェア上の暗号操作およびソフトウェアの暗号署名を含み得る。たとえば、ソフトウェアを認証することは、ソフトウェア上の署名を使用してソフトウェアを認証するために公開鍵を使用することを含み得る。
別の例では、新しい検証タグを生成することは、ソフトウェアを介してメッセージ認証コード(MAC)を生成することと、デバイス固有の秘密データを使用することとを含み得る。
いくつかの実装形態では、新しい検証タグは、ソフトウェアの新しいバージョンが取得されるたびに変化するデバイスデータに基づいてさらに生成され得る。デバイス内のソフトウェアの新しい検証タグを生成するときに、デバイスデータを繰り返すことはできない。
ソフトウェアの認証が失敗すると、ソフトウェアの実行が中止される。一実装形態では、ソフトウェアの検証が成功した場合、またはソフトウェアの認証が成功した場合にのみ、ソフトウェアが実行される。
ソフトウェアの新しいバージョンが取得され得る。ソフトウェアの新しいバージョンは、デバイスによって実行するためにロードされたときに認証され得る。ソフトウェアの新しいバージョンの認証が成功した場合、別の検証タグ(たとえば、第2の検証タグ)が、ソフトウェアの新しいバージョンのために生成され得、別の検証タグは、ソフトウェアの新しいバージョン、および少なくともデバイス固有の秘密データまたは別のデバイス固有のデータに基づき得る。別の検証タグはまた、後に使用するために記憶され得る。その後、実行するためにロードされるとき、ソフトウェアの新しいバージョンの再認証を回避しながら、ロードされるソフトウェアの新しいバージョンが別の検証タグを生成するために使用されたものと同じであることを確認するために、別の検証タグを使用することによってソフトウェアの新しいバージョンが検証され得る。
別の特徴によれば、検証タグは、検証タグを無効にする働きをし得る取消し可能な証明書によってさらに結合され得る。たとえば、取消し可能な証明書は、検証を実行する際にデバイスによってチェックされ得る。デバイスは証明書取消しデータベースに照会することができ、証明書が取り消された場合、検証は失敗する。したがって、たとえソフトウェアが修正されていない場合でも、対応する証明書が取り消された場合、検証は失敗する。
別の態様は、実行前にハイブリッドソフトウェア認証および検証を実行するように構成されたデバイスを提供する。本デバイスは、ストレージデバイスと処理回路とを備え得る。ストレージデバイスは、認証命令および/または検証タグ生成命令、ならびに検証タグ比較命令を記憶するように働くことができる。処理回路は、デバイス内またはデバイスの外部の非セキュアストレージに記憶されたソフトウェアを取得(たとえば、バスを介する、または通信インターフェースからの検索、読出しなど)するように構成され得る。
実行するためにロードされるとき、検証タグ比較モジュール/回路は、ソフトウェアの認証を回避しながら、ロードされるソフトウェアが検証タグを生成するために使用されたものと同じであることを確認するために、事前生成された検証タグ(たとえば、ソフトウェア検証タグの中に記憶された)を使用することによってソフトウェアの検証を試みるように働くことができる。検証が失敗した場合、または事前生成された検証タグが利用可能ではない場合、ソフトウェア認証モジュール/回路は、デバイスによって、実行するためにロードされるときにソフトウェアを認証するように働くことができる。ソフトウェアの認証が成功した場合、検証タグ生成モジュール/回路は、ソフトウェアおよびデバイス固有の秘密データに基づいて、ソフトウェアの新しい検証タグを生成するように働くことができる。次いで、新しい検証タグがソフトウェア検証タグの中に記憶され得る。このプロセスは、ソフトウェアの検証がソフトウェアの認証よりもかかる時間が少なく、および/またはリソースの消費が少ないので、効率の改善を達成する。したがって、たとえ認証が最初により多くの時間またはリソースを消費しても、認証の代わりに検証を使用するため、ソフトウェアの後続のローディングはより迅速で効率的である。
本デバイスはまた、処理回路に結合された複数のワンタイムブローヒューズ(one-time blow fuse)を含むことができ、新しい検証タグおよび/または事前生成された検証タグは、ワンタイムブローヒューズからの状態に基づいてさらに生成され、複数のワンタイムブローヒューズは、ソフトウェアの更新されたバージョンが取得されるたびに変化する。
限られた処理リソースを有するホストデバイス上のソフトウェアを認証するための例示的な方法を示す図である。 ソフトウェア認証を実行するように適合された例示的なホストデバイスを示すブロック図である。 ハイブリッドソフトウェア認証および検証を実行するための第1の例示的な方法を示す図である。 ハイブリッドソフトウェア認証および検証を実行するための第2の例示的な方法を示す図である。 ハイブリッドソフトウェア認証および検証を実行するための第2の例示的な方法を示す図である。 デバイス内のローディング中にソフトウェアを検証するための第3の例示的な方法を示す図である。 デバイス内のローディング中にソフトウェアを検証するための第4の例示的な方法を示す図である。
以下の説明では、説明される実装形態の完全な理解を提供するために特定の詳細が与えられる。ただし、実装形態はこれらの具体的な詳細なしに実施され得ることを当業者は理解されよう。たとえば、実装形態を不要な詳細で不明瞭にしないように回路をブロック図で示すことがある。他の場合には、これらの実装形態を不明瞭にしないように、よく知られている回路、構造および技法を詳細に示すことがある。
「例示的」という用語は、本明細書では、「例、事例、または例示として役立つ」を意味するために使用される。本明細書において「例示的」と記載された任意の実装形態または実施形態は、必ずしも他の実施形態または実装形態よりも好ましいまたは有利であると解釈されるべきではない。同様に、「実施形態」という用語は、すべての実施形態が、論じる特徴、利点または動作モードを含むことを必要としない。
概要
1つの機能は、ホストデバイス上でハイブリッド認証および検証プロセスを使用することによって、ソフトウェアのセキュアなローディングおよび実行を提供する。ソフトウェアは、非セキュアストレージに記憶され得る。最初に、ソフトウェアが実行するために初めてロードされるとき、それは暗号で認証され得る。次いで、ソフトウェアおよびデバイス固有の秘密データを使用して、検証タグが生成され得る。その後、ソフトウェアが実行するためにロードされるとき、ロードされているソフトウェアを検証するために検証タグが使用される。そのような検証が失敗した場合、ソフトウェアのローディングおよび/または実行が中止され得る。
一例では、デバイス内またはデバイスの外部の非セキュアストレージに記憶されたソフトウェアが取得(たとえば、検索、読出しなど)され得る。実行するためにロードされるとき(処理回路によって)、ソフトウェアの認証を回避しながら、ロードされるソフトウェアが事前生成された検証タグを生成するために使用されたものと同じであることを確認するために、事前生成された検証タグを使用することによってソフトウェアの検証を試みることができる。たとえば、処理回路は、ソフトウェアを検証するために利用可能な任意のおよび/またはすべての検証タグの使用を試みることができる。あるいは、処理回路は、ソフトウェアの検証を試みる前に、任意の検証タグが利用可能であるかどうかをチェックすることができる。検証が失敗した場合、または事前生成された検証タグが利用可能ではない場合、ソフトウェアは、デバイスによって、実行するためにロードされたときに認証され得る。ソフトウェアの認証が成功した場合、ソフトウェアおよびデバイス固有の秘密データに基づいて、ソフトウェアの新しい検証タグが生成され得る。新しい検証タグは、後続の検証のために記憶され得る。ソフトウェアの検証が成功した場合、またはソフトウェアの認証が成功した場合にのみ、ソフトウェアが実行される。ソフトウェアの検証は、ソフトウェアの認証よりもかかる時間が少なく、および/またはリソースの消費が少ない。
例示的なソフトウェア認証および検証
図1は、ホストデバイス、たとえば限られた処理リソースを有するホストデバイス上のソフトウェアを認証するための例示的な方法を示している。ソフトウェアディストリビュータ104は、公開鍵/秘密鍵のペア106を生成することができる。ソフトウェア(たとえば、ソフトウェアアプリケーション、オペレーティングシステム、ドライバソフトウェア、実行可能コード/命令など)の配布に先立って、またはそれと同時に、ソフトウェアディストリビュータ104は、ソフトウェアに秘密鍵で暗号署名することができる(108)。次いで、署名されたソフトウェアは、ホストデバイス102(たとえば、ソフトウェアが実行されるデバイス)に送信される(110)。さらに、公開鍵(秘密鍵に対応する)は、ソフトウェアディストリビュータ104によってホストデバイス102に配信され得る(112)。
署名されたソフトウェアを受信すると、ホストデバイス102は、ソフトウェアの初期認証109を実行することができる(114)。たとえば、ソフトウェアのそのような初期認証(114)は、受信した署名付きソフトウェアが有効であるか、改ざん/修正されていないことを確認するために、受信した公開鍵を使用することを含むことができる。
ホストデバイス102は、デバイス固有の秘密データ116を含むか、取得し得る。初期認証が正常に完了すると、ソフトウェアはホストデバイス102内に記憶され得る(118)。検証タグは、ソフトウェアおよびデバイス固有の秘密データに基づいて生成され得る(120)。そのようなデバイス固有の秘密データ116は、ホストデバイス102の外部では未知であり得る。検証タグは、ホストデバイス102内に(たとえば、非セキュアな場所内に)記憶され得る(122)。
ソフトウェアの後続の実行中(123)に、ホストデバイス102は、ソフトウェアを検索し得る(124)。しかしながら、実行の前に、検証タグも検索される(126)。次いで、ソフトウェアは、検証タグを使用して検証され得る(128)。すなわち、新しい検証タグを生成するために、デバイス固有の秘密データおよび検索されたソフトウェアが使用され得る。新しい検証タグと以前に記憶された検証タグとが同じであるかどうかを確認するために、それらが比較され得る(すなわち、新しい検証タグと以前に記憶された検証タグとが同じである場合に検証が成功する)。検証が成功である場合、ソフトウェアはホストデバイス102によって実行され得る(130)。あるいは、検証が失敗すると、ホストデバイス102は、記憶されたソフトウェアは修正されている(たとえば、ソフトウェアの不正な修正)と結論付けることができる。
一例では、ソフトウェアの初期認証は、公開鍵を使用する暗号認証を含むことができる。ソフトウェアが正常に認証された場合、デバイス固有の秘密データを使用してソフトウェアを介してメッセージ認証コード(MAC)が生成され得る。MACは、メッセージと、メッセージのジェネレータのみに知られている秘密鍵との、2つの入力に基づき得る。一例では、ホストデバイスは、ソフトウェアをメッセージとして使用し、デバイス固有の秘密データを秘密鍵として使用することができる。次いで、一例では、任意のサイズのデジタルデータを固定サイズのデジタルデータにマッピングするために使用され得るハッシュ関数を使用してMACが取得され得る。次いで、秘密データは、そのようなMACをデバイスに結合し、結果として検証タグを取得するために使用され得る。
かなりリソース集中型である公開鍵を使用して暗号認証を実行することとは対照的に、ソフトウェアを検証するために検証タグ(たとえば、MAC)を使用することは、リソースの消費が少ない。
いくつかの例では、デバイス固有の秘密データは、ホストデバイス102のための物理的クローン不能関数(PUF)、ホストデバイス102内に記憶された秘密鍵、および/あるいはソフトウェアの更新時に修正/変更され得る1つまたは複数のワンタイムブロー可能ヒューズ(one-time blowable fuse)に記憶されたデータを含み得る。一度切られると、これらのワンタイムブロー可能ヒューズは切れていない状態にされたり(unblown)リセットされたりすることはできない点に留意されたい。
ソフトウェア認証を有する例示的なホストデバイス
図2は、ソフトウェア認証を実行するように適合された例示的なホストデバイス200を示すブロック図である。ホストデバイス200は、バス232を介して通信インターフェース204および内部ストレージデバイス206に結合された処理回路202を含み得る。
処理回路202は、データを取得、処理、および/または送信し、データアクセスおよびストレージを制御し、コマンドを発行し、ならびに/あるいはアクセスデバイスの他の所望の動作を制御するように構成され得る。処理回路202は、少なくとも1つの実施形態において、適切な媒体によって提供される所望のプログラミングを実装するように構成された回路を備え得る。たとえば、処理回路202は、プロセッサ、コントローラ、複数のプロセッサ、および/またはたとえばソフトウェアおよび/またはファームウェア命令を含む実行可能命令を実行するように構成された他の構造、ならびに/あるいはハードウェア回路のうちの1つまたは複数として実装され得る。処理回路202の実施形態は、汎用プロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)もしくは他のプログラマブル論理構成要素、個別ゲート回路もしくはトランジスタ論理回路、個別ハードウェア構成要素、または、本明細書で説明する機能を実行するように設計されたそれらの任意の組合せを含み得る。汎用プロセッサはマイクロプロセッサであってもよいが、代替的に、プロセッサは任意の従来のプロセッサ、コントローラ、マイクロコントローラ、または状態機械であってもよい。プロセッサはまた、DSPとマイクロプロセッサとの組合せ、いくつかのマイクロプロセッサ、DSPコアと連携する1つもしくは複数のマイクロプロセッサ、または他の任意のそのような構成などの、コンピューティング構成要素の組合せとして実装され得る。処理回路202のこれらの例は説明のためのものであり、本開示の範囲内の他の適切な構成も考えられる。
通信インターフェース204は、1つまたは複数のネットワークを介してホストデバイス200への/そこからの間の通信を容易にするように構成され得る。通信インターフェース204は、少なくとも1つの送信回路210および/または少なくとも1つの受信回路212(たとえば、1つまたは複数の送信機/受信機チェーン)を含み得る。さらに、1つまたは複数のアンテナ(図示せず)を、通信インターフェース204に電気的に結合することができる。
ストレージデバイス206は、プロセッサ実行可能コードまたは命令(たとえば、ソフトウェア、ファームウェア)、電子データ、データベース、または他のデジタル情報などの、プログラミングおよび/またはデータを記憶するための1つまたは複数のデバイスを表すことができる。少なくとも1つの実施形態によれば、そのようなデバイスの1つまたは複数は、ストレージデバイス206を備え得る。ストレージデバイス206は、汎用プロセッサまたは専用プロセッサによってアクセス可能な任意の利用可能な媒体であり得る。限定ではなく一例として、ストレージデバイス206は、読出し専用メモリ(たとえば、ROM、EPROM、EEPROM)、ランダムアクセスメモリ(RAM)、磁気ディスク記憶媒体、光学記憶媒体、フラッシュメモリデバイス、および/または情報を記憶するための他の非一時的コンピュータ可読媒体を含み得る。ストレージデバイス206は、処理回路202がストレージデバイス206から情報を読み取り、ストレージデバイス206に情報を書き込むことができるように、処理回路202に結合され得る。代替的に、ストレージデバイス206またはその少なくとも一部は、処理回路202と一体であってもよく、処理回路202とは別体であってもよい。
一例では、ストレージデバイス206は、処理回路202によって実行されるソフトウェア208(たとえば、オペレーティングシステム、1つまたは複数のアプリケーション、および/あるいはホストデバイス200用のタスク/機能などを実装する命令またはコード)を含み得る。他の実装態様では、そのようなソフトウェア208は、外部ストレージデバイス234に記憶され得る。様々な実装形態において、ソフトウェア208は、セキュアストレージに記憶されてもよく、非セキュアストレージに記憶されてもよい。セキュアストレージは、不正なユーザ/アプリケーションによってアクセスされることから保護されたデバイスまたはストレージ領域であってもよい。非セキュアストレージ(たとえばデバイスまたはストレージ領域)はユーザまたは不正なアプリケーションにとってアクセス可能である場合がある。
一態様によれば、ホストデバイス200は、ソフトウェアが処理回路202による実行のためにロードされたときにソフトウェア208を認証するための初期認証命令214を含み得る。ソフトウェア208は、デバイス200内、またはデバイス200の外部の非セキュアストレージに記憶され得る。場合によっては、検証は常に最初に実行され、検証が失敗した場合、認証が実行される。その結果、ソフトウェアが初めて使用されたり、ロードされたりすると、検証が試みられる可能性があり、ソフトウェアの検証タグがまだ生成されていないため、検証は失敗する可能性がある。そのような検証が失敗すると、認証が実行され得る。
他の例では、初期認証命令214は、ソフトウェアがデバイス200または処理回路202上で実行するために最初にロードされたときに実行され得る。認証は、ソフトウェアの妥当性、完全性、および/または信頼性を確認するために、ソフトウェアの暗号署名を検証することを含み得る。
認証が成功すると、検証タグ生成命令216は、ソフトウェア208の関数である検証タグ226およびデバイス固有の秘密データ230を生成し記憶するように働くことができる。検証タグ226は、ストレージデバイス206または外部ストレージデバイス234(たとえば、ソフトウェア208が記憶されているのと同じ外部ストレージデバイス、または異なる外部ストレージデバイス)に記憶され得る。様々な実装形態では、検証タグ226は、セキュアストレージに記憶されてもよく非セキュアストレージに記憶されてもよい。セキュアストレージは、不正なユーザ/アプリケーションによってアクセスされることから保護されたデバイスまたはストレージ領域であってもよい。非セキュアストレージ(たとえばデバイスまたはストレージ領域)はユーザまたは不正なアプリケーションにとってアクセス可能である場合がある。
ホストデバイス200による同じソフトウェア208の後続の実行またはローディング時に、初期認証プロセスが回避される。代わりに、検証タグ比較命令218は、ソフトウェアのために以前に記憶された検証タグが、実行のために検索されたソフトウェアの検証タグの新しいバージョンと一致することを検証することができる。各ソフトウェア(たとえば、オペレーティングシステム、ドライバ、ユーザアプリケーションなど)は、それに関連付けられる異なる検証タグを有し得る点に留意されたい。タグの検証が成功すると、ソフトウェア208が実行され得る。
一例では、ホストデバイス200は、ソフトウェア208がロードされるとき、または実行前に、ソフトウェア208の初期認証を実行するように構成されてもよい。ソフトウェア認証モジュール/回路220は、ソフトウェア208が、ストレージデバイス206に記憶された初期認証命令214に従ってホストデバイス200によってロードまたは使用される場合に、ソフトウェア208の初期認証(および/または、ソフトウェアの後続の認証)を実行するように適合され得る。認証が成功した場合、検証タグ生成モジュール/回路222は、秘密データ230を使用して、または秘密データ230によって保護されたソフトウェア208を介して(たとえば、ソフトウェアコードを介して)、値(たとえば、メッセージ認証コードまたはMAC)を計算することによって、ソフトウェア208の検証タグを作成、生成、および/または取得するように構成され得る。次いで、ソフトウェア検証タグ226は、ストレージデバイス206に記憶され得る。
同じソフトウェア208の後続のローディングまたは実行において、ホストデバイス200は、ソフトウェアの認証を再度実行する必要はない。むしろ、検証タグ比較モジュール/回路224は、ソフトウェア208が変化したか、または修正されたかどうかを確認するために、以前に記憶された検証タグ226の検証を実行するだけでよい。
ソフトウェアを検証することは、ソフトウェアを認証することよりも、かかる時間が少ない、および/またはリソースの消費が少ない場合がある点に留意されたい。その結果、ソフトウェア認証を実行するのではなく、ソフトウェア検証を実行することによって効率が得られる。
一態様によれば、ソフトウェア208の更新時に、新しい検証タグが生成され得る。古い検証タグが再使用されないことを保証するために、検証タグの生成においてワンタイムブロー可能ヒューズ228が使用され得る。ソフトウェア208が更新または変化するたびに、ソフトウェアの再認証が実行され、新しい検証タグがワンタイムブロー可能ヒューズ228および/または秘密データ230の関数として生成される。ワンタイムブロー可能ヒューズ228は、ソフトウェアの更新が行われるたびに変更され得る(たとえば、1つまたは複数のヒューズが切られる)。これにより、ソフトウェアが更新されるたびに検証タグが変化することを保証する。
一態様では、検証タグを使用するソフトウェア検証が失敗した場合、ホストデバイス200は、公開鍵を使用してソフトウェアの認証を実行することに戻ることができる。
ソフトウェア認証および検証のための第1の例示的な方法
第1の例示的な実装形態によれば、セキュアな内部ストレージまたは信頼できる永続ストレージがないデバイスの場合、セキュアなブートプロセスは、ソフトウェアの検証を試みること、および、そのような検証が失敗した場合、ソフトウェアの認証を試みることを含み得る。図3は、ハイブリッドソフトウェア認証および検証を実行するための第1の一般的な方法を示している。ソフトウェアは、デバイスによって検索、受信、および/または取得される(302)。たとえば、ソフトウェアは、ソフトウェアの特定のブートイメージであり得る。
ソフトウェアがデバイス上の実行または使用のためにロードされるとき、検証タグに対してソフトウェアを検証しようとする試みが行われる。一例では、ソフトウェア303の検証タグがすでに存在するか(デバイス上に)どうかについて決定が行われ得る。ソフトウェアがデバイス上で以前に認証された場合、ソフトウェアの検証タグが見つけられ、取り出され得る(304)。次いで、検証タグを使用してソフトウェアが検証され得る(306)。一例では、ソフトウェアに対して新たに生成された検証タグが取得され、取り出された検証タグと比較され得る。ソフトウェアが正常に検証された場合(308)、ソフトウェアが実行される(310)。
ソフトウェアの検証タグが存在しない場合(303)、および/またはソフトウェア検証が失敗した場合(308)、ソフトウェアの認証が実行され得る(312)。一例では、ソフトウェア312を認証することは、たとえばソフトウェアディストリビュータによって提供される公開鍵を使用して、ソフトウェアのデジタル署名を認証することを含み得る。ソフトウェアが正常に認証された場合(314)、ソフトウェアの検証タグが生成される(316)。次いで、検証タグは、たとえば、デバイス内またはデバイスの外部のセキュアまたは非セキュアストレージに記憶され得る(318)。あるいは、ソフトウェア認証が失敗すると(314)、ソフトウェアの実行は中止される(315)。次いで、ソフトウェアが実行され得る(320)。
一例によれば、検証タグは、ソフトウェアおよび埋め込まれた秘密データまたは機能的同等物の関数(たとえば、物理的クローン不能関数)として生成され得る。この検証タグは、ソフトウェアの後続の実行(たとえば、最初のブート後のソフトウェアのブート時間検証)を最適化するために使用され得る。一例では、検証タグは、デバイス固有の秘密鍵(すなわち、デバイスのみに知られている)を使用して、またはそれによって結合された、ソフトウェアの認証されたイメージ上のメッセージ認証コード(MAC)を含み得る。
一例では、秘密データと組み合わせた、または秘密データによって結合された検証タグ(たとえば、MAC)の使用は、公開鍵を使用してソフトウェアのデジタル署名を認証することよりもかなり効率的である。検証タグは、秘密データによって署名または結合され、任意の場所(デバイス内のセキュアまたは非セキュアストレージを含む)に記憶され得る点に留意されたい。その後、ソフトウェアがロードされるか使用されると、ソフトウェアはロードされるソフトウェアの新しい検証タグ(たとえば、新しいMAC)を生成し、それを以前に記憶された検証タグ(たとえば、MAC)と比較する。記憶された検証タグが改ざんされている場合、秘密データを使用して検証することは、新しい検証タグと比較すると失敗させる。
ソフトウェア認証および検証のための第2の例示的な方法
図4(図4Aおよび図4Bを備える)は、ハイブリッドソフトウェア認証および検証を実行するための第2の一般的な方法を示している。ソフトウェアは、デバイスによって検索、受信、および/または取得される(402)。次いで、ソフトウェアの認証は、たとえば、デバイスにロードされるときに実行される(404)。一例では、ソフトウェアを認証することは、たとえばソフトウェアディストリビュータによって提供される公開鍵を使用してソフトウェアのデジタル署名を認証することを含み得る。ソフトウェアが正常に認証された場合(406)、ソフトウェアの検証タグが生成される(408)。次いで、検証タグは、たとえば、デバイス内またはデバイスの外部のセキュアまたは非セキュアストレージに記憶され得る(410)。あるいは、ソフトウェア認証が失敗すると(406)、ソフトウェアの実行は中止される(407)。
その後、ソフトウェアがデバイスにロードされるか、またはデバイスによって使用されるとき、ソフトウェアの検証タグが検索される(412)。一例によれば、検証タグを生成するために、ソフトウェアおよび埋め込まれた秘密データまたは機能的同等物(たとえば、物理的クローン不能関数)が使用され得る。この検証タグは、ソフトウェアの後続の実行(たとえば、最初のブート後のソフトウェアのブート時間検証)を最適化するために使用され得る。一例では、検証タグは、デバイス固有の秘密鍵(すなわち、デバイスのみに知られている)を使用して、またはそれによって結合された、ソフトウェアの認証されたイメージ上のメッセージ認証コード(MAC)を含み得る。
次いで、検証タグを使用して(たとえば、検索された検証タグと、ソフトウェアのために新たに生成された検証タグとを比較することによって)、ソフトウェアが検証される(414)。ソフトウェアが正常に検証されると(416)、ソフトウェアが実行され(420)、正常に検証されない場合、ソフトウェアの実行が中止される(418)。
より一般的な意味では、検証タグは、ソフトウェアの特性と秘密データとを組み合わせた任意の値であり得る。たとえば、検証タグは、秘密データによって保護されるソフトウェア上のハッシュであり得る。別の例では、ソフトウェアおよび秘密鍵のビットは、後続の検証を可能にするように結合される。
別の態様は、アンチロールバック機能を提供するので、攻撃者は、ホストデバイスのストレージ(フラッシュ)をソフトウェアの古いイメージで単に更新することはできない。そのような攻撃は、ソフトウェアディストリビュータによって提供される公開鍵を使用して認証を実行し、ソフトウェアが侵害された場合には失敗する。しかしながら、攻撃者は(インストールされているソフトウェアの以前のバージョンから)古い検証タグを保存することもできる。攻撃者がソフトウェアの修正されたバージョンで動作するために検証タグを取得できる場合、完全な認証プロセスがバイパスされ得る。しかしながら、アンチロールバック機能は、検証タグ生成関数において使用される入力の一部としてアンチロールバックヒューズ(または同等のもの)を使用し得る。ヒューズ状態(検証タグ生成への入力として働く)が変化したので、ソフトウェアが更新されるたびに、任意の以前の検証タグが複製されないように別のヒューズが切られ得る。これにより、ソフトウェアと検証タグの古いイメージが機能しなくなる。
ソフトウェア認証および検証のための第3の例示的な方法
図5は、デバイス内のローディング中にソフトウェアを検証するための別の例示的な方法を示している。ソフトウェアは、デバイス内またはデバイスの外部の、セキュアまたは非セキュアストレージに記憶され得る。ソフトウェアは、デバイスによって実行するためにロードされたときに認証され得、ソフトウェアは、デバイス内またはデバイスの外部の非セキュアストレージに記憶される(502)。ソフトウェアを認証することは、ソフトウェアに対する暗号操作とソフトウェアのデジタル署名とを含み得る。たとえば、ソフトウェアを認証することは、ソフトウェア上の署名を使用してソフトウェアを認証するために、ソフトウェアディストリビュータによって提供された公開鍵を使用することを含み得る。ソフトウェアディストリビュータは、ソフトウェアを作成または配布する当事者またはエンティティであり得る点に留意されたい。ソフトウェアは、デバイスのブート時にロードされるオペレーティングシステムの一部であり得る。
ソフトウェアの認証が成功した場合、ソフトウェアの検証タグが生成され得、検証タグは、ソフトウェアおよび少なくともデバイス固有の秘密データに基づく(504)。検証タグは、記憶され得る(506)。たとえば、検証タグは、デバイス内またはデバイスの外部の、セキュアまたは非セキュアストレージに記憶され得る。一例では、検証タグを生成することは、ソフトウェア上にメッセージ認証コード(MAC)を生成することと、デバイス固有の秘密データを使用することとを含み得る。別の例では、検証タグは、秘密データによって保護または結合されるソフトウェアのハッシュであり得る。様々な例では、秘密データは、デバイスにのみ知られていてもよく、および/またはデバイスの外部ではアクセス不可能であってもよい。秘密データはまた、デバイス内の物理的クローン不能関数(PUF)に基づいて取得され得る。
続いて、ロードされるソフトウェアが、ソフトウェアの認証を回避しながら、検証タグを生成するために使用されたものと同じであることを確認するために、検証タグを使用することによって実行のためにロードされるときにソフトウェアが検証され得(認証されず)、ソフトウェアを検証することは、ソフトウェアを認証することよりも、かかる時間が少なく、および/またはリソースの消費が少ない(508)。
検証タグは、ソフトウェアの新しいバージョンが取得されるたびに変化するデバイスデータに基づいてさらに生成され得る。デバイス内のソフトウェアの新しい検証タグを生成するときに、デバイスデータは決して繰り返さない。
ソフトウェアを認証することは、ソフトウェアを検証することよりも、デバイスのより多くの処理リソースまたは時間を消費する可能性がある。
一例では、検証タグを使用するソフトウェアの検証が失敗した場合(509)、ソフトウェアの再認証が試みられる(510)。ソフトウェアは、再認証(510)が成功した場合にのみ実行される(512)。あるいは、ソフトウェアの再認証が失敗した場合、ソフトウェアの実行は中止される(514)。
一態様によれば、ロードされるときにソフトウェアを認証するのではなく、デバイスは、利用可能であり得る既存の検証タグのうちの1つまたは複数を用いて検証の実行を試みることができる。そのような検証が失敗した場合、または検証タグが利用可能ではない場合、ソフトウェアを介して認証が実行される。
別の態様では、ソフトウェアの新しいバージョンが取得され得る。ソフトウェアの新しいバージョンは、ソフトウェアの新しいバージョンがデバイスによって実行するためにロードされたときに認証される。ソフトウェアの新しいバージョンの認証が成功した場合、新しい検証タグがソフトウェアのために生成され、新しい検証タグは、ソフトウェアの新しいバージョン、および少なくともデバイス固有の秘密データに基づく。新しい検証タグは、(たとえば、デバイス内またはデバイスの外部に)記憶される。その後、実行するためにソフトウェアの新しいバージョンがロードされるとき、ソフトウェアの新しいバージョンの再認証を回避しながら、ロードされるソフトウェアの新しいバージョンが新しい検証タグを生成するために使用されたものと同じであることを確認するために、新しい検証タグを使用することによってソフトウェアの新しいバージョンが検証され得る。ソフトウェアの新しいバージョンを検証することは、ソフトウェアの新しいバージョンを再認証することよりもかかる時間が少ない、および/またはリソースの消費が少ない場合がある。
ソフトウェア認証および検証のための第4の例示的な方法
図6は、デバイス内のローディング中にソフトウェアを検証するための別の例示的な方法を示している。デバイス内またはデバイスの外部の非セキュアストレージに記憶されたソフトウェアが取得される(602)。一例では、ソフトウェアは、デバイスのブート時にロードされるオペレーティングシステムの一部であり得る。ソフトウェアが実行のためにロードされるとき、ソフトウェアの認証を回避しながら、ロードされるソフトウェアが事前生成された検証タグを生成するために使用されたものと同じであることを確認するために、事前生成された検証タグを使用することによってソフトウェアの検証を試みることができる(604)。事前生成された検証タグは、ソフトウェアの以前の認証から取得され得る。そのような検証が成功すると(606)、ソフトウェアが実行される(608)。
あるいは、検証が失敗した場合、または事前生成された検証タグが利用可能ではない場合、ソフトウェアはデバイスによって実行するためにロードされたときに認証される(610)。ソフトウェアを検証することは、ソフトウェアを認証することよりも、かかる時間が少ない、および/またはリソースの消費が少ない場合がある点に留意されたい。ソフトウェアの認証が成功すると、ソフトウェアおよびデバイス固有の秘密データに基づいて、ソフトウェアの新しい検証タグが生成される(612)。秘密データは、デバイスにのみ知られていてもよく、および/またはデバイスの外部ではアクセス不可能であってもよい。たとえば、秘密データは、デバイス内の物理的クローン不能関数に基づいて取得され得る。次いで、新しい検証タグが記憶され得る(614)。いくつかの例では、事前生成された検証タグおよび/または新しい検証タグは、デバイス内またはデバイスの外部の非セキュアストレージまたは異なる非セキュアストレージに記憶され得る。
一例では、ソフトウェアが認証され得、認証が成功すると、事前生成された(たとえば、初期、第1の、事前の、など)検証タグが生成され得る。事前生成された検証タグは、ソフトウェアの後続の検証において使用するために記憶され得る。
一例では、ソフトウェアを認証することは、ソフトウェア上の暗号操作およびソフトウェアの暗号署名を含み得る。たとえば、ソフトウェアを認証することは、ソフトウェア上の署名を使用してソフトウェアを認証するために公開鍵を使用することを含み得る。
別の例では、新しい検証タグを生成することは、ソフトウェア上にメッセージ認証コード(MAC)を生成することと、デバイス固有の秘密データを使用することとを含み得る。
いくつかの実装形態では、新しい検証タグは、ソフトウェアの新しいバージョンが取得されるたびに変化するデバイスデータに基づいてさらに生成され得る。デバイス内のソフトウェアの新しい検証タグを生成するときに、デバイスデータを繰り返すことはできない。
ソフトウェアの認証が失敗すると、ソフトウェアの実行が中止される。一実装形態では、ソフトウェアの検証が成功した場合、またはソフトウェアの認証が成功した場合にのみ、ソフトウェアが実行される。
ソフトウェアの新しいバージョンが取得され得る。ソフトウェアの新しいバージョンは、デバイスによって実行するためにロードされたときに認証され得る。ソフトウェアの新しいバージョンの認証が成功した場合、別の検証タグが、ソフトウェアの新しいバージョンのために生成され、別の検証タグは、ソフトウェアの新しいバージョン、および少なくともデバイス固有の秘密データまたは別のデバイス固有のデータに基づき得る。別の検証タグはまた、後に使用するために記憶され得る。その後、実行するためにロードされるとき、ソフトウェアの新しいバージョンの再認証を回避しながら、ロードされるソフトウェアの新しいバージョンが別の検証タグを生成するために使用されたものと同じであることを確認するために、別の検証タグを使用することによってソフトウェアの新しいバージョンが検証され得る。
別の態様によれば、検証タグは、検証タグを無効にする働きをし得る取消し可能な証明書によってさらに結合され得る。たとえば、取消し可能な証明書は、検証を実行する際にデバイスによってチェックされ得る。デバイスは証明書取消しデータベースに照会することができ、証明書が取り消された場合、検証は失敗する。したがって、たとえソフトウェアが修正されていない場合でも、対応する証明書が取り消された場合、検証は失敗する。
別の例は、実行前にハイブリッドソフトウェア認証および検証を実行するように構成された、ホストデバイス200などのデバイスを提供する。デバイス200(図2)は、ストレージデバイス206と処理回路202とを備えるように提供され得る。ストレージデバイス206は、認証命令214および/または検証タグ生成命令216、ならびに検証タグ比較命令218を記憶するように働くことができる。処理回路202は、デバイス200内またはデバイス200の外部の非セキュアストレージに記憶されたソフトウェアを取得(たとえば、バス232を介する、または通信インターフェース204からの検索、読出しなど)するように構成され得る。
実行するためにロードされるとき、検証タグ比較モジュール/回路224は、ソフトウェアの認証を回避しながら、ロードされるソフトウェアが、検証タグを生成するために使用されたものと同じであることを確認するために、事前生成された検証タグ(たとえば、ソフトウェア検証タグ226の中に記憶された)を使用することによってソフトウェアの検証を試みるように働くことができる。検証が失敗した場合、または事前生成された検証タグが利用可能ではない場合、ソフトウェア認証モジュール/回路220は、デバイスによって実行するためにロードされるときにソフトウェアを認証するように働くことができる。ソフトウェアの認証が成功した場合、検証タグ生成モジュール/回路222は、ソフトウェアおよびデバイス固有の秘密データに基づいて、ソフトウェアの新しい検証タグを生成するように働くことができる。次いで、新しい検証タグがソフトウェア検証タグ226の中に記憶され得る。このプロセスは、ソフトウェアの検証がソフトウェアの認証よりもかかる時間が少なく、および/またはリソースの消費が少ないので、効率の改善を達成する。したがって、たとえ認証が最初により多くの時間またはリソースを消費しても、認証の代わりに検証を使用するため、ソフトウェアの後続のローディングはより迅速で効率的である。
本デバイスはまた、処理回路に結合された複数のワンタイムブローヒューズ228を含むことができ、新しい検証タグおよび/または事前生成された検証タグは、ワンタイムブローヒューズからの状態に基づいてさらに生成され、複数のワンタイムブローヒューズは、ソフトウェアの更新されたバージョンが取得されるたびに変化する。
図1、図2、図3、図4、図5、および/または図6に示す構成要素、ステップ、特徴、および/または機能のうちの1つまたは複数は、単一の構成要素、ステップ、特徴または機能に再構成し、および/または組み合わせられ、あるいは、いくつかの構成要素、ステップ、または機能において具体化され得る。本開示の範囲から逸脱することなしに、追加の要素、構成要素、ステップ、および/または機能も追加され得る。図2に示される装置、デバイス、および/または構成要素は、図1、図3、図4、図5、および/または図6に示される方法、特徴、またはステップのうちの1つまたは複数を実行するように構成され得る。本明細書で説明される新規のアルゴリズムもまた、ソフトウェアにおいて効率的に実装されてもよく、および/またはハードウェアに組み込まれてもよい。
また、フローチャート、流れ図、構造図、またはブロック図として示されるプロセスとして、少なくともいくつかの実装形態が説明されている点に留意されたい。フローチャートでは動作を逐次プロセスとして説明する場合があるが、動作の多くは並行して実施されてもあるいは一斉に実施されてもよい。加えて、動作の順序は並べ替えられてもよい。プロセスは、その動作が完了すると終了する。プロセスは、方法、関数、プロシージャ、サブルーチン、サブプログラムなどに対応し得る。プロセスが関数に対応する場合、その終了は呼出し関数またはメイン関数への関数の戻りに対応する。
さらに、実施形態は、ハードウェア、ソフトウェア、ファームウェア、ミドルウェア、マイクロコード、またはそれらの任意の組合せによって実装され得る。ソフトウェア、ファームウェア、ミドルウェア、またはマイクロコードに実装される場合、必要なタスクを実行するためのプログラムコードまたはコードセグメントは、記憶媒体または他のストレージなどの機械可読媒体に記憶され得る。プロセッサは、必要なタスクを実行することができる。コードセグメントは、プロシージャ、関数、サブプログラム、プログラム、ルーチン、サブルーチン、モジュール、ソフトウェアパッケージ、クラス、あるいは命令、データ構造、またはプログラムステートメントの任意の組合せを表すことができる。コードセグメントは、情報、データ、引数、パラメータ、またはメモリ内容を渡すこと、および/または受け取ることによって、別のコードセグメントまたはハードウェア回路に結合され得る。情報、引数、パラメータ、データなどは、メモリ共有、メッセージパッシング、トークンパッシング、ネットワーク送信などを含む任意の適切な手段を介して渡され、転送され、または送信され得る。
「機械可読媒体」、「コンピュータ可読媒体」、および/または「プロセッサ可読媒体」という用語は、これに限定されないが、ポータブルまたは固定ストレージデバイス、光学ストレージデバイス、ならびに命令および/またはデータを記憶、格納、または搬送することができる様々な他の非一時的媒体を含み得る。したがって、本明細書に記載される様々な方法は、「機械可読媒体」、「コンピュータ可読媒体」、および/または「プロセッサ可読媒体」に記憶され得る命令および/またはデータによって部分的または完全に実装され、1つまたは複数のプロセッサ、機械、および/またはデバイスによって実行され得る。
本明細書に開示された実施例に関連して説明された方法またはアルゴリズムは、ハードウェア、プロセッサによって実行可能なソフトウェアモジュール、またはその両方の組合せに、処理装置、プログラミング命令、または他の指示の形態で直接的に具現化されてもよく、単一のデバイスに含まれてもよく、複数のデバイスに分散されてもよい。ソフトウェアモジュールは、RAMメモリ、フラッシュメモリ、ROMメモリ、EPROMメモリ、EEPROMメモリ、レジスタ、ハードディスク、リムーバブルディスク、CD-ROM、または当技術分野で既知の任意の他の形態の記憶媒体内に存在してもよい。プロセッサが記憶媒体から情報を読み取り、記憶媒体に情報を書き込むことができるように、記憶媒体がプロセッサに結合されてもよい。代替的に、記憶媒体はプロセッサと一体であってもよい。
当業者であれば、本明細書で開示された実施形態に関連して説明された様々な例示的な論理ブロック、モジュール、回路、およびアルゴリズムステップが、電子ハードウェア、コンピュータソフトウェア、またはその両方の組合せとして実装され得ることをさらに理解するであろう。ハードウェアおよびソフトウェアのこの互換性を明確に示すために、様々な例示的な構成要素、ブロック、モジュール、回路、およびステップについて、上記では概してそれらの機能に関して説明した。そのような機能がハードウェアとして実装されるのか、それともソフトウェアとして実装されるのかは、特定の適用例および全体的なシステムに課された設計制約によって決まる。
本明細書に記載の実施形態の様々な特徴は、本開示の範囲から逸脱することなしに、異なるシステムにおいて実装され得る。上記の実施形態は例にすぎず、本開示を限定するものと解釈すべきではないことに留意されたい。実施形態の説明は例示的なものであることが意図されており、特許請求の範囲を限定するものではない。したがって、本教示は、他のタイプの装置に容易に適用することができ、多くの代替、修正、および変形が当業者には明らかであろう。
102 ホストデバイス
104 ソフトウェアディストリビュータ
106 公開鍵/秘密鍵のペア
109 初期認証
116 デバイス固有の秘密データ
200 ホストデバイス
202 処理回路
204 通信インターフェース
206 ストレージデバイス
208 ソフトウェア
210 送信回路
212 受信回路
214 認証命令
214 初期認証命令
216 検証タグ生成命令
218 検証タグ比較命令
220 ソフトウェア認証モジュール/回路
222 検証タグ生成モジュール/回路
224 検証タグ比較モジュール/回路
226 ソフトウェア検証タグ
228 ワンタイムブロー可能ヒューズ
230 デバイス固有の秘密データ
232 バス
234 外部ストレージデバイス
504 デバイス固有の秘密データ

Claims (26)

  1. デバイス内のローディング中にソフトウェアを検証するための方法であって、
    前記デバイス内または前記デバイスの外部の非セキュアストレージに記憶されたソフトウェアを取得するステップと、
    前記ソフトウェアが実行のためにロードされるとき、前記ソフトウェアの認証を回避しながら、ロードされる前記ソフトウェアが事前生成された検証タグを生成するために使用されたものと同じであることを確認するために、前記事前生成された検証タグを使用することによって前記ソフトウェアの検証を試みるステップと、
    検証が失敗した場合、または事前生成された検証タグが利用可能ではない場合、
    前記デバイスによって実行するために前記ソフトウェアがロードされるときに前記ソフトウェアを認証するステップと、
    前記ソフトウェアの認証が成功した場合、前記ソフトウェアの新しい検証タグを生成するステップであって、前記新しい検証タグが、前記ソフトウェアおよびデバイス固有の秘密データに基づく、ステップと、
    前記新しい検証タグを記憶するステップと
    を備え、
    前記ソフトウェアを検証するステップが、前記ソフトウェアを認証するステップよりも、かかる時間が少なく、および/またはリソースの消費が少ない、方法。
  2. 前記事前生成された検証タグが前記ソフトウェアの以前の認証から取得される、請求項1に記載の方法。
  3. 前記ソフトウェアを認証し、前記事前生成された検証タグを生成するステップと、
    前記事前生成された検証タグを、前記ソフトウェアの後続の検証において使用するために記憶するステップと
    をさらに備える、請求項1に記載の方法。
  4. 前記ソフトウェアを認証するステップが、前記ソフトウェア上の暗号操作および前記ソフトウェアの暗号署名を含む、請求項1に記載の方法。
  5. 前記ソフトウェアを認証するステップが、前記ソフトウェア上の署名を使用して前記ソフトウェアを認証するために、公開鍵を使用するステップを含む、請求項1に記載の方法。
  6. 前記新しい検証タグを生成するステップが、前記ソフトウェア上にメッセージ認証コード(MAC)を生成するステップと、前記デバイス固有の秘密データを使用するステップとを含む、請求項1に記載の方法。
  7. 前記秘密データが、前記デバイスにのみ知られている、請求項1に記載の方法。
  8. 前記秘密データが、前記デバイスの外部ではアクセス不可能である、請求項1に記載の方法。
  9. 前記事前生成された検証タグおよび/または前記新しい検証タグが、前記デバイス内または前記デバイスの外部の前記非セキュアストレージまたは異なる非セキュアストレージに記憶される、請求項1に記載の方法。
  10. 前記ソフトウェアが、前記デバイスのブート時にロードされるオペレーティングシステムの一部である、請求項1に記載の方法。
  11. 前記新しい検証タグが、前記ソフトウェアの新しいバージョンが取得されるたびに変化するデバイスデータに基づいてさらに生成される、請求項1に記載の方法。
  12. 前記デバイス内のソフトウェアの新しい検証タグを生成するときに、前記デバイスデータが決して繰り返さない、請求項11に記載の方法。
  13. 前記秘密データが、前記デバイス内の物理的クローン不能関数に基づいて取得される、請求項1に記載の方法。
  14. 前記ソフトウェアの認証が失敗すると、前記ソフトウェアの実行を中止するステップをさらに備える、請求項1に記載の方法。
  15. 前記ソフトウェアの前記検証が成功した場合、または前記ソフトウェアの前記認証が成功した場合にのみ、前記ソフトウェアを実行するステップをさらに備える、請求項1に記載の方法。
  16. 前記ソフトウェアの新しいバージョンを取得するステップと、
    前記デバイスによって実行するために前記ソフトウェアがロードされるときに前記ソフトウェアの前記新しいバージョンを認証するステップと、
    前記ソフトウェアの前記新しいバージョンの認証が成功した場合、前記ソフトウェアの前記新しいバージョンのための別の検証タグを生成するステップであって、前記別の検証タグが、前記ソフトウェアの前記新しいバージョン、および少なくとも前記デバイス固有の秘密データ、または別のデバイス固有のデータに基づく、ステップと、
    前記別の検証タグを記憶するステップと
    をさらに備える、請求項1に記載の方法。
  17. 実行するために前記ソフトウェアがロードされるとき、前記ソフトウェアの前記新しいバージョンの再認証を回避しながら、ロードされる前記ソフトウェアの前記新しいバージョンが前記別の検証タグを生成するために使用されたものと同じであることを確認するために、前記別の検証タグを使用することによって前記ソフトウェアの前記新しいバージョンの検証を試みるステップをさらに備える、請求項16に記載の方法。
  18. 前記新しい検証タグが取消し可能な証明書にさらに基づき、前記方法が、
    前記ソフトウェアを実行する前に、前記取消し可能な証明書が依然として有効であるかどうかを確認するステップをさらに備える、請求項16に記載の方法。
  19. 認証および検証命令を記憶するためのストレージデバイスと、
    前記ストレージデバイスに結合された処理回路であって、
    前記デバイス内または前記デバイスの外部の非セキュアストレージに記憶されたソフトウェアを取得することと、
    実行のために前記ソフトウェアがロードされるとき、前記ソフトウェアの認証を回避しながら、ロードされる前記ソフトウェアが事前生成された検証タグを生成するために使用されたものと同じであることを確認するために、前記事前生成された検証タグを使用することによって前記ソフトウェアの検証を試みることと、
    検証が失敗した場合、または事前生成された検証タグが利用可能ではない場合、
    前記デバイスによって実行するために前記ソフトウェアがロードされるときに前記ソフトウェアを認証することと、
    前記ソフトウェアの認証が成功した場合、前記ソフトウェアの新しい検証タグを生成することであって、前記新しい検証タグが、前記ソフトウェアおよびデバイス固有の秘密データに基づく、生成することと、
    前記新しい検証タグを記憶することと
    を行うように構成された処理回路と
    を備え、
    前記ソフトウェアの検証が、前記ソフトウェアの認証よりもかかる時間が少なく、および/またはリソースの消費が少ない、デバイス。
  20. 前記処理回路が、
    前記ソフトウェアを認証し、前記事前生成された検証タグを生成することと、
    前記事前生成された検証タグを、前記ソフトウェアの後続の検証において使用するために記憶することと
    を行うようにさらに構成される、請求項19に記載のデバイス。
  21. 前記事前生成された検証タグおよび/または前記新しい検証タグが、前記デバイス内または前記デバイスの外部の前記非セキュアストレージまたは異なる非セキュアストレージに記憶される、請求項19に記載のデバイス。
  22. 前記秘密データが未知であり、前記デバイスの外部ではアクセス不可能である、請求項19に記載のデバイス。
  23. 前記新しい検証タグが、前記ソフトウェアの新しいバージョンが取得されるたびに変化するデバイスデータに基づいてさらに生成される、請求項19に記載のデバイス。
  24. 前記処理回路に結合された複数のワンタイムブローヒューズをさらに備え、前記新しい検証タグが、前記ワンタイムブローヒューズからの状態に基づいてさらに生成され、前記複数のワンタイムブローヒューズが、前記ソフトウェアの更新されたバージョンが取得されるたびに変化する、請求項19に記載のデバイス。
  25. デバイス内またはデバイスの外部の非セキュアストレージに記憶されたソフトウェアを取得するための手段と、
    実行のために前記ソフトウェアがロードされるとき、前記ソフトウェアの認証を回避しながら、ロードされる前記ソフトウェアが事前生成された検証タグを生成するために使用されたものと同じであることを確認するために、前記事前生成された検証タグを使用することによって前記ソフトウェアの検証を試みるための手段と、
    検証が失敗した場合、または事前生成された検証タグが利用可能ではない場合、前記デバイスによって実行するために前記ソフトウェアがロードされるときに前記ソフトウェアを認証するための手段と、
    前記ソフトウェアの認証が成功した場合、前記ソフトウェアの新しい検証タグを生成するための手段であって、前記新しい検証タグが、前記ソフトウェアおよびデバイス固有の秘密データに基づく、手段と、
    前記新しい検証タグを記憶するための手段と
    を備え、
    前記ソフトウェアを検証することが、前記ソフトウェアを認証することよりも、かかる時間が少なく、および/またはリソースの消費が少ない、デバイス。
  26. デバイス内のローディング中にソフトウェアを検証するための非一時的機械可読記憶媒体であって、処理回路によって実行されると、前記処理回路に、
    前記デバイス内または前記デバイスの外部の非セキュアストレージに記憶されたソフトウェアを取得することと、
    実行のために前記ソフトウェアがロードされるとき、前記ソフトウェアの認証を回避しながら、ロードされる前記ソフトウェアが事前生成された検証タグを生成するために使用されたものと同じであることを確認するために、前記事前生成された検証タグを使用することによって前記ソフトウェアの検証を試みることと、
    検証が失敗した場合、または事前生成された検証タグが利用可能ではない場合、
    前記デバイスによって実行するために前記ソフトウェアがロードされるときに前記ソフトウェアを認証することと、
    前記ソフトウェアの認証が成功した場合、前記ソフトウェアの新しい検証タグを生成することであって、前記新しい検証タグが、前記ソフトウェアおよび少なくともデバイス固有の秘密データに基づく、生成することと、
    前記新しい検証タグを記憶することと
    を行わせる1つまたは複数の命令を有し、
    前記ソフトウェアの検証が、前記ソフトウェアの認証よりもかかる時間が少なく、および/またはリソースの消費が少ない、非一時的機械可読記憶媒体。
JP2017551242A 2015-04-15 2016-03-22 セキュアなソフトウェアの認証と検証 Active JP6371919B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/687,783 US9697359B2 (en) 2015-04-15 2015-04-15 Secure software authentication and verification
US14/687,783 2015-04-15
PCT/US2016/023631 WO2016167926A1 (en) 2015-04-15 2016-03-22 Secure software authentication and verification

Publications (2)

Publication Number Publication Date
JP2018512010A true JP2018512010A (ja) 2018-04-26
JP6371919B2 JP6371919B2 (ja) 2018-08-08

Family

ID=55646917

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017551242A Active JP6371919B2 (ja) 2015-04-15 2016-03-22 セキュアなソフトウェアの認証と検証

Country Status (7)

Country Link
US (1) US9697359B2 (ja)
EP (1) EP3284000B1 (ja)
JP (1) JP6371919B2 (ja)
KR (1) KR101904303B1 (ja)
CN (1) CN107430658B (ja)
TW (1) TWI620092B (ja)
WO (1) WO2016167926A1 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20210240869A1 (en) * 2017-04-21 2021-08-05 Micron Technology, Inc. Secure memory device with unique identifier for authentication
JP2022517056A (ja) * 2019-03-22 2022-03-04 アドバンスド ニュー テクノロジーズ カンパニー リミテッド トラステッドコンピューティング方法およびサーバ

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9953167B2 (en) * 2015-10-12 2018-04-24 Microsoft Technology Licensing, Llc Trusted platforms using minimal hardware resources
US11321466B2 (en) * 2018-03-09 2022-05-03 Qualcomm Incorporated Integrated circuit data protection
EP3782058B1 (en) * 2018-04-20 2024-03-20 Vishal Gupta Decentralized document and entity verification engine
KR20220026079A (ko) 2020-08-25 2022-03-04 삼성전자주식회사 스토리지 장치
TWI759874B (zh) * 2020-09-22 2022-04-01 明泰科技股份有限公司 分散式的軟體驗證系統
US11423154B2 (en) * 2020-10-26 2022-08-23 Micron Technology, Inc. Endpoint authentication based on boot-time binding of multiple components
KR102387685B1 (ko) * 2020-11-03 2022-05-30 유비벨록스(주) 보안 부트 검증 방법 및 이를 위한 보안 칩
US11520895B2 (en) * 2020-12-07 2022-12-06 Samsung Electronics Co., Ltd. System and method for dynamic verification of trusted applications
JP2023084913A (ja) * 2021-12-08 2023-06-20 株式会社リコー 情報処理システム、情報処理装置、情報処理方法、及びプログラム
US20230244790A1 (en) * 2022-02-01 2023-08-03 Aptiv Technologies Limited Accelerated Secure Boot for Embedded Controllers
EP4228187B1 (en) 2022-02-15 2024-06-19 Aptiv Technologies AG Integrity tests for mixed analog digital systems
DE102023101503A1 (de) 2023-01-23 2024-07-25 Audi Aktiengesellschaft Verfahren zum Starten einer Datenverarbeitungseinrichtung, Datenverarbeitungseinrichtung und Kraftfahrzeug

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008516317A (ja) * 2004-10-11 2008-05-15 テレフオンアクチーボラゲット エル エム エリクソン(パブル) データ処理装置へのデータのセキュリティ上安全なロード及び格納
US20090193211A1 (en) * 2008-01-24 2009-07-30 Broadcom Corporation Software authentication for computer systems
US20140279985A1 (en) * 2013-03-15 2014-09-18 International Business Machines Corporation Extending Platform Trust During Program Updates
JP2015049785A (ja) * 2013-09-03 2015-03-16 株式会社デンソー プログラム処理装置

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5734819A (en) * 1994-10-12 1998-03-31 International Business Machines Corporation Method and apparatus for validating system operation
US6961852B2 (en) * 2003-06-19 2005-11-01 International Business Machines Corporation System and method for authenticating software using hidden intermediate keys
US8627086B2 (en) * 2004-10-11 2014-01-07 Telefonaktiebolaget Lm Ericsson (Publ) Secure loading and storing of data in a data processing device
US8290150B2 (en) * 2007-05-11 2012-10-16 Validity Sensors, Inc. Method and system for electronically securing an electronic device using physically unclonable functions
US9009328B2 (en) * 2007-11-30 2015-04-14 International Business Machines Corporation System and method for dynamic negotiation of device name with wildcard character
US7911857B1 (en) * 2009-06-10 2011-03-22 Juniper Networks, Inc. Preamble detection and postamble closure for a memory interface controller
CN101610452B (zh) 2009-07-15 2011-06-01 西安西电捷通无线网络通信股份有限公司 一种传感器网络鉴别与密钥管理机制的融合方法
CN102725737B (zh) 2009-12-04 2016-04-20 密码研究公司 可验证防泄漏的加密和解密
EP2348454A1 (en) * 2010-01-20 2011-07-27 Thomson Licensing A method of and a system for execution of a software application
US8539610B2 (en) * 2010-10-29 2013-09-17 Nokia Corporation Software security
DE102011054410B4 (de) * 2011-10-12 2014-09-25 Infineon Technologies Ag Vorrichtung und Verfahren zur Erzeugung einer Bitfolge
US8745371B2 (en) 2011-12-29 2014-06-03 Unisys Corporation Unified network architecture having storage devices with secure boot devices
US9281948B2 (en) * 2012-02-09 2016-03-08 Microsoft Technology Licensing, Llc Revocation information for revocable items
US8792645B2 (en) 2012-12-18 2014-07-29 Honeywell International Inc. Authentication and data security for wireless networks
US20140250290A1 (en) 2013-03-01 2014-09-04 St-Ericsson Sa Method for Software Anti-Rollback Recovery
US9088574B2 (en) * 2013-07-18 2015-07-21 International Business Machines Corporation Subscriber identity module-based authentication of a wireless device and applications stored thereon

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008516317A (ja) * 2004-10-11 2008-05-15 テレフオンアクチーボラゲット エル エム エリクソン(パブル) データ処理装置へのデータのセキュリティ上安全なロード及び格納
US20090193211A1 (en) * 2008-01-24 2009-07-30 Broadcom Corporation Software authentication for computer systems
US20140279985A1 (en) * 2013-03-15 2014-09-18 International Business Machines Corporation Extending Platform Trust During Program Updates
JP2015049785A (ja) * 2013-09-03 2015-03-16 株式会社デンソー プログラム処理装置

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20210240869A1 (en) * 2017-04-21 2021-08-05 Micron Technology, Inc. Secure memory device with unique identifier for authentication
US12086296B2 (en) * 2017-04-21 2024-09-10 Micron Technology, Inc. Switch to control communication between a memory and a secret generator in a memory device
JP2022517056A (ja) * 2019-03-22 2022-03-04 アドバンスド ニュー テクノロジーズ カンパニー リミテッド トラステッドコンピューティング方法およびサーバ
JP7100201B2 (ja) 2019-03-22 2022-07-12 アドバンスド ニュー テクノロジーズ カンパニー リミテッド トラステッドコンピューティング方法およびサーバ

Also Published As

Publication number Publication date
US9697359B2 (en) 2017-07-04
KR20170118972A (ko) 2017-10-25
EP3284000A1 (en) 2018-02-21
EP3284000B1 (en) 2018-09-05
CN107430658A (zh) 2017-12-01
TW201706898A (zh) 2017-02-16
KR101904303B1 (ko) 2018-10-04
US20160306976A1 (en) 2016-10-20
WO2016167926A1 (en) 2016-10-20
CN107430658B (zh) 2018-11-23
TWI620092B (zh) 2018-04-01
JP6371919B2 (ja) 2018-08-08

Similar Documents

Publication Publication Date Title
JP6371919B2 (ja) セキュアなソフトウェアの認証と検証
US11074371B2 (en) Systems, methods and apparatuses for secure storage of data using a security-enhancing chip
CN109313690B (zh) 自包含的加密引导策略验证
US10771264B2 (en) Securing firmware
CN107085675B (zh) 受控安全代码验证
JP5703391B2 (ja) 耐タンパー性ブート処理のためのシステム及び方法
US9830456B2 (en) Trust transference from a trusted processor to an untrusted processor
US10282549B2 (en) Modifying service operating system of baseboard management controller
EP3343424B1 (en) Control board secure start method, and software package upgrade method and device
JP2016520265A (ja) セキュリティパラメータに基づくワーキングセキュリティキーの生成
JP6387908B2 (ja) 認証システム
CN110555309A (zh) 启动方法、装置、终端以及计算机可读存储介质
CN107924440B (zh) 用于管理容器的方法、系统和计算机可读介质
NL2022902B1 (en) Integrated circuit device for loT applications
US20240126886A1 (en) Trusted Computing for Digital Devices
US10067770B2 (en) Platform key hierarchy
JP2015015542A (ja) 情報処理システム
US20240249029A1 (en) Utilizing hardware tokens in conjunction with HSM for code signing

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170929

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170929

A871 Explanation of circumstances concerning accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A871

Effective date: 20170929

A975 Report on accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A971005

Effective date: 20180307

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180312

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180601

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: 20180618

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180713

R150 Certificate of patent or registration of utility model

Ref document number: 6371919

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250