(57)【要約】【課題】暗号演算コプロセッサを備えたセキュアエレメントにおいて，暗号パラメータを変更せずに複数回の暗号演算を実行する場合，暗号パラメータを暗号演算コプロセッサに入力する処理が一回で済むようにする。【解決手段】セキュアエレメント１は，暗号演算コプロセッサ１０６に暗号パラメータを入力すると，この暗号パラメータのチェックコードを同一性確認用のチェックコードとしてメモリに保存し，暗号パラメータを暗号演算コプロセッサ１０６に入力する前に，暗号演算コプロセッサ１０６に入力する暗号パラメータのチェックコードと，この時点でメモリに保存されている同一性確認用のチェックコードを比較し，これらのチェックコードが一致すると，暗号パラメータを暗号演算コプロセッサ１０６に入力しない動作を行う暗号演算部を備えている。【選択図】図２
2020194997.tif 000002
【特許請求の範囲】
【請求項１】
数式を定義する暗号パラメータを必要とする暗号演算に係る処理を行う暗号演算コプロセッサと，前記暗号演算コプロセッサを利用して前記暗号演算を行う暗号演算部を備え，前記暗号演算部は，前記暗号演算コプロセッサに前記暗号パラメータを入力すると，この前記暗号パラメータのチェックコードを同一性確認用のチェックコードとしてメモリに保存し，前記同一性確認用のチェックコードとしてメモリに保存した状態で，前記暗号パラメータを前記暗号演算コプロセッサに入力する場合，前記暗号パラメータを前記暗号演算コプロセッサに入力する前に，前記暗号演算コプロセッサに入力する前記暗号パラメータのチェックコードと，この時点でメモリに保存されている前記同一性確認用のチェックコードを比較し，これらのチェックコードが一致すると，前記暗号パラメータを前記暗号演算コプロセッサに入力しない動作を行うことを特徴とするセキュアエレメント。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，耐タンパー性を有するワンチップマイコンであるセキュアエレメントに関する。
【背景技術】
【０００２】
セキュアエレメントは，耐タンパー性を有するワンチップマイコンである。セキュアエレメントには，特定のシステム（例えば，決済システム）で利用され，複数回の暗号演算（暗号化または復号）を必要とする一連のシーケンスを実行するアプリケーションが実装される。
【０００３】
セキュアエレメントは，暗号演算の高速化を図るため，ＣＰＵ（Central Processing Unit）に代わって暗号演算を行う暗号演算コプロセッサを備える。例えば，特許文献１で開示されている半導体処理装置（ＩＣカード）は，ＲＳＡや楕円曲線暗号に係る剰余演算をＣＰＵに代わって行う暗号演算コプロセッサを備えている。
【０００４】
数式を定義する暗号パラメータを必要とする暗号演算の場合，暗号演算コプロセッサを用いた暗号演算を行う前に，暗号演算で必要な暗号パラメータを暗号演算コプロセッサに入力することが必要になる。例えば，特許文献２で開示されている楕円積和演算計算装置は，楕円積和演算を行う際，楕円積和演算に必要な暗号パラメータＰ，Ｑ，Ｒ，ａ，ｂ，ｃなどを演算回路に設定し，Ｔ＝ａＰ＋ｂＱ＋ｃＲを演算回路に計算させる。
【０００５】
暗号演算に必要な暗号パラメータのデータ長が短い場合，暗号演算を行う毎に，暗号演算に必要な暗号パラメータ全てを暗号演算コプロセッサに入力しても，アプリケーションが実行するシーケンスに必要な時間はさほど変わらない。しかし，暗号演算に必要な暗号パラメータのデータ長が長い場合，暗号演算を行う毎に，暗号演算に必要な暗号パラメータ全てを暗号演算コプロセッサに入力すると，暗号演算に必要な暗号パラメータ全てを暗号演算コプロセッサに入力するための時間が，アプリケーションが実行するシーケンスに必要な時間が長くなる一つの要因になる。
【０００６】
ＲＦＣ５６３９で規定されている楕円曲線暗号で上記の問題を説明する。図４は，ＲＦＣ５６３９で規定されている楕円曲線暗号において，楕円曲線の定義に必要な暗号パラメータを説明する図である。ＲＦＣ５６３９で規定されている楕円曲線暗号に必要な暗号パラメータのビット数には１６０ビットもあるが，図６では，５１２ビットの暗号パラメータを図示している。
【０００７】
ＲＦＣ５６３９で規定されている楕円曲線暗号に必要な暗号パラメータは，ｐ（標数），Ａ（数式１の係数），Ｂ（数式1の係数），ｘ（ベースポイントのｘ座標の値），ｙ（ベースポイントのｙ座標の値），ｑ（素数位数），ｈ（補因子）を暗号パラメータとして含む。
【数１】
2020194997.tif 000003
【０００８】
図４で図示したように，ＲＦＣ５６３９で規定されている５１２ビットの楕円曲線暗号では，ｈ以外の６個の暗号パラメータはすべて５１２ビットになる。暗号パラメータを変更せずに複数回の楕円曲線暗号演算を実行する場合，６個の５１２ビットの暗号パラメータを暗号演算コプロセッサに入力する処理が一回で済めば，アプリケーションが実行するシーケンスに必要な時間を短縮できる。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００８−３１０９５０号公報
【特許文献２】特開２００４−２３３５３０号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
このことを鑑みて，本発明は，数式を定義する暗号パラメータを必要とする暗号演算に係る処理を行う暗号演算コプロセッサを備えたセキュアエレメントにおいて，暗号パラメータを変更せずに複数回の暗号演算を実行する場合，暗号パラメータを暗号演算コプロセッサに入力する処理が一回で済むようにすることを目的とする。
【課題を解決するための手段】
【００１１】
上述した課題を解決する第１発明は，数式を定義する暗号パラメータを必要とする暗号演算に係る処理を行う暗号演算コプロセッサと，前記暗号演算コプロセッサを利用して前記暗号演算を行う暗号演算部を備え，前記暗号演算部は，前記暗号演算コプロセッサに前記暗号パラメータを入力すると，この前記暗号パラメータのチェックコードを同一性確認用のチェックコードとしてメモリに保存し，前記同一性確認用のチェックコードとしてメモリに保存した状態で，前記暗号パラメータを前記暗号演算コプロセッサに入力する場合，前記暗号パラメータを前記暗号演算コプロセッサに入力する前に，前記暗号演算コプロセッサに入力する前記暗号パラメータのチェックコードと，この時点でメモリに保存されている前記同一性確認用のチェックコードを比較し，これらのチェックコードが一致すると，前記暗号パラメータを前記暗号演算コプロセッサに入力しない動作を行うことを特徴とするセキュアエレメントである。
【発明の効果】
【００１２】
本発明に係るセキュアエレメントによれば，暗号演算コプロセッサに入力する暗号パラメータと，暗号演算コプロセッサに入力されている暗号パラメータが同一の場合，暗号パラメータを暗号演算コプロセッサに入力しないようにできる。
【図面の簡単な説明】
【００１３】
【図１】セキュアエレメントを説明する図。
【図２】セキュアエレメントのアーキテクチャを説明する図。
【図３】セキュアエレメントが備える暗号演算部の動作を説明する図。
【図４】楕円曲線暗号に必要な暗号パラメータを説明する図。
【発明を実施するための形態】
【００１４】
ここから，本発明に係る実施形態について記載する。本実施形態は，本発明の理解を容易にするためのものであり，本発明は，本実施形態に限定されるものではない。また，特に断りのない限り，図面は，本発明の理解を容易にするために描かれた模式的な図である。
【００１５】
図１は，本実施形態に係るセキュアエレメント１を説明する図である。セキュアエレメント１は耐タンパー性を有するワンチップマイコンである。図１で図示したように，セキュアエレメント１は，モバイル端末１ａ，ＳＩＭ１ｂ，ＩＣカード１ｃなど，セキュアな取引（例えば，決済取引）を行うための媒体や装置に実装される。
【００１６】
図２は，セキュアエレメント１のアーキテクチャを説明する図である。図２で図示したセキュアエレメント１のアーキテクチャには，ハードウェア１０，オペレーティングシステム１１およびアプリケーション１２を含んでいる。
【００１７】
セキュアエレメント１のハードウェア１０はワンチップマイコンになる。セキュアエレメント１のハードウェア１０では，中央演算処理装置であるＣＰＵ１０１（Central Processing Unit），メインメモリとなるＲＡＭ１０２（Random  Access  Memory），電気的に書き換え可能な不揮発性メモリであるＮＶＭ１０３（Non-volatile memory），時間を計測するＴｉｍｅｒ１０４および上位装置と接続するためのＩ／Ｏ１０５に加え，ＣＰＵ１０１に代わって所定の暗号演算を行う暗号演算コプロセッサ１０６がインターフェイス１０７に接続している。暗号演算コプロセッサ１０６に行わせる暗号演算は，数式を定義する暗号パラメータを必要とする暗号演算で，このような暗号演算としては楕円曲線暗号が有名である。
【００１８】
セキュアエレメント１のオペレーティングシステム１１は，ハードウェア１０を利用した機能を提供するソフトウェアである。アプリケーション１２は，複数回の暗号演算を必要とする一連のシーケンスを実行するソフトウェアで，オペレーティングシステム１１上で動作するソフトウェアである。
【００１９】
セキュアエレメント１のオペレーティングシステム１１は，ハードウェア１０を利用する様々な機能をアプリケーション１２に提供する。セキュアエレメント１は，この機能の一つとして，暗号演算コプロセッサ１０６に暗号演算を行わせる暗号演算部１１０と，暗号演算部１１０を利用するための複数種のＡＰＩ１１１（Application Programming Interface）を有している。暗号演算部１１０は，ＣＰＵ１０１を動作させるコンピュータプログラムで実現される機能で，オペレーティングシステム１１がアプリケーション１２に提供するライブラリに暗号演算部１１０を含ませることができる。
【００２０】
暗号演算部１１０を利用するためのＡＰＩ１１１の詳細仕様は任意である。ここでは，暗号パラメータを設定するＡＰＩ１１１，暗号鍵を設定するＡＰＩ１１１，演算対象データを設定するＡＰＩ１１１および暗号演算を実行させるＡＰＩ１１１が，暗号演算部１１０を利用するためのＡＰＩ１１１に含まれる。暗号パラメータを設定するＡＰＩ１１１は，暗号パラメータの種類ごとに用意されるのが一般的である。例えば，ＲＦＣ５６３９で規定されている楕円曲線暗号の場合，ｐ，Ａ，Ｂ，ｘ，ｙ，ｑおよびｈごとに，暗号パラメータを設定するＡＰＩ１１１が用意される。
【００２１】
オペレーティングシステム１１の暗号演算部１１０は，アプリケーションが実行するシーケンスに必要な時間の短縮を目的として，暗号パラメータを変更せずに複数回の暗号演算を実行する場合，暗号パラメータを暗号演算コプロセッサ１０６に入力する処理が一回で済むように構成されている。
【００２２】
暗号演算部１１０は，暗号パラメータの同一性確認に，暗号パラメータの特徴を示すデータであるチェックコードを利用する。本実施形態において，暗号パラメータの同一性確認とは，アプリケーション１２から引き渡され，暗号演算コプロセッサ１０６に入力する暗号パラメータと，暗号演算部１１０に設定されている暗号パラメータが同一であるか確認することを意味する。暗号パラメータの特徴を示すチェックコードとしては，例えば，多項式により演算されるＣＲＣ（Cyclic Redundancy Check）などの誤り検出符号や，ＳＨＡ２（Secure Hash Algorithm）などのハッシュ関数から演算されるハッシュ値を用いることができる。
【００２３】
暗号パラメータの同一性確認を実行できるように，暗号演算部１１０は，暗号演算コプロセッサ１０６に暗号パラメータを入力すると，この暗号パラメータのチェックコードを同一性確認用のチェックコードとしてメモリに保存する。同一性確認用のチェックコードはＲＡＭ１０２に格納するのが一般的であるが，同一性確認用のチェックコードはＮＶＭ１０３に格納することもできる。
【００２４】
暗号演算部１１０は，同一性確認用のチェックコードとしてメモリに保存した状態で，アプリケーション１２から引き渡された暗号パラメータを暗号演算コプロセッサ１０６に入力する場合，暗号パラメータを暗号演算部１１０に入力する前に，アプリケーション１２から引き渡された暗号パラメータのチェックコードと，この時点でメモリに保存されている同一性確認用のチェックコードと比較する。これらのチェックコードが一致すると，暗号演算部１１０は，アプリケーション１２から引き渡された暗号パラメータは暗号演算コプロセッサ１０６に入力されていると判断し，暗号パラメータを暗号演算コプロセッサ１０６に入力しない。
【００２５】
図３は，セキュアエレメント１が備える暗号演算部１１０の動作を説明する図である。暗号演算部１１０は，アプリケーション１２がＡＰＩ１１１の一つを呼び出すと起動し，アプリケーション１２が呼び出したＡＰＩ１１１の種類により処理を多岐分岐する（Ｓ１）。
【００２６】
アプリケーション１２が呼び出したＡＰＩ１１１が，暗号パラメータを設定するＡＰＩ１１１の場合，暗号演算部１１０は，暗号パラメータの設定に係る処理（Ｓ２）を実行する。暗号パラメータを設定するＡＰＩ１１１の引数には，暗号パラメータの種類と暗号パラメータそのものが含まれる。
【００２７】
暗号パラメータの設定に係る処理（Ｓ２）において，暗号演算部１１０は，まず，ＡＰＩ１１１を利用してアプリケーション１２から引き渡された暗号パラメータのチェックコードを演算する（Ｓ２０）。例えば，チェックコードにハッシュ値を用いる場合，暗号演算部１１０は，暗号パラメータをＳＨＡ２などのハッシュ関数に代入することで，暗号パラメータのチェックコードを演算する。
【００２８】
次に，暗号演算部１１０は，アプリケーション１２から引き渡された暗号パラメータの種類に対応する同一性確認用のチェックコードをメモリから取得し（Ｓ２１），同一性確認用のチェックコードの有無により処理を分岐する（Ｓ２２）。
【００２９】
同一性確認用のチェックコードがメモリに無い場合，暗号演算部１１０は，暗号パラメータは暗号演算コプロセッサ１０６に入力されていないため，暗号パラメータを暗号演算コプロセッサ１０６に入力するステップ（Ｓ２４）に進む。
【００３０】
同一性確認用のチェックコードがメモリに有る場合，暗号演算部１１０は，アプリケーション１２から引き渡された暗号パラメータから演算したチェックコードと同一性確認用のチェックコードを比較する（Ｓ２３）。
【００３１】
アプリケーション１２から引き渡された暗号パラメータから演算したチェックコードと同一性確認用のチェックコードが一致することは，この時点で，アプリケーション１２から引き渡された暗号パラメータがすでに暗号演算部１１０に入力されていることを意味する。よって，暗号演算部１１０は，暗号パラメータの入力に係る時間を省くため，アプリケーション１２から引き渡された暗号パラメータを暗号演算コプロセッサ１０６に入力することなく，暗号パラメータの設定に係る処理（Ｓ２）を終了する。
【００３２】
アプリケーション１２から引き渡された暗号パラメータから演算したチェックコードと同一性確認用のチェックコードが一致しないことは，この時点で，アプリケーション１２から引き渡された暗号パラメータとこの時点で暗号演算部１１０に入力している暗号パラメータが異なることを意味する。よって，暗号演算部１１０は，暗号演算コプロセッサ１０６に入力した暗号パラメータを更新するため，アプリケーション１２から引き渡された暗号パラメータを暗号演算コプロセッサ１０６に入力する（Ｓ２４）。次に，暗号演算部１１０は，同一性確認用のチェックコードを更新するため，アプリケーション１２から引き渡された暗号パラメータの種類に関連付けてメモリに保存されている同一性確認用のチェックコードを，アプリケーション１２から引き渡された暗号パラメータから演算したチェックコードに書き換える処理を実行し（Ｓ２５），暗号パラメータの設定に係る処理（Ｓ２）を終了する。
【００３３】
例えば，暗号演算部１１０が対応している暗号演算が，ＲＦＣ５６３９で規定されている楕円曲線暗号の場合，少なくともｐ，Ａ，Ｂ，ｘ，ｙ，ｑに，暗号パラメータの設定に係る処理（Ｓ２）が繰り返し実行されることになる。なお，ｈは１バイトの値になるため，暗号パラメータの同一性確認を省いてもよい。
【００３４】
アプリケーション１２が呼び出したＡＰＩ１１１が，暗号パラメータを設定するＡＰＩ１１１以外の場合について説明しておく。
【００３５】
アプリケーション１２が呼び出したＡＰＩ１１１が，暗号鍵を設定するＡＰＩ１１１の場合，暗号演算部１１０は，暗号鍵の設定に係る処理（Ｓ３）を実行する。暗号鍵を設定するＡＰＩ１１１の引数には暗号鍵が含まれ，暗号演算部１１０は，この暗号鍵を暗号演算コプロセッサ１０６に入力して，暗号鍵の設定に係る処理（Ｓ３）を終了する。
【００３６】
アプリケーション１２が呼び出したＡＰＩ１１１が，演算対象データを設定するＡＰＩ１１１の場合，暗号演算部１１０は，演算対象データの設定に係る処理（Ｓ４）を実行する。演算対象データを設定するＡＰＩ１１１の引数には演算対象データが含まれ，暗号演算部１１０は，この演算対象データを暗号演算コプロセッサ１０６に入力して，演算対象データの設定に係る処理（Ｓ４）を終了する。
【００３７】
アプリケーション１２が呼び出したＡＰＩ１１１が，暗号演算を実行するＡＰＩ１１１の場合，暗号演算部１１０は，暗号演算の実行に係る処理（Ｓ５）を実行する。暗号演算を実行するＡＰＩ１１１の引数には暗号演算の種類（暗号化または復号）が含まれ，暗号演算部１１０は，この暗号演算の種類を暗号演算コプロセッサ１０６に入力して，暗号演算コプロセッサ１０６に暗号演算を実行させて，暗号演算の実行に係る処理（Ｓ５）は終了する。
【符号の説明】
【００３８】
１    セキュアエレメント
１０  ハードウェア
１０６  暗号演算コプロセッサ
１１  オペレーティングシステム
１１０  暗号演算部
１１１  ＡＰＩ
１２  アプリケーション
【図１】
2020194997.tif 000004
【図２】
2020194997.tif 000005
【図３】
2020194997.tif 000006
【図４】
2020194997.tif 000007