(57)【要約】【課題】更新可能パラメータを含むプログラムの改ざんを妨げる。【解決手段】ユーザによる書き込みが禁止されている第１記憶領域は、少なくとも一つの基準ハッシュ値を格納し、ユーザによる書き込みが許可されている第２記憶領域は、現在プログラムイメージを格納する。方法は、更新データを取得し、前記現在プログラムイメージと前記更新データとを入力して新しいプログラムイメージを生成し、所定長の少なくとも一つの値の生成を実行し、前記少なくとも一つの値及び前記新しいプログラムイメージを入力として計算された少なくとも一つの現在ハッシュ値と、前記少なくとも一つの基準ハッシュ値と、の比較を実行し、基準ハッシュ値と一致する現在ハッシュ値の計算に使用された前記所定長の値と、前記新しいプログラムイメージとを結合したデータで、前記第２記憶領域における前記現在プログラムイメージを上書きする。【選択図】図９
2018088574.tif 000002
【特許請求の範囲】
【請求項１】
更新可能パラメータを含むプログラムイメージを格納している計算機が、前記プログラムイメージを保護する方法であって、
前記計算機は、
プロセッサと、
ユーザによる書き込みが禁止されている第１記憶領域と、
ユーザによる書き込みが許可されている第２記憶領域と、を含み、
前記第１記憶領域は、少なくとも一つの基準ハッシュ値を格納し、
前記第２記憶領域は、現在プログラムイメージを格納し、
前記現在プログラムイメージは、更新可能パラメータと、前記更新可能パラメータの更新データ及び前記現在プログラムイメージとから新しいプログラムイメージを生成するプログラム生成機能部と、を含み、
前記方法は、
前記プロセッサが、前記更新可能パラメータの更新データを取得し、
前記プロセッサが、前記プログラム生成機能部を呼び出して、前記現在プログラムイメージと前記更新データとを入力して新しいプログラムイメージを生成し、
前記プロセッサが、所定長の少なくとも一つの値の生成を実行し、
前記プロセッサが、前記少なくとも一つの値及び前記新しいプログラムイメージを入力として計算された少なくとも一つの現在ハッシュ値と、前記少なくとも一つの基準ハッシュ値と、の比較を実行し、
前記プロセッサが、前記少なくとも一つの基準ハッシュ値における基準ハッシュ値と一致する現在ハッシュ値が見つかるまで、前記少なくとも一つの値の生成と、前記比較と、を繰り返し、
前記プロセッサが、前記一致する現在ハッシュ値の計算に使用された前記所定長の値と、前記新しいプログラムイメージとを結合したデータで、前記第２記憶領域における前記現在プログラムイメージを上書きする、方法。
【請求項２】
請求項１に記載の方法であって、
前記所定長の値は乱数である、方法。
【請求項３】
請求項１又は２に記載の方法であって、
前記現在プログラムイメージは、前記更新データの正当性をチェックするチェック機能部をさらに含み、
前記方法は、
前記プロセッサが、前記更新可能パラメータの前記更新データを取得すると、前記チェック機能部を呼び出して、前記更新データの正当性をチェックし、
前記更新データが正当である場合に、前記プロセッサが、前記新しいプログラムイメージを生成する、ことをさらに含む方法。
【請求項４】
請求項１、２又は３に記載の方法であって、
前記現在プログラムイメージは、前記更新可能パラメータの現在の値の有効期限を示すデータを含み、
前記方法は、
前記プロセッサが、現在日時が前記有効期限を過ぎている場合に前記現在プログラムイメージの実行を停止する、ことをさらに含む方法。
【請求項５】
請求項１に記載の方法であって、
前記第１記憶領域は、複数の基準ハッシュ値を格納する、方法。
【請求項６】
請求項１に記載の方法であって、
前記第１記憶領域は、複数の基準ハッシュ値を格納し、
前記方法は、
前記プロセッサが、前記所定長の複数の値を生成し、
前記プロセッサが、前記複数の値及び前記新しいプログラムイメージを入力として計算された複数の現在ハッシュ値と、前記複数の基準ハッシュ値と、の比較を実行する、方法。
【請求項７】
請求項５又は６に記載の方法であって、
前記複数の基準ハッシュ値は、前記第１記憶領域において、ソートされた順序と異なる順序でリスト化されている、方法。
【請求項８】
請求項１から７のいずれか一項に記載の方法であって、
前記方法は、
前記プロセッサが、前記プロセッサと前記計算機のメモリの使用状況を監視し、
前記プロセッサが、前記プロセッサの負荷及び前記メモリの消費が閾値を超えるプログラムをマルウェアと判定する、方法。
【請求項９】
請求項１から８のいずれか一項に記載の方法であって、
前記基準ハッシュ値及び現在ハッシュ値は、鍵付きハッシュ関数により計算され、
前記鍵付きハッシュ関数は、
入力データにパディングを施してデータ長がｎビットの倍数の初期データを生成し、前記初期データをｎビットのブロックに分割し、
ｎビット定数と最初のブロックを結合して、結合データを生成し、
前記結合データをブロック暗号に入力し、前記ブロック暗号の出力の下位ｎビットを廃棄し、上位ｎビットを取得し、
前記上位ｎビットと次のブロックとを結合して、次の結合データを生成し、
前記次の結合データを前記ブロック暗号に入力し、前記ブロック暗号の出力の下位ｎビットを廃棄し、上位ｎビットを取得し、
前記次の結合データの生成と、前記次の結合データを入力とする前記ブロック暗号の出力の上位ｎビットの取得を繰り返す、ことを含む、方法。
【請求項１０】
請求項１から８のいずれか一項に記載の方法であって、
前記基準ハッシュ値及び現在ハッシュ値は、鍵付きハッシュ関数により計算され、
前記鍵付きハッシュ関数は、
入力データにパディングを施してデータ長がｎビットの倍数の初期データを生成し、前記初期データをｎビットのブロックに分割し、
ｎビット第１定数と、ｎビット第２定数と最初のブロックとの排他的論理和を結合して、結合データを生成し、
前記結合データをブロック暗号に入力し、前記ブロック暗号の出力を取得し、
前記出力の上位ｎビットと、次のブロックと前記出力の下位ｎビットとの排他的論理和と、を結合して、次の結合データを生成し、
前記次の結合データを前記ブロック暗号に入力し、前記ブロック暗号の次の出力を取得し、
前記次の結合データの生成と、前記次の結合データを入力とする前記ブロック暗号の前記次の出力の取得を繰り返す、ことを含む、方法。
【請求項１１】
更新可能なパラメータを含むプログラムイメージを保護する装置であって、
プロセッサと、
ユーザによる書き込みが禁止されている第１記憶領域と、
ユーザによる書き込みが許可されている第２記憶領域と、を含み、
前記第１記憶領域は、少なくとも一つの基準ハッシュ値を格納し、
前記第２記憶領域は、現在プログラムイメージを格納し、
前記現在プログラムイメージは、更新可能パラメータと、前記更新可能パラメータの更新データ及び前記現在プログラムイメージとから新しいプログラムイメージを生成するプログラム生成機能部と、を含み、
前記プロセッサは、
前記更新可能パラメータの更新データを取得し、
前記プログラム生成機能部を呼び出して、前記現在プログラムイメージと前記更新データとを入力して新しいプログラムイメージを生成し、
所定長の少なくとも一つの値の生成を実行し、
前記少なくとも一つの値及び前記新しいプログラムイメージを入力として計算された少なくとも一つの現在ハッシュ値と、前記少なくとも一つの基準ハッシュ値と、の比較を実行し、
前記少なくとも一つの基準ハッシュ値における基準ハッシュ値と一致する現在ハッシュ値が見つかるまで、前記少なくとも一つの値の生成と、前記比較と、を繰り返し、
前記一致する現在ハッシュ値の計算に使用された前記所定長の値と、前記新しいプログラムイメージとを結合したデータで、前記第２記憶領域における前記現在プログラムイメージを上書きする、装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、機器にインストールされたプログラムの不正な改ざんを妨げるための技術に関する。
【背景技術】
【０００２】
モバイル端末の普及とＷｅｂサービスの高度化に伴い、サービスの種類も多様化している。特に近年では、モバイル決済のように、従来ＡＴＭや窓口、専用端末を経由していた支払や送金に関するサービスをモバイル端末上で実行するサービスが流行の兆しを見せている。このようなサービスを利用する際には、専用のプログラム（アプリ）をインストールし、そのアプリを介してサービスを利用するのが一般的である。
【０００３】
また、サービスの利用に際してユーザ認証（もしくは端末認証）を行う必要があるが、このとき、ユーザ（もしくは端末）のみが持つ秘密情報を用いる。このような処理は、ＳＩＭチップ上の領域内で行われることが望ましいが、上記のように、アプリ上で秘密情報を取り扱うケースがほとんどである。これは、サービス用アプリをインストールするためには、ＳＩＭチップの記憶容量や処理能力が低いことが理由である。
【０００４】
一方で、モバイル端末のセキュリティという観点では、端末の１０％程度がマルウェアに感染しているという現実があり、金融サービスに特化したマルウェアの存在も確認されている。したがって、上記のアプリは、ユーザ認証や通信路暗号化で必要となる秘密情報（秘密鍵や生体情報）を保護する必要がある。
【０００５】
特許文献１は、アプリの改ざんを検出するために、アプリのハッシュ値をアプリと同時に保存しておき、プログラムの実行時にアプリのハッシュ値を計算し、保存しているハッシュ値と一致している場合のみアプリを実行している。ところが、マルウェアがアプリを改ざんできる場合には、同様に保存されているハッシュ値の改ざんも容易になってしまう。
【０００６】
上記のような課題に対する対策として、秘密情報をそのまま保持せず、読み取りを困難にする難読化技術が知られている。そこで、アプリと鍵のセットを難読化することで、秘密情報の漏えいリスクを軽減することができると考えられる。難読化については、既に多くの方式が検討されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１０−１０２５７９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
アプリと鍵のセットを難読化したアプリイメージは、鍵更新のたびに書き換えられる。このように、更新可能パラメータを含むプログラムは、一般ユーザ権限での書き込みが禁止されているシステム領域に格納することが難しい。そこで、プログラムのハッシュ値のみを、マルウェアのようなユーザプログラムが書き込みできないシステム領域に格納する方法が考えられる。しかし、一般ユーザ権限では、パラメータ更新後のプログラムのハッシュ値を、システム領域に書き込むことができない。
【０００９】
そこで、一般ユーザ権限での書き込みが許可されたユーザ領域に格納された更新可能パラメータを含むプログラムの改ざんを妨げる技術が望まれる。
【課題を解決するための手段】
【００１０】
一例は、更新可能パラメータを含むプログラムイメージを格納している計算機が、前記プログラムイメージを保護する方法であって、前記計算機は、プロセッサと、ユーザによる書き込みが禁止されている第１記憶領域と、ユーザによる書き込みが許可されている第２記憶領域と、を含み、前記第１記憶領域は、少なくとも一つの基準ハッシュ値を格納し、前記第２記憶領域は、現在プログラムイメージを格納し、前記現在プログラムイメージは、更新可能パラメータと、前記更新可能パラメータの更新データ及び前記現在プログラムイメージとから新しいプログラムイメージを生成するプログラム生成機能部と、を含み、前記方法は、前記プロセッサが、前記更新可能パラメータの更新データを取得し、前記プロセッサが、前記プログラム生成機能部を呼び出して、前記現在プログラムイメージと前記更新データとを入力して新しいプログラムイメージを生成し、前記プロセッサが、所定長の少なくとも一つの値の生成を実行し、前記プロセッサが、前記少なくとも一つの値及び前記新しいプログラムイメージを入力として計算された少なくとも一つの現在ハッシュ値と、前記少なくとも一つの基準ハッシュ値と、の比較を実行し、前記プロセッサが、前記少なくとも一つの基準ハッシュ値における基準ハッシュ値と一致する現在ハッシュ値が見つかるまで、前記少なくとも一つの値の生成と、前記比較と、を繰り返し、前記プロセッサが、前記一致する現在ハッシュ値の計算に使用された前記所定長の値と、前記新しいプログラムイメージとを結合したデータで、前記第２記憶領域における前記現在プログラムイメージを上書きする。
【発明の効果】
【００１１】
本発明の一態様によれば、更新可能パラメータを含むプログラムの改ざんを妨げることができる。
【図面の簡単な説明】
【００１２】
【図１】実施例１におけるシステム構成を表す図である。
【図２】実施例１における鍵初期化および更新プロトコルを表すシーケンス図である。
【図３】実施例１における機器構成を表す概略図である。
【図４】図３の記憶装置に保存されたデータに対するアクセス権限を示すイメージ図である。
【図５】実施例１におけるアプリのダウンロードから端末への格納までの処理を表すフロー図である。
【図６】実施例１におけるアプリの実行を行う際に必要な機能の構成図である。
【図７】実施例１におけるアプリの実行プロセスを表すフロー図である。
【図８】実施例１における鍵更新を行う場合に必要な機能構成を表す図である。
【図９】実施例１における鍵更新処理を表すフロー図である。
【図１０】実施例２における鍵更新処理を表すフロー図である。
【図１１】実施例３におけるメッセージ認証子アルゴリズムの構成例その１を表す図である。
【図１２】実施例３におけるメッセージ認証子アルゴリズムの構成例その２を表す図である。
【発明を実施するための形態】
【００１３】
以下、添付図面を参照して本発明の実施形態を説明する。本実施形態は本発明を実現するための一例に過ぎず、本発明の技術的範囲を限定するものではないことに注意すべきである。各図において共通の構成については同一の参照符号が付されている。
【００１４】
本開示の装置は、アプリケーションプログラム（以下単にアプリとも呼ぶ）のインストール時に、アプリイメージのハッシュ値を、（マルウェアが書き換えできない）システム領域に保存する。アプリの実行時に、その時点でのアプリイメージのハッシュ値と保存されているハッシュ値を比較することで、アプリの改ざんを検出する。
【００１５】
さらに、装置は、アプリイメージの更新時には、更新されたアプリイメージのハッシュ値と、システム領域に格納されているハッシュ値が一致するように、更新されたアプリイメージに数値を結合する。装置は、二つのハッシュ値の衝突を見つけるために、結合する数値の更新とハッシュ値計算を繰り返す。
【００１６】
マルウェアが、検出されることなくアプリイメージの改ざんを行うためには、改ざんしたアプリのハッシュ値が、保存されているハッシュ値と一致する必要がある。マルウェアは、正規のアプリに比べて利用可能な計算リソースが小さいため、二つのハッシュ値の衝突を見つけるまでに多大な時間を要する。これにより、マルウェアによるアプリイメージの改ざんを効果的に妨げることができる。
【実施例１】
【００１７】
図１は本実施例のシステム構成を示す。本システムは、ユーザ１０１が持つユーザ端末１０２、アプリの配信を行うアプリ配信サーバ１０３、アプリを介してユーザにサービスを提供するサービスプロバイダ１０４を含む。ここでは、サービスプロバイダ１０４は、１又は複数のサーバを示す。サービスプロバイダ１０４は、サービスの利用に必要となるアプリの配信をアプリ配信サーバ１０３に委託する。
【００１８】
ユーザは、サービスプロバイダ１０４が提供するサービスを利用する際に、所有するユーザ端末１０２からアプリ配信サーバ１０３にアクセスし、アプリをダウンロードする。その後、インストールしたアプリを介して、サービスを利用する。
【００１９】
通常、アプリ配信サーバ１０３からのアプリのダウンロードは、通信途上での改ざん等を防止するため、暗号通信を利用する。この通信は一時的なものであり、アプリ配信サーバ１０３は、端末１０２の認証を行わないことが多い。
【００２０】
一方、サービスプロバイダ１０４は、サービスの提供時に、ユーザ端末１０２の所有者が正当なサービス利用者であることを確認する。ユーザ端末１０２は、何らかの秘密情報を所持していることを証明し、正当なサービス利用者であることをサービスプロバイダ１０４に示す。
【００２１】
ユーザ端末１０２は、正規のユーザ端末であることをサービスプロバイダ１０４に証明するための、パスワード、秘密鍵、もしくは一時的に取り込まれたユーザ生体情報などの秘密情報１０５を格納している。ユーザ端末１０２は、秘密情報１０５を保護するための難読化に用いられる難読化用パラメータ１０６も保持する。難読化は、難読化用パラメータ１０６を使用してアプリを符号化し、解析を困難にする。難読化及び難読化用パラメータ１０６の詳細は後述する。
【００２２】
図２は、本実施例の鍵初期化及び鍵更新のプロトコルを示すシーケンス図である。以下、図２を参照してプロトコルを説明する。サービスプロバイダ１０４は、アプリに対して固定のパラメータを用いて難読化処理を施し、アプリと難読化機能とを組み合わせる（２０１）。
【００２３】
難読化されたアプリは、難読化のために符号化されたアプリと、難読化（アプリの符号化／復号）ためのプログラム（の少なくとも一部）を含んで構成される。なお、以下の記載において、特に言及のない場合、「機能」はプログラム（プログラムモジュール）示す。難読化は、アプリを保護するために符号化する。また、以下に説明する例において、難読化用パラメータは、難読化用秘密鍵とする。難読化は、鍵を使用する暗号化と異なる符号化を使用することができる。
【００２４】
次に、サービスプロバイダ１０４は、アプリ配信サーバ１０３に対してアプリ登録要求を送信し、難読化したアプリを、アプリ配信サーバ１０３に登録する（２０２）。なお、サービスプロバイダ１０４は、アプリを、難読化することなく、アプリ配信サーバ１０３に登録してもよい。
【００２５】
次に、以下のように、難読化されたアプリが、アプリ配信サーバ１０３からユーザ端末１０２にダウンロードされる。まず、ユーザ端末１０２はアプリ配信サーバ１０３に対してアプリダウンロード要求を送信する（２０３）。さらに、アプリ配信サーバ１０３は、アプリダウンロード要求を受信すると、ユーザ端末１０２に、登録されている難読化されたアプリを送信する（２０４）。
【００２６】
次に、ユーザ端末１０２は、ダウンロードされたアプリのためのパラメータを初期化する。特に、ユーザ端末１０２は、端末固有情報、システムログ、通信ログなどの初期化用パラメータを入力として難読化用秘密鍵１０６を生成し、難読化処理を施す（２０５）。
【００２７】
本例において、難読化用秘密鍵１０６は、アプリを暗号化／復号するための鍵である。ユーザ端末１０２は、ダウンロードされたアプリを上記固定のパラメータを使用して復号し、さらに、生成した難読化用秘密鍵１０６を使用してアプリを暗号化する。ユーザ端末１０２は、暗号化されたアプリと難読化機能とを含む、難読化されたアプリのイメージデータを生成し、記憶装置に格納する。固定のパラメータは、例えば、ユーザ端末１０２に予め設定されている、又は、アプリ配信サーバ１０３から送信される。
【００２８】
次に、以下のように、ユーザ登録が実行される。まず、ユーザ１０１は、アプリをインストールしたユーザ端末１０２を介して、サービスプロバイダ１０４にユーザ登録を行う（２０６）。ユーザ端末１０２とサービスプロバイダ１０４とは、通信路を保護するための鍵を共有する（２０７）。さらに、ユーザ端末１０２は、共有した鍵データ及び／又は他のデータを用いて、難読化用秘密鍵１０６を更新する（２０８）。
【００２９】
ユーザ登録の後、ユーザ１０１は、ユーザ端末１０２を介してサービスプロバイダ１０４と暗号通信を行い、サービスを利用する（２０９）。
【００３０】
以下のようにサービス利用のための鍵及び難読化のための鍵が更新される。まず、ユーザ端末１０２は、サービスプロバイダ１０４と通信を行い、通信路保護（サービス利用）のための秘密鍵を更新する（２１０）。さらに、ユーザ端末１０２は、更新した鍵データ及び／又は他のデータを用いて、難読化用秘密鍵１０６を更新する（２１１）。
【００３１】
ユーザ端末１０２は、更新した難読化用秘密鍵１０６を使用して、アプリに対して難読化処理を実行する。具体的には、ユーザ端末１０２は、更新した難読化用秘密鍵１０６を使用してアプリを暗号化し、暗号化されたアプリと難読化機能とを組み合わせて、難読化されたアプリのイメージデータを生成し、記憶装置に格納する。イメージデータは、実行プログラム又はファイルである。
【００３２】
図３は、本実施例に係るシステムのハードウェア構成を表す図である。アプリ配信サーバ１０３とユーザ端末１０２は、ネットワーク３２１を介して通信を行う。アプリ配信サーバ１０３及びユーザ端末１０２は、それぞれ、典型的な計算機構成を有することができる。サービスプロバイダ１０４のサーバも同様に、典型的な計算機構成を有することができる。
【００３３】
アプリ配信サーバ１０３は、通信装置３０１、プロセッサであるＣＰＵ３０２、メモリ３０３、及び記憶装置３０４を含む。記憶装置３０４は、難読化されたアプリ３０５を格納している。アプリは、端末１０２で実行可能なプログラムである。メモリ３０３は、ＣＰＵ３０２により実行されるプログラム及びプログラムに使用されるデータを格納する。ＣＰＵ３０２は、プログラムに従って動作することで、所定の手段として機能する。
【００３４】
ユーザ端末１０２は、通信装置３１１、プロセッサであるＣＰＵ３１２、メモリ３１３、記憶装置３１４を含む。メモリ３１３は、ＣＰＵ３１２により実行されるプログラム及びプログラムに使用されるデータを格納する。ＣＰＵ３１２は、プログラムに従って動作することで、所定の機能（プログラムではない）を実現する。以下において、特に言及がない場合、ユーザ端末１０２による処理は、ＣＰＵ３１２により実行される。
【００３５】
記憶装置３１４は、難読化されたアプリである、端末固有のアプリイメージ３１５及びアプリイメージ３１５のハッシュ値３１７を格納している。ユーザ端末１０２は、アプリ配信サーバ１０３からダウンロードしたアプリに難読化処理を実行し、難読化されたアプリ３１５を、記憶装置３１４に格納する。
【００３６】
難読化処理は、初期化用パラメータ３１６を使用して、難読化用秘密鍵（難読化用パラメータ）１０６を生成する。初期化用パラメータ３１６は、上述のように、例えば、端末固有情報、及び／又はシステムログ、通信ログである。ハッシュ値３１７は、アプリイメージ３１５から所定のハッシュ関数により計算される。
【００３７】
図４は、記憶装置３１４に格納されているデータに対するアクセス権限を示す概念図である。記憶装置３１４の記憶領域は２つの記憶領域を含んで構成されている。１つは、一般ユーザ（又はユーザプログラム）が、データの読み取りおよびプログラムの実行が可能な第１記憶領域４０１（システム領域）である。もう１つは、一般ユーザがデータの読み取り、書き込み、プログラムの実行について権限を持つ第２記憶領域４０２（ユーザ領域）である。一般権限のユーザによるデータの書き込み（更新）は、第１記憶領域４０１において禁止されており、第２記憶領域４０２において許可されている。
【００３８】
端末固有のアプリイメージ３１５は、第２記憶領域４０２格納される。また、端末固有のアプリイメージ３１５のハッシュ値３１７と、難読化されたアプリ３０５に含まれるブートローダ４１１及びハッシュ関数４１２とは、第１記憶領域４０１に格納される。ハッシュ関数４１２は、予め、ユーザ端末１０２にインストールされていてもよい。第１記憶領域４０１に格納されるデータ又はプログラムは、難読化用秘密鍵の更新によって書き換えられることが無い。一方、第２記憶領域４０２に格納されるデータ又はプログラムは、難読化用秘密鍵の更新によって更新され得るデータである。
【００３９】
図５は、ユーザ端末１０２へアプリのダウンロード及び格納の処理を表すフローチャートである。まず、ユーザ端末１０２とアプリ配信サーバ１０３とは、暗号通信を確立する（５０１）。通信方式としては、例えばＴＬＳ（Ｔｒａｎｓｐｏｒｔ  Ｌａｙｅｒ  Ｓｅｃｕｒｉｔｙ）を用いればよい。次に、ユーザ端末１０２は、アプリ配信サーバ１０３にアプリダウンロード要求を送信する（５０２）。
【００４０】
アプリ配信サーバ１０３は、ユーザ端末１０２のアプリダウンロード要求に対して、対象の難読化されたアプリ３０５を端末１０２に送信する（５０３）。ユーザ端末１０２は、アプリ３０５のインストーラを実行する（Ｓ５０４）。アプリ３０５は、ブートローダ４１１及びハッシュ関数４１２を含む。
【００４１】
ユーザ端末１０２は、ＭＡＣアドレスやＣＰＵ番号、ＯＳのバージョン情報などのユーザ端末１０２の固有の値や、現在の日時情報、システムログなどを初期化用パラメータ３１６として、端末固有のアプリイメージ３１５を作成する（５０５）。ユーザ端末１０２は、さらに、生成したアプリイメージ３１５のハッシュ値３１７を、ハッシュ関数４１２を使用して計算する。
【００４２】
ユーザ端末１０２は、生成したアプリイメージ３１５を第２記憶領域４０２に格納する（５０６）。ユーザ端末１０２は、生成したハッシュ値３１７、ブートローダ４１１及びハッシュ関数４１２を、第１記憶領域４０１に格納する。
【００４３】
アプリイメージ３１５の安全性は、保存されているハッシュ値３１７の長さに依存する。ハッシュ値３１７が長すぎると、正当なプログラムが、ハッシュ値が一致する数値を見つける後述の処理に、許容できない時間を要する。一方、ハッシュ値３１７が短すぎると、マルウェアが簡単にアプリイメージ３１５を改ざんすることが可能になる。
【００４４】
そこで、ユーザ端末１０２（の所定のプログラム）は、インストール時に、ユーザ端末の１０２ベンチマークテストを行ってもよい。ベンチマークテストは、たとえば、特定長さのハッシュ値の算出のために、ハッシュ関数４１２を所定回数実行するための時間を計測する。ベンチマークの結果と、予め定められたセキュリティレベルに基づき、ユーザ端末１０２は、保存するハッシュ値３１７の長さを決定する。たとえば、測定時間が閾値未満の最も長いハッシュ値の長さが選択される。
【００４５】
アプリイメージ３１５の生成において、ユーザ端末１０２は、初期化用パラメータ３１６を使用して、難読化用秘密鍵１０６を生成する。ユーザ端末１０２は、難読化されたアプリ３０５における暗号化されたアプリを復号化し、さらに、難読化用秘密鍵１０６によりアプリを暗号化する。ユーザ端末１０２は、暗号化されたアプリと難読化のための機能とを含むアプリイメージ３１５を生成する。例えば、ユーザ端末１０２のインストーラが上記処理を実行する。
【００４６】
なお、インストーラは、初期化用パラメータ３１６をＳＨＡ−２５６などのハッシュ関数に入力し、その出力を乱数生成器のシードとして用い、得られた乱数を用いてｄｌｌのメモリ配置のランダム化を実行してもよい。インストーラは、得られた乱数を秘密鍵として、アプリを暗号化してもよい。結果として得られたアプリイメージ３１５の実体は、端末ごとに異なるため、マルウェアによる攻撃感染リスクを軽減することができる。
【００４７】
また、インストーラは、初期化用パラメータとして、暗号通信における秘密鍵から導出される値を使用してもよい。例えば、ＤＨ（Ｄｉｆｆｉｅ−Ｈｅｌｌｍａｎ）鍵共有を使用している場合、ＤＨ  ｅｘｐｏｎｅｎｔは端末のみが知っている秘密情報であるため、通信相手のサーバも初期化されたアプリを推定することはできない。
【００４８】
次に、図６、図７を用いて、本実施例における、アプリの実行プロセスについて説明する。図６は、本実施例における、アプリを実行するための機能構成例を示す図である。ユーザ端末１０２は、アプリの実行時に起動されるブートローダ４１１、ハッシュ関数４１２、アプリイメージのハッシュ値３１７、及びアプリイメージ３１５を含む。
【００４９】
ブートローダ４１１は、処理対象データ６０１を受け取ると、アプリイメージ３１５を実行し、処理結果６０２を出力する（処理シーケンス詳細は後述する）。ブートローダ４１１は、実行時にシステム情報、時刻情報６２１を用いる。システム情報、時刻情報６２１は、例えば、第１記憶領域４０１に格納されている。
【００５０】
アプリイメージ３１５は、難読化されたアプリデータ６１１及び含み難読化用秘密鍵６１６の有効期限６１４を含む。難読化されたアプリデータ６１１は、難読化された、本来のアプリ機能６１５と難読化用秘密鍵６１６、そしてデコーダ６１７を含んで構成される。
【００５１】
図７は、アプリの実行処理を示すフロー図である。ブートローダ４１１は、システム情報、時刻情報６２１を取得する（７０１）。ブートローダ４１１は、難読化用秘密鍵６１６の有効期限６１４とシステム情報、時刻情報６２１とを比較し、難読化用秘密鍵６１６が有効であるか確認する（７０２）。難読化用秘密鍵６１６が失効している場合には（７０２：Ｎｏ）、ブートローダ４１１は、サービスプロバイダ１０４に対して難読化用秘密鍵の更新要求を送信し（７０３）、処理を終了する。
【００５２】
難読化用秘密鍵６１６が有効である場合には（７０２：Ｙｅｓ）、ブートローダ４１１は、ハッシュ関数４１２を用いて、アプリイメージ３１５のハッシュ値を計算する（７０４）。
【００５３】
ブートローダ４１１は、計算したハッシュ値が、第１記憶領域４０１に保存されているハッシュ値３１７と一致しているか確認する（７０５）。二つのハッシュ値が一致していない場合には（７０５：Ｎｏ）、ブートローダ４１１は、アプリイメージ３１５が改ざんされていると判定し、ユーザに通知し（７０６）、処理を終了する。
【００５４】
二つのハッシュ値が一致している場合には（７０５：Ｙｅｓ）、ブートローダ４１１は、デコーダ６１７を実行し、デコーダ６１７は、アプリ本来の機能６１５と難読化用秘密鍵６１６をデコードする（７０７）。デコードされたアプリ本来の機能６１５は、処理対象データ６０１を処理し、処理結果６０２を出力する（７０８）。
【００５５】
このように、アプリイメージのハッシュ値を計算して、マルウェアによる書き込みが禁止されている記憶領域に保存されているハッシュ値と比較することで、マルウェアによるアプリイメージの改ざんを妨げることができる。アプリを起動して、システムの時刻情報と、難読化用秘密鍵の有効期限とを比較し、有効期限が切れていないことを確認してから、暗号通信を行うことで、古いアプリイメージと差し替える攻撃を妨げることができる。
【００５６】
次に、図８、図９を用いて、本実施例における、アプリの鍵更新について説明する。図８は、本実施例において鍵更新を行う機能構成例を示す図である。ユーザ端末１０２は、乱数生成機能８１１、ハッシュ関数４１２、アプリのブートローダ４１１を含む。
【００５７】
アプリイメージ３１５は記憶装置３１４の第２記憶領域４０２に格納され、ハッシュ値３１７は、第１記憶領域４０１に格納されている。アプリイメージ３１５は、難読化されたアプリデータ６１１の他に、更新用データチェック機能８１２及びアプリイメージ生成機能８１３の機能を含み、難読化用秘密鍵６１６の有効期限８２１をデータとして保持している。
【００５８】
乱数８２２は、乱数生成機能８１１が生成するデータである。ネットワーク３２１を介して受信する暗号通信・認証機能の更新用データ８０１は、更新用鍵データ８２３と、更新用鍵データ８２３の有効期限２（８２４）と、を含む。
【００５９】
図９は、本実施例において鍵更新処理を示すフロー図である。ユーザ端末１０２は、ネットワーク３２１を介して更新用データ８０１を受信する（９０１）。ブートローダ４１１は、更新用データチェック機能８１２を用いて、受信した更新用鍵データ８２３及び難読化用秘密鍵の有効期限２（８２４）が改ざんされていないことをチェックする（９０２）。
【００６０】
更新用データチェック機能８１２は、たとえば、暗号通信で用いるＭＡＣ（Ｍｅｓｓａｇｅ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ  Ｃｏｄｅ）機能を使用する。改ざんが検出された場合には（９０２：不正）、ブートローダ４１１は、受信失敗をサービスプロバイダ１０４に通知し（９０３）、更新を中断する。
【００６１】
改ざんが検出されない場合には（９０２：正当）、ブートローダ４１１は、古いアプリイメージ３１５と更新用データ８０１とを、アプリイメージ生成機能８１３に入力し、新しいアプリイメージ８３１を生成する（９０４）。ブートローダ４１１は、乱数生成機能８１１を用いて、乱数８２２を生成する（９０５）。
【００６２】
乱数８２２は、所定の長さを有する。ブートローダ４１１は、生成した乱数８２２と、ステップ９０４で生成した新しいアプリイメージ８３１とを、ハッシュ関数６３１に入力し、ハッシュ値を計算する（９０６）。たとえば、ハッシュ関数４１２は、結合された乱数８２２とアプリイメージ８３１とから、ハッシュ値を計算する。ハッシュ関数４１２は、乱数８２２からハッシュ値を計算し、さらに、結合されたハッシュ値とアプリイメージ８３１とから、ハッシュ値を計算してもよい。
【００６３】
一例において、乱数８２２とアプリイメージ８３１の結合は、アプリイメージ８３１の前に乱数８２２置く。これにより、マルウェアが、外部にアプリイメージのハッシュ値を送信し、外部のリソースを使用して異なる乱数に対応するハッシュ値を計算する攻撃を、防ぐことができる。
【００６４】
生成したハッシュ値が、第１記憶領域４０１に格納されているハッシュ値３１７と一致しない場合には（９０７：Ｎｏ）、ブートローダ４１１は、ステップ４に戻る。ブートローダ４１１は、第２記憶領域４０２において、古いアプリイメージ３１５を、乱数８２２と新しいアプリイメージ８３１を結合したデータ（格納される新しいアプリイメージ）で上書きする（９０８）。ブートローダ４１１は、鍵更新の成功をサービスプロバイダ１０４に通知する（９０９）。
【００６５】
上述のように、ブートローダ４１１は、乱数を更新されたアプリイメージに結合することで、アプリイメージのハッシュ値と保存されているハッシュ値とを一致させる。乱数を使用することで、改ざんに対するセキュリティを高めることができる。ブートローダ４１１は、乱数とは異なる種類の数値を使用してもよい。たとえば、ブートローダ４１１は、所定長さの値を出力する所定の関数や、所定数のインクリメントを示すカウンタを使用してもよい。これらは、たとえば、第１記憶領域４０１に格納される。
【００６６】
なお、第１記憶領域４０１に格納されているブートローダ４１１、乱数生成機能８１１、ハッシュ関数４１２、ハッシュ値３１７は、アプリが正式の手続きを経て特権を獲得した場合（アプリのアップデートなど）、更新されてもよい。
【００６７】
マルウェアが本実施例のシステムにおいてアプリイメージの改ざんを試みる場合、多量のハッシュ関数による計算を行う必要がある。そこで、一例において、ユーザ端末１０２（の特定のプログラム）は、ＣＰＵモニタを利用し、１つの難読化用秘密鍵を使い続ける期間において、総ＣＰＵ利用時間が所定の値を超えるプログラムを監視する。これにより、マルウェアを検知することができる。
【００６８】
ブートローダ４１１は、更新用データ８０１の改ざん検知の際に、新しい難読化用秘密鍵の有効期限２（８２４）をシステムの時刻情報（現在の日時を示す）と比較して、新しい難読化用秘密鍵の有効性をチェックしてもよい。これにより、古い更新データを用いてプログラムの更新を実行させようとする攻撃を防止することができる。
【００６９】
上記例は、ハッシュ値を使用して、更新可能パラメータとして秘密鍵を含む難読化されたアプリイメージの改ざんを妨げる。本実施例及び以下に説明する他の実施例は、秘密鍵を含む難読化されたアプリイメージと異なる、更新可能パラメータを含むプログラムに適用することができる。
【実施例２】
【００７０】
実施例１は、アプリイメージのインストールにおいて、単一のハッシュ値を生成、格納する。これに代えて、実施例２は、インストール時に、複数のハッシュ値を生成、格納する。これにより、アプリイメージの更新時のハッシュ値の計算回数を削減する、又はハッシュ値を長くして安全性を改善することができる。
【００７１】
アプリイメージのインストーラは、図５のステップ５０５において、アプリイメージのハッシュ値を計算するのではなく、乱数をｋ（ｋは２以上の整数）個生成し、それぞれの乱数とアプリイメージを入力としてハッシュ関数を計算し、乱数とハッシュ値のペアのリストを第１記憶領域４０１に保存する。異なる乱数のハッシュ値が同じ値である場合には、インストーラは、一つのペアのみをリストに残す。なお、リストにおいて乱数は省略されてもよい。実施例１と同様に、乱数と異なる種類の数値が使用されてもよい。
【００７２】
インストーラは、リストから選択した一つのエントリの乱数とアプリイメージとを結合して、第２記憶領域４０２に格納する。インストーラは、現在のハッシュ値の識別子（たとえばリスト内番号）を、たとえば、第２記憶領域４０２に格納する。
【００７３】
ブートローダ４１１は、アプリ実行時、第２記憶領域４０２に格納されているアプリイメージ１３５のハッシュ値を計算し、計算したハッシュ値と、第１記憶領域４０１におけるリストの現在のハッシュ値とを比較して、アプリイメージの改ざんをチェックする。
【００７４】
図１０は、実施例２におけるアプリの更新のフローを示すフロー図である。実施例２の更新フローは、実施例１の図９に示す更新フローに準じているが、本更新フローは、図９に示す更新フローのステップ９０５、９０６、９０７の処理が異なる。以下においては、実施例１との相違点を主に説明する。
【００７５】
ステップ１００４において（実施例１ステップ９０４に対応）、ブートローダ４１１は、古いアプリイメージ３１５と更新用データ８０１とをアプリイメージ生成機能８１３に入力し、新しいアプリイメージ８３１を生成する。
【００７６】
ステップ１００５において、ブートローダ４１１は乱数生成機能８１１を用いて、乱数をｍ（ｍは１以上の整数）個生成する。ステップ１００６において、ブートローダ４１１は、生成したｍ個の乱数８２２それぞれと、ステップ１００４で生成した新しいアプリイメージ８３１とをハッシュ関数４１２に入力し、ｍ個のハッシュ値を計算する。
【００７７】
ステップ１００７において、ブートローダ４１１は、ステップ１００６で生成したｍ個のハッシュ値と、保存されているｋ個のハッシュ値を１つのリストに纏め、ハッシュ値をキーとして昇順又は降順でソートする。このリストのエントリは、ハッシュ値の他に、乱数の値、及び新しく生成された値かどうかを示すフラグを含む。
【００７８】
ステップ１００８において、ブートローダ４１１は、ステップ１００７でソートしたリストから、同じハッシュ値を有するエントリを探す。見つからない場合には（１００８：Ｎｏ）、ブートローダ４１１は、ステップ１００５に戻る。また、見つかった場合であっても、いずれも新しく生成されたハッシュ値である場合には、ブートローダ４１１は、ステップ１００５に戻る。
【００７９】
保存されている一つのハッシュ値と一致する新たに生成したハッシュ値が見つかると（１００８：Ｙｅｓ）、ステップ１００９において、ブートローダ４１１は、古いアプリイメージ３１５を、見つけたハッシュ値に対応する乱数８２２と新しいアプリイメージ８３１とを結合したデータで、上書きする。
【００８０】
本実施例は、保存された複数のハッシュ値と更新したアプリイメージの１以上のハッシュ値とを比較することで、効率的に更新したアプリイメージに結合する乱数を決定することができ、ハッシュ値の計算回数を低減する又は同一計算量でハッシュ値を長くすることができる。更新したアプリイメージの複数のハッシュ値と保存された複数のハッシュ値を比較することで、より効率的に更新したアプリイメージに結合する乱数を決定することができる。
【００８１】
本実施例は、正規のユーザプログラムとマルウェアとで、利用可能なメモリ量に差異があることを利用して、安全性を高めることができる。たとえば、ステップ１００７でハッシュ値のリストをソートする際に利用可能なメモリ量が異なるため、マルウェアは正規のユーザプログラムと比べてステップ１００５〜１００８のループ処理を多くの回数実行することになる。メモリ量に対する制限は攻撃に要する時間に変換されるので、ハッシュ値の長さが実施例１と同じ場合であっても、マルウェアと正規ユーザが衝突を見つけるまでに要する時間の差が大きくなる。
【００８２】
なお、一例において、インストール時に保存するハッシュ値のリストは、ソートされていない状態（ソートされた順序と異なる順序）に維持される。ソートされていないことで、（ハッシュ値の長さを固定すれば）更新時のユーザ負荷が増加するが、それ以上にマルウェアが改ざんを成功させるためのコストが増加する。すなわち、相対的にユーザプログラムの計算負荷は軽減される。
【００８３】
マルウェアが本実施例のシステムにおいてアプリイメージの改ざんを試みる場合、大量のハッシュ関数計算を行うと同時に、メモリ上に大量のデータを置いてソートを行う必要がある。メモリを少量しか使わない探索アルゴリズムもあるが、全体の計算コストが増大するというペナルティを受ける。
【００８４】
一例において、ユーザ端末１０２（特定のプログラム）は、メモリモニタを利用し、１つの難読化用鍵を使い続ける期間において、メモリの占有量×時間が所定の値を超えるプログラムを監視する。これにより、マルウェアを検知することができる。
【００８５】
さらに、ＣＰＵモニタから得られる情報と合わせて、メモリ消費が所定値を超える場合のＣＰＵ負荷を計測することで、より適切に改ざんを試みるマルウェアを検出することができる。ウェブブラウザのように、ＣＰＵとメモリを大量に消費する一般的な他のアプリが存在するが、これらのアプリは事前にホワイトリストに登録しておくことで、マルウェアの誤検出の可能性を低下させることができる。
【実施例３】
【００８６】
次に、マルウェアが外部の攻撃者と通信できる場合を考える。攻撃者はクラウドなど大量の１つの端末が持つ以上の）計算リソースを利用可能である。実施例１、２に説明した方法だけでは、上術のような攻撃者に対して十分な安全性を保証できない場合もあり得る。
【００８７】
つまり、マルウェアが外部の攻撃者に、アプリイメージとハッシュ値の対を送付することで、外部の攻撃者は潤沢な計算リソースを使って、付与すべき乱数を見つけることができるかもしれない。このような攻撃者に対するより効果的な対策方針として、「マルウェアが大量のデータ送受信を行えば、それを検出できる（ｉｎｃｏｍｐｒｅｓｓｉｂｉｌｉｔｙ）」という性質に基づく技術が知られている。
【００８８】
実施例１、２は、ハッシュ関数を使った構成について説明した。しかし、通常のハッシュ関数は秘密情報を持たないため、原理的にｉｎｃｏｍｐｒｅｓｓｉｂｉｌｉｔｙを満たさない。ブロック暗号と、一般的なＭＡＣ（Ｍｅｓｓａｇｅ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ  Ｃｏｄｅ）の構成法であるＣＭＡＣを組み合わせた場合、この構成もｉｎｃｏｍｐｒｅｓｓｉｂｉｌｉｔｙを満たさない。
【００８９】
本実施例は、図１１を参照して、データの特徴値を検出するために秘密情報を利用するメッセージ認証子を用いた構成について説明する。本実施例は、鍵付きハッシュ関数（Ｋｅｙｅｄ  Ｈａｓｈｉｎｇ  ｆｏｒ  Ｍｅｓｓａｇｅ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ  Ｃｏｄｅ）を使用して、ハッシュ値を計算する。
【００９０】
図１１において、ブロック暗号１１０１を、ブロック長２ｎビットのブロック暗号のｉｎｃｏｍｐｒｅｓｓｉｂｉｌｉｔｙを満たすプログラムとする。ユーザ端末１０２（ＣＰＵ３１２）は、入力データ（ここではアプリイメージ３１５）に適切なパディングを施し、データ長をｎビットの倍数とし、ｎビットのデータブロックＭ［１］、Ｍ［２］、．．．、Ｍ［ｋ］に分割する。
【００９１】
あらかじめ定められたｎビットの定数Ｃ１１０２と最初のデータブロックＭ［１］１１０３を結合する。ユーザ端末１０２は、結合したデータをブロック暗号１１０１に入力し、出力の下位ｎビットを廃棄する。
【００９２】
ユーザ端末１０２は、出力の上位ｎビットと次のデータブロックＭ［２］１１０３を結合して、ブロック暗号１１０１に入力する。ユーザ端末１０２は、以下、ブロック暗号１１０１の出力の上位ｎビットと次のデータブロック１１０３を結合したデータをブロック暗号１１０１に入力することを繰り返す。ユーザ端末１０２は、最後のブロック暗号１１０１の出力の上位ｎビットをＭＡＣ値Ｔ（ハッシュ値）１１０４として出力する。
【００９３】
攻撃者がＭＡＣ値の計算を行うには、ブロック暗号の秘密鍵が必要である。しかし、ユーザ端末１０２内にあるブロック暗号のプログラム１１０１は、ｉｎｃｏｍｐｒｅｓｓｉｂｉｌｉｔｙを満たすので、秘密鍵を完全に取り出すことができない。したがって、攻撃者は、マルウェアを介してアプリイメージ３１５のハッシュ値３１７や暗号処理の中間状態を入手したとしても、（これまでに計算されたことがある）特定の入力に対してのみＭＡＣ値を計算可能である。したがって、攻撃者は、計算リソースを費やしてもＭＡＣ値の衝突を見つけることができない。
【００９４】
本実施例で説明したＭＡＣ値計算アルゴリズムで、実施例１のハッシュ関数４１２を代替することにより、外部の計算リソースを利用するマルウェアに対してもより効果的に改ざんを妨げることができる。
【００９５】
なお、最後のブロックの処理において、上位ｎビットに対して、あらかじめ定められた（ゼロではない）定数を加算してもよい。これにより、ｌｅｎｇｔｈ  ｅｘｔｅｎｓｉｏｎ  ａｔｔａｃｋを防止することができる。加算の代わりに減算や排他的論理和など全単射となる他の演算を用いてもよい。
【００９６】
図１２に示すように、ブロック暗号の処理の出力の半分を廃棄する代わりに、次のデータブロックと排他的論理和を計算してもよい。具体的には、ユーザ端末１０２、ユーザ端末１０２（ＣＰＵ３１２）は、入力データに適切なパディングを施し、データ長をｎビット（ｎは自然数）の倍数とし、ｎビットのデータブロックＭ［１］、Ｍ［２］、．．．、Ｍ［ｋ］に分割する。
【００９７】
ユーザ端末１０２は、あらかじめ定められたｎビットの定数Ｃ１と、ｎビットの定数Ｃ２と最初のデータブロックＭ［１］の排他的論理和と、を結合し、ブロック暗号に入力する。ユーザ端末１０２は、ブロック番号の出力の下位ｎビットと次のデータブロックとの排他的論理和を計算する。ユーザ端末１０２は、ブロック暗号の上位ｎビットと排他的論理和とを結合して、ブロック暗号に入力する。ユーザ端末１０２は、上位ｎビットと、下位ｎビットと次のデータブロックの排他的論理和を結合したデータのブロック暗号の計算を繰り返し、最後に、下位ｎビットをＭＡＣ値（ハッシュ値）として出力する。
【００９８】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明したすべての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【００９９】
また、上記の各構成・機能・処理部等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記録装置、または、ＩＣカード、ＳＤカード等の記録媒体に置くことができる。また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしもすべての制御線や情報線を示しているとは限らない。実際には殆どすべての構成が相互に接続されていると考えてもよい。
【符号の説明】
【０１００】
１０１  ユーザ、１０２  ユーザ端末、１０３  アプリ配信サーバ、１０４  サービスプロバイダ、１０５  秘密情報、３０１  通信装置、３０２  ＣＰＵ、３０３  メモリ、３０４  記憶装置、３０５  難読化されたアプリ、３１１  通信装置、３１２  ＣＰＵ、３１３  メモリ、３１４  記憶装置、３１５  アプリイメージ、３１６  初期化用パラメータ、３１７  ハッシュ値、４０１  第１記憶領域、４０２  第２記憶領域、４１１  ブートローダ、４１２  ハッシュ関数、６０１  処理対象データ、６０２  処理結果、６１４  難読化用秘密鍵６１６の有効期限、６１１  難読化されたアプリデータ、６１５  本来のアプリ機能、６１７  デコーダ、８０１  暗号通信・認証機能の更新用鍵データ、８１２  更新用データチェック機能、８２１  難読化用秘密鍵６１６の有効期限、８２４  更新用鍵データ８２３の有効期限２、１１０１  ブロック暗号、１１０３  データブロック、１１０４  ＭＡＣ値Ｔ
【図１】
2018088574.tif 000003
【図２】
2018088574.tif 000004
【図３】
2018088574.tif 000005
【図４】
2018088574.tif 000006
【図５】
2018088574.tif 000007
【図６】
2018088574.tif 000008
【図７】
2018088574.tif 000009
【図８】
2018088574.tif 000010
【図９】
2018088574.tif 000011
【図１０】
2018088574.tif 000012
【図１１】
2018088574.tif 000013
【図１２】
2018088574.tif 000014