(57)【要約】  本発明は、秘匿すべき秘密情報を用いるセキュア処理を実行する場合に、メモリのダンプ等の不正解析による前記秘密情報の暴露を避けつつ前記セキュア処理を実行することを目的とする。  メッセージＭに対し署名鍵ｄを用いて署名を施す署名生成装置１００において、分割鍵格納手段１１０は、署名鍵ｄを少なくとも２つに分割した分割秘密鍵と、前記分割秘密鍵から前記署名鍵ｄを算出する署名鍵生成式Ｆと、署名生成式を記憶し、署名鍵生成恒等式生成手段１２０が、結合法則、分配法則、交換法則を用いて、署名鍵生成式Ｆと同じ結果を得る署名鍵生成恒等式Ｇを生成し、結合分割鍵生成手段１３０が、署名鍵生成恒等式Ｇに引数として与えるべき、前記分割秘密鍵を演算した結果である結合分割鍵を生成し、署名生成手段１５０が、前記署名鍵生成恒等式Ｇと、前記分割秘密鍵とに基づき、前記メッセージに対し、署名を施す。
2007052491.tif 000002
【特許請求の範囲】
【請求項１】
メッセージに対して秘密情報を用いたセキュア演算を施した場合と同一の演算結果を得るセキュア処理装置であって、
秘密情報を少なくとも２つに分割した分割秘密情報が引数として入力され、当該分割秘密情報から前記秘密情報を算出する第１の秘密情報生成式と、前記秘密情報を用いたセキュア演算の手順を示す第１のセキュア演算手順とを記憶している記憶手段と、
少なくとも２つの前記分割秘密情報を演算した結果である結合秘密情報が引数として入力され、前記第１の秘密情報生成式と演算上等価な第２の秘密情報生成式を生成する第１生成手段と、
前記第２の秘密情報生成式に含まれる演算子に基づいて、引数として前記結合秘密情報が入力され前記第１のセキュア演算手順と等価な演算の手順を示す第２のセキュア演算手順を生成する第２生成手段と、
前記メッセージに対し前記第２のセキュア演算手順に従ったセキュア演算を施す実行手段と
を備えることを特徴とするセキュア処理装置。
【請求項２】
前記第１の秘密情報生成式は、１以上の演算を含み、
前記第２生成手段は、前記第１の秘密情報生成式に含まれる演算から、交換法則、結合法則、分配法則のいずれかを前記演算との間で満たす代替演算のある演算をランダムに選択し、選択した演算を前記代替演算に置き換えることにより第２の秘密情報生成式を生成する
ことを特徴とする請求項１に記載のセキュア処理装置。
【請求項３】
前記第１の秘密情報生成式は１以上の演算を含み、各演算は、複数の被演算子と、被演算子同士の計算の内容を示す演算子とを含み、
前記記憶手段は、前記第１の秘密情報生成式に係る前記被演算子と前記演算子との関係を示す属性情報を記憶しており、
前記第１生成手段は、前記属性情報を用いて前記第２の秘密情報生成式を生成する
ことを特徴とする請求項２に記載のセキュア処理装置。
【請求項４】
前記第１の秘密情報生成式において、前記被演算子には引数の値が入力され、前記引数それぞれの値は、前記分割秘密情報のいずれかが重複無く対応し、
前記属性情報は、結合可能な複数の被演算子と対応する演算子を示し、
前記第１生成手段は、前記属性情報に基づき、前記第１の秘密情報生成式における前記複数の被演算子を前記演算子で結合し、
前記第２生成手段は、前記結合秘密情報を、前記結合された各被演算子に対応する分割秘密情報を、前記演算子を用いて結合することにより生成する
ことを特徴とする請求項３に記載のセキュア処理装置。
【請求項５】
前記第２の秘密情報生成式は、１以上の演算を含み、各演算は、複数の被演算子と、被演算子同士の計算の内容を示す演算子とを含み、
前記記憶手段は、前記第２の秘密情報生成式に係る前記被演算子と前記演算子との関係を示す属性情報を記憶しており、
前記第２生成手段は、前記属性情報を用いて前記第２のセキュア演算手順を生成する
ことを特徴とする請求項２に記載のセキュア処理装置。
【請求項６】
前記第１生成手段は、更に、
乱数情報を生成し、前記乱数情報を含んだ前記第２の秘密情報生成式を生成し、
前記第２生成手段は、
前記第２の秘密情報生成式に基づき、前記結合秘密情報と前記乱数情報とを用いて前記第１のセキュア演算手順と等価な演算の手順を示す第２のセキュア演算手順を生成し、
前記実行手段は、
前記メッセージに対し前記結合秘密情報と、前記乱数情報とを用いて前記第２のセキュア演算手順に従ったセキュア演算を施す
ことを特徴とする請求項１に記載のセキュア処理装置。
【請求項７】
前記第１生成手段は、更に、
前記秘密情報を用いた、演算処理の結果に影響を与えない冗長情報を生成し、
当該冗長情報を用いて、前記第２の秘密情報生成式を生成する
ことを特徴とする請求項１に記載のセキュア処理装置。
【請求項８】
前記記憶手段は、前記分割秘密情報と共に前記実行手段により用いられないダミー情報を記憶している
ことを特徴とする請求項１に記載のセキュア処理装置。
【請求項９】
前記秘密情報は、デジタル署名を生成するための署名鍵であり、
前記セキュア演算は、前記メッセージにデジタル署名を施す署名生成演算である
ことを特徴とする請求項１に記載のセキュア処理装置。
【請求項１０】
前記署名生成処理は、ＲＳＡ（Ｒｉｖｅｓｔ  Ｓｈａｍｉｒ  Ａｄｌｅｍａｎ）署名生成処理である
ことを特徴とする請求項９記載のセキュア処理装置。
【請求項１１】
前記署名生成処理は、楕円曲線デジタル署名方式による署名処理である
ことを特徴とする請求項９記載のセキュア処理装置。
【請求項１２】
前記セキュア処理装置は、更に、
乱数情報を生成する乱数情報生成手段を備え、
前記実行手段は、前記楕円曲線デジタル署名方式における定義体ＧＦ（ｐ）上の楕円曲線の位数ｑであるベースポイントＰの乱数値ｋ倍点を計算する処理と、定義体ＧＦ（ｑ）上でのｋの逆数の値を用いた処理とを、前記乱数ｋを直接利用することなく、少なくとも２つの前記乱数情報を用いて行う
ことを特徴とする請求項１１記載のセキュア処理装置。
【請求項１３】
前記秘密情報は前記公開鍵暗号の前記秘密鍵であり、
前記実行手段は、前記セキュア演算として、公開鍵と秘密鍵を利用した公開鍵暗号系の処理を行う
ことを特徴とする請求項１に記載のセキュア処理装置。
【請求項１４】
前記公開鍵暗号はＲＳＡ暗号である
ことを特徴とする請求項１３記載のセキュア処理装置。
【請求項１５】
前記公開鍵暗号は楕円曲線暗号である
ことを特徴とする請求項１３記載のセキュア処理装置。
【請求項１６】
前記セキュア処理装置は、更に、
外部から、前記第１生成手段の更新用データを取得する取得手段と、
前記更新用データを用いて、前記第１生成手段を更新する更新手段と
を含むことを特徴とする請求項１に記載のセキュア処理装置。
【請求項１７】
前記セキュア処理装置は、更に、
外部から、更新用の分割秘密情報を取得する取得手段と、
前記記憶手段に記憶されている分割秘密情報を、前記取得手段が取得した更新用の分割秘密情報に更新する更新手段と
を含むことを特徴とする請求項１に記載のセキュア処理装置。
【請求項１８】
メッセージに対して秘密情報を用いたセキュア演算を施した場合と同一の演算結果を得るセキュア処理装置において用いられるセキュア処理方法であって、
前記セキュア処理装置は、
秘密情報を少なくとも２つに分割した分割秘密情報が引数として入力され、当該分割秘密情報から前記秘密情報を算出する第１の秘密情報生成式と、前記秘密情報を用いたセキュア演算の手順を示す第１のセキュア演算手順とを記憶している記憶手段を備えており、
前記セキュア処理方法は、
少なくとも２つの前記分割秘密情報を演算した結果である結合秘密情報が引数として入力され、前記第１の秘密情報生成式と同一の結果を出力する第２の秘密情報生成式を生成する第１生成ステップと、
前記第２の秘密情報生成式に含まれる演算子に基づいて、前記結合秘密情報が引数として入力され前記第１のセキュア演算手順と等価な演算の手順を示す第２のセキュア演算手順を生成する第２生成ステップと、
前記メッセージに対し前記第２のセキュア演算手順に従ったセキュア演算を施す実行ステップと
を含むことを特徴とするセキュア処理方法。
【請求項１９】
メッセージに対して秘密情報を用いたセキュア演算を施した場合と同一の演算結果を得るセキュア処理装置において用いられるコンピュータプログラムであって、
前記セキュア処理装置は、
秘密情報を少なくとも２つに分割した分割秘密情報が引数として入力され、当該分割秘密情報から前記秘密情報を算出する第１の秘密情報生成式と、前記秘密情報を用いたセキュア演算の手順を示す第１のセキュア演算手順とを記憶している記憶手段を備えており、
前記コンピュータプログラムは、
少なくとも２つの前記分割秘密情報を演算した結果である結合秘密情報が引数として入力され、前記第１の秘密情報生成式と演算上等価な第２の秘密情報生成式を生成する第１生成ステップと、
前記第２の秘密情報生成式に含まれる演算子に基づいて、前記結合秘密情報が引数として入力され前記第１のセキュア演算手順と等価な演算の手順を示す第２のセキュア演算手順を生成する第２生成ステップと、
前記メッセージに対し前記第２のセキュア演算手順に従ったセキュア演算を施す実行ステップと
を含むことを特徴とするコンピュータプログラム。
【請求項２０】
コンピュータ読み取り可能な記録媒体であって、請求項１９に記載のコンピュータプログラムを記録していることを特徴とする記録媒体。
【請求項２１】
メッセージに対して秘密情報を用いたセキュア演算を施した場合と同一の演算結果を得る集積回路であって、
秘密情報を少なくとも２つに分割した分割秘密情報が引数として入力され、当該分割秘密情報から前記秘密情報を算出する第１の秘密情報生成式と、前記秘密情報を用いたセキュア演算の手順を示す第１のセキュア演算手順とを記憶している記憶手段と、
少なくとも２つの前記分割秘密情報を演算した結果である結合秘密情報が引数として入力され、前記第１の秘密情報生成式と演算上等価な第２の秘密情報生成式を生成する第１生成手段と、
前記第２の秘密情報生成式に含まれる演算子に基づいて、引数として前記結合秘密情報が入力され前記第１のセキュア演算手順と等価な演算の手順を示す第２のセキュア演算手順を生成する第２生成手段と、
前記メッセージに対し前記第２のセキュア演算手順に従ったセキュア演算を施す実行手段と
を備えることを特徴とする集積回路。
【請求項２２】
秘密情報を用いた演算を行うセキュア処理装置に、前記秘密情報を難読化して埋め込む難読化秘密情報埋め込み方法であって、
前記秘密情報を解析が困難な状態に変換する難読化装置を用いて、前記秘密情報を難読化する秘密情報難読化ステップと、
難読化情報書き込み装置を用いて、難読化された秘密情報を前記セキュア処理装置に埋め込む埋込ステップと
を含むことを特徴とする難読化秘密情報埋め込み方法。
【請求項２３】
前記難読化装置は、前記秘密情報の難読化の方法を決定するためのパラメータを入力として受け付ける入力手段を備え、
前記秘密情報難読化ステップは、
前記入力手段が前記パラメータを受け付ける受付ステップと、
前記パラメータに基いて決定される難読化方法で、前記秘密情報を難読化する難読化ステップと
を含むことを特徴とする請求項２２に記載の難読化秘密情報埋め込み方法。
【請求項２４】
前記パラメータは、前記秘密情報の分割個数であり、
前記難読化ステップは、前記分割個数に基づいて、前記秘密情報を少なくとも２つの分割秘密情報に分割する分割ステップを含む
ことを特徴とする請求項２３に記載の難読化秘密情報埋め込み方法。
【請求項２５】
前記難読化ステップは、更に、
前記分割個数に基づき、少なくとも前記分割個数の項を含む第１の秘密情報生成式を生成する式生成ステップを含み、
前記分割ステップは、前記第１の秘密情報生成式から前記秘密情報が算出されるように、前記秘密情報を分割する
ことを特徴とする請求項２４に記載の難読化秘密情報埋め込み方法。
【請求項２６】
前記パラメータは、第１の秘密情報生成式であり、
前記難読化ステップは、
前記第１の秘密情報生成式から前記秘密情報が算出されるように、前記秘密情報を少なくとも２つの分割秘密情報に分割するステップ
を含むことを特徴とする請求項２３に記載の難読化秘密情報埋め込み方法。
【請求項２７】
前記秘密情報は、鍵発行機関から発行される秘密鍵であり、
前記難読化秘密情報埋め込み方法は、
前記鍵発行機関が前記秘密鍵を鍵発行機関の秘密鍵で暗号化する暗号化ステップと、
前記難読化装置が、暗号化された前記鍵を公開鍵で復号および検証する検証ステップとをさらに有し、
前記秘密情報難読化ステップは、検証された前記秘密鍵を難読化し、
前記埋込ステップは、
前記難読化装置により難読化された前記難読化情報をバイナリデータに変換するバイナリ変換ステップと、
前記秘密情報を用いた演算結果と同一の結果を前記難読化秘密情報を用いて演算する機能を有するセキュア処理装置に、前記バイナリデータを埋め込むバイナリ埋込ステップと
を含むことを特徴とする請求項２２に記載の難読化秘密情報埋め込み方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムの不正な改ざんや解析を防止する技術等に関するものである。
【背景技術】
【０００２】
従来、データの改ざん検出等の目的で、電子署名（以下、署名とも呼ぶ）が広く用いられている。その署名生成方法の一つに、ＲＳＡ（Ｒｉｖｅｓｔ  Ｓｈａｍｉｒ  Ａｄｌｅｍａｎ）署名生成法がある。ＲＳＡ署名生成法では、署名対象メッセージＭに対して署名鍵ｄを使って、Ｓ＝Ｍ＾ｄ  ｍｏｄ  ｎという演算を行うことにより署名Ｓを生成する。
上述した署名鍵ｄは保護しなくてはならない情報であり、以下、このような情報のことを秘密情報と呼ぶ。また、本明細書において、記号＾は、ベキ乗演算を表し、記号＊は、乗算を表すものとする。【０００３】
ここで、上述のＲＳＡ署名生成の処理実行中には、コンピュータ内のＲＡＭやＣＰＵのレジスタなどのメモリ上に署名鍵ｄの値が出現してしまうため、これらのメモリを解析することにより署名鍵ｄが不正に取得される危険性がある。
このような署名鍵ｄの不正取得を防ぐための技術の１つとして、署名鍵ｄの値をメモリ上に出現させることなく署名生成を行う手法が非特許文献１に開示されている。【０００４】
非特許文献１の手法では、まず、署名鍵生成式ｄ＝（ｄ１＊ｄ２）＋ｄ３を満たすようなｄ１、ｄ２、ｄ３を求める。ここで、ｄ１、ｄ２およびｄ３が上述した分割鍵であり、署名鍵から分割鍵を生成することを署名鍵の分割と呼ぶ。
この分割鍵（ｄ１、ｄ２、ｄ３）と署名鍵生成式に基づき
Ｓ１＝Ｍ＾ｄ１  ｍｏｄ  ｎ
Ｓ２＝Ｓ１＾ｄ２  ｍｏｄ  ｎ
Ｓ＝Ｓ２＊Ｍ＾ｄ３  ｍｏｄ  ｎ
の順に演算を行う。これにより、署名鍵ｄを使うことなく、ＲＳＡ署名生成式Ｓ＝Ｍ＾ｄ  ｍｏｄ  ｎと同じ署名Ｓが得られる。また、署名生成処理中には、メモリ上に、署名鍵ｄではなく、分割鍵（ｄ１、ｄ２、ｄ３）が現れることとなるので、署名鍵ｄを保護することが出来る。
【非特許文献１】「署名生成ソフトウェアのランタイムデータ探索による耐タンパー性評価」  横浜国立大学  本田洋之  松本  勉  ＳＣＩＳ２００５
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、前述した手法では署名鍵生成式が常に固定であるため、署名生成部を静的解析することで署名鍵生成式を特定することができる。
さらに、毎回同一の分割鍵を利用するため、署名対象データを変えながら複数回の署名生成時のランタイムデータを収集し、収集した複数のランタイムデータ同士の差分を見て不変なデータを抽出するという動的解析を行うことにより、分割鍵を特定することができる。【０００６】
そして、上記の方法により特定した分割鍵と署名鍵生成式とを用いると署名鍵の特定が可能であるという課題があった。
上記課題に鑑み本発明は、不正解析者により静的解析や動的解析が成された場合であっても、秘密情報を秘匿することが出来るセキュア処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記課題を解決するために、本発明は、メッセージに対して秘密情報を用いたセキュア演算を施した場合と同一の演算結果を得るセキュア処理装置であって、秘密情報を少なくとも２つに分割した分割秘密情報が引数として入力され、当該分割秘密情報から前記秘密情報を算出する第１の秘密情報生成式と、前記秘密情報を用いたセキュア演算の手順を示す第１のセキュア演算手順とを記憶している記憶手段と、少なくとも２つの前記分割秘密情報を演算した結果である結合秘密情報が引数として入力され、前記第１の秘密情報生成式と演算上等価な第２の秘密情報生成式を生成する第１生成手段と、前記第２の秘密情報生成式に含まれる演算子に基づいて、引数として前記結合秘密情報が入力され前記第１のセキュア演算手順と等価な演算の手順を示す第２のセキュア演算手順を生成する第２生成手段と、前記メッセージに対し前記第２のセキュア演算手順に従ったセキュア演算を施す実行手段とを備える。
【発明の効果】
【０００８】
本発明のセキュア処理装置は、上述の構成を備えることにより、セキュア処理の実行毎に、前記結合秘密情報を生成し、第２のセキュア演算手順を生成し、第２のセキュア演算手順を実行することにより、第１のセキュア演算と同じ結果を得るので、前記秘密情報の代わりにセキュア演算毎に異なる値となる結合秘密情報が演算用のメモリ上に現れ、第２のセキュア演算手順がセキュア処理の実行毎に異なるものとなるため、静的解析及び動的解析による前記秘密情報の特定が困難となる。よって、前記秘密情報を秘匿することが出来る。【０００９】
また、前記第１の秘密情報生成式は、１以上の演算を含み、前記第２生成手段は、前記第１の秘密情報生成式に含まれる演算から、交換法則、結合法則、分配法則のいずれかを前記演算との間で満たす代替演算のある演算をランダムに選択し、選択した演算を前記代替演算に置き換えることにより第２の秘密情報生成式を生成することとしてもよい。
また、前記第１の秘密情報生成式は１以上の演算を含み、各演算は、複数の被演算子と、被演算子同士の計算の内容を示す演算子とを含み、前記記憶手段は、前記第１の秘密情報生成式に係る前記被演算子と前記演算子との関係を示す属性情報を記憶しており、前記第１生成手段は、前記属性情報を用いて前記第２の秘密情報生成式を生成することとしてもよい。【００１０】
また、前記第１の秘密情報生成式において、前記被演算子には引数の値が入力され、前記引数それぞれの値は、前記分割秘密情報のいずれかが重複無く対応し、前記属性情報は、結合可能な複数の被演算子と対応する演算子を示し、前記第１生成手段は、前記属性情報に基づき、前記第１の秘密情報生成式における前記複数の被演算子を前記演算子で結合し、前記第２生成手段は、前記結合秘密情報を、前記結合された各被演算子に対応する分割秘密情報を、前記演算子を用いて結合することにより生成することとしてもよい。【００１１】
また、前記第２の秘密情報生成式は、１以上の演算を含み、各演算は、複数の被演算子と、被演算子同士の計算の内容を示す演算子とを含み、前記記憶手段は、前記第２の秘密情報生成式に係る前記被演算子と前記演算子との関係を示す属性情報を記憶しており、前記第２生成手段は、前記属性情報を用いて前記第２のセキュア演算手順を生成することとしてもよい。【００１２】
この構成によれば、第１の秘密情報生成式と同じ結果を得る第２の秘密情報生成式をランダムに生成することができるので、静的解析による秘密情報の特定を困難にすることができる。
また、前記第１生成手段は、更に、乱数情報を生成し、前記乱数情報を含んだ前記第２の秘密情報生成式を生成し、前記第２生成手段は、前記第２の秘密情報生成式に基づき、前記結合秘密情報と前記乱数情報とを用いて前記第１のセキュア演算手順と等価な演算の手順を示す第２のセキュア演算式を生成し、前記実行手段は、前記メッセージに対し前記結合秘密情報と、前記乱数情報とを用いて前記第２のセキュア演算手順に従ったセキュア演算を施すこととしてもよい。【００１３】
この構成によれば、乱数情報を含むことにより、前記第２の秘密情報生成式の解析が困難となり、乱数情報を用いて実行する第２のセキュア演算手順に従ったセキュア演算の静的解析を困難にすることができる。
また、前記第１生成手段は、更に、前記秘密情報を用いた、演算処理の結果に影響を与えない冗長情報を生成し、当該冗長情報を用いて、前記第２の秘密情報生成式を生成することとしてもよい。【００１４】
この構成によれば、冗長情報を用いるので第２の秘密情報生成式の静的解析を困難にすることができる。
また、前記記憶手段は、前記分割秘密情報と共に前記実行手段により用いられないダミー情報を記憶していることとしてもよい。
この構成によれば、記憶手段に記憶されている情報に基づきセキュア処理を静的解析することを困難にすることができる。【００１５】
また、前記秘密情報は、デジタル署名を生成するための署名鍵であり、前記セキュア演算は、前記メッセージにデジタル署名を施す署名生成演算であることとしてもよい。
この構成によれば、デジタル署名処理の実行において、静的解析による秘密情報の特定を困難にすることができる。
また、前記署名生成処理は、ＲＳＡ（Ｒｉｖｅｓｔ  Ｓｈａｍｉｒ  Ａｄｌｅｍａｎ）署名生成処理であることとしてもよい。【００１６】
この構成によれば、ＲＳＡ署名生成処理の実行において、静的解析による秘密情報の特定を困難にすることができる。
また、前記署名生成処理は、楕円曲線デジタル署名方式による署名処理であることとしてもよい。
また、前記セキュア処理装置は、更に、乱数情報を生成する乱数情報生成手段を備え、前記実行手段は、前記楕円曲線デジタル署名方式における定義体ＧＦ（ｐ）上の楕円曲線の位数ｑであるベースポイントＰの乱数値ｋ倍点を計算する処理と、定義体ＧＦ（ｑ）上でのｋの逆数の値を用いた処理とを、前記乱数ｋを直接利用することなく、少なくとも２つの前記乱数情報を用いて行うこととしてもよい。【００１７】
この構成によれば、楕円曲線デジタル署名方式による署名処理の実行において、静的解析による秘密情報の特定を困難にすることができる。
また、前記秘密情報は前記公開鍵暗号の前記秘密鍵であり、前記実行手段は、前記セキュア演算として、公開鍵と秘密鍵を利用した公開鍵暗号系の処理を行うこととしてもよい。【００１８】
この構成によれば、公開鍵暗号によるセキュア処理の実行において、静的解析による秘密鍵の特定を困難にすることができる。
また、前記公開鍵暗号はＲＳＡ暗号であることとしてもよい。
この構成によれば、ＲＳＡ暗号によるセキュア処理の実行において、静的解析による秘密鍵の特定を困難にすることができる。【００１９】
また、前記公開鍵暗号は楕円曲線暗号であることとしてもよい。
この構成によれば、楕円曲線暗号によるセキュア処理の実行において、静的解析による秘密鍵の特定を困難にすることができる。
また、前記セキュア処理装置は、更に、外部から、前記第１生成手段の更新用データを取得する取得手段と、前記更新用データを用いて、前記第１生成手段を更新する更新手段とを含むこととしてもよい。【００２０】
この構成によれば、第１生成手段を更新することにより、セキュア処理実行時に静的解析される場合であっても、秘密情報の特定を困難にすることができる。  また、生成される分割鍵の個数や結合分割鍵の個数を、装置外部から調整することが可能となり、セキュリティ強度を柔軟に設定することが可能となる。
また、前記セキュア処理装置は、更に、外部から、更新用の分割秘密情報を取得する取得手段と、前記記憶手段に記憶されている分割秘密情報を、前記取得手段が取得した更新用の分割秘密情報に更新する更新手段とを含むこととしてもよい。【００２１】
この構成によれば、分割秘密情報を更新することにより、セキュア処理実行時に静的解析される場合であっても、秘密情報の特定を困難にすることができる。
また、生成される分割鍵の個数や結合分割鍵の個数を、装置外部から調整することが可能となり、セキュリティ強度を柔軟に設定することが可能となる。
本発明のセキュア処理方法は、メッセージに対し秘密情報を用いたセキュア演算を施した場合と同一の演算結果を得るセキュア処理装置において用いられるセキュア処理方法であって、前記セキュア処理装置は、秘密情報を少なくとも２つに分割した分割秘密情報が引数として入力され、当該分割秘密情報から前記秘密情報を算出する第１の秘密情報生成式と、前記秘密情報を用いたセキュア演算の手順を示す第１のセキュア演算手順とを記憶している記憶手段を備えており、前記セキュア処理方法は、少なくとも２つの前記分割秘密情報を演算した結果である結合秘密情報が引数として入力され、前記第１の秘密情報生成式と同一の結果を出力する第２の秘密情報生成式を生成する第１生成ステップと、前記第２の秘密情報生成式に含まれる演算子に基づいて、前記結合秘密情報が引数として入力され前記第１のセキュア演算手順と等価な演算の手順を示す第２のセキュア演算手順を生成する第２生成ステップと、前記メッセージに対し前記第２のセキュア演算手順に従ったセキュア演算を施す実行ステップとを含む。【００２２】
本発明のコンピュータプログラムは、メッセージに対して秘密情報を用いたセキュア演算を施した場合と同一の演算結果を得るセキュア処理装置において用いられるコンピュータプログラムであって、前記セキュア処理装置は、秘密情報を少なくとも２つに分割した分割秘密情報が引数として入力され、当該分割秘密情報から前記秘密情報を算出する第１の秘密情報生成式と、前記秘密情報を用いたセキュア演算の手順を示す第１のセキュア演算手順とを記憶している記憶手段を備えており、前記コンピュータプログラムは、少なくとも２つの前記分割秘密情報を演算した結果である結合秘密情報が引数として入力され、前記第１の秘密情報生成式と演算上等価な第２の秘密情報生成式を生成する第１生成ステップと、前記第２の秘密情報生成式に含まれる演算子に基づいて、前記結合秘密情報が引数として入力され前記第１のセキュア演算手順と等価な演算の手順を示す第２のセキュア演算手順を生成する第２生成ステップと、前記メッセージに対し前記第２のセキュア演算手順に従ったセキュア演算を施す実行ステップとを含む。【００２３】
本発明の記録媒体は、コンピュータ読み取り可能な記録媒体であって、前記コンピュータプログラムを記録している。
本発明の集積回路は、メッセージに対して秘密情報を用いたセキュア演算を施した場合と同一の演算結果を得る集積回路であって、秘密情報を少なくとも２つに分割した分割秘密情報が引数として入力され、当該分割秘密情報から前記秘密情報を算出する第１の秘密情報生成式と、前記秘密情報を用いたセキュア演算の手順を示す第１のセキュア演算手順とを記憶している記憶手段と、少なくとも２つの前記分割秘密情報を演算した結果である結合秘密情報が引数として入力され、前記第１の秘密情報生成式と演算上等価な第２の秘密情報生成式を生成する第１生成手段と、前記第２の秘密情報生成式に含まれる演算子に基づいて、引数として前記結合秘密情報が入力され前記第１のセキュア演算手順と等価な演算の手順を示す第２のセキュア演算手順を生成する第２生成手段と、前記メッセージに対し前記第２のセキュア演算手順に従ったセキュア演算を施す実行手段とを備える。【００２４】
この構成によれば、セキュア処理の実行毎に、前記結合秘密情報を生成し、第２のセキュア演算手順を生成し、第２のセキュア演算手順を実行することにより、第１のセキュア演算と同じ結果を得るので、前記秘密情報の代わりにセキュア演算毎に異なる値となる結合秘密情報が演算用のメモリ上に現れ、第２のセキュア演算手順がセキュア処理の実行毎に異なるものとなるため、静的解析による前記秘密情報の特定が困難となる。よって、前記秘密情報を秘匿することが出来る。【００２５】
本発明の難読化秘密情報埋め込み方法は、秘密情報を用いた演算を行うセキュア処理装置に、前記秘密情報を難読化して埋め込む難読化秘密情報埋め込み方法であって、前記秘密情報を解析が困難な状態に変換する難読化装置を用いて、前記秘密情報を難読化する秘密情報難読化ステップと、難読化情報書き込み装置を用いて、難読化された秘密情報を前記セキュア処理装置に埋め込む埋込ステップとを含む。【００２６】
この構成によれば、セキュア処理装置に秘密情報を難読化して埋め込むことにより、秘密情報が暴露されるのを防ぐことができる。
また、前記難読化装置は、前記秘密情報の難読化の方法を決定するためのパラメータを入力として受け付ける入力手段を備え、前記秘密情報難読化ステップは、前記入力手段が前記パラメータを受け付ける受付ステップと、前記パラメータに基いて決定される難読化方法で、前記秘密情報を難読化する難読化ステップとを含んでもよい。【００２７】
この構成によれば、前記秘密情報の難読化の方法を決定するためのパラメータを外部から与えることにより、セキュリティ強度を柔軟に設定することができる。
また、前記パラメータは、前記秘密情報の分割個数であり、前記難読化ステップは、前記分割個数に基づいて、前記秘密情報を少なくとも２つの分割秘密情報に分割する分割ステップを含むこととしてもよい。【００２８】
また、前記難読化ステップは、更に、前記分割個数に基づき、少なくとも前記分割個数の項を含む第１の秘密情報生成式を生成する式生成ステップを含み、前記分割ステップは、前記第１の秘密情報生成式から前記秘密情報が算出されるように、前記秘密情報を分割することとしてもよい。
この構成によれば、秘密情報の分割個数を装置外部から調整することが可能になるためセキュリティ強度を柔軟に設定することができる。【００２９】
また、前記パラメータは、第１の秘密情報生成式であり、前記難読化ステップは、前記第１の秘密情報生成式から前記秘密情報が算出されるように、前記秘密情報を少なくとも２つの分割秘密情報に分割するステップを含んでもよい。
この構成によれば、第１の秘密情報生成式を装置外部から与えることが可能になるため、セキュリティ強度を柔軟に設定することができる。【００３０】
また、前記秘密情報は、鍵発行機関から発行される秘密鍵であり、前記難読化秘密情報埋め込み方法は、前記鍵発行機関が前記秘密鍵を鍵発行機関の秘密鍵で暗号化する暗号化ステップと、前記難読化装置が、暗号化された前記鍵を公開鍵で復号および検証する検証ステップとをさらに有し、前記秘密情報難読化ステップは、検証された前記秘密鍵を難読化し、前記埋込ステップは、前記難読化装置により難読化された前記難読化情報をバイナリデータに変換するバイナリ変換ステップと、前記秘密情報を用いた演算結果と同一の結果を前記難読化秘密情報を用いて演算する機能を有するセキュア処理装置に、前記バイナリデータを埋め込むバイナリ埋込ステップとを含んでもよい。【００３１】
この構成によれば、鍵発行機関からメーカーへ渡される秘密鍵を、受け渡し途中の盗聴や改ざんから保護することができる。
【図面の簡単な説明】
【００３２】
【図１】本発明の実施の形態１における署名生成装置の構成概要を示す図である。
【図２】本発明の実施の形態１における分割鍵識別情報テーブルの構成を示す図である。
【図３】本発明の実施の形態１における署名鍵生成式をツリー構造で概念的に表現した図である。
【図４】本発明の実施の形態１における分割鍵情報テーブルを示す図である。
【図５】本発明の実施の形態１における署名生成の概要を示すフローチャートである。
【図６】本発明の実施の形態１における恒等式生成フローチャートである。
【図７】本発明の実施の形態１における交換法則を利用したランダムシャッフル処理を表すフローチャートである。
【図８】本発明の実施の形態１における結合法則を利用したランダムグループ分けの処理を表すフローチャートである。
【図９】本発明の実施の形態１におけるランダムシャッフル、ランダムグループ分け処理実行後の分割鍵情報テーブルを示す図である。
【図１０】本発明の実施の形態１におけるマトリックスを利用した恒等式生成処理の概念を示す図である。
【図１１】本発明の実施の形態１における結合分割鍵識別情報テーブルを示す図である。
【図１２】本発明の実施の形態１における署名生成処理を詳細に示すフローチャートである。
【図１３】本発明の実施の形態１における図１２のフローチャートの続きを示す図である。
【図１４】本発明の実施の形態１における署名生成式の生成の具体例を説明する図である。
【図１５】本発明の実施の形態２におけるＥＣＤＳＡのフローチャートである。
【図１６】本発明の実施の形態２における図１５のＳ１５０２の詳細フローチャートである。
【図１７】本発明の実施の形態２における図１５のＳ１５０４の詳細フローチャートである。
【図１８】本発明の実施の形態３における分割鍵埋め込み工程を示す図である。
【図１９】本発明の実施の形態４における署名鍵生成恒等式生成手段１２０のプログラムの更新の概要を示す図である。
【図２０】本発明の実施の形態４における署名鍵生成恒等式生成プログラムの更新を示すフローチャートである。
【符号の説明】
【００３３】
１０    メッセージＭ
２０    署名鍵Ｄ
２１    署名鍵生成式Ｆ
２２    分割鍵生成装置
３０    署名Ｓ
１００    署名生成装置
１１０    分割鍵格納手段
１２０    署名鍵生成恒等式生成手段
１２１    署名鍵生成恒等式Ｇ
１３０    結合分割鍵生成手段
１４０    結合分割鍵格納手段
１５０    署名生成手段
２００    分割識別情報テーブル
２０１    分割鍵識別子
１０００    マトリックス
１００１    結合箇所選択部
１９００    ネットワーク
１９０１    更新サーバ
１９０２    更新用の署名鍵生成恒等式生成プログラム
１９０３    更新用の署名鍵生成恒等式生成プログラムの改ざん検出値
１９１０    送受信手段
１９２０    署名鍵生成恒等式生成プログラム更新手段
【発明を実施するための最良の形態】
【００３４】
以下、本発明の実施の形態について、図面を参照しながら説明する。
（実施の形態１）
本発明の実施の形態１に係る秘密情報を用いセキュア処理を行うセキュア処理装置について、署名鍵を用いて署名生成を行う署名生成装置を例として説明する。
本発明の一実施形態に係る署名生成装置は、入力されるメッセージＭに対し、署名生成式Ｓ＝Ｍ＾ｄ  ｍｏｄ  ｎに基づく署名Ｓを生成する場合に、署名鍵ｄを直接メモリ上に現さず、署名鍵ｄの代わりに分割鍵をメモリ上に現し署名を生成するものであり、かつ、分割鍵の生成手順、分割鍵の値、署名の生成手順を署名生成毎に動的に変更する。【００３５】
これにより、不正解析者による静的解析や動的解析に対し、秘密情報である署名鍵ｄを秘匿することが出来る。
＜構成＞
図１は、本実施の形態１における、署名生成装置１００を含む署名生成システムの概要図である。【００３６】
署名生成システムは、署名鍵生成式Ｆ２１を用いて、署名鍵Ｄから後述する分割鍵を生成する分割鍵生成装置２２と、前記分割鍵を用いて署名を生成する署名生成装置１００とを含んで構成される。
メッセージＭ１０は、署名対象データであり、署名生成装置１００に入力されるデータである。なお、図１において、メッセージＭ１０は、外部から署名生成装置１００に入力されているが、署名生成装置１００内で生成したデータでもよく、署名鍵生成装置のメモリ内に格納されているプログラムコードやデータであってもよい。【００３７】
署名鍵Ｄ２０は、署名生成に利用する秘密鍵情報であり、不正解析から保護されるべき情報である。具体的には、公開鍵暗号系を用いたＲＳＡ署名生成の場合、素数ｐと素数ｑの積をｎとした時のＲＳＡ署名生成演算Ｍ＾ｄ  ｍｏｄ  ｎにおける変数ｄが秘密鍵情報に当たり、ｄには、署名鍵Ｄ２０が代入される。
図２に示す分割鍵１１１（Ｄ１、Ｄ２、Ｄ３…、Ｄｎ）は、署名生成時に署名鍵Ｄ２０そのものの値がメモリ上に現れないようにするため、分割鍵生成装置２２が、署名鍵Ｄ２０の値を署名鍵生成恒等式Ｆ２１に基づいて予め分割して得た分割鍵である。ここで、署名鍵生成式Ｆ２１と分割鍵１１１（Ｄ１、Ｄ２、Ｄ３、…、Ｄｎ）との間には、分割鍵１１１（Ｄ１、Ｄ２、Ｄ３、…、Ｄｎ）を用いて署名鍵生成式Ｆ２１を計算することにより、署名鍵Ｄ２０の値が算出可能となるという関係がある。【００３８】
次に、分割鍵生成装置２２、署名生成装置１００について、順に説明する。
（１）分割鍵生成装置２２
分割鍵生成装置２２は、外部から、署名鍵生成式Ｆ２１と、署名鍵Ｄ２０との入力を受け付けて、署名鍵生成式Ｆ２１と署名鍵Ｄ２０とに基づき、分割鍵識別情報テーブル２００と、分割鍵情報テーブル４００とを生成し、分割鍵識別情報テーブル２００と、分割鍵情報テーブル４００とを、後述する署名生成装置１００が備える分割鍵格納手段１１０に書き込む。【００３９】
分割鍵生成装置２２は、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭ、ハードディスクユニット、ディスプレイユニット、キーボード、マウスなどから構成されるコンピュータシステムである。前記ＲＯＭ又は前記ハードディスクユニットには、コンピュータプログラムが記憶されており、前記コンピュータプログラムが前記ＲＡＭ上に読み出され、前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、分割鍵生成装置２２は、その機能を達成する。【００４０】
ここで、署名鍵生成式Ｆ２１は、一例として、８変数（ｄ１〜ｄ８）を引数とする下式であるものとする。
Ｆ（ｄ１，ｄ２，ｄ３，ｄ４，ｄ５，ｄ６，ｄ７，ｄ８）＝（ｄ１＋ｄ２＋ｄ３＋ｄ４）＊（ｄ５＋ｄ６＋ｄ７＋ｄ８）
ここで、変数ｄ１には分割鍵Ｄ１が代入され、変数ｄ２には分割鍵Ｄ２が代入され、同様に、変数ｄ３〜ｄ８には、分割鍵Ｄ３〜Ｄ８がそれぞれ代入されるものとする。【００４１】
署名鍵生成式Ｆ２１は、分割鍵生成装置２２に対し、図４に示す分割鍵情報テーブル４００として入力されるのであるが、分割鍵情報テーブル４００の説明に先立ち、署名鍵生成式Ｆ２１の表現形式について図３を用いて説明を行う。
図３は、署名鍵生成式Ｆ２１「Ｆ（ｄ１，ｄ２，ｄ３，ｄ４，ｄ５，ｄ６，ｄ７，ｄ８）＝（ｄ１＋ｄ２＋ｄ３＋ｄ４）＊（ｄ５＋ｄ６＋ｄ７＋ｄ８）」をツリー構造で概念的に表現したものである。【００４２】
変数ｄ１、ｄ２、ｄ３、ｄ４は、加算グループ１というグループ情報と関連付けられている。
ここで、グループ情報とは、署名生成式Ｆ２１において、被演算子（ｄ１〜ｄ８）が他の被演算子とどのような演算（例えば、加算、乗算など）がされるかという関係を表す属性情報である。また、上記のグループを構成する各被演算子や、より小さなグループ等をメンバーと呼ぶ。【００４３】
例えば、「加算グループ」では、各メンバーが演算子「＋（加算）」により演算され、「乗算グループ」では、各メンバーが演算子「＊（乗算）」により演算される。
なお、複数の変数から構成されたグループ同士や、グループと他の変数とが、どのような演算子によって演算されるかという関係を表す属性情報についてもグループ情報と呼ぶものとする。【００４４】
このようにグループ情報という属性情報を与えることで、各変数と署名鍵生成式Ｆ２１との関係を識別することができる。
具体的には、「加算グループ」では、前述のように、各メンバーが演算子「＋（加算）」で演算されるため、加算グループ１はｄ１＋ｄ２＋ｄ３＋ｄ４という式を表現していることになる。また、変数ｄ５、ｄ６、ｄ７、ｄ８は、加算グループ２というグループ情報と関連づけられている。加算グループ２は、加算グループ１の場合と同様にｄ５＋ｄ６＋ｄ７＋ｄ８という式を表現している。さらに、加算グループ１と加算グループ２とは、グループ情報として乗算グループ１と関連付けられている。【００４５】
「乗算グループ」というグループ情報は、前述のように、そのグループの各メンバーが演算子「＊（乗算）」で演算されることを示しており、乗算グループ１は、加算グループ１と加算グループ２との乗算という関係を表しており、（ｄ１＋ｄ２＋ｄ３＋ｄ４）＊（ｄ５＋ｄ６＋ｄ７＋ｄ８）という署名鍵生成式Ｆ２１を表現していることになる。
次に、図３の署名鍵生成式Ｆ２１の構造を、情報として具体的に表した分割鍵情報テーブル４００について、図４を用いて説明する。【００４６】
分割鍵情報テーブル４００は、図４に示すように、分割鍵グループ識別子４０１と分割鍵グループメンバー識別子４０２とから構成される。
分割鍵グループ識別子４０１は、上述したグループを識別する識別子であり、分割鍵グループメンバー識別子４０２は、各グループに属するメンバーを示す識別子である。
図４において、加算グループ１には、分割鍵グループ識別子４０１として「ＡＧ００１」が割り当てられている。ここで、図３にて示したとおり、グループ「ＡＧ００１」に属するメンバーは、変数ｄ１、ｄ２、ｄ３、ｄ４であるので、それぞれの変数を識別する「ｉｄ００１」、「ｉｄ００２」、「ｉｄ００３」、「ｉｄ００４」が、分割鍵グループメンバー識別子４０２として分割鍵情報テーブル４００に登録されている。【００４７】
また、加算グループ２には、分割鍵グループ識別子４０１として「ＡＧ００２」が割り当てられている。ここで、グループ「ＡＧ００２」に属するメンバーは、変数ｄ５、ｄ６、ｄ７、ｄ８であるので、それぞれの変数を識別する「ｉｄ００５」、「ｉｄ００６」、「ｉｄ００７」、「ｉｄ００８」が分割鍵グループメンバー識別子４０２として分割鍵情報テーブル４００に登録されている。【００４８】
また、乗算グループ１には、分割鍵グループ識別子４０１として「ＭＧ００１」が割り当てられている。グループ「ＭＧ００１」に属するメンバーは、加算グループ１と加算グループ２であるので、それぞれの分割鍵グループ識別子４０１である「ＡＧ００１」と「ＡＧ００２」が分割鍵グループメンバー識別子４０２として分割鍵情報テーブル４００に登録されている。【００４９】
このようなデータ構造を用いて、署名鍵生成恒等式生成手段１２０は、分割鍵識別情報テーブル２００と分割鍵情報テーブル４００とを参照することで、署名鍵生成式Ｆ２１の構成を知ることが出来る。
次に、分割鍵生成装置２２が、署名生成式Ｆ２１に基づき、署名鍵Ｄを複数の分割鍵に分割する処理について説明する。【００５０】
本実施の形態では、署名鍵生成式Ｆ２１の入力変数の数が８個であることから、分割鍵生成装置２２は、署名鍵Ｄ２０を８個の分割鍵Ｄ１〜Ｄ８に分割する。
但し、Ｄ１〜Ｄ８には、Ｆ（Ｄ１，Ｄ２，Ｄ３，Ｄ４，Ｄ５，Ｄ６，Ｄ７，Ｄ８）＝Ｄを満たす値がランダムに選択される。
ここで、分割鍵Ｄｎ（ｎ：１〜８）は、署名鍵生成式の引数ｄｎに代入される。即ち、分割鍵Ｄ１は、署名鍵生成式Ｆ２１の引数ｄ１に代入され、同様に分割鍵Ｄ２は、引数ｄ２に代入され、分割鍵Ｄ３〜Ｄ８は、引数ｄ３〜ｄ８に代入される。【００５１】
署名鍵Ｄから、署名鍵生成式Ｆ２１に基づき、分割鍵Ｄ１〜Ｄ８を算出する方法の一例として、分割鍵生成装置２２は、署名鍵生成式Ｆ２１で行われている最も外側の演算から順に、演算の単位を細かくしていくことで行う。
具体的には、まず、分割鍵生成装置２２は、Ｄ＝Ｒ１＊Ｒ２が成り立つランダムな値Ｒ１、Ｒ２を選出する。【００５２】
次に、Ｒ１＝（Ｄ１＋Ｄ２＋Ｄ３＋Ｄ４）が成り立つランダムな値Ｄ１、Ｄ２、Ｄ３、Ｄ４を選出し、Ｒ２＝（Ｄ５＋Ｄ６＋Ｄ７＋Ｄ８）が成り立つランダムな値Ｄ５、Ｄ６、Ｄ７、Ｄ８を選出する。
分割鍵生成装置２２は、選出した分割鍵Ｄ１〜Ｄ８のそれぞれに対し、各分割鍵を識別するための識別情報である分割鍵識別子２０１を割り当てる。【００５３】
分割鍵生成装置２２は、一例として、分割鍵Ｄ１に対し分割鍵識別子２０１として「ＩＤ００１」を割り当て、分割鍵Ｄ２に対し分割鍵識別子２０１として「ＩＤ００２」を割り当て、同様に、分割鍵Ｄ３、Ｄ４、Ｄ５、Ｄ６、Ｄ７、Ｄ８のそれぞれに対し、分割鍵識別子２０１として「ＩＤ００３」、「ＩＤ００４」、「ＩＤ００５」、「ＩＤ００６」、「ＩＤ００７」、「ＩＤ００８」を割り当てる。【００５４】
分割鍵生成装置２２は、図２に示す、分割鍵識別子２０１と分割鍵１１１を対応づけた分割鍵識別情報テーブル２００を生成して、分割鍵識別情報テーブル２００を、後述する署名生成装置１００が備える分割鍵格納手段１１０に書き込む。
（２）署名生成装置１００
署名生成装置１００は、図１に示すように、分割鍵格納手段１１０、署名鍵生成恒等式生成手段１２０、結合分割鍵生成手段１３０、結合分割鍵格納手段１４０、署名生成手段１５０を含んで構成される。【００５５】
署名生成装置１００は、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭ、ハードディスクユニット、ディスプレイユニットなどから構成されるコンピュータシステムである。前記ＲＯＭ又は前記ハードディスクユニットには、コンピュータプログラムが記憶されており、前記コンピュータプログラムが前記ＲＡＭ上に読み出され、前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、署名生成装置１００は、その機能を達成する。【００５６】
分割鍵格納手段１１０は、メモリやハードディスクなどの記憶デバイスであり、分割鍵生成装置２２により書き込まれる分割鍵識別情報テーブル２００及び分割鍵情報テーブル４００を記憶する。
署名鍵生成恒等式生成手段１２０は、署名鍵生成式Ｆ２１と恒等な式である署名鍵生成恒等式１２１を生成する。ここで、恒等とは、演算において等価である、演算結果が同一になるような関係のことを言う。【００５７】
以下、署名鍵生成恒等式生成手段１２０が、署名鍵生成式Ｆ２１と署名鍵Ｄ２０とから、署名鍵生成式Ｆ２１に恒等な式である署名鍵生成恒等式Ｇ１２１と、図１１に示すように後述する結合分割鍵１４１とを動的に生成する方法について、図を用いて詳細に説明していく。
なお、以降、ＲＳＡ署名生成を例とした説明を行う。【００５８】
図５は、署名生成恒等式Ｇ１２１と後述する結合分割鍵１４１を動的に生成し、署名Ｓ３０を生成して出力するまでの処理の概要を示すフローチャートである。但し、図５の各ステップは、図６〜図１１のフローチャートを用いて詳細に説明する。
図５において、先ず、署名鍵生成恒等式生成手段１２０が、分割鍵格納手段１１０に記憶されている分割鍵情報テーブル４００を読み取り、署名鍵生成式Ｆ２１と同一結果を出力する署名鍵生成恒等式Ｇ１２１を生成する（ステップＳ５０１）。【００５９】
次に、署名鍵生成恒等式生成手段１２０は、ステップＳ５０１で生成された署名鍵生成恒等式Ｇ１２１に基づき、分割鍵格納手段１１０に記憶されている分割鍵１１１を結合演算することで、分割鍵１１１とは異なる値の結合分割鍵１４１を生成し、生成した結合分割鍵１４１を結合分割鍵格納手段１４０に書き込む（ステップＳ５０２）。
次に、署名生成手段１５０にて、署名対象メッセージＭ１０と、署名鍵生成恒等式Ｇ１２１と結合分割鍵１４１を用いて、署名鍵Ｄ２０の値をメモリに出現させることなく、Ｍ＾ｄ  ｍｏｄ  ｎと同一の結果となる署名Ｓ３０を算出し、署名Ｓ３０を出力し署名生成処理を終了する（ステップＳ５０３）。【００６０】
ここで、明細書中「Ａ＾Ｂ」の記載は、ＡのＢ乗を表すものとし、「Ａ  ｍｏｄ  Ｂ」の記載は、Ａを自然数Ｂで割ったときの剰余を表すものとする。
次に、上述した図５のステップＳ５０１の詳細について、図６を用いて説明する。
まず、署名鍵生成恒等式生成手段１２０は、分割鍵格納手段１１０に記憶されている分割鍵情報テーブル４００を読み込み、各グループに属するメンバーの並びをランダムに並び替えるランダムシャッフル処理を行う（ステップＳ６０１）。ランダムシャッフルの詳細フローについては、図７を用いて後述する。【００６１】
次に、ランダムシャッフルされた分割鍵情報テーブル４００の各グループのメンバーをランダムにグループ分けする（ステップＳ６０２）。ランダムにグループ分けする処理の詳細については、図８、図９を用いて後述する。
次に、ステップＳ６０２でランダムにグループ分けされた各グループを式展開して、後述するマトリックス表現というデータ構造に変形し、展開した各グループのうち結合する箇所をランダムに選択して結合を行う。この結果、署名鍵生成式Ｆ２１と恒等な署名鍵生成恒等式１２１が生成されるので、これを出力する（ステップＳ６０３）。ステップＳ６０３については、図１０を用いて後述する。【００６２】
次に、ステップＳ６０１における分割鍵グループのメンバーのランダムシャッフル処理の詳細について図７を用いて説明する。
なお、本実施の形態におけるランダムシャッフルとは、例えば、式ｄ１＋ｄ２＋ｄ３＋ｄ４を、交換法則を利用して、恒等な式に変換することを言う。また、加算などの場合に、式１＋２＋３の計算結果と式３＋２＋１の計算結果とが同一であるような関係、すなわち、式における被演算子の順序を入れ替えても計算結果が変わらないような関係を「交換法則が成立する」という。【００６３】
まず、署名鍵生成恒等式生成手段１２０は、分割鍵格納手段１１０に記憶されている分割鍵情報テーブル４００のグループ総数Ｎを取得する（ステップＳ７０１）。
ここで、分割鍵情報テーブル４００は、二次元配列Ｔａｂｌｅとして表現されているものとする。また、Ｔａｂｌｅ［ｎ］［ｍ］は、図４の分割鍵グループメンバー識別子４０１に対応しており、上からｎ行目のグループに属する、左からｍ個目の分割鍵グループ識別子を示す。また、単にＴａｂｌｅ［ｎ］とだけ書く場合は、上からｎ行目のグループに属する分割鍵グループ識別子の集合を示す。【００６４】
具体的には、図４に示した分割鍵情報テーブル４００を上述したＴａｂｌｅの形で表すと、以下のようになる。
Ｔａｂｌｅ［０］＝｛ＡＧ００１，ＡＧ００２｝、
Ｔａｂｌｅ［１］＝｛ｉｄ００１，ｉｄ００２，ｉｄ００３，ｉｄ００４｝、
Ｔａｂｌｅ［２］＝｛ｉｄ００５，ｉｄ００６，ｉｄ００７，ｉｄ００８｝
なお、この例及び以下の例では、Ｔａｂｌｅの各インデックスは０から始まるものとする。【００６５】
グループ総数Ｎは、加算グループ、乗算グループ等のグループの個数であり、ｎの最大値＋１に該当する。
図４に示した分割鍵情報テーブル４００の場合、グループ総数Ｎは３となる。
次に、変数ｉを０で初期化する（ステップＳ７０２）。
ここで、ｉは現在シャッフル対象となっている分割鍵グループが何番目の分割鍵グループであるかをカウントする変数である。【００６６】
次に、乱数値を発生させシャッフル回数をカウントする変数ｓｎに代入する（ステップＳ７０３）。
ここで、シャッフル回数ｓｎは、各分割鍵グループに対してあと何回シャッフルを行うかを示す変数である。ここで、シャッフル回数ｓｎとして乱数を利用することにより、シャッフルする回数を動的に設定することが出来、ひいては署名鍵生成恒等式を動的に生成することが出来る。【００６７】
次に、Ｔａｂｌｅ［ｉ］に登録されているメンバー数、すなわち、ｉ番目のグループに登録されているメンバー数Ｍを取得する（ステップＳ７０４）。
次に、０以上Ｍ未満のランダムな整数を２つ発生させ、それぞれを変数ｓ１、ｓ２に代入する（ステップＳ７０５）。
ここで、ｓ１、ｓ２としてランダムな整数を利用することにより、シャッフル対象となるメンバーの位置を動的に設定することができ、ひいては署名鍵生成恒等式を動的に生成することが出来る。【００６８】
次に、Ｔａｂｌｅ［ｉ］［ｓ１］とＴａｂｌｅ［ｉ］［ｓ２］の値を入れ替えて、ｓｎをデクリメントする（ステップＳ７０６）。
すなわち、ｉ番目のグループに属するｓ１番目の構成要素とｓ２番目の構成要素とを入れ替えた上で、残りシャッフル回数ｓｎを１つ減らす。
次に、ｓｎ＞０かどうか、すなわち現在シャッフルの対象となっているｉ番目の分割鍵グループについて、まだシャッフル回数が残っているか否かを判定する（ステップＳ７０７）。【００６９】
ステップＳ７０７の判定の結果が「ＹＥＳ」ならば、さらにシャッフルを繰り返すため、ステップＳ７０５へ戻る。
そうでなく、判定の結果が「ＮＯ」ならば、ｉがＮ−１と等しいかどうか判定する（ステップＳ７０８）。すなわち、全グループについてシャッフルが終了したか否かを判定する。【００７０】
ステップＳ７０８の判定の結果が「ＮＯ」ならば、ｉをインクリメントし、ステップＳ７０３へ移ることにより、次の分割鍵グループに対してシャッフルを行っていく（ステップＳ７０９）。そうでなく、ステップＳ７０８の判定の結果が「ＹＥＳ」ならば、全分割鍵グループに対するシャッフルが終了しているので、ランダムシャッフル処理を終了する。【００７１】
次に、ステップＳ６０２における分割鍵グループのメンバーのランダムグループ分け処理の詳細について図８のフローチャートを参照しながら説明する。
ランダムグループ分けとは、例えば、式（ｄ１＋ｄ２＋ｄ３）＋ｄ４を、結合法則を利用して恒等式ｄ１＋（ｄ２＋ｄ３＋ｄ４）へと変換する処理である。ここで、例えば式（１＋２）＋３と式１＋（２＋３）は結果が同一の値となり、このような関係、すなわち、一度に計算を行う単位の分割の仕方に関わらず結果が同一の値となるような関係を「結合法則が成立する」という。【００７２】
なお、図８においても、図５の説明の際、前述したように分割鍵情報テーブル４００は、２次元配列のＴａｂｌｅ［ｎ］［ｍ］で表現されるものとして説明する。
まず、署名鍵生成恒等式生成手段１２０は、分割鍵格納手段１１０に記憶されている分割鍵情報テーブル４００のグループ総数Ｎを取得する（ステップＳ８０１）。
次に、変数ｉを０で初期化する（ステップＳ８０２）。ここでｉは、現在ランダムグループ分けの対象となっている分割鍵グループの番号を示す変数である。【００７３】
次に、グループ分割位置リストＧＰを空リストとしてセットする（ステップＳ８０３）。ここで、分割位置リストＧＰは、分割鍵グループのメンバーを、前から何番目の位置で分割するかを示す値のリストである。
次に、Ｔａｂｌｅ［ｉ］に登録されているメンバー数Ｍを取得し、１以上Ｍ以下の自然数をランダムに選び、選んだ値をグループ分割数ｋとする（ステップＳ８０４）。ここで、グループ分割数とは、分割鍵グループを何個のグループに分割するかを示す数である。グループ分割数ｋをランダムな自然数とすることにより、式の分割数を動的に設定することができ、ひいては署名鍵生成恒等式を動的に生成することが出来る。【００７４】
次に、０以上Ｍ−１以下の整数を、重複しないようにｋ−１個ランダムに選択し、選択した値を降順で並び替え、グループ分割リストＧＰにセットする（ステップＳ８０５）。
このように、グループ分割リストＧＰの内容ランダムに設定することにより、式の分割位置を動的に設定することができ、ひいては署名鍵生成恒等式を動的に生成することが出来る。【００７５】
次に、ステップＳ８０４で選択されたグループ分割リストＧＰの位置にあるメンバーの後ろでＴａｂｌｅ内のメンバーのグループを区切り、ｋ個のグループに分ける（ステップＳ８０６）。
次に、ｉがＮ−１と等しいかどうかチェックする（ステップＳ８０７）。すなわち、全分割鍵グループについて、ランダムグループ分けが終了したか否かを判定する。【００７６】
ステップＳ８０７の判定の結果が「ＮＯ」であれば、ｉをインクリメントし、ステップＳ８０３へ戻ることにより、さらに次の分割鍵グループについてランダムグループ分けを行っていく（ステップＳ８０８）。そうでなく判定の結果が「ＹＥＳ」であれば、全分割鍵グループについてランダムグループ分けが終了したと判断しランダムグループ分けを終了する。【００７７】
図９は、図４の分割鍵情報テーブルに対して、図７のランダムシャッフルと図８のランダムグループ分けの処理を行った後の分割鍵情報テーブル４００の状態を示した図である。
図９には、図７のフローに従ってランダムシャッフルした結果、ＭＧ００１では、Ｔａｂｌｅ［０］［２］＝｛ＡＧ００１，ＡＧ００２｝であった並びが、｛ＡＧ００２，ＡＧ００１｝のようにシャッフルされ、ＡＧ００１では、Ｔａｂｌｅ［１］［４］＝｛ｉｄ００１，ｉｄ００２，ｉｄ００３，ｉｄ００４｝であった並びが、｛ｉｄ００２，ｉｄ００１，ｉｄ００４，ｉｄ００３｝のようにシャッフルされ、ＡＧ００２では、Ｔａｂｌｅ［２］［４］＝｛ｉｄ００５，ｉｄ００６，ｉｄ００７，ｉｄ００８｝であった並びが、｛ｉｄ００７，ｉｄ００６，ｉｄ００８，ｉｄ００５｝のようにシャッフルされたことが示されている。【００７８】
また、図８のフローに従ってランダムグループ分けした結果、ＭＧ００１では、分割鍵グループメンバー識別子が｛ＡＧ００２｝と｛ＡＧ００１｝の２個にグループ分けされ、ＡＧ００１では、｛ｉｄ００２，ｉｄ００１｝と｛ｉｄ００４，ｉｄ００３｝の２個にグループ分けされ、ＡＧ００２では、｛ｉｄ００５，ｉｄ００６｝と｛ｉｄ００７，ｉｄ００８｝の２個にグループ分けされたことを示している。【００７９】
図９のようにランダムシャッフルおよびランダムグループ分けされた場合、図４の分割鍵情報テーブル４００で示されていた署名鍵生成式Ｆ２１
Ｆ（ｄ１，ｄ２，ｄ３，ｄ４，ｄ５，ｄ６，ｄ７，ｄ８）＝（ｄ１＋ｄ２＋ｄ３＋ｄ４）＊（ｄ５＋ｄ６＋ｄ７＋ｄ８）
は、交換法則と結合法則により、署名鍵生成式Ｆ２１と恒等な署名鍵生成恒等式
Ｇ’（ｄ１，ｄ２，ｄ３，ｄ４，ｄ５，ｄ６，ｄ７，ｄ８）＝（（ｄ７＋ｄ６）＋（ｄ８＋ｄ５））＊（（ｄ２＋ｄ１）＋（ｄ４＋ｄ３））
に変換されたことになる。【００８０】
続いて、さらに、この署名鍵生成恒等式Ｇ’を後述するマトリックス表現を用いて恒等変換していく。
図１０（ａ）は、図９で生成された署名鍵生成恒等式１２１の右辺（（ｄ７＋ｄ６）＋（ｄ８＋ｄ５））＊（（ｄ２＋ｄ１）＋（ｄ４＋ｄ３））をマトリックス表現したものである。【００８１】
ここで、マトリックス表現とは、例えば（ｄ１＋ｄ２）＊（ｄ３＋ｄ４）は、ｄ１＊（ｄ３＋ｄ４）＋ｄ２＊（ｄ３＋ｄ４）と等しいように、分配法則を利用して署名鍵生成式Ｆと恒等な式Ｇを作成するために利用されるデータ構造である。ここで、例えば式３＊（２＋１）の値が式３＊２＋３＊１の値と等しいような関係、すなわち、式展開前の値と式展開後の値とが等しいような関係を「分配法則が成立する」と言う。【００８２】
ここで、マトリックス１０００の各要素はランダムグループ分けされた各グループ同士について、式展開を施した場合に発生する乗算を示す式であり、それぞれ、署名鍵生成恒等式Ｇ’を分配法則を用いて展開した際に掛け合わせられる項を示す。
より具体的な例を示すと、例えばマトリックス１０００をＭａｔｒｉｘ［２］［２］の２×２の配列で表現すると、
Ｍａｔｒｉｘ［０］［０］＝（ｄ７＋ｄ６）＊（ｄ２＋ｄ１）
Ｍａｔｒｉｘ［０］［１］＝（ｄ７＋ｄ６）＊（ｄ４＋ｄ３）
Ｍａｔｒｉｘ［１］［０］＝（ｄ８＋ｄ５）＊（ｄ２＋ｄ１）
Ｍａｔｒｉｘ［１］［１］＝（ｄ８＋ｄ５）＊（ｄ４＋ｄ３）
のようになる。【００８３】
ここで、Ｍａｔｒｉｘ［ｎ］［ｍ］は、最初の加算グループにおけるｎ番目の要素と、次の加算グループにおけるｍ番目の要素との積であり、それぞれ、署名鍵生成恒等式を展開した際に掛け合わせられることになる項同士の積を示している。なお、インデックスｎとｍとの番号は０から始まるものとし、各加算グループにおいてはより左側にある要素ほどインデックス番号が小さいものとする。【００８４】
例えば、Ｍａｔｒｉｘ［０］［０］は、図９のテーブルにおいて最初の加算グループであるＡＧ００１における最初のメンバー（ｄ７＋ｄ６）と、２番目の加算グループであるＡＧ００２における最初のメンバー（ｄ２＋ｄ１）とを乗算した値となる。なお、加算グループの数に応じて、Ｍａｔｒｉｘ［ｎ］［ｍ］「ｌ」・・・と、配列の次元が増加していくことは言うまでもない。【００８５】
このようなマトリックス表現した署名鍵生成恒等式Ｇに対して、前述したステップＳ６０３において、マトリックス表現の各要素に対して結合する箇所をランダムに選択する処理が行われる。すなわち、マトリックス表現では、同一の行もしくは同一の列に属する要素同士は、少なくとも１つは共通する項が含まれる式であるため、この性質を利用して同一の行もしくは列に属する式同士を結合することが出来る。【００８６】
以下に、より具体的な例を示す。まず、図１０（ａ）では、１００１で図示されているように結合箇所としてＭａｔｒｉｘ［０］［１］とＭａｔｒｉｘ［１］［１］が選択されたものとする。ここで、結合箇所として選択された１００１のＭａｔｒｉｘ［０］［１］とＭａｔｒｉｘ［１］［１］の両要素には、（ｄ４＋ｄ３）が共に存在している。そのため、結合箇所１００１は、
（ｄ４＋ｄ３）＊（（ｄ７＋ｄ６）＊（ｄ８＋ｄ５））
というように（ｄ４＋ｄ３）で括ることで、結合することができる。【００８７】
ここで、上述したように、結合箇所をランダムに選択することにより、結合箇所を動的に決定することができ、ひいては署名生成鍵恒等式Ｇを動的に生成することが出来る。
図１０（ｂ）は、マトリックス表現を用いて最終的な署名生成恒等式Ｇ１２１を生成するまでの式変形を、通常の式の変形で例示したものである。
図９で生成された署名鍵生成恒等式Ｇ’は、
Ｇ’＝（（ｄ７＋ｄ６）＋（ｄ８＋ｄ５））＊（（ｄ２＋ｄ１）＋（ｄ４＋ｄ３））…（式１）
であり、この式を分配法則を用いて展開すると、（式２）のようになる。【００８８】
Ｇ’＝（ｄ７＋ｄ６）＊（ｄ２＋ｄ１）＋（ｄ７＋ｄ６）＊（ｄ４＋ｄ３）
＋（ｄ８＋ｄ５）＊（ｄ２＋ｄ１）＋（ｄ８＋ｄ５）＊（ｄ４＋ｄ３）…（式２）
さらに（式２）を図１０（ａ）のマトリックス１０００内でステップＳ６０３にて結合する箇所としてランダムに指定された１００１にあたる項を結合すると、（式３）となる。【００８９】
Ｇ’  ＝  （ｄ７＋ｄ６）＊（ｄ２＋ｄ１）＋（ｄ８＋ｄ５）＊（ｄ２＋ｄ１）
＋（ｄ４＋ｄ３）＊（（ｄ７＋ｄ６）＊（ｄ８＋ｄ５））      …（式３）
この（式３）が図６のＳ６０１からＳ６０３を経て生成された署名鍵生成恒等式Ｇ１２１となる。
結合分割鍵生成手段１３０は、署名鍵生成恒等式Ｇ１２１に基づき、分割鍵格納手段１１０に記憶された分割鍵同士を結合演算して、分割鍵１１１とは異なる値の結合分割鍵１４１（ＣＤ１、ＣＤ２、…、ＣＤｍ）を生成する。生成した結合分割鍵１４１のそれぞれに対し、結合分割鍵１４１を識別するための結合分割鍵識別子１１０１を付与して、図１１に示す、結合分割鍵識別子１１０１と結合分割鍵１４１を対応づけた結合分割鍵識別情報テーブル６００を生成して、結合分割鍵識別情報テーブル６００を、結合分割鍵格納手段１４０に書き込む。【００９０】
ここで、署名鍵生成恒等式Ｇ１２１と結合分割鍵１４１（ＣＤ１、ＣＤ２、…、ＣＤｍ）との間には、結合分割鍵１４１（ＣＤ１、ＣＤ２、…、ＣＤｍ）と署名鍵生成恒等式１２１から署名鍵Ｄの値が算出可能となるような関係を有する。
また、結合演算とは、複数の値をまとめて新しい値を生成する演算であり、具体的な例としては加算、乗算やその組み合わせ等がある。すなわち、１＋２＝３という演算において、「３」は、「１」と「２」という値に対して「＋」という結合演算を施して得られる値である。【００９１】
具体的には、前述したように、ランダムグループ分けした加算グループの各要素｛ｉｄ００２，ｉｄ００１｝と｛ｉｄ００４，ｉｄ００３｝｛ｉｄ００５，ｉｄ００６｝、｛ｉｄ００７，ｉｄ００８｝を、一塊の入力引数とする。
署名鍵生成恒等式Ｇ’の（式３）で示された最小の括弧の単位で、結合分割鍵１４１を生成すると、以下の７個の結合分割鍵１４１が生成されることになる。【００９２】
変数ｃｄ１にはｄ７＋ｄ６を演算した結果値が格納され、ｃｄ２にはｄ２＋ｄ１を演算した結果値、ｃｄ３にはｄ８＋ｄ５を演算した結果値、ｃｄ４にはｄ２＋ｄ１を演算した結果値、ｃｄ５にはｄ４＋ｄ３を演算した結果値、ｃｄ６にはｄ７＋ｄ６を演算した結果値、ｃｄ７にはｄ８＋ｄ５を演算した結果値が格納される。すなわち、下式が成立する。
Ｇ’（ｄ１，ｄ２，ｄ３，ｄ４，ｄ５，ｄ６，ｄ７，ｄ８）
＝  Ｇ（ｃｄ１，ｃｄ２，ｃｄ３，ｃｄ４，ｃｄ５，ｃｄ６，ｃｄ７）
ここで、Ｇ’（ｄ１，ｄ２，ｄ３，ｄ４，ｄ５，ｄ６，ｄ７，ｄ８）の引数である変数ｄ１には、ｉｄ００１に対応する分割鍵識別子ＩＤ００１を持つ分割鍵Ｄ１が代入され、同様に変数ｄ２には分割鍵Ｄ２が代入され、変数ｄ３、ｄ４、ｄ５、ｄ６、ｄ７、ｄ８のそれぞれには、分割鍵Ｄ３、Ｄ４、Ｄ５、Ｄ６、Ｄ７、Ｄ８がそれぞれ代入される。【００９３】
また、Ｇ（ｃｄ１，ｃｄ２，ｃｄ３，ｃｄ４，ｃｄ５，ｃｄ６，ｃｄ７）の引数である変数ｃｄ１には、結合分割鍵Ｄ１が代入され、同様に変数ｃｄ２には結合分割鍵ＣＤ２が代入され、変数ｃｄ３、ｃｄ４、ｃｄ５、ｃｄ６、ｃｄ７のそれぞれには、結合分割鍵ＣＤ３、ＣＤ４、ＣＤ５、ＣＤ６、ＣＤ７がそれぞれ代入される。
ここで、ＣＤ１＝Ｄ７＋Ｄ６が成り立ち、ＣＤ２＝Ｄ２＋Ｄ１が成り立ち、ＣＤ３＝Ｄ８＋Ｄ５が成り立ち、ＣＤ４＝Ｄ２＋Ｄ１が成り立ち、ＣＤ５＝Ｄ４＋Ｄ３が成り立ち、ＣＤ６＝Ｄ７＋Ｄ６が成り立ち、ＣＤ７＝Ｄ８＋Ｄ５が成り立つ。【００９４】
ここで、結合分割鍵１４１は演算の結果値であるため、この値のみから元の分割鍵１１１を導出するのは困難となり、分割鍵１１１を秘匿することが出来る。
図１１は、各結合分割鍵１４１（ＣＤ１、ＣＤ２、…、ＣＤ７）に、それぞれ結合分割鍵識別子１１０１（ＩＤ００１、ＩＤ００２、…、ＩＤ００７）が付与されていることを示している。【００９５】
したがって、署名鍵生成恒等式Ｇ’である（式３）を、結合分割鍵１４１を用いた表現である署名鍵生成恒等式Ｇ１２１とすると、次の（式４）のようになる。
Ｇ（ｃｄ１，ｃｄ２，ｃｄ３，ｃｄ４，ｃｄ５，ｃｄ６，ｃｄ７）
＝  （ｃｄ１＊ｃｄ２）＋（ｃｄ３＊ｃｄ４）＋ｃｄ５＊（ｃｄ６＋ｃｄ７）…（式４）
ここで、（式４）の引数ｃｄ１，ｃｄ２，…、ｃｄ７に結合分割鍵（ＣＤ１、ＣＤ２、…、ＣＤ７）の値を代入した結果と、（式３）の引数ｄ１、ｄ２、…、ｄ８に（Ｄ１、Ｄ２、…、Ｄ８）を代入した結果は等しく、
さらに結合分割鍵１４１（ＣＤ１、ＣＤ２、…、ＣＤ７）は分割鍵１１１（Ｄ１、Ｄ２、…、Ｄ８）を結合演算した結果であることから、（式４）は署名鍵生成式Ｆ２１と同一の結果を得ることができる式となるため、署名生成手段１５０は、（式４）を署名鍵生成恒等式１２１として利用する。【００９６】
結合分割鍵格納手段１４０は、結合分割鍵生成手段１３０により署名生成時に動的に生成された結合分割鍵１４１を記憶する。
署名生成手段１５０は、メッセージＭ１０を入力とし、結合分割鍵格納手段１４０に記憶されている結合分割鍵１４１を用いて署名Ｓ３０を生成する。ＲＳＡ署名生成における例を示すと、署名鍵Ｄ２０を用いず、結合分割鍵１４１のみを用いてＳ＝Ｍ＾ｄ  ｍｏｄ  ｎと同一の演算結果となる署名Ｓ３０を生成する。【００９７】
続いて、図１２、図１３を用いて、署名生成手段１５０が結合分割鍵１４１と署名鍵生成恒等式Ｇ１２１（式４）とを用いた署名生成の処理を示すフローを説明する。
まず、署名Ｓの生成方法の概略を説明する。
署名生成に用いられる演算式は、署名鍵生成恒等式Ｇ１２１の構造により定まる。
署名Ｓは、例えば署名鍵生成恒等式Ｇの各引数ｃｄ１〜ｃｄ７に、ＣＤ１〜ＣＤ７が代入されており、（ＣＤ１＊ＣＤ２）＋（ＣＤ３＊ＣＤ４）＋ＣＤ５＊（ＣＤ６＋ＣＤ７）であったとき、メッセージＭと、ｎ（＝ｐ＊ｑ）とを用いて、
Ｓ０＝（Ｍ＾ＣＤ１）＾ＣＤ２  ｍｏｄ  ｎ、
Ｓ１＝  Ｓ０＊（（Ｍ＾ＣＤ３）＾ＣＤ４）  ｍｏｄ  ｎ、
Ｓ＝  Ｓ１＊（（（Ｍ＾ＣＤ６）＊（Ｍ＾ＣＤ７））＾ＣＤ５）  ｍｏｄ  ｎ
という計算により、Ｓ＝Ｍ＾Ｄ  ｍｏｄ  ｎと同じ結果が生成される。【００９８】
より具体的には、上式Ｇを（ＣＤ１＊ＣＤ２）と（ＣＤ３＊ＣＤ４）とＣＤ５＊（ＣＤ６＋ＣＤ７）ように“＋”演算子で区切り、区切られたそれぞれを利用してメッセージＭに対してベキ乗演算して、それぞれのベキ乗演算結果を掛けることで署名Ｓを作成する。
以下、フローの詳細な説明に移るが、以下の例でも、署名鍵生成恒等式Ｇ１２１は（式４）であるものとする。また、署名生成手段１５０は（式４）を逆ポーランド記法で式表現したものを利用して署名生成するものとする。ここで、逆ポーランド記法とは、演算子を演算対象の後ろに記述する記法であり、演算子が現れるたびに、その演算子の２つ前の値および１つ前の値に対して、その演算子を適用した値を計算していくような規則で示される記法である。【００９９】
例えば、（式４）を逆ポーランド記法で表し、配列に入れた例を示すと、次のような配列Ｐとなる。
Ｐ［１３］＝｛ＣＤ１，ＣＤ２，＊，ＣＤ３，ＣＤ４，＊，＋，ＣＤ５，ＣＤ６，ＣＤ７，＋，＊，＋｝
以下、図１２、図１３を用いて、署名生成フローについて詳細に説明する。【０１００】
まず、署名鍵生成恒等式Ｇを上記のように逆ポーランド記法で表現し、それを配列Ｐとして表現する（ステップＳ１２０１）。
次に、ｉとｊを１に、ＣｈｋとＦｌａｇを０に、Ｎを配列Ｐのサイズに設定し、スタックにＰ［０］をプッシュする（ステップＳ１２０２）。ここで、ｉは、現在着目している配列のインデックスであり、ｊは現在スタックに積まれている分割結合鍵の個数を示す。また、Ｃｈｋは、配列中でどのインデックスまで演算子“＋”であるか否かを確認したかを示す。ここで、Ｃｈｋは、前述したｊを用いて、現在アクセスしている配列Ｐ［ｉ]からｊ−１個先の演算子が“＋”であるかどうかを判定し、“＋”演算子の有効区間内であるか判定する際に利用する。また、Ｆｌａｇは、“＋”演算子の有効な区間内であるか否かを示すフラグとして利用される。より具体的には、署名鍵生成恒等式Ｇの区切りポイントの判定に利用される。【０１０１】
次に、Ｐ［ｉ］が結合分割鍵かどうか判別する（ステップＳ１２０３）。
ステップＳ１２０３の判別の結果が、「ＹＥＳ」すなわち結合分割鍵であれば、スタックにＰ［ｉ］の値をプッシュし、配列Ｐにおけるアクセスを１つ移すためにｉをインクリメントし、また、スタックに積まれる分割結合鍵の個数が増えるためｊをインクリメントする（ステップＳ１２０４）。【０１０２】
そうでなく、判別の結果が「ＮＯ」であるなら、すなわち、Ｐ［ｉ］が演算子であれば、スタックに積まれている上位２つの結合分割鍵をポップし、それぞれをＶａｌ１、Ｖａｌ２とする（ステップＳ１２０５）。
次に、ｉ＋ｊ−１がＣｈｋの値より大きいか、且つｉ＋ｊ−１がＮ以下かどうかを判定する（ステップＳ１２０６）。【０１０３】
ステップＳ１２０６の判定結果が「ＹＥＳ」であれば、Ｃｈｋをｉ＋ｊ−１の値に設定する。すなわち、配列Ｐのｉ＋ｊ−１番目まで“＋”であるかの判定が終了しているため、Ｃｈｋの値が更新される。そうでなく「ＮＯ」であれば、ステップＳ１２０８へ処理を移す。なお、ステップＳ１２０６にて、ｉ＋ｊ−１がＮ以下かどうかも確認しているのは、Ｃｈｋが配列のサイズを超えた箇所を示すことを防止するためである。【０１０４】
次に、ｊ＞０かつＦｌａｇ＝１かつＰ［Ｃｈｋ］が“＋”演算子であるか判定する（ステップＳ１２０８）。
ステップＳ１２０８の判定結果が、「ＹＥＳ」であれば、Ｆｌａｇを０に設定する（ステップＳ１２０９）。
そうでなく、判定の結果がＮＯであれば、処理「Ａ」へ処理を移す。【０１０５】
次に図１３を用いて、図１２のフローの続きについて説明する。
まず、Ｖａｌ１とＶａｌ２のパターンを判別する（ステップＳ１３０１）。
ステップＳ１３０１の判別の結果、Ｖａｌ１、Ｖａｌ２両者が結合分割鍵の場合ステップＳ１３１０へ処理を移す。
そうでなく、ステップＳ１３０１の判別の結果、Ｖａｌ１、Ｖａｌ２のどちらか一方が結合分割鍵で、他方が署名ベキ乗中間値の場合、ステップＳ１３２０へ処理を移す。ここでの署名ベキ乗中間値とは、メッセージＭ１０を、少なくとも一つ以上の結合分割鍵でベキ乗した値を示し、署名Ｓ３０を算出する過程での中間値となるものである。具体的には、後述するＳ０やＳ１等がこれに当たる。【０１０６】
そうでなく、ステップＳ１３０１の判別の結果、Ｖａｌ１、Ｖａｌ２の両者が署名ベキ乗中間値の場合、ステップＳ１３３０へ処理を移す。
ここから、Ｓ１３０１処理後にそれぞれ処理がＳ１３１０、Ｓ１３２０、Ｓ１３３０に分岐した際の、各処理以降の個別の処理について説明する。
ここから、ステップＳ１３１０へ処理が移った場合について説明する。【０１０７】
まず、Ｆｌａｇを判別する（ステップＳ１３１０）。
ステップＳ１３１０の判別の結果、Ｆｌａｇ＝０、すなわち、“＋”演算子の有効区間内である場合は、ステップＳ１３１１へ処理を移す。
次に、Ｐ［ｉ］の演算子を判別する（ステップＳ１３１１）。
ステップＳ１３１１の判別の結果、Ｐ［ｉ］が“＋”演算子であれば、ステップＳ１３１２へ処理を移す。【０１０８】
そうでなくステップＳ１３１１の判別の結果、Ｐ［ｉ］が“＊”演算子であれば、ステップＳ１３１３へ処理を移す。
ステップＳ１３１２では、（Ｍ＾Ｖａｌ）＊（Ｍ＾Ｖａｌ２）  ｍｏｄ  ｎの値をスタックにプッシュする（ステップＳ１３１２）。
ステップＳ１３１３では、（（Ｍ＾Ｖａｌ１）＾Ｖａｌ２）ｍｏｄ  ｎを演算した値をスタックにプッシュする（ステップＳ１３１３）。【０１０９】
ステップＳ１３１２、Ｓ１３１３の処理後、ｊ＝ｊ−２とし、ステップＳ１３４１へ処理を移す（ステップＳ１３１４）。ここで、ｊ＝ｊ−２としているのは、一連の計算により、結合分割鍵（Ｖａｌ１とＶａｌ２に当たる）が使用されたため、スタックに積まれる結合分割鍵の数が減少するためである。なお、ステップＳ１３１２、Ｓ１３１３で計算結果をスタックにプッシュしているが、この値は上述した署名ベキ乗中間値であって結合分割鍵ではないため、ｊは２つ減ることになる。【０１１０】
ステップＳ１３４１においては、この区間に対する演算は終了したため、Ｆｌａｇは１に設定し直される（ステップＳ１３４１）。すなわちＦｌａｇが０と設定されている期間は、配列Ｐ［Ｃｈｋ］の場所の“＋”演算子で区切ることと判定されたときから、Ｓ１３１２、Ｓ１３１３の処理が実行され、ｊの値が更新されるまでの間であり、それ以外の処理はＦｌａｇ＝１の状態で各ステップが処理される。言い換えると、Ｆｌａｇ＝１の状態は、前回Ｐ［Ｃｈｋ］の“＋”演算子で区切れると判定されてから、次のＰ［Ｃｈｋ］の“＋”演算子で区切れると判定されるまで続くことになる。【０１１１】
そうでなくステップＳ１３１０の判別の結果、Ｆｌａｇ＝１である場合、すなわち、演算子“＋”によって区切られる区間外である場合には、ステップＳ１３１５へ処理を移す。
次に、ステップＳ１３１５では、Ｐ［ｉ］の演算子を判別する（ステップＳ１３１５）。【０１１２】
ステップＳ１３１５の判別の結果、Ｐ［ｉ］が“＋”演算子であれば、ステップＳ１３１６へ処理を移す。
そうでなくステップＳ１３１５の判別の結果、Ｐ［ｉ］が“＊”演算子であれば、ステップＳ１３１７へ処理を移す。
ステップＳ１３１６では、Ｖａｌ１＋Ｖａｌ２を演算した結果をスタックにプッシュする（ステップＳ１３１６）。【０１１３】
ステップＳ１３１７では、Ｖａｌ１＊Ｖａｌ２を演算した結果をスタックにプッシュする（ステップＳ１３１７）。なお、ここで、ステップＳ１３１６およびＳ１３１７においてプッシュする値も、また、分割結合鍵であると見なす。すなわち、ベキ乗中間値以外としてプッシュする値は、分割結合鍵であると見なすものとする。
ステップＳ１３１６、Ｓ１３１７処理後、ステップＳ１３４０へ処理を移す。ステップＳ１３４０以降の処理については後述する。【０１１４】
ここまでが、Ｓ１３１０以降の個別の処理についての説明である。
ここから、ステップＳ１３２０へ処理が移った場合、すなわち、Ｖａｌ１とＶａｌ２との組、結合分割鍵と署名ベキ乗中間値の組であった場合について説明する。
まず、Ｐ［ｉ］の演算子を判別する（ステップＳ１３２０）。
ステップＳ１３２０の判別の結果、Ｐ［ｉ］が“＋”演算子であれば、ステップＳ１３２１へ処理を移す。【０１１５】
そうでなくステップＳ１３１１の判別の結果、Ｐ［ｉ］が“＊”演算子であれば、ステップＳ１３２２へ処理を移す。
以下、まず、ステップＳ１３２１に分岐した場合の流れについて説明する。
ステップＳ１３２１では、結合分割鍵の値をＶａｌ１、ベキ乗中間値をＶａｌ２とし、（Ｍ＾Ｖａｌ１）＊Ｖａｌ２  ｍｏｄ  ｎを演算した値をスタックへプッシュする（ステップＳ１３２１）。【０１１６】
ステップＳ１３２２では、結合分割鍵の値をＶａｌ２、ベキ乗中間値をＶａｌ１とし、Ｖａｌ１＾Ｖａｌ２  ｍｏｄ  ｎを演算した値をスタックにプッシュする（ステップＳ１３２２）。
ステップＳ１３２１、Ｓ１３２２処理後は、ステップＳ１３４０へ処理を移す（ステップＳ１３４０）。なお、ステップＳ１３４０以降の処理については後述する。【０１１７】
ここまでが、Ｓ１３１０以降の個別の処理についての説明である。
（Ｓ１３３０以降の個別処理）
ここから、ステップＳ１３３０へ処理が移った場合、すなわち、Ｖａｌ１、Ｖａｌ２の両者が署名ベキ乗中間値の場合について説明する。
ステップＳ１３３０では、ベキ乗中間値であるＶａｌ１とＶａｌ２を利用し、Ｖａｌ１＊Ｖａｌ２  ｍｏｄ  ｎを演算した値をスタックにプッシュし、ステップＳ１３４１へ処理を移す（Ｓ１３３０）。【０１１８】
ここまでが、Ｓ１３３０以降の個別の処理についての説明である。
以上でＳ１３１０、Ｓ１３２０、Ｓ１３３０以降個別のフローについて説明を終わる。
（Ｓ１３１０、Ｓ１３２０、Ｓ１３３０以降の共通処理）
ここからは、Ｓ１３１０、Ｓ１３２０、Ｓ１３３０以降で共通のフローとなる部分について説明する。【０１１９】
ステップＳ１３１６あるいはＳ１３１７、もしくは、Ｓ１３２１あるいはＳ１３２２処理後、ｊをデクリメントし、そうでなれば何も処理せずステップＳ１３４１へ処理を移す（ステップＳ１３４０）。ここで、ｊをデクリメントするのは、ステップＳ１３１６あるいはＳ１３１７の場合は、結合分割鍵であるＶａｌ１とＶａｌ２を用い、結合分割鍵とみなされる値をプッシュしているため、差し引き１つの結合分割鍵が減ったためである。また、ステップＳ１３２１あるいはＳ１３２２の場合は、ベキ乗中間値と結合分割鍵とを用いて、新しいベキ乗中間値を生成しているため、この生成に使われた結合分割鍵がスタックからなくなるからである。【０１２０】
ステップＳ１３１４、あるいはＳ１３４０処理後、Ｆｌａｇを１にセットし、ステップＳ１３４２へ処理を移す（ステップＳ１３４１）。
ステップＳ１３４１の処理後、ｉ＜Ｎかどうか判別する（ステップＳ１３４２）。
ステップＳ１３４２での判別の結果が、「ＮＯ」であれば、配列Ｐの次の要素について同様の処理を続けるため、ステップＳ１３４３にてｉをインクリメントしＢへ処理を移す。【０１２１】
そうでなく、ステップＳ１３４２での判別の結果が、「ＹＥＳ」であれば、署名の生成は完了しているため、スタックの値を署名Ｓ３０とし、署名Ｓ３０を出力（ステップＳ１３４４）し、署名生成を終了する。
以上により、署名生成恒等式Ｇ’と結合分割鍵１４１を用いてメッセージＭ１０に対する署名Ｓ３０が生成される。【０１２２】
図１３では署名生成フローチャートについて説明した。ここでは、図１３のフローを利用した際のスタックの様子を図１４を用いて示す。
図１４は、図１２と図１３で説明した署名生成フローにおけるスタックの様子を示した図である。
署名生成恒等式Ｇ１２１は、逆ポーランド記法で表現されたＰに対して署名生成を順に説明する。【０１２３】
まず、Ｐ［１３］＝｛ＣＤ１，ＣＤ２，＊，ＣＤ３，ＣＤ４，＊，＋，ＣＤ５，ＣＤ６，ＣＤ７，＋，＊，＋｝より、Ｐ［０］である結合分割鍵ＣＤ１と、Ｐ［１］である結合分割鍵ＣＤ２をスタックにプッシュする（ステップＳ１４０１）。このとき、ｉとｊはともに２であり、ｉ＋ｊ−１は３であるため、Ｃｈｋの値は３に設定される。
次にＰ［２］が演算子“＊”であるので、スタックの上位２つの値をポップし、Ｆｌａｇ＝０かつ演算子“＊”であるので、（Ｍ＾ＣＤ１）＾ＣＤ２  ｍｏｄ  ｎをＳ０とし、Ｓ０をスタックにプッシュする（ステップＳ１４０２）。この処理が終わった段階で、ｉ＝２、ｊ＝０、Ｃｈｋ＝３となる。また、ステップＳ１３４１の動作により、Ｆｌａｇの値は１に戻される。【０１２４】
次に、Ｐ［３］である結合分割鍵ＣＤ３とＰ［４］である結合分割鍵ＣＤ４をスタックにプッシュする（ステップＳ１４０３）。このとき、ｉ＝４、ｊ＝２となり、Ｃｈｋの値は５に更新される。なお、Ｐ［Ｃｈｋ］は演算子“＋”でないため、Ｆｌａｇの値は１のままである。
次に、Ｐ［５］が演算子“＊”であるため、スタックの上位２つの値をポップし、また、ｉ＝５、ｊ＝２であるので、Ｃｈｋが６に更新される。ここで、Ｐ［Ｃｈｋ］の演算子は、“＋”であるので、Ｆｌａｇの値は０に更新される。Ｆｌａｇ＝０かつＰ［５］の演算子が“＊”であるので、（Ｍ＾ＣＤ３）＾ＣＤ４  ｍｏｄ  ｎをＳ１とし、Ｓ１をスタックにプッシュし、Ｆｌａｇを１に更新する（ステップＳ１４０４）。この処理が終わった段階で、ｉ＝５、ｊ＝０、Ｃｈｋ＝６、Ｆｌａｇ＝１となる。【０１２５】
次にＰ［６］が演算子“＋”であり、Ｆｌａｇ＝１であるので、スタックの上位２つの値Ｓ０とＳ１をポップし、Ｓ０＊Ｓ１  ｍｏｄ  ｎの演算結果をＳ２とし、Ｓ２をスタックにプッシュする。
次に、Ｐ［７］、Ｐ［８］、Ｐ［９］に相当する結合分割鍵ＣＤ５、ＣＤ６、ＣＤ７を順にスタックにプッシュする（スタックＳ１４０５）。【０１２６】
次に、Ｐ［１０］が演算子“＋”であり、このときのｉの値は１０でｊの値は３であり、Ｆｌａｇ＝１かつＰ［１２］＝“＋”であるので、Ｆｌａｇを０に設定する。その後、スタックの上位２つの値ＣＤ６とＣＤ７をポップし、Ｆｌａｇ＝０かつ演算子“＋”であるので、（Ｍ＾ＣＤ６）＊（Ｍ＾ＣＤ７）  ｍｏｄ  ｎを演算した値をＳ３とし、Ｓ３をスタックにプッシュする（ステップＳ１４０６）。【０１２７】
次に、Ｐ［１１］が演算子“＊”であるので、スタックの上位２つのＳ３とＣＤ５をポップする。このときＳ３が署名ベキ乗中間値であり、ＣＤ５が結合分割鍵であり、演算子“＊”であるので、Ｓ３＾ＣＤ５  ｍｏｄ  ｎを演算した値をＳ４とし、スタックにプッシュする（ステップＳ１４０７）。
次に、Ｐ［１２］が演算子“＋”であるので、スタックの上位２つのＳ２とＳ４をポップする。このとき、Ｓ２とＳ４は共に署名ベキ乗中間値であるのでＳ２＊Ｓ４  ｍｏｄ  ｎを演算した結果スタックにプッシュする（ステップＳ１４０８）。【０１２８】
以上により、Ｓ２＊Ｓ４  ｍｏｄ  ｎを演算した結果を署名Ｓ３０とし、署名Ｓ３０を出力し署名生成終了となる。
このように、本実施の形態では、署名鍵Ｄ２１の値を一切利用せず、署名Ｓ３０を生成することが可能である。さらに、結合分割鍵１４１が、署名生成時に動的に生成されるので、毎回異なる結合分割鍵を用いて署名生成が可能となる。さらに、署名鍵Ｄだけでなく、ＲＳＡ署名における秘密情報（ｐ、ｑ）の値も一切利用せず署名生成が可能となる。また、署名生成恒等式Ｇも署名生成処理の実行の度に毎回異なるため、ランタイムデータの収集結果の差分をとっても、署名鍵ｄを算出するための鍵候補となる結合分割鍵特定は困難である。さらに、結合分割鍵が特定されたとしても、結合分割鍵から署名鍵Ｄを求めるためには、署名鍵生成式Ｇを特定する必要があり、署名鍵生成恒等式Ｇの取りうるパターンを総当りで解析しなければならなく、署名鍵Ｄの解析は非常に困難になる。さらに、署名生成フローも毎回異なるため、署名生成時の電力と署名生成処理時間も変化するので、電力差分攻撃やタイミング攻撃に対しても安全であるという効果も有する。【０１２９】
なお、本実施の形態１において、結合分割鍵１４１の生成をランダムシャッフルやランダムグループ分け、そしてマトリックス表現を用いて署名鍵生成恒等式Ｇを生成したが、これらはあくまで一実施例であり、署名鍵生成式Ｆ２１から、交換法則、結合法則、分配法則などを用いて、署名鍵生成恒等式Ｇが生成されればよく、本実施の形態で説明した方法以外の方法でも良い。【０１３０】
なお、本実施の形態１では、予め分割鍵格納手段に記憶された分割鍵同士を結合演算することで結合分割鍵を生成しているが、結合分割鍵生成手段で生成される結合分割鍵は、結合分割鍵同士を結合演算した値でもよい。このようにすると、結合分割鍵の取りうる値のバリエーションが増加するため、署名鍵Ｄの特定をさらに困難にさせる効果がある。
なお、本実施の形態１では、予め分割鍵格納手段に記憶された分割鍵同士を結合演算することで結合分割鍵を生成しているが、署名鍵Ｄを用いた署名生成結果である署名Ｓと同じ結果を生成することが出きればよく、同じ結果を生成する処理に影響を与えないような冗長な鍵を用いて、処理を行ってもよい。また冗長鍵は、乱数を発生させた値としてもよい。乱数値をはじめとした冗長鍵を利用した場合、署名鍵生成恒等式で生成される式もこの値を含むようにしてもよい。このように冗長な鍵を利用することにより、本来の処理では必要としない情報を利用することで、不正解析者による解析をさらに困難させる効果がある。【０１３１】
（実施の形態２）
本発明の実施の形態２について、以下に説明する。
実施の形態１では、ＲＳＡ署名生成における本発明の実施例を説明したが、本実施の形態２では、ＥＣＤＳＡ（Ｅｌｌｉｐｔｉｃ  Ｃｕｒｖｅ  Ｄｉｇｉｔａｌ  Ｓｉｇｎａｔｕｒｅ  Ａｌｇｏｒｉｔｈｍ）に適用した例について説明する。ＥＣＤＳＡは、楕円曲線上の離散対数問題に基づいて考案された署名方法である。ＥＣＤＳＡ自体は公知技術であるため、詳細な説明は省略し、ＥＣＤＳＡに対して本発明を適用した場合の実施例を以下で説明する。なお、下記の図１５の説明において、分割乱数情報や結合乱数情報等を用いて、メモリ上に秘密情報が現れないように計算する処理を除いた処理フローが、通常のＥＣＤＳＡ署名の生成フローにあたる。【０１３２】
図１５は、本発明を適用した場合のＥＣＤＳＡのフロー概要について説明した図である。
なお、本発明を適用した場合の署名生成装置１００の構成、及び署名鍵生成恒等式Ｇ１２１と結合分割鍵１４１の作成方法は、実施の形態１と同じなので説明を省略する。
本実施の形態２では、ＥＣＤＳＡに適用した際に、本実施の形態１と異なる部分について説明する。【０１３３】
ＥＣＤＳＡにおける署名生成式は、次式で示される。
Ｓ  ＝  （ｈ＋ｒ＊ｄ）／ｋ  ｍｏｄ  ｑ
ここで、Ｓは署名であり、ｄは署名鍵であり、ｒはベースポイントＰのｋ倍点のｘ座標であり、ｑはベースポイントＰの位数である。
また、ｈはＭのハッシュ値でありｈ＝Ｈａｓｈ（Ｍ）と表され、Ｍは署名生成対象メッセージであり、Ｈａｓｈ（Ｍ）は、署名生成対象メッセージＭのハッシュ値を計算することを示す。【０１３４】
ＥＣＤＳＡで、秘密にしなければならない情報は、ステップＳ１５０２で利用される乱数ｋと、ステップＳ１５０４で利用される署名鍵ｄの値である。ここで、乱数ｋを秘密にしなければならない理由は、署名対象メッセージＭと署名（ｒ、Ｓ）を知り得た場合、次式より署名鍵ｄを計算できるからである。
ｈ＝Ｈａｓｈ（Ｍ）
ｄ＝（ｋ＊Ｓ−ｈ）／ｒ  ｍｏｄ  ｑ
以降、図１５を用いて、署名鍵ｄと乱数ｋの２つの情報を秘密にした場合の、ＥＣＤＳＡの署名生成フローについて説明する。なお、署名生成装置１００は、図１の署名生成装置１００では図示していないが、楕円曲線のシステムパラメータ（ｙ＾２＝ｘ＾３＋ａ＊ｘ＋ｂ、定義体ＧＦ（ｐ）、ベースポイントＰ、ベースポイントＰの位数ｑ）を保持しており、乱数を生成する乱数生成手段を備えているものとする。【０１３５】
まず、署名生成対象メッセージＭに対して、ハッシュ値Ｈａｓｈ（Ｍ）を計算し、そのハッシュ値をｈとする（ステップＳ１５０１）。
次に、楕円曲線のベースポイントＰに対して乱数ｋを発生させ、Ｐのｋ倍点を計算し、ｋ倍した点をＲとする（ステップＳ１５０２）。このとき、乱数ｋは、秘密情報であるので、乱数ｋの値がメモリに直接現れないように、複数の分割乱数情報を生成し、生成した分割乱数情報のみを用いてＰのｋ倍点を計算する。ステップＳ１５０２におけるこの処理については、後に図１６を用いて詳細に説明する。【０１３６】
次に、Ｒのｘ座標の値をｒとする（ステップＳ１５０３）。
次に、乱数ｋと署名鍵ｄを用いた式Ｓ  ＝  （ｈ＋ｒ＊ｄ）/ｋ  ｍｏｄ  ｑと恒等な演算を、乱数ｋと署名鍵ｄの値を直接メモリ上に保持することなく、代わりに分割乱数情報と、署名鍵ｄを予め分割した分割鍵とをメモリ上に保持し、これらを用いて署名Ｓを生成する（ステップＳ１５０４）。【０１３７】
ステップＳ１５０４におけるこの処理については、後に図１７を用いて詳細に説明する。
最後に、ステップＳ１５０３とＳ１５０４の結果から（ｒ，Ｓ）のペアを署名として出力し、ＥＣＤＳＡの署名生成を終了する。
次に、ステップＳ１５０２の詳細について、図１６に示すフローチャートを用いて説明する。【０１３８】
まず、ｍ個のランダムな式Ｒ１…Ｒｍを生成し、その積を演算する乱数生成式Ｔを作成する。ここで、Ｒ１…Ｒｍの積が乱数ｋにあたる（ステップＳ１６０１）。
Ｔ  ＝  Ｒ１＊Ｒ２＊…Ｒｍ
更に、Ｒ１…Ｒｍのそれぞれを更に細かな値（分割乱数情報）の和に分割する。
Ｔ  ＝  Σｔ（１，ｈ）＊Σｔ（２，ｉ）＊…＊Σｔ（ｍ，ｊ）…（式Ｔ）
ここで、
Σｔ（１，ｈ）＝ｔ（１，１）＋ｔ（１，２）＋…＋ｔ（１，ｈ）
Σｔ（２，ｉ）＝ｔ（２，１）＋ｔ（２，２）＋…＋ｔ（２，ｉ）
・・・
Σｔ（ｍ，ｊ）＝ｔ（ｍ，１）＋ｔ（ｍ，２）＋…＋ｔ（ｍ，ｊ）
である。【０１３９】
ｔ（１，１）、ｔ（１，２）、…、ｔ（１，ｈ）は、それぞれが分割乱数情報であり、式Σｔ（１，ｈ）はｈ個の分割乱数情報の和を表す。
また、ｈ、ｉ、ｊ…は、任意の数である。
次に、乱数生成式Ｔの項であるΣｔ（１，ｈ）、Σｔ（２，ｉ）、・・・、Σｔ（ｍ，ｊ）に用いられている分割乱数情報ｔ（ｘ，ｙ）すなわちｔ（１，１）、ｔ（１，２）、・・・、ｔ（１，ｈ）、ｔ（２，１）、・・・、ｔ（２，ｉ）、ｔ（ｍ，１）、・・・、ｔ（ｍ，ｊ）のそれぞれに対して、乱数を生成してセットする（ステップＳ１６０２）。【０１４０】
次に、Σｔ（１，ｈ）、Σｔ（２，ｉ）、・・・Σｔ（ｍ，ｊ）の値がそれぞれｑと互いに素かどうか判定する（ステップＳ１６０３）。
ここで、「ｑと互いに素となる」という条件は、乱数ｋが逆元を持つために必要な条件である。
ステップＳ１６０３の判定の結果が、「ＮＯ」であればステップＳ１６０２へ処理を戻し、上述した乱数の生成とセットを再度行う。【０１４１】
そうでなくステップＳ１６０３の判定の結果が、「ＹＥＳ」であれば、乱数生成式Ｔと恒等な乱数生成恒等式Ｕを作成する（ステップＳ１６０４）。
ステップＳ１６０４における、乱数生成式Ｔから乱数生成恒等式Ｕの作成は、実施の形態１における署名鍵生成式Ｆ２１から署名鍵生成恒等式Ｇ１２１を生成する方法と同様の方法で行うことができるため説明を省略する。【０１４２】
次に乱数生成恒等式Ｕに基づき結合乱数情報を作成する（ステップＳ１６０５）。ここで、結合乱数情報は、実施の形態１における結合分割鍵に相当する。したがって、ステップＳ１６０５の結合乱数情報の作成方法は、実施の形態１における結合分割鍵の作成と同様であるので、説明を省略する。
次に、乱数生成恒等式ＵとステップＳ１６０５で作成された結合乱数情報を用いて、ベースポイントＰのＵ倍点Ｕ＊Ｐを計算し、その計算結果をＲとする（ステップＳ１６０６）。【０１４３】
このとき、乱数生成恒等式Ｕの式に結合乱数情報の値を代入して算出された結果は、ＥＣＤＳＡの本来のアルゴリズムで利用される乱数ｋに対応する。すなわち、Ｓ１５０２の乱数ｋに対応する値を直接メモリに出現させることなく、複数の分割乱数を結合演算した値である結合乱数情報のみ利用してＰのＵ倍点を算出することができる。
ステップＳ１６０６は、楕円曲線上の点同士の加算および、点のｎ倍点演算を行う。ここで、この計算を、実施の形態１との対応で説明すると、実施の形態１ではＲＳＡの署名生成処理のベキ乗演算における「ベキ乗演算」が楕円曲線上の「ｎ倍点演算」に、ＲＳＡの署名生成処理の「乗算」が楕円曲線上の加算に対応する。したがって、ＲＳＡの署名生成フローにおいて、適用する演算の種類を変更したフローにより、楕円曲線上の点同士の加算およびｎ倍点演算を行うことができる。【０１４４】
ここで、理解の容易化のため、ステップＳ１６０１〜Ｓ１６０６までについて、具体例をあげて説明する。
まず、ステップＳ１６０１において、上述した方法で生成した乱数生成式Ｔが以下の式であるとする。
Ｔ  ＝  Σｔ（１，４）＊Σｔ（２，４）…（式Ｔ）
Σｔ（１，４）＝ｔ（１，１）＋ｔ（１，２）＋ｔ（１，３）＋ｔ（１，４）
Σｔ（２，４）＝ｔ（２，１）＋ｔ（２，２）＋ｔ（２，３）＋ｔ（２，４）
次に、ｔ（１，１）、ｔ（１，２）、…、ｔ（１，４）、ｔ（２，１）、ｔ（２，２）、…、ｔ（２、４）のそれぞれに乱数値を設定する（ステップＳ１６０２）。【０１４５】
このとき、Σｔ（１，４）とΣｔ（２，４）とが互いに素になるまで、乱数値の設定をやり直す（ステップＳ１６０３）。
続いて、乱数生成恒等式Ｕを、
乱数生成式Ｔ＝（ｔ（１，１）＋ｔ（１，２）＋ｔ（１，３）＋ｔ（１，４））
＊（ｔ（２，１）＋ｔ（２，２）＋ｔ（２，３）＋ｔ（２，４））
から、交換法則、結合法則、分配法則を利用し、例えば、
Ｔ  ＝  （（（ｔ（１，１）＋ｔ（１，３））＋（（ｔ（１，２）＋ｔ（１，４）））
＊（（ｔ（２，１）＋ｔ（２，３））
＋（（（ｔ（１，１）＋ｔ（１，４））＋（（ｔ（１，２）＋ｔ（１，３）））
＊（（ｔ（２，２）＋ｔ（２，４））
のように恒等変換し、引数ｕ１〜ｕ６を
ｕ１＝ｔ（１，１）＋ｔ（１，３）
ｕ２＝ｔ（１，２）＋ｔ（１，４）
ｕ３＝ｔ（２，１）＋ｔ（２，３）
ｕ４＝ｔ（１，１）＋ｔ（１，４）
ｕ５＝ｔ（１，２）＋ｔ（１，３）
ｕ６＝ｔ（２，２）＋ｔ（２，４）と設定する（ステップＳ１６０５）。【０１４６】
このようにすると乱数生成恒等式Ｕは、
Ｕ（ｕ１，ｕ２，ｕ３，ｕ４，ｕ５，ｕ６）
＝  （ｕ１＋ｕ２）＊ｕ３＋（ｕ４＋ｕ５）＊ｕ６となる。
引数ｕ１には、結合乱数情報Ｕ１が代入され、引数ｕ２には、結合乱数情報Ｕ２が代入され、同様に、引数ｕ３〜ｕ６には、結合乱数情報Ｕ３〜Ｕ６が代入される。【０１４７】
Ｕ  ＝  （Ｕ１＋Ｕ２）＊Ｕ３＋（Ｕ４＋Ｕ５）＊Ｕ６
また、ベースポイントＰのＵ倍点Ｕ＊Ｐは、
Ｕ＊Ｐ  ＝  Ｕ３＊（Ｕ１＊Ｐ＋Ｕ２＊Ｐ）＋Ｕ６＊（Ｕ４＊Ｐ＋Ｕ５＊Ｐ）
で計算可能となる。
ここで、乱数生成式Ｔと乱数生成恒等式Ｕとは恒等であるため、Ｕ＊Ｐは、Ｔ＊Ｐと同一の結果となる。さらに、Ｔは乱数ｋを計算する乱数生成式であるので、乱数ｋやその生成に用いる乱数生成式Ｔそのものをメモリ上に乗せることなく、Ｐのｋ倍点を計算することが可能となる。また、乱数生成恒等式Ｕや対応する結合乱数情報等は毎回ランダムに生成されるため、乱数ｋの値の解析を困難にすることができる。これにより、実施の形態２の署名生成装置は、ＥＣＤＳＡ署名生成フローの解析を困難にすることができる。【０１４８】
続いて、図１７を用いて、図１５のステップＳ１５０４の詳細フローを説明する。
まず、ランダムな値をｍ個生成し、それぞれを分割冗長鍵ｄｕ１、ｄｕ２、…、ｄｕｍとし、各分割冗長鍵を加算したｄｕ１＋ｄｕ２＋…＋ｄｕｍを分割冗長鍵生成式Ｄｕとする（ステップＳ１７０１）。
Ｄｕ  ＝  ｄｕ１＋ｄｕ２＋…＋ｄｕｍ  …（式Ｄｕ）
これは、式  Ｓ  ＝  （ｈ＋ｒ＊ｄ）/ｋ  ｍｏｄ  ｑにおける、１／ｋをメモリ上に直接現すことなく計算するためのものである。【０１４９】
即ち、
１／ｋ  ＝  Ｄｕ／（Ｄｕ＊ｋ）
＝  ｄｕ１／（Ｄｕ＊ｋ）＋  ｄｕ２／（Ｄｕ＊ｋ）  ＋・・・＋ｄｕｍ／（Ｄｕ＊ｋ）
であり、かつ、Ｓ１５０２で生成したＵはｋと等価であるので、１／ｋの代わりに、
ｄｕ１／（Ｄｕ＊Ｕ）＋  ｄｕ２／（Ｄｕ＊Ｕ）  ＋・・・＋ｄｕｍ／（Ｄｕ＊Ｕ）
を計算すればよい。【０１５０】
さらに、上式のＤｕ＊Ｕを式Ａとし、Ｄｕ＊Ｕを、Ｄｕ＊Ｕと恒等な式Ｂ１、Ｂ２・・・Ｂｍで置き換えると
１／ｋ  ＝  （ｄｕ１／Ｂ１）＋  （ｄｕ２／Ｂ２）  ＋・・・＋  （ｄｕｍ／Ｂｍ）となり
この（ｄｕ１／Ｂ１）をＣ１に置き換え、同様に（ｄｕ２／Ｂ２）をＣ２に・・・（ｄｕｍ／Ｂｍ）をＣｍに置き換えると、
１／ｋ  ＝  Ｃ１＋Ｃ２＋・・・Ｃｍ
となる。【０１５１】
結局、署名Ｓを計算するためには、
Ｓ  ＝  （ｈ／ｋ  ＋  ｒ＊ｄ／ｋ）  ｍｏｄ  ｎ
＝  （ｈ＊（Ｃ１＋Ｃ２＋・・・＋Ｃｍ）
＋  ｒ＊Ｆ＊（Ｃ１＋Ｃ２＋…＋Ｃｍ））  ｍｏｄ  ｎ
＝  （ｈ＊（Ｃ１＋Ｃ２＋・・・＋Ｃｍ）
＋  ｒ＊Ｈ）  ｍｏｄ  ｎ
を計算すればよいことになる。【０１５２】
ここで、上式におけるＦは、実施の形態１において示した下式
Ｆ（ｄ１，ｄ２，ｄ３，ｄ４，ｄ５，ｄ６，ｄ７，ｄ８）
＝（ｄ１＋ｄ２＋ｄ３＋ｄ４）＊（ｄ５＋ｄ６＋ｄ７＋ｄ８）
を示すものである。
また、Ｈは、式  Ｆ＊（Ｃ１＋Ｃ２＋…＋Ｃｍ）と恒等な式であり、Ｆは、上述の署名鍵生成式である。【０１５３】
以下、ステップＳ１７０２以降のフローチャートの説明に戻る。
次に、分割冗長鍵生成式Ｄｕの値がｑと互いに素かどうか判定する（ステップＳ１７０２）。
ステップＳ１７０２の判定の結果が「ＮＯ」であれば、さらに別のｄｕ１…ｄｕｍを生成するために、ステップＳ１７０１へ処理を戻す。【０１５４】
そうでなく、ステップＳ１７０２の判定の結果が「ＹＥＳ」であれば、ステップＳ１５０２で求めた乱数生成恒等式Ｕと分割冗長鍵生成式Ｄｕを乗算した式Ｕ＊ＤｕをＡとし、Ａと恒等な式をｍ個生成し、Ｂ１、Ｂ２、…、Ｂｍとする（ステップＳ１７０３）。
ステップＳ１７０３で生成した恒等式Ｂ１、Ｂ２、…、Ｂｍに基づき、結合分割鍵ｂｉｊ（ｉ、ｊ＝１、２、…）を生成する（ステップＳ１７０４）。【０１５５】
ステップＳ１７０３とＳ１７０４は、Ａを実施の形態１における署名鍵生成式Ｆ２１と見て、Ａの式を構成している分割冗長鍵ｄｕ１、ｄｕ２、…、ｄｕｍおよびステップＳ１５０４にて作成した結合乱数情報Ｕ１、Ｕ２、…、Ｕｉを分割鍵１１１と見て、実施の形態１と同様の処理を行うことにより、恒等式Ｂ１、Ｂ２、…、Ｂｍ、および、それぞれの恒等式に対応する結合分割鍵ｂｉｊ（ｉ，ｊ＝１，２，…）を生成することができる。【０１５６】
なお、実施の形態１では、署名鍵生成恒等式Ｇ１２１は１つしか作成しなかったが、ここでは、署名鍵生成恒等式Ｇ１２１に相当する恒等式Ｂ１等をｍ個生成し、それぞれについて結合分割鍵の組をｍ組作成する。
次に、ステップＳ１７０１で生成したｍ個の分割冗長鍵ｄｕ１、ｄｕ２、…、ｄｕｍとｍ個の恒等式Ｂ１、Ｂ２、…、Ｂｍを用いて、次のようなｍ個のＣ１、Ｃ２、…、Ｃｍを作成する（ステップＳ１７０５）。【０１５７】
Ｃ１＝ｄｕ１／Ｂ１
Ｃ２＝ｄｕ２／Ｂ２
…
Ｃｍ＝ｄｕｍ／Ｂｍ
このとき、Ｃ１＋Ｃ２＋…＋Ｃｍは、Ｂ１、Ｂ２、Ｂｍは共にＡと恒等であることと、Ｄｕ＝ｄｕ１＋ｄｕ２＋…＋ｄｕｍである性質を利用して、以下のように式変形できる。【０１５８】
Ｃ１＋Ｃ２＋…＋Ｃｍ
＝（ｄｕ１／Ｂ１）＋（ｄｕ２／Ｂ２）＋…＋（ｄｕｍ／Ｂｍ）
＝（（ｄｕ１＋ｄｕ２＋…＋ｄｕｍ）／Ａ
＝（ｄｕ１＋ｄｕ２＋…＋ｄｕｍ）／Ｕ＊Ｄｕ
＝１／Ｕ
Ｕは、ステップＳ１５０２の乱数ｋに相当するため、１／Ｕ  ｍｏｄ  ｑの値は、ｋ＾−１  ｍｏｄ  ｑに相当することになる。これにより、ｋ＾−１  ｍｏｄ  ｑの値を、ｋの値そのものはメモリに乗せることなく計算することができる。【０１５９】
また、恒等式Ｂ１…Ｂｍや分割冗長鍵ｄｕ１、ｄｕ２…ｄｕｍ等はランダムに生成されるため、ｋ＾−１  ｍｏｄ  ｑの計算過程を署名生成を行うたびに動的に変化させることができる。これにより、実施の形態２の署名生成装置は、ＥＣＤＳＡ署名生成フローの解析を、困難にすることができる。
次に、署名鍵生成式ＦとステップＳ１７０５で生成したｍ個のＣｉ（ｉ＝１，２，…，ｍ）式を用いて、（式Ｅ）を生成する（ステップＳ１７０６）。【０１６０】
Ｆ＊（Ｃ１＋Ｃ２＋…＋Ｃｍ）…（式Ｅ）
次に、（式Ｅ）と恒等な（式Ｈ’）を生成する（ステップＳ１７０７）。
次に、（式Ｈ’）に基づき、署名鍵生成式Ｆの要素である分割鍵と、Ｃ１、Ｃ２、…、Ｃｍの要素値に対して、実施の形態１で説明したフローを用いて結合演算し、結合演算した値を結合分割鍵とする（ステップＳ１７０８）。なお、ステップＳ１８０７およびステップＳ１７０８の処理は、実施の形態１における署名鍵生成式Ｆ２１を（式Ｅ）と、Ｃ１、…、Ｃｍの要素値と署名鍵生成式Ｆ２１の要素値ｄｉとを実施の形態１における署名鍵生成式Ｆ２１の要素値ｄｉと見ることにより、実施例１と同様の処理となるため、詳細な説明は省略する。このようにすると恒等式Ｈ’は、結合分割鍵を用いたＨとして表すことができる。【０１６１】
これにより、恒等式Ｈに対応する結合分割鍵ｈｉは毎回ランダムに生成されることになるため、ＥＣＤＳＡ署名生成フローの解析を、困難にすることができる。
次にステップＳ１５０１で算出したハッシュ値ｈと、ステップＳ１７０５で生成した式Ｃ１、Ｃ２、…、Ｃｍと、ステップＳ１７０７で生成した恒等式Ｈと、ステップＳ１５０３で算出した点ＲのＸ座標の値ｒを用いて、
Ｓ  ＝  （ｈ＋ｒ＊ｄ）／ｋ  ｍｏｄ  ｑ
と恒等な演算を、
Ｓ  ＝  ｈ＊（Ｃ１＋Ｃ２＋…＋Ｃｍ）＋ｒ＊Ｈ  ｍｏｄ  ｑ
上式で算出し、算出値をＳとする（ステップＳ１７０９）。【０１６２】
以上まとめて、実施の形態２の署名生成装置は、乱数値ｋの値および署名鍵ｄの値を直接メモリに出すことなく、署名Ｓを生成することができる。
なお、ステップＳ１７０９の演算においては、ｈ＊（Ｃ１＋Ｃ２＋…＋Ｃｍ）の演算結果値が直接メモリに出ないような順序で演算することが望ましい。
なぜならｈ＊（Ｃ１＋Ｃ２＋…＋Ｃｍ）の値から、乱数情報であるｋを復元することが可能となるためである。【０１６３】
演算順序については、具体例を後述するので、ここでの説明は省略する。
続いて、図１７のフローを具体例を上げて説明する。
まず、３個の乱数を生成し、それぞれを分割冗長鍵ｄｕ１、ｄｕ２、ｄｕ３とし、
Ｄｕ＝ｄｕ１＋ｄｕ２＋ｄｕ３
とする（ステップＳ１７０１）。【０１６４】
ここで、Ｄｕがｑと互いに素でない場合には、Ｄｕとｑとが互いに素になるまで分割冗長鍵の生成を繰り返す（ステップＳ１７０２）。
続いて、乱数生成恒等式Ｕを用いた計算の説明に移るが、以下の説明においては、乱数生成恒等式Ｕは、図１６の説明にて生成した以下の（式Ｕ）とする。
Ｕ  ＝  （Ｕ１＋Ｕ２）＊Ｕ３＋（Ｕ４＋Ｕ５）＊Ｕ６…（式Ｕ）
このとき、（式Ａ）は、例えば、以下のようになる。【０１６５】
（（Ｕ１＋Ｕ２）＊Ｕ３＋（Ｕ４＋Ｕ５）＊Ｕ６）
＊（ｄｕ１＋ｄｕ２＋ｄｕ３）                …（式Ａ）
次に、（式Ａ）と恒等な（式Ｂ１）、（式Ｂ２）、（式Ｂ３）を生成する。
恒等式Ｂ１の計算手順としては、まず、次のような式Ａの恒等式１を生成し、
（（（Ｕ１＋Ｕ２）＊Ｕ３）＋（（Ｕ４＋Ｕ５）＊Ｕ６））＊（ｄｕ１＋ｄｕ２）
＋（（Ｕ１＋Ｕ２）＊Ｕ３＋（Ｕ４＋Ｕ５）＊Ｕ６）＊ｄｕ３
生成した恒等式１に基づいて結合分割鍵をそれぞれ以下のようにする。【０１６６】
ｂ１１＝（Ｕ１＋Ｕ２）＊Ｕ３
ｂ１２＝（Ｕ４＋Ｕ５）＊Ｕ６
ｂ１３＝ｄｕ１＋ｄｕ２
ｂ１４＝（Ｕ１＋Ｕ２）＊Ｕ３＋（Ｕ４＋Ｕ５）＊Ｕ６
ｂ１５＝ｄｕ３
すると、恒等式Ｂ１は、式Ａの恒等式１と上記結合分割鍵を用いて以下の（式Ｂ１）になる。【０１６７】
（ｂ１１＋ｂ１２）＊ｂ１３＋ｂ１４＊ｂ１５…（式Ｂ１）
同様に、恒等式Ｂ２の計算手順は、まず、以下のような式Ａの恒等式２を生成し、
（Ｕ１＊Ｕ３＋Ｕ２＊Ｕ３＋Ｕ４＊Ｕ６＋Ｕ５＊Ｕ６）
＊（（ｄｕ１）＋（ｄｕ２＋ｄｕ３））
生成した恒等式Ｂ２について、結合分割鍵をそれぞれ以下のようにする。【０１６８】
ｂ２１＝Ｕ１＊Ｕ３
ｂ２２＝Ｕ２＊Ｕ３
ｂ２３＝Ｕ４＊Ｕ６
ｂ２４＝Ｕ５＊Ｕ６
ｂ２５＝ｄｕ１
ｂ２６＝ｄｕ２＋ｄｕ３
すると、恒等式Ｂ２は、式Ａの恒等式２と上記結合分割鍵を用いて以下の（式Ｂ２）になる。【０１６９】
Ｂ２  ＝  （ｂ２１＋ｂ２２＋ｂ２３＋ｂ２４）＊（ｂ２５＋ｂ２６）…（式Ｂ２）
さらに同様にして、恒等式Ｂ３の生成手順としては、まず、以下のような式Ａの恒等式３を生成し、
（（Ｕ１＊Ｕ３＋Ｕ４＊Ｕ６）＋（Ｕ２＊Ｕ３＋Ｕ５＊Ｕ６））
＊（ｄｕ１＋ｄｕ２＋ｄｕ３）
生成した恒等式３に応じて、結合分割鍵をそれぞれ以下のようにする。【０１７０】
ｂ３１＝Ｕ１＊Ｕ３＋Ｕ４＊Ｕ６
ｂ３２＝Ｕ２＊Ｕ３＋Ｕ５＊Ｕ６
ｄ３３＝ｄｕ１＋ｄｕ２＋ｄｕ３
すると、恒等式Ｂ３は、式Ａの恒等式３と上記結合分割鍵を用いて以下の式Ｂ３になる。【０１７１】
（ｂ３１＋ｂ３２）＊ｂ３３…（式Ｂ３）
続いて、生成した（式Ｂ１）、（式Ｂ２）、（式Ｂ３）を用い、ステップＳ１７０５にて、以下の３式Ｃ１、Ｃ２、Ｃ３が生成される。
Ｃ１＝ｄｕ１／Ｂ１＝ｄｕ１／（（ｂ１１＋ｂ１２）＊ｂ１３＋ｂ１４＊ｂ１５）…（式Ｃ１）
Ｃ２＝ｄｕ２／Ｂ２＝ｄｕ２／（（ｂ２１＋ｂ２２＋ｂ２３＋ｂ２４）＊（ｂ２５＋ｂ２６））…（式Ｃ２）
Ｃ３＝ｄｕ３／Ｂ３＝ｄｕ３／（（ｂ３１＋ｂ３２）＊ｂ３３）…（式Ｃ３）
このとき、上述したように、Ｃ１＋Ｃ２＋Ｃ３＝ｋ＾（−１）  ｍｏｄ  ｑが成り立つことになる。【０１７２】
ここで、ＥＣＤＳＡの署名鍵ｄは８個の分割鍵に分割されており、署名鍵生成式Ｆは以下のような（式Ｆ）であるとする。
Ｆ  ＝  （ｄ１＋ｄ２＋ｄ３＋ｄ４）＊（ｄ５＋ｄ６＋ｄ７＋ｄ８）…（式Ｆ）
このとき、次にステップＳ１７０６にて生成される（式Ｅ）は、
（ｄ１＋ｄ２＋ｄ３＋ｄ４）＊（ｄ５＋ｄ６＋ｄ７＋ｄ８）＊（Ｃ１＋Ｃ２＋Ｃ３）となる（ステップＳ１７０６）。続いて、（式Ｅ）から（式Ｅ）と恒等な（式Ｈ）を作成する（ステップＳ１７０７）。ここでは、（式Ｅ）の恒等変換例を
Ｈ  ＝  （（ｄ１＋ｄ３）＋（ｄ２＋ｄ４））＊（（ｄ６＋ｄ７）＋（ｄ８＋ｄ５））＊Ｃ１
＋（（ｄ２＋ｄ３）＋（ｄ１＋ｄ４））＊（（ｄ６＋ｄ８）＋（ｄ７＋ｄ５））＊（Ｃ２＋Ｃ３）
とし、結合分割鍵をそれぞれ
Ｈ１＝ｄ１＋ｄ３
Ｈ２＝ｄ２＋ｄ４
Ｈ３＝ｄ６＋ｄ７
Ｈ４＝ｄ８＋ｄ５
Ｈ５＝Ｃ１
Ｈ６＝ｄ２＋ｄ３
Ｈ７＝ｄ１＋ｄ４
Ｈ８＝ｄ６＋ｄ８
Ｈ９＝ｄ７＋ｄ５
Ｈ１０＝Ｃ２＋Ｃ３
とする。この場合、恒等式Ｈは、上記の結合情報を利用して以下のような（式Ｈ）となる。【０１７３】
（（Ｈ１＋Ｈ２）＊（Ｈ３＊Ｈ４））＊Ｈ５
＋（（Ｈ６＋Ｈ７）＊（Ｈ８＊Ｈ９））＊Ｈ１０…（式Ｈ）
次に、
ｈ＊（Ｃ１＋Ｃ２＋Ｃ３）＋ｒ＊Ｈ
＝ｈ＊（Ｃ１＋Ｃ２＋Ｃ３）＋ｒ＊｛（（Ｈ１＋Ｈ２）＊（Ｈ３＊Ｈ４））＊Ｈ５＋
（（Ｈ６＋Ｈ７）＊（Ｈ８＊Ｈ９））＊Ｈ１０｝
を交換法則、結合法則、分配法則を用いてｈ＊（Ｃ１＋Ｃ２＋Ｃ３）の値が直接メモリに出ないように算出し、算出結果を署名Ｓとする。ｈ＊（Ｃ１＋Ｃ２＋Ｃ３）の値を直接メモリに出さないようにする計算順序の一例としては、
ｈ＊（Ｃ１＋Ｃ２＋Ｃ３）＋ｒ＊｛（（Ｈ１＋Ｈ２）＊（Ｈ３＊Ｈ４））＊Ｈ５＋
（（Ｈ６＋Ｈ７）＊（Ｈ８＊Ｈ９））＊Ｈ１０｝
＝ｈ＊（Ｃ１＋Ｃ２）＋ｒ＊｛（（Ｈ１＋Ｈ２）＊（Ｈ３＊Ｈ４））＊Ｈ５｝
＋ｈ＊Ｃ３＋ｒ＊｛（（Ｈ６＋Ｈ７）＊（Ｈ８＊Ｈ９））＊Ｈ１０｝
という式に変形して計算する。【０１７４】
すなわち、上述の計算式では、ｈ＊（Ｃ１＋Ｃ２＋Ｃ３）をｈ＊（Ｃ１＋Ｃ２）とｈ＊Ｃ３に分けて計算し、かつ、その計算の間に残りの計算を挟むことにより、ｈ＋（Ｃ１＋Ｃ２＋Ｃ３）の値が直接メモリ上に現れないようにしている。
以上のようにすることで、ステップＳ１５０２の乱数ｋに相当する値と署名鍵ｄの値を直接メモリに出現させることなく、且つ実行の度に署名Ｓの生成に用いる乱数生成恒等式Ｕと署名生成式Ｈを署名生成を実行するたびに変化させることが可能となるため、不正解析による署名鍵ｄの特定が非常に困難となるという効果がある。【０１７５】
なお、本実施の形態１および２では、ＲＳＡ署名、ＥＣＤＳＡについて説明しているが、これに限定されるわけではなく、ＲＳＡ暗号、楕円暗号、ＥｌＧａｍａｌ暗号等、算出演算を用いた公開鍵暗号に利用してもよい。また、本実施の形態１および２にて例示した手順の応用先は、暗号や署名に利用する鍵情報に限定する必要はなく、これらとは異なる保護すべき秘密情報に対して適用してもよいことは言うまでもない。【０１７６】
（実施の形態３）
本発明の実施の形態３について、以下に説明する。
本実施の形態３では、署名鍵を分割鍵に分割し、分割鍵を端末に埋め込むまでの工程を図１８を用いて説明する。
鍵発行機関は、署名生成をするための署名鍵を発行する機関である。【０１７７】
鍵発行機関では、ｎ台（情報端末１（１８１０）、情報端末２（１８２０）、…、情報端末ｎ（１８３０））の端末向けに、それぞれ異なる署名鍵１、署名鍵２、…、署名鍵ｎを発行する。
分割鍵生成装置１８０２は、鍵発行機関から発行された署名鍵と、署名鍵生成式を入力とし、署名鍵生成式に基づき、署名鍵を分割する装置であり、分割鍵と署名鍵生成式を出力する。【０１７８】
分割鍵書込み装置１８０５は、署名生成を行う情報端末に対して、分割鍵生成装置１８０２で生成された分割鍵と署名鍵生成式から成る分割鍵情報１８０４を情報端末に書き込む装置である。例えば、情報端末が携帯電話などの組み込み機器の場合は、分割鍵書込み装置としては、ＲＯＭライターが用いられる。
ここで、情報端末１（１８１０）、情報端末２（１８２０）、…、情報端末ｎ（１８３０）は、署名生成を行う情報端末である。これら情報端末の構成は、実施の形態１で説明した署名生成装置１００と同じ構成であるため、本実施の形態３の説明に必要な構成のみを図示している。【０１７９】
端末を製造するメーカーは、分割鍵生成装置１８０２に対し、鍵発行機関から発行された署名鍵１８０１と、署名鍵生成式１８０３を入力し、署名鍵１８０１を分割した分割鍵と、分割鍵から署名鍵を生成するための情報である署名鍵生成式１８０３とから構成される分割鍵情報１８０４を生成する。
分割鍵情報１８０４は、署名鍵１の分割鍵情報１８１１、署名鍵２の分割鍵情報１８２１、署名鍵ｎの分割鍵情報１８３１から構成されており、署名鍵１の分割鍵情報１８１１は、情報端末１８１０向けの分割鍵情報であり、署名鍵２の分割鍵情報１８２１は、情報端末２（１８２０）向けの分割鍵情報であり、署名鍵ｎの分割鍵情報１８３１は、情報端末ｎ（１８３０）向けの分割鍵情報であることを示している。分割鍵情報（１８１１、１８２１、１８３１）は、実施の形態１で示した分割鍵識別情報テーブル２００と分割鍵情報テーブル４００としてもよく、また、署名鍵ｄと同じ値を算出できるように分割鍵と署名鍵生成式Ｆとの関係が識別できる情報であれば他の情報であってもよい。【０１８０】
次に、端末を製造するメーカーは、分割鍵生成装置１８０２により生成された分割鍵情報１８０４を、分割鍵書込み装置１８０５を用いて情報端末１８１０、１８２０、１８３０の各分割鍵格納手段に書き込む。
ここで、書き込むまでのより具体的な一例を説明すると、分割鍵生成装置により生成された分割鍵情報（１８１１、１８２１、１８３１）は、分割鍵識別情報テーブル２００と分割鍵情報テーブル４００を表現したデータファイルであり、そのデータファイルをコンパイルしてバイナリデータとし、そのバイナリデータをＲＯＭライターなどの分割鍵書込み装置１８０５を用いて、分割鍵格納手段に書き込む。【０１８１】
以上により、情報端末１（１８１０）の分割鍵格納手段には署名鍵１の分割鍵情報１８１１が書き込まれ、情報端末２（１８２０）の分割鍵格納手段には署名鍵２の分割鍵情報１８２１が書き込まれ、情報端末ｎ（１８３０）の分割鍵格納手段には署名鍵ｎの分割鍵情報１８３１が書き込まれることになる。
なお、本実施の形態３では、情報端末（１８１０、１８２０、１８３０）の署名鍵生成式は、それぞれ異なる署名鍵生成式Ｆ１、Ｆ２、…Ｆｎとしているが、情報端末全てで同じ署名鍵生成式としてもよい。この場合に情報端末ごとに異なる処理を行わせるためには、分割鍵生成装置１８０２が各情報端末毎に異なる分割鍵を生成し、生成された情報端末毎に異なる分割鍵を各情報端末（１８１０、１８２０、１８３０）に書き込めばよい。【０１８２】
なお、本実施の形態３では、分割鍵生成装置１８０２は、外部より署名鍵生成式１８０３を入力され、入力された署名鍵生成式に基づき署名鍵を分割しているが、入力される情報はこれに限られず、署名鍵から分割鍵を生成するための何らかのパラメータ情報であってもよい。例えば、分割鍵生成装置１８０２に署名鍵を分割する分割個数のパラメータを入力し、分割鍵生成装置１８０２内で入力された分割個数に従い、署名鍵を分割するようにしてもよい。さらに、分割鍵生成装置１８０２内で入力された分割個数に従い、署名鍵生成式を生成し、それを出力するようにしてもよい。ここで、分割鍵を生成するために入力されるパラメータは分割個数でなく、セキュリティレベルやＣＰＵの性能を表すパラメータ情報であってもよく、この場合、入力されたパラメータに応じて分割鍵生成装置１８０２内で、分割個数を決定するようにしてもよい。具体的にはセキュリティレベルが低かったりＣＰＵ性能が高い場合には、より多くの分割鍵を生成するというようにしてもよい。このようにすることで、署名鍵ｄの分割数を調整することが可能になるためセキュリティ強度を柔軟に設定することが可能である。【０１８３】
また、署名鍵１８０１は、鍵発行機関にて暗号化された状態で発行されてもよい。その場合、端末を製造するメーカーは、暗号化された署名鍵１８０１を復号してから、復号した署名鍵を分割鍵生成装置１８０２に入力する。また、ここでの暗号化方式が公開鍵暗号方式を利用していれば、鍵発行機関は、署名鍵１８０１に、署名鍵１８０１の署名を付して送信し、メーカーは、鍵発行機関の公開鍵を利用して、署名鍵１８０１の署名を検証することにより正当性を検証できるようにしてもよい。このようにすることで、鍵発行機関からメーカーへ渡される署名鍵１８０１を、受け渡し途中の盗聴や改ざんから保護することができる。【０１８４】
なお、分割鍵生成装置１８０２と分割鍵書込み装置１８０５は、端末製造メーカーが利用するとして説明したが、現実的には、製造工程において、分割鍵生成装置１８０２と分割鍵書込み装置１８０５の利用場所が異なる場合がある。具体例としては、分割鍵書込み装置１８０５の利用を端末の製造工場で実施する場合などがある。この場合は、分割鍵生成装置１８０２で生成した分割鍵情報１８０４を暗号化し、暗号化した分割鍵情報を端末の製造工場に配布し、端末の製造工場では、配布された暗号化情報を復号し、復号した分割鍵情報１８０４を分割鍵書込み装置１８０５に入力するようにしてもよい。このようにすることで、安全な分割鍵の配布が可能となる。【０１８５】
なお、上記では、署名鍵１８０１、分割鍵情報１８０４の暗号化方法を示していないが、その場合の暗号化方法については特に限定するわけではなくＡＥＳなどの共通鍵暗号もしくは、ＲＳＡや楕円暗号などの公開鍵暗号を用いることで実現すればよい。
（実施の形態４）
実施の形態４では、署名鍵生成恒等式生成手段１２０にて、署名鍵生成恒等式を算出する署名鍵生成恒等式生成プログラムを、ネットワークを介して更新する方法について図１９、図２０を用いて説明する。【０１８６】
図１９は、署名生成装置１００が、ネットワーク上にある更新サーバー１９０１から更新用の署名鍵生成恒等式生成プログラムＸ１９０２をダウンロードし、署名鍵生成恒等式生成手段１２０の署名鍵生成恒等式生成プログラムを更新する概要図である。実施の形態１と異なる点は、実施の形態４は、新しい署名鍵生成恒等式生成プログラムをネットワーク上の更新サーバーからダウンロードし、署名鍵生成恒等式生成手段１２０の署名鍵生成恒等式生成プログラムを、ダウンロードした署名鍵生成恒等式生成プログラムＸ１９０２に更新することができる点である。【０１８７】
ここで、署名生成装置１００と更新サーバー１９０１は、インターネットなどのネットワーク１９００を介して接続されている。
更新サーバー１９０１は、署名生成装置１００の署名鍵生成恒等式生成手段１２０の署名鍵生成恒等式生成プログラムとは別の署名鍵生成恒等式生成プログラムＸ１９０２を保持している。ここで、署名鍵生成恒等式生成プログラムＸ１９０２は、署名生成プログラムと同等な機能、すなわち、署名鍵生成式Ｆ２１と恒等な式である署名鍵生成恒等式Ｇ１２１を生成する機能を有する。ただし、署名生成恒等式生成プログラムＸ１９０２が署名鍵生成恒等式Ｇ１２１を作成するフローは、署名鍵生成恒等式生成手段１２０の署名鍵生成恒等式生成プログラムとは異なるものとする。【０１８８】
また、更新サーバー１９０１は、更新用のプログラムである署名鍵生成恒等式生成プログラムＸ１９０２の正当性検証のために利用する署名生成恒等式生成プログラムＸの改ざん検出値１９０３も保持している。なお、改ざん検出値１９０３の具体例としては、署名鍵生成恒等式生成プログラムＸのハッシュ値等がある。
署名生成装置１００は、実施の形態１の図１で説明した構成要素に加え、本実施の形態４では、送受信手段１９１０と署名鍵生成恒等式生成プログラム更新手段１９２０とを備えるものとする。【０１８９】
送受信手段１９１０は、ネットワークを介して更新サーバー１９０１とデータの送受信を行う手段である。
署名鍵生成恒等式生成プログラム更新手段１９２０は、署名鍵生成恒等式生成プログラムの更新要求メッセージを、送受信手段１９１０を利用して、ネットワーク上に存在する更新サーバー１９０１に送信する。さらに、送受信手段１９１０を介して更新サーバー１９０１から署名鍵生成恒等式生成プログラムＸ１９０２を受信し、受信した署名鍵生成恒等式生成プログラムＸ１９０２で署名鍵生成恒等式生成手段１２０のプログラムを更新する。【０１９０】
次に図２０を用いて署名鍵生成恒等式生成手段１２０の署名鍵生成恒等式生成プログラムの更新フローについて説明する。
まず、署名鍵生成恒等式生成プログラム更新手段１９２０が送受信手段１９１０に、署名鍵生成恒等式生成プログラムＸ１９０２のダウンロードを要求する（ステップＳ２００１）。【０１９１】
次に、ダウンロード要求を受けた送受信手段１９１０は、ネットワーク１９００を介して、更新サーバー１９０１へ署名鍵生成恒等式生成プログラムＸ１９０２のダウンロード要求メッセージを送信する（ステップＳ２００２）。
次に、ダウンロード要求メッセージを受けた更新サーバー１９０１は、更新サーバー１９０１内で保持している署名鍵生成恒等式生成プログラムＸ１９０２と署名鍵生成恒等式生成プログラムＸ１９０２のハッシュ値１９０３を送受信手段１９１０に送信する（ステップＳ２００３）。【０１９２】
続いて、送受信手段１９１０は、署名鍵生成恒等式生成プログラムＸ１９０２と署名鍵生成恒等式生成プログラムＸ１９０２のハッシュ値１９０３を更新サーバー１９０１から受信を完了した時点で、ダウンロード完了通知を署名鍵生成恒等式生成プログラム更新手段１９２０に通知する（ステップＳ２００４）。
次に、署名鍵生成恒等式生成プログラム更新手段１９２０は、署名鍵生成恒等式生成プログラムＸ１９０２のハッシュ値１９０３を利用して、署名鍵生成恒等式生成プログラムＸ１９０２が改竄されていないかを判定する。この判定の結果が「ＹＥＳ」、すなわち改ざんされていると判定された場合には更新フローを終了し、この判定結果が「ＮＯ」、すなわち改ざんされていないと判定された場合には更新処理を継続する（ステップＳ２００５）。【０１９３】
次に、署名鍵生成恒等式生成プログラム更新手段１９２０は、署名鍵生成恒等式生成手段１２０の署名鍵生成恒等式生成プログラムを、ダウンロードした署名鍵生成恒等式生成プログラムＸ１９０２で上書きすることで更新する（ステップＳ２００５）。
書き込みが完了すると、署名鍵生成恒等式生成プログラム更新手段１９２０は書込み完了通知を受信し、これをもって更新フローは終了する（ステップＳ２００６）。【０１９４】
以上のように署名生成装置１００は、ネットワーク１９００を利用して、更新サーバー１９０１から新しい署名鍵生成恒等式生成プログラムＸ１９０２をダウンロードして署名鍵生成恒等式生成手段１２０の署名鍵生成恒等式プログラムの更新を行う。
このような更新機能を持たせることで、署名鍵生成恒等式プログラムが不正解析者により改竄された場合や、署名鍵生成恒等式生成プログラムの不具合があった場合に、署名鍵生成恒等式プログラムを更新することにより、署名生成装置１００の安全性を確保することができる。【０１９５】
なお、実施の形態４では、図２０のステップＳ２００１のダウンロード要求を送信するタイミングについては示していないが、例えば、署名生成装置１００内で署名生成処理の開始要求の前に署名鍵生成恒等式生成手段１２０のプログラム（署名鍵生成恒等式生成プログラムＸに相当する）の正当性を検証し、検証の結果、「正当でない」と判定された場合に、ステップＳ２００１のダウンロード要求をするようにしてもよい。署名鍵生成恒等式生成手段１２０のプログラムの正当性の検証についてのより具体的方法としては、署名生成装置１００内の安全なメモリに署名鍵生成恒等式生成手段１２０のプログラムのハッシュ値を保持しておき、署名生成処理が開始される前に、署名鍵生成恒等式生成手段１２０の署名鍵生成恒等式生成プログラムのハッシュ値を算出し、算出したハッシュ値と、メモリ内に保持していたハッシュ値を比較する方法などがある。【０１９６】
また、実施の形態４では、署名生成装置１００と更新サーバー１９０１間でのデータ通信を、セキュア通信路（ＳＡＣ）でセッション鍵を共有し、セッション鍵で暗号化したデータの送受信としてもよい。ＳＡＣについては、Ｓｅｃｕｒｅ  Ｓｏｃｋｅｔｓ  Ｌａｙｅｒ（ＳＳＬ）などで利用されており既知の技術なので、説明を省略する。
また、実施の形態４では、ネットワークを介して更新サーバー１９０１から更新用の署名鍵生成恒等式生成プログラムＸ１９０２をダウンロードしていたが、ネットワークでなく、署名鍵生成恒等式生成プログラムＸ１９０２が記録されたＤＶＤやＣＤ等の記録媒体を用いることで、署名鍵生成恒等式生成手段１２０のプログラムを更新するようにしてもよい。この処理を行う署名生成装置１００は、図２０における送受信手段１９１０を、記録媒体とのデータの読み書きを操作するようなドライバの機能を持たせたものとすることにより実現することができる。すなわち、上述のような署名生成装置１００は、図２０において、送受信手段１９１０を記録媒体ドライバとし、更新サーバー１９０１を記録メディアとし、ダウンロード要求を媒体からの読み込み要求と置き換えることにより実現できるため、詳細な説明は省略する。【０１９７】
また、実施の形態４では、署名鍵生成恒等式生成手段１２０のプログラムを更新するとしていたが、更新する対象を分割鍵格納手段に記憶されている分割鍵１１１としてもよい。この場合は、分割鍵１１１のみの更新だけでなく、分割鍵１１１と署名鍵生成式Ｆ２１との関連情報が分かる分割鍵識別情報テーブル２００と分割鍵情報テーブル４００も同時に更新するようにする。また、更新する対象を結合分割鍵生成手段のプログラムとしてもよい。【０１９８】
このようにすることで、生成される分割鍵の個数や結合分割鍵の個数を、更新サーバが調整することが可能となり、セキュリティ強度を柔軟に設定することが可能となる。
＜なお書き＞
なお、本発明を上記実施の形態に基づいて説明してきたが、本発明は、上記の実施の形態に限定されないのはもちろんである。以下のような場合も本発明に含まれる。【０１９９】
（１）上記の装置は、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭ、ハードディスクユニット、ディスプレイユニット、キーボード、マウスなどから構成されるコンピュータシステムである。前記ＲＡＭまたはハードディスクユニットには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムにしたがって動作することにより、上記装置は、その機能を達成する。ここでコンピュータプログラムは、所定の機能を達成するために、コンピュータに対する指令を示す命令コードが複数個組み合わされて構成されたものである。【０２００】
（２）上記の各装置を構成する構成要素の一部又は全部は、１個のシステムＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ：大規模集積回路）から構成されているとしてもよい。システムＬＳＩは、複数の構成部を１個のチップ上に集積して製造された超多機能ＬＳＩであり、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭなどを含んで構成されるコンピュータシステムである。前記ＲＡＭには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、システムＬＳＩは、その機能を達成する。これらは個別に１チップ化されても良いし、一部又は全てを含むように１チップ化されても良い。【０２０１】
また、ここでは、システムＬＳＩとしたが、集積度の違いにより、ＩＣ、システムＬＳＩ、スーパーＬＳＩ、ウルトラＬＳＩと呼称されることもある。
また、集積回路化の手法はＬＳＩに限るものではなく、専用回路又は汎用プロセサで実現してもよい。ＬＳＩ製造後に、プログラムすることが可能なＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）や、ＬＳＩ内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサーを利用しても良い。【０２０２】
さらには、半導体技術の進歩又は派生する別技術によりＬＳＩに置き換わる集積回路化の技術が登場すれば、当然、その技術を用いて機能ブロックの集積化を行ってもよい。バイオ技術の適用等が可能性としてありえる。
（３）  本実施の形態１では、分割鍵識別情報テーブル２００や分割鍵情報テーブル４００は、分割鍵生成装置２２が書き込むこととしているが、これらのテーブルを署名生成装置１００内部で生成してもよいことは言うまでもない。【０２０３】
なお、不正解析により分割鍵情報テーブル４００の内容から署名鍵生成式Ｆ２１が特定される恐れがあるため、より安全な実装方法として、分割鍵情報テーブル４００は、暗号化された状態で保持され、署名生成時にのみ復号するようにしてもよい。これにより、静的解析による署名鍵生成式Ｆ２１の特定が困難となるため、安全性が向上する。また、署名鍵生成式Ｆ２１が特定されなければ、署名鍵ｄの特定も困難となる。【０２０４】
（４）実施の形態では、先ず署名鍵生成恒等式を生成し、次いで前記署名生成絵恒等式に合わせた結合分割鍵を生成する場合について説明しているが、これに限らず、署名鍵生成恒等式と結合分割鍵とが生成できる手順に従えばよい。
例えば、先ず、ランダムに結合分割鍵を生成しておき、次いでその結合分割鍵に相当する部分が含まれる署名生成恒等式を生成することとしてもよい。【０２０５】
（５）上記の装置を構成する構成要素の一部または全部は、装置に脱着可能なＩＣカードまたは単体のモジュールから構成されているとしてもよい。前記ＩＣカードまたは前記モジュールは、マイクロプロセッサ、ＲＯＭ、ＲＡＭなどから構成されるコンピュータシステムである。前記ＩＣカードまたは前記モジュールは、上記の超多機能ＬＳＩを含むとしてもよい。マイクロプロセッサが、コンピュータプログラムにしたがって動作することにより、前記ＩＣカードまたは前記モジュールは、その機能を達成する。このＩＣカードまたはこのモジュールは、耐タンパ性を有するとしてもよい。【０２０６】
（６）本発明は、上記に示す方法であるとしてもよい。また、これらの方法をコンピュータにより実現するコンピュータプログラムであるとしてもよいし、前記コンピュータプログラムからなるデジタル信号であるとしてもよい。
また、本発明は、前記コンピュータプログラムまたは前記デジタル信号をコンピュータ読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＢＤ（Ｂｌｕ−ｒａｙ  Ｄｉｓｃ）、半導体メモリなどに記録したものとしてもよい。また、これらの記録媒体に記録されている前記デジタル信号であるとしてもよい。【０２０７】
また、本発明は、前記コンピュータプログラムまたは前記デジタル信号を、電気通信回線、無線または有線通信回線、インターネットを代表とするネットワーク、データ放送等を経由して伝送するものとしてもよい。
また、本発明は、マイクロプロセッサとメモリを備えたコンピュータシステムであって、前記メモリは、上記コンピュータプログラムを記憶しており、前記マイクロプロセッサは、前記コンピュータプログラムにしたがって動作するとしてもよい。【０２０８】
また、前記プログラムまたは前記デジタル信号を前記記録媒体に記録して移送することにより、または前記プログラムまたは前記デジタル信号を前記ネットワーク等を経由して移送することにより、独立した他のコンピュータシステムにより実施するとしてもよい。
（７）上記実施の形態及び上記変形例をそれぞれ組み合わせるとしてもよい。
（８）明細書中での用語「交換法則」、「分配法則」、「結合法則」、「逆ポーランド記法」に関する記述は、公知の用語を念のために述べているに過ぎず、これらの用語に新たな定義を与えるものではない。
【産業上の利用可能性】
【０２０９】
本発明にかかるセキュア処理装置および方法は、分割された秘密情報のみの演算結果から導出することでプログラムの実行中に秘密情報を現すことなく、セキュアな処理を実行することができる効果を有する。また、秘密情報を利用するセキュア処理実行の度に、毎回異なる分割秘密情報を動的に生成し、セキュア処理の実行フローを動的に変更させることで、不正解析者の動的解析を困難にするという効果とを有する。このことから、不正解析者に漏洩すると不利益を招くような秘密情報を用いた処理を行うソフトウェア等の分野において有用である。
【図１】
2007052491.tif 000003
【図２】
2007052491.tif 000004
【図３】
2007052491.tif 000005
【図４】
2007052491.tif 000006
【図５】
2007052491.tif 000007
【図６】
2007052491.tif 000008
【図７】
2007052491.tif 000009
【図８】
2007052491.tif 000010
【図９】
2007052491.tif 000011
【図１０】
2007052491.tif 000012
【図１１】
2007052491.tif 000013
【図１２】
2007052491.tif 000014
【図１３】
2007052491.tif 000015
【図１４】
2007052491.tif 000016
【図１５】
2007052491.tif 000017
【図１６】
2007052491.tif 000018
【図１７】
2007052491.tif 000019
【図１８】
2007052491.tif 000020
【図１９】
2007052491.tif 000021
【図２０】
2007052491.tif 000022
【手続補正書】
【提出日】平成19年3月19日(2007.3.19)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
メッセージに対して秘密情報を用いたセキュア演算を施した場合と同一の演算結果を得るセキュア処理装置であって、
秘密情報を少なくとも２つ以上に予め分割した分割秘密情報と、前記分割秘密情報が引数として入力され前記分割秘密情報から前記秘密情報を算出する第１の秘密情報生成式と、前記分割秘密情報を用いたセキュア演算の手順を示す第１のセキュア演算手順とを記憶している記憶手段と、
少なくとも２つの前記分割秘密情報同士を演算した結合秘密情報を生成する結合秘密情報生成手段と、
前記結合秘密情報が引数として入力され、前記第１の秘密情報生成式と演算上等価な第２の秘密情報生成式を生成する第１生成手段と、
前記第２の秘密情報生成式に含まれる演算子に基づいて、引数として前記結合秘密情報が入力され前記第１のセキュア演算手順と等価な演算の手順を示す第２のセキュア演算手順を生成する第２生成手段と、
前記メッセージに対し前記第２のセキュア演算手順に従ったセキュア演算を施す実行手段と
を備えることを特徴とするセキュア処理装置。
【請求項２】
前記第１の秘密情報生成式は、１以上の演算を含み、
前記第１生成手段は、前記第１の秘密情報生成式に含まれる演算から、交換法則、結合法則、分配法則のいずれかを前記演算との間で満たす代替演算のある演算をランダムに選択し、選択した演算を前記代替演算に置き換えることにより第２の秘密情報生成式を生成する
ことを特徴とする請求項１に記載のセキュア処理装置。
【請求項３】
前記第１の秘密情報生成式は１以上の演算を含み、各演算は、複数の被演算子と、被演算子同士の計算の内容を示す演算子とを含み、
前記記憶手段は、前記第１の秘密情報生成式に係る前記被演算子と前記演算子との関係を示す属性情報を記憶しており、
前記第１生成手段は、前記属性情報を用いて前記第２の秘密情報生成式を生成する
ことを特徴とする請求項２に記載のセキュア処理装置。
【請求項４】
前記第１の秘密情報生成式において、前記被演算子には引数の値が入力され、前記引数それぞれの値は、前記分割秘密情報のいずれかが重複無く対応し、
前記属性情報は、結合可能な複数の被演算子と対応す演算子を示し、
前記第１生成手段は、前記属性情報に基づき、前記第１の秘密情報生成式における前記複数の被演算子を前記演算子で結合し、
前記第２生成手段は、前記結合秘密情報を、前記結合された各被演算子に対応する分割秘密情報を、前記演算子を用いて結合することにより生成する
ことを特徴とする請求項３に記載のセキュア処理装置。
【請求項５】
前記第２の秘密情報生成式は、１以上の演算を含み、各演算は、複数の被演算子と、被演算子同士の計算の内容を示す演算子とを含み、
前記記憶手段は、前記第２の秘密情報生成式に係る前記被演算子と前記演算子との関係を示す属性情報を記憶しており、
前記第２生成手段は、前記属性情報を用いて前記第２のセキュア演算手順を生成する
ことを特徴とする請求項２に記載のセキュア処理装置。
【請求項６】
前記第１生成手段は、更に、
乱数情報を生成し、前記乱数情報を含んだ前記第２の秘密情報生成式を生成し、
前記第２生成手段は、
前記第２の秘密情報生成式に基づき、前記結合秘密情報と前記乱数情報とを用いて前記第１のセキュア演算手順と等価な演算の手順を示す第２のセキュア演算手順を生成し、
前記実行手段は、
前記メッセージに対し前記結合秘密情報と、前記乱数情報とを用いて前記第２のセキュア演算手順に従ったセキュア演算を施す
ことを特徴とする請求項１に記載のセキュア処理装置。
【請求項７】
前記第１生成手段は、更に、
前記秘密情報を用いた、演算処理の結果に影響を与えない冗長情報を生成し、
当該冗長情報を用いて、前記第２の秘密情報生成式を生成する
ことを特徴とする請求項１に記載のセキュア処理装置。
【請求項８】
前記記憶手段は、前記分割秘密情報と共に前記実行手段により用いられないダミー情報を記憶している
ことを特徴とする請求項１に記載のセキュア処理装置。
【請求項９】
前記秘密情報は、デジタル署名を生成するための署名鍵であり、
前記セキュア演算は、前記メッセージにデジタル署名を施す署名生成演算である
ことを特徴とする請求項１に記載のセキュア処理装置。
【請求項１０】
前記署名生成処理は、ＲＳＡ（Ｒｉｖｅｓｔ  Ｓｈａｍｉｒ  Ａｄｌｅｍａｎ）署名生成処理である
ことを特徴とする請求項９記載のセキュア処理装置。
【請求項１１】
前記署名生成処理は、楕円曲線デジタル署名方式による署名処理である
ことを特徴とする請求項９記載のセキュア処理装置。
【請求項１２】
前記セキュア処理装置は、更に、
乱数情報を生成する乱数情報生成手段を備え、
前記実行手段は、前記楕円曲線デジタル署名方式における定義体ＧＦ（ｐ）上の楕円曲線の位数ｑであるベースポイントＰの乱数値ｋ倍点を計算する処理と、定義体ＧＦ（ｑ）上でのｋの逆数の値を用いた処理とを、前記乱数ｋを直接利用することなく、少なくとも２つの前記乱数情報を用いて行う
ことを特徴とする請求項１１記載のセキュア処理装置。
【請求項１３】
前記秘密情報は前記公開鍵暗号の前記秘密鍵であり、
前記実行手段は、前記セキュア演算として、公開鍵と秘密鍵を利用した公開鍵暗号系の処理を行う
ことを特徴とする請求項１に記載のセキュア処理装置。
【請求項１４】
前記公開鍵暗号はＲＳＡ暗号である
ことを特徴とする請求項１３記載のセキュア処理装置。
【請求項１５】
前記公開鍵暗号は楕円曲線暗号である
ことを特徴とする請求項１３記載のセキュア処理装置。
【請求項１６】
前記セキュア処理装置は、更に、
外部から、前記第１生成手段の更新用データを取得する取得手段と、
前記更新用データを用いて、前記第１生成手段を更新する更新手段と
を含むことを特徴とする請求項１に記載のセキュア処理装置。
【請求項１７】
前記セキュア処理装置は、更に、
外部から、更新用の分割秘密情報を取得する取得手段と、
前記記憶手段に記憶されている分割秘密情報を、前記取得手段が取得した更新用の分割秘密情報に更新する更新手段と
を含むことを特徴とする請求項１に記載のセキュア処理装置。
【請求項１８】
メッセージに対して秘密情報を用いたセキュア演算を施した場合と同一の演算結果を得るセキュア処理装置において用いられるセキュア処理方法であって、
前記セキュア処理装置は、
秘密情報を少なくとも２つ以上に予め分割した分割秘密情報と、前記分割秘密情報が引数として入力され前記分割秘密情報から前記秘密情報を算出する第１の秘密情報生成式と、前記分割秘密情報を用いたセキュア演算の手順を示す第１のセキュア演算手順とを記憶している記憶手段を備えており、
前記セキュア処理方法は、
少なくとも２つの前記分割秘密情報同士を演算した結合秘密情報を生成する結合秘密情報生成ステップと、
前記結合秘密情報が引数として入力され、前記第１の秘密情報生成式と同一の結果を出力する第２の秘密情報生成式を生成する第１生成ステップと、
前記第２の秘密情報生成式に含まれる演算子に基づいて、前記結合秘密情報が引数として入力され前記第１のセキュア演算手順と等価な演算の手順を示す第２のセキュア演算手順を生成する第２生成ステップと、
前記メッセージに対し前記第２のセキュア演算手順に従ったセキュア演算を施す実行ステップと
を含むことを特徴とするセキュア処理方法。
【請求項１９】
メッセージに対して秘密情報を用いたセキュア演算を施した場合と同一の演算結果を得るセキュア処理装置において用いられるコンピュータプログラムであって、
前記セキュア処理装置は、
秘密情報を少なくとも２つ以上に予め分割した分割秘密情報と、前記分割秘密情報が引数として入力され前記分割秘密情報から前記秘密情報を算出する第１の秘密情報生成式と、前記分割秘密情報を用いたセキュア演算の手順を示す第１のセキュア演算手順とを記憶している記憶手段を備えており、
前記コンピュータプログラムは、
少なくとも２つの前記分割秘密情報同士を演算した結合秘密情報を生成する結合秘密情報生成ステップと、
前記結合秘密情報が引数として入力され、前記第１の秘密情報生成式と演算上等価な第２の秘密情報生成式を生成する第１生成ステップと、
前記第２の秘密情報生成式に含まれる演算子に基づいて、前記結合秘密情報が引数として入力され前記第１のセキュア演算手順と等価な演算の手順を示す第２のセキュア演算手順を生成する第２生成ステップと、
前記メッセージに対し前記第２のセキュア演算手順に従ったセキュア演算を施す実行ステップと
を含むことを特徴とするコンピュータプログラム。
【請求項２０】
コンピュータ読み取り可能な記録媒体であって、請求項１９に記載のコンピュータプログラムを記録していることを特徴とする記録媒体。
【請求項２１】
メッセージに対して秘密情報を用いたセキュア演算を施した場合と同一の演算結果を得るセキュア処理装置において用いられる集積回路であって、
前記セキュア処理装置は、
秘密情報を少なくとも２つ以上に予め分割した分割秘密情報と、前記分割秘密情報が引数として入力され前記分割秘密情報から前記秘密情報を算出する第１の秘密情報生成式と、前記分割秘密情報を用いたセキュア演算の手順を示す第１のセキュア演算手順とを記憶している記憶手段を備えており、
前記集積回路は、
少なくとも２つの前記分割秘密情報同士を演算した結合秘密情報を生成する結合秘密情報生成手段と、
前記結合秘密情報が引数として入力され、前記第１の秘密情報生成式と演算上等価な第２の秘密情報生成式を生成する第１生成手段と、
前記第２の秘密情報生成式に含まれる演算子に基づいて、前記結合秘密情報が引数として入力され前記第１のセキュア演算手順と等価な演算の手順を示す第２のセキュア演算手順を生成する第２生成手段と、
前記メッセージに対し前記第２のセキュア演算手順に従ったセキュア演算を施す実行手段と
を備えることを特徴とする集積回路。
【請求項２２】
秘密情報を用いた演算を行うセキュア処理装置に、前記秘密情報を難読化して埋め込む難読化秘密情報埋め込み方法であって、
前記秘密情報を解析が困難な状態に変換する難読化装置を用いて、前記秘密情報を難読化する秘密情報難読化ステップと、
難読化情報書き込み装置を用いて、難読化された秘密情報を前記セキュア処理装置に埋め込む埋込ステップと
を含むことを特徴とする難読化秘密情報埋め込み方法。
【請求項２３】
前記難読化装置は、前記秘密情報の難読化の方法を決定するためのパラメータを入力として受け付ける入力手段を備え、
前記秘密情報難読化ステップは、
前記入力手段が前記パラメータを受け付ける受付ステップと、
前記パラメータに基いて決定される難読化方法で、前記秘密情報を難読化する難読化ステップと
を含むことを特徴とする請求項２２に記載の難読化秘密情報埋め込み方法。
【請求項２４】
前記パラメータは、前記秘密情報の分割個数であり、
前記難読化ステップは、前記分割個数に基づいて、前記秘密情報を少なくとも２つの分割秘密情報に分割する分割ステップを含む
ことを特徴とする請求項２３に記載の難読化秘密情報埋め込み方法。
【請求項２５】
前記難読化ステップは、更に、
前記分割個数に基づき、少なくとも前記分割個数の項を含む第１の秘密情報生成式を生成する式生成ステップを含み、
前記分割ステップは、前記第１の秘密情報生成式から前記秘密情報が算出されるように、前記秘密情報を分割する
ことを特徴とする請求項２４に記載の難読化秘密情報埋め込み方法。
【請求項２６】
前記パラメータは、第１の秘密情報生成式であり、
前記難読化ステップは、
前記第１の秘密情報生成式から前記秘密情報が算出されるように、前記秘密情報を少なくとも２つの分割秘密情報に分割するステップ
を含むことを特徴とする請求項２３に記載の難読化秘密情報埋め込み方法。
【請求項２７】
前記秘密情報は、鍵発行機関から発行される秘密鍵であり、
前記難読化秘密情報埋め込み方法は、
前記鍵発行機関が前記秘密鍵を鍵発行機関の秘密鍵で暗号化する暗号化ステップと、
前記難読化装置が、暗号化された前記鍵を公開鍵で復号および検証する検証ステップとをさらに有し、
前記秘密情報難読化ステップは、検証された前記秘密鍵を難読化し、
前記埋込ステップは、
前記難読化装置により難読化された前記難読化情報をバイナリデータに変換するバイナリ変換ステップと、
前記秘密情報を用いた演算結果と同一の結果を前記難読化秘密情報を用いて演算する機能を有するセキュア処理装置に、前記バイナリデータを埋め込むバイナリ埋込ステップと
を含むことを特徴とする請求項２２に記載の難読化秘密情報埋め込み方法。
【手続補正書】
【提出日】平成20年4月1日(2008.4.1)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
メッセージに対して秘密情報を用いたセキュア演算を施した場合と同一の演算結果を得るセキュア処理装置であって、
秘密情報を少なくとも２つ以上に予め分割した分割秘密情報と、前記分割秘密情報が引数として入力され前記分割秘密情報から前記秘密情報を算出する第１の秘密情報生成式と、前記分割秘密情報を用いたセキュア演算の手順を示す第１のセキュア演算手順とを記憶している記憶手段と、
少なくとも２つの前記分割秘密情報同士を演算した結合秘密情報を生成する結合秘密情報生成手段と、
前記結合秘密情報が引数として入力され、前記第１の秘密情報生成式と演算上等価な第２の秘密情報生成式を生成する第１生成手段と、
前記第２の秘密情報生成式に含まれる演算子に基づいて、引数として前記結合秘密情報が入力され前記第１のセキュア演算手順と等価な演算の手順を示す第２のセキュア演算手順を生成する第２生成手段と、
前記メッセージに対し前記第２のセキュア演算手順に従ったセキュア演算を施す実行手段と
を備えることを特徴とするセキュア処理装置。
【請求項２】
前記第１の秘密情報生成式は、１以上の演算を含み、
前記第１生成手段は、前記第１の秘密情報生成式に含まれる演算から、交換法則、結合法則、分配法則のいずれかを前記演算との間で満たす代替演算のある演算をランダムに選択し、選択した演算を前記代替演算に置き換えることにより第２の秘密情報生成式を生成する
ことを特徴とする請求項１に記載のセキュア処理装置。
【請求項３】
前記第１の秘密情報生成式は１以上の演算を含み、各演算は、複数の被演算子と、被演算子同士の計算の内容を示す演算子とを含み、
前記記憶手段は、前記第１の秘密情報生成式に係る前記被演算子と前記演算子との関係を示す属性情報を記憶しており、
前記第１生成手段は、前記属性情報を用いて前記第２の秘密情報生成式を生成する
ことを特徴とする請求項２に記載のセキュア処理装置。
【請求項４】
前記第１の秘密情報生成式において、前記被演算子には引数の値が入力され、前記引数それぞれの値は、前記分割秘密情報のいずれかが重複無く対応し、
前記属性情報は、結合可能な複数の被演算子と対応する演算子を示し、
前記第１生成手段は、前記属性情報に基づき、前記第１の秘密情報生成式における前記複数の被演算子を前記演算子で結合し、
前記第２生成手段は、前記結合秘密情報を、前記結合された各被演算子に対応する分割秘密情報を、前記演算子を用いて結合することにより生成する
ことを特徴とする請求項３に記載のセキュア処理装置。
【請求項５】
前記第２の秘密情報生成式は、１以上の演算を含み、各演算は、複数の被演算子と、被演算子同士の計算の内容を示す演算子とを含み、
前記記憶手段は、前記第２の秘密情報生成式に係る前記被演算子と前記演算子との関係を示す属性情報を記憶しており、
前記第２生成手段は、前記属性情報を用いて前記第２のセキュア演算手順を生成する
ことを特徴とする請求項２に記載のセキュア処理装置。
【請求項６】
前記第１生成手段は、更に、
乱数情報を生成し、前記乱数情報を含んだ前記第２の秘密情報生成式を生成し、
前記第２生成手段は、
前記第２の秘密情報生成式に基づき、前記結合秘密情報と前記乱数情報とを用いて前記第１のセキュア演算手順と等価な演算の手順を示す第２のセキュア演算手順を生成し、
前記実行手段は、
前記メッセージに対し前記結合秘密情報と、前記乱数情報とを用いて前記第２のセキュア演算手順に従ったセキュア演算を施す
ことを特徴とする請求項１に記載のセキュア処理装置。
【請求項７】
前記第１生成手段は、更に、
前記秘密情報を用いた、演算処理の結果に影響を与えない冗長情報を生成し、
当該冗長情報を用いて、前記第２の秘密情報生成式を生成する
ことを特徴とする請求項１に記載のセキュア処理装置。
【請求項８】
前記記憶手段は、前記分割秘密情報と共に前記実行手段により用いられないダミー情報を記憶している
ことを特徴とする請求項１に記載のセキュア処理装置。
【請求項９】
前記秘密情報は、デジタル署名を生成するための署名鍵であり、
前記セキュア演算は、前記メッセージにデジタル署名を施す署名生成演算である
ことを特徴とする請求項１に記載のセキュア処理装置。
【請求項１０】
前記署名生成処理は、ＲＳＡ（Ｒｉｖｅｓｔ  Ｓｈａｍｉｒ  Ａｄｌｅｍａｎ）署名生成処理である
ことを特徴とする請求項９記載のセキュア処理装置。
【請求項１１】
前記署名生成処理は、楕円曲線デジタル署名方式による署名処理である
ことを特徴とする請求項９記載のセキュア処理装置。
【請求項１２】
前記セキュア処理装置は、更に、
乱数情報を生成する乱数情報生成手段を備え、
前記実行手段は、前記楕円曲線デジタル署名方式における定義体ＧＦ（ｐ）上の楕円曲線の位数ｑであるベースポイントＰの乱数値ｋ倍点を計算する処理と、定義体ＧＦ（ｑ）上でのｋの逆数の値を用いた処理とを、前記乱数ｋを直接利用することなく、少なくとも２つの前記乱数情報を用いて行う
ことを特徴とする請求項１１記載のセキュア処理装置。
【請求項１３】
前記秘密情報は前記公開鍵暗号の前記秘密鍵であり、
前記実行手段は、前記セキュア演算として、公開鍵と秘密鍵を利用した公開鍵暗号系の処理を行う
ことを特徴とする請求項１に記載のセキュア処理装置。
【請求項１４】
前記公開鍵暗号はＲＳＡ暗号である
ことを特徴とする請求項１３記載のセキュア処理装置。
【請求項１５】
前記公開鍵暗号は楕円曲線暗号である
ことを特徴とする請求項１３記載のセキュア処理装置。
【請求項１６】
前記セキュア処理装置は、更に、
外部から、前記第１生成手段の更新用データを取得する取得手段と、
前記更新用データを用いて、前記第１生成手段を更新する更新手段と
を含むことを特徴とする請求項１に記載のセキュア処理装置。
【請求項１７】
前記セキュア処理装置は、更に、
外部から、更新用の分割秘密情報を取得する取得手段と、
前記記憶手段に記憶されている分割秘密情報を、前記取得手段が取得した更新用の分割秘密情報に更新する更新手段と
を含むことを特徴とする請求項１に記載のセキュア処理装置。
【請求項１８】
メッセージに対して秘密情報を用いたセキュア演算を施した場合と同一の演算結果を得るセキュア処理装置において用いられるセキュア処理方法であって、
前記セキュア処理装置は、
秘密情報を少なくとも２つ以上に予め分割した分割秘密情報と、前記分割秘密情報が引数として入力され前記分割秘密情報から前記秘密情報を算出する第１の秘密情報生成式と、前記分割秘密情報を用いたセキュア演算の手順を示す第１のセキュア演算手順とを記憶している記憶手段を備えており、
前記セキュア処理方法は、
少なくとも２つの前記分割秘密情報同士を演算した結合秘密情報を生成する結合秘密情報生成ステップと、
前記結合秘密情報が引数として入力され、前記第１の秘密情報生成式と同一の結果を出力する第２の秘密情報生成式を生成する第１生成ステップと、
前記第２の秘密情報生成式に含まれる演算子に基づいて、前記結合秘密情報が引数として入力され前記第１のセキュア演算手順と等価な演算の手順を示す第２のセキュア演算手順を生成する第２生成ステップと、
前記メッセージに対し前記第２のセキュア演算手順に従ったセキュア演算を施す実行ステップと
を含むことを特徴とするセキュア処理方法。
【請求項１９】
メッセージに対して秘密情報を用いたセキュア演算を施した場合と同一の演算結果を得るセキュア処理装置において用いられるコンピュータプログラムであって、
前記セキュア処理装置は、
秘密情報を少なくとも２つ以上に予め分割した分割秘密情報と、前記分割秘密情報が引数として入力され前記分割秘密情報から前記秘密情報を算出する第１の秘密情報生成式と、前記分割秘密情報を用いたセキュア演算の手順を示す第１のセキュア演算手順とを記憶している記憶手段を備えており、
前記コンピュータプログラムは、
少なくとも２つの前記分割秘密情報同士を演算した結合秘密情報を生成する結合秘密情報生成ステップと、
前記結合秘密情報が引数として入力され、前記第１の秘密情報生成式と演算上等価な第２の秘密情報生成式を生成する第１生成ステップと、
前記第２の秘密情報生成式に含まれる演算子に基づいて、前記結合秘密情報が引数として入力され前記第１のセキュア演算手順と等価な演算の手順を示す第２のセキュア演算手順を生成する第２生成ステップと、
前記メッセージに対し前記第２のセキュア演算手順に従ったセキュア演算を施す実行ステップと
を含むことを特徴とするコンピュータプログラム。
【請求項２０】
コンピュータ読み取り可能な記録媒体であって、請求項１９に記載のコンピュータプログラムを記録していることを特徴とする記録媒体。
【請求項２１】
メッセージに対して秘密情報を用いたセキュア演算を施した場合と同一の演算結果を得るセキュア処理装置において用いられる集積回路であって、
前記セキュア処理装置は、
秘密情報を少なくとも２つ以上に予め分割した分割秘密情報と、前記分割秘密情報が引数として入力され前記分割秘密情報から前記秘密情報を算出する第１の秘密情報生成式と、前記分割秘密情報を用いたセキュア演算の手順を示す第１のセキュア演算手順とを記憶している記憶手段を備えており、
前記集積回路は、
少なくとも２つの前記分割秘密情報同士を演算した結合秘密情報を生成する結合秘密情報生成手段と、
前記結合秘密情報が引数として入力され、前記第１の秘密情報生成式と演算上等価な第２の秘密情報生成式を生成する第１生成手段と、
前記第２の秘密情報生成式に含まれる演算子に基づいて、前記結合秘密情報が引数として入力され前記第１のセキュア演算手順と等価な演算の手順を示す第２のセキュア演算手順を生成する第２生成手段と、
前記メッセージに対し前記第２のセキュア演算手順に従ったセキュア演算を施す実行手段と
を備えることを特徴とする集積回路。
【請求項２２】
秘密情報を用いた演算を行うセキュア処理装置に、前記秘密情報を難読化して埋め込む難読化秘密情報埋め込み方法であって、
前記秘密情報を解析が困難な状態に変換する難読化装置を用いて、前記秘密情報を難読化する秘密情報難読化ステップと、
難読化情報書き込み装置を用いて、難読化された秘密情報を前記セキュア処理装置に埋め込む埋込ステップと
を含むことを特徴とする難読化秘密情報埋め込み方法。
【請求項２３】
前記難読化装置は、前記秘密情報の難読化の方法を決定するためのパラメータを入力として受け付ける入力手段を備え、
前記秘密情報難読化ステップは、
前記入力手段が前記パラメータを受け付ける受付ステップと、
前記パラメータに基いて決定される難読化方法で、前記秘密情報を難読化する難読化ステップと
を含むことを特徴とする請求項２２に記載の難読化秘密情報埋め込み方法。
【請求項２４】
前記パラメータは、前記秘密情報の分割個数であり、
前記難読化ステップは、前記分割個数に基づいて、前記秘密情報を少なくとも２つの分割秘密情報に分割する分割ステップを含む
ことを特徴とする請求項２３に記載の難読化秘密情報埋め込み方法。
【請求項２５】
前記難読化ステップは、更に、
前記分割個数に基づき、少なくとも前記分割個数の項を含む第１の秘密情報生成式を生成する式生成ステップを含み、
前記分割ステップは、前記第１の秘密情報生成式から前記秘密情報が算出されるように、前記秘密情報を分割する
ことを特徴とする請求項２４に記載の難読化秘密情報埋め込み方法。
【請求項２６】
前記パラメータは、第１の秘密情報生成式であり、
前記難読化ステップは、
前記第１の秘密情報生成式から前記秘密情報が算出されるように、前記秘密情報を少なくとも２つの分割秘密情報に分割するステップ
を含むことを特徴とする請求項２３に記載の難読化秘密情報埋め込み方法。
【請求項２７】
前記秘密情報は、鍵発行機関から発行される秘密鍵であり、
前記難読化秘密情報埋め込み方法は、
前記鍵発行機関が前記秘密鍵を鍵発行機関の秘密鍵で暗号化する暗号化ステップと、
前記難読化装置が、暗号化された前記鍵を公開鍵で復号および検証する検証ステップとをさらに有し、
前記秘密情報難読化ステップは、検証された前記秘密鍵を難読化し、
前記埋込ステップは、
前記難読化装置により難読化された前記難読化情報をバイナリデータに変換するバイナリ変換ステップと、
前記秘密情報を用いた演算結果と同一の結果を前記難読化秘密情報を用いて演算する機能を有するセキュア処理装置に、前記バイナリデータを埋め込むバイナリ埋込ステップと
を含むことを特徴とする請求項２２に記載の難読化秘密情報埋め込み方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムの不正な改ざんや解析を防止する技術等に関するものである。
【背景技術】
【０００２】
従来、データの改ざん検出等の目的で、電子署名（以下、署名とも呼ぶ）が広く用いられている。その署名生成方法の一つに、ＲＳＡ（Ｒｉｖｅｓｔ  Ｓｈａｍｉｒ  Ａｄｌｅｍａｎ）署名生成法がある。ＲＳＡ署名生成法では、署名対象メッセージＭに対して署名鍵ｄを使って、Ｓ＝Ｍ＾ｄ  ｍｏｄ  ｎという演算を行うことにより署名Ｓを生成する。
【０００３】
上述した署名鍵ｄは保護しなくてはならない情報であり、以下、このような情報のことを秘密情報と呼ぶ。また、本明細書において、記号＾は、ベキ乗演算を表し、記号＊は、乗算を表すものとする。
【０００４】
ここで、上述のＲＳＡ署名生成の処理実行中には、コンピュータ内のＲＡＭやＣＰＵのレジスタなどのメモリ上に署名鍵ｄの値が出現してしまうため、これらのメモリを解析することにより署名鍵ｄが不正に取得される危険性がある。
【０００５】
このような署名鍵ｄの不正取得を防ぐための技術の１つとして、署名鍵ｄの値をメモリ上に出現させることなく署名生成を行う手法が非特許文献１に開示されている。
非特許文献１の手法では、まず、署名鍵生成式ｄ＝（ｄ１＊ｄ２）＋ｄ３を満たすようなｄ１、ｄ２、ｄ３を求める。ここで、ｄ１、ｄ２およびｄ３が上述した分割鍵であり、署名鍵から分割鍵を生成することを署名鍵の分割と呼ぶ。
【０００６】
この分割鍵（ｄ１、ｄ２、ｄ３）と署名鍵生成式に基づき
Ｓ１＝Ｍ＾ｄ１  ｍｏｄ  ｎ
Ｓ２＝Ｓ１＾ｄ２  ｍｏｄ  ｎ
Ｓ＝Ｓ２＊Ｍ＾ｄ３  ｍｏｄ  ｎ
の順に演算を行う。これにより、署名鍵ｄを使うことなく、ＲＳＡ署名生成式Ｓ＝Ｍ＾ｄ  ｍｏｄ  ｎと同じ署名Ｓが得られる。また、署名生成処理中には、メモリ上に、署名鍵ｄではなく、分割鍵（ｄ１、ｄ２、ｄ３）が現れることとなるので、署名鍵ｄを保護することが出来る。
【非特許文献１】「署名生成ソフトウェアのランタイムデータ探索による耐タンパー性評価」  横浜国立大学  本田洋之  松本  勉  ＳＣＩＳ２００５
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、前述した手法では署名鍵生成式が常に固定であるため、署名生成部を静的解析することで署名鍵生成式を特定することができる。
さらに、毎回同一の分割鍵を利用するため、署名対象データを変えながら複数回の署名生成時のランタイムデータを収集し、収集した複数のランタイムデータ同士の差分を見て不変なデータを抽出するという動的解析を行うことにより、分割鍵を特定することができる。
【０００８】
そして、上記の方法により特定した分割鍵と署名鍵生成式とを用いると署名鍵の特定が可能であるという課題があった。
上記課題に鑑み本発明は、不正解析者により静的解析や動的解析が成された場合であっても、秘密情報を秘匿することが出来るセキュア処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記課題を解決するために、本発明は、メッセージに対して秘密情報を用いたセキュア演算を施した場合と同一の演算結果を得るセキュア処理装置であって、秘密情報を少なくとも２つに分割した分割秘密情報が引数として入力され、当該分割秘密情報から前記秘密情報を算出する第１の秘密情報生成式と、前記秘密情報を用いたセキュア演算の手順を示す第１のセキュア演算手順とを記憶している記憶手段と、少なくとも２つの前記分割秘密情報を演算した結果である結合秘密情報が引数として入力され、前記第１の秘密情報生成式と演算上等価な第２の秘密情報生成式を生成する第１生成手段と、前記第２の秘密情報生成式に含まれる演算子に基づいて、引数として前記結合秘密情報が入力され前記第１のセキュア演算手順と等価な演算の手順を示す第２のセキュア演算手順を生成する第２生成手段と、前記メッセージに対し前記第２のセキュア演算手順に従ったセキュア演算を施す実行手段とを備える。
【発明の効果】
【００１０】
本発明のセキュア処理装置は、上述の構成を備えることにより、セキュア処理の実行毎に、前記結合秘密情報を生成し、第２のセキュア演算手順を生成し、第２のセキュア演算手順を実行することにより、第１のセキュア演算と同じ結果を得るので、前記秘密情報の代わりにセキュア演算毎に異なる値となる結合秘密情報が演算用のメモリ上に現れ、第２のセキュア演算手順がセキュア処理の実行毎に異なるものとなるため、静的解析及び動的解析による前記秘密情報の特定が困難となる。よって、前記秘密情報を秘匿することが出来る。
【００１１】
また、前記第１の秘密情報生成式は、１以上の演算を含み、前記第２生成手段は、前記第１の秘密情報生成式に含まれる演算から、交換法則、結合法則、分配法則のいずれかを前記演算との間で満たす代替演算のある演算をランダムに選択し、選択した演算を前記代替演算に置き換えることにより第２の秘密情報生成式を生成することとしてもよい。
【００１２】
また、前記第１の秘密情報生成式は１以上の演算を含み、各演算は、複数の被演算子と、被演算子同士の計算の内容を示す演算子とを含み、前記記憶手段は、前記第１の秘密情報生成式に係る前記被演算子と前記演算子との関係を示す属性情報を記憶しており、前記第１生成手段は、前記属性情報を用いて前記第２の秘密情報生成式を生成することとしてもよい。
【００１３】
また、前記第１の秘密情報生成式において、前記被演算子には引数の値が入力され、前記引数それぞれの値は、前記分割秘密情報のいずれかが重複無く対応し、前記属性情報は、結合可能な複数の被演算子と対応する演算子を示し、前記第１生成手段は、前記属性情報に基づき、前記第１の秘密情報生成式における前記複数の被演算子を前記演算子で結合し、前記第２生成手段は、前記結合秘密情報を、前記結合された各被演算子に対応する分割秘密情報を、前記演算子を用いて結合することにより生成することとしてもよい。
【００１４】
また、前記第２の秘密情報生成式は、１以上の演算を含み、各演算は、複数の被演算子と、被演算子同士の計算の内容を示す演算子とを含み、前記記憶手段は、前記第２の秘密情報生成式に係る前記被演算子と前記演算子との関係を示す属性情報を記憶しており、前記第２生成手段は、前記属性情報を用いて前記第２のセキュア演算手順を生成することとしてもよい。
【００１５】
この構成によれば、第１の秘密情報生成式と同じ結果を得る第２の秘密情報生成式をランダムに生成することができるので、静的解析による秘密情報の特定を困難にすることができる。
【００１６】
また、前記第１生成手段は、更に、乱数情報を生成し、前記乱数情報を含んだ前記第２の秘密情報生成式を生成し、前記第２生成手段は、前記第２の秘密情報生成式に基づき、前記結合秘密情報と前記乱数情報とを用いて前記第１のセキュア演算手順と等価な演算の手順を示す第２のセキュア演算式を生成し、前記実行手段は、前記メッセージに対し前記結合秘密情報と、前記乱数情報とを用いて前記第２のセキュア演算手順に従ったセキュア演算を施すこととしてもよい。
【００１７】
この構成によれば、乱数情報を含むことにより、前記第２の秘密情報生成式の解析が困難となり、乱数情報を用いて実行する第２のセキュア演算手順に従ったセキュア演算の静的解析を困難にすることができる。
【００１８】
また、前記第１生成手段は、更に、前記秘密情報を用いた、演算処理の結果に影響を与えない冗長情報を生成し、当該冗長情報を用いて、前記第２の秘密情報生成式を生成することとしてもよい。
【００１９】
この構成によれば、冗長情報を用いるので第２の秘密情報生成式の静的解析を困難にすることができる。
また、前記記憶手段は、前記分割秘密情報と共に前記実行手段により用いられないダミー情報を記憶していることとしてもよい。
【００２０】
この構成によれば、記憶手段に記憶されている情報に基づきセキュア処理を静的解析することを困難にすることができる。
また、前記秘密情報は、デジタル署名を生成するための署名鍵であり、前記セキュア演算は、前記メッセージにデジタル署名を施す署名生成演算であることとしてもよい。
【００２１】
この構成によれば、デジタル署名処理の実行において、静的解析による秘密情報の特定を困難にすることができる。
また、前記署名生成処理は、ＲＳＡ（Ｒｉｖｅｓｔ  Ｓｈａｍｉｒ  Ａｄｌｅｍａｎ）署名生成処理であることとしてもよい。
【００２２】
この構成によれば、ＲＳＡ署名生成処理の実行において、静的解析による秘密情報の特定を困難にすることができる。
また、前記署名生成処理は、楕円曲線デジタル署名方式による署名処理であることとしてもよい。
【００２３】
また、前記セキュア処理装置は、更に、乱数情報を生成する乱数情報生成手段を備え、前記実行手段は、前記楕円曲線デジタル署名方式における定義体ＧＦ（ｐ）上の楕円曲線の位数ｑであるベースポイントＰの乱数値ｋ倍点を計算する処理と、定義体ＧＦ（ｑ）上でのｋの逆数の値を用いた処理とを、前記乱数ｋを直接利用することなく、少なくとも２つの前記乱数情報を用いて行うこととしてもよい。
【００２４】
この構成によれば、楕円曲線デジタル署名方式による署名処理の実行において、静的解析による秘密情報の特定を困難にすることができる。
また、前記秘密情報は前記公開鍵暗号の前記秘密鍵であり、前記実行手段は、前記セキュア演算として、公開鍵と秘密鍵を利用した公開鍵暗号系の処理を行うこととしてもよい。
【００２５】
この構成によれば、公開鍵暗号によるセキュア処理の実行において、静的解析による秘密鍵の特定を困難にすることができる。
また、前記公開鍵暗号はＲＳＡ暗号であることとしてもよい。
【００２６】
この構成によれば、ＲＳＡ暗号によるセキュア処理の実行において、静的解析による秘密鍵の特定を困難にすることができる。
また、前記公開鍵暗号は楕円曲線暗号であることとしてもよい。
【００２７】
この構成によれば、楕円曲線暗号によるセキュア処理の実行において、静的解析による秘密鍵の特定を困難にすることができる。
また、前記セキュア処理装置は、更に、外部から、前記第１生成手段の更新用データを取得する取得手段と、前記更新用データを用いて、前記第１生成手段を更新する更新手段とを含むこととしてもよい。
【００２８】
この構成によれば、第１生成手段を更新することにより、セキュア処理実行時に静的解析される場合であっても、秘密情報の特定を困難にすることができる。  また、生成される分割鍵の個数や結合分割鍵の個数を、装置外部から調整することが可能となり、セキュリティ強度を柔軟に設定することが可能となる。
【００２９】
また、前記セキュア処理装置は、更に、外部から、更新用の分割秘密情報を取得する取得手段と、前記記憶手段に記憶されている分割秘密情報を、前記取得手段が取得した更新用の分割秘密情報に更新する更新手段とを含むこととしてもよい。
【００３０】
この構成によれば、分割秘密情報を更新することにより、セキュア処理実行時に静的解析される場合であっても、秘密情報の特定を困難にすることができる。
また、生成される分割鍵の個数や結合分割鍵の個数を、装置外部から調整することが可能となり、セキュリティ強度を柔軟に設定することが可能となる。
【００３１】
本発明のセキュア処理方法は、メッセージに対し秘密情報を用いたセキュア演算を施した場合と同一の演算結果を得るセキュア処理装置において用いられるセキュア処理方法であって、前記セキュア処理装置は、秘密情報を少なくとも２つに分割した分割秘密情報が引数として入力され、当該分割秘密情報から前記秘密情報を算出する第１の秘密情報生成式と、前記秘密情報を用いたセキュア演算の手順を示す第１のセキュア演算手順とを記憶している記憶手段を備えており、前記セキュア処理方法は、少なくとも２つの前記分割秘密情報を演算した結果である結合秘密情報が引数として入力され、前記第１の秘密情報生成式と同一の結果を出力する第２の秘密情報生成式を生成する第１生成ステップと、前記第２の秘密情報生成式に含まれる演算子に基づいて、前記結合秘密情報が引数として入力され前記第１のセキュア演算手順と等価な演算の手順を示す第２のセキュア演算手順を生成する第２生成ステップと、前記メッセージに対し前記第２のセキュア演算手順に従ったセキュア演算を施す実行ステップとを含む。
【００３２】
本発明のコンピュータプログラムは、メッセージに対して秘密情報を用いたセキュア演算を施した場合と同一の演算結果を得るセキュア処理装置において用いられるコンピュータプログラムであって、前記セキュア処理装置は、秘密情報を少なくとも２つに分割した分割秘密情報が引数として入力され、当該分割秘密情報から前記秘密情報を算出する第１の秘密情報生成式と、前記秘密情報を用いたセキュア演算の手順を示す第１のセキュア演算手順とを記憶している記憶手段を備えており、前記コンピュータプログラムは、少なくとも２つの前記分割秘密情報を演算した結果である結合秘密情報が引数として入力され、前記第１の秘密情報生成式と演算上等価な第２の秘密情報生成式を生成する第１生成ステップと、前記第２の秘密情報生成式に含まれる演算子に基づいて、前記結合秘密情報が引数として入力され前記第１のセキュア演算手順と等価な演算の手順を示す第２のセキュア演算手順を生成する第２生成ステップと、前記メッセージに対し前記第２のセキュア演算手順に従ったセキュア演算を施す実行ステップとを含む。
【００３３】
本発明の記録媒体は、コンピュータ読み取り可能な記録媒体であって、前記コンピュータプログラムを記録している。
本発明の集積回路は、メッセージに対して秘密情報を用いたセキュア演算を施した場合と同一の演算結果を得る集積回路であって、秘密情報を少なくとも２つに分割した分割秘密情報が引数として入力され、当該分割秘密情報から前記秘密情報を算出する第１の秘密情報生成式と、前記秘密情報を用いたセキュア演算の手順を示す第１のセキュア演算手順とを記憶している記憶手段と、少なくとも２つの前記分割秘密情報を演算した結果である結合秘密情報が引数として入力され、前記第１の秘密情報生成式と演算上等価な第２の秘密情報生成式を生成する第１生成手段と、前記第２の秘密情報生成式に含まれる演算子に基づいて、引数として前記結合秘密情報が入力され前記第１のセキュア演算手順と等価な演算の手順を示す第２のセキュア演算手順を生成する第２生成手段と、前記メッセージに対し前記第２のセキュア演算手順に従ったセキュア演算を施す実行手段とを備える。
【００３４】
この構成によれば、セキュア処理の実行毎に、前記結合秘密情報を生成し、第２のセキュア演算手順を生成し、第２のセキュア演算手順を実行することにより、第１のセキュア演算と同じ結果を得るので、前記秘密情報の代わりにセキュア演算毎に異なる値となる結合秘密情報が演算用のメモリ上に現れ、第２のセキュア演算手順がセキュア処理の実行毎に異なるものとなるため、静的解析による前記秘密情報の特定が困難となる。よって、前記秘密情報を秘匿することが出来る。
【００３５】
本発明の難読化秘密情報埋め込み方法は、秘密情報を用いた演算を行うセキュア処理装置に、前記秘密情報を難読化して埋め込む難読化秘密情報埋め込み方法であって、前記秘密情報を解析が困難な状態に変換する難読化装置を用いて、前記秘密情報を難読化する秘密情報難読化ステップと、難読化情報書き込み装置を用いて、難読化された秘密情報を前記セキュア処理装置に埋め込む埋込ステップとを含む。
【００３６】
この構成によれば、セキュア処理装置に秘密情報を難読化して埋め込むことにより、秘密情報が暴露されるのを防ぐことができる。
また、前記難読化装置は、前記秘密情報の難読化の方法を決定するためのパラメータを入力として受け付ける入力手段を備え、前記秘密情報難読化ステップは、前記入力手段が前記パラメータを受け付ける受付ステップと、前記パラメータに基いて決定される難読化方法で、前記秘密情報を難読化する難読化ステップとを含んでもよい。
【００３７】
この構成によれば、前記秘密情報の難読化の方法を決定するためのパラメータを外部から与えることにより、セキュリティ強度を柔軟に設定することができる。
また、前記パラメータは、前記秘密情報の分割個数であり、前記難読化ステップは、前記分割個数に基づいて、前記秘密情報を少なくとも２つの分割秘密情報に分割する分割ステップを含むこととしてもよい。
【００３８】
また、前記難読化ステップは、更に、前記分割個数に基づき、少なくとも前記分割個数の項を含む第１の秘密情報生成式を生成する式生成ステップを含み、前記分割ステップは、前記第１の秘密情報生成式から前記秘密情報が算出されるように、前記秘密情報を分割することとしてもよい。
【００３９】
この構成によれば、秘密情報の分割個数を装置外部から調整することが可能になるためセキュリティ強度を柔軟に設定することができる。
また、前記パラメータは、第１の秘密情報生成式であり、前記難読化ステップは、前記第１の秘密情報生成式から前記秘密情報が算出されるように、前記秘密情報を少なくとも２つの分割秘密情報に分割するステップを含んでもよい。
【００４０】
この構成によれば、第１の秘密情報生成式を装置外部から与えることが可能になるため、セキュリティ強度を柔軟に設定することができる。
また、前記秘密情報は、鍵発行機関から発行される秘密鍵であり、前記難読化秘密情報埋め込み方法は、前記鍵発行機関が前記秘密鍵を鍵発行機関の秘密鍵で暗号化する暗号化ステップと、前記難読化装置が、暗号化された前記鍵を公開鍵で復号および検証する検証ステップとをさらに有し、前記秘密情報難読化ステップは、検証された前記秘密鍵を難読化し、前記埋込ステップは、前記難読化装置により難読化された前記難読化情報をバイナリデータに変換するバイナリ変換ステップと、前記秘密情報を用いた演算結果と同一の結果を前記難読化秘密情報を用いて演算する機能を有するセキュア処理装置に、前記バイナリデータを埋め込むバイナリ埋込ステップとを含んでもよい。
【００４１】
この構成によれば、鍵発行機関からメーカーへ渡される秘密鍵を、受け渡し途中の盗聴や改ざんから保護することができる。
【発明を実施するための最良の形態】
【００４２】
以下、本発明の実施の形態について、図面を参照しながら説明する。
（実施の形態１）
本発明の実施の形態１に係る秘密情報を用いセキュア処理を行うセキュア処理装置について、署名鍵を用いて署名生成を行う署名生成装置を例として説明する。
【００４３】
本発明の一実施形態に係る署名生成装置は、入力されるメッセージＭに対し、署名生成式Ｓ＝Ｍ＾ｄ  ｍｏｄ  ｎに基づく署名Ｓを生成する場合に、署名鍵ｄを直接メモリ上に現さず、署名鍵ｄの代わりに分割鍵をメモリ上に現し署名を生成するものであり、かつ、分割鍵の生成手順、分割鍵の値、署名の生成手順を署名生成毎に動的に変更する。
【００４４】
これにより、不正解析者による静的解析や動的解析に対し、秘密情報である署名鍵ｄを秘匿することが出来る。
＜構成＞
図１は、本実施の形態１における、署名生成装置１００を含む署名生成システムの概要図である。
【００４５】
署名生成システムは、署名鍵生成式Ｆ２１を用いて、署名鍵Ｄから後述する分割鍵を生成する分割鍵生成装置２２と、前記分割鍵を用いて署名を生成する署名生成装置１００とを含んで構成される。
【００４６】
メッセージＭ１０は、署名対象データであり、署名生成装置１００に入力されるデータである。なお、図１において、メッセージＭ１０は、外部から署名生成装置１００に入力されているが、署名生成装置１００内で生成したデータでもよく、署名鍵生成装置のメモリ内に格納されているプログラムコードやデータであってもよい。
【００４７】
署名鍵Ｄ２０は、署名生成に利用する秘密鍵情報であり、不正解析から保護されるべき情報である。具体的には、公開鍵暗号系を用いたＲＳＡ署名生成の場合、素数ｐと素数ｑの積をｎとした時のＲＳＡ署名生成演算Ｍ＾ｄ  ｍｏｄ  ｎにおける変数ｄが秘密鍵情報に当たり、ｄには、署名鍵Ｄ２０が代入される。
【００４８】
図２に示す分割鍵１１１（Ｄ１、Ｄ２、Ｄ３…、Ｄｎ）は、署名生成時に署名鍵Ｄ２０そのものの値がメモリ上に現れないようにするため、分割鍵生成装置２２が、署名鍵Ｄ２０の値を署名鍵生成恒等式Ｆ２１に基づいて予め分割して得た分割鍵である。ここで、署名鍵生成式Ｆ２１と分割鍵１１１（Ｄ１、Ｄ２、Ｄ３、…、Ｄｎ）との間には、分割鍵１１１（Ｄ１、Ｄ２、Ｄ３、…、Ｄｎ）を用いて署名鍵生成式Ｆ２１を計算することにより、署名鍵Ｄ２０の値が算出可能となるという関係がある。
【００４９】
次に、分割鍵生成装置２２、署名生成装置１００について、順に説明する。
（１）分割鍵生成装置２２
分割鍵生成装置２２は、外部から、署名鍵生成式Ｆ２１と、署名鍵Ｄ２０との入力を受け付けて、署名鍵生成式Ｆ２１と署名鍵Ｄ２０とに基づき、分割鍵識別情報テーブル２００と、分割鍵情報テーブル４００とを生成し、分割鍵識別情報テーブル２００と、分割鍵情報テーブル４００とを、後述する署名生成装置１００が備える分割鍵格納手段１１０に書き込む。
【００５０】
分割鍵生成装置２２は、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭ、ハードディスクユニット、ディスプレイユニット、キーボード、マウスなどから構成されるコンピュータシステムである。前記ＲＯＭ又は前記ハードディスクユニットには、コンピュータプログラムが記憶されており、前記コンピュータプログラムが前記ＲＡＭ上に読み出され、前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、分割鍵生成装置２２は、その機能を達成する。
【００５１】
ここで、署名鍵生成式Ｆ２１は、一例として、８変数（ｄ１〜ｄ８）を引数とする下式であるものとする。
Ｆ（ｄ１，ｄ２，ｄ３，ｄ４，ｄ５，ｄ６，ｄ７，ｄ８）＝（ｄ１＋ｄ２＋ｄ３＋ｄ４）＊（ｄ５＋ｄ６＋ｄ７＋ｄ８）
ここで、変数ｄ１には分割鍵Ｄ１が代入され、変数ｄ２には分割鍵Ｄ２が代入され、同様に、変数ｄ３〜ｄ８には、分割鍵Ｄ３〜Ｄ８がそれぞれ代入されるものとする。
【００５２】
署名鍵生成式Ｆ２１は、分割鍵生成装置２２に対し、図４に示す分割鍵情報テーブル４００として入力されるのであるが、分割鍵情報テーブル４００の説明に先立ち、署名鍵生成式Ｆ２１の表現形式について図３を用いて説明を行う。
【００５３】
図３は、署名鍵生成式Ｆ２１「Ｆ（ｄ１，ｄ２，ｄ３，ｄ４，ｄ５，ｄ６，ｄ７，ｄ８）＝（ｄ１＋ｄ２＋ｄ３＋ｄ４）＊（ｄ５＋ｄ６＋ｄ７＋ｄ８）」をツリー構造で概念的に表現したものである。
【００５４】
変数ｄ１、ｄ２、ｄ３、ｄ４は、加算グループ１というグループ情報と関連付けられている。
ここで、グループ情報とは、署名生成式Ｆ２１において、被演算子（ｄ１〜ｄ８）が他の被演算子とどのような演算（例えば、加算、乗算など）がされるかという関係を表す属性情報である。また、上記のグループを構成する各被演算子や、より小さなグループ等をメンバーと呼ぶ。
【００５５】
例えば、「加算グループ」では、各メンバーが演算子「＋（加算）」により演算され、「乗算グループ」では、各メンバーが演算子「＊（乗算）」により演算される。
なお、複数の変数から構成されたグループ同士や、グループと他の変数とが、どのような演算子によって演算されるかという関係を表す属性情報についてもグループ情報と呼ぶものとする。
【００５６】
このようにグループ情報という属性情報を与えることで、各変数と署名鍵生成式Ｆ２１との関係を識別することができる。
具体的には、「加算グループ」では、前述のように、各メンバーが演算子「＋（加算）」で演算されるため、加算グループ１はｄ１＋ｄ２＋ｄ３＋ｄ４という式を表現していることになる。また、変数ｄ５、ｄ６、ｄ７、ｄ８は、加算グループ２というグループ情報と関連づけられている。加算グループ２は、加算グループ１の場合と同様にｄ５＋ｄ６＋ｄ７＋ｄ８という式を表現している。さらに、加算グループ１と加算グループ２とは、グループ情報として乗算グループ１と関連付けられている。
【００５７】
「乗算グループ」というグループ情報は、前述のように、そのグループの各メンバーが演算子「＊（乗算）」で演算されることを示しており、乗算グループ１は、加算グループ１と加算グループ２との乗算という関係を表しており、（ｄ１＋ｄ２＋ｄ３＋ｄ４）＊（ｄ５＋ｄ６＋ｄ７＋ｄ８）という署名鍵生成式Ｆ２１を表現していることになる。
【００５８】
次に、図３の署名鍵生成式Ｆ２１の構造を、情報として具体的に表した分割鍵情報テーブル４００について、図４を用いて説明する。
分割鍵情報テーブル４００は、図４に示すように、分割鍵グループ識別子４０１と分割鍵グループメンバー識別子４０２とから構成される。
【００５９】
分割鍵グループ識別子４０１は、上述したグループを識別する識別子であり、分割鍵グループメンバー識別子４０２は、各グループに属するメンバーを示す識別子である。
図４において、加算グループ１には、分割鍵グループ識別子４０１として「ＡＧ００１」が割り当てられている。ここで、図３にて示したとおり、グループ「ＡＧ００１」に属するメンバーは、変数ｄ１、ｄ２、ｄ３、ｄ４であるので、それぞれの変数を識別する「ｉｄ００１」、「ｉｄ００２」、「ｉｄ００３」、「ｉｄ００４」が、分割鍵グループメンバー識別子４０２として分割鍵情報テーブル４００に登録されている。
【００６０】
また、加算グループ２には、分割鍵グループ識別子４０１として「ＡＧ００２」が割り当てられている。ここで、グループ「ＡＧ００２」に属するメンバーは、変数ｄ５、ｄ６、ｄ７、ｄ８であるので、それぞれの変数を識別する「ｉｄ００５」、「ｉｄ００６」、「ｉｄ００７」、「ｉｄ００８」が分割鍵グループメンバー識別子４０２として分割鍵情報テーブル４００に登録されている。
【００６１】
また、乗算グループ１には、分割鍵グループ識別子４０１として「ＭＧ００１」が割り当てられている。グループ「ＭＧ００１」に属するメンバーは、加算グループ１と加算グループ２であるので、それぞれの分割鍵グループ識別子４０１である「ＡＧ００１」と「ＡＧ００２」が分割鍵グループメンバー識別子４０２として分割鍵情報テーブル４００に登録されている。
【００６２】
このようなデータ構造を用いて、署名鍵生成恒等式生成手段１２０は、分割鍵識別情報テーブル２００と分割鍵情報テーブル４００とを参照することで、署名鍵生成式Ｆ２１の構成を知ることが出来る。
【００６３】
次に、分割鍵生成装置２２が、署名生成式Ｆ２１に基づき、署名鍵Ｄを複数の分割鍵に分割する処理について説明する。
本実施の形態では、署名鍵生成式Ｆ２１の入力変数の数が８個であることから、分割鍵生成装置２２は、署名鍵Ｄ２０を８個の分割鍵Ｄ１〜Ｄ８に分割する。
【００６４】
但し、Ｄ１〜Ｄ８には、Ｆ（Ｄ１，Ｄ２，Ｄ３，Ｄ４，Ｄ５，Ｄ６，Ｄ７，Ｄ８）＝Ｄを満たす値がランダムに選択される。
ここで、分割鍵Ｄｎ（ｎ：１〜８）は、署名鍵生成式の引数ｄｎに代入される。即ち、分割鍵Ｄ１は、署名鍵生成式Ｆ２１の引数ｄ１に代入され、同様に分割鍵Ｄ２は、引数ｄ２に代入され、分割鍵Ｄ３〜Ｄ８は、引数ｄ３〜ｄ８に代入される。
【００６５】
署名鍵Ｄから、署名鍵生成式Ｆ２１に基づき、分割鍵Ｄ１〜Ｄ８を算出する方法の一例として、分割鍵生成装置２２は、署名鍵生成式Ｆ２１で行われている最も外側の演算から順に、演算の単位を細かくしていくことで行う。
【００６６】
具体的には、まず、分割鍵生成装置２２は、Ｄ＝Ｒ１＊Ｒ２が成り立つランダムな値Ｒ１、Ｒ２を選出する。
次に、Ｒ１＝（Ｄ１＋Ｄ２＋Ｄ３＋Ｄ４）が成り立つランダムな値Ｄ１、Ｄ２、Ｄ３、Ｄ４を選出し、Ｒ２＝（Ｄ５＋Ｄ６＋Ｄ７＋Ｄ８）が成り立つランダムな値Ｄ５、Ｄ６、Ｄ７、Ｄ８を選出する。
【００６７】
分割鍵生成装置２２は、選出した分割鍵Ｄ１〜Ｄ８のそれぞれに対し、各分割鍵を識別するための識別情報である分割鍵識別子２０１を割り当てる。
分割鍵生成装置２２は、一例として、分割鍵Ｄ１に対し分割鍵識別子２０１として「ＩＤ００１」を割り当て、分割鍵Ｄ２に対し分割鍵識別子２０１として「ＩＤ００２」を割り当て、同様に、分割鍵Ｄ３、Ｄ４、Ｄ５、Ｄ６、Ｄ７、Ｄ８のそれぞれに対し、分割鍵識別子２０１として「ＩＤ００３」、「ＩＤ００４」、「ＩＤ００５」、「ＩＤ００６」、「ＩＤ００７」、「ＩＤ００８」を割り当てる。
【００６８】
分割鍵生成装置２２は、図２に示す、分割鍵識別子２０１と分割鍵１１１を対応づけた分割鍵識別情報テーブル２００を生成して、分割鍵識別情報テーブル２００を、後述する署名生成装置１００が備える分割鍵格納手段１１０に書き込む。
（２）署名生成装置１００
署名生成装置１００は、図１に示すように、分割鍵格納手段１１０、署名鍵生成恒等式生成手段１２０、結合分割鍵生成手段１３０、結合分割鍵格納手段１４０、署名生成手段１５０を含んで構成される。
【００６９】
署名生成装置１００は、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭ、ハードディスクユニット、ディスプレイユニットなどから構成されるコンピュータシステムである。前記ＲＯＭ又は前記ハードディスクユニットには、コンピュータプログラムが記憶されており、前記コンピュータプログラムが前記ＲＡＭ上に読み出され、前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、署名生成装置１００は、その機能を達成する。
【００７０】
分割鍵格納手段１１０は、メモリやハードディスクなどの記憶デバイスであり、分割鍵生成装置２２により書き込まれる分割鍵識別情報テーブル２００及び分割鍵情報テーブル４００を記憶する。
【００７１】
署名鍵生成恒等式生成手段１２０は、署名鍵生成式Ｆ２１と恒等な式である署名鍵生成恒等式１２１を生成する。ここで、恒等とは、演算において等価である、演算結果が同一になるような関係のことを言う。
【００７２】
以下、署名鍵生成恒等式生成手段１２０が、署名鍵生成式Ｆ２１と署名鍵Ｄ２０とから、署名鍵生成式Ｆ２１に恒等な式である署名鍵生成恒等式Ｇ１２１と、図１１に示すように後述する結合分割鍵１４１とを動的に生成する方法について、図を用いて詳細に説明していく。
【００７３】
なお、以降、ＲＳＡ署名生成を例とした説明を行う。
図５は、署名生成恒等式Ｇ１２１と後述する結合分割鍵１４１を動的に生成し、署名Ｓ３０を生成して出力するまでの処理の概要を示すフローチャートである。但し、図５の各ステップは、図６〜図１１のフローチャートを用いて詳細に説明する。
【００７４】
図５において、先ず、署名鍵生成恒等式生成手段１２０が、分割鍵格納手段１１０に記憶されている分割鍵情報テーブル４００を読み取り、署名鍵生成式Ｆ２１と同一結果を出力する署名鍵生成恒等式Ｇ１２１を生成する（ステップＳ５０１）。
【００７５】
次に、署名鍵生成恒等式生成手段１２０は、ステップＳ５０１で生成された署名鍵生成恒等式Ｇ１２１に基づき、分割鍵格納手段１１０に記憶されている分割鍵１１１を結合演算することで、分割鍵１１１とは異なる値の結合分割鍵１４１を生成し、生成した結合分割鍵１４１を結合分割鍵格納手段１４０に書き込む（ステップＳ５０２）。
【００７６】
次に、署名生成手段１５０にて、署名対象メッセージＭ１０と、署名鍵生成恒等式Ｇ１２１と結合分割鍵１４１を用いて、署名鍵Ｄ２０の値をメモリに出現させることなく、Ｍ＾ｄ  ｍｏｄ  ｎと同一の結果となる署名Ｓ３０を算出し、署名Ｓ３０を出力し署名生成処理を終了する（ステップＳ５０３）。
【００７７】
ここで、明細書中「Ａ＾Ｂ」の記載は、ＡのＢ乗を表すものとし、「Ａ  ｍｏｄ  Ｂ」の記載は、Ａを自然数Ｂで割ったときの剰余を表すものとする。
次に、上述した図５のステップＳ５０１の詳細について、図６を用いて説明する。
【００７８】
まず、署名鍵生成恒等式生成手段１２０は、分割鍵格納手段１１０に記憶されている分割鍵情報テーブル４００を読み込み、各グループに属するメンバーの並びをランダムに並び替えるランダムシャッフル処理を行う（ステップＳ６０１）。ランダムシャッフルの詳細フローについては、図７を用いて後述する。
【００７９】
次に、ランダムシャッフルされた分割鍵情報テーブル４００の各グループのメンバーをランダムにグループ分けする（ステップＳ６０２）。ランダムにグループ分けする処理の詳細については、図８、図９を用いて後述する。
【００８０】
次に、ステップＳ６０２でランダムにグループ分けされた各グループを式展開して、後述するマトリックス表現というデータ構造に変形し、展開した各グループのうち結合する箇所をランダムに選択して結合を行う。この結果、署名鍵生成式Ｆ２１と恒等な署名鍵生成恒等式１２１が生成されるので、これを出力する（ステップＳ６０３）。ステップＳ６０３については、図１０を用いて後述する。
【００８１】
次に、ステップＳ６０１における分割鍵グループのメンバーのランダムシャッフル処理の詳細について図７を用いて説明する。
なお、本実施の形態におけるランダムシャッフルとは、例えば、式ｄ１＋ｄ２＋ｄ３＋ｄ４を、交換法則を利用して、恒等な式に変換することを言う。また、加算などの場合に、式１＋２＋３の計算結果と式３＋２＋１の計算結果とが同一であるような関係、すなわち、式における被演算子の順序を入れ替えても計算結果が変わらないような関係を「交換法則が成立する」という。
【００８２】
まず、署名鍵生成恒等式生成手段１２０は、分割鍵格納手段１１０に記憶されている分割鍵情報テーブル４００のグループ総数Ｎを取得する（ステップＳ７０１）。
ここで、分割鍵情報テーブル４００は、二次元配列Ｔａｂｌｅとして表現されているものとする。また、Ｔａｂｌｅ［ｎ］［ｍ］は、図４の分割鍵グループメンバー識別子４０１に対応しており、上からｎ行目のグループに属する、左からｍ個目の分割鍵グループ識別子を示す。また、単にＴａｂｌｅ［ｎ］とだけ書く場合は、上からｎ行目のグループに属する分割鍵グループ識別子の集合を示す。
【００８３】
具体的には、図４に示した分割鍵情報テーブル４００を上述したＴａｂｌｅの形で表すと、以下のようになる。
Ｔａｂｌｅ［０］＝｛ＡＧ００１，ＡＧ００２｝、
Ｔａｂｌｅ［１］＝｛ｉｄ００１，ｉｄ００２，ｉｄ００３，ｉｄ００４｝、
Ｔａｂｌｅ［２］＝｛ｉｄ００５，ｉｄ００６，ｉｄ００７，ｉｄ００８｝
なお、この例及び以下の例では、Ｔａｂｌｅの各インデックスは０から始まるものとする。
【００８４】
グループ総数Ｎは、加算グループ、乗算グループ等のグループの個数であり、ｎの最大値＋１に該当する。
図４に示した分割鍵情報テーブル４００の場合、グループ総数Ｎは３となる。
【００８５】
次に、変数ｉを０で初期化する（ステップＳ７０２）。
ここで、ｉは現在シャッフル対象となっている分割鍵グループが何番目の分割鍵グループであるかをカウントする変数である。
【００８６】
次に、乱数値を発生させシャッフル回数をカウントする変数ｓｎに代入する（ステップＳ７０３）。
ここで、シャッフル回数ｓｎは、各分割鍵グループに対してあと何回シャッフルを行うかを示す変数である。ここで、シャッフル回数ｓｎとして乱数を利用することにより、シャッフルする回数を動的に設定することが出来、ひいては署名鍵生成恒等式を動的に生成することが出来る。
【００８７】
次に、Ｔａｂｌｅ［ｉ］に登録されているメンバー数、すなわち、ｉ番目のグループに登録されているメンバー数Ｍを取得する（ステップＳ７０４）。
次に、０以上Ｍ未満のランダムな整数を２つ発生させ、それぞれを変数ｓ１、ｓ２に代入する（ステップＳ７０５）。
【００８８】
ここで、ｓ１、ｓ２としてランダムな整数を利用することにより、シャッフル対象となるメンバーの位置を動的に設定することができ、ひいては署名鍵生成恒等式を動的に生成することが出来る。
【００８９】
次に、Ｔａｂｌｅ［ｉ］［ｓ１］とＴａｂｌｅ［ｉ］［ｓ２］の値を入れ替えて、ｓｎをデクリメントする（ステップＳ７０６）。
すなわち、ｉ番目のグループに属するｓ１番目の構成要素とｓ２番目の構成要素とを入れ替えた上で、残りシャッフル回数ｓｎを１つ減らす。
【００９０】
次に、ｓｎ＞０かどうか、すなわち現在シャッフルの対象となっているｉ番目の分割鍵グループについて、まだシャッフル回数が残っているか否かを判定する（ステップＳ７０７）。
【００９１】
ステップＳ７０７の判定の結果が「ＹＥＳ」ならば、さらにシャッフルを繰り返すため、ステップＳ７０５へ戻る。
そうでなく、判定の結果が「ＮＯ」ならば、ｉがＮ−１と等しいかどうか判定する（ステップＳ７０８）。すなわち、全グループについてシャッフルが終了したか否かを判定する。
【００９２】
ステップＳ７０８の判定の結果が「ＮＯ」ならば、ｉをインクリメントし、ステップＳ７０３へ移ることにより、次の分割鍵グループに対してシャッフルを行っていく（ステップＳ７０９）。そうでなく、ステップＳ７０８の判定の結果が「ＹＥＳ」ならば、全分割鍵グループに対するシャッフルが終了しているので、ランダムシャッフル処理を終了する。
【００９３】
次に、ステップＳ６０２における分割鍵グループのメンバーのランダムグループ分け処理の詳細について図８のフローチャートを参照しながら説明する。
ランダムグループ分けとは、例えば、式（ｄ１＋ｄ２＋ｄ３）＋ｄ４を、結合法則を利用して恒等式ｄ１＋（ｄ２＋ｄ３＋ｄ４）へと変換する処理である。ここで、例えば式（１＋２）＋３と式１＋（２＋３）は結果が同一の値となり、このような関係、すなわち、一度に計算を行う単位の分割の仕方に関わらず結果が同一の値となるような関係を「結合法則が成立する」という。
【００９４】
なお、図８においても、図５の説明の際、前述したように分割鍵情報テーブル４００は、２次元配列のＴａｂｌｅ［ｎ］［ｍ］で表現されるものとして説明する。
まず、署名鍵生成恒等式生成手段１２０は、分割鍵格納手段１１０に記憶されている分割鍵情報テーブル４００のグループ総数Ｎを取得する（ステップＳ８０１）。
【００９５】
次に、変数ｉを０で初期化する（ステップＳ８０２）。ここでｉは、現在ランダムグループ分けの対象となっている分割鍵グループの番号を示す変数である。
次に、グループ分割位置リストＧＰを空リストとしてセットする（ステップＳ８０３）。ここで、分割位置リストＧＰは、分割鍵グループのメンバーを、前から何番目の位置で分割するかを示す値のリストである。
【００９６】
次に、Ｔａｂｌｅ［ｉ］に登録されているメンバー数Ｍを取得し、１以上Ｍ以下の自然数をランダムに選び、選んだ値をグループ分割数ｋとする（ステップＳ８０４）。ここで、グループ分割数とは、分割鍵グループを何個のグループに分割するかを示す数である。グループ分割数ｋをランダムな自然数とすることにより、式の分割数を動的に設定することができ、ひいては署名鍵生成恒等式を動的に生成することが出来る。
【００９７】
次に、０以上Ｍ−１以下の整数を、重複しないようにｋ−１個ランダムに選択し、選択した値を降順で並び替え、グループ分割リストＧＰにセットする（ステップＳ８０５）。
このように、グループ分割リストＧＰの内容ランダムに設定することにより、式の分割位置を動的に設定することができ、ひいては署名鍵生成恒等式を動的に生成することが出来る。
【００９８】
次に、ステップＳ８０４で選択されたグループ分割リストＧＰの位置にあるメンバーの後ろでＴａｂｌｅ内のメンバーのグループを区切り、ｋ個のグループに分ける（ステップＳ８０６）。
【００９９】
次に、ｉがＮ−１と等しいかどうかチェックする（ステップＳ８０７）。すなわち、全分割鍵グループについて、ランダムグループ分けが終了したか否かを判定する。
ステップＳ８０７の判定の結果が「ＮＯ」であれば、ｉをインクリメントし、ステップＳ８０３へ戻ることにより、さらに次の分割鍵グループについてランダムグループ分けを行っていく（ステップＳ８０８）。そうでなく判定の結果が「ＹＥＳ」であれば、全分割鍵グループについてランダムグループ分けが終了したと判断しランダムグループ分けを終了する。
【０１００】
図９は、図４の分割鍵情報テーブルに対して、図７のランダムシャッフルと図８のランダムグループ分けの処理を行った後の分割鍵情報テーブル４００の状態を示した図である。
【０１０１】
図９には、図７のフローに従ってランダムシャッフルした結果、ＭＧ００１では、Ｔａｂｌｅ［０］［２］＝｛ＡＧ００１，ＡＧ００２｝であった並びが、｛ＡＧ００２，ＡＧ００１｝のようにシャッフルされ、ＡＧ００１では、Ｔａｂｌｅ［１］［４］＝｛ｉｄ００１，ｉｄ００２，ｉｄ００３，ｉｄ００４｝であった並びが、｛ｉｄ００２，ｉｄ００１，ｉｄ００４，ｉｄ００３｝のようにシャッフルされ、ＡＧ００２では、Ｔａｂｌｅ［２］［４］＝｛ｉｄ００５，ｉｄ００６，ｉｄ００７，ｉｄ００８｝であった並びが、｛ｉｄ００７，ｉｄ００６，ｉｄ００８，ｉｄ００５｝のようにシャッフルされたことが示されている。
【０１０２】
また、図８のフローに従ってランダムグループ分けした結果、ＭＧ００１では、分割鍵グループメンバー識別子が｛ＡＧ００２｝と｛ＡＧ００１｝の２個にグループ分けされ、ＡＧ００１では、｛ｉｄ００２，ｉｄ００１｝と｛ｉｄ００４，ｉｄ００３｝の２個にグループ分けされ、ＡＧ００２では、｛ｉｄ００５，ｉｄ００６｝と｛ｉｄ００７，ｉｄ００８｝の２個にグループ分けされたことを示している。
【０１０３】
図９のようにランダムシャッフルおよびランダムグループ分けされた場合、図４の分割鍵情報テーブル４００で示されていた署名鍵生成式Ｆ２１
Ｆ（ｄ１，ｄ２，ｄ３，ｄ４，ｄ５，ｄ６，ｄ７，ｄ８）＝（ｄ１＋ｄ２＋ｄ３＋ｄ４）＊（ｄ５＋ｄ６＋ｄ７＋ｄ８）
は、交換法則と結合法則により、署名鍵生成式Ｆ２１と恒等な署名鍵生成恒等式
Ｇ’（ｄ１，ｄ２，ｄ３，ｄ４，ｄ５，ｄ６，ｄ７，ｄ８）＝（（ｄ７＋ｄ６）＋（ｄ８＋ｄ５））＊（（ｄ２＋ｄ１）＋（ｄ４＋ｄ３））
に変換されたことになる。
【０１０４】
続いて、さらに、この署名鍵生成恒等式Ｇ’を後述するマトリックス表現を用いて恒等変換していく。
図１０（ａ）は、図９で生成された署名鍵生成恒等式１２１の右辺（（ｄ７＋ｄ６）＋（ｄ８＋ｄ５））＊（（ｄ２＋ｄ１）＋（ｄ４＋ｄ３））をマトリックス表現したものである。
【０１０５】
ここで、マトリックス表現とは、例えば（ｄ１＋ｄ２）＊（ｄ３＋ｄ４）は、ｄ１＊（ｄ３＋ｄ４）＋ｄ２＊（ｄ３＋ｄ４）と等しいように、分配法則を利用して署名鍵生成式Ｆと恒等な式Ｇを作成するために利用されるデータ構造である。ここで、例えば式３＊（２＋１）の値が式３＊２＋３＊１の値と等しいような関係、すなわち、式展開前の値と式展開後の値とが等しいような関係を「分配法則が成立する」と言う。
【０１０６】
ここで、マトリックス１０００の各要素はランダムグループ分けされた各グループ同士について、式展開を施した場合に発生する乗算を示す式であり、それぞれ、署名鍵生成恒等式Ｇ’を分配法則を用いて展開した際に掛け合わせられる項を示す。
【０１０７】
より具体的な例を示すと、例えばマトリックス１０００をＭａｔｒｉｘ［２］［２］の２×２の配列で表現すると、
Ｍａｔｒｉｘ［０］［０］＝（ｄ７＋ｄ６）＊（ｄ２＋ｄ１）
Ｍａｔｒｉｘ［０］［１］＝（ｄ７＋ｄ６）＊（ｄ４＋ｄ３）
Ｍａｔｒｉｘ［１］［０］＝（ｄ８＋ｄ５）＊（ｄ２＋ｄ１）
Ｍａｔｒｉｘ［１］［１］＝（ｄ８＋ｄ５）＊（ｄ４＋ｄ３）
のようになる。
【０１０８】
ここで、Ｍａｔｒｉｘ［ｎ］［ｍ］は、最初の加算グループにおけるｎ番目の要素と、次の加算グループにおけるｍ番目の要素との積であり、それぞれ、署名鍵生成恒等式を展開した際に掛け合わせられることになる項同士の積を示している。なお、インデックスｎとｍとの番号は０から始まるものとし、各加算グループにおいてはより左側にある要素ほどインデックス番号が小さいものとする。
【０１０９】
例えば、Ｍａｔｒｉｘ［０］［０］は、図９のテーブルにおいて最初の加算グループであるＡＧ００１における最初のメンバー（ｄ７＋ｄ６）と、２番目の加算グループであるＡＧ００２における最初のメンバー（ｄ２＋ｄ１）とを乗算した値となる。なお、加算グループの数に応じて、Ｍａｔｒｉｘ［ｎ］［ｍ］「ｌ」・・・と、配列の次元が増加していくことは言うまでもない。
【０１１０】
このようなマトリックス表現した署名鍵生成恒等式Ｇに対して、前述したステップＳ６０３において、マトリックス表現の各要素に対して結合する箇所をランダムに選択する処理が行われる。すなわち、マトリックス表現では、同一の行もしくは同一の列に属する要素同士は、少なくとも１つは共通する項が含まれる式であるため、この性質を利用して同一の行もしくは列に属する式同士を結合することが出来る。
【０１１１】
以下に、より具体的な例を示す。まず、図１０（ａ）では、１００１で図示されているように結合箇所としてＭａｔｒｉｘ［０］［１］とＭａｔｒｉｘ［１］［１］が選択されたものとする。ここで、結合箇所として選択された１００１のＭａｔｒｉｘ［０］［１］とＭａｔｒｉｘ［１］［１］の両要素には、（ｄ４＋ｄ３）が共に存在している。そのため、結合箇所１００１は、
（ｄ４＋ｄ３）＊（（ｄ７＋ｄ６）＊（ｄ８＋ｄ５））
というように（ｄ４＋ｄ３）で括ることで、結合することができる。
【０１１２】
ここで、上述したように、結合箇所をランダムに選択することにより、結合箇所を動的に決定することができ、ひいては署名生成鍵恒等式Ｇを動的に生成することが出来る。
図１０（ｂ）は、マトリックス表現を用いて最終的な署名生成恒等式Ｇ１２１を生成するまでの式変形を、通常の式の変形で例示したものである。
【０１１３】
図９で生成された署名鍵生成恒等式Ｇ’は、
Ｇ’＝（（ｄ７＋ｄ６）＋（ｄ８＋ｄ５））＊（（ｄ２＋ｄ１）＋（ｄ４＋ｄ３））…（式１）
であり、この式を分配法則を用いて展開すると、（式２）のようになる。
【０１１４】
Ｇ’＝（ｄ７＋ｄ６）＊（ｄ２＋ｄ１）＋（ｄ７＋ｄ６）＊（ｄ４＋ｄ３）
＋（ｄ８＋ｄ５）＊（ｄ２＋ｄ１）＋（ｄ８＋ｄ５）＊（ｄ４＋ｄ３）…（式２）
さらに（式２）を図１０（ａ）のマトリックス１０００内でステップＳ６０３にて結合する箇所としてランダムに指定された１００１にあたる項を結合すると、（式３）となる。
【０１１５】
Ｇ’  ＝  （ｄ７＋ｄ６）＊（ｄ２＋ｄ１）＋（ｄ８＋ｄ５）＊（ｄ２＋ｄ１）
＋（ｄ４＋ｄ３）＊（（ｄ７＋ｄ６）＊（ｄ８＋ｄ５））      …（式３）
この（式３）が図６のＳ６０１からＳ６０３を経て生成された署名鍵生成恒等式Ｇ１２１となる。
【０１１６】
結合分割鍵生成手段１３０は、署名鍵生成恒等式Ｇ１２１に基づき、分割鍵格納手段１１０に記憶された分割鍵同士を結合演算して、分割鍵１１１とは異なる値の結合分割鍵１４１（ＣＤ１、ＣＤ２、…、ＣＤｍ）を生成する。生成した結合分割鍵１４１のそれぞれに対し、結合分割鍵１４１を識別するための結合分割鍵識別子１１０１を付与して、図１１に示す、結合分割鍵識別子１１０１と結合分割鍵１４１を対応づけた結合分割鍵識別情報テーブル６００を生成して、結合分割鍵識別情報テーブル６００を、結合分割鍵格納手段１４０に書き込む。
【０１１７】
ここで、署名鍵生成恒等式Ｇ１２１と結合分割鍵１４１（ＣＤ１、ＣＤ２、…、ＣＤｍ）との間には、結合分割鍵１４１（ＣＤ１、ＣＤ２、…、ＣＤｍ）と署名鍵生成恒等式１２１から署名鍵Ｄの値が算出可能となるような関係を有する。
【０１１８】
また、結合演算とは、複数の値をまとめて新しい値を生成する演算であり、具体的な例としては加算、乗算やその組み合わせ等がある。すなわち、１＋２＝３という演算において、「３」は、「１」と「２」という値に対して「＋」という結合演算を施して得られる値である。
【０１１９】
具体的には、前述したように、ランダムグループ分けした加算グループの各要素｛ｉｄ００２，ｉｄ００１｝と｛ｉｄ００４，ｉｄ００３｝｛ｉｄ００５，ｉｄ００６｝、｛ｉｄ００７，ｉｄ００８｝を、一塊の入力引数とする。
【０１２０】
署名鍵生成恒等式Ｇ’の（式３）で示された最小の括弧の単位で、結合分割鍵１４１を生成すると、以下の７個の結合分割鍵１４１が生成されることになる。
変数ｃｄ１にはｄ７＋ｄ６を演算した結果値が格納され、ｃｄ２にはｄ２＋ｄ１を演算した結果値、ｃｄ３にはｄ８＋ｄ５を演算した結果値、ｃｄ４にはｄ２＋ｄ１を演算した結果値、ｃｄ５にはｄ４＋ｄ３を演算した結果値、ｃｄ６にはｄ７＋ｄ６を演算した結果値、ｃｄ７にはｄ８＋ｄ５を演算した結果値が格納される。すなわち、下式が成立する。
【０１２１】
Ｇ’（ｄ１，ｄ２，ｄ３，ｄ４，ｄ５，ｄ６，ｄ７，ｄ８）
＝  Ｇ（ｃｄ１，ｃｄ２，ｃｄ３，ｃｄ４，ｃｄ５，ｃｄ６，ｃｄ７）
ここで、Ｇ’（ｄ１，ｄ２，ｄ３，ｄ４，ｄ５，ｄ６，ｄ７，ｄ８）の引数である変数ｄ１には、ｉｄ００１に対応する分割鍵識別子ＩＤ００１を持つ分割鍵Ｄ１が代入され、同様に変数ｄ２には分割鍵Ｄ２が代入され、変数ｄ３、ｄ４、ｄ５、ｄ６、ｄ７、ｄ８のそれぞれには、分割鍵Ｄ３、Ｄ４、Ｄ５、Ｄ６、Ｄ７、Ｄ８がそれぞれ代入される。
【０１２２】
また、Ｇ（ｃｄ１，ｃｄ２，ｃｄ３，ｃｄ４，ｃｄ５，ｃｄ６，ｃｄ７）の引数である変数ｃｄ１には、結合分割鍵Ｄ１が代入され、同様に変数ｃｄ２には結合分割鍵ＣＤ２が代入され、変数ｃｄ３、ｃｄ４、ｃｄ５、ｃｄ６、ｃｄ７のそれぞれには、結合分割鍵ＣＤ３、ＣＤ４、ＣＤ５、ＣＤ６、ＣＤ７がそれぞれ代入される。
【０１２３】
ここで、ＣＤ１＝Ｄ７＋Ｄ６が成り立ち、ＣＤ２＝Ｄ２＋Ｄ１が成り立ち、ＣＤ３＝Ｄ８＋Ｄ５が成り立ち、ＣＤ４＝Ｄ２＋Ｄ１が成り立ち、ＣＤ５＝Ｄ４＋Ｄ３が成り立ち、ＣＤ６＝Ｄ７＋Ｄ６が成り立ち、ＣＤ７＝Ｄ８＋Ｄ５が成り立つ。
【０１２４】
ここで、結合分割鍵１４１は演算の結果値であるため、この値のみから元の分割鍵１１１を導出するのは困難となり、分割鍵１１１を秘匿することが出来る。
図１１は、各結合分割鍵１４１（ＣＤ１、ＣＤ２、…、ＣＤ７）に、それぞれ結合分割鍵識別子１１０１（ＩＤ００１、ＩＤ００２、…、ＩＤ００７）が付与されていることを示している。
【０１２５】
したがって、署名鍵生成恒等式Ｇ’である（式３）を、結合分割鍵１４１を用いた表現である署名鍵生成恒等式Ｇ１２１とすると、次の（式４）のようになる。
Ｇ（ｃｄ１，ｃｄ２，ｃｄ３，ｃｄ４，ｃｄ５，ｃｄ６，ｃｄ７）
＝  （ｃｄ１＊ｃｄ２）＋（ｃｄ３＊ｃｄ４）＋ｃｄ５＊（ｃｄ６＋ｃｄ７）…（式４）
ここで、（式４）の引数ｃｄ１，ｃｄ２，…、ｃｄ７に結合分割鍵（ＣＤ１、ＣＤ２、…、ＣＤ７）の値を代入した結果と、（式３）の引数ｄ１、ｄ２、…、ｄ８に（Ｄ１、Ｄ２、…、Ｄ８）を代入した結果は等しく、
さらに結合分割鍵１４１（ＣＤ１、ＣＤ２、…、ＣＤ７）は分割鍵１１１（Ｄ１、Ｄ２、…、Ｄ８）を結合演算した結果であることから、（式４）は署名鍵生成式Ｆ２１と同一の結果を得ることができる式となるため、署名生成手段１５０は、（式４）を署名鍵生成恒等式１２１として利用する。
【０１２６】
結合分割鍵格納手段１４０は、結合分割鍵生成手段１３０により署名生成時に動的に生成された結合分割鍵１４１を記憶する。
署名生成手段１５０は、メッセージＭ１０を入力とし、結合分割鍵格納手段１４０に記憶されている結合分割鍵１４１を用いて署名Ｓ３０を生成する。ＲＳＡ署名生成における例を示すと、署名鍵Ｄ２０を用いず、結合分割鍵１４１のみを用いてＳ＝Ｍ＾ｄ  ｍｏｄ  ｎと同一の演算結果となる署名Ｓ３０を生成する。
【０１２７】
続いて、図１２、図１３を用いて、署名生成手段１５０が結合分割鍵１４１と署名鍵生成恒等式Ｇ１２１（式４）とを用いた署名生成の処理を示すフローを説明する。
まず、署名Ｓの生成方法の概略を説明する。
【０１２８】
署名生成に用いられる演算式は、署名鍵生成恒等式Ｇ１２１の構造により定まる。
署名Ｓは、例えば署名鍵生成恒等式Ｇの各引数ｃｄ１〜ｃｄ７に、ＣＤ１〜ＣＤ７が代入されており、（ＣＤ１＊ＣＤ２）＋（ＣＤ３＊ＣＤ４）＋ＣＤ５＊（ＣＤ６＋ＣＤ７）であったとき、メッセージＭと、ｎ（＝ｐ＊ｑ）とを用いて、
Ｓ０＝（Ｍ＾ＣＤ１）＾ＣＤ２  ｍｏｄ  ｎ、
Ｓ１＝  Ｓ０＊（（Ｍ＾ＣＤ３）＾ＣＤ４）  ｍｏｄ  ｎ、
Ｓ＝  Ｓ１＊（（（Ｍ＾ＣＤ６）＊（Ｍ＾ＣＤ７））＾ＣＤ５）  ｍｏｄ  ｎ
という計算により、Ｓ＝Ｍ＾Ｄ  ｍｏｄ  ｎと同じ結果が生成される。
【０１２９】
より具体的には、上式Ｇを（ＣＤ１＊ＣＤ２）と（ＣＤ３＊ＣＤ４）とＣＤ５＊（ＣＤ６＋ＣＤ７）ように“＋”演算子で区切り、区切られたそれぞれを利用してメッセージＭに対してベキ乗演算して、それぞれのベキ乗演算結果を掛けることで署名Ｓを作成する。
【０１３０】
以下、フローの詳細な説明に移るが、以下の例でも、署名鍵生成恒等式Ｇ１２１は（式４）であるものとする。また、署名生成手段１５０は（式４）を逆ポーランド記法で式表現したものを利用して署名生成するものとする。ここで、逆ポーランド記法とは、演算子を演算対象の後ろに記述する記法であり、演算子が現れるたびに、その演算子の２つ前の値および１つ前の値に対して、その演算子を適用した値を計算していくような規則で示される記法である。
【０１３１】
例えば、（式４）を逆ポーランド記法で表し、配列に入れた例を示すと、次のような配列Ｐとなる。
Ｐ［１３］＝｛ＣＤ１，ＣＤ２，＊，ＣＤ３，ＣＤ４，＊，＋，ＣＤ５，ＣＤ６，ＣＤ７，＋，＊，＋｝
以下、図１２、図１３を用いて、署名生成フローについて詳細に説明する。
【０１３２】
まず、署名鍵生成恒等式Ｇを上記のように逆ポーランド記法で表現し、それを配列Ｐとして表現する（ステップＳ１２０１）。
次に、ｉとｊを１に、ＣｈｋとＦｌａｇを０に、Ｎを配列Ｐのサイズに設定し、スタックにＰ［０］をプッシュする（ステップＳ１２０２）。ここで、ｉは、現在着目している配列のインデックスであり、ｊは現在スタックに積まれている分割結合鍵の個数を示す。また、Ｃｈｋは、配列中でどのインデックスまで演算子“＋”であるか否かを確認したかを示す。ここで、Ｃｈｋは、前述したｊを用いて、現在アクセスしている配列Ｐ［ｉ]からｊ−１個先の演算子が“＋”であるかどうかを判定し、“＋”演算子の有効区間内であるか判定する際に利用する。また、Ｆｌａｇは、“＋”演算子の有効な区間内であるか否かを示すフラグとして利用される。より具体的には、署名鍵生成恒等式Ｇの区切りポイントの判定に利用される。
【０１３３】
次に、Ｐ［ｉ］が結合分割鍵かどうか判別する（ステップＳ１２０３）。
ステップＳ１２０３の判別の結果が、「ＹＥＳ」すなわち結合分割鍵であれば、スタックにＰ［ｉ］の値をプッシュし、配列Ｐにおけるアクセスを１つ移すためにｉをインクリメントし、また、スタックに積まれる分割結合鍵の個数が増えるためｊをインクリメントする（ステップＳ１２０４）。
【０１３４】
そうでなく、判別の結果が「ＮＯ」であるなら、すなわち、Ｐ［ｉ］が演算子であれば、スタックに積まれている上位２つの結合分割鍵をポップし、それぞれをＶａｌ１、Ｖａｌ２とする（ステップＳ１２０５）。
【０１３５】
次に、ｉ＋ｊ−１がＣｈｋの値より大きいか、且つｉ＋ｊ−１がＮ以下かどうかを判定する（ステップＳ１２０６）。
ステップＳ１２０６の判定結果が「ＹＥＳ」であれば、Ｃｈｋをｉ＋ｊ−１の値に設定する。すなわち、配列Ｐのｉ＋ｊ−１番目まで“＋”であるかの判定が終了しているため、Ｃｈｋの値が更新される。そうでなく「ＮＯ」であれば、ステップＳ１２０８へ処理を移す。なお、ステップＳ１２０６にて、ｉ＋ｊ−１がＮ以下かどうかも確認しているのは、Ｃｈｋが配列のサイズを超えた箇所を示すことを防止するためである。
【０１３６】
次に、ｊ＞０かつＦｌａｇ＝１かつＰ［Ｃｈｋ］が“＋”演算子であるか判定する（ステップＳ１２０８）。
ステップＳ１２０８の判定結果が、「ＹＥＳ」であれば、Ｆｌａｇを０に設定する（ステップＳ１２０９）。
【０１３７】
そうでなく、判定の結果がＮＯであれば、処理「Ａ」へ処理を移す。
次に図１３を用いて、図１２のフローの続きについて説明する。
まず、Ｖａｌ１とＶａｌ２のパターンを判別する（ステップＳ１３０１）。
【０１３８】
ステップＳ１３０１の判別の結果、Ｖａｌ１、Ｖａｌ２両者が結合分割鍵の場合ステップＳ１３１０へ処理を移す。
そうでなく、ステップＳ１３０１の判別の結果、Ｖａｌ１、Ｖａｌ２のどちらか一方が結合分割鍵で、他方が署名ベキ乗中間値の場合、ステップＳ１３２０へ処理を移す。ここでの署名ベキ乗中間値とは、メッセージＭ１０を、少なくとも一つ以上の結合分割鍵でベキ乗した値を示し、署名Ｓ３０を算出する過程での中間値となるものである。具体的には、後述するＳ０やＳ１等がこれに当たる。
【０１３９】
そうでなく、ステップＳ１３０１の判別の結果、Ｖａｌ１、Ｖａｌ２の両者が署名ベキ乗中間値の場合、ステップＳ１３３０へ処理を移す。
ここから、Ｓ１３０１処理後にそれぞれ処理がＳ１３１０、Ｓ１３２０、Ｓ１３３０に分岐した際の、各処理以降の個別の処理について説明する。
【０１４０】
ここから、ステップＳ１３１０へ処理が移った場合について説明する。
まず、Ｆｌａｇを判別する（ステップＳ１３１０）。
ステップＳ１３１０の判別の結果、Ｆｌａｇ＝０、すなわち、“＋”演算子の有効区間内である場合は、ステップＳ１３１１へ処理を移す。
【０１４１】
次に、Ｐ［ｉ］の演算子を判別する（ステップＳ１３１１）。
ステップＳ１３１１の判別の結果、Ｐ［ｉ］が“＋”演算子であれば、ステップＳ１３１２へ処理を移す。
【０１４２】
そうでなくステップＳ１３１１の判別の結果、Ｐ［ｉ］が“＊”演算子であれば、ステップＳ１３１３へ処理を移す。
ステップＳ１３１２では、（Ｍ＾Ｖａｌ）＊（Ｍ＾Ｖａｌ２）  ｍｏｄ  ｎの値をスタックにプッシュする（ステップＳ１３１２）。
【０１４３】
ステップＳ１３１３では、（（Ｍ＾Ｖａｌ１）＾Ｖａｌ２）ｍｏｄ  ｎを演算した値をスタックにプッシュする（ステップＳ１３１３）。
ステップＳ１３１２、Ｓ１３１３の処理後、ｊ＝ｊ−２とし、ステップＳ１３４１へ処理を移す（ステップＳ１３１４）。ここで、ｊ＝ｊ−２としているのは、一連の計算により、結合分割鍵（Ｖａｌ１とＶａｌ２に当たる）が使用されたため、スタックに積まれる結合分割鍵の数が減少するためである。なお、ステップＳ１３１２、Ｓ１３１３で計算結果をスタックにプッシュしているが、この値は上述した署名ベキ乗中間値であって結合分割鍵ではないため、ｊは２つ減ることになる。
【０１４４】
ステップＳ１３４１においては、この区間に対する演算は終了したため、Ｆｌａｇは１に設定し直される（ステップＳ１３４１）。すなわちＦｌａｇが０と設定されている期間は、配列Ｐ［Ｃｈｋ］の場所の“＋”演算子で区切ることと判定されたときから、Ｓ１３１２、Ｓ１３１３の処理が実行され、ｊの値が更新されるまでの間であり、それ以外の処理はＦｌａｇ＝１の状態で各ステップが処理される。言い換えると、Ｆｌａｇ＝１の状態は、前回Ｐ［Ｃｈｋ］の“＋”演算子で区切れると判定されてから、次のＰ［Ｃｈｋ］の“＋”演算子で区切れると判定されるまで続くことになる。
【０１４５】
そうでなくステップＳ１３１０の判別の結果、Ｆｌａｇ＝１である場合、すなわち、演算子“＋”によって区切られる区間外である場合には、ステップＳ１３１５へ処理を移す。
【０１４６】
次に、ステップＳ１３１５では、Ｐ［ｉ］の演算子を判別する（ステップＳ１３１５）。
ステップＳ１３１５の判別の結果、Ｐ［ｉ］が“＋”演算子であれば、ステップＳ１３１６へ処理を移す。
【０１４７】
そうでなくステップＳ１３１５の判別の結果、Ｐ［ｉ］が“＊”演算子であれば、ステップＳ１３１７へ処理を移す。
ステップＳ１３１６では、Ｖａｌ１＋Ｖａｌ２を演算した結果をスタックにプッシュする（ステップＳ１３１６）。
【０１４８】
ステップＳ１３１７では、Ｖａｌ１＊Ｖａｌ２を演算した結果をスタックにプッシュする（ステップＳ１３１７）。なお、ここで、ステップＳ１３１６およびＳ１３１７においてプッシュする値も、また、分割結合鍵であると見なす。すなわち、ベキ乗中間値以外としてプッシュする値は、分割結合鍵であると見なすものとする。
【０１４９】
ステップＳ１３１６、Ｓ１３１７処理後、ステップＳ１３４０へ処理を移す。ステップＳ１３４０以降の処理については後述する。
ここまでが、Ｓ１３１０以降の個別の処理についての説明である。
【０１５０】
ここから、ステップＳ１３２０へ処理が移った場合、すなわち、Ｖａｌ１とＶａｌ２との組、結合分割鍵と署名ベキ乗中間値の組であった場合について説明する。
まず、Ｐ［ｉ］の演算子を判別する（ステップＳ１３２０）。
【０１５１】
ステップＳ１３２０の判別の結果、Ｐ［ｉ］が“＋”演算子であれば、ステップＳ１３２１へ処理を移す。
そうでなくステップＳ１３１１の判別の結果、Ｐ［ｉ］が“＊”演算子であれば、ステップＳ１３２２へ処理を移す。
【０１５２】
以下、まず、ステップＳ１３２１に分岐した場合の流れについて説明する。
ステップＳ１３２１では、結合分割鍵の値をＶａｌ１、ベキ乗中間値をＶａｌ２とし、（Ｍ＾Ｖａｌ１）＊Ｖａｌ２  ｍｏｄ  ｎを演算した値をスタックへプッシュする（ステップＳ１３２１）。
【０１５３】
ステップＳ１３２２では、結合分割鍵の値をＶａｌ２、ベキ乗中間値をＶａｌ１とし、Ｖａｌ１＾Ｖａｌ２  ｍｏｄ  ｎを演算した値をスタックにプッシュする（ステップＳ１３２２）。
【０１５４】
ステップＳ１３２１、Ｓ１３２２処理後は、ステップＳ１３４０へ処理を移す（ステップＳ１３４０）。なお、ステップＳ１３４０以降の処理については後述する。
ここまでが、Ｓ１３１０以降の個別の処理についての説明である。
【０１５５】
（Ｓ１３３０以降の個別処理）
ここから、ステップＳ１３３０へ処理が移った場合、すなわち、Ｖａｌ１、Ｖａｌ２の両者が署名ベキ乗中間値の場合について説明する。
【０１５６】
ステップＳ１３３０では、ベキ乗中間値であるＶａｌ１とＶａｌ２を利用し、Ｖａｌ１＊Ｖａｌ２  ｍｏｄ  ｎを演算した値をスタックにプッシュし、ステップＳ１３４１へ処理を移す（Ｓ１３３０）。
【０１５７】
ここまでが、Ｓ１３３０以降の個別の処理についての説明である。
以上でＳ１３１０、Ｓ１３２０、Ｓ１３３０以降個別のフローについて説明を終わる。
（Ｓ１３１０、Ｓ１３２０、Ｓ１３３０以降の共通処理）
ここからは、Ｓ１３１０、Ｓ１３２０、Ｓ１３３０以降で共通のフローとなる部分について説明する。
【０１５８】
ステップＳ１３１６あるいはＳ１３１７、もしくは、Ｓ１３２１あるいはＳ１３２２処理後、ｊをデクリメントし、そうでなれば何も処理せずステップＳ１３４１へ処理を移す（ステップＳ１３４０）。ここで、ｊをデクリメントするのは、ステップＳ１３１６あるいはＳ１３１７の場合は、結合分割鍵であるＶａｌ１とＶａｌ２を用い、結合分割鍵とみなされる値をプッシュしているため、差し引き１つの結合分割鍵が減ったためである。また、ステップＳ１３２１あるいはＳ１３２２の場合は、ベキ乗中間値と結合分割鍵とを用いて、新しいベキ乗中間値を生成しているため、この生成に使われた結合分割鍵がスタックからなくなるからである。
【０１５９】
ステップＳ１３１４、あるいはＳ１３４０処理後、Ｆｌａｇを１にセットし、ステップＳ１３４２へ処理を移す（ステップＳ１３４１）。
ステップＳ１３４１の処理後、ｉ＜Ｎかどうか判別する（ステップＳ１３４２）。
【０１６０】
ステップＳ１３４２での判別の結果が、「ＮＯ」であれば、配列Ｐの次の要素について同様の処理を続けるため、ステップＳ１３４３にてｉをインクリメントしＢへ処理を移す。
【０１６１】
そうでなく、ステップＳ１３４２での判別の結果が、「ＹＥＳ」であれば、署名の生成は完了しているため、スタックの値を署名Ｓ３０とし、署名Ｓ３０を出力（ステップＳ１３４４）し、署名生成を終了する。
【０１６２】
以上により、署名生成恒等式Ｇ’と結合分割鍵１４１を用いてメッセージＭ１０に対する署名Ｓ３０が生成される。
図１３では署名生成フローチャートについて説明した。ここでは、図１３のフローを利用した際のスタックの様子を図１４を用いて示す。
【０１６３】
図１４は、図１２と図１３で説明した署名生成フローにおけるスタックの様子を示した図である。
署名生成恒等式Ｇ１２１は、逆ポーランド記法で表現されたＰに対して署名生成を順に説明する。
【０１６４】
まず、Ｐ［１３］＝｛ＣＤ１，ＣＤ２，＊，ＣＤ３，ＣＤ４，＊，＋，ＣＤ５，ＣＤ６，ＣＤ７，＋，＊，＋｝より、Ｐ［０］である結合分割鍵ＣＤ１と、Ｐ［１］である結合分割鍵ＣＤ２をスタックにプッシュする（ステップＳ１４０１）。このとき、ｉとｊはともに２であり、ｉ＋ｊ−１は３であるため、Ｃｈｋの値は３に設定される。
【０１６５】
次にＰ［２］が演算子“＊”であるので、スタックの上位２つの値をポップし、Ｆｌａｇ＝０かつ演算子“＊”であるので、（Ｍ＾ＣＤ１）＾ＣＤ２  ｍｏｄ  ｎをＳ０とし、Ｓ０をスタックにプッシュする（ステップＳ１４０２）。この処理が終わった段階で、ｉ＝２、ｊ＝０、Ｃｈｋ＝３となる。また、ステップＳ１３４１の動作により、Ｆｌａｇの値は１に戻される。
【０１６６】
次に、Ｐ［３］である結合分割鍵ＣＤ３とＰ［４］である結合分割鍵ＣＤ４をスタックにプッシュする（ステップＳ１４０３）。このとき、ｉ＝４、ｊ＝２となり、Ｃｈｋの値は５に更新される。なお、Ｐ［Ｃｈｋ］は演算子“＋”でないため、Ｆｌａｇの値は１のままである。
【０１６７】
次に、Ｐ［５］が演算子“＊”であるため、スタックの上位２つの値をポップし、また、ｉ＝５、ｊ＝２であるので、Ｃｈｋが６に更新される。ここで、Ｐ［Ｃｈｋ］の演算子は、“＋”であるので、Ｆｌａｇの値は０に更新される。Ｆｌａｇ＝０かつＰ［５］の演算子が“＊”であるので、（Ｍ＾ＣＤ３）＾ＣＤ４  ｍｏｄ  ｎをＳ１とし、Ｓ１をスタックにプッシュし、Ｆｌａｇを１に更新する（ステップＳ１４０４）。この処理が終わった段階で、ｉ＝５、ｊ＝０、Ｃｈｋ＝６、Ｆｌａｇ＝１となる。
【０１６８】
次にＰ［６］が演算子“＋”であり、Ｆｌａｇ＝１であるので、スタックの上位２つの値Ｓ０とＳ１をポップし、Ｓ０＊Ｓ１  ｍｏｄ  ｎの演算結果をＳ２とし、Ｓ２をスタックにプッシュする。
【０１６９】
次に、Ｐ［７］、Ｐ［８］、Ｐ［９］に相当する結合分割鍵ＣＤ５、ＣＤ６、ＣＤ７を順にスタックにプッシュする（スタックＳ１４０５）。
次に、Ｐ［１０］が演算子“＋”であり、このときのｉの値は１０でｊの値は３であり、Ｆｌａｇ＝１かつＰ［１２］＝“＋”であるので、Ｆｌａｇを０に設定する。その後、スタックの上位２つの値ＣＤ６とＣＤ７をポップし、Ｆｌａｇ＝０かつ演算子“＋”であるので、（Ｍ＾ＣＤ６）＊（Ｍ＾ＣＤ７）  ｍｏｄ  ｎを演算した値をＳ３とし、Ｓ３をスタックにプッシュする（ステップＳ１４０６）。
【０１７０】
次に、Ｐ［１１］が演算子“＊”であるので、スタックの上位２つのＳ３とＣＤ５をポップする。このときＳ３が署名ベキ乗中間値であり、ＣＤ５が結合分割鍵であり、演算子“＊”であるので、Ｓ３＾ＣＤ５  ｍｏｄ  ｎを演算した値をＳ４とし、スタックにプッシュする（ステップＳ１４０７）。
【０１７１】
次に、Ｐ［１２］が演算子“＋”であるので、スタックの上位２つのＳ２とＳ４をポップする。このとき、Ｓ２とＳ４は共に署名ベキ乗中間値であるのでＳ２＊Ｓ４  ｍｏｄ  ｎを演算した結果スタックにプッシュする（ステップＳ１４０８）。
【０１７２】
以上により、Ｓ２＊Ｓ４  ｍｏｄ  ｎを演算した結果を署名Ｓ３０とし、署名Ｓ３０を出力し署名生成終了となる。
このように、本実施の形態では、署名鍵Ｄ２１の値を一切利用せず、署名Ｓ３０を生成することが可能である。さらに、結合分割鍵１４１が、署名生成時に動的に生成されるので、毎回異なる結合分割鍵を用いて署名生成が可能となる。さらに、署名鍵Ｄだけでなく、ＲＳＡ署名における秘密情報（ｐ、ｑ）の値も一切利用せず署名生成が可能となる。また、署名生成恒等式Ｇも署名生成処理の実行の度に毎回異なるため、ランタイムデータの収集結果の差分をとっても、署名鍵ｄを算出するための鍵候補となる結合分割鍵特定は困難である。さらに、結合分割鍵が特定されたとしても、結合分割鍵から署名鍵Ｄを求めるためには、署名鍵生成式Ｇを特定する必要があり、署名鍵生成恒等式Ｇの取りうるパターンを総当りで解析しなければならなく、署名鍵Ｄの解析は非常に困難になる。さらに、署名生成フローも毎回異なるため、署名生成時の電力と署名生成処理時間も変化するので、電力差分攻撃やタイミング攻撃に対しても安全であるという効果も有する。
【０１７３】
なお、本実施の形態１において、結合分割鍵１４１の生成をランダムシャッフルやランダムグループ分け、そしてマトリックス表現を用いて署名鍵生成恒等式Ｇを生成したが、これらはあくまで一実施例であり、署名鍵生成式Ｆ２１から、交換法則、結合法則、分配法則などを用いて、署名鍵生成恒等式Ｇが生成されればよく、本実施の形態で説明した方法以外の方法でも良い。
【０１７４】
なお、本実施の形態１では、予め分割鍵格納手段に記憶された分割鍵同士を結合演算することで結合分割鍵を生成しているが、結合分割鍵生成手段で生成される結合分割鍵は、結合分割鍵同士を結合演算した値でもよい。このようにすると、結合分割鍵の取りうる値のバリエーションが増加するため、署名鍵Ｄの特定をさらに困難にさせる効果がある。
【０１７５】
なお、本実施の形態１では、予め分割鍵格納手段に記憶された分割鍵同士を結合演算することで結合分割鍵を生成しているが、署名鍵Ｄを用いた署名生成結果である署名Ｓと同じ結果を生成することが出きればよく、同じ結果を生成する処理に影響を与えないような冗長な鍵を用いて、処理を行ってもよい。また冗長鍵は、乱数を発生させた値としてもよい。乱数値をはじめとした冗長鍵を利用した場合、署名鍵生成恒等式で生成される式もこの値を含むようにしてもよい。このように冗長な鍵を利用することにより、本来の処理では必要としない情報を利用することで、不正解析者による解析をさらに困難させる効果がある。
【０１７６】
（実施の形態２）
本発明の実施の形態２について、以下に説明する。
実施の形態１では、ＲＳＡ署名生成における本発明の実施例を説明したが、本実施の形態２では、ＥＣＤＳＡ（Ｅｌｌｉｐｔｉｃ  Ｃｕｒｖｅ  Ｄｉｇｉｔａｌ  Ｓｉｇｎａｔｕｒｅ  Ａｌｇｏｒｉｔｈｍ）に適用した例について説明する。ＥＣＤＳＡは、楕円曲線上の離散対数問題に基づいて考案された署名方法である。ＥＣＤＳＡ自体は公知技術であるため、詳細な説明は省略し、ＥＣＤＳＡに対して本発明を適用した場合の実施例を以下で説明する。なお、下記の図１５の説明において、分割乱数情報や結合乱数情報等を用いて、メモリ上に秘密情報が現れないように計算する処理を除いた処理フローが、通常のＥＣＤＳＡ署名の生成フローにあたる。
【０１７７】
図１５は、本発明を適用した場合のＥＣＤＳＡのフロー概要について説明した図である。
なお、本発明を適用した場合の署名生成装置１００の構成、及び署名鍵生成恒等式Ｇ１２１と結合分割鍵１４１の作成方法は、実施の形態１と同じなので説明を省略する。
【０１７８】
本実施の形態２では、ＥＣＤＳＡに適用した際に、本実施の形態１と異なる部分について説明する。
ＥＣＤＳＡにおける署名生成式は、次式で示される。
【０１７９】
Ｓ  ＝  （ｈ＋ｒ＊ｄ）／ｋ  ｍｏｄ  ｑ
ここで、Ｓは署名であり、ｄは署名鍵であり、ｒはベースポイントＰのｋ倍点のｘ座標であり、ｑはベースポイントＰの位数である。
【０１８０】
また、ｈはＭのハッシュ値でありｈ＝Ｈａｓｈ（Ｍ）と表され、Ｍは署名生成対象メッセージであり、Ｈａｓｈ（Ｍ）は、署名生成対象メッセージＭのハッシュ値を計算することを示す。
【０１８１】
ＥＣＤＳＡで、秘密にしなければならない情報は、ステップＳ１５０２で利用される乱数ｋと、ステップＳ１５０４で利用される署名鍵ｄの値である。ここで、乱数ｋを秘密にしなければならない理由は、署名対象メッセージＭと署名（ｒ、Ｓ）を知り得た場合、次式より署名鍵ｄを計算できるからである。
【０１８２】
ｈ＝Ｈａｓｈ（Ｍ）
ｄ＝（ｋ＊Ｓ−ｈ）／ｒ  ｍｏｄ  ｑ
以降、図１５を用いて、署名鍵ｄと乱数ｋの２つの情報を秘密にした場合の、ＥＣＤＳＡの署名生成フローについて説明する。なお、署名生成装置１００は、図１の署名生成装置１００では図示していないが、楕円曲線のシステムパラメータ（ｙ＾２＝ｘ＾３＋ａ＊ｘ＋ｂ、定義体ＧＦ（ｐ）、ベースポイントＰ、ベースポイントＰの位数ｑ）を保持しており、乱数を生成する乱数生成手段を備えているものとする。
【０１８３】
まず、署名生成対象メッセージＭに対して、ハッシュ値Ｈａｓｈ（Ｍ）を計算し、そのハッシュ値をｈとする（ステップＳ１５０１）。
次に、楕円曲線のベースポイントＰに対して乱数ｋを発生させ、Ｐのｋ倍点を計算し、ｋ倍した点をＲとする（ステップＳ１５０２）。このとき、乱数ｋは、秘密情報であるので、乱数ｋの値がメモリに直接現れないように、複数の分割乱数情報を生成し、生成した分割乱数情報のみを用いてＰのｋ倍点を計算する。ステップＳ１５０２におけるこの処理については、後に図１６を用いて詳細に説明する。
【０１８４】
次に、Ｒのｘ座標の値をｒとする（ステップＳ１５０３）。
次に、乱数ｋと署名鍵ｄを用いた式Ｓ  ＝  （ｈ＋ｒ＊ｄ）/ｋ  ｍｏｄ  ｑと恒等な演算を、乱数ｋと署名鍵ｄの値を直接メモリ上に保持することなく、代わりに分割乱数情報と、署名鍵ｄを予め分割した分割鍵とをメモリ上に保持し、これらを用いて署名Ｓを生成する（ステップＳ１５０４）。
【０１８５】
ステップＳ１５０４におけるこの処理については、後に図１７を用いて詳細に説明する。
最後に、ステップＳ１５０３とＳ１５０４の結果から（ｒ，Ｓ）のペアを署名として出力し、ＥＣＤＳＡの署名生成を終了する。
【０１８６】
次に、ステップＳ１５０２の詳細について、図１６に示すフローチャートを用いて説明する。
まず、ｍ個のランダムな式Ｒ１…Ｒｍを生成し、その積を演算する乱数生成式Ｔを作成する。ここで、Ｒ１…Ｒｍの積が乱数ｋにあたる（ステップＳ１６０１）。
【０１８７】
Ｔ  ＝  Ｒ１＊Ｒ２＊…Ｒｍ
更に、Ｒ１…Ｒｍのそれぞれを更に細かな値（分割乱数情報）の和に分割する。
Ｔ  ＝  Σｔ（１，ｈ）＊Σｔ（２，ｉ）＊…＊Σｔ（ｍ，ｊ）…（式Ｔ）
ここで、
Σｔ（１，ｈ）＝ｔ（１，１）＋ｔ（１，２）＋…＋ｔ（１，ｈ）
Σｔ（２，ｉ）＝ｔ（２，１）＋ｔ（２，２）＋…＋ｔ（２，ｉ）
・・・
Σｔ（ｍ，ｊ）＝ｔ（ｍ，１）＋ｔ（ｍ，２）＋…＋ｔ（ｍ，ｊ）
である。
【０１８８】
ｔ（１，１）、ｔ（１，２）、…、ｔ（１，ｈ）は、それぞれが分割乱数情報であり、式Σｔ（１，ｈ）はｈ個の分割乱数情報の和を表す。
また、ｈ、ｉ、ｊ…は、任意の数である。
【０１８９】
次に、乱数生成式Ｔの項であるΣｔ（１，ｈ）、Σｔ（２，ｉ）、・・・、Σｔ（ｍ，ｊ）に用いられている分割乱数情報ｔ（ｘ，ｙ）すなわちｔ（１，１）、ｔ（１，２）、・・・、ｔ（１，ｈ）、ｔ（２，１）、・・・、ｔ（２，ｉ）、ｔ（ｍ，１）、・・・、ｔ（ｍ，ｊ）のそれぞれに対して、乱数を生成してセットする（ステップＳ１６０２）。
【０１９０】
次に、Σｔ（１，ｈ）、Σｔ（２，ｉ）、・・・Σｔ（ｍ，ｊ）の値がそれぞれｑと互いに素かどうか判定する（ステップＳ１６０３）。
ここで、「ｑと互いに素となる」という条件は、乱数ｋが逆元を持つために必要な条件である。
【０１９１】
ステップＳ１６０３の判定の結果が、「ＮＯ」であればステップＳ１６０２へ処理を戻し、上述した乱数の生成とセットを再度行う。
そうでなくステップＳ１６０３の判定の結果が、「ＹＥＳ」であれば、乱数生成式Ｔと恒等な乱数生成恒等式Ｕを作成する（ステップＳ１６０４）。
【０１９２】
ステップＳ１６０４における、乱数生成式Ｔから乱数生成恒等式Ｕの作成は、実施の形態１における署名鍵生成式Ｆ２１から署名鍵生成恒等式Ｇ１２１を生成する方法と同様の方法で行うことができるため説明を省略する。
【０１９３】
次に乱数生成恒等式Ｕに基づき結合乱数情報を作成する（ステップＳ１６０５）。ここで、結合乱数情報は、実施の形態１における結合分割鍵に相当する。したがって、ステップＳ１６０５の結合乱数情報の作成方法は、実施の形態１における結合分割鍵の作成と同様であるので、説明を省略する。
【０１９４】
次に、乱数生成恒等式ＵとステップＳ１６０５で作成された結合乱数情報を用いて、ベースポイントＰのＵ倍点Ｕ＊Ｐを計算し、その計算結果をＲとする（ステップＳ１６０６）。
【０１９５】
このとき、乱数生成恒等式Ｕの式に結合乱数情報の値を代入して算出された結果は、ＥＣＤＳＡの本来のアルゴリズムで利用される乱数ｋに対応する。すなわち、Ｓ１５０２の乱数ｋに対応する値を直接メモリに出現させることなく、複数の分割乱数を結合演算した値である結合乱数情報のみ利用してＰのＵ倍点を算出することができる。
【０１９６】
ステップＳ１６０６は、楕円曲線上の点同士の加算および、点のｎ倍点演算を行う。ここで、この計算を、実施の形態１との対応で説明すると、実施の形態１ではＲＳＡの署名生成処理のベキ乗演算における「ベキ乗演算」が楕円曲線上の「ｎ倍点演算」に、ＲＳＡの署名生成処理の「乗算」が楕円曲線上の加算に対応する。したがって、ＲＳＡの署名生成フローにおいて、適用する演算の種類を変更したフローにより、楕円曲線上の点同士の加算およびｎ倍点演算を行うことができる。
【０１９７】
ここで、理解の容易化のため、ステップＳ１６０１〜Ｓ１６０６までについて、具体例をあげて説明する。
まず、ステップＳ１６０１において、上述した方法で生成した乱数生成式Ｔが以下の式であるとする。
【０１９８】
Ｔ  ＝  Σｔ（１，４）＊Σｔ（２，４）…（式Ｔ）
Σｔ（１，４）＝ｔ（１，１）＋ｔ（１，２）＋ｔ（１，３）＋ｔ（１，４）
Σｔ（２，４）＝ｔ（２，１）＋ｔ（２，２）＋ｔ（２，３）＋ｔ（２，４）
次に、ｔ（１，１）、ｔ（１，２）、…、ｔ（１，４）、ｔ（２，１）、ｔ（２，２）、…、ｔ（２、４）のそれぞれに乱数値を設定する（ステップＳ１６０２）。
【０１９９】
このとき、Σｔ（１，４）とΣｔ（２，４）とが互いに素になるまで、乱数値の設定をやり直す（ステップＳ１６０３）。
続いて、乱数生成恒等式Ｕを、
乱数生成式Ｔ＝（ｔ（１，１）＋ｔ（１，２）＋ｔ（１，３）＋ｔ（１，４））
＊（ｔ（２，１）＋ｔ（２，２）＋ｔ（２，３）＋ｔ（２，４））
から、交換法則、結合法則、分配法則を利用し、例えば、
Ｔ  ＝  （（（ｔ（１，１）＋ｔ（１，３））＋（（ｔ（１，２）＋ｔ（１，４）））
＊（（ｔ（２，１）＋ｔ（２，３））
＋（（（ｔ（１，１）＋ｔ（１，４））＋（（ｔ（１，２）＋ｔ（１，３）））
＊（（ｔ（２，２）＋ｔ（２，４））
のように恒等変換し、引数ｕ１〜ｕ６を
ｕ１＝ｔ（１，１）＋ｔ（１，３）
ｕ２＝ｔ（１，２）＋ｔ（１，４）
ｕ３＝ｔ（２，１）＋ｔ（２，３）
ｕ４＝ｔ（１，１）＋ｔ（１，４）
ｕ５＝ｔ（１，２）＋ｔ（１，３）
ｕ６＝ｔ（２，２）＋ｔ（２，４）と設定する（ステップＳ１６０５）。
【０２００】
このようにすると乱数生成恒等式Ｕは、
Ｕ（ｕ１，ｕ２，ｕ３，ｕ４，ｕ５，ｕ６）
＝  （ｕ１＋ｕ２）＊ｕ３＋（ｕ４＋ｕ５）＊ｕ６となる。
【０２０１】
引数ｕ１には、結合乱数情報Ｕ１が代入され、引数ｕ２には、結合乱数情報Ｕ２が代入され、同様に、引数ｕ３〜ｕ６には、結合乱数情報Ｕ３〜Ｕ６が代入される。
Ｕ  ＝  （Ｕ１＋Ｕ２）＊Ｕ３＋（Ｕ４＋Ｕ５）＊Ｕ６
また、ベースポイントＰのＵ倍点Ｕ＊Ｐは、
Ｕ＊Ｐ  ＝  Ｕ３＊（Ｕ１＊Ｐ＋Ｕ２＊Ｐ）＋Ｕ６＊（Ｕ４＊Ｐ＋Ｕ５＊Ｐ）
で計算可能となる。
【０２０２】
ここで、乱数生成式Ｔと乱数生成恒等式Ｕとは恒等であるため、Ｕ＊Ｐは、Ｔ＊Ｐと同一の結果となる。さらに、Ｔは乱数ｋを計算する乱数生成式であるので、乱数ｋやその生成に用いる乱数生成式Ｔそのものをメモリ上に乗せることなく、Ｐのｋ倍点を計算することが可能となる。また、乱数生成恒等式Ｕや対応する結合乱数情報等は毎回ランダムに生成されるため、乱数ｋの値の解析を困難にすることができる。これにより、実施の形態２の署名生成装置は、ＥＣＤＳＡ署名生成フローの解析を困難にすることができる。
【０２０３】
続いて、図１７を用いて、図１５のステップＳ１５０４の詳細フローを説明する。
まず、ランダムな値をｍ個生成し、それぞれを分割冗長鍵ｄｕ１、ｄｕ２、…、ｄｕｍとし、各分割冗長鍵を加算したｄｕ１＋ｄｕ２＋…＋ｄｕｍを分割冗長鍵生成式Ｄｕとする（ステップＳ１７０１）。
【０２０４】
Ｄｕ  ＝  ｄｕ１＋ｄｕ２＋…＋ｄｕｍ  …（式Ｄｕ）
これは、式  Ｓ  ＝  （ｈ＋ｒ＊ｄ）/ｋ  ｍｏｄ  ｑにおける、１／ｋをメモリ上に直接現すことなく計算するためのものである。
【０２０５】
即ち、
１／ｋ  ＝  Ｄｕ／（Ｄｕ＊ｋ）
＝  ｄｕ１／（Ｄｕ＊ｋ）＋  ｄｕ２／（Ｄｕ＊ｋ）  ＋・・・＋ｄｕｍ／（Ｄｕ＊ｋ）
であり、かつ、Ｓ１５０２で生成したＵはｋと等価であるので、１／ｋの代わりに、
ｄｕ１／（Ｄｕ＊Ｕ）＋  ｄｕ２／（Ｄｕ＊Ｕ）  ＋・・・＋ｄｕｍ／（Ｄｕ＊Ｕ）
を計算すればよい。
【０２０６】
さらに、上式のＤｕ＊Ｕを式Ａとし、Ｄｕ＊Ｕを、Ｄｕ＊Ｕと恒等な式Ｂ１、Ｂ２・・・Ｂｍで置き換えると
１／ｋ  ＝  （ｄｕ１／Ｂ１）＋  （ｄｕ２／Ｂ２）  ＋・・・＋  （ｄｕｍ／Ｂｍ）となり
この（ｄｕ１／Ｂ１）をＣ１に置き換え、同様に（ｄｕ２／Ｂ２）をＣ２に・・・（ｄｕｍ／Ｂｍ）をＣｍに置き換えると、
１／ｋ  ＝  Ｃ１＋Ｃ２＋・・・Ｃｍ
となる。
【０２０７】
結局、署名Ｓを計算するためには、
Ｓ  ＝  （ｈ／ｋ  ＋  ｒ＊ｄ／ｋ）  ｍｏｄ  ｎ
＝  （ｈ＊（Ｃ１＋Ｃ２＋・・・＋Ｃｍ）
＋  ｒ＊Ｆ＊（Ｃ１＋Ｃ２＋…＋Ｃｍ））  ｍｏｄ  ｎ
＝  （ｈ＊（Ｃ１＋Ｃ２＋・・・＋Ｃｍ）
＋  ｒ＊Ｈ）  ｍｏｄ  ｎ
を計算すればよいことになる。
【０２０８】
ここで、上式におけるＦは、実施の形態１において示した下式
Ｆ（ｄ１，ｄ２，ｄ３，ｄ４，ｄ５，ｄ６，ｄ７，ｄ８）
＝（ｄ１＋ｄ２＋ｄ３＋ｄ４）＊（ｄ５＋ｄ６＋ｄ７＋ｄ８）
を示すものである。
【０２０９】
また、Ｈは、式  Ｆ＊（Ｃ１＋Ｃ２＋…＋Ｃｍ）と恒等な式であり、Ｆは、上述の署名鍵生成式である。
以下、ステップＳ１７０２以降のフローチャートの説明に戻る。
【０２１０】
次に、分割冗長鍵生成式Ｄｕの値がｑと互いに素かどうか判定する（ステップＳ１７０２）。
ステップＳ１７０２の判定の結果が「ＮＯ」であれば、さらに別のｄｕ１…ｄｕｍを生成するために、ステップＳ１７０１へ処理を戻す。
【０２１１】
そうでなく、ステップＳ１７０２の判定の結果が「ＹＥＳ」であれば、ステップＳ１５０２で求めた乱数生成恒等式Ｕと分割冗長鍵生成式Ｄｕを乗算した式Ｕ＊ＤｕをＡとし、Ａと恒等な式をｍ個生成し、Ｂ１、Ｂ２、…、Ｂｍとする（ステップＳ１７０３）。
【０２１２】
ステップＳ１７０３で生成した恒等式Ｂ１、Ｂ２、…、Ｂｍに基づき、結合分割鍵ｂｉｊ（ｉ、ｊ＝１、２、…）を生成する（ステップＳ１７０４）。
ステップＳ１７０３とＳ１７０４は、Ａを実施の形態１における署名鍵生成式Ｆ２１と見て、Ａの式を構成している分割冗長鍵ｄｕ１、ｄｕ２、…、ｄｕｍおよびステップＳ１５０４にて作成した結合乱数情報Ｕ１、Ｕ２、…、Ｕｉを分割鍵１１１と見て、実施の形態１と同様の処理を行うことにより、恒等式Ｂ１、Ｂ２、…、Ｂｍ、および、それぞれの恒等式に対応する結合分割鍵ｂｉｊ（ｉ，ｊ＝１，２，…）を生成することができる。
【０２１３】
なお、実施の形態１では、署名鍵生成恒等式Ｇ１２１は１つしか作成しなかったが、ここでは、署名鍵生成恒等式Ｇ１２１に相当する恒等式Ｂ１等をｍ個生成し、それぞれについて結合分割鍵の組をｍ組作成する。
【０２１４】
次に、ステップＳ１７０１で生成したｍ個の分割冗長鍵ｄｕ１、ｄｕ２、…、ｄｕｍとｍ個の恒等式Ｂ１、Ｂ２、…、Ｂｍを用いて、次のようなｍ個のＣ１、Ｃ２、…、Ｃｍを作成する（ステップＳ１７０５）。
【０２１５】
Ｃ１＝ｄｕ１／Ｂ１
Ｃ２＝ｄｕ２／Ｂ２
…
Ｃｍ＝ｄｕｍ／Ｂｍ
このとき、Ｃ１＋Ｃ２＋…＋Ｃｍは、Ｂ１、Ｂ２、Ｂｍは共にＡと恒等であることと、Ｄｕ＝ｄｕ１＋ｄｕ２＋…＋ｄｕｍである性質を利用して、以下のように式変形できる。
【０２１６】
Ｃ１＋Ｃ２＋…＋Ｃｍ
＝（ｄｕ１／Ｂ１）＋（ｄｕ２／Ｂ２）＋…＋（ｄｕｍ／Ｂｍ）
＝（（ｄｕ１＋ｄｕ２＋…＋ｄｕｍ）／Ａ
＝（ｄｕ１＋ｄｕ２＋…＋ｄｕｍ）／Ｕ＊Ｄｕ
＝１／Ｕ
Ｕは、ステップＳ１５０２の乱数ｋに相当するため、１／Ｕ  ｍｏｄ  ｑの値は、ｋ＾−１  ｍｏｄ  ｑに相当することになる。これにより、ｋ＾−１  ｍｏｄ  ｑの値を、ｋの値そのものはメモリに乗せることなく計算することができる。
【０２１７】
また、恒等式Ｂ１…Ｂｍや分割冗長鍵ｄｕ１、ｄｕ２…ｄｕｍ等はランダムに生成されるため、ｋ＾−１  ｍｏｄ  ｑの計算過程を署名生成を行うたびに動的に変化させることができる。これにより、実施の形態２の署名生成装置は、ＥＣＤＳＡ署名生成フローの解析を、困難にすることができる。
【０２１８】
次に、署名鍵生成式ＦとステップＳ１７０５で生成したｍ個のＣｉ（ｉ＝１，２，…，ｍ）式を用いて、（式Ｅ）を生成する（ステップＳ１７０６）。
Ｆ＊（Ｃ１＋Ｃ２＋…＋Ｃｍ）…（式Ｅ）
次に、（式Ｅ）と恒等な（式Ｈ’）を生成する（ステップＳ１７０７）。
【０２１９】
次に、（式Ｈ’）に基づき、署名鍵生成式Ｆの要素である分割鍵と、Ｃ１、Ｃ２、…、Ｃｍの要素値に対して、実施の形態１で説明したフローを用いて結合演算し、結合演算した値を結合分割鍵とする（ステップＳ１７０８）。なお、ステップＳ１８０７およびステップＳ１７０８の処理は、実施の形態１における署名鍵生成式Ｆ２１を（式Ｅ）と、Ｃ１、…、Ｃｍの要素値と署名鍵生成式Ｆ２１の要素値ｄｉとを実施の形態１における署名鍵生成式Ｆ２１の要素値ｄｉと見ることにより、実施例１と同様の処理となるため、詳細な説明は省略する。このようにすると恒等式Ｈ’は、結合分割鍵を用いたＨとして表すことができる。
【０２２０】
これにより、恒等式Ｈに対応する結合分割鍵ｈｉは毎回ランダムに生成されることになるため、ＥＣＤＳＡ署名生成フローの解析を、困難にすることができる。
次にステップＳ１５０１で算出したハッシュ値ｈと、ステップＳ１７０５で生成した式Ｃ１、Ｃ２、…、Ｃｍと、ステップＳ１７０７で生成した恒等式Ｈと、ステップＳ１５０３で算出した点ＲのＸ座標の値ｒを用いて、
Ｓ  ＝  （ｈ＋ｒ＊ｄ）／ｋ  ｍｏｄ  ｑ
と恒等な演算を、
Ｓ  ＝  ｈ＊（Ｃ１＋Ｃ２＋…＋Ｃｍ）＋ｒ＊Ｈ  ｍｏｄ  ｑ
上式で算出し、算出値をＳとする（ステップＳ１７０９）。
【０２２１】
以上まとめて、実施の形態２の署名生成装置は、乱数値ｋの値および署名鍵ｄの値を直接メモリに出すことなく、署名Ｓを生成することができる。
なお、ステップＳ１７０９の演算においては、ｈ＊（Ｃ１＋Ｃ２＋…＋Ｃｍ）の演算結果値が直接メモリに出ないような順序で演算することが望ましい。
【０２２２】
なぜならｈ＊（Ｃ１＋Ｃ２＋…＋Ｃｍ）の値から、乱数情報であるｋを復元することが可能となるためである。
演算順序については、具体例を後述するので、ここでの説明は省略する。
【０２２３】
続いて、図１７のフローを具体例を上げて説明する。
まず、３個の乱数を生成し、それぞれを分割冗長鍵ｄｕ１、ｄｕ２、ｄｕ３とし、
Ｄｕ＝ｄｕ１＋ｄｕ２＋ｄｕ３
とする（ステップＳ１７０１）。
【０２２４】
ここで、Ｄｕがｑと互いに素でない場合には、Ｄｕとｑとが互いに素になるまで分割冗長鍵の生成を繰り返す（ステップＳ１７０２）。
続いて、乱数生成恒等式Ｕを用いた計算の説明に移るが、以下の説明においては、乱数生成恒等式Ｕは、図１６の説明にて生成した以下の（式Ｕ）とする。
【０２２５】
Ｕ  ＝  （Ｕ１＋Ｕ２）＊Ｕ３＋（Ｕ４＋Ｕ５）＊Ｕ６…（式Ｕ）
このとき、（式Ａ）は、例えば、以下のようになる。
（（Ｕ１＋Ｕ２）＊Ｕ３＋（Ｕ４＋Ｕ５）＊Ｕ６）
＊（ｄｕ１＋ｄｕ２＋ｄｕ３）                …（式Ａ）
次に、（式Ａ）と恒等な（式Ｂ１）、（式Ｂ２）、（式Ｂ３）を生成する。
【０２２６】
恒等式Ｂ１の計算手順としては、まず、次のような式Ａの恒等式１を生成し、
（（（Ｕ１＋Ｕ２）＊Ｕ３）＋（（Ｕ４＋Ｕ５）＊Ｕ６））＊（ｄｕ１＋ｄｕ２）
＋（（Ｕ１＋Ｕ２）＊Ｕ３＋（Ｕ４＋Ｕ５）＊Ｕ６）＊ｄｕ３
生成した恒等式１に基づいて結合分割鍵をそれぞれ以下のようにする。
【０２２７】
ｂ１１＝（Ｕ１＋Ｕ２）＊Ｕ３
ｂ１２＝（Ｕ４＋Ｕ５）＊Ｕ６
ｂ１３＝ｄｕ１＋ｄｕ２
ｂ１４＝（Ｕ１＋Ｕ２）＊Ｕ３＋（Ｕ４＋Ｕ５）＊Ｕ６
ｂ１５＝ｄｕ３
すると、恒等式Ｂ１は、式Ａの恒等式１と上記結合分割鍵を用いて以下の（式Ｂ１）になる。
【０２２８】
（ｂ１１＋ｂ１２）＊ｂ１３＋ｂ１４＊ｂ１５…（式Ｂ１）
同様に、恒等式Ｂ２の計算手順は、まず、以下のような式Ａの恒等式２を生成し、
（Ｕ１＊Ｕ３＋Ｕ２＊Ｕ３＋Ｕ４＊Ｕ６＋Ｕ５＊Ｕ６）
＊（（ｄｕ１）＋（ｄｕ２＋ｄｕ３））
生成した恒等式Ｂ２について、結合分割鍵をそれぞれ以下のようにする。
【０２２９】
ｂ２１＝Ｕ１＊Ｕ３
ｂ２２＝Ｕ２＊Ｕ３
ｂ２３＝Ｕ４＊Ｕ６
ｂ２４＝Ｕ５＊Ｕ６
ｂ２５＝ｄｕ１
ｂ２６＝ｄｕ２＋ｄｕ３
すると、恒等式Ｂ２は、式Ａの恒等式２と上記結合分割鍵を用いて以下の（式Ｂ２）になる。
【０２３０】
Ｂ２  ＝  （ｂ２１＋ｂ２２＋ｂ２３＋ｂ２４）＊（ｂ２５＋ｂ２６）…（式Ｂ２）
さらに同様にして、恒等式Ｂ３の生成手順としては、まず、以下のような式Ａの恒等式３を生成し、
（（Ｕ１＊Ｕ３＋Ｕ４＊Ｕ６）＋（Ｕ２＊Ｕ３＋Ｕ５＊Ｕ６））
＊（ｄｕ１＋ｄｕ２＋ｄｕ３）
生成した恒等式３に応じて、結合分割鍵をそれぞれ以下のようにする。
【０２３１】
ｂ３１＝Ｕ１＊Ｕ３＋Ｕ４＊Ｕ６
ｂ３２＝Ｕ２＊Ｕ３＋Ｕ５＊Ｕ６
ｄ３３＝ｄｕ１＋ｄｕ２＋ｄｕ３
すると、恒等式Ｂ３は、式Ａの恒等式３と上記結合分割鍵を用いて以下の式Ｂ３になる。
【０２３２】
（ｂ３１＋ｂ３２）＊ｂ３３…（式Ｂ３）
続いて、生成した（式Ｂ１）、（式Ｂ２）、（式Ｂ３）を用い、ステップＳ１７０５にて、以下の３式Ｃ１、Ｃ２、Ｃ３が生成される。
【０２３３】
Ｃ１＝ｄｕ１／Ｂ１＝ｄｕ１／（（ｂ１１＋ｂ１２）＊ｂ１３＋ｂ１４＊ｂ１５）…（式Ｃ１）
Ｃ２＝ｄｕ２／Ｂ２＝ｄｕ２／（（ｂ２１＋ｂ２２＋ｂ２３＋ｂ２４）＊（ｂ２５＋ｂ２６））…（式Ｃ２）
Ｃ３＝ｄｕ３／Ｂ３＝ｄｕ３／（（ｂ３１＋ｂ３２）＊ｂ３３）…（式Ｃ３）
このとき、上述したように、Ｃ１＋Ｃ２＋Ｃ３＝ｋ＾（−１）  ｍｏｄ  ｑが成り立つことになる。
【０２３４】
ここで、ＥＣＤＳＡの署名鍵ｄは８個の分割鍵に分割されており、署名鍵生成式Ｆは以下のような（式Ｆ）であるとする。
Ｆ  ＝  （ｄ１＋ｄ２＋ｄ３＋ｄ４）＊（ｄ５＋ｄ６＋ｄ７＋ｄ８）…（式Ｆ）
このとき、次にステップＳ１７０６にて生成される（式Ｅ）は、
（ｄ１＋ｄ２＋ｄ３＋ｄ４）＊（ｄ５＋ｄ６＋ｄ７＋ｄ８）＊（Ｃ１＋Ｃ２＋Ｃ３）となる（ステップＳ１７０６）。続いて、（式Ｅ）から（式Ｅ）と恒等な（式Ｈ）を作成する（ステップＳ１７０７）。ここでは、（式Ｅ）の恒等変換例を
Ｈ  ＝  （（ｄ１＋ｄ３）＋（ｄ２＋ｄ４））＊（（ｄ６＋ｄ７）＋（ｄ８＋ｄ５））＊Ｃ１
＋（（ｄ２＋ｄ３）＋（ｄ１＋ｄ４））＊（（ｄ６＋ｄ８）＋（ｄ７＋ｄ５））＊（Ｃ２＋Ｃ３）
とし、結合分割鍵をそれぞれ
Ｈ１＝ｄ１＋ｄ３
Ｈ２＝ｄ２＋ｄ４
Ｈ３＝ｄ６＋ｄ７
Ｈ４＝ｄ８＋ｄ５
Ｈ５＝Ｃ１
Ｈ６＝ｄ２＋ｄ３
Ｈ７＝ｄ１＋ｄ４
Ｈ８＝ｄ６＋ｄ８
Ｈ９＝ｄ７＋ｄ５
Ｈ１０＝Ｃ２＋Ｃ３
とする。この場合、恒等式Ｈは、上記の結合情報を利用して以下のような（式Ｈ）となる。
【０２３５】
（（Ｈ１＋Ｈ２）＊（Ｈ３＊Ｈ４））＊Ｈ５
＋（（Ｈ６＋Ｈ７）＊（Ｈ８＊Ｈ９））＊Ｈ１０…（式Ｈ）
次に、
ｈ＊（Ｃ１＋Ｃ２＋Ｃ３）＋ｒ＊Ｈ
＝ｈ＊（Ｃ１＋Ｃ２＋Ｃ３）＋ｒ＊｛（（Ｈ１＋Ｈ２）＊（Ｈ３＊Ｈ４））＊Ｈ５＋
（（Ｈ６＋Ｈ７）＊（Ｈ８＊Ｈ９））＊Ｈ１０｝
を交換法則、結合法則、分配法則を用いてｈ＊（Ｃ１＋Ｃ２＋Ｃ３）の値が直接メモリに出ないように算出し、算出結果を署名Ｓとする。ｈ＊（Ｃ１＋Ｃ２＋Ｃ３）の値を直接メモリに出さないようにする計算順序の一例としては、
ｈ＊（Ｃ１＋Ｃ２＋Ｃ３）＋ｒ＊｛（（Ｈ１＋Ｈ２）＊（Ｈ３＊Ｈ４））＊Ｈ５＋
（（Ｈ６＋Ｈ７）＊（Ｈ８＊Ｈ９））＊Ｈ１０｝
＝ｈ＊（Ｃ１＋Ｃ２）＋ｒ＊｛（（Ｈ１＋Ｈ２）＊（Ｈ３＊Ｈ４））＊Ｈ５｝
＋ｈ＊Ｃ３＋ｒ＊｛（（Ｈ６＋Ｈ７）＊（Ｈ８＊Ｈ９））＊Ｈ１０｝
という式に変形して計算する。
【０２３６】
すなわち、上述の計算式では、ｈ＊（Ｃ１＋Ｃ２＋Ｃ３）をｈ＊（Ｃ１＋Ｃ２）とｈ＊Ｃ３に分けて計算し、かつ、その計算の間に残りの計算を挟むことにより、ｈ＋（Ｃ１＋Ｃ２＋Ｃ３）の値が直接メモリ上に現れないようにしている。
【０２３７】
以上のようにすることで、ステップＳ１５０２の乱数ｋに相当する値と署名鍵ｄの値を直接メモリに出現させることなく、且つ実行の度に署名Ｓの生成に用いる乱数生成恒等式Ｕと署名生成式Ｈを署名生成を実行するたびに変化させることが可能となるため、不正解析による署名鍵ｄの特定が非常に困難となるという効果がある。
【０２３８】
なお、本実施の形態１および２では、ＲＳＡ署名、ＥＣＤＳＡについて説明しているが、これに限定されるわけではなく、ＲＳＡ暗号、楕円暗号、ＥｌＧａｍａｌ暗号等、算出演算を用いた公開鍵暗号に利用してもよい。また、本実施の形態１および２にて例示した手順の応用先は、暗号や署名に利用する鍵情報に限定する必要はなく、これらとは異なる保護すべき秘密情報に対して適用してもよいことは言うまでもない。
【０２３９】
（実施の形態３）
本発明の実施の形態３について、以下に説明する。
本実施の形態３では、署名鍵を分割鍵に分割し、分割鍵を端末に埋め込むまでの工程を図１８を用いて説明する。
【０２４０】
鍵発行機関は、署名生成をするための署名鍵を発行する機関である。
鍵発行機関では、ｎ台（情報端末１（１８１０）、情報端末２（１８２０）、…、情報端末ｎ（１８３０））の端末向けに、それぞれ異なる署名鍵１、署名鍵２、…、署名鍵ｎを発行する。
【０２４１】
分割鍵生成装置１８０２は、鍵発行機関から発行された署名鍵と、署名鍵生成式を入力とし、署名鍵生成式に基づき、署名鍵を分割する装置であり、分割鍵と署名鍵生成式を出力する。
【０２４２】
分割鍵書込み装置１８０５は、署名生成を行う情報端末に対して、分割鍵生成装置１８０２で生成された分割鍵と署名鍵生成式から成る分割鍵情報１８０４を情報端末に書き込む装置である。例えば、情報端末が携帯電話などの組み込み機器の場合は、分割鍵書込み装置としては、ＲＯＭライターが用いられる。
【０２４３】
ここで、情報端末１（１８１０）、情報端末２（１８２０）、…、情報端末ｎ（１８３０）は、署名生成を行う情報端末である。これら情報端末の構成は、実施の形態１で説明した署名生成装置１００と同じ構成であるため、本実施の形態３の説明に必要な構成のみを図示している。
【０２４４】
端末を製造するメーカーは、分割鍵生成装置１８０２に対し、鍵発行機関から発行された署名鍵１８０１と、署名鍵生成式１８０３を入力し、署名鍵１８０１を分割した分割鍵と、分割鍵から署名鍵を生成するための情報である署名鍵生成式１８０３とから構成される分割鍵情報１８０４を生成する。
【０２４５】
分割鍵情報１８０４は、署名鍵１の分割鍵情報１８１１、署名鍵２の分割鍵情報１８２１、署名鍵ｎの分割鍵情報１８３１から構成されており、署名鍵１の分割鍵情報１８１１は、情報端末１８１０向けの分割鍵情報であり、署名鍵２の分割鍵情報１８２１は、情報端末２（１８２０）向けの分割鍵情報であり、署名鍵ｎの分割鍵情報１８３１は、情報端末ｎ（１８３０）向けの分割鍵情報であることを示している。分割鍵情報（１８１１、１８２１、１８３１）は、実施の形態１で示した分割鍵識別情報テーブル２００と分割鍵情報テーブル４００としてもよく、また、署名鍵ｄと同じ値を算出できるように分割鍵と署名鍵生成式Ｆとの関係が識別できる情報であれば他の情報であってもよい。
【０２４６】
次に、端末を製造するメーカーは、分割鍵生成装置１８０２により生成された分割鍵情報１８０４を、分割鍵書込み装置１８０５を用いて情報端末１８１０、１８２０、１８３０の各分割鍵格納手段に書き込む。
【０２４７】
ここで、書き込むまでのより具体的な一例を説明すると、分割鍵生成装置により生成された分割鍵情報（１８１１、１８２１、１８３１）は、分割鍵識別情報テーブル２００と分割鍵情報テーブル４００を表現したデータファイルであり、そのデータファイルをコンパイルしてバイナリデータとし、そのバイナリデータをＲＯＭライターなどの分割鍵書込み装置１８０５を用いて、分割鍵格納手段に書き込む。
【０２４８】
以上により、情報端末１（１８１０）の分割鍵格納手段には署名鍵１の分割鍵情報１８１１が書き込まれ、情報端末２（１８２０）の分割鍵格納手段には署名鍵２の分割鍵情報１８２１が書き込まれ、情報端末ｎ（１８３０）の分割鍵格納手段には署名鍵ｎの分割鍵情報１８３１が書き込まれることになる。
【０２４９】
なお、本実施の形態３では、情報端末（１８１０、１８２０、１８３０）の署名鍵生成式は、それぞれ異なる署名鍵生成式Ｆ１、Ｆ２、…Ｆｎとしているが、情報端末全てで同じ署名鍵生成式としてもよい。この場合に情報端末ごとに異なる処理を行わせるためには、分割鍵生成装置１８０２が各情報端末毎に異なる分割鍵を生成し、生成された情報端末毎に異なる分割鍵を各情報端末（１８１０、１８２０、１８３０）に書き込めばよい。
【０２５０】
なお、本実施の形態３では、分割鍵生成装置１８０２は、外部より署名鍵生成式１８０３を入力され、入力された署名鍵生成式に基づき署名鍵を分割しているが、入力される情報はこれに限られず、署名鍵から分割鍵を生成するための何らかのパラメータ情報であってもよい。例えば、分割鍵生成装置１８０２に署名鍵を分割する分割個数のパラメータを入力し、分割鍵生成装置１８０２内で入力された分割個数に従い、署名鍵を分割するようにしてもよい。さらに、分割鍵生成装置１８０２内で入力された分割個数に従い、署名鍵生成式を生成し、それを出力するようにしてもよい。ここで、分割鍵を生成するために入力されるパラメータは分割個数でなく、セキュリティレベルやＣＰＵの性能を表すパラメータ情報であってもよく、この場合、入力されたパラメータに応じて分割鍵生成装置１８０２内で、分割個数を決定するようにしてもよい。具体的にはセキュリティレベルが低かったりＣＰＵ性能が高い場合には、より多くの分割鍵を生成するというようにしてもよい。このようにすることで、署名鍵ｄの分割数を調整することが可能になるためセキュリティ強度を柔軟に設定することが可能である。
【０２５１】
また、署名鍵１８０１は、鍵発行機関にて暗号化された状態で発行されてもよい。その場合、端末を製造するメーカーは、暗号化された署名鍵１８０１を復号してから、復号した署名鍵を分割鍵生成装置１８０２に入力する。また、ここでの暗号化方式が公開鍵暗号方式を利用していれば、鍵発行機関は、署名鍵１８０１に、署名鍵１８０１の署名を付して送信し、メーカーは、鍵発行機関の公開鍵を利用して、署名鍵１８０１の署名を検証することにより正当性を検証できるようにしてもよい。このようにすることで、鍵発行機関からメーカーへ渡される署名鍵１８０１を、受け渡し途中の盗聴や改ざんから保護することができる。
【０２５２】
なお、分割鍵生成装置１８０２と分割鍵書込み装置１８０５は、端末製造メーカーが利用するとして説明したが、現実的には、製造工程において、分割鍵生成装置１８０２と分割鍵書込み装置１８０５の利用場所が異なる場合がある。具体例としては、分割鍵書込み装置１８０５の利用を端末の製造工場で実施する場合などがある。この場合は、分割鍵生成装置１８０２で生成した分割鍵情報１８０４を暗号化し、暗号化した分割鍵情報を端末の製造工場に配布し、端末の製造工場では、配布された暗号化情報を復号し、復号した分割鍵情報１８０４を分割鍵書込み装置１８０５に入力するようにしてもよい。このようにすることで、安全な分割鍵の配布が可能となる。
【０２５３】
なお、上記では、署名鍵１８０１、分割鍵情報１８０４の暗号化方法を示していないが、その場合の暗号化方法については特に限定するわけではなくＡＥＳなどの共通鍵暗号もしくは、ＲＳＡや楕円暗号などの公開鍵暗号を用いることで実現すればよい。
【０２５４】
（実施の形態４）
実施の形態４では、署名鍵生成恒等式生成手段１２０にて、署名鍵生成恒等式を算出する署名鍵生成恒等式生成プログラムを、ネットワークを介して更新する方法について図１９、図２０を用いて説明する。
【０２５５】
図１９は、署名生成装置１００が、ネットワーク上にある更新サーバー１９０１から更新用の署名鍵生成恒等式生成プログラムＸ１９０２をダウンロードし、署名鍵生成恒等式生成手段１２０の署名鍵生成恒等式生成プログラムを更新する概要図である。実施の形態１と異なる点は、実施の形態４は、新しい署名鍵生成恒等式生成プログラムをネットワーク上の更新サーバーからダウンロードし、署名鍵生成恒等式生成手段１２０の署名鍵生成恒等式生成プログラムを、ダウンロードした署名鍵生成恒等式生成プログラムＸ１９０２に更新することができる点である。
【０２５６】
ここで、署名生成装置１００と更新サーバー１９０１は、インターネットなどのネットワーク１９００を介して接続されている。
更新サーバー１９０１は、署名生成装置１００の署名鍵生成恒等式生成手段１２０の署名鍵生成恒等式生成プログラムとは別の署名鍵生成恒等式生成プログラムＸ１９０２を保持している。ここで、署名鍵生成恒等式生成プログラムＸ１９０２は、署名生成プログラムと同等な機能、すなわち、署名鍵生成式Ｆ２１と恒等な式である署名鍵生成恒等式Ｇ１２１を生成する機能を有する。ただし、署名生成恒等式生成プログラムＸ１９０２が署名鍵生成恒等式Ｇ１２１を作成するフローは、署名鍵生成恒等式生成手段１２０の署名鍵生成恒等式生成プログラムとは異なるものとする。
【０２５７】
また、更新サーバー１９０１は、更新用のプログラムである署名鍵生成恒等式生成プログラムＸ１９０２の正当性検証のために利用する署名生成恒等式生成プログラムＸの改ざん検出値１９０３も保持している。なお、改ざん検出値１９０３の具体例としては、署名鍵生成恒等式生成プログラムＸのハッシュ値等がある。
【０２５８】
署名生成装置１００は、実施の形態１の図１で説明した構成要素に加え、本実施の形態４では、送受信手段１９１０と署名鍵生成恒等式生成プログラム更新手段１９２０とを備えるものとする。
【０２５９】
送受信手段１９１０は、ネットワークを介して更新サーバー１９０１とデータの送受信を行う手段である。
署名鍵生成恒等式生成プログラム更新手段１９２０は、署名鍵生成恒等式生成プログラムの更新要求メッセージを、送受信手段１９１０を利用して、ネットワーク上に存在する更新サーバー１９０１に送信する。さらに、送受信手段１９１０を介して更新サーバー１９０１から署名鍵生成恒等式生成プログラムＸ１９０２を受信し、受信した署名鍵生成恒等式生成プログラムＸ１９０２で署名鍵生成恒等式生成手段１２０のプログラムを更新する。
【０２６０】
次に図２０を用いて署名鍵生成恒等式生成手段１２０の署名鍵生成恒等式生成プログラムの更新フローについて説明する。
まず、署名鍵生成恒等式生成プログラム更新手段１９２０が送受信手段１９１０に、署名鍵生成恒等式生成プログラムＸ１９０２のダウンロードを要求する（ステップＳ２００１）。
【０２６１】
次に、ダウンロード要求を受けた送受信手段１９１０は、ネットワーク１９００を介して、更新サーバー１９０１へ署名鍵生成恒等式生成プログラムＸ１９０２のダウンロード要求メッセージを送信する（ステップＳ２００２）。
【０２６２】
次に、ダウンロード要求メッセージを受けた更新サーバー１９０１は、更新サーバー１９０１内で保持している署名鍵生成恒等式生成プログラムＸ１９０２と署名鍵生成恒等式生成プログラムＸ１９０２のハッシュ値１９０３を送受信手段１９１０に送信する（ステップＳ２００３）。
【０２６３】
続いて、送受信手段１９１０は、署名鍵生成恒等式生成プログラムＸ１９０２と署名鍵生成恒等式生成プログラムＸ１９０２のハッシュ値１９０３を更新サーバー１９０１から受信を完了した時点で、ダウンロード完了通知を署名鍵生成恒等式生成プログラム更新手段１９２０に通知する（ステップＳ２００４）。
【０２６４】
次に、署名鍵生成恒等式生成プログラム更新手段１９２０は、署名鍵生成恒等式生成プログラムＸ１９０２のハッシュ値１９０３を利用して、署名鍵生成恒等式生成プログラムＸ１９０２が改竄されていないかを判定する。この判定の結果が「ＹＥＳ」、すなわち改ざんされていると判定された場合には更新フローを終了し、この判定結果が「ＮＯ」、すなわち改ざんされていないと判定された場合には更新処理を継続する（ステップＳ２００５）。
【０２６５】
次に、署名鍵生成恒等式生成プログラム更新手段１９２０は、署名鍵生成恒等式生成手段１２０の署名鍵生成恒等式生成プログラムを、ダウンロードした署名鍵生成恒等式生成プログラムＸ１９０２で上書きすることで更新する（ステップＳ２００５）。
【０２６６】
書き込みが完了すると、署名鍵生成恒等式生成プログラム更新手段１９２０は書込み完了通知を受信し、これをもって更新フローは終了する（ステップＳ２００６）。
以上のように署名生成装置１００は、ネットワーク１９００を利用して、更新サーバー１９０１から新しい署名鍵生成恒等式生成プログラムＸ１９０２をダウンロードして署名鍵生成恒等式生成手段１２０の署名鍵生成恒等式プログラムの更新を行う。
【０２６７】
このような更新機能を持たせることで、署名鍵生成恒等式プログラムが不正解析者により改竄された場合や、署名鍵生成恒等式生成プログラムの不具合があった場合に、署名鍵生成恒等式プログラムを更新することにより、署名生成装置１００の安全性を確保することができる。
【０２６８】
なお、実施の形態４では、図２０のステップＳ２００１のダウンロード要求を送信するタイミングについては示していないが、例えば、署名生成装置１００内で署名生成処理の開始要求の前に署名鍵生成恒等式生成手段１２０のプログラム（署名鍵生成恒等式生成プログラムＸに相当する）の正当性を検証し、検証の結果、「正当でない」と判定された場合に、ステップＳ２００１のダウンロード要求をするようにしてもよい。署名鍵生成恒等式生成手段１２０のプログラムの正当性の検証についてのより具体的方法としては、署名生成装置１００内の安全なメモリに署名鍵生成恒等式生成手段１２０のプログラムのハッシュ値を保持しておき、署名生成処理が開始される前に、署名鍵生成恒等式生成手段１２０の署名鍵生成恒等式生成プログラムのハッシュ値を算出し、算出したハッシュ値と、メモリ内に保持していたハッシュ値を比較する方法などがある。
【０２６９】
また、実施の形態４では、署名生成装置１００と更新サーバー１９０１間でのデータ通信を、セキュア通信路（ＳＡＣ）でセッション鍵を共有し、セッション鍵で暗号化したデータの送受信としてもよい。ＳＡＣについては、Ｓｅｃｕｒｅ  Ｓｏｃｋｅｔｓ  Ｌａｙｅｒ（ＳＳＬ）などで利用されており既知の技術なので、説明を省略する。
【０２７０】
また、実施の形態４では、ネットワークを介して更新サーバー１９０１から更新用の署名鍵生成恒等式生成プログラムＸ１９０２をダウンロードしていたが、ネットワークでなく、署名鍵生成恒等式生成プログラムＸ１９０２が記録されたＤＶＤやＣＤ等の記録媒体を用いることで、署名鍵生成恒等式生成手段１２０のプログラムを更新するようにしてもよい。この処理を行う署名生成装置１００は、図２０における送受信手段１９１０を、記録媒体とのデータの読み書きを操作するようなドライバの機能を持たせたものとすることにより実現することができる。すなわち、上述のような署名生成装置１００は、図２０において、送受信手段１９１０を記録媒体ドライバとし、更新サーバー１９０１を記録メディアとし、ダウンロード要求を媒体からの読み込み要求と置き換えることにより実現できるため、詳細な説明は省略する。
【０２７１】
また、実施の形態４では、署名鍵生成恒等式生成手段１２０のプログラムを更新するとしていたが、更新する対象を分割鍵格納手段に記憶されている分割鍵１１１としてもよい。この場合は、分割鍵１１１のみの更新だけでなく、分割鍵１１１と署名鍵生成式Ｆ２１との関連情報が分かる分割鍵識別情報テーブル２００と分割鍵情報テーブル４００も同時に更新するようにする。また、更新する対象を結合分割鍵生成手段のプログラムとしてもよい。
【０２７２】
このようにすることで、生成される分割鍵の個数や結合分割鍵の個数を、更新サーバが調整することが可能となり、セキュリティ強度を柔軟に設定することが可能となる。
＜なお書き＞
なお、本発明を上記実施の形態に基づいて説明してきたが、本発明は、上記の実施の形態に限定されないのはもちろんである。以下のような場合も本発明に含まれる。
【０２７３】
（１）上記の装置は、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭ、ハードディスクユニット、ディスプレイユニット、キーボード、マウスなどから構成されるコンピュータシステムである。前記ＲＡＭまたはハードディスクユニットには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムにしたがって動作することにより、上記装置は、その機能を達成する。ここでコンピュータプログラムは、所定の機能を達成するために、コンピュータに対する指令を示す命令コードが複数個組み合わされて構成されたものである。
【０２７４】
（２）上記の各装置を構成する構成要素の一部又は全部は、１個のシステムＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ：大規模集積回路）から構成されているとしてもよい。システムＬＳＩは、複数の構成部を１個のチップ上に集積して製造された超多機能ＬＳＩであり、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭなどを含んで構成されるコンピュータシステムである。前記ＲＡＭには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、システムＬＳＩは、その機能を達成する。これらは個別に１チップ化されても良いし、一部又は全てを含むように１チップ化されても良い。
【０２７５】
また、ここでは、システムＬＳＩとしたが、集積度の違いにより、ＩＣ、システムＬＳＩ、スーパーＬＳＩ、ウルトラＬＳＩと呼称されることもある。
また、集積回路化の手法はＬＳＩに限るものではなく、専用回路又は汎用プロセサで実現してもよい。ＬＳＩ製造後に、プログラムすることが可能なＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）や、ＬＳＩ内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサーを利用しても良い。
【０２７６】
さらには、半導体技術の進歩又は派生する別技術によりＬＳＩに置き換わる集積回路化の技術が登場すれば、当然、その技術を用いて機能ブロックの集積化を行ってもよい。バイオ技術の適用等が可能性としてありえる。
【０２７７】
（３）  本実施の形態１では、分割鍵識別情報テーブル２００や分割鍵情報テーブル４００は、分割鍵生成装置２２が書き込むこととしているが、これらのテーブルを署名生成装置１００内部で生成してもよいことは言うまでもない。
【０２７８】
なお、不正解析により分割鍵情報テーブル４００の内容から署名鍵生成式Ｆ２１が特定される恐れがあるため、より安全な実装方法として、分割鍵情報テーブル４００は、暗号化された状態で保持され、署名生成時にのみ復号するようにしてもよい。これにより、静的解析による署名鍵生成式Ｆ２１の特定が困難となるため、安全性が向上する。また、署名鍵生成式Ｆ２１が特定されなければ、署名鍵ｄの特定も困難となる。
【０２７９】
（４）実施の形態では、先ず署名鍵生成恒等式を生成し、次いで前記署名生成絵恒等式に合わせた結合分割鍵を生成する場合について説明しているが、これに限らず、署名鍵生成恒等式と結合分割鍵とが生成できる手順に従えばよい。
【０２８０】
例えば、先ず、ランダムに結合分割鍵を生成しておき、次いでその結合分割鍵に相当する部分が含まれる署名生成恒等式を生成することとしてもよい。
（５）上記の装置を構成する構成要素の一部または全部は、装置に脱着可能なＩＣカードまたは単体のモジュールから構成されているとしてもよい。前記ＩＣカードまたは前記モジュールは、マイクロプロセッサ、ＲＯＭ、ＲＡＭなどから構成されるコンピュータシステムである。前記ＩＣカードまたは前記モジュールは、上記の超多機能ＬＳＩを含むとしてもよい。マイクロプロセッサが、コンピュータプログラムにしたがって動作することにより、前記ＩＣカードまたは前記モジュールは、その機能を達成する。このＩＣカードまたはこのモジュールは、耐タンパ性を有するとしてもよい。
【０２８１】
（６）本発明は、上記に示す方法であるとしてもよい。また、これらの方法をコンピュータにより実現するコンピュータプログラムであるとしてもよいし、前記コンピュータプログラムからなるデジタル信号であるとしてもよい。
【０２８２】
また、本発明は、前記コンピュータプログラムまたは前記デジタル信号をコンピュータ読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＢＤ（Ｂｌｕ−ｒａｙ  Ｄｉｓｃ）、半導体メモリなどに記録したものとしてもよい。また、これらの記録媒体に記録されている前記デジタル信号であるとしてもよい。
【０２８３】
また、本発明は、前記コンピュータプログラムまたは前記デジタル信号を、電気通信回線、無線または有線通信回線、インターネットを代表とするネットワーク、データ放送等を経由して伝送するものとしてもよい。
【０２８４】
また、本発明は、マイクロプロセッサとメモリを備えたコンピュータシステムであって、前記メモリは、上記コンピュータプログラムを記憶しており、前記マイクロプロセッサは、前記コンピュータプログラムにしたがって動作するとしてもよい。
【０２８５】
また、前記プログラムまたは前記デジタル信号を前記記録媒体に記録して移送することにより、または前記プログラムまたは前記デジタル信号を前記ネットワーク等を経由して移送することにより、独立した他のコンピュータシステムにより実施するとしてもよい。
【０２８６】
（７）上記実施の形態及び上記変形例をそれぞれ組み合わせるとしてもよい。
（８）明細書中での用語「交換法則」、「分配法則」、「結合法則」、「逆ポーランド記法」に関する記述は、公知の用語を念のために述べているに過ぎず、これらの用語に新たな定義を与えるものではない。
【産業上の利用可能性】
【０２８７】
本発明にかかるセキュア処理装置および方法は、分割された秘密情報のみの演算結果から導出することでプログラムの実行中に秘密情報を現すことなく、セキュアな処理を実行することができる効果を有する。また、秘密情報を利用するセキュア処理実行の度に、毎回異なる分割秘密情報を動的に生成し、セキュア処理の実行フローを動的に変更させることで、不正解析者の動的解析を困難にするという効果とを有する。このことから、不正解析者に漏洩すると不利益を招くような秘密情報を用いた処理を行うソフトウェア等の分野において有用である。
【図面の簡単な説明】
【０２８８】
【図１】本発明の実施の形態１における署名生成装置の構成概要を示す図である。
【図２】本発明の実施の形態１における分割鍵識別情報テーブルの構成を示す図である。
【図３】本発明の実施の形態１における署名鍵生成式をツリー構造で概念的に表現した図である。
【図４】本発明の実施の形態１における分割鍵情報テーブルを示す図である。
【図５】本発明の実施の形態１における署名生成の概要を示すフローチャートである。
【図６】本発明の実施の形態１における恒等式生成フローチャートである。
【図７】本発明の実施の形態１における交換法則を利用したランダムシャッフル処理を表すフローチャートである。
【図８】本発明の実施の形態１における結合法則を利用したランダムグループ分けの処理を表すフローチャートである。
【図９】本発明の実施の形態１におけるランダムシャッフル、ランダムグループ分け処理実行後の分割鍵情報テーブルを示す図である。
【図１０】本発明の実施の形態１におけるマトリックスを利用した恒等式生成処理の概念を示す図である。
【図１１】本発明の実施の形態１における結合分割鍵識別情報テーブルを示す図である。
【図１２】本発明の実施の形態１における署名生成処理を詳細に示すフローチャートである。
【図１３】本発明の実施の形態１における図１２のフローチャートの続きを示す図である。
【図１４】本発明の実施の形態１における署名生成式の生成の具体例を説明する図である。
【図１５】本発明の実施の形態２におけるＥＣＤＳＡのフローチャートである。
【図１６】本発明の実施の形態２における図１５のＳ１５０２の詳細フローチャートである。
【図１７】本発明の実施の形態２における図１５のＳ１５０４の詳細フローチャートである。
【図１８】本発明の実施の形態３における分割鍵埋め込み工程を示す図である。
【図１９】本発明の実施の形態４における署名鍵生成恒等式生成手段１２０のプログラムの更新の概要を示す図である。
【図２０】本発明の実施の形態４における署名鍵生成恒等式生成プログラムの更新を示すフローチャートである。
【符号の説明】
【０２８９】
１０    メッセージＭ
２０    署名鍵Ｄ
２１    署名鍵生成式Ｆ
２２    分割鍵生成装置
３０    署名Ｓ
１００    署名生成装置
１１０    分割鍵格納手段
１２０    署名鍵生成恒等式生成手段
１２１    署名鍵生成恒等式Ｇ
１３０    結合分割鍵生成手段
１４０    結合分割鍵格納手段
１５０    署名生成手段
２００    分割識別情報テーブル
２０１    分割鍵識別子
１０００    マトリックス
１００１    結合箇所選択部
１９００    ネットワーク
１９０１    更新サーバ
１９０２    更新用の署名鍵生成恒等式生成プログラム
１９０３    更新用の署名鍵生成恒等式生成プログラムの改ざん検出値
１９１０    送受信手段
１９２０    署名鍵生成恒等式生成プログラム更新手段
【手続補正３】
【補正対象書類名】図面
【補正対象項目名】全図
【補正方法】変更
【補正の内容】
【図１】
2007052491.tif 000023
【図２】
2007052491.tif 000024
【図３】
2007052491.tif 000025
【図４】
2007052491.tif 000026
【図５】
2007052491.tif 000027
【図６】
2007052491.tif 000028
【図７】
2007052491.tif 000029
【図８】
2007052491.tif 000030
【図９】
2007052491.tif 000031
【図１０】
2007052491.tif 000032
【図１１】
2007052491.tif 000033
【図１２】
2007052491.tif 000034
【図１３】
2007052491.tif 000035
【図１４】
2007052491.tif 000036
【図１５】
2007052491.tif 000037
【図１６】
2007052491.tif 000038
【図１７】
2007052491.tif 000039
【図１８】
2007052491.tif 000040
【図１９】
2007052491.tif 000041
【図２０】
2007052491.tif 000042
【国際調査報告】
2007052491.tif 000043
2007052491.tif 000044
2007052491.tif 000045