(57)【特許請求の範囲】
【請求項１】
デバイス内のローディング中にソフトウェアを検証するための方法であって、
前記デバイスにおいて、前記デバイス内または前記デバイスの外部の非セキュアストレージに記憶されたソフトウェアを取得するステップと、
前記デバイスの検証タグ比較回路において、前記ソフトウェアが実行のためにロードされるとき、前記ソフトウェアの認証を回避しながら、ロードされる前記ソフトウェアが事前生成された検証タグを生成するために使用されたものと同じであることを確認するために、前記事前生成された検証タグを使用することによって前記ソフトウェアの検証を試みるステップと、
検証が失敗した場合、または事前生成された検証タグが利用可能ではない場合、
ソフトウェア認証回路において、前記デバイスによって実行するために前記ソフトウェアがロードされるときに前記ソフトウェアを認証するステップと、
前記デバイスの検証タグ生成回路において、前記ソフトウェアの認証が成功した場合、前記ソフトウェアの新しい検証タグを生成するステップであって、前記新しい検証タグが、前記ソフトウェア、デバイス固有の秘密データ、および、1つまたは複数のワンタイムブロー可能ヒューズからの1つまたは複数の状態を含むデバイスデータに基づき、前記1つまたは複数のワンタイムブロー可能ヒューズのうちの少なくとも1つが、前記ソフトウェアの新しいバージョンが取得されるたびに前記デバイスデータを変更するために切られる、ステップと、
ストレージデバイスにおいて、前記新しい検証タグを記憶するステップと
を備え、
前記ソフトウェアを検証するステップが、前記ソフトウェアを認証するステップよりも、かかる時間が少なく、および/またはリソースの消費が少ない、方法。
【請求項２】
前記事前生成された検証タグが前記ソフトウェアの以前の認証から取得される、請求項1に記載の方法。
【請求項３】
前記ソフトウェア認証回路において、前記ソフトウェアを認証し、前記検証タグ生成回路において、前記事前生成された検証タグを生成するステップと、
前記ストレージデバイスにおいて、前記事前生成された検証タグを、前記ソフトウェアの後続の検証において使用するために記憶するステップと
をさらに備える、請求項1に記載の方法。
【請求項４】
前記ソフトウェアを認証するステップが、前記ソフトウェア上の暗号操作および前記ソフトウェアの暗号署名を含む、請求項1に記載の方法。
【請求項５】
前記ソフトウェアを認証するステップが、前記ソフトウェア上の署名を使用して前記ソフトウェアを認証するために、公開鍵を使用するステップを含む、請求項1に記載の方法。
【請求項６】
前記新しい検証タグを生成するステップが、前記ソフトウェア上にメッセージ認証コード(MAC)を生成するステップと、前記デバイス固有の秘密データを使用するステップとを含む、請求項1に記載の方法。
【請求項７】
前記デバイス固有の秘密データが、前記デバイスにのみ知られている、請求項1に記載の方法。
【請求項８】
前記デバイス固有の秘密データが、前記デバイスの外部ではアクセス不可能である、請求項1に記載の方法。
【請求項９】
前記事前生成された検証タグおよび/または前記新しい検証タグが、前記デバイス内または前記デバイスの外部の前記非セキュアストレージまたは異なる非セキュアストレージに記憶される、請求項1に記載の方法。
【請求項１０】
前記ソフトウェアが、前記デバイスのブート時にロードされるオペレーティングシステムの一部である、請求項1に記載の方法。
【請求項１１】
前記デバイス固有の秘密データが、前記デバイス内の物理的クローン不能関数に基づいて取得される、請求項1に記載の方法。
【請求項１２】
前記デバイスにおいて、前記ソフトウェアの認証が失敗すると、前記ソフトウェアの実行を中止するステップをさらに備える、請求項1に記載の方法。
【請求項１３】
前記デバイスにおいて、前記ソフトウェアの前記認証が成功した場合、前記ソフトウェアを実行するステップをさらに備える、請求項1に記載の方法。
【請求項１４】
前記デバイスにおいて、前記ソフトウェアの新しいバージョンを取得するステップと、
前記ソフトウェア認証回路において、前記デバイスによって実行するために前記ソフトウェアがロードされるときに前記ソフトウェアの前記新しいバージョンを認証するステップと、
前記検証タグ生成回路において、前記ソフトウェアの前記新しいバージョンの認証が成功した場合、前記ソフトウェアの前記新しいバージョンのための別の検証タグを生成するステップであって、前記別の検証タグが、前記ソフトウェアの前記新しいバージョン、前記デバイス固有の秘密データ、および変更されたデバイスデータに基づく、ステップと、
前記ストレージデバイスにおいて、前記別の検証タグを記憶するステップと
をさらに備える、請求項1に記載の方法。
【請求項１５】
前記検証タグ比較回路において、実行するために前記ソフトウェアがロードされるとき、前記ソフトウェアの前記新しいバージョンの再認証を回避しながら、ロードされる前記ソフトウェアの前記新しいバージョンが前記別の検証タグを生成するために使用されたものと同じであることを確認するために、前記別の検証タグを使用することによって前記ソフトウェアの前記新しいバージョンの検証を試みるステップをさらに備える、請求項14に記載の方法。
【請求項１６】
前記新しい検証タグが取消し可能な証明書にさらに基づき、前記方法が、
前記デバイスにおいて、前記ソフトウェアを実行する前に、前記取消し可能な証明書が依然として有効であるかどうかを確認するステップをさらに備える、請求項14に記載の方法。
【請求項１７】
認証および検証命令を記憶するためのストレージデバイスと、
前記ストレージデバイスに結合された処理回路とを備えるデバイスであって、前記処理回路が、
前記デバイス内または前記デバイスの外部の非セキュアストレージに記憶されたソフトウェアを取得することと、
実行のために前記ソフトウェアがロードされるとき、前記ソフトウェアの認証を回避しながら、ロードされる前記ソフトウェアが事前生成された検証タグを生成するために使用されたものと同じであることを確認するために、前記事前生成された検証タグを使用することによって前記ソフトウェアの検証を試みることと、
検証が失敗した場合、または事前生成された検証タグが利用可能ではない場合、
前記デバイスによって実行するために前記ソフトウェアがロードされるときに前記ソフトウェアを認証することと、
前記ソフトウェアの認証が成功した場合、前記ソフトウェアの新しい検証タグを生成することであって、前記新しい検証タグが、前記ソフトウェア、デバイス固有の秘密データ、および、1つまたは複数のワンタイムブロー可能ヒューズからの1つまたは複数の状態を含むデバイスデータに基づき、前記1つまたは複数のワンタイムブロー可能ヒューズのうちの少なくとも1つが、前記ソフトウェアの新しいバージョンが取得されるたびに前記デバイスデータを変更するために切られる、生成することと、
前記新しい検証タグを記憶することと
を行うように構成され、
前記ソフトウェアの検証が、前記ソフトウェアの認証よりもかかる時間が少なく、および/またはリソースの消費が少ない、デバイス。
【請求項１８】
前記処理回路が、
前記ソフトウェアを認証し、前記事前生成された検証タグを生成することと、
前記事前生成された検証タグを、前記ソフトウェアの後続の検証において使用するために記憶することと
を行うようにさらに構成される、請求項17に記載のデバイス。
【請求項１９】
前記事前生成された検証タグおよび/または前記新しい検証タグが、前記デバイス内または前記デバイスの外部の前記非セキュアストレージまたは異なる非セキュアストレージに記憶される、請求項17に記載のデバイス。
【請求項２０】
前記デバイス固有の秘密データが未知であり、前記デバイスの外部ではアクセス不可能である、請求項17に記載のデバイス。
【請求項２１】
デバイス内またはデバイスの外部の非セキュアストレージに記憶されたソフトウェアを取得するための手段と、
実行のために前記ソフトウェアがロードされるとき、前記ソフトウェアの認証を回避しながら、ロードされる前記ソフトウェアが事前生成された検証タグを生成するために使用されたものと同じであることを確認するために、前記事前生成された検証タグを使用することによって前記ソフトウェアの検証を試みるための手段と、
検証が失敗した場合、または事前生成された検証タグが利用可能ではない場合、前記デバイスによって実行するために前記ソフトウェアがロードされるときに前記ソフトウェアを認証するための手段と、
前記ソフトウェアの認証が成功した場合、前記ソフトウェアの新しい検証タグを生成するための手段であって、前記新しい検証タグが、前記ソフトウェア、デバイス固有の秘密データ、および、1つまたは複数のワンタイムブロー可能ヒューズからの1つまたは複数の状態を含むデバイスデータに基づき、前記1つまたは複数のワンタイムブロー可能ヒューズのうちの少なくとも1つが、前記ソフトウェアの新しいバージョンが取得されるたびに前記デバイスデータを変更するために切られる、手段と、
前記新しい検証タグを記憶するための手段と
を備え、
前記ソフトウェアを検証することが、前記ソフトウェアを認証することよりも、かかる時間が少なく、および/またはリソースの消費が少ない、デバイス。
【請求項２２】
認証および検証命令を記憶するためのストレージデバイスと、
前記ストレージデバイスに結合された処理回路とを備えるデバイスであって、前記処理回路が、
前記デバイス内または前記デバイスの外部の非セキュアストレージに記憶されたソフトウェアを取得することと、
実行のために前記ソフトウェアがロードされるとき、前記ソフトウェアの認証を回避しながら、ロードされる前記ソフトウェアが事前生成された検証タグを生成するために使用されたものと同じであることを確認するために、前記事前生成された検証タグを使用することによって前記ソフトウェアの検証を試みることと、
検証が失敗した場合、または事前生成された検証タグが利用可能でない場合、
前記デバイスによって実行するためにロードされるときに前記ソフトウェアを認証することと、
前記ソフトウェアの認証が成功した場合、前記ソフトウェアの新しい検証タグを生成することであって、前記新しい検証タグが前記ソフトウェア、デバイス固有の秘密データ、および、1つまたは複数のハードウェア構成要素からの1つまたは複数の状態を含むデバイスデータに基づき、前記デバイスデータが、前記ソフトウェアの新しいバージョンが取得されるたびに変化し、前記デバイスデータが、前記新しい検証タグが生成されたときに繰り返されない、生成することと、
前記新しい検証タグを記憶することと
を行うように構成され、
前記ソフトウェアの検証が、前記ソフトウェアの認証よりもかかる時間が少なく、および/またはリソースの消費が少ない、デバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本出願は、その内容全体が参照により本明細書に組み込まれる、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  デバイス固有の秘密データ
【図１】
0006371919.tif 000002
【図２】
0006371919.tif 000003
【図３】
0006371919.tif 000004
【図４Ａ】
0006371919.tif 000005
【図４Ｂ】
0006371919.tif 000006
【図５】
0006371919.tif 000007
【図６】
0006371919.tif 000008