(57)【要約】  署名生成装置（１）は、署名生成手続きに含まれる基本演算をそれぞれ実行する基本演算実行器（２）〜（６）と、基本演算実行器（２）〜（６）と互いに接続され、基本演算実行器（２）〜（６）での演算を制御すると共に、基本演算実行器（２）〜（６）の演算状態を監視し、基本演算実行器（２）〜（６）のうちで秘匿対象データを引数とする秘密演算を実行中の基本演算実行器が存在する場合には、その基本演算実行器以外の他の基本演算実行器に乱数を引数とする乱数演算を同時実行させる全体動作制御部（７）と、を備える。これにより、署名生成速度の低下、電力消費の増加、回路規模の増大などを招くことなく、サイドチャネル攻撃に対する高い耐性を備えることができる。
2011148558.tif 000002
【特許請求の範囲】
【請求項１】
署名生成手続きに含まれる基本演算をそれぞれ実行する複数の基本演算実行器と、
前記複数の基本演算実行器と互いに接続され、前記基本演算実行器での演算を制御すると共に、前記基本演算実行器の演算状態を監視し、前記複数の基本演算実行器のうちで秘匿対象データを引数とする秘密演算を実行中の基本演算実行器が存在する場合には、当該基本演算実行器以外の他の基本演算実行器に乱数を引数とする乱数演算を同時実行させる全体動作制御手段と、
を備える署名生成装置。
【請求項２】
前記署名生成装置は、
メッセージと、秘密鍵を含む鍵情報と、が入力され、生成する複数の乱数を用いて前記複合演算を実行して前記メッセージに対する署名を生成し、
前記秘匿対象データは、前記秘密鍵と、前記複数の乱数のうちで当該秘密鍵のマスクに用いる第１の乱数と、を含むデータであり、
前記全体動作制御手段は、
前記複数の基本演算実行器のうちで前記秘匿対象データを引数とする秘密演算を実行中の基本演算実行器が存在する場合には、当該基本演算実行器以外の他の基本演算実行器に、前記複数の乱数のうちで前記第１の乱数とは異なる第２の乱数を引数とする乱数演算を同時実行させる、又は、前記複数の乱数とは異なる第３の乱数を新たに生成して、当該第３の乱数を引数とする乱数演算を同時実行させる
ことを特徴とする請求項１に記載の署名生成装置。
【請求項３】
前記全体動作制御手段は、
前記複数の基本演算実行器のうちで前記秘匿対象データを引数とする秘密演算を実行中の基本演算実行器が存在する場合には、当該基本演算実行器以外の他の基本演算実行器に前記第２の乱数を引数とする乱数演算を開始可能であるか否かを判定し、開始可能であるときには前記第２の乱数を引数とする乱数演算を同時実行させ、開始可能でないときには、前記第３の乱数を引数とする乱数演算を同時実行させる
ことを特徴とする請求項２に記載の署名生成装置。
【請求項４】
前記全体動作制御手段は、
前記複数の基本演算実行器のうちで前記秘密演算を実行中の基本演算実行器が複数存在する場合には、前記乱数演算を同時実行させる基本演算実行器の個数が、前記秘密演算を実行中の基本演算実行器の個数以上となるように制御する
ことを特徴とする請求項１乃至３いずれか１項に記載の署名生成装置。
【請求項５】
前記複数の基本演算実行器と前記全体動作制御手段とを互いに接続するデータ転送用ローカルバスを更に備え、
前記署名生成手続きは、ＲＳＡ演算と、楕円曲線演算と、整数演算と、ハッシュ演算と、を含み、
前記複数の基本演算実行器は、
前記ＲＳＡ演算をそれぞれ実行する複数のＲＳＡ演算回路と、
前記楕円曲線演算をそれぞれ実行する複数の楕円演算回路と、
前記整数演算をそれぞれ実行する複数の整数演算回路と、
前記ハッシュ演算を実行するハッシュ演算回路と、を用いて構成される
ことを特徴とする請求項１乃至４いずれか１項に記載の署名生成装置。
【請求項６】
前記複数の基本演算実行器のそれぞれと前記全体動作制御手段とを互いに接続する複数の信号線を更に備え、
前記全体動作制御手段は、
前記複数の基本演算実行器を構成する各演算回路での演算を制御する演算制御手段と、
前記複数の信号線を介して伝達される演算状態伝達信号から前記各演算回路の演算状態を監視すると共に、強制的に乱数演算を開始させるための乱数演算指示信号と、当該乱数演算の引数となる乱数データと、を前記各演算回路へと伝達する電力波形かく乱制御手段と、を備える
ことを特徴とする請求項５に記載の署名生成装置。
【請求項７】
前記電力波形かく乱制御手段は、
前記乱数データを生成する線形フィードバックレジスタを更に備える
ことを特徴とする請求項６に記載の署名生成装置。
【請求項８】
乱数を生成する乱数生成回路を更に備える
ことを特徴とする請求項５乃至７のいずれか１項に記載の署名生成装置。
【請求項９】
乱数生成処理の初期値に用いる乱数種が予め記録された乱数種保持不揮発メモリを更に備える
ことを特徴とする請求項８に記載の署名生成装置。
【請求項１０】
前記複数の基本演算実行器と前記全体動作制御手段とを互いに接続するデータ転送用ローカルバスを更に備え、
前記複数の基本演算実行器は、
前記基本演算に含まれるいずれかの演算をそれぞれ実行する複数のプロセッサコアを用いて構成され、
前記全体動作制御手段は、
前記基本演算の実行に用いる前記複数のプロセッサコアの構成を動的に再構成する
ことを特徴とする請求項１乃至９いずれか１項に記載の署名生成装置。
【請求項１１】
前記署名生成手続きは、グループ署名を生成する手続きである
ことを特徴とする請求項１乃至１０のいずれか１項に記載の署名生成装置。
【請求項１２】
署名生成装置が、
署名生成手続きに含まれる基本演算を並列に実行し、
前記基本演算の並列実行中に、秘匿対象データを引数とする秘密演算を実行する場合には、乱数を引数とする乱数演算を同時実行する
ことを特徴とする署名生成方法。
【請求項１３】
署名生成手続きに含まれる基本演算を並列に実行する処理と、
前記並列実行する処理において、秘匿対象データを引数とする秘密演算の実行中に、乱数を引数とする乱数演算を同時実行する処理と、
をコンピュータに実行させる署名生成プログラムが格納された非一時的なコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、サイドチャネル攻撃に対する耐性を保ちつつも、署名生成を高速かつ低電力で実現するのに好適な、署名生成装置、署名方法、及び署名生成プログラムが格納された非一時的なコンピュータ可読媒体に関する。
【背景技術】
【０００２】
近年、暗号及び署名の分野では、グループ署名の技術が提案されている。グループ署名技術は、署名者が、ある権限を持つグループに所属しているかどうかを認証する技術である。グループに所属しているどのメンバであるかは匿名にすることができ、しかも、問題があれば、特権者が匿名性を剥奪することが可能であり、匿名性の悪用も防止することができるという利点を有している。【０００３】
グループ署名技術は、例えば下記の文献（特許文献１、非特許文献１乃至４）に開示されている。非特許文献１には、グループ署名の生成及び検証を行うための基本的なアルゴリズムが開示されている。【０００４】
また、非特許文献１には、グループ署名の生成を高速に行う小規模回路が開示されている。特許文献１に開示された署名生成装置では、楕円曲線演算回路と、ＲＳＡ演算回路と、ハッシュ演算回路と、を備えており、それぞれの回路が低帯域バスで接続されている。そして、各演算回路の個数を適切に調節することで、回路規模を大幅に増やすことなく、楕円曲線演算、ＲＳＡ演算、ハッシュ演算の各演算を並列に実行し、署名生成を高速化する。【０００５】
ところで、暗号の実装に際しては、暗号化処理中の装置の動作状況から秘密情報を取得するサイドチャネル攻撃への対策が重要となる。サイドチャネル攻撃の最も代表的な手法としては、回路の消費電力波形や漏洩電磁波波形から、秘密鍵の値を割り出す手法が知られている。【０００６】
サイドチャネル攻撃としては様々な手法が知られているが、RSA暗号や楕円暗号などの公開鍵暗号については、鍵の各ビットの値に応じて演算時間が変わることを利用したタイミング攻撃と呼ばれる方法と、鍵の各ビットの値に応じて電力消費の大小が変わることを利用したSPA(Simple Power Analysis)と呼ばれる方法が主流であり、最も脅威となっている。【０００７】
タイミング攻撃やSPAへの対策としては、鍵の値に依存して演算時間や電力消費が変わらないように擬似演算を追加して実行する方法や、ランダム値を使って演算する回路を追加して並列に動作させる方法が良く知られている。なお、公開鍵暗号回路である限りは、RSA暗号であっても楕円暗号であっても、使用される対策法の原理は略同一である。【０００８】
例えば非特許文献２や特許文献２乃至４などに、サイドチャネル攻撃への対策技術が開示されている。非特許文献２には、RSA暗号回路に対するサイドチャネル攻撃の方法と、それに対する対策が開示されている。特許文献２には、楕円曲線上のスカラー演算についてのサイドチャネル攻撃への対策技術が開示されている（段落００２２〜００２７、０１３９〜０１４５）。【０００９】
特許文献３には、逆変換演算の同時実行を行うことで、サイドチャネル攻撃を阻止するルーチンを実行させる点が開示されている（段落００１０〜００１２、００３５〜００４１）。特許文献３では、逆変換演算（相補的な演算）を利用して対策を行うものであり、また、演算時間長のかく乱にランダム値を利用する。特許文献４には、サイドチャネル攻撃への対策技術として、中間変数値をランダム値でマスクする点が開示されている。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２０１０−０１４９１２号公報
【特許文献２】特開２００６−２４３６９０号公報
【特許文献３】特開２００７−２３４００１号公報
【特許文献４】特表２００９−５００７１０号公報
【非特許文献】
【００１１】
【非特許文献１】森岡澄夫，荒木俊則，一色寿幸，尾花賢，佐古和恵，"二段階動作合成によるグループ署名ASICの実装と評価"，電子情報通信学会  VLSI研究会，VLD  ２００９-１２８，pp.175-180,２０１０年
【非特許文献２】A. Miyamoto et al., "Chosen-message SPA attacks against FPGA-based RSA hardware implementations," FPL2008, pp.35-40, 2008.
【非特許文献３】J. Camenish and J. Groth, "Group signatures: Better efficiency and new theoretical aspects," SCN2004, LNCS Vol.3352, pp.120-133, 2004.
【非特許文献４】T. Isshiki, K. Mori, K. Sako, I. Teranishi, and S. Yonezawa, "Using Group Signature for Identity Management and its Implementation," DIM2006, 2006.
【発明の概要】
【発明が解決しようとする課題】
【００１２】
しかし、非特許文献２などに開示されるいずれの対策技術も、サイドチャネル攻撃への対策という目的は共通するものの、楕円曲線演算やＲＳＡ演算などの個別の暗号演算への対策技術である。このため、署名生成アルゴリズムに含まれる全ての演算に対して、このような個別演算についての対策技術をそのまま適用するものとしては、サイドチャネル攻撃への耐性を持たせることはできても、署名生成速度の低下、電力消費の増大、回路規模の増加を招くことになる。【００１３】
例えばサイドチャネル攻撃への対策として、全ての演算に対して擬似演算を単純に追加した場合には、演算時間は最大で２倍（平均で１．５倍）に延びてしまう。また、擬似演算を追加することで、同様にして電力消費量も増えてしまう。これは、公開鍵暗号回路では、有限体上の乗算又は乗剰余を多数回繰り返して行うものであり、最も電力を消費する乗算器は、互いに略同一の回路構成を持つ。このため、公開鍵暗号回路での電力消費量は、RSA暗号であっても楕円暗号であっても、略同じことを理由とする。さらには、例えばランダム演算回路を追加した場合には、回路規模が２倍近くになってしまう。【００１４】
従って、サイドチャネル攻撃に対する耐性を持ちつつ、高速、低電力、かつ小規模な回路で、署名生成可能な技術が強く求められている。【００１５】
特に、通常のデジタル署名とは異なり、グループ署名では、ＲＳＡ暗号演算や楕円暗号演算などを複雑に組み合わせて実行するものであり、グループ署名生成アルゴリズムに含まれる全ての演算に対して、従来のサイドチャネル攻撃対策技術を一様に施すものとしては、グループ署名の生成に要する演算時間が最悪で２倍（平均で１．５倍）に延びるか、或いは、回路規模が２倍近くに増加することになる。また、電力消費も同様に増えることになる。さらに、通常のデジタル署名と比較して、グループ署名は、その演算量及び回路量が多いという特徴を有するために、このような演算処理の低速化、消費電力の大電力化、回路の大規模化などを招くことは望ましくない。【００１６】
本発明は、上記のような課題を解決するもので、署名生成速度の低下、電力消費の増加、回路規模の増大などを招くことなく、タイミング攻撃やSPAなどのサイドチャネル攻撃に対する高い耐性を備える署名生成装置、署名方法、及び署名生成プログラムが格納された非一時的なコンピュータ可読媒体を提供することを目的とする。
【課題を解決するための手段】
【００１７】
本発明の第１の観点に係る署名生成装置は、署名生成手続きに含まれる基本演算をそれぞれ実行する複数の基本演算実行器と、前記複数の基本演算実行器と互いに接続され、前記基本演算実行器での演算を制御すると共に、前記基本演算実行器の演算状態を監視し、前記複数の基本演算実行器のうちで秘匿対象データを引数とする秘密演算を実行中の基本演算実行器が存在する場合には、当該基本演算実行器以外の他の基本演算実行器に乱数を引数とする乱数演算を同時実行させる全体動作制御部と、を備えるものである。【００１８】
本発明の第２の観点に係る署名生成方法は、署名生成装置が、署名生成手続きに含まれる基本演算を並列に実行し、前記基本演算の並列実行中に、秘匿対象データを引数とする秘密演算を実行する場合には、乱数を引数とする乱数演算を同時実行することを特徴とするものである。【００１９】
本発明の第３の観点に係る非一時的なコンピュータ可読媒体は、署名生成手続きに含まれる基本演算を並列に実行する処理と、前記並列実行する処理において、秘匿対象データを引数とする秘密演算の実行中に、乱数を引数とする乱数演算を同時実行する処理と、をコンピュータに実行させる署名生成プログラムが格納されたものである。
【発明の効果】
【００２０】
本発明によれば、署名生成速度の低下、電力消費の増大、回路規模の増加を招くことなく、サイドチャネル攻撃への耐性を持ちつつ署名生成を高速かつ低電力で実現するのに好適な署名生成装置、署名生成方法、及び署名生成プログラムが格納された非一時的なコンピュータ可読媒体を提供することができる。
【図面の簡単な説明】
【００２１】
【図１】本発明の原理を説明するための図である。
【図２】本発明にかかる署名生成装置の概要構成図である。
【図３】本発明にかかる署名生成装置の基本演算実行器の状態遷移図である。
【図４】本発明にかかる署名生成処理の概要フロー図である。
【図５】実施の形態１にかかる署名生成装置の構成図である。
【図６】実施の形態１にかかる全体動作制御部の詳細な構成図である。
【図７】実施の形態１にかかる署名生成装置の動作制御フロー図である。
【発明を実施するための形態】
【００２２】
まず、各実施の形態を説明するのに先立ち、図１を参照して、本発明の原理について説明する。
図１に示すように、本発明にかかる署名生成装置１は、複数の基本演算実行器（基本演算実行器２〜６）と、全体動作制御部７と、を備えている。基本演算実行器２〜６と全体動作制御部７とは互いに接続されている。
【００２３】
基本演算実行器２〜６は、署名生成手続きに含まれる基本演算のうち、いずれかの演算をそれぞれ実行する。署名生成装置１は、基本演算実行器２〜６が基本演算をそれぞれ実行することで、全体として基本演算の複合演算を実行する。署名生成手続きには、例えば、ＲＳＡ演算、楕円曲線演算、整数演算などが含まれる。
【００２４】
全体動作制御部７は、基本演算実行器２〜６での演算を制御すると共に、基本演算実行器２〜６の演算状態を監視する。
【００２５】
全体動作制御部７は、基本演算実行器２〜６のうちで秘匿対象データを引数とする秘密演算を実行中の基本演算実行器が存在する場合には、該当する基本演算実行器以外の他の基本演算実行器に乱数を引数とする乱数演算を同時実行させる。ここで、秘匿対象データとは、サイドチャネル攻撃から秘匿すべきデータであり、例えば、署名生成時に利用する秘密鍵の値などである。
【００２６】
次に、図２及び図３を参照して、本発明にかかる署名生成装置の概要について説明する。図２は、本発明にかかる署名生成装置の概要構成図である。図３は、各基本演算実行器の状態遷移図である。
【００２７】
図２に示すように、署名生成装置１１は、複数の基本演算実行器（基本演算実行器１２〜１６）と、全体動作制御部１７と、通信経路１８と、データ転送経路１９と、を備えている。基本演算実行器１２〜１６のそれぞれと全体動作制御部１７とが、通信経路１８を介して互いに接続される。また、基本演算実行器１２〜１６と全体動作制御部１７は、データ転送経路１９を介して互いに接続される。
【００２８】
基本演算実行器１２〜１６は、上述した基本演算のいずれかの演算をそれぞれ実行する。また、基本演算実行器１２〜１６は、演算内容に応じた演算状態をそれぞれ有している。基本演算実行器１２〜１６は、自己の演算状態を示す演算状態伝達信号を、全体動作制御部１７へと通信経路１８を介して伝達する。
【００２９】
全体動作制御部１７は、基本演算実行器１２〜１６でそれぞれ実行させる演算種類、演算実行の順序、演算データの入出力などを、データ転送経路１９を介して制御する。また、全体動作制御部１７は、演算状態伝達信号から基本演算実行器１２〜１６のそれぞれの演算状態を監視すると共に、強制的な乱数演算の実行の開始を指示する乱数演算指示信号と、その乱数演算の引数となる乱数データとを、基本演算実行器１２〜１６へと通信経路１８を介して伝達する。
【００３０】
全体動作制御部１７は、基本演算実行器１２〜１６のうちで秘密演算を実行中の基本演算実行器が存在する場合には、該当する基本演算実行器以外の他の基本演算実行器に乱数を引数とする乱数演算を同時実行させる。ここで、乱数演算は、署名演算に含まれている乱数演算としてもよいし、又は、新たに生成する乱数データを用いる強制的な乱数演算でもよい。
【００３１】
さらに、全体動作制御部１７は、秘密演算を実行中の基本演算実行器の個数に比べて、乱数演算を実行させている基本演算実行器及び強制乱数演算を実行させている基本演算実行器の合計個数が小さい場合には、演算を実行していない基本演算実行器を用いて強制乱数演算を実行させることで、乱数演算及び強制乱数演算を実行中の基本演算実行器の合計個数が、秘密演算を実行中の基本演算実行器の個数以上となるように制御する。
【００３２】
通信経路１８は、全体動作制御部１７と、基本演算実行器１２〜１６それぞれとの間の信号を伝達する。通信経路１８は、基本演算実行器１２〜１６に対してそれぞれ設けられた複数の信号線から構成される。通信経路１８は１ビットから数ビット幅の双方向経路である。基本演算実行器１２〜１６と全体動作制御部１７との間で、データ転送経路１９とは異なる専用の通信経路１８を設けることで、全体動作制御部１７は、データ転送経路１９を用いた場合と比較して、基本演算実行器１２〜１６との間でより高速に応答することができる。
【００３３】
データ転送経路１９は、基本演算実行器１２〜１６相互間のデータ転送、及び、全体動作制御部１７と基本演算実行器１２〜１６との間でのデータ転送を行う経路である。基本演算において使用される入出力データや処理起動命令などが、データ転送経路１９を介して双方向に転送される。データ転送経路１９の構成は特に限定されず、例えば、１本のバスを用いて構成してもよいし、複数本のバスを用いて構成してもよい。また、データ転送経路１９を、クロスバスイッチなどを用いて構成してもよい。なお、グループ署名を対象とする署名生成装置である場合には、公開鍵暗号演算が主体であるため、基本演算実行器１２〜１６相互間のデータ転送時間に比べて基本演算実行器１２〜１６それぞれの内部での演算時間のほうが圧倒的に大きいことから、１本のバスを用いて構成すると好適である。
【００３４】
図３に示すように、基本演算実行器は、以下に定める６つの演算状態（Ｓ０〜Ｓ５）を有する。なお、ここでは、６つの演算状態を例示するが、後述する実施の形態１では、少なくとも５つの演算状態（Ｓ０〜Ｓ４）を有していれば足り、また、後述する実施の形態２では６つの演算状態（Ｓ０〜Ｓ５）を有している場合を例に説明する。
Ｓ０：停止
・基本演算実行器は何の演算も実行していない状態。
Ｓ１：秘密演算実行中
・電力波形の隠蔽が必要な演算を実行している状態であり、秘匿対象データを引数とする演算を実行している状態。
Ｓ２：通常演算実行中
・電力波形の隠蔽が不要な演算を実行している状態。
Ｓ３：乱数演算実行中
・電力波形がランダムとなる演算を実行している状態であり、署名生成にもともと用いられる乱数を引数とする演算を実行している状態。
Ｓ４：強制乱数演算実行中
・電力波形をかく乱するために、新たに生成する乱数データを引数とする強制的な乱数演算を実行している状態であり、署名生成処理自体には不要な演算を実行している状態。
Ｓ５：他処理実行中
・基本演算実行器が例えばマルチコアを用いて構成される場合に、署名生成処理とは全く別の処理に使用されている状態。
【００３５】
全体動作制御部１７は、図３で示した状態Ｓ０から状態Ｓ１、状態Ｓ０から状態Ｓ２、状態Ｓ０から状態Ｓ３、状態Ｓ０から状態Ｓ５への遷移を、制御する。例えば、データ転送経路９を介して行われる全体動作制御部１７からの指示に従って、状態Ｓ０から状態Ｓ１への遷移が行われる。また、各基本演算実行器での演算終了に従って状態Ｓ１から状態Ｓ０への遷移が行われる。ただし、強制乱数演算に関する遷移（状態Ｓ０から状態Ｓ４、状態Ｓ４から状態Ｓ０の遷移）については、通信経路１８を介して伝達される乱数演算指示信号に従って行われる。また、状態Ｓ４から状態Ｓ０への遷移についても、演算終了ではなく、乱数演算指示信号に従って行われる。
【００３６】
なお、図２に示した基本演算実行器１２〜１６と全体動作制御部１７は、専用に設計された回路（ハードウェア・アクセラレータ）を用いて構成してもよいし、ソフトウェア実行を行う１又は複数のCPU（Central Processing Unit）を用いて構成してもよい。また、基本演算実行器１２〜１６は、専用回路やCPU、或いは、それらの混合を用いて構成してもよい。また、複数のCPUを用いてマルチコアで構成する場合には、署名生成処理に際して、全ての基本演算実行器をCPUで構成せずに、一部の基本演算実行器のみをCPUで構成してもよい。
【００３７】
さらに、上記した署名生成装置は、グループ署名を生成するための署名生成装置に限定されず、セキュリティ関連の複合演算を実行する他の装置に対しても適用することができる。
【００３８】
次に、本発明に関連するグループ署名について簡単に説明する。上述したように、非特許文献１には、グループ署名の生成及び検証を行うための基本的なアルゴリズムが開示されている。このため、以下では、グループ署名方式の一例として、非特許文献１に開示されたグループ署名を簡単に説明する。
【００３９】
グループ署名のスキームには、発行者、開示者、ユーザ削除管理者、ユーザの４つのエンティティが参加する。ユーザは、署名生成と検証を行い、そのグループのメンバである。発行者は、ユーザをグループに追加する権限を、開示者は署名者を特定する権限を、ユーザ削除管理者はユーザをグループから除去する権限をそれぞれ有している。なお、ここでは、グループ署名スキームに含まれる手続きのうち、ユーザが利用する署名生成についてのみ説明する。
【００４０】
以下、セキュリティパラメータK=(K[n],K[l],K[e],K[e'],K[q],K[c],K[S])を導入する。K[n]、K[l]、K[e]、K[e']は、各パラメータn,l,e,e'それぞれについてのビット数を示しており、所定のビット長K[n]、K[l]、K[e]、K[e']である。K[q]は、楕円曲線に基づいて定義される有限群GGの次数である素数qのビット長を示す。K[c]は、任意長のビット列に適用されるハッシュ関数Hashが返す値cのビット長を示す。K[S]は、いかなる整数aに対しても|a|+K[S]ビット長の乱数rを選択したときに、a+rとaが統計的に区別できなくなるようなビット長を示す。
【００４１】
グループ署名は、このようなセキュリティパラメータKと、整数λ=K[n]+K[q]+K[S]と、0以上2λ未満の整数を要素とする集合Λと、上記楕円曲線上でのスカラー倍演算と、上記楕円曲線上での点加算と、上記楕円曲線上での点減算とに対するグループ署名である。なお、以下では、「xs」を上記楕円曲線上の点に対するスカラー倍演算として表記し、「+e」を上記楕円曲線上での点加算として表記し、「-e」を上記楕円曲線上での点減算として表記する。
【００４２】
上記グループ署名の発行者、開示者、ユーザ削除管理者、ユーザがそれぞれ有する鍵対（公開鍵及び秘密鍵）を、以下に説明する。
【００４３】
グループ署名の発行者鍵対（ipk,isk）は、以下の式に示すように、ビット長がK[n]/2である暗号数理的に安全な素数p[1]，p[2]と、n=p[1]p[2]と、そのnに対する巡回部分群QR(n)の要素a[0]，a[1]，a[2]と、に基づいて定められる。なお、ipkは発行者の公開鍵であり、iskは発行者の秘密鍵である。
ipk=(n,a[0],a[1],a[2])；
isk=(p[1],p[2])
【００４４】
グループ署名の開示者鍵対（opk,osk）は、以下の式に示すように、上記素数qを法とする有限体Zqの要素y[1]，y[2]と、上記有限群GGの要素Gと、H[1]=y[1]xsGと、H[2]=y[2]xsGと、に基づいて定められる。なお、opkは開示者の公開鍵であり、oskは開示者の秘密鍵である。
opk=(q,G,H[1],H[2])；
osk=(y[1],y[2])
【００４５】
グループ署名のユーザ削除管理者鍵対（rpk,rsk）は、以下の式に示すように、ビット長がK[l]/2である安全な素数l[1]，l[2]と、l=l[1]l[2]と、そのlに対する巡回部分群QR(l)の要素b，wと、に基づいて定められる。なお、rpkはユーザ削除管理者の公開鍵であり、rskはユーザ削除管理者の秘密鍵である。
rpk=(l,b,w)；
rsk=(l[1],l[2])
【００４６】
グループ署名のi番目のユーザに対するユーザ鍵対（mpk,msk）は、以下の式に示すように、上記集合Λの要素x[i]と、h[i]=x[i]xsGと、B[i]=b1/e'[i](mod l)、e[i]=2K[e]+e'[i]、a[0]a[1]x[i]≡A[i]e[i](mod n)、を満たすA[i]，B[i]，e[i]，e'[i]と、に基づいて定められる。なお、mpk[i]はi番目のユーザの公開鍵であり、msk[i]はi番目のユーザの秘密鍵である。
msk[i]=x[i]；
mpk[i]=(h[i],A[i],e'[i],B[i])
【００４７】
そして、署名生成アルゴリズムでは、メッセージmに対する署名をi番目のユーザが生成する際には、発行者の公開鍵ipk、ユーザ削除管理者の公開鍵rpk、開示者の公開鍵opk、ユーザの秘密鍵msk[i]、メッセージmを入力として、以下のようにして署名を生成する。
【００４８】
（１）ρ[E]、ρ[m]、ρ[r]、μ[x]、μ[s]、μ[e']、μ[t]、μ[E]を、以下のようにしてランダムに選択する。
ρ[E]：上記有限体Zqの要素
ρ[m]：ビット長K[n]/2のビット列
ρ[r]：ビット長K[l]/2のビット列
μ[x]：ビット長λ+K[c]+K[S]のビット列
μ[s]：ビット長K[e]+K[n]/2+K[c]+K[S]のビット列
μ[e']：ビット長K[e']+K[c]+K[S]のビット列
μ[t]：ビット長K[e']+K[l]/2+K[c]+K[S]のビット列
μ[E]：上記有限体Zqの要素
【００４９】
（２）E[0]、E[1]、E[2]、E、V[ComCipher]を、以下のようにして演算して求める。なお、演算「Z=(W,X,Y)」は、演算W、演算X、演算Yを別々に行った後に取りまとめることを示す（タップルの計算）。
E[0]=ρ[E]xsG
E[1]=h[i]+eρ[E]xsH[1]
E[2]=h[i]+eρ[E]xsH[2]
E=(E[0],E[1],E[2])
V[ComCipher]=(μ[E]xsG，μ[x]xsG+eμ[E]xsH[1]，μ[x]xsG+eμ[E]xsH[2])
【００５０】
（３）A[COM]、B[COM]、V[ComMPK]、V[ComREV]を、以下のようにして演算して求める。
A[COM]=A[i]a[2]ρ[m](mod n)
B[COM]=B[i]wρ[r](mod l)
V[ComMPK]=a[1]μ[x]a[2]μ[s]A[COM]-μ[e'](mod n)
V[ComREV]=wμ[t]B[COM]-μ[e'](mod l)
【００５１】
（４）cを、以下のようにして演算して求める。
c=Hash(K,ipk,opk,rpk,E,A[COM],B[COM],V[ComCipher],V[ComMPK],V[ComRev],m)
【００５２】
（５）τ[x]、τ[s]、τ[t]、τ[e']、τ[E]を、以下のようにして演算して求める。
τ[x]=cx[i]+μ[x](mod q)
τ[s]=ce[i]ρ[m]+μ[s](mod q)
τ[t]=ce'[i]ρ[r]+μ[t](mod q)
τ[e']=ce'[i]+μ[e'](mod q)
τ[E]=cρ[E]+μ[E](mod q)
【００５３】
（６）署名(E,A[COM],B[COM],c,τ[x],τ[s],τ[t],τ[e'],τ[E])を、出力する。
【００５４】
図４は、グループ署名生成処理の際のデータフローを示す図である。なお、図の乱数とは、上記「（１）」において選択されたランダムな値である。
楕円曲線演算２１では、開示者の公開鍵と、乱数と、を用いて、複数の楕円曲線演算を行う。楕円曲線演算２１では、主に上記「（２）」の各演算が行われる。
【００５５】
ＲＳＡ演算２２では、ユーザの秘密鍵と、発行者の公開鍵と、ユーザ削除管理者の公開鍵と、乱数と、を用いて、複数のＲＳＡ演算を行う。ＲＳＡ演算２２では、主に上記「（３）」の各演算が行われる。
【００５６】
ハッシュ演算２３では、楕円曲線演算２１の演算結果と、ＲＳＡ演算２２演算結果と、メッセージmと、を用いて、ハッシュ演算を行う。ハッシュ演算２４では、主に上記「（４）」の演算が行われる。
【００５７】
整数演算２５では、ハッシュ演算２４の演算結果と、乱数と、を用いて、複数の整数演算を行う。整数演算２５では、主に上記「（５）」の各演算が行われる。整数演算２５の結果として、署名が出力される。
【００５８】
実施の形態１．
以下、図面を参照して本発明の実施の形態について説明する。本実施の形態にかかる署名生成装置は、上述したグループ署名生成のための構成及び機能を、ハードウェアとして実装した場合の例を示している。
【００５９】
図５は、本実施の形態に係る署名生成装置の構成図である。署名生成装置１００は、楕円演算回路１０１と、ＲＳＡ演算回路１０２、１０３と、整数演算回路１０４と、乱数生成回路１０５と、ハッシュ演算回路１０６と、共有メモリ１０７と、乱数種保持不揮発メモリ１０８と、全体動作制御部１１０と、複数の信号線１２０と、データ転送用ローカルバス１３０と、を備えている。なお、図５では、１つの楕円演算回路１０２、２つのＲＳＡ演算回路１０３、１０４、１つの整数演算回路１０４、１つの乱数生成回路１０５を例示しているが、各回路の個数はこれに限定されず、演算回路速度と規模のトレードオフに応じて定めればよい。
【００６０】
ここで、本実施の形態に係る署名生成装置１００では、それぞれの演算回路（楕円演算回路１０１、ＲＳＡ演算回路１０２、１０３、整数演算回路１０４、乱数生成回路１０５、ハッシュ演算回路１０６）に対して、サイドチャネル攻撃に対する個別対策を施していないため、何ら対策を施していない場合と比較して演算時間は増加しない。グループ署名生成全体に要する演算時間は、鍵の値に依存して変化するが、演算時間は最速を維持したまま変化する。また、電力消費についても、鍵の値に依存して変化するが、最少を維持したまま変化する。
【００６１】
また、署名生成装置１００は、上述したようなグループ署名を生成する場合には、発行者の公開鍵、ユーザ削除管理者の公開鍵、開示者の公開鍵、ユーザの秘密鍵、メッセージなどが入力されて、楕円曲線演算やＲＳＡ演算などを７０回ほど組み合わせて実行する。署名生成装置１００は、グループ署名生成の際には、生成する乱数を用いて鍵をマスクする。ここで、公開鍵や、既にマスク済みの秘密鍵については秘匿する必要がないため、サイドチャネル攻撃への対策は不要である。このため、少なくとも秘密鍵及び秘密鍵をマスクするための乱数をサイドチャネル攻撃から隠蔽すれば足りるため、本実施の形態では、秘密鍵及び秘密鍵をマスクするための乱数を秘匿対象データとして、秘匿対象データを直接引数とする演算についてのみサイドチャネル対策を施す。
【００６２】
楕円演算回路１０１は、楕円曲線上でのスカラー倍演算、楕円曲線上での点加算及び点減算の演算などの楕円曲線演算を行う。上述したグループ署名を生成する場合には、楕円演算回路１０１は、主に上記「（２）」に含まれる各演算を行う。
【００６３】
ＲＳＡ演算回路１０２、１０３は、べき乗剰余、乗剰余などのＲＳＡ演算を行う。上述したグループ署名を生成する場合には、ＲＳＡ演算回路１０２、１０３は、主に上記「（３）」に含まれる各演算を行う。
【００６４】
整数演算回路１０４は、整数乗算、整数加算などの整数演算を行う。上述したグループ署名を生成する場合には、整数演算回路１０４は、主に上記「（５）」に含まれる各演算を行う。
【００６５】
各演算回路（楕円演算回路１０１、ＲＳＡ演算回路１０２、１０３、整数演算回路１０４）は、上述した５つの状態（停止状態Ｓ０、秘密演算状態Ｓ１、通常演算状態Ｓ２、乱数演算状態Ｓ３、強制乱数演算状態Ｓ４）を有している。
【００６６】
停止状態Ｓ０では、各演算回路は意味のある演算を何も実行しておらず、新しい演算をいつでも開始できる状態である。
【００６７】
秘密演算状態Ｓ１は、秘匿対象データ（秘密鍵やその秘密鍵をマスクするための乱数）を直接引数とする演算を実行しており、サイドチャネル攻撃から守るべき演算を実行している状態である。上述したようなグループ署名を生成する場合には、演算回路は、署名者（i番目のユーザ）の秘密鍵x[i]を直接引数とする演算と、秘密鍵x[i]のランダムマスクμ[x]を直接引数とする演算と、を実行する場合に、秘密演算状態Ｓ１となる。具体的には、演算回路は、楕円曲線上でのスカラー倍演算μ[x]xsGと、べき剰余演算a[1]μ[x](mod n)と、整数乗算cx[i]+μ[x](mod q)と、を実行する場合に、秘密演算状態Ｓ１に入る。
【００６８】
通常演算状態Ｓ２は、秘匿する必要のないデータであって、乱数を除いたデータ（公開鍵など）を引数とする通常演算を実行している状態である。通常演算状態Ｓ２では、サイドチャネル攻撃から守る必要のない演算を実行している。通常演算状態Ｓ２では、演算回路で消費される電力波形はランダムにならない。
【００６９】
乱数演算状態Ｓ３は、秘密鍵以外のデータをマスクするために用いる乱数を引数とする乱数演算と、既に乱数を用いてマスクされたデータなどを引数とする乱数演算を実行している状態である。乱数演算状態Ｓ３では、サイドチャネルチャネル攻撃から守る必要のない演算を実行している。乱数演算状態Ｓ３では、演算回路で消費される電力波形がランダムになる。上述したようなグループ署名を生成する場合には、演算回路は、ランダムに選択された値（ρ[E]、ρ[m]、ρ[r]、μ[s]、μ[e']、μ[t]、μ[E]（μ[x]を除く乱数））を引数にとる演算と、これら乱数を用いてマスク演算が施された結果を引数にとる演算と、を実行する場合に、乱数演算状態Ｓ３となる。
【００７０】
強制乱数演算状態Ｓ４は、サイドチャネル攻撃から守るために、電力波形をかく乱するための乱数演算を強制的に実行させている状態である。強制乱数演算状態Ｓ４では、新たに生成する乱数値を引数とする強制乱数演算を実行する。強制乱数演算状態Ｓ４で実行される演算は、署名生成処理として本来は不要な演算である。強制乱数演算状態Ｓ４では、演算回路で消費される電力波形がランダムになる。
【００７１】
各演算回路は、自己の状態を示す演算状態伝達信号を、信号線１２０を介して全体動作制御部１１０に伝達する。具体的には、各演算回路は、５つの状態（Ｓ０〜Ｓ４）のいずれの状態にあるかを示す２ビット以上の出力信号（演算状態伝達信号）を、信号線１２０を介して伝達する。
【００７２】
信号線１２０は、それぞれ独立した１以上の信号線から構成されている。信号線１２０には、演算状態伝達信号を伝達するための信号線と、後述する乱数演算指示信号と、その乱数演算の引数となる乱数データと、を伝達するための信号線と、が含まれている。なお、信号線１２０を介して伝達される信号は、一般的な割り込み信号（１ビット）とは異なるものである。
【００７３】
乱数生成回路１０５は、署名生成装置１００が利用する乱数（真性乱数、物理乱数、高品質な擬似乱数など）を生成する。上述したグループ署名を生成する場合には、乱数生成回路１０５は、主に上記「（１）」に含まれる各演算を行う。なお、複数の乱数生成回路を備えるものとしてもよい。
【００７４】
ハッシュ演算回路１０６は、例えばＳＨＡ１−１やＳＨＡ−２などのハッシュ関数を用いてハッシュ演算を行う。上述したグループ署名を生成する場合には、ハッシュ演算回路１０６は、主に上記「（５）」に含まれる各演算を行う。
【００７５】
共有メモリ１０７は、例えばSRAM（Static Random Access Memory）などのメモリである。データ転送ローカルバス１３０に接続された各回路での演算結果が、共有メモリ１０７に一時的に保存される。
【００７６】
乱数種保持不揮発メモリ１０８は、EEPROM（Electrically Erasable and Programmable Read Only Memory）やフラッシュメモリに例示される不揮発性の半導体メモリである。乱数種保持不揮発メモリ１０８には、乱数生成処理を実行する際の初期値（初期種）が記憶されている。
【００７７】
全体動作制御部１１０は、上述した各演算回路や乱数生成回路１０５などを定められた手順で起動して、署名生成装置１００全体の動作を制御する。上述したようなグループ署名を生成する場合には、全体動作制御部１１０は、データ転送用ローカルバス１３０を介して、実行させる演算種類や演算実行の開始を各回路に対して指示し、データ転送経路１９を介しての各回路間での演算データの入出力や、共有メモリ１０７への演算データの保存などを制御する。
【００７８】
ここで、各演算回路がどのような順序でいずれの状態に入るべきかについては、グループ署名生成に先立って予め決定づけることができる（例えば、回路の設計時に設計者が予め決定した上で、設定しておけばよい。）。
【００７９】
ただし、演算回路に対して演算開始が指示された場合に、その演算の終了時点は、演算対象データの値に依存するため事前に知ることができない。このため、全体動作制御部１１０は、各演算回路に対して演算開始の指示を行うと共に、信号線１２０を介して伝達される演算状態伝達信号から各演算回路の演算状態を監視することで、各演算回路での演算の終了時点を判定する。これにより、全体動作制御部１１０は、各演算回路での演算状態や演算の開始及び終了を、動的に判定することができる。
【００８０】
また、全体動作制御部１１０は、上述したようにして演算回路の状態を常時管理し、演算回路（楕円演算回路１０１、ＲＳＡ演算回路１０２、１０３、整数演算回路１０４）のうちで秘密演算状態Ｓ１にある演算回路が存在する場合には、電力波形がランダムとなる演算状態（乱数演算状態Ｓ３又は強制乱数演算状態Ｓ４）に入るように、他の演算回路を制御する。すなわち、全体動作制御部１１０は、秘密演算と乱数演算とが同時実行されるように、各演算回路の状態を制御する。
【００８１】
このように秘密演算の実行中に乱数演算を同時実行させることで消費電力波形をかく乱することができ、サイドチャネル攻撃に対する耐性を署名生成装置１００に備えさせることができる。
【００８２】
全体動作制御部１１０は、演算制御部１１１と、電力波形かく乱制御部１１２と、を備えている。なお、全体動作制御部１１０の構成はこれに限定されず、これら２つの機能をそれぞれ有する独立した回路を用いて構成してもよいし、或いは、これらに相当する二つの並列処理を行うものとして構成してもよい。
【００８３】
演算制御部１１１は、データ転送用ローカルバス１３０を介して、回路間のデータ転送と、各演算回路に対する演算開始指示の伝達と、を行い、上述したグループ署名生成アルゴリズムに従った演算が実行されて正しい演算結果が得られるように制御する。
【００８４】
また、演算制御部１１１は、演算回路に対して演算開始を指示する際に、３つの状態（秘密演算状態Ｓ１、通常演算状態Ｓ２、乱数演算状態Ｓ３）のいずれの状態に入るべきかについても併せて指示する。なお、各演算回路は、演算が終了した場合には自ら停止状態Ｓ０へと遷移する。また、後述するように、全体動作制御部１１０の電力波形かく乱制御部１１２は、演算回路に対して停止状態Ｓ０と強制乱数演算状態Ｓ４間の遷移を指示する。
【００８５】
また、演算制御部１１１は、演算回路に対して通常演算状態Ｓ２となる演算の開始を指示する際には、秘密演算状態Ｓ１にある他の演算回路が存在しているか否かを確認する。演算制御部１１１は、秘密演算状態Ｓ１にある演算回路が存在していた場合には、その演算回路での秘密演算が終了するまでの間は、通常演算状態Ｓ２の演算開始指示を保留し、開始可能な乱数演算があるか否かを判定する。そして、開始可能な乱数演算があるときには、演算制御部１１１は、消費電力波形のかく乱を行うため、その乱数演算の開始を指示する。
【００８６】
また、演算制御部１１１は、秘密演算状態Ｓ１にある演算回路が複数存在している場合には、秘密演算状態Ｓ１にある演算回路と等しいか又はそれより多い個数の演算回路が、乱数演算状態Ｓ３に入るように制御する。なお、秘密演算状態Ｓ１にある演算回路の個数に対して、乱数演算状態Ｓ３にある演算回路の個数が不足する場合には、後述するように、全体動作制御部１１０の電力波形かく乱制御部１１２が、停止状態Ｓ０にある演算回路へと乱数データを入力して強制的に乱数演算を実行させる。
【００８７】
電力波形かく乱制御部１１２は、信号線１２０を介して、各演算回路の演算状態を常時監視すると共に、強制的に乱数演算を開始させるための乱数演算指示信号と、その乱数演算の引数となる乱数データと、を各演算回路へと伝達する。
【００８８】
電力波形かく乱制御部１１２は、秘密演算状態Ｓ１にある演算回路が存在している場合に、空いている演算回路（停止状態Ｓ０にある演算回路）に対して、強制乱数演算の実行開始指示を速やかに発行する。なお、本明細書中において「速やかに」、「高速に」とは、演算回路が秘密演算状態Ｓ１である場合に、秘匿対象データが漏洩するよりも十分早い時間であることを意味し、例えば、数クロックから数１０クロック以内であることを意味する。
【００８９】
電力波形かく乱制御部１１２は、秘密演算状態Ｓ１にある演算回路が存在している場合に、乱数演算状態Ｓ３又は強制乱数演算状態Ｓ４の状態にある演算回路の合計個数が、秘密演算状態Ｓ１にある演算回路の個数以上となるように、停止状態Ｓ０にある演算回路を強制乱数演算状態Ｓ３へと遷移させる。すなわち、電力波形かく乱制御部１１２は、秘密演算状態Ｓ１にある演算回路の個数に対して乱数演算状態Ｓ３にある演算回路の個数が不足する場合に、停止状態Ｓ０にある演算回路に対して強制乱数演算の開始を指示する。
【００９０】
電力波形かく乱制御部１１２から乱数演算指示信号を受け取った演算回路は、与えられた乱数データを引数とする強制乱数演算（楕円曲線上のスカラー倍算、べき乗剰余算、乗剰余算、整数乗算）を速やかに実行する。なお、この演算時に、演算回路の状態は強制乱数状態Ｓ４に入る。
【００９１】
演算回路が秘密演算状態Ｓ１にある時間は、鍵やランダム値に依存するため、事前に予測することはできない。このため、電力波形かく乱制御部１１２は、各演算回路の演算状態を常時監視しながら、強制乱数演算の継続の可否と、強制乱数演算を開始可能な演算回路の有無と、を動的に判定する。電力波形かく乱制御部１１２は、秘密演算状態Ｓ１にある演算回路が存在しなくなった場合、或いは、他の演算回路を用いて乱数演算の実行が可能になった場合には、実行させていた強制乱数演算を速やかに停止させる。
【００９２】
なお、図４を参照して上述したように、グループ署名生成では、その演算の性質上、楕円曲線演算及びＲＳＡ演算と、整数演算とは同時には実行されない。このため、停止状態Ｓ０にある演算回路は常に存在し、そのような停止状態Ｓ０にある演算回路を強制乱数演算に利用することができる。
【００９３】
電力波形かく乱制御部１１２は、線形フィードバックシフトレジスタ（LFSR：Linear Feedback Shift Register）を備えていてもよい。電力波形かく乱制御部１１２は、線形フィードバックシフトレジスタを用いて、強制乱数演算を実行させる際に演算回路に与える乱数データを生成することができる。線形フィードバックシフトレジスタを用いて擬似乱数を高速に生成し、生成した擬似乱数を演算の引数として伝達することで、暗号用の乱数生成回路１０５を使用して乱数を生成する場合と比べて、より短時間で乱数を生成することができる。
【００９４】
停止状態Ｓ０にある演算回路を用いて強制乱数演算を行わせる場合には、乱数データを速やかに投入する必要がある。暗号処理に通常使用される乱数生成系を利用すると乱数生成に時間を要することになるため、消費電力波形がかく乱されない期間が長く生じる可能性もある。このため、線形フィードバックシフトレジスタを擬似乱数生成に使用するとよい。なお、暗号処理用の乱数としてM系列は好ましくないものの、消費電力のかく乱用には十分であり、線形フィードバックシフトレジスタを利用すれば、１クロックで生成することができる。
【００９５】
また、データ転送用ローカルバス１３０を介して線形フィードバックレジスタと乱数生成回路１０５とを接続し、電源投入直後に、乱数種保持不揮発メモリ１０８に予め記憶された乱数種を用いて、線形フィードバックシフトレジスタに初期値を速やかに設定するものとしてもよい。これにより、電源投入の都度、乱数生成用の初期値が更新されることで、同じ擬似乱数が生成されるのを防止することができる。
【００９６】
さらに、線形フィードバックシフトレジスタの初期値としては、乱数種保持不揮発メモリ１０８に記憶されている値をそのまま使用してもよいし、予測可能性の観点からは、暗号処理用の乱数生成回路１０５を用いて生成した値を使用するとより好適である。
【００９７】
真性乱数や物理乱数に代えて擬似乱数を用いた場合、擬似乱数生成について何ら工夫を行わないときには、電源投入の都度、同じ乱数系列が発生することになり、消費電力波形に再現性が生じる。そこで、擬似乱数生成系や線形フィードバックシフトレジスタの初期値（初期種）を乱数種保持不揮発メモリ１０８に予め記憶しておき、電源投入の都度、異なる乱数系列が生成されるように、値を変更（インクリメントなど）するとよい。これにより、擬似乱数を採用する場合においても、消費電力波形が再現されることを回避することができる。特に、予測不可能性の観点では、線形フィードバックシフトレジスタの初期値は、乱数種保持不揮発メモリ１０８に記憶された値をそのまま用いるのではなく、擬似乱数生成系で生成した値を使うと好適である。
【００９８】
図６は、本実施の形態に係る全体動作制御部の内部構成詳細図である。
図に示すように、全体動作制御部１１０は、有限状態機械（FSM:Finite State Machine）１１３と、デコーダ１１４と、LFSR１１５と、を備えている。有限状態機械１１３は、演算制御部１１１が実行する制御を実現する。デコーダ１１４は、各演算回路からの演算状態伝達信号を解釈すると共に、強制乱数演算の実行を指示するアービタとして動作する。LFSR１１５は、強制乱数演算を実行させる際の、乱数データを生成する。
【００９９】
次に、図７を参照して、本実施の形態にかかる全体動作制御部の動作例を説明する。図７は、全体動作制御部の動作例を示すフローチャートである。なお、図では、強制乱数演算を実行させる場合をも含めた例を説明するが、秘密演算の実行数に対してそれ以上の数の乱数演算の実行数を確保できる場合には、強制乱数演算を乱数演算に加えて実行させなくてもよい。
【０１００】
全体動作制御部１１０は、演算回路を用いた全ての基本演算（ＲＳＡ演算、楕円曲線演算、ハッシュ演算、整数演算）が実行を終了したか否かを判定する（Ｓ１０１）。全体動作制御部１１０は、全基本演算の実行が終了した場合に（Ｓ１０１で「はい」の場合）、強制乱数演算を実行中の演算回路があるときには、その演算回路での演算を停止して（Ｓ１１５）、処理を終了する。
【０１０１】
全体動作制御部１１０は、全基本演算の実行が終了していない場合には（Ｓ１０１で「いいえ」の場合）、停止状態Ｓ０にある演算回路Ａが出現するまでの間、待機する（Ｓ１０２）。
【０１０２】
全体動作制御部１１０は、秘密演算状態Ｓ１にある演算回路の個数αが、乱数演算状態Ｓ３又は強制乱数演算状態Ｓ４の状態にある演算回路の合計個数βより多いか否かを判定する（Ｓ１０３）。
【０１０３】
全体動作制御部１１０は、αがβより多い場合には（Ｓ１０３で「はい」の場合）、基本演算に含まれる演算であって開始可能な乱数演算Ｂを探索して（Ｓ１０４）、該当する乱数演算Ｂの有無を判定する（Ｓ１０５）。なお、開始可能な乱数演算Ｂが複数存在した場合には、いずれか１つの乱数演算をランダムに選択するとよい。
【０１０４】
全体動作制御部１１０は、乱数演算Ｂが存在した場合には（Ｓ１０５で「はい」の場合）、演算回路Ａに対して乱数演算Ｂの実行開始を指示する（Ｓ１０６）。全体動作制御部１１０は、乱数演算Ｂが存在しなかった場合には（Ｓ１０５で「いいえ」の場合）、演算回路Ａに対して強制乱数演算の実行を指示する（Ｓ１０７）。
【０１０５】
全体動作制御部１１０は、Ｓ１０２〜Ｓ１０７での処理を実行することで、乱数演算状態Ｓ３又は強制乱数演算状態Ｓ４の状態にある演算回路の合計個数βを、秘密演算状態Ｓ１にある演算回路の個数α以上とすることができ、電力波形を完全にかく乱することができる。
【０１０６】
全体動作制御部１１０は、αがβより多くない場合には（Ｓ１０３で「いいえ」の場合）、強制乱数演算を実行中の演算回路のうち、βからαを引いた個数分の演算回路について、その演算回路で実行中の強制乱数演算を停止する（Ｓ１０８）。これにより、αがβと等しくなるように、強制乱数演算の実行を停止させる。
【０１０７】
全体動作制御部１１０は、開始可能な基本演算Ｃを探索して（Ｓ１０９）、該当する基本演算Ｃの有無を判定する（Ｓ１１０）。全体動作制御部１１０は、基本演算Ｃが存在しない場合には（Ｓ１１０で「いいえ」の場合）、Ｓ１０１へと戻って処理を継続する。
【０１０８】
全体動作制御部１１０は、基本演算Ｃが存在した場合には（Ｓ１１０で「はい」の場合）、基本演算Ｃが秘密演算であるか否かを判定する（Ｓ１１１）。全体動作制御部１１０は、基本演算Ｃが秘密演算でなかった場合には（Ｓ１１１で「いいえ」の場合）、演算回路Ａに対して演算Ｃの実行開始を指示する（Ｓ１１４）。
【０１０９】
全体動作制御部１１０は、基本演算Ｃが秘密演算であった場合には（Ｓ１１１で「はい」の場合）、α＋１が、βより多いか否かを判定する（Ｓ１１２）。全体動作制御部１１０は、α＋１が、βより多い場合には（Ｓ１１２で「はい」の場合）、秘密演算Ｃを実行させる演算回路Ａとは異なる、停止状態Ｓ０にある演算回路が出現するまでの間、待機する（Ｓ１１３）。なお、全体動作制御部１１０は、α＋１が、βより多くない場合には（Ｓ１１２で「いいえ」の場合）、Ｓ１１４へと進み、演算回路Ａを用いて秘密演算Ｃを実行させる。
【０１１０】
本実施の形態を用いずに既存のサイドチャネル対策法を用いた場合には、演算回路（楕円演算回路１０１、ＲＳＡ演算回路１０２、１０３、整数演算回路１０４）の全てに対して一様に対策を施すことになる。その結果、署名生成の全体処理に要する時間が、最悪で２倍（平均で１．５倍）遅くなる。また、電力消費量も同様に増大する。或いは、回路全体の規模がおよそ２倍となる。
【０１１１】
これに対して本実施の形態によれば、個々の演算回路に対して対策を施す必要がない。また、署名生成全体で秘密演算の占める割合は非常に小さなものであるため、秘密演算中に電力波形のかく乱制御（強制的な乱数演算）を行うものとしても、電力波形のかく乱制御に起因する演算時間の遅れや電力増大の影響は僅かなものである。また、電力波形かく乱制御及び線形フィードックレジスタの構成を追加しても、回路規模の増大は僅かなものである。従って、サイドチャネル対策を施さなかった場合と同様の演算性能を維持しつつ、サイドチャネル攻撃への耐性を持たせることができる。
【０１１２】
実施の形態２．
次に、本発明の実施の形態２について説明する。図５に示した署名生成装置１００では、専用回路を用いて署名生成処理を実行する構成として説明したが、本発明の実施の形態２に係る署名生成装置では、これら複数のCPUを用いて署名生成装置が実行する処理を実現する。なお、以下では、上述した実施の形態１と異なる構成及び処理を中心に説明し、同一の構成及び処理については説明を省略する。
【０１１３】
署名生成装置は、楕円曲線演算を実行する複数のプロセッサコアと、ＲＳＡ演算を実行する複数のプロセッサコアと、整数演算を実行する複数のプロセッサコアと、乱数生成を実行するプロセッサコアと、ハッシュ演算を実行するプロセッサコアと、共有メモリと、全体動作制御を実行するプロセッサコアと、を少なくとも備えている。
【０１１４】
全体動作制御を実行するプロセッサコアは、基本演算を実行するプロセッサコアに対して状態Ｓ５に入る指示を行うことで、署名生成処理とは全く別の処理に使用されている状態へと遷移させる。状態Ｓ５に入ったプロセッサコアは、その処理が完了した場合に、状態Ｓ０へと遷移する。これにより、基本演算の実行に用いる複数のプロセッサコアの構成を動的に再構成する。
【０１１５】
基本演算の実行に用いるプロセッサコアの個数を増加させた場合には、秘密演算が実行されるプロセッサコアの個数と比較して強制乱数演算を実行可能なプロセッサコアを十分に確保することができる。このため、停止状態のプロセッサコアの出現を待たずに強制乱数演算の実行を開始することができる。
【０１１６】
以上説明したように本発明によれば、秘密演算を同時に乱数演算又は強制乱数演算を実行することで、秘密演算の引数とする秘匿対象データを隠蔽することができる。
【０１１７】
グループ署名の演算には乱数を用いた演算が含まれていることに着目し、そのような乱数演算と秘密演算とを、並列かつ同時に実行する。この場合には、消費電力及び計算時間のいずれも増加せずに隠蔽を行うことができる。
【０１１８】
また、秘密演算と乱数演算とが同時実行できない場合には、又は、乱数演算が秘密演算と比較して短時間で終了するような場合には、グループ署名演算に含まれる他の乱数演算を実行する。この場合も、消費電力及び計算時間は増加しない。
【０１１９】
さらに、グループ署名演算に含まれる乱数演算を同時実行できない場合には、新たに生成する乱数データを用いて強制乱数演算を実行する。この強制乱数演算の演算結果は特に意味を持たず、得られた演算結果は捨てられる。
【０１２０】
なお、秘密演算の実行中には、消費電力の増加を抑制する観点からは、グループ署名演算に含まれる乱数演算をできる限り実行させることが好ましいが、強制乱数演算のみを同時に実行させるものとしてもよい。この場合には、消費電力は増加するものの、開始可能な乱数演算の探索処理を行わずに済む。
【０１２１】
また、上記署名生成処理を、コンピュータに実行させる署名生成プログラムとして実現してもよい。署名生成装置を複数のコンピュータ（CPU）を用いて構成した場合には、署名生成プログラムは、乱数生成と、ＲＳＡ演算と、楕円曲線演算と、整数演算と、ハッシュ演算と、を、それぞれのコンピュータに実行させる。
【０１２２】
また、署名生成装置を一つのコンピュータを用いて構成する場合には、署名生成プログラムは、ＲＳＡ演算と、楕円曲線演算と、整数演算と、を含む基本演算を並列にコンピュータに実行させる。そして、署名生成プログラムは、並列実行ステップにおいて、秘匿対象データを引数とする秘密演算と、乱数を引数とする乱数演算と、を同時にコンピュータに実行させる。なお、１つのCPUを用いて実行させる場合には、逐次計算ではなく、マルチスレッド、マルチプロセスなどの並列処理として実行させる。
【０１２３】
プログラムは、様々なタイプの非一時的なコンピュータ可読媒体（non-transitory computer readable medium）を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体（tangible storage medium）を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、CD−ROM（Read Only Memory）、CD−R、CD−R/W、半導体メモリ（例えば、マスクROM、PROM（Programmable ROM）、EPROM（Erasable PROM）、フラッシュROM、RAM（random access memory））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体（transitory computer readable medium）を用いてコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【０１２４】
上述のように、本実施の形態によれば、署名生成速度の低下、電力消費の増大、回路規模の増加を招くことなく、サイドチャネル攻撃への耐性を持ちつつ署名生成を高速かつ低電力で実現するのに好適な、署名生成装置、署名生成方法、及び署名生成プログラムを提供することができる。
【０１２５】
以上、実施の形態を参照して本願発明を説明したが、本願発明は上記に応じて限定されるものではない。本願発明の構成や詳細には、発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【０１２６】
この出願は、２０１０年５月２８日に出願された日本出願特願２０１０−１２２７８０を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【産業上の利用可能性】
【０１２７】
本発明は、暗号化などの各種セキュリティ技術に利用することができる。
【符号の説明】
【０１２８】
１  署名生成装置、
２、３、４、５、６  基本演算実行器、
７  全体動作制御部、
１１  署名生成装置、
１２、１３、１４、１５、１６  基本演算実行器、
１７  全体動作制御部、
１８  通信経路、
１９  データ転送経路、
２１  楕円曲線演算、
２２  ＲＳＡ演算、
２３  ハッシュ演算、
２４  整数演算、
１００  署名生成装置、
１０１  楕円演算回路、
１０２、１０３  ＲＳＡ演算回路、
１０４  整数演算回路、
１０５  乱数生成回路、
１０６  ハッシュ演算回路、
１０７  共有メモリ、
１０８  乱数種保持不揮発メモリ、
１１０  全体動作制御部、
１１１  演算制御部、
１１２  電力波形かく乱制御部、
１１３  ＦＳＭ、
１１４  デコーダ、
１１５  ＬＦＳＲ、
１２０  信号線、
１３０  データ転送用ローカルバス
【図１】
2011148558.tif 000003
【図２】
2011148558.tif 000004
【図３】
2011148558.tif 000005
【図４】
2011148558.tif 000006
【図５】
2011148558.tif 000007
【図６】
2011148558.tif 000008
【図７】
2011148558.tif 000009
【手続補正書】
【提出日】平成24年11月27日(2012.11.27)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
署名生成手続きに含まれる基本演算をそれぞれ実行する複数の基本演算実行器と、
前記複数の基本演算実行器と互いに接続され、前記基本演算実行器での演算を制御すると共に、前記基本演算実行器の演算状態を監視し、前記複数の基本演算実行器のうちで秘匿対象データを引数とする秘密演算を実行中の基本演算実行器が存在する場合には、当該基本演算実行器以外の他の基本演算実行器に乱数を引数とする乱数演算を同時実行させる全体動作制御手段と、
を備える署名生成装置。
【請求項２】
前記署名生成装置は、
メッセージと、秘密鍵を含む鍵情報と、が入力され、生成する複数の乱数を用いて複合演算を実行して前記メッセージに対する署名を生成し、
前記秘匿対象データは、前記秘密鍵と、前記複数の乱数のうちで当該秘密鍵のマスクに用いる第１の乱数と、を含むデータであり、
前記全体動作制御手段は、
前記複数の基本演算実行器のうちで前記秘匿対象データを引数とする秘密演算を実行中の基本演算実行器が存在する場合には、当該基本演算実行器以外の他の基本演算実行器に、前記複数の乱数のうちで前記第１の乱数とは異なる第２の乱数を引数とする乱数演算を同時実行させる、又は、前記複数の乱数とは異なる第３の乱数を新たに生成して、当該第３の乱数を引数とする乱数演算を同時実行させる
ことを特徴とする請求項１に記載の署名生成装置。
【請求項３】
前記全体動作制御手段は、
前記複数の基本演算実行器のうちで前記秘匿対象データを引数とする秘密演算を実行中の基本演算実行器が存在する場合には、当該基本演算実行器以外の他の基本演算実行器に前記第２の乱数を引数とする乱数演算を開始可能であるか否かを判定し、開始可能であるときには前記第２の乱数を引数とする乱数演算を同時実行させ、開始可能でないときには、前記第３の乱数を引数とする乱数演算を同時実行させる
ことを特徴とする請求項２に記載の署名生成装置。
【請求項４】
前記全体動作制御手段は、
前記複数の基本演算実行器のうちで前記秘密演算を実行中の基本演算実行器が複数存在する場合には、前記乱数演算を同時実行させる基本演算実行器の個数が、前記秘密演算を実行中の基本演算実行器の個数以上となるように制御する
ことを特徴とする請求項１乃至３のいずれか１項に記載の署名生成装置。
【請求項５】
前記複数の基本演算実行器と前記全体動作制御手段とを互いに接続するデータ転送用ローカルバスを更に備え、
前記署名生成手続きは、ＲＳＡ演算と、楕円曲線演算と、整数演算と、ハッシュ演算と、を含み、
前記複数の基本演算実行器は、
前記ＲＳＡ演算をそれぞれ実行する複数のＲＳＡ演算回路と、
前記楕円曲線演算をそれぞれ実行する複数の楕円演算回路と、
前記整数演算をそれぞれ実行する複数の整数演算回路と、
前記ハッシュ演算を実行するハッシュ演算回路と、を用いて構成される
ことを特徴とする請求項１乃至４のいずれか１項に記載の署名生成装置。
【請求項６】
前記複数の基本演算実行器のそれぞれと前記全体動作制御手段とを互いに接続する複数の信号線を更に備え、
前記全体動作制御手段は、
前記複数の基本演算実行器を構成する各演算回路での演算を制御する演算制御手段と、
前記複数の信号線を介して伝達される演算状態伝達信号から前記各演算回路の演算状態を監視すると共に、強制的に乱数演算を開始させるための乱数演算指示信号と、当該乱数演算の引数となる乱数データと、を前記各演算回路へと伝達する電力波形かく乱制御手段と、を備える
ことを特徴とする請求項５に記載の署名生成装置。
【請求項７】
前記電力波形かく乱制御手段は、
前記乱数データを生成する線形フィードバックレジスタを更に備える
ことを特徴とする請求項６に記載の署名生成装置。
【請求項８】
乱数を生成する乱数生成回路を更に備える
ことを特徴とする請求項５乃至７のいずれか１項に記載の署名生成装置。
【請求項９】
乱数生成処理の初期値に用いる乱数種が予め記録された乱数種保持不揮発メモリを更に備える
ことを特徴とする請求項８に記載の署名生成装置。
【請求項１０】
前記複数の基本演算実行器と前記全体動作制御手段とを互いに接続するデータ転送用ローカルバスを更に備え、
前記複数の基本演算実行器は、
前記基本演算に含まれるいずれかの演算をそれぞれ実行する複数のプロセッサコアを用いて構成され、
前記全体動作制御手段は、
前記基本演算の実行に用いる前記複数のプロセッサコアの構成を動的に再構成する
ことを特徴とする請求項１乃至９のいずれか１項に記載の署名生成装置。
【請求項１１】
前記署名生成手続きは、グループ署名を生成する手続きである
ことを特徴とする請求項１乃至１０のいずれか１項に記載の署名生成装置。
【請求項１２】
署名生成装置が、
署名生成手続きに含まれる基本演算を並列に実行し、
前記基本演算の並列実行中に、秘匿対象データを引数とする秘密演算を実行する場合には、乱数を引数とする乱数演算を同時実行する
ことを特徴とする署名生成方法。
【請求項１３】
署名生成手続きに含まれる基本演算を並列に実行する処理と、
前記並列に実行する処理において、秘匿対象データを引数とする秘密演算の実行中に、乱数を引数とする乱数演算を同時実行する処理と、
をコンピュータに実行させる署名生成プログラム。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００５６
【補正方法】変更
【補正の内容】
【００５６】
ハッシュ演算２３では、楕円曲線演算２１の演算結果と、ＲＳＡ演算２２演算結果と、メッセージmと、を用いて、ハッシュ演算を行う。ハッシュ演算２３では、主に上記「（４）」の演算が行われる。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００５７
【補正方法】変更
【補正の内容】
【００５７】
整数演算２４では、ハッシュ演算２３の演算結果と、乱数と、を用いて、複数の整数演算を行う。整数演算２４では、主に上記「（５）」の各演算が行われる。整数演算２４の結果として、署名が出力される。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】００５９
【補正方法】変更
【補正の内容】
【００５９】
図５は、本実施の形態に係る署名生成装置の構成図である。署名生成装置１００は、楕円演算回路１０１と、ＲＳＡ演算回路１０２、１０３と、整数演算回路１０４と、乱数生成回路１０５と、ハッシュ演算回路１０６と、共有メモリ１０７と、乱数種保持不揮発メモリ１０８と、全体動作制御部１１０と、複数の信号線１２０と、データ転送用ローカルバス１３０と、を備えている。なお、図５では、１つの楕円演算回路１０１、２つのＲＳＡ演算回路１０２、１０３、１つの整数演算回路１０４、１つの乱数生成回路１０５を例示しているが、各回路の個数はこれに限定されず、演算回路速度と規模のトレードオフに応じて定めればよい。
【国際調査報告】
2011148558.tif 000010
2011148558.tif 000011
2011148558.tif 000012
2011148558.tif 000013
2011148558.tif 000014
2011148558.tif 000015