JPWO2007052491A1 - セキュア処理装置、セキュア処理方法、難読化秘密情報埋め込み方法、プログラム、記憶媒体および集積回路 - Google Patents

セキュア処理装置、セキュア処理方法、難読化秘密情報埋め込み方法、プログラム、記憶媒体および集積回路 Download PDF

Info

Publication number
JPWO2007052491A1
JPWO2007052491A1 JP2007542571A JP2007542571A JPWO2007052491A1 JP WO2007052491 A1 JPWO2007052491 A1 JP WO2007052491A1 JP 2007542571 A JP2007542571 A JP 2007542571A JP 2007542571 A JP2007542571 A JP 2007542571A JP WO2007052491 A1 JPWO2007052491 A1 JP WO2007052491A1
Authority
JP
Japan
Prior art keywords
secret information
generation
signature
key
secure
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2007542571A
Other languages
English (en)
Other versions
JP4970279B2 (ja
Inventor
芳賀 智之
智之 芳賀
太一 佐藤
太一 佐藤
理惠子 浅井
理惠子 浅井
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Panasonic Corp
Panasonic Holdings Corp
Original Assignee
Panasonic Corp
Matsushita Electric Industrial Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Panasonic Corp, Matsushita Electric Industrial Co Ltd filed Critical Panasonic Corp
Priority to JP2007542571A priority Critical patent/JP4970279B2/ja
Publication of JPWO2007052491A1 publication Critical patent/JPWO2007052491A1/ja
Application granted granted Critical
Publication of JP4970279B2 publication Critical patent/JP4970279B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/08Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
    • H04L9/0816Key establishment, i.e. cryptographic processes or cryptographic protocols whereby a shared secret becomes available to two or more parties, for subsequent use
    • H04L9/085Secret sharing or secret splitting, e.g. threshold schemes
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3247Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving digital signatures
    • H04L9/3249Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving digital signatures using RSA or related signature schemes, e.g. Rabin scheme

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Storage Device Security (AREA)

Abstract

本発明は、秘匿すべき秘密情報を用いるセキュア処理を実行する場合に、メモリのダンプ等の不正解析による前記秘密情報の暴露を避けつつ前記セキュア処理を実行することを目的とする。メッセージMに対し署名鍵dを用いて署名を施す署名生成装置100において、分割鍵格納手段110は、署名鍵dを少なくとも2つに分割した分割秘密鍵と、前記分割秘密鍵から前記署名鍵dを算出する署名鍵生成式Fと、署名生成式を記憶し、署名鍵生成恒等式生成手段120が、結合法則、分配法則、交換法則を用いて、署名鍵生成式Fと同じ結果を得る署名鍵生成恒等式Gを生成し、結合分割鍵生成手段130が、署名鍵生成恒等式Gに引数として与えるべき、前記分割秘密鍵を演算した結果である結合分割鍵を生成し、署名生成手段150が、前記署名鍵生成恒等式Gと、前記分割秘密鍵とに基づき、前記メッセージに対し、署名を施す。

Description

本発明は、プログラムの不正な改ざんや解析を防止する技術等に関するものである。
従来、データの改ざん検出等の目的で、電子署名(以下、署名とも呼ぶ)が広く用いられている。その署名生成方法の一つに、RSA(Rivest Shamir Adleman)署名生成法がある。RSA署名生成法では、署名対象メッセージMに対して署名鍵dを使って、S=M^d mod nという演算を行うことにより署名Sを生成する。
上述した署名鍵dは保護しなくてはならない情報であり、以下、このような情報のことを秘密情報と呼ぶ。また、本明細書において、記号^は、ベキ乗演算を表し、記号*は、乗算を表すものとする。
ここで、上述のRSA署名生成の処理実行中には、コンピュータ内のRAMやCPUのレジスタなどのメモリ上に署名鍵dの値が出現してしまうため、これらのメモリを解析することにより署名鍵dが不正に取得される危険性がある。
このような署名鍵dの不正取得を防ぐための技術の1つとして、署名鍵dの値をメモリ上に出現させることなく署名生成を行う手法が非特許文献1に開示されている。
非特許文献1の手法では、まず、署名鍵生成式d=(d1*d2)+d3を満たすようなd1、d2、d3を求める。ここで、d1、d2およびd3が上述した分割鍵であり、署名鍵から分割鍵を生成することを署名鍵の分割と呼ぶ。
この分割鍵(d1、d2、d3)と署名鍵生成式に基づき
S1=M^d1 mod n
S2=S1^d2 mod n
S=S2*M^d3 mod n
の順に演算を行う。これにより、署名鍵dを使うことなく、RSA署名生成式S=M^d mod nと同じ署名Sが得られる。また、署名生成処理中には、メモリ上に、署名鍵dではなく、分割鍵(d1、d2、d3)が現れることとなるので、署名鍵dを保護することが出来る。
「署名生成ソフトウェアのランタイムデータ探索による耐タンパー性評価」 横浜国立大学 本田洋之 松本 勉 SCIS2005
しかしながら、前述した手法では署名鍵生成式が常に固定であるため、署名生成部を静的解析することで署名鍵生成式を特定することができる。
さらに、毎回同一の分割鍵を利用するため、署名対象データを変えながら複数回の署名生成時のランタイムデータを収集し、収集した複数のランタイムデータ同士の差分を見て不変なデータを抽出するという動的解析を行うことにより、分割鍵を特定することができる。
そして、上記の方法により特定した分割鍵と署名鍵生成式とを用いると署名鍵の特定が可能であるという課題があった。
上記課題に鑑み本発明は、不正解析者により静的解析や動的解析が成された場合であっても、秘密情報を秘匿することが出来るセキュア処理装置を提供することを目的とする。
上記課題を解決するために、本発明は、メッセージに対して秘密情報を用いたセキュア演算を施した場合と同一の演算結果を得るセキュア処理装置であって、秘密情報を少なくとも2つに分割した分割秘密情報が引数として入力され、当該分割秘密情報から前記秘密情報を算出する第1の秘密情報生成式と、前記秘密情報を用いたセキュア演算の手順を示す第1のセキュア演算手順とを記憶している記憶手段と、少なくとも2つの前記分割秘密情報を演算した結果である結合秘密情報が引数として入力され、前記第1の秘密情報生成式と演算上等価な第2の秘密情報生成式を生成する第1生成手段と、前記第2の秘密情報生成式に含まれる演算子に基づいて、引数として前記結合秘密情報が入力され前記第1のセキュア演算手順と等価な演算の手順を示す第2のセキュア演算手順を生成する第2生成手段と、前記メッセージに対し前記第2のセキュア演算手順に従ったセキュア演算を施す実行手段とを備える。
本発明のセキュア処理装置は、上述の構成を備えることにより、セキュア処理の実行毎に、前記結合秘密情報を生成し、第2のセキュア演算手順を生成し、第2のセキュア演算手順を実行することにより、第1のセキュア演算と同じ結果を得るので、前記秘密情報の代わりにセキュア演算毎に異なる値となる結合秘密情報が演算用のメモリ上に現れ、第2のセキュア演算手順がセキュア処理の実行毎に異なるものとなるため、静的解析及び動的解析による前記秘密情報の特定が困難となる。よって、前記秘密情報を秘匿することが出来る。
また、前記第1の秘密情報生成式は、1以上の演算を含み、前記第2生成手段は、前記第1の秘密情報生成式に含まれる演算から、交換法則、結合法則、分配法則のいずれかを前記演算との間で満たす代替演算のある演算をランダムに選択し、選択した演算を前記代替演算に置き換えることにより第2の秘密情報生成式を生成することとしてもよい。
また、前記第1の秘密情報生成式は1以上の演算を含み、各演算は、複数の被演算子と、被演算子同士の計算の内容を示す演算子とを含み、前記記憶手段は、前記第1の秘密情報生成式に係る前記被演算子と前記演算子との関係を示す属性情報を記憶しており、前記第1生成手段は、前記属性情報を用いて前記第2の秘密情報生成式を生成することとしてもよい。
また、前記第1の秘密情報生成式において、前記被演算子には引数の値が入力され、前記引数それぞれの値は、前記分割秘密情報のいずれかが重複無く対応し、前記属性情報は、結合可能な複数の被演算子と対応する演算子を示し、前記第1生成手段は、前記属性情報に基づき、前記第1の秘密情報生成式における前記複数の被演算子を前記演算子で結合し、前記第2生成手段は、前記結合秘密情報を、前記結合された各被演算子に対応する分割秘密情報を、前記演算子を用いて結合することにより生成することとしてもよい。
また、前記第2の秘密情報生成式は、1以上の演算を含み、各演算は、複数の被演算子と、被演算子同士の計算の内容を示す演算子とを含み、前記記憶手段は、前記第2の秘密情報生成式に係る前記被演算子と前記演算子との関係を示す属性情報を記憶しており、前記第2生成手段は、前記属性情報を用いて前記第2のセキュア演算手順を生成することとしてもよい。
この構成によれば、第1の秘密情報生成式と同じ結果を得る第2の秘密情報生成式をランダムに生成することができるので、静的解析による秘密情報の特定を困難にすることができる。
また、前記第1生成手段は、更に、乱数情報を生成し、前記乱数情報を含んだ前記第2の秘密情報生成式を生成し、前記第2生成手段は、前記第2の秘密情報生成式に基づき、前記結合秘密情報と前記乱数情報とを用いて前記第1のセキュア演算手順と等価な演算の手順を示す第2のセキュア演算式を生成し、前記実行手段は、前記メッセージに対し前記結合秘密情報と、前記乱数情報とを用いて前記第2のセキュア演算手順に従ったセキュア演算を施すこととしてもよい。
この構成によれば、乱数情報を含むことにより、前記第2の秘密情報生成式の解析が困難となり、乱数情報を用いて実行する第2のセキュア演算手順に従ったセキュア演算の静的解析を困難にすることができる。
また、前記第1生成手段は、更に、前記秘密情報を用いた、演算処理の結果に影響を与えない冗長情報を生成し、当該冗長情報を用いて、前記第2の秘密情報生成式を生成することとしてもよい。
この構成によれば、冗長情報を用いるので第2の秘密情報生成式の静的解析を困難にすることができる。
また、前記記憶手段は、前記分割秘密情報と共に前記実行手段により用いられないダミー情報を記憶していることとしてもよい。
この構成によれば、記憶手段に記憶されている情報に基づきセキュア処理を静的解析することを困難にすることができる。
また、前記秘密情報は、デジタル署名を生成するための署名鍵であり、前記セキュア演算は、前記メッセージにデジタル署名を施す署名生成演算であることとしてもよい。
この構成によれば、デジタル署名処理の実行において、静的解析による秘密情報の特定を困難にすることができる。
また、前記署名生成処理は、RSA(Rivest Shamir Adleman)署名生成処理であることとしてもよい。
この構成によれば、RSA署名生成処理の実行において、静的解析による秘密情報の特定を困難にすることができる。
また、前記署名生成処理は、楕円曲線デジタル署名方式による署名処理であることとしてもよい。
また、前記セキュア処理装置は、更に、乱数情報を生成する乱数情報生成手段を備え、前記実行手段は、前記楕円曲線デジタル署名方式における定義体GF(p)上の楕円曲線の位数qであるベースポイントPの乱数値k倍点を計算する処理と、定義体GF(q)上でのkの逆数の値を用いた処理とを、前記乱数kを直接利用することなく、少なくとも2つの前記乱数情報を用いて行うこととしてもよい。
この構成によれば、楕円曲線デジタル署名方式による署名処理の実行において、静的解析による秘密情報の特定を困難にすることができる。
また、前記秘密情報は前記公開鍵暗号の前記秘密鍵であり、前記実行手段は、前記セキュア演算として、公開鍵と秘密鍵を利用した公開鍵暗号系の処理を行うこととしてもよい。
この構成によれば、公開鍵暗号によるセキュア処理の実行において、静的解析による秘密鍵の特定を困難にすることができる。
また、前記公開鍵暗号はRSA暗号であることとしてもよい。
この構成によれば、RSA暗号によるセキュア処理の実行において、静的解析による秘密鍵の特定を困難にすることができる。
また、前記公開鍵暗号は楕円曲線暗号であることとしてもよい。
この構成によれば、楕円曲線暗号によるセキュア処理の実行において、静的解析による秘密鍵の特定を困難にすることができる。
また、前記セキュア処理装置は、更に、外部から、前記第1生成手段の更新用データを取得する取得手段と、前記更新用データを用いて、前記第1生成手段を更新する更新手段とを含むこととしてもよい。
この構成によれば、第1生成手段を更新することにより、セキュア処理実行時に静的解析される場合であっても、秘密情報の特定を困難にすることができる。 また、生成される分割鍵の個数や結合分割鍵の個数を、装置外部から調整することが可能となり、セキュリティ強度を柔軟に設定することが可能となる。
また、前記セキュア処理装置は、更に、外部から、更新用の分割秘密情報を取得する取得手段と、前記記憶手段に記憶されている分割秘密情報を、前記取得手段が取得した更新用の分割秘密情報に更新する更新手段とを含むこととしてもよい。
この構成によれば、分割秘密情報を更新することにより、セキュア処理実行時に静的解析される場合であっても、秘密情報の特定を困難にすることができる。
また、生成される分割鍵の個数や結合分割鍵の個数を、装置外部から調整することが可能となり、セキュリティ強度を柔軟に設定することが可能となる。
本発明のセキュア処理方法は、メッセージに対し秘密情報を用いたセキュア演算を施した場合と同一の演算結果を得るセキュア処理装置において用いられるセキュア処理方法であって、前記セキュア処理装置は、秘密情報を少なくとも2つに分割した分割秘密情報が引数として入力され、当該分割秘密情報から前記秘密情報を算出する第1の秘密情報生成式と、前記秘密情報を用いたセキュア演算の手順を示す第1のセキュア演算手順とを記憶している記憶手段を備えており、前記セキュア処理方法は、少なくとも2つの前記分割秘密情報を演算した結果である結合秘密情報が引数として入力され、前記第1の秘密情報生成式と同一の結果を出力する第2の秘密情報生成式を生成する第1生成ステップと、前記第2の秘密情報生成式に含まれる演算子に基づいて、前記結合秘密情報が引数として入力され前記第1のセキュア演算手順と等価な演算の手順を示す第2のセキュア演算手順を生成する第2生成ステップと、前記メッセージに対し前記第2のセキュア演算手順に従ったセキュア演算を施す実行ステップとを含む。
本発明のコンピュータプログラムは、メッセージに対して秘密情報を用いたセキュア演算を施した場合と同一の演算結果を得るセキュア処理装置において用いられるコンピュータプログラムであって、前記セキュア処理装置は、秘密情報を少なくとも2つに分割した分割秘密情報が引数として入力され、当該分割秘密情報から前記秘密情報を算出する第1の秘密情報生成式と、前記秘密情報を用いたセキュア演算の手順を示す第1のセキュア演算手順とを記憶している記憶手段を備えており、前記コンピュータプログラムは、少なくとも2つの前記分割秘密情報を演算した結果である結合秘密情報が引数として入力され、前記第1の秘密情報生成式と演算上等価な第2の秘密情報生成式を生成する第1生成ステップと、前記第2の秘密情報生成式に含まれる演算子に基づいて、前記結合秘密情報が引数として入力され前記第1のセキュア演算手順と等価な演算の手順を示す第2のセキュア演算手順を生成する第2生成ステップと、前記メッセージに対し前記第2のセキュア演算手順に従ったセキュア演算を施す実行ステップとを含む。
本発明の記録媒体は、コンピュータ読み取り可能な記録媒体であって、前記コンピュータプログラムを記録している。
本発明の集積回路は、メッセージに対して秘密情報を用いたセキュア演算を施した場合と同一の演算結果を得る集積回路であって、秘密情報を少なくとも2つに分割した分割秘密情報が引数として入力され、当該分割秘密情報から前記秘密情報を算出する第1の秘密情報生成式と、前記秘密情報を用いたセキュア演算の手順を示す第1のセキュア演算手順とを記憶している記憶手段と、少なくとも2つの前記分割秘密情報を演算した結果である結合秘密情報が引数として入力され、前記第1の秘密情報生成式と演算上等価な第2の秘密情報生成式を生成する第1生成手段と、前記第2の秘密情報生成式に含まれる演算子に基づいて、引数として前記結合秘密情報が入力され前記第1のセキュア演算手順と等価な演算の手順を示す第2のセキュア演算手順を生成する第2生成手段と、前記メッセージに対し前記第2のセキュア演算手順に従ったセキュア演算を施す実行手段とを備える。
この構成によれば、セキュア処理の実行毎に、前記結合秘密情報を生成し、第2のセキュア演算手順を生成し、第2のセキュア演算手順を実行することにより、第1のセキュア演算と同じ結果を得るので、前記秘密情報の代わりにセキュア演算毎に異なる値となる結合秘密情報が演算用のメモリ上に現れ、第2のセキュア演算手順がセキュア処理の実行毎に異なるものとなるため、静的解析による前記秘密情報の特定が困難となる。よって、前記秘密情報を秘匿することが出来る。
本発明の難読化秘密情報埋め込み方法は、秘密情報を用いた演算を行うセキュア処理装置に、前記秘密情報を難読化して埋め込む難読化秘密情報埋め込み方法であって、前記秘密情報を解析が困難な状態に変換する難読化装置を用いて、前記秘密情報を難読化する秘密情報難読化ステップと、難読化情報書き込み装置を用いて、難読化された秘密情報を前記セキュア処理装置に埋め込む埋込ステップとを含む。
この構成によれば、セキュア処理装置に秘密情報を難読化して埋め込むことにより、秘密情報が暴露されるのを防ぐことができる。
また、前記難読化装置は、前記秘密情報の難読化の方法を決定するためのパラメータを入力として受け付ける入力手段を備え、前記秘密情報難読化ステップは、前記入力手段が前記パラメータを受け付ける受付ステップと、前記パラメータに基いて決定される難読化方法で、前記秘密情報を難読化する難読化ステップとを含んでもよい。
この構成によれば、前記秘密情報の難読化の方法を決定するためのパラメータを外部から与えることにより、セキュリティ強度を柔軟に設定することができる。
また、前記パラメータは、前記秘密情報の分割個数であり、前記難読化ステップは、前記分割個数に基づいて、前記秘密情報を少なくとも2つの分割秘密情報に分割する分割ステップを含むこととしてもよい。
また、前記難読化ステップは、更に、前記分割個数に基づき、少なくとも前記分割個数の項を含む第1の秘密情報生成式を生成する式生成ステップを含み、前記分割ステップは、前記第1の秘密情報生成式から前記秘密情報が算出されるように、前記秘密情報を分割することとしてもよい。
この構成によれば、秘密情報の分割個数を装置外部から調整することが可能になるためセキュリティ強度を柔軟に設定することができる。
また、前記パラメータは、第1の秘密情報生成式であり、前記難読化ステップは、前記第1の秘密情報生成式から前記秘密情報が算出されるように、前記秘密情報を少なくとも2つの分割秘密情報に分割するステップを含んでもよい。
この構成によれば、第1の秘密情報生成式を装置外部から与えることが可能になるため、セキュリティ強度を柔軟に設定することができる。
また、前記秘密情報は、鍵発行機関から発行される秘密鍵であり、前記難読化秘密情報埋め込み方法は、前記鍵発行機関が前記秘密鍵を鍵発行機関の秘密鍵で暗号化する暗号化ステップと、前記難読化装置が、暗号化された前記鍵を公開鍵で復号および検証する検証ステップとをさらに有し、前記秘密情報難読化ステップは、検証された前記秘密鍵を難読化し、前記埋込ステップは、前記難読化装置により難読化された前記難読化情報をバイナリデータに変換するバイナリ変換ステップと、前記秘密情報を用いた演算結果と同一の結果を前記難読化秘密情報を用いて演算する機能を有するセキュア処理装置に、前記バイナリデータを埋め込むバイナリ埋込ステップとを含んでもよい。
この構成によれば、鍵発行機関からメーカーへ渡される秘密鍵を、受け渡し途中の盗聴や改ざんから保護することができる。
本発明の実施の形態1における署名生成装置の構成概要を示す図である。 本発明の実施の形態1における分割鍵識別情報テーブルの構成を示す図である。 本発明の実施の形態1における署名鍵生成式をツリー構造で概念的に表現した図である。 本発明の実施の形態1における分割鍵情報テーブルを示す図である。 本発明の実施の形態1における署名生成の概要を示すフローチャートである。 本発明の実施の形態1における恒等式生成フローチャートである。 本発明の実施の形態1における交換法則を利用したランダムシャッフル処理を表すフローチャートである。 本発明の実施の形態1における結合法則を利用したランダムグループ分けの処理を表すフローチャートである。 本発明の実施の形態1におけるランダムシャッフル、ランダムグループ分け処理実行後の分割鍵情報テーブルを示す図である。 本発明の実施の形態1におけるマトリックスを利用した恒等式生成処理の概念を示す図である。 本発明の実施の形態1における結合分割鍵識別情報テーブルを示す図である。 本発明の実施の形態1における署名生成処理を詳細に示すフローチャートである。 本発明の実施の形態1における図12のフローチャートの続きを示す図である。 本発明の実施の形態1における署名生成式の生成の具体例を説明する図である。 本発明の実施の形態2におけるECDSAのフローチャートである。 本発明の実施の形態2における図15のS1502の詳細フローチャートである。 本発明の実施の形態2における図15のS1504の詳細フローチャートである。 本発明の実施の形態3における分割鍵埋め込み工程を示す図である。 本発明の実施の形態4における署名鍵生成恒等式生成手段120のプログラムの更新の概要を示す図である。 本発明の実施の形態4における署名鍵生成恒等式生成プログラムの更新を示すフローチャートである。
符号の説明
10 メッセージM
20 署名鍵D
21 署名鍵生成式F
22 分割鍵生成装置
30 署名S
100 署名生成装置
110 分割鍵格納手段
120 署名鍵生成恒等式生成手段
121 署名鍵生成恒等式G
130 結合分割鍵生成手段
140 結合分割鍵格納手段
150 署名生成手段
200 分割識別情報テーブル
201 分割鍵識別子
1000 マトリックス
1001 結合箇所選択部
1900 ネットワーク
1901 更新サーバ
1902 更新用の署名鍵生成恒等式生成プログラム
1903 更新用の署名鍵生成恒等式生成プログラムの改ざん検出値
1910 送受信手段
1920 署名鍵生成恒等式生成プログラム更新手段
以下、本発明の実施の形態について、図面を参照しながら説明する。
(実施の形態1)
本発明の実施の形態1に係る秘密情報を用いセキュア処理を行うセキュア処理装置について、署名鍵を用いて署名生成を行う署名生成装置を例として説明する。
本発明の一実施形態に係る署名生成装置は、入力されるメッセージMに対し、署名生成式S=M^d mod nに基づく署名Sを生成する場合に、署名鍵dを直接メモリ上に現さず、署名鍵dの代わりに分割鍵をメモリ上に現し署名を生成するものであり、かつ、分割鍵の生成手順、分割鍵の値、署名の生成手順を署名生成毎に動的に変更する。
これにより、不正解析者による静的解析や動的解析に対し、秘密情報である署名鍵dを秘匿することが出来る。
<構成>
図1は、本実施の形態1における、署名生成装置100を含む署名生成システムの概要図である。
署名生成システムは、署名鍵生成式F21を用いて、署名鍵Dから後述する分割鍵を生成する分割鍵生成装置22と、前記分割鍵を用いて署名を生成する署名生成装置100とを含んで構成される。
メッセージM10は、署名対象データであり、署名生成装置100に入力されるデータである。なお、図1において、メッセージM10は、外部から署名生成装置100に入力されているが、署名生成装置100内で生成したデータでもよく、署名鍵生成装置のメモリ内に格納されているプログラムコードやデータであってもよい。
署名鍵D20は、署名生成に利用する秘密鍵情報であり、不正解析から保護されるべき情報である。具体的には、公開鍵暗号系を用いたRSA署名生成の場合、素数pと素数qの積をnとした時のRSA署名生成演算M^d mod nにおける変数dが秘密鍵情報に当たり、dには、署名鍵D20が代入される。
図2に示す分割鍵111(D1、D2、D3…、Dn)は、署名生成時に署名鍵D20そのものの値がメモリ上に現れないようにするため、分割鍵生成装置22が、署名鍵D20の値を署名鍵生成恒等式F21に基づいて予め分割して得た分割鍵である。ここで、署名鍵生成式F21と分割鍵111(D1、D2、D3、…、Dn)との間には、分割鍵111(D1、D2、D3、…、Dn)を用いて署名鍵生成式F21を計算することにより、署名鍵D20の値が算出可能となるという関係がある。
次に、分割鍵生成装置22、署名生成装置100について、順に説明する。
(1)分割鍵生成装置22
分割鍵生成装置22は、外部から、署名鍵生成式F21と、署名鍵D20との入力を受け付けて、署名鍵生成式F21と署名鍵D20とに基づき、分割鍵識別情報テーブル200と、分割鍵情報テーブル400とを生成し、分割鍵識別情報テーブル200と、分割鍵情報テーブル400とを、後述する署名生成装置100が備える分割鍵格納手段110に書き込む。
分割鍵生成装置22は、具体的には、マイクロプロセッサ、ROM、RAM、ハードディスクユニット、ディスプレイユニット、キーボード、マウスなどから構成されるコンピュータシステムである。前記ROM又は前記ハードディスクユニットには、コンピュータプログラムが記憶されており、前記コンピュータプログラムが前記RAM上に読み出され、前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、分割鍵生成装置22は、その機能を達成する。
ここで、署名鍵生成式F21は、一例として、8変数(d1〜d8)を引数とする下式であるものとする。
F(d1,d2,d3,d4,d5,d6,d7,d8)=(d1+d2+d3+d4)*(d5+d6+d7+d8)
ここで、変数d1には分割鍵D1が代入され、変数d2には分割鍵D2が代入され、同様に、変数d3〜d8には、分割鍵D3〜D8がそれぞれ代入されるものとする。
署名鍵生成式F21は、分割鍵生成装置22に対し、図4に示す分割鍵情報テーブル400として入力されるのであるが、分割鍵情報テーブル400の説明に先立ち、署名鍵生成式F21の表現形式について図3を用いて説明を行う。
図3は、署名鍵生成式F21「F(d1,d2,d3,d4,d5,d6,d7,d8)=(d1+d2+d3+d4)*(d5+d6+d7+d8)」をツリー構造で概念的に表現したものである。
変数d1、d2、d3、d4は、加算グループ1というグループ情報と関連付けられている。
ここで、グループ情報とは、署名生成式F21において、被演算子(d1〜d8)が他の被演算子とどのような演算(例えば、加算、乗算など)がされるかという関係を表す属性情報である。また、上記のグループを構成する各被演算子や、より小さなグループ等をメンバーと呼ぶ。
例えば、「加算グループ」では、各メンバーが演算子「+(加算)」により演算され、「乗算グループ」では、各メンバーが演算子「*(乗算)」により演算される。
なお、複数の変数から構成されたグループ同士や、グループと他の変数とが、どのような演算子によって演算されるかという関係を表す属性情報についてもグループ情報と呼ぶものとする。
このようにグループ情報という属性情報を与えることで、各変数と署名鍵生成式F21との関係を識別することができる。
具体的には、「加算グループ」では、前述のように、各メンバーが演算子「+(加算)」で演算されるため、加算グループ1はd1+d2+d3+d4という式を表現していることになる。また、変数d5、d6、d7、d8は、加算グループ2というグループ情報と関連づけられている。加算グループ2は、加算グループ1の場合と同様にd5+d6+d7+d8という式を表現している。さらに、加算グループ1と加算グループ2とは、グループ情報として乗算グループ1と関連付けられている。
「乗算グループ」というグループ情報は、前述のように、そのグループの各メンバーが演算子「*(乗算)」で演算されることを示しており、乗算グループ1は、加算グループ1と加算グループ2との乗算という関係を表しており、(d1+d2+d3+d4)*(d5+d6+d7+d8)という署名鍵生成式F21を表現していることになる。
次に、図3の署名鍵生成式F21の構造を、情報として具体的に表した分割鍵情報テーブル400について、図4を用いて説明する。
分割鍵情報テーブル400は、図4に示すように、分割鍵グループ識別子401と分割鍵グループメンバー識別子402とから構成される。
分割鍵グループ識別子401は、上述したグループを識別する識別子であり、分割鍵グループメンバー識別子402は、各グループに属するメンバーを示す識別子である。
図4において、加算グループ1には、分割鍵グループ識別子401として「AG001」が割り当てられている。ここで、図3にて示したとおり、グループ「AG001」に属するメンバーは、変数d1、d2、d3、d4であるので、それぞれの変数を識別する「id001」、「id002」、「id003」、「id004」が、分割鍵グループメンバー識別子402として分割鍵情報テーブル400に登録されている。
また、加算グループ2には、分割鍵グループ識別子401として「AG002」が割り当てられている。ここで、グループ「AG002」に属するメンバーは、変数d5、d6、d7、d8であるので、それぞれの変数を識別する「id005」、「id006」、「id007」、「id008」が分割鍵グループメンバー識別子402として分割鍵情報テーブル400に登録されている。
また、乗算グループ1には、分割鍵グループ識別子401として「MG001」が割り当てられている。グループ「MG001」に属するメンバーは、加算グループ1と加算グループ2であるので、それぞれの分割鍵グループ識別子401である「AG001」と「AG002」が分割鍵グループメンバー識別子402として分割鍵情報テーブル400に登録されている。
このようなデータ構造を用いて、署名鍵生成恒等式生成手段120は、分割鍵識別情報テーブル200と分割鍵情報テーブル400とを参照することで、署名鍵生成式F21の構成を知ることが出来る。
次に、分割鍵生成装置22が、署名生成式F21に基づき、署名鍵Dを複数の分割鍵に分割する処理について説明する。
本実施の形態では、署名鍵生成式F21の入力変数の数が8個であることから、分割鍵生成装置22は、署名鍵D20を8個の分割鍵D1〜D8に分割する。
但し、D1〜D8には、F(D1,D2,D3,D4,D5,D6,D7,D8)=Dを満たす値がランダムに選択される。
ここで、分割鍵Dn(n:1〜8)は、署名鍵生成式の引数dnに代入される。即ち、分割鍵D1は、署名鍵生成式F21の引数d1に代入され、同様に分割鍵D2は、引数d2に代入され、分割鍵D3〜D8は、引数d3〜d8に代入される。
署名鍵Dから、署名鍵生成式F21に基づき、分割鍵D1〜D8を算出する方法の一例として、分割鍵生成装置22は、署名鍵生成式F21で行われている最も外側の演算から順に、演算の単位を細かくしていくことで行う。
具体的には、まず、分割鍵生成装置22は、D=R1*R2が成り立つランダムな値R1、R2を選出する。
次に、R1=(D1+D2+D3+D4)が成り立つランダムな値D1、D2、D3、D4を選出し、R2=(D5+D6+D7+D8)が成り立つランダムな値D5、D6、D7、D8を選出する。
分割鍵生成装置22は、選出した分割鍵D1〜D8のそれぞれに対し、各分割鍵を識別するための識別情報である分割鍵識別子201を割り当てる。
分割鍵生成装置22は、一例として、分割鍵D1に対し分割鍵識別子201として「ID001」を割り当て、分割鍵D2に対し分割鍵識別子201として「ID002」を割り当て、同様に、分割鍵D3、D4、D5、D6、D7、D8のそれぞれに対し、分割鍵識別子201として「ID003」、「ID004」、「ID005」、「ID006」、「ID007」、「ID008」を割り当てる。
分割鍵生成装置22は、図2に示す、分割鍵識別子201と分割鍵111を対応づけた分割鍵識別情報テーブル200を生成して、分割鍵識別情報テーブル200を、後述する署名生成装置100が備える分割鍵格納手段110に書き込む。
(2)署名生成装置100
署名生成装置100は、図1に示すように、分割鍵格納手段110、署名鍵生成恒等式生成手段120、結合分割鍵生成手段130、結合分割鍵格納手段140、署名生成手段150を含んで構成される。
署名生成装置100は、具体的には、マイクロプロセッサ、ROM、RAM、ハードディスクユニット、ディスプレイユニットなどから構成されるコンピュータシステムである。前記ROM又は前記ハードディスクユニットには、コンピュータプログラムが記憶されており、前記コンピュータプログラムが前記RAM上に読み出され、前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、署名生成装置100は、その機能を達成する。
分割鍵格納手段110は、メモリやハードディスクなどの記憶デバイスであり、分割鍵生成装置22により書き込まれる分割鍵識別情報テーブル200及び分割鍵情報テーブル400を記憶する。
署名鍵生成恒等式生成手段120は、署名鍵生成式F21と恒等な式である署名鍵生成恒等式121を生成する。ここで、恒等とは、演算において等価である、演算結果が同一になるような関係のことを言う。
以下、署名鍵生成恒等式生成手段120が、署名鍵生成式F21と署名鍵D20とから、署名鍵生成式F21に恒等な式である署名鍵生成恒等式G121と、図11に示すように後述する結合分割鍵141とを動的に生成する方法について、図を用いて詳細に説明していく。
なお、以降、RSA署名生成を例とした説明を行う。
図5は、署名生成恒等式G121と後述する結合分割鍵141を動的に生成し、署名S30を生成して出力するまでの処理の概要を示すフローチャートである。但し、図5の各ステップは、図6〜図11のフローチャートを用いて詳細に説明する。
図5において、先ず、署名鍵生成恒等式生成手段120が、分割鍵格納手段110に記憶されている分割鍵情報テーブル400を読み取り、署名鍵生成式F21と同一結果を出力する署名鍵生成恒等式G121を生成する(ステップS501)。
次に、署名鍵生成恒等式生成手段120は、ステップS501で生成された署名鍵生成恒等式G121に基づき、分割鍵格納手段110に記憶されている分割鍵111を結合演算することで、分割鍵111とは異なる値の結合分割鍵141を生成し、生成した結合分割鍵141を結合分割鍵格納手段140に書き込む(ステップS502)。
次に、署名生成手段150にて、署名対象メッセージM10と、署名鍵生成恒等式G121と結合分割鍵141を用いて、署名鍵D20の値をメモリに出現させることなく、M^d mod nと同一の結果となる署名S30を算出し、署名S30を出力し署名生成処理を終了する(ステップS503)。
ここで、明細書中「A^B」の記載は、AのB乗を表すものとし、「A mod B」の記載は、Aを自然数Bで割ったときの剰余を表すものとする。
次に、上述した図5のステップS501の詳細について、図6を用いて説明する。
まず、署名鍵生成恒等式生成手段120は、分割鍵格納手段110に記憶されている分割鍵情報テーブル400を読み込み、各グループに属するメンバーの並びをランダムに並び替えるランダムシャッフル処理を行う(ステップS601)。ランダムシャッフルの詳細フローについては、図7を用いて後述する。
次に、ランダムシャッフルされた分割鍵情報テーブル400の各グループのメンバーをランダムにグループ分けする(ステップS602)。ランダムにグループ分けする処理の詳細については、図8、図9を用いて後述する。
次に、ステップS602でランダムにグループ分けされた各グループを式展開して、後述するマトリックス表現というデータ構造に変形し、展開した各グループのうち結合する箇所をランダムに選択して結合を行う。この結果、署名鍵生成式F21と恒等な署名鍵生成恒等式121が生成されるので、これを出力する(ステップS603)。ステップS603については、図10を用いて後述する。
次に、ステップS601における分割鍵グループのメンバーのランダムシャッフル処理の詳細について図7を用いて説明する。
なお、本実施の形態におけるランダムシャッフルとは、例えば、式d1+d2+d3+d4を、交換法則を利用して、恒等な式に変換することを言う。また、加算などの場合に、式1+2+3の計算結果と式3+2+1の計算結果とが同一であるような関係、すなわち、式における被演算子の順序を入れ替えても計算結果が変わらないような関係を「交換法則が成立する」という。
まず、署名鍵生成恒等式生成手段120は、分割鍵格納手段110に記憶されている分割鍵情報テーブル400のグループ総数Nを取得する(ステップS701)。
ここで、分割鍵情報テーブル400は、二次元配列Tableとして表現されているものとする。また、Table[n][m]は、図4の分割鍵グループメンバー識別子401に対応しており、上からn行目のグループに属する、左からm個目の分割鍵グループ識別子を示す。また、単にTable[n]とだけ書く場合は、上からn行目のグループに属する分割鍵グループ識別子の集合を示す。
具体的には、図4に示した分割鍵情報テーブル400を上述したTableの形で表すと、以下のようになる。
Table[0]={AG001,AG002}、
Table[1]={id001,id002,id003,id004}、
Table[2]={id005,id006,id007,id008}
なお、この例及び以下の例では、Tableの各インデックスは0から始まるものとする。
グループ総数Nは、加算グループ、乗算グループ等のグループの個数であり、nの最大値+1に該当する。
図4に示した分割鍵情報テーブル400の場合、グループ総数Nは3となる。
次に、変数iを0で初期化する(ステップS702)。
ここで、iは現在シャッフル対象となっている分割鍵グループが何番目の分割鍵グループであるかをカウントする変数である。
次に、乱数値を発生させシャッフル回数をカウントする変数snに代入する(ステップS703)。
ここで、シャッフル回数snは、各分割鍵グループに対してあと何回シャッフルを行うかを示す変数である。ここで、シャッフル回数snとして乱数を利用することにより、シャッフルする回数を動的に設定することが出来、ひいては署名鍵生成恒等式を動的に生成することが出来る。
次に、Table[i]に登録されているメンバー数、すなわち、i番目のグループに登録されているメンバー数Mを取得する(ステップS704)。
次に、0以上M未満のランダムな整数を2つ発生させ、それぞれを変数s1、s2に代入する(ステップS705)。
ここで、s1、s2としてランダムな整数を利用することにより、シャッフル対象となるメンバーの位置を動的に設定することができ、ひいては署名鍵生成恒等式を動的に生成することが出来る。
次に、Table[i][s1]とTable[i][s2]の値を入れ替えて、snをデクリメントする(ステップS706)。
すなわち、i番目のグループに属するs1番目の構成要素とs2番目の構成要素とを入れ替えた上で、残りシャッフル回数snを1つ減らす。
次に、sn>0かどうか、すなわち現在シャッフルの対象となっているi番目の分割鍵グループについて、まだシャッフル回数が残っているか否かを判定する(ステップS707)。
ステップS707の判定の結果が「YES」ならば、さらにシャッフルを繰り返すため、ステップS705へ戻る。
そうでなく、判定の結果が「NO」ならば、iがN−1と等しいかどうか判定する(ステップS708)。すなわち、全グループについてシャッフルが終了したか否かを判定する。
ステップS708の判定の結果が「NO」ならば、iをインクリメントし、ステップS703へ移ることにより、次の分割鍵グループに対してシャッフルを行っていく(ステップS709)。そうでなく、ステップS708の判定の結果が「YES」ならば、全分割鍵グループに対するシャッフルが終了しているので、ランダムシャッフル処理を終了する。
次に、ステップS602における分割鍵グループのメンバーのランダムグループ分け処理の詳細について図8のフローチャートを参照しながら説明する。
ランダムグループ分けとは、例えば、式(d1+d2+d3)+d4を、結合法則を利用して恒等式d1+(d2+d3+d4)へと変換する処理である。ここで、例えば式(1+2)+3と式1+(2+3)は結果が同一の値となり、このような関係、すなわち、一度に計算を行う単位の分割の仕方に関わらず結果が同一の値となるような関係を「結合法則が成立する」という。
なお、図8においても、図5の説明の際、前述したように分割鍵情報テーブル400は、2次元配列のTable[n][m]で表現されるものとして説明する。
まず、署名鍵生成恒等式生成手段120は、分割鍵格納手段110に記憶されている分割鍵情報テーブル400のグループ総数Nを取得する(ステップS801)。
次に、変数iを0で初期化する(ステップS802)。ここでiは、現在ランダムグループ分けの対象となっている分割鍵グループの番号を示す変数である。
次に、グループ分割位置リストGPを空リストとしてセットする(ステップS803)。ここで、分割位置リストGPは、分割鍵グループのメンバーを、前から何番目の位置で分割するかを示す値のリストである。
次に、Table[i]に登録されているメンバー数Mを取得し、1以上M以下の自然数をランダムに選び、選んだ値をグループ分割数kとする(ステップS804)。ここで、グループ分割数とは、分割鍵グループを何個のグループに分割するかを示す数である。グループ分割数kをランダムな自然数とすることにより、式の分割数を動的に設定することができ、ひいては署名鍵生成恒等式を動的に生成することが出来る。
次に、0以上M−1以下の整数を、重複しないようにk−1個ランダムに選択し、選択した値を降順で並び替え、グループ分割リストGPにセットする(ステップS805)。
このように、グループ分割リストGPの内容ランダムに設定することにより、式の分割位置を動的に設定することができ、ひいては署名鍵生成恒等式を動的に生成することが出来る。
次に、ステップS804で選択されたグループ分割リストGPの位置にあるメンバーの後ろでTable内のメンバーのグループを区切り、k個のグループに分ける(ステップS806)。
次に、iがN−1と等しいかどうかチェックする(ステップS807)。すなわち、全分割鍵グループについて、ランダムグループ分けが終了したか否かを判定する。
ステップS807の判定の結果が「NO」であれば、iをインクリメントし、ステップS803へ戻ることにより、さらに次の分割鍵グループについてランダムグループ分けを行っていく(ステップS808)。そうでなく判定の結果が「YES」であれば、全分割鍵グループについてランダムグループ分けが終了したと判断しランダムグループ分けを終了する。
図9は、図4の分割鍵情報テーブルに対して、図7のランダムシャッフルと図8のランダムグループ分けの処理を行った後の分割鍵情報テーブル400の状態を示した図である。
図9には、図7のフローに従ってランダムシャッフルした結果、MG001では、Table[0][2]={AG001,AG002}であった並びが、{AG002,AG001}のようにシャッフルされ、AG001では、Table[1][4]={id001,id002,id003,id004}であった並びが、{id002,id001,id004,id003}のようにシャッフルされ、AG002では、Table[2][4]={id005,id006,id007,id008}であった並びが、{id007,id006,id008,id005}のようにシャッフルされたことが示されている。
また、図8のフローに従ってランダムグループ分けした結果、MG001では、分割鍵グループメンバー識別子が{AG002}と{AG001}の2個にグループ分けされ、AG001では、{id002,id001}と{id004,id003}の2個にグループ分けされ、AG002では、{id005,id006}と{id007,id008}の2個にグループ分けされたことを示している。
図9のようにランダムシャッフルおよびランダムグループ分けされた場合、図4の分割鍵情報テーブル400で示されていた署名鍵生成式F21
F(d1,d2,d3,d4,d5,d6,d7,d8)=(d1+d2+d3+d4)*(d5+d6+d7+d8)
は、交換法則と結合法則により、署名鍵生成式F21と恒等な署名鍵生成恒等式
G’(d1,d2,d3,d4,d5,d6,d7,d8)=((d7+d6)+(d8+d5))*((d2+d1)+(d4+d3))
に変換されたことになる。
続いて、さらに、この署名鍵生成恒等式G’を後述するマトリックス表現を用いて恒等変換していく。
図10(a)は、図9で生成された署名鍵生成恒等式121の右辺((d7+d6)+(d8+d5))*((d2+d1)+(d4+d3))をマトリックス表現したものである。
ここで、マトリックス表現とは、例えば(d1+d2)*(d3+d4)は、d1*(d3+d4)+d2*(d3+d4)と等しいように、分配法則を利用して署名鍵生成式Fと恒等な式Gを作成するために利用されるデータ構造である。ここで、例えば式3*(2+1)の値が式3*2+3*1の値と等しいような関係、すなわち、式展開前の値と式展開後の値とが等しいような関係を「分配法則が成立する」と言う。
ここで、マトリックス1000の各要素はランダムグループ分けされた各グループ同士について、式展開を施した場合に発生する乗算を示す式であり、それぞれ、署名鍵生成恒等式G’を分配法則を用いて展開した際に掛け合わせられる項を示す。
より具体的な例を示すと、例えばマトリックス1000をMatrix[2][2]の2×2の配列で表現すると、
Matrix[0][0]=(d7+d6)*(d2+d1)
Matrix[0][1]=(d7+d6)*(d4+d3)
Matrix[1][0]=(d8+d5)*(d2+d1)
Matrix[1][1]=(d8+d5)*(d4+d3)
のようになる。
ここで、Matrix[n][m]は、最初の加算グループにおけるn番目の要素と、次の加算グループにおけるm番目の要素との積であり、それぞれ、署名鍵生成恒等式を展開した際に掛け合わせられることになる項同士の積を示している。なお、インデックスnとmとの番号は0から始まるものとし、各加算グループにおいてはより左側にある要素ほどインデックス番号が小さいものとする。
例えば、Matrix[0][0]は、図9のテーブルにおいて最初の加算グループであるAG001における最初のメンバー(d7+d6)と、2番目の加算グループであるAG002における最初のメンバー(d2+d1)とを乗算した値となる。なお、加算グループの数に応じて、Matrix[n][m]「l」・・・と、配列の次元が増加していくことは言うまでもない。
このようなマトリックス表現した署名鍵生成恒等式Gに対して、前述したステップS603において、マトリックス表現の各要素に対して結合する箇所をランダムに選択する処理が行われる。すなわち、マトリックス表現では、同一の行もしくは同一の列に属する要素同士は、少なくとも1つは共通する項が含まれる式であるため、この性質を利用して同一の行もしくは列に属する式同士を結合することが出来る。
以下に、より具体的な例を示す。まず、図10(a)では、1001で図示されているように結合箇所としてMatrix[0][1]とMatrix[1][1]が選択されたものとする。ここで、結合箇所として選択された1001のMatrix[0][1]とMatrix[1][1]の両要素には、(d4+d3)が共に存在している。そのため、結合箇所1001は、
(d4+d3)*((d7+d6)*(d8+d5))
というように(d4+d3)で括ることで、結合することができる。
ここで、上述したように、結合箇所をランダムに選択することにより、結合箇所を動的に決定することができ、ひいては署名生成鍵恒等式Gを動的に生成することが出来る。
図10(b)は、マトリックス表現を用いて最終的な署名生成恒等式G121を生成するまでの式変形を、通常の式の変形で例示したものである。
図9で生成された署名鍵生成恒等式G’は、
G’=((d7+d6)+(d8+d5))*((d2+d1)+(d4+d3))…(式1)
であり、この式を分配法則を用いて展開すると、(式2)のようになる。
G’=(d7+d6)*(d2+d1)+(d7+d6)*(d4+d3)
+(d8+d5)*(d2+d1)+(d8+d5)*(d4+d3)…(式2)
さらに(式2)を図10(a)のマトリックス1000内でステップS603にて結合する箇所としてランダムに指定された1001にあたる項を結合すると、(式3)となる。
G’ = (d7+d6)*(d2+d1)+(d8+d5)*(d2+d1)
+(d4+d3)*((d7+d6)*(d8+d5)) …(式3)
この(式3)が図6のS601からS603を経て生成された署名鍵生成恒等式G121となる。
結合分割鍵生成手段130は、署名鍵生成恒等式G121に基づき、分割鍵格納手段110に記憶された分割鍵同士を結合演算して、分割鍵111とは異なる値の結合分割鍵141(CD1、CD2、…、CDm)を生成する。生成した結合分割鍵141のそれぞれに対し、結合分割鍵141を識別するための結合分割鍵識別子1101を付与して、図11に示す、結合分割鍵識別子1101と結合分割鍵141を対応づけた結合分割鍵識別情報テーブル600を生成して、結合分割鍵識別情報テーブル600を、結合分割鍵格納手段140に書き込む。
ここで、署名鍵生成恒等式G121と結合分割鍵141(CD1、CD2、…、CDm)との間には、結合分割鍵141(CD1、CD2、…、CDm)と署名鍵生成恒等式121から署名鍵Dの値が算出可能となるような関係を有する。
また、結合演算とは、複数の値をまとめて新しい値を生成する演算であり、具体的な例としては加算、乗算やその組み合わせ等がある。すなわち、1+2=3という演算において、「3」は、「1」と「2」という値に対して「+」という結合演算を施して得られる値である。
具体的には、前述したように、ランダムグループ分けした加算グループの各要素{id002,id001}と{id004,id003}{id005,id006}、{id007,id008}を、一塊の入力引数とする。
署名鍵生成恒等式G’の(式3)で示された最小の括弧の単位で、結合分割鍵141を生成すると、以下の7個の結合分割鍵141が生成されることになる。
変数cd1にはd7+d6を演算した結果値が格納され、cd2にはd2+d1を演算した結果値、cd3にはd8+d5を演算した結果値、cd4にはd2+d1を演算した結果値、cd5にはd4+d3を演算した結果値、cd6にはd7+d6を演算した結果値、cd7にはd8+d5を演算した結果値が格納される。すなわち、下式が成立する。
G’(d1,d2,d3,d4,d5,d6,d7,d8)
= G(cd1,cd2,cd3,cd4,cd5,cd6,cd7)
ここで、G’(d1,d2,d3,d4,d5,d6,d7,d8)の引数である変数d1には、id001に対応する分割鍵識別子ID001を持つ分割鍵D1が代入され、同様に変数d2には分割鍵D2が代入され、変数d3、d4、d5、d6、d7、d8のそれぞれには、分割鍵D3、D4、D5、D6、D7、D8がそれぞれ代入される。
また、G(cd1,cd2,cd3,cd4,cd5,cd6,cd7)の引数である変数cd1には、結合分割鍵D1が代入され、同様に変数cd2には結合分割鍵CD2が代入され、変数cd3、cd4、cd5、cd6、cd7のそれぞれには、結合分割鍵CD3、CD4、CD5、CD6、CD7がそれぞれ代入される。
ここで、CD1=D7+D6が成り立ち、CD2=D2+D1が成り立ち、CD3=D8+D5が成り立ち、CD4=D2+D1が成り立ち、CD5=D4+D3が成り立ち、CD6=D7+D6が成り立ち、CD7=D8+D5が成り立つ。
ここで、結合分割鍵141は演算の結果値であるため、この値のみから元の分割鍵111を導出するのは困難となり、分割鍵111を秘匿することが出来る。
図11は、各結合分割鍵141(CD1、CD2、…、CD7)に、それぞれ結合分割鍵識別子1101(ID001、ID002、…、ID007)が付与されていることを示している。
したがって、署名鍵生成恒等式G’である(式3)を、結合分割鍵141を用いた表現である署名鍵生成恒等式G121とすると、次の(式4)のようになる。
G(cd1,cd2,cd3,cd4,cd5,cd6,cd7)
= (cd1*cd2)+(cd3*cd4)+cd5*(cd6+cd7)…(式4)
ここで、(式4)の引数cd1,cd2,…、cd7に結合分割鍵(CD1、CD2、…、CD7)の値を代入した結果と、(式3)の引数d1、d2、…、d8に(D1、D2、…、D8)を代入した結果は等しく、
さらに結合分割鍵141(CD1、CD2、…、CD7)は分割鍵111(D1、D2、…、D8)を結合演算した結果であることから、(式4)は署名鍵生成式F21と同一の結果を得ることができる式となるため、署名生成手段150は、(式4)を署名鍵生成恒等式121として利用する。
結合分割鍵格納手段140は、結合分割鍵生成手段130により署名生成時に動的に生成された結合分割鍵141を記憶する。
署名生成手段150は、メッセージM10を入力とし、結合分割鍵格納手段140に記憶されている結合分割鍵141を用いて署名S30を生成する。RSA署名生成における例を示すと、署名鍵D20を用いず、結合分割鍵141のみを用いてS=M^d mod nと同一の演算結果となる署名S30を生成する。
続いて、図12、図13を用いて、署名生成手段150が結合分割鍵141と署名鍵生成恒等式G121(式4)とを用いた署名生成の処理を示すフローを説明する。
まず、署名Sの生成方法の概略を説明する。
署名生成に用いられる演算式は、署名鍵生成恒等式G121の構造により定まる。
署名Sは、例えば署名鍵生成恒等式Gの各引数cd1〜cd7に、CD1〜CD7が代入されており、(CD1*CD2)+(CD3*CD4)+CD5*(CD6+CD7)であったとき、メッセージMと、n(=p*q)とを用いて、
S0=(M^CD1)^CD2 mod n、
S1= S0*((M^CD3)^CD4) mod n、
S= S1*(((M^CD6)*(M^CD7))^CD5) mod n
という計算により、S=M^D mod nと同じ結果が生成される。
より具体的には、上式Gを(CD1*CD2)と(CD3*CD4)とCD5*(CD6+CD7)ように“+”演算子で区切り、区切られたそれぞれを利用してメッセージMに対してベキ乗演算して、それぞれのベキ乗演算結果を掛けることで署名Sを作成する。
以下、フローの詳細な説明に移るが、以下の例でも、署名鍵生成恒等式G121は(式4)であるものとする。また、署名生成手段150は(式4)を逆ポーランド記法で式表現したものを利用して署名生成するものとする。ここで、逆ポーランド記法とは、演算子を演算対象の後ろに記述する記法であり、演算子が現れるたびに、その演算子の2つ前の値および1つ前の値に対して、その演算子を適用した値を計算していくような規則で示される記法である。
例えば、(式4)を逆ポーランド記法で表し、配列に入れた例を示すと、次のような配列Pとなる。
P[13]={CD1,CD2,*,CD3,CD4,*,+,CD5,CD6,CD7,+,*,+}
以下、図12、図13を用いて、署名生成フローについて詳細に説明する。
まず、署名鍵生成恒等式Gを上記のように逆ポーランド記法で表現し、それを配列Pとして表現する(ステップS1201)。
次に、iとjを1に、ChkとFlagを0に、Nを配列Pのサイズに設定し、スタックにP[0]をプッシュする(ステップS1202)。ここで、iは、現在着目している配列のインデックスであり、jは現在スタックに積まれている分割結合鍵の個数を示す。また、Chkは、配列中でどのインデックスまで演算子“+”であるか否かを確認したかを示す。ここで、Chkは、前述したjを用いて、現在アクセスしている配列P[i]からj−1個先の演算子が“+”であるかどうかを判定し、“+”演算子の有効区間内であるか判定する際に利用する。また、Flagは、“+”演算子の有効な区間内であるか否かを示すフラグとして利用される。より具体的には、署名鍵生成恒等式Gの区切りポイントの判定に利用される。
次に、P[i]が結合分割鍵かどうか判別する(ステップS1203)。
ステップS1203の判別の結果が、「YES」すなわち結合分割鍵であれば、スタックにP[i]の値をプッシュし、配列Pにおけるアクセスを1つ移すためにiをインクリメントし、また、スタックに積まれる分割結合鍵の個数が増えるためjをインクリメントする(ステップS1204)。
そうでなく、判別の結果が「NO」であるなら、すなわち、P[i]が演算子であれば、スタックに積まれている上位2つの結合分割鍵をポップし、それぞれをVal1、Val2とする(ステップS1205)。
次に、i+j−1がChkの値より大きいか、且つi+j−1がN以下かどうかを判定する(ステップS1206)。
ステップS1206の判定結果が「YES」であれば、Chkをi+j−1の値に設定する。すなわち、配列Pのi+j−1番目まで“+”であるかの判定が終了しているため、Chkの値が更新される。そうでなく「NO」であれば、ステップS1208へ処理を移す。なお、ステップS1206にて、i+j−1がN以下かどうかも確認しているのは、Chkが配列のサイズを超えた箇所を示すことを防止するためである。
次に、j>0かつFlag=1かつP[Chk]が“+”演算子であるか判定する(ステップS1208)。
ステップS1208の判定結果が、「YES」であれば、Flagを0に設定する(ステップS1209)。
そうでなく、判定の結果がNOであれば、処理「A」へ処理を移す。
次に図13を用いて、図12のフローの続きについて説明する。
まず、Val1とVal2のパターンを判別する(ステップS1301)。
ステップS1301の判別の結果、Val1、Val2両者が結合分割鍵の場合ステップS1310へ処理を移す。
そうでなく、ステップS1301の判別の結果、Val1、Val2のどちらか一方が結合分割鍵で、他方が署名ベキ乗中間値の場合、ステップS1320へ処理を移す。ここでの署名ベキ乗中間値とは、メッセージM10を、少なくとも一つ以上の結合分割鍵でベキ乗した値を示し、署名S30を算出する過程での中間値となるものである。具体的には、後述するS0やS1等がこれに当たる。
そうでなく、ステップS1301の判別の結果、Val1、Val2の両者が署名ベキ乗中間値の場合、ステップS1330へ処理を移す。
ここから、S1301処理後にそれぞれ処理がS1310、S1320、S1330に分岐した際の、各処理以降の個別の処理について説明する。
ここから、ステップS1310へ処理が移った場合について説明する。
まず、Flagを判別する(ステップS1310)。
ステップS1310の判別の結果、Flag=0、すなわち、“+”演算子の有効区間内である場合は、ステップS1311へ処理を移す。
次に、P[i]の演算子を判別する(ステップS1311)。
ステップS1311の判別の結果、P[i]が“+”演算子であれば、ステップS1312へ処理を移す。
そうでなくステップS1311の判別の結果、P[i]が“*”演算子であれば、ステップS1313へ処理を移す。
ステップS1312では、(M^Val)*(M^Val2) mod nの値をスタックにプッシュする(ステップS1312)。
ステップS1313では、((M^Val1)^Val2)mod nを演算した値をスタックにプッシュする(ステップS1313)。
ステップS1312、S1313の処理後、j=j−2とし、ステップS1341へ処理を移す(ステップS1314)。ここで、j=j−2としているのは、一連の計算により、結合分割鍵(Val1とVal2に当たる)が使用されたため、スタックに積まれる結合分割鍵の数が減少するためである。なお、ステップS1312、S1313で計算結果をスタックにプッシュしているが、この値は上述した署名ベキ乗中間値であって結合分割鍵ではないため、jは2つ減ることになる。
ステップS1341においては、この区間に対する演算は終了したため、Flagは1に設定し直される(ステップS1341)。すなわちFlagが0と設定されている期間は、配列P[Chk]の場所の“+”演算子で区切ることと判定されたときから、S1312、S1313の処理が実行され、jの値が更新されるまでの間であり、それ以外の処理はFlag=1の状態で各ステップが処理される。言い換えると、Flag=1の状態は、前回P[Chk]の“+”演算子で区切れると判定されてから、次のP[Chk]の“+”演算子で区切れると判定されるまで続くことになる。
そうでなくステップS1310の判別の結果、Flag=1である場合、すなわち、演算子“+”によって区切られる区間外である場合には、ステップS1315へ処理を移す。
次に、ステップS1315では、P[i]の演算子を判別する(ステップS1315)。
ステップS1315の判別の結果、P[i]が“+”演算子であれば、ステップS1316へ処理を移す。
そうでなくステップS1315の判別の結果、P[i]が“*”演算子であれば、ステップS1317へ処理を移す。
ステップS1316では、Val1+Val2を演算した結果をスタックにプッシュする(ステップS1316)。
ステップS1317では、Val1*Val2を演算した結果をスタックにプッシュする(ステップS1317)。なお、ここで、ステップS1316およびS1317においてプッシュする値も、また、分割結合鍵であると見なす。すなわち、ベキ乗中間値以外としてプッシュする値は、分割結合鍵であると見なすものとする。
ステップS1316、S1317処理後、ステップS1340へ処理を移す。ステップS1340以降の処理については後述する。
ここまでが、S1310以降の個別の処理についての説明である。
ここから、ステップS1320へ処理が移った場合、すなわち、Val1とVal2との組、結合分割鍵と署名ベキ乗中間値の組であった場合について説明する。
まず、P[i]の演算子を判別する(ステップS1320)。
ステップS1320の判別の結果、P[i]が“+”演算子であれば、ステップS1321へ処理を移す。
そうでなくステップS1311の判別の結果、P[i]が“*”演算子であれば、ステップS1322へ処理を移す。
以下、まず、ステップS1321に分岐した場合の流れについて説明する。
ステップS1321では、結合分割鍵の値をVal1、ベキ乗中間値をVal2とし、(M^Val1)*Val2 mod nを演算した値をスタックへプッシュする(ステップS1321)。
ステップS1322では、結合分割鍵の値をVal2、ベキ乗中間値をVal1とし、Val1^Val2 mod nを演算した値をスタックにプッシュする(ステップS1322)。
ステップS1321、S1322処理後は、ステップS1340へ処理を移す(ステップS1340)。なお、ステップS1340以降の処理については後述する。
ここまでが、S1310以降の個別の処理についての説明である。
(S1330以降の個別処理)
ここから、ステップS1330へ処理が移った場合、すなわち、Val1、Val2の両者が署名ベキ乗中間値の場合について説明する。
ステップS1330では、ベキ乗中間値であるVal1とVal2を利用し、Val1*Val2 mod nを演算した値をスタックにプッシュし、ステップS1341へ処理を移す(S1330)。
ここまでが、S1330以降の個別の処理についての説明である。
以上でS1310、S1320、S1330以降個別のフローについて説明を終わる。
(S1310、S1320、S1330以降の共通処理)
ここからは、S1310、S1320、S1330以降で共通のフローとなる部分について説明する。
ステップS1316あるいはS1317、もしくは、S1321あるいはS1322処理後、jをデクリメントし、そうでなれば何も処理せずステップS1341へ処理を移す(ステップS1340)。ここで、jをデクリメントするのは、ステップS1316あるいはS1317の場合は、結合分割鍵であるVal1とVal2を用い、結合分割鍵とみなされる値をプッシュしているため、差し引き1つの結合分割鍵が減ったためである。また、ステップS1321あるいはS1322の場合は、ベキ乗中間値と結合分割鍵とを用いて、新しいベキ乗中間値を生成しているため、この生成に使われた結合分割鍵がスタックからなくなるからである。
ステップS1314、あるいはS1340処理後、Flagを1にセットし、ステップS1342へ処理を移す(ステップS1341)。
ステップS1341の処理後、i<Nかどうか判別する(ステップS1342)。
ステップS1342での判別の結果が、「NO」であれば、配列Pの次の要素について同様の処理を続けるため、ステップS1343にてiをインクリメントしBへ処理を移す。
そうでなく、ステップS1342での判別の結果が、「YES」であれば、署名の生成は完了しているため、スタックの値を署名S30とし、署名S30を出力(ステップS1344)し、署名生成を終了する。
以上により、署名生成恒等式G’と結合分割鍵141を用いてメッセージM10に対する署名S30が生成される。
図13では署名生成フローチャートについて説明した。ここでは、図13のフローを利用した際のスタックの様子を図14を用いて示す。
図14は、図12と図13で説明した署名生成フローにおけるスタックの様子を示した図である。
署名生成恒等式G121は、逆ポーランド記法で表現されたPに対して署名生成を順に説明する。
まず、P[13]={CD1,CD2,*,CD3,CD4,*,+,CD5,CD6,CD7,+,*,+}より、P[0]である結合分割鍵CD1と、P[1]である結合分割鍵CD2をスタックにプッシュする(ステップS1401)。このとき、iとjはともに2であり、i+j−1は3であるため、Chkの値は3に設定される。
次にP[2]が演算子“*”であるので、スタックの上位2つの値をポップし、Flag=0かつ演算子“*”であるので、(M^CD1)^CD2 mod nをS0とし、S0をスタックにプッシュする(ステップS1402)。この処理が終わった段階で、i=2、j=0、Chk=3となる。また、ステップS1341の動作により、Flagの値は1に戻される。
次に、P[3]である結合分割鍵CD3とP[4]である結合分割鍵CD4をスタックにプッシュする(ステップS1403)。このとき、i=4、j=2となり、Chkの値は5に更新される。なお、P[Chk]は演算子“+”でないため、Flagの値は1のままである。
次に、P[5]が演算子“*”であるため、スタックの上位2つの値をポップし、また、i=5、j=2であるので、Chkが6に更新される。ここで、P[Chk]の演算子は、“+”であるので、Flagの値は0に更新される。Flag=0かつP[5]の演算子が“*”であるので、(M^CD3)^CD4 mod nをS1とし、S1をスタックにプッシュし、Flagを1に更新する(ステップS1404)。この処理が終わった段階で、i=5、j=0、Chk=6、Flag=1となる。
次にP[6]が演算子“+”であり、Flag=1であるので、スタックの上位2つの値S0とS1をポップし、S0*S1 mod nの演算結果をS2とし、S2をスタックにプッシュする。
次に、P[7]、P[8]、P[9]に相当する結合分割鍵CD5、CD6、CD7を順にスタックにプッシュする(スタックS1405)。
次に、P[10]が演算子“+”であり、このときのiの値は10でjの値は3であり、Flag=1かつP[12]=“+”であるので、Flagを0に設定する。その後、スタックの上位2つの値CD6とCD7をポップし、Flag=0かつ演算子“+”であるので、(M^CD6)*(M^CD7) mod nを演算した値をS3とし、S3をスタックにプッシュする(ステップS1406)。
次に、P[11]が演算子“*”であるので、スタックの上位2つのS3とCD5をポップする。このときS3が署名ベキ乗中間値であり、CD5が結合分割鍵であり、演算子“*”であるので、S3^CD5 mod nを演算した値をS4とし、スタックにプッシュする(ステップS1407)。
次に、P[12]が演算子“+”であるので、スタックの上位2つのS2とS4をポップする。このとき、S2とS4は共に署名ベキ乗中間値であるのでS2*S4 mod nを演算した結果スタックにプッシュする(ステップS1408)。
以上により、S2*S4 mod nを演算した結果を署名S30とし、署名S30を出力し署名生成終了となる。
このように、本実施の形態では、署名鍵D21の値を一切利用せず、署名S30を生成することが可能である。さらに、結合分割鍵141が、署名生成時に動的に生成されるので、毎回異なる結合分割鍵を用いて署名生成が可能となる。さらに、署名鍵Dだけでなく、RSA署名における秘密情報(p、q)の値も一切利用せず署名生成が可能となる。また、署名生成恒等式Gも署名生成処理の実行の度に毎回異なるため、ランタイムデータの収集結果の差分をとっても、署名鍵dを算出するための鍵候補となる結合分割鍵特定は困難である。さらに、結合分割鍵が特定されたとしても、結合分割鍵から署名鍵Dを求めるためには、署名鍵生成式Gを特定する必要があり、署名鍵生成恒等式Gの取りうるパターンを総当りで解析しなければならなく、署名鍵Dの解析は非常に困難になる。さらに、署名生成フローも毎回異なるため、署名生成時の電力と署名生成処理時間も変化するので、電力差分攻撃やタイミング攻撃に対しても安全であるという効果も有する。
なお、本実施の形態1において、結合分割鍵141の生成をランダムシャッフルやランダムグループ分け、そしてマトリックス表現を用いて署名鍵生成恒等式Gを生成したが、これらはあくまで一実施例であり、署名鍵生成式F21から、交換法則、結合法則、分配法則などを用いて、署名鍵生成恒等式Gが生成されればよく、本実施の形態で説明した方法以外の方法でも良い。
なお、本実施の形態1では、予め分割鍵格納手段に記憶された分割鍵同士を結合演算することで結合分割鍵を生成しているが、結合分割鍵生成手段で生成される結合分割鍵は、結合分割鍵同士を結合演算した値でもよい。このようにすると、結合分割鍵の取りうる値のバリエーションが増加するため、署名鍵Dの特定をさらに困難にさせる効果がある。
なお、本実施の形態1では、予め分割鍵格納手段に記憶された分割鍵同士を結合演算することで結合分割鍵を生成しているが、署名鍵Dを用いた署名生成結果である署名Sと同じ結果を生成することが出きればよく、同じ結果を生成する処理に影響を与えないような冗長な鍵を用いて、処理を行ってもよい。また冗長鍵は、乱数を発生させた値としてもよい。乱数値をはじめとした冗長鍵を利用した場合、署名鍵生成恒等式で生成される式もこの値を含むようにしてもよい。このように冗長な鍵を利用することにより、本来の処理では必要としない情報を利用することで、不正解析者による解析をさらに困難させる効果がある。
(実施の形態2)
本発明の実施の形態2について、以下に説明する。
実施の形態1では、RSA署名生成における本発明の実施例を説明したが、本実施の形態2では、ECDSA(Elliptic Curve Digital Signature Algorithm)に適用した例について説明する。ECDSAは、楕円曲線上の離散対数問題に基づいて考案された署名方法である。ECDSA自体は公知技術であるため、詳細な説明は省略し、ECDSAに対して本発明を適用した場合の実施例を以下で説明する。なお、下記の図15の説明において、分割乱数情報や結合乱数情報等を用いて、メモリ上に秘密情報が現れないように計算する処理を除いた処理フローが、通常のECDSA署名の生成フローにあたる。
図15は、本発明を適用した場合のECDSAのフロー概要について説明した図である。
なお、本発明を適用した場合の署名生成装置100の構成、及び署名鍵生成恒等式G121と結合分割鍵141の作成方法は、実施の形態1と同じなので説明を省略する。
本実施の形態2では、ECDSAに適用した際に、本実施の形態1と異なる部分について説明する。
ECDSAにおける署名生成式は、次式で示される。
S = (h+r*d)/k mod q
ここで、Sは署名であり、dは署名鍵であり、rはベースポイントPのk倍点のx座標であり、qはベースポイントPの位数である。
また、hはMのハッシュ値でありh=Hash(M)と表され、Mは署名生成対象メッセージであり、Hash(M)は、署名生成対象メッセージMのハッシュ値を計算することを示す。
ECDSAで、秘密にしなければならない情報は、ステップS1502で利用される乱数kと、ステップS1504で利用される署名鍵dの値である。ここで、乱数kを秘密にしなければならない理由は、署名対象メッセージMと署名(r、S)を知り得た場合、次式より署名鍵dを計算できるからである。
h=Hash(M)
d=(k*S−h)/r mod q
以降、図15を用いて、署名鍵dと乱数kの2つの情報を秘密にした場合の、ECDSAの署名生成フローについて説明する。なお、署名生成装置100は、図1の署名生成装置100では図示していないが、楕円曲線のシステムパラメータ(y^2=x^3+a*x+b、定義体GF(p)、ベースポイントP、ベースポイントPの位数q)を保持しており、乱数を生成する乱数生成手段を備えているものとする。
まず、署名生成対象メッセージMに対して、ハッシュ値Hash(M)を計算し、そのハッシュ値をhとする(ステップS1501)。
次に、楕円曲線のベースポイントPに対して乱数kを発生させ、Pのk倍点を計算し、k倍した点をRとする(ステップS1502)。このとき、乱数kは、秘密情報であるので、乱数kの値がメモリに直接現れないように、複数の分割乱数情報を生成し、生成した分割乱数情報のみを用いてPのk倍点を計算する。ステップS1502におけるこの処理については、後に図16を用いて詳細に説明する。
次に、Rのx座標の値をrとする(ステップS1503)。
次に、乱数kと署名鍵dを用いた式S = (h+r*d)/k mod qと恒等な演算を、乱数kと署名鍵dの値を直接メモリ上に保持することなく、代わりに分割乱数情報と、署名鍵dを予め分割した分割鍵とをメモリ上に保持し、これらを用いて署名Sを生成する(ステップS1504)。
ステップS1504におけるこの処理については、後に図17を用いて詳細に説明する。
最後に、ステップS1503とS1504の結果から(r,S)のペアを署名として出力し、ECDSAの署名生成を終了する。
次に、ステップS1502の詳細について、図16に示すフローチャートを用いて説明する。
まず、m個のランダムな式R1…Rmを生成し、その積を演算する乱数生成式Tを作成する。ここで、R1…Rmの積が乱数kにあたる(ステップS1601)。
T = R1*R2*…Rm
更に、R1…Rmのそれぞれを更に細かな値(分割乱数情報)の和に分割する。
T = Σt(1,h)*Σt(2,i)*…*Σt(m,j)…(式T)
ここで、
Σt(1,h)=t(1,1)+t(1,2)+…+t(1,h)
Σt(2,i)=t(2,1)+t(2,2)+…+t(2,i)
・・・
Σt(m,j)=t(m,1)+t(m,2)+…+t(m,j)
である。
t(1,1)、t(1,2)、…、t(1,h)は、それぞれが分割乱数情報であり、式Σt(1,h)はh個の分割乱数情報の和を表す。
また、h、i、j…は、任意の数である。
次に、乱数生成式Tの項であるΣt(1,h)、Σt(2,i)、・・・、Σt(m,j)に用いられている分割乱数情報t(x,y)すなわちt(1,1)、t(1,2)、・・・、t(1,h)、t(2,1)、・・・、t(2,i)、t(m,1)、・・・、t(m,j)のそれぞれに対して、乱数を生成してセットする(ステップS1602)。
次に、Σt(1,h)、Σt(2,i)、・・・Σt(m,j)の値がそれぞれqと互いに素かどうか判定する(ステップS1603)。
ここで、「qと互いに素となる」という条件は、乱数kが逆元を持つために必要な条件である。
ステップS1603の判定の結果が、「NO」であればステップS1602へ処理を戻し、上述した乱数の生成とセットを再度行う。
そうでなくステップS1603の判定の結果が、「YES」であれば、乱数生成式Tと恒等な乱数生成恒等式Uを作成する(ステップS1604)。
ステップS1604における、乱数生成式Tから乱数生成恒等式Uの作成は、実施の形態1における署名鍵生成式F21から署名鍵生成恒等式G121を生成する方法と同様の方法で行うことができるため説明を省略する。
次に乱数生成恒等式Uに基づき結合乱数情報を作成する(ステップS1605)。ここで、結合乱数情報は、実施の形態1における結合分割鍵に相当する。したがって、ステップS1605の結合乱数情報の作成方法は、実施の形態1における結合分割鍵の作成と同様であるので、説明を省略する。
次に、乱数生成恒等式UとステップS1605で作成された結合乱数情報を用いて、ベースポイントPのU倍点U*Pを計算し、その計算結果をRとする(ステップS1606)。
このとき、乱数生成恒等式Uの式に結合乱数情報の値を代入して算出された結果は、ECDSAの本来のアルゴリズムで利用される乱数kに対応する。すなわち、S1502の乱数kに対応する値を直接メモリに出現させることなく、複数の分割乱数を結合演算した値である結合乱数情報のみ利用してPのU倍点を算出することができる。
ステップS1606は、楕円曲線上の点同士の加算および、点のn倍点演算を行う。ここで、この計算を、実施の形態1との対応で説明すると、実施の形態1ではRSAの署名生成処理のベキ乗演算における「ベキ乗演算」が楕円曲線上の「n倍点演算」に、RSAの署名生成処理の「乗算」が楕円曲線上の加算に対応する。したがって、RSAの署名生成フローにおいて、適用する演算の種類を変更したフローにより、楕円曲線上の点同士の加算およびn倍点演算を行うことができる。
ここで、理解の容易化のため、ステップS1601〜S1606までについて、具体例をあげて説明する。
まず、ステップS1601において、上述した方法で生成した乱数生成式Tが以下の式であるとする。
T = Σt(1,4)*Σt(2,4)…(式T)
Σt(1,4)=t(1,1)+t(1,2)+t(1,3)+t(1,4)
Σt(2,4)=t(2,1)+t(2,2)+t(2,3)+t(2,4)
次に、t(1,1)、t(1,2)、…、t(1,4)、t(2,1)、t(2,2)、…、t(2、4)のそれぞれに乱数値を設定する(ステップS1602)。
このとき、Σt(1,4)とΣt(2,4)とが互いに素になるまで、乱数値の設定をやり直す(ステップS1603)。
続いて、乱数生成恒等式Uを、
乱数生成式T=(t(1,1)+t(1,2)+t(1,3)+t(1,4))
*(t(2,1)+t(2,2)+t(2,3)+t(2,4))
から、交換法則、結合法則、分配法則を利用し、例えば、
T = (((t(1,1)+t(1,3))+((t(1,2)+t(1,4)))
*((t(2,1)+t(2,3))
+(((t(1,1)+t(1,4))+((t(1,2)+t(1,3)))
*((t(2,2)+t(2,4))
のように恒等変換し、引数u1〜u6を
u1=t(1,1)+t(1,3)
u2=t(1,2)+t(1,4)
u3=t(2,1)+t(2,3)
u4=t(1,1)+t(1,4)
u5=t(1,2)+t(1,3)
u6=t(2,2)+t(2,4)と設定する(ステップS1605)。
このようにすると乱数生成恒等式Uは、
U(u1,u2,u3,u4,u5,u6)
= (u1+u2)*u3+(u4+u5)*u6となる。
引数u1には、結合乱数情報U1が代入され、引数u2には、結合乱数情報U2が代入され、同様に、引数u3〜u6には、結合乱数情報U3〜U6が代入される。
U = (U1+U2)*U3+(U4+U5)*U6
また、ベースポイントPのU倍点U*Pは、
U*P = U3*(U1*P+U2*P)+U6*(U4*P+U5*P)
で計算可能となる。
ここで、乱数生成式Tと乱数生成恒等式Uとは恒等であるため、U*Pは、T*Pと同一の結果となる。さらに、Tは乱数kを計算する乱数生成式であるので、乱数kやその生成に用いる乱数生成式Tそのものをメモリ上に乗せることなく、Pのk倍点を計算することが可能となる。また、乱数生成恒等式Uや対応する結合乱数情報等は毎回ランダムに生成されるため、乱数kの値の解析を困難にすることができる。これにより、実施の形態2の署名生成装置は、ECDSA署名生成フローの解析を困難にすることができる。
続いて、図17を用いて、図15のステップS1504の詳細フローを説明する。
まず、ランダムな値をm個生成し、それぞれを分割冗長鍵du1、du2、…、dumとし、各分割冗長鍵を加算したdu1+du2+…+dumを分割冗長鍵生成式Duとする(ステップS1701)。
Du = du1+du2+…+dum …(式Du)
これは、式 S = (h+r*d)/k mod qにおける、1/kをメモリ上に直接現すことなく計算するためのものである。
即ち、
1/k = Du/(Du*k)
= du1/(Du*k)+ du2/(Du*k) +・・・+dum/(Du*k)
であり、かつ、S1502で生成したUはkと等価であるので、1/kの代わりに、
du1/(Du*U)+ du2/(Du*U) +・・・+dum/(Du*U)
を計算すればよい。
さらに、上式のDu*Uを式Aとし、Du*Uを、Du*Uと恒等な式B1、B2・・・Bmで置き換えると
1/k = (du1/B1)+ (du2/B2) +・・・+ (dum/Bm)となり
この(du1/B1)をC1に置き換え、同様に(du2/B2)をC2に・・・(dum/Bm)をCmに置き換えると、
1/k = C1+C2+・・・Cm
となる。
結局、署名Sを計算するためには、
S = (h/k + r*d/k) mod n
= (h*(C1+C2+・・・+Cm)
+ r*F*(C1+C2+…+Cm)) mod n
= (h*(C1+C2+・・・+Cm)
+ r*H) mod n
を計算すればよいことになる。
ここで、上式におけるFは、実施の形態1において示した下式
F(d1,d2,d3,d4,d5,d6,d7,d8)
=(d1+d2+d3+d4)*(d5+d6+d7+d8)
を示すものである。
また、Hは、式 F*(C1+C2+…+Cm)と恒等な式であり、Fは、上述の署名鍵生成式である。
以下、ステップS1702以降のフローチャートの説明に戻る。
次に、分割冗長鍵生成式Duの値がqと互いに素かどうか判定する(ステップS1702)。
ステップS1702の判定の結果が「NO」であれば、さらに別のdu1…dumを生成するために、ステップS1701へ処理を戻す。
そうでなく、ステップS1702の判定の結果が「YES」であれば、ステップS1502で求めた乱数生成恒等式Uと分割冗長鍵生成式Duを乗算した式U*DuをAとし、Aと恒等な式をm個生成し、B1、B2、…、Bmとする(ステップS1703)。
ステップS1703で生成した恒等式B1、B2、…、Bmに基づき、結合分割鍵bij(i、j=1、2、…)を生成する(ステップS1704)。
ステップS1703とS1704は、Aを実施の形態1における署名鍵生成式F21と見て、Aの式を構成している分割冗長鍵du1、du2、…、dumおよびステップS1504にて作成した結合乱数情報U1、U2、…、Uiを分割鍵111と見て、実施の形態1と同様の処理を行うことにより、恒等式B1、B2、…、Bm、および、それぞれの恒等式に対応する結合分割鍵bij(i,j=1,2,…)を生成することができる。
なお、実施の形態1では、署名鍵生成恒等式G121は1つしか作成しなかったが、ここでは、署名鍵生成恒等式G121に相当する恒等式B1等をm個生成し、それぞれについて結合分割鍵の組をm組作成する。
次に、ステップS1701で生成したm個の分割冗長鍵du1、du2、…、dumとm個の恒等式B1、B2、…、Bmを用いて、次のようなm個のC1、C2、…、Cmを作成する(ステップS1705)。
C1=du1/B1
C2=du2/B2

Cm=dum/Bm
このとき、C1+C2+…+Cmは、B1、B2、Bmは共にAと恒等であることと、Du=du1+du2+…+dumである性質を利用して、以下のように式変形できる。
C1+C2+…+Cm
=(du1/B1)+(du2/B2)+…+(dum/Bm)
=((du1+du2+…+dum)/A
=(du1+du2+…+dum)/U*Du
=1/U
Uは、ステップS1502の乱数kに相当するため、1/U mod qの値は、k^−1 mod qに相当することになる。これにより、k^−1 mod qの値を、kの値そのものはメモリに乗せることなく計算することができる。
また、恒等式B1…Bmや分割冗長鍵du1、du2…dum等はランダムに生成されるため、k^−1 mod qの計算過程を署名生成を行うたびに動的に変化させることができる。これにより、実施の形態2の署名生成装置は、ECDSA署名生成フローの解析を、困難にすることができる。
次に、署名鍵生成式FとステップS1705で生成したm個のCi(i=1,2,…,m)式を用いて、(式E)を生成する(ステップS1706)。
F*(C1+C2+…+Cm)…(式E)
次に、(式E)と恒等な(式H’)を生成する(ステップS1707)。
次に、(式H’)に基づき、署名鍵生成式Fの要素である分割鍵と、C1、C2、…、Cmの要素値に対して、実施の形態1で説明したフローを用いて結合演算し、結合演算した値を結合分割鍵とする(ステップS1708)。なお、ステップS1807およびステップS1708の処理は、実施の形態1における署名鍵生成式F21を(式E)と、C1、…、Cmの要素値と署名鍵生成式F21の要素値diとを実施の形態1における署名鍵生成式F21の要素値diと見ることにより、実施例1と同様の処理となるため、詳細な説明は省略する。このようにすると恒等式H’は、結合分割鍵を用いたHとして表すことができる。
これにより、恒等式Hに対応する結合分割鍵hiは毎回ランダムに生成されることになるため、ECDSA署名生成フローの解析を、困難にすることができる。
次にステップS1501で算出したハッシュ値hと、ステップS1705で生成した式C1、C2、…、Cmと、ステップS1707で生成した恒等式Hと、ステップS1503で算出した点RのX座標の値rを用いて、
S = (h+r*d)/k mod q
と恒等な演算を、
S = h*(C1+C2+…+Cm)+r*H mod q
上式で算出し、算出値をSとする(ステップS1709)。
以上まとめて、実施の形態2の署名生成装置は、乱数値kの値および署名鍵dの値を直接メモリに出すことなく、署名Sを生成することができる。
なお、ステップS1709の演算においては、h*(C1+C2+…+Cm)の演算結果値が直接メモリに出ないような順序で演算することが望ましい。
なぜならh*(C1+C2+…+Cm)の値から、乱数情報であるkを復元することが可能となるためである。
演算順序については、具体例を後述するので、ここでの説明は省略する。
続いて、図17のフローを具体例を上げて説明する。
まず、3個の乱数を生成し、それぞれを分割冗長鍵du1、du2、du3とし、
Du=du1+du2+du3
とする(ステップS1701)。
ここで、Duがqと互いに素でない場合には、Duとqとが互いに素になるまで分割冗長鍵の生成を繰り返す(ステップS1702)。
続いて、乱数生成恒等式Uを用いた計算の説明に移るが、以下の説明においては、乱数生成恒等式Uは、図16の説明にて生成した以下の(式U)とする。
U = (U1+U2)*U3+(U4+U5)*U6…(式U)
このとき、(式A)は、例えば、以下のようになる。
((U1+U2)*U3+(U4+U5)*U6)
*(du1+du2+du3) …(式A)
次に、(式A)と恒等な(式B1)、(式B2)、(式B3)を生成する。
恒等式B1の計算手順としては、まず、次のような式Aの恒等式1を生成し、
(((U1+U2)*U3)+((U4+U5)*U6))*(du1+du2)
+((U1+U2)*U3+(U4+U5)*U6)*du3
生成した恒等式1に基づいて結合分割鍵をそれぞれ以下のようにする。
b11=(U1+U2)*U3
b12=(U4+U5)*U6
b13=du1+du2
b14=(U1+U2)*U3+(U4+U5)*U6
b15=du3
すると、恒等式B1は、式Aの恒等式1と上記結合分割鍵を用いて以下の(式B1)になる。
(b11+b12)*b13+b14*b15…(式B1)
同様に、恒等式B2の計算手順は、まず、以下のような式Aの恒等式2を生成し、
(U1*U3+U2*U3+U4*U6+U5*U6)
*((du1)+(du2+du3))
生成した恒等式B2について、結合分割鍵をそれぞれ以下のようにする。
b21=U1*U3
b22=U2*U3
b23=U4*U6
b24=U5*U6
b25=du1
b26=du2+du3
すると、恒等式B2は、式Aの恒等式2と上記結合分割鍵を用いて以下の(式B2)になる。
B2 = (b21+b22+b23+b24)*(b25+b26)…(式B2)
さらに同様にして、恒等式B3の生成手順としては、まず、以下のような式Aの恒等式3を生成し、
((U1*U3+U4*U6)+(U2*U3+U5*U6))
*(du1+du2+du3)
生成した恒等式3に応じて、結合分割鍵をそれぞれ以下のようにする。
b31=U1*U3+U4*U6
b32=U2*U3+U5*U6
d33=du1+du2+du3
すると、恒等式B3は、式Aの恒等式3と上記結合分割鍵を用いて以下の式B3になる。
(b31+b32)*b33…(式B3)
続いて、生成した(式B1)、(式B2)、(式B3)を用い、ステップS1705にて、以下の3式C1、C2、C3が生成される。
C1=du1/B1=du1/((b11+b12)*b13+b14*b15)…(式C1)
C2=du2/B2=du2/((b21+b22+b23+b24)*(b25+b26))…(式C2)
C3=du3/B3=du3/((b31+b32)*b33)…(式C3)
このとき、上述したように、C1+C2+C3=k^(−1) mod qが成り立つことになる。
ここで、ECDSAの署名鍵dは8個の分割鍵に分割されており、署名鍵生成式Fは以下のような(式F)であるとする。
F = (d1+d2+d3+d4)*(d5+d6+d7+d8)…(式F)
このとき、次にステップS1706にて生成される(式E)は、
(d1+d2+d3+d4)*(d5+d6+d7+d8)*(C1+C2+C3)となる(ステップS1706)。続いて、(式E)から(式E)と恒等な(式H)を作成する(ステップS1707)。ここでは、(式E)の恒等変換例を
H = ((d1+d3)+(d2+d4))*((d6+d7)+(d8+d5))*C1
+((d2+d3)+(d1+d4))*((d6+d8)+(d7+d5))*(C2+C3)
とし、結合分割鍵をそれぞれ
H1=d1+d3
H2=d2+d4
H3=d6+d7
H4=d8+d5
H5=C1
H6=d2+d3
H7=d1+d4
H8=d6+d8
H9=d7+d5
H10=C2+C3
とする。この場合、恒等式Hは、上記の結合情報を利用して以下のような(式H)となる。
((H1+H2)*(H3*H4))*H5
+((H6+H7)*(H8*H9))*H10…(式H)
次に、
h*(C1+C2+C3)+r*H
=h*(C1+C2+C3)+r*{((H1+H2)*(H3*H4))*H5+
((H6+H7)*(H8*H9))*H10}
を交換法則、結合法則、分配法則を用いてh*(C1+C2+C3)の値が直接メモリに出ないように算出し、算出結果を署名Sとする。h*(C1+C2+C3)の値を直接メモリに出さないようにする計算順序の一例としては、
h*(C1+C2+C3)+r*{((H1+H2)*(H3*H4))*H5+
((H6+H7)*(H8*H9))*H10}
=h*(C1+C2)+r*{((H1+H2)*(H3*H4))*H5}
+h*C3+r*{((H6+H7)*(H8*H9))*H10}
という式に変形して計算する。
すなわち、上述の計算式では、h*(C1+C2+C3)をh*(C1+C2)とh*C3に分けて計算し、かつ、その計算の間に残りの計算を挟むことにより、h+(C1+C2+C3)の値が直接メモリ上に現れないようにしている。
以上のようにすることで、ステップS1502の乱数kに相当する値と署名鍵dの値を直接メモリに出現させることなく、且つ実行の度に署名Sの生成に用いる乱数生成恒等式Uと署名生成式Hを署名生成を実行するたびに変化させることが可能となるため、不正解析による署名鍵dの特定が非常に困難となるという効果がある。
なお、本実施の形態1および2では、RSA署名、ECDSAについて説明しているが、これに限定されるわけではなく、RSA暗号、楕円暗号、ElGamal暗号等、算出演算を用いた公開鍵暗号に利用してもよい。また、本実施の形態1および2にて例示した手順の応用先は、暗号や署名に利用する鍵情報に限定する必要はなく、これらとは異なる保護すべき秘密情報に対して適用してもよいことは言うまでもない。
(実施の形態3)
本発明の実施の形態3について、以下に説明する。
本実施の形態3では、署名鍵を分割鍵に分割し、分割鍵を端末に埋め込むまでの工程を図18を用いて説明する。
鍵発行機関は、署名生成をするための署名鍵を発行する機関である。
鍵発行機関では、n台(情報端末1(1810)、情報端末2(1820)、…、情報端末n(1830))の端末向けに、それぞれ異なる署名鍵1、署名鍵2、…、署名鍵nを発行する。
分割鍵生成装置1802は、鍵発行機関から発行された署名鍵と、署名鍵生成式を入力とし、署名鍵生成式に基づき、署名鍵を分割する装置であり、分割鍵と署名鍵生成式を出力する。
分割鍵書込み装置1805は、署名生成を行う情報端末に対して、分割鍵生成装置1802で生成された分割鍵と署名鍵生成式から成る分割鍵情報1804を情報端末に書き込む装置である。例えば、情報端末が携帯電話などの組み込み機器の場合は、分割鍵書込み装置としては、ROMライターが用いられる。
ここで、情報端末1(1810)、情報端末2(1820)、…、情報端末n(1830)は、署名生成を行う情報端末である。これら情報端末の構成は、実施の形態1で説明した署名生成装置100と同じ構成であるため、本実施の形態3の説明に必要な構成のみを図示している。
端末を製造するメーカーは、分割鍵生成装置1802に対し、鍵発行機関から発行された署名鍵1801と、署名鍵生成式1803を入力し、署名鍵1801を分割した分割鍵と、分割鍵から署名鍵を生成するための情報である署名鍵生成式1803とから構成される分割鍵情報1804を生成する。
分割鍵情報1804は、署名鍵1の分割鍵情報1811、署名鍵2の分割鍵情報1821、署名鍵nの分割鍵情報1831から構成されており、署名鍵1の分割鍵情報1811は、情報端末1810向けの分割鍵情報であり、署名鍵2の分割鍵情報1821は、情報端末2(1820)向けの分割鍵情報であり、署名鍵nの分割鍵情報1831は、情報端末n(1830)向けの分割鍵情報であることを示している。分割鍵情報(1811、1821、1831)は、実施の形態1で示した分割鍵識別情報テーブル200と分割鍵情報テーブル400としてもよく、また、署名鍵dと同じ値を算出できるように分割鍵と署名鍵生成式Fとの関係が識別できる情報であれば他の情報であってもよい。
次に、端末を製造するメーカーは、分割鍵生成装置1802により生成された分割鍵情報1804を、分割鍵書込み装置1805を用いて情報端末1810、1820、1830の各分割鍵格納手段に書き込む。
ここで、書き込むまでのより具体的な一例を説明すると、分割鍵生成装置により生成された分割鍵情報(1811、1821、1831)は、分割鍵識別情報テーブル200と分割鍵情報テーブル400を表現したデータファイルであり、そのデータファイルをコンパイルしてバイナリデータとし、そのバイナリデータをROMライターなどの分割鍵書込み装置1805を用いて、分割鍵格納手段に書き込む。
以上により、情報端末1(1810)の分割鍵格納手段には署名鍵1の分割鍵情報1811が書き込まれ、情報端末2(1820)の分割鍵格納手段には署名鍵2の分割鍵情報1821が書き込まれ、情報端末n(1830)の分割鍵格納手段には署名鍵nの分割鍵情報1831が書き込まれることになる。
なお、本実施の形態3では、情報端末(1810、1820、1830)の署名鍵生成式は、それぞれ異なる署名鍵生成式F1、F2、…Fnとしているが、情報端末全てで同じ署名鍵生成式としてもよい。この場合に情報端末ごとに異なる処理を行わせるためには、分割鍵生成装置1802が各情報端末毎に異なる分割鍵を生成し、生成された情報端末毎に異なる分割鍵を各情報端末(1810、1820、1830)に書き込めばよい。
なお、本実施の形態3では、分割鍵生成装置1802は、外部より署名鍵生成式1803を入力され、入力された署名鍵生成式に基づき署名鍵を分割しているが、入力される情報はこれに限られず、署名鍵から分割鍵を生成するための何らかのパラメータ情報であってもよい。例えば、分割鍵生成装置1802に署名鍵を分割する分割個数のパラメータを入力し、分割鍵生成装置1802内で入力された分割個数に従い、署名鍵を分割するようにしてもよい。さらに、分割鍵生成装置1802内で入力された分割個数に従い、署名鍵生成式を生成し、それを出力するようにしてもよい。ここで、分割鍵を生成するために入力されるパラメータは分割個数でなく、セキュリティレベルやCPUの性能を表すパラメータ情報であってもよく、この場合、入力されたパラメータに応じて分割鍵生成装置1802内で、分割個数を決定するようにしてもよい。具体的にはセキュリティレベルが低かったりCPU性能が高い場合には、より多くの分割鍵を生成するというようにしてもよい。このようにすることで、署名鍵dの分割数を調整することが可能になるためセキュリティ強度を柔軟に設定することが可能である。
また、署名鍵1801は、鍵発行機関にて暗号化された状態で発行されてもよい。その場合、端末を製造するメーカーは、暗号化された署名鍵1801を復号してから、復号した署名鍵を分割鍵生成装置1802に入力する。また、ここでの暗号化方式が公開鍵暗号方式を利用していれば、鍵発行機関は、署名鍵1801に、署名鍵1801の署名を付して送信し、メーカーは、鍵発行機関の公開鍵を利用して、署名鍵1801の署名を検証することにより正当性を検証できるようにしてもよい。このようにすることで、鍵発行機関からメーカーへ渡される署名鍵1801を、受け渡し途中の盗聴や改ざんから保護することができる。
なお、分割鍵生成装置1802と分割鍵書込み装置1805は、端末製造メーカーが利用するとして説明したが、現実的には、製造工程において、分割鍵生成装置1802と分割鍵書込み装置1805の利用場所が異なる場合がある。具体例としては、分割鍵書込み装置1805の利用を端末の製造工場で実施する場合などがある。この場合は、分割鍵生成装置1802で生成した分割鍵情報1804を暗号化し、暗号化した分割鍵情報を端末の製造工場に配布し、端末の製造工場では、配布された暗号化情報を復号し、復号した分割鍵情報1804を分割鍵書込み装置1805に入力するようにしてもよい。このようにすることで、安全な分割鍵の配布が可能となる。
なお、上記では、署名鍵1801、分割鍵情報1804の暗号化方法を示していないが、その場合の暗号化方法については特に限定するわけではなくAESなどの共通鍵暗号もしくは、RSAや楕円暗号などの公開鍵暗号を用いることで実現すればよい。
(実施の形態4)
実施の形態4では、署名鍵生成恒等式生成手段120にて、署名鍵生成恒等式を算出する署名鍵生成恒等式生成プログラムを、ネットワークを介して更新する方法について図19、図20を用いて説明する。
図19は、署名生成装置100が、ネットワーク上にある更新サーバー1901から更新用の署名鍵生成恒等式生成プログラムX1902をダウンロードし、署名鍵生成恒等式生成手段120の署名鍵生成恒等式生成プログラムを更新する概要図である。実施の形態1と異なる点は、実施の形態4は、新しい署名鍵生成恒等式生成プログラムをネットワーク上の更新サーバーからダウンロードし、署名鍵生成恒等式生成手段120の署名鍵生成恒等式生成プログラムを、ダウンロードした署名鍵生成恒等式生成プログラムX1902に更新することができる点である。
ここで、署名生成装置100と更新サーバー1901は、インターネットなどのネットワーク1900を介して接続されている。
更新サーバー1901は、署名生成装置100の署名鍵生成恒等式生成手段120の署名鍵生成恒等式生成プログラムとは別の署名鍵生成恒等式生成プログラムX1902を保持している。ここで、署名鍵生成恒等式生成プログラムX1902は、署名生成プログラムと同等な機能、すなわち、署名鍵生成式F21と恒等な式である署名鍵生成恒等式G121を生成する機能を有する。ただし、署名生成恒等式生成プログラムX1902が署名鍵生成恒等式G121を作成するフローは、署名鍵生成恒等式生成手段120の署名鍵生成恒等式生成プログラムとは異なるものとする。
また、更新サーバー1901は、更新用のプログラムである署名鍵生成恒等式生成プログラムX1902の正当性検証のために利用する署名生成恒等式生成プログラムXの改ざん検出値1903も保持している。なお、改ざん検出値1903の具体例としては、署名鍵生成恒等式生成プログラムXのハッシュ値等がある。
署名生成装置100は、実施の形態1の図1で説明した構成要素に加え、本実施の形態4では、送受信手段1910と署名鍵生成恒等式生成プログラム更新手段1920とを備えるものとする。
送受信手段1910は、ネットワークを介して更新サーバー1901とデータの送受信を行う手段である。
署名鍵生成恒等式生成プログラム更新手段1920は、署名鍵生成恒等式生成プログラムの更新要求メッセージを、送受信手段1910を利用して、ネットワーク上に存在する更新サーバー1901に送信する。さらに、送受信手段1910を介して更新サーバー1901から署名鍵生成恒等式生成プログラムX1902を受信し、受信した署名鍵生成恒等式生成プログラムX1902で署名鍵生成恒等式生成手段120のプログラムを更新する。
次に図20を用いて署名鍵生成恒等式生成手段120の署名鍵生成恒等式生成プログラムの更新フローについて説明する。
まず、署名鍵生成恒等式生成プログラム更新手段1920が送受信手段1910に、署名鍵生成恒等式生成プログラムX1902のダウンロードを要求する(ステップS2001)。
次に、ダウンロード要求を受けた送受信手段1910は、ネットワーク1900を介して、更新サーバー1901へ署名鍵生成恒等式生成プログラムX1902のダウンロード要求メッセージを送信する(ステップS2002)。
次に、ダウンロード要求メッセージを受けた更新サーバー1901は、更新サーバー1901内で保持している署名鍵生成恒等式生成プログラムX1902と署名鍵生成恒等式生成プログラムX1902のハッシュ値1903を送受信手段1910に送信する(ステップS2003)。
続いて、送受信手段1910は、署名鍵生成恒等式生成プログラムX1902と署名鍵生成恒等式生成プログラムX1902のハッシュ値1903を更新サーバー1901から受信を完了した時点で、ダウンロード完了通知を署名鍵生成恒等式生成プログラム更新手段1920に通知する(ステップS2004)。
次に、署名鍵生成恒等式生成プログラム更新手段1920は、署名鍵生成恒等式生成プログラムX1902のハッシュ値1903を利用して、署名鍵生成恒等式生成プログラムX1902が改竄されていないかを判定する。この判定の結果が「YES」、すなわち改ざんされていると判定された場合には更新フローを終了し、この判定結果が「NO」、すなわち改ざんされていないと判定された場合には更新処理を継続する(ステップS2005)。
次に、署名鍵生成恒等式生成プログラム更新手段1920は、署名鍵生成恒等式生成手段120の署名鍵生成恒等式生成プログラムを、ダウンロードした署名鍵生成恒等式生成プログラムX1902で上書きすることで更新する(ステップS2005)。
書き込みが完了すると、署名鍵生成恒等式生成プログラム更新手段1920は書込み完了通知を受信し、これをもって更新フローは終了する(ステップS2006)。
以上のように署名生成装置100は、ネットワーク1900を利用して、更新サーバー1901から新しい署名鍵生成恒等式生成プログラムX1902をダウンロードして署名鍵生成恒等式生成手段120の署名鍵生成恒等式プログラムの更新を行う。
このような更新機能を持たせることで、署名鍵生成恒等式プログラムが不正解析者により改竄された場合や、署名鍵生成恒等式生成プログラムの不具合があった場合に、署名鍵生成恒等式プログラムを更新することにより、署名生成装置100の安全性を確保することができる。
なお、実施の形態4では、図20のステップS2001のダウンロード要求を送信するタイミングについては示していないが、例えば、署名生成装置100内で署名生成処理の開始要求の前に署名鍵生成恒等式生成手段120のプログラム(署名鍵生成恒等式生成プログラムXに相当する)の正当性を検証し、検証の結果、「正当でない」と判定された場合に、ステップS2001のダウンロード要求をするようにしてもよい。署名鍵生成恒等式生成手段120のプログラムの正当性の検証についてのより具体的方法としては、署名生成装置100内の安全なメモリに署名鍵生成恒等式生成手段120のプログラムのハッシュ値を保持しておき、署名生成処理が開始される前に、署名鍵生成恒等式生成手段120の署名鍵生成恒等式生成プログラムのハッシュ値を算出し、算出したハッシュ値と、メモリ内に保持していたハッシュ値を比較する方法などがある。
また、実施の形態4では、署名生成装置100と更新サーバー1901間でのデータ通信を、セキュア通信路(SAC)でセッション鍵を共有し、セッション鍵で暗号化したデータの送受信としてもよい。SACについては、Secure Sockets Layer(SSL)などで利用されており既知の技術なので、説明を省略する。
また、実施の形態4では、ネットワークを介して更新サーバー1901から更新用の署名鍵生成恒等式生成プログラムX1902をダウンロードしていたが、ネットワークでなく、署名鍵生成恒等式生成プログラムX1902が記録されたDVDやCD等の記録媒体を用いることで、署名鍵生成恒等式生成手段120のプログラムを更新するようにしてもよい。この処理を行う署名生成装置100は、図20における送受信手段1910を、記録媒体とのデータの読み書きを操作するようなドライバの機能を持たせたものとすることにより実現することができる。すなわち、上述のような署名生成装置100は、図20において、送受信手段1910を記録媒体ドライバとし、更新サーバー1901を記録メディアとし、ダウンロード要求を媒体からの読み込み要求と置き換えることにより実現できるため、詳細な説明は省略する。
また、実施の形態4では、署名鍵生成恒等式生成手段120のプログラムを更新するとしていたが、更新する対象を分割鍵格納手段に記憶されている分割鍵111としてもよい。この場合は、分割鍵111のみの更新だけでなく、分割鍵111と署名鍵生成式F21との関連情報が分かる分割鍵識別情報テーブル200と分割鍵情報テーブル400も同時に更新するようにする。また、更新する対象を結合分割鍵生成手段のプログラムとしてもよい。
このようにすることで、生成される分割鍵の個数や結合分割鍵の個数を、更新サーバが調整することが可能となり、セキュリティ強度を柔軟に設定することが可能となる。
<なお書き>
なお、本発明を上記実施の形態に基づいて説明してきたが、本発明は、上記の実施の形態に限定されないのはもちろんである。以下のような場合も本発明に含まれる。
(1)上記の装置は、具体的には、マイクロプロセッサ、ROM、RAM、ハードディスクユニット、ディスプレイユニット、キーボード、マウスなどから構成されるコンピュータシステムである。前記RAMまたはハードディスクユニットには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムにしたがって動作することにより、上記装置は、その機能を達成する。ここでコンピュータプログラムは、所定の機能を達成するために、コンピュータに対する指令を示す命令コードが複数個組み合わされて構成されたものである。
(2)上記の各装置を構成する構成要素の一部又は全部は、1個のシステムLSI(Large Scale Integration:大規模集積回路)から構成されているとしてもよい。システムLSIは、複数の構成部を1個のチップ上に集積して製造された超多機能LSIであり、具体的には、マイクロプロセッサ、ROM、RAMなどを含んで構成されるコンピュータシステムである。前記RAMには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、システムLSIは、その機能を達成する。これらは個別に1チップ化されても良いし、一部又は全てを含むように1チップ化されても良い。
また、ここでは、システムLSIとしたが、集積度の違いにより、IC、システムLSI、スーパーLSI、ウルトラLSIと呼称されることもある。
また、集積回路化の手法はLSIに限るものではなく、専用回路又は汎用プロセサで実現してもよい。LSI製造後に、プログラムすることが可能なFPGA(Field Programmable Gate Array)や、LSI内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサーを利用しても良い。
さらには、半導体技術の進歩又は派生する別技術によりLSIに置き換わる集積回路化の技術が登場すれば、当然、その技術を用いて機能ブロックの集積化を行ってもよい。バイオ技術の適用等が可能性としてありえる。
(3) 本実施の形態1では、分割鍵識別情報テーブル200や分割鍵情報テーブル400は、分割鍵生成装置22が書き込むこととしているが、これらのテーブルを署名生成装置100内部で生成してもよいことは言うまでもない。
なお、不正解析により分割鍵情報テーブル400の内容から署名鍵生成式F21が特定される恐れがあるため、より安全な実装方法として、分割鍵情報テーブル400は、暗号化された状態で保持され、署名生成時にのみ復号するようにしてもよい。これにより、静的解析による署名鍵生成式F21の特定が困難となるため、安全性が向上する。また、署名鍵生成式F21が特定されなければ、署名鍵dの特定も困難となる。
(4)実施の形態では、先ず署名鍵生成恒等式を生成し、次いで前記署名生成絵恒等式に合わせた結合分割鍵を生成する場合について説明しているが、これに限らず、署名鍵生成恒等式と結合分割鍵とが生成できる手順に従えばよい。
例えば、先ず、ランダムに結合分割鍵を生成しておき、次いでその結合分割鍵に相当する部分が含まれる署名生成恒等式を生成することとしてもよい。
(5)上記の装置を構成する構成要素の一部または全部は、装置に脱着可能なICカードまたは単体のモジュールから構成されているとしてもよい。前記ICカードまたは前記モジュールは、マイクロプロセッサ、ROM、RAMなどから構成されるコンピュータシステムである。前記ICカードまたは前記モジュールは、上記の超多機能LSIを含むとしてもよい。マイクロプロセッサが、コンピュータプログラムにしたがって動作することにより、前記ICカードまたは前記モジュールは、その機能を達成する。このICカードまたはこのモジュールは、耐タンパ性を有するとしてもよい。
(6)本発明は、上記に示す方法であるとしてもよい。また、これらの方法をコンピュータにより実現するコンピュータプログラムであるとしてもよいし、前記コンピュータプログラムからなるデジタル信号であるとしてもよい。
また、本発明は、前記コンピュータプログラムまたは前記デジタル信号をコンピュータ読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、CD−ROM、MO、DVD、DVD−ROM、DVD−RAM、BD(Blu−ray Disc)、半導体メモリなどに記録したものとしてもよい。また、これらの記録媒体に記録されている前記デジタル信号であるとしてもよい。
また、本発明は、前記コンピュータプログラムまたは前記デジタル信号を、電気通信回線、無線または有線通信回線、インターネットを代表とするネットワーク、データ放送等を経由して伝送するものとしてもよい。
また、本発明は、マイクロプロセッサとメモリを備えたコンピュータシステムであって、前記メモリは、上記コンピュータプログラムを記憶しており、前記マイクロプロセッサは、前記コンピュータプログラムにしたがって動作するとしてもよい。
また、前記プログラムまたは前記デジタル信号を前記記録媒体に記録して移送することにより、または前記プログラムまたは前記デジタル信号を前記ネットワーク等を経由して移送することにより、独立した他のコンピュータシステムにより実施するとしてもよい。
(7)上記実施の形態及び上記変形例をそれぞれ組み合わせるとしてもよい。
(8)明細書中での用語「交換法則」、「分配法則」、「結合法則」、「逆ポーランド記法」に関する記述は、公知の用語を念のために述べているに過ぎず、これらの用語に新たな定義を与えるものではない。
本発明にかかるセキュア処理装置および方法は、分割された秘密情報のみの演算結果から導出することでプログラムの実行中に秘密情報を現すことなく、セキュアな処理を実行することができる効果を有する。また、秘密情報を利用するセキュア処理実行の度に、毎回異なる分割秘密情報を動的に生成し、セキュア処理の実行フローを動的に変更させることで、不正解析者の動的解析を困難にするという効果とを有する。このことから、不正解析者に漏洩すると不利益を招くような秘密情報を用いた処理を行うソフトウェア等の分野において有用である。
本発明は、プログラムの不正な改ざんや解析を防止する技術等に関するものである。
従来、データの改ざん検出等の目的で、電子署名(以下、署名とも呼ぶ)が広く用いられている。その署名生成方法の一つに、RSA(Rivest Shamir Adleman)署名生成法がある。RSA署名生成法では、署名対象メッセージMに対して署名鍵dを使って、S=M^d mod nという演算を行うことにより署名Sを生成する。
上述した署名鍵dは保護しなくてはならない情報であり、以下、このような情報のことを秘密情報と呼ぶ。また、本明細書において、記号^は、ベキ乗演算を表し、記号*は、乗算を表すものとする。
ここで、上述のRSA署名生成の処理実行中には、コンピュータ内のRAMやCPUのレジスタなどのメモリ上に署名鍵dの値が出現してしまうため、これらのメモリを解析することにより署名鍵dが不正に取得される危険性がある。
このような署名鍵dの不正取得を防ぐための技術の1つとして、署名鍵dの値をメモリ上に出現させることなく署名生成を行う手法が非特許文献1に開示されている。
非特許文献1の手法では、まず、署名鍵生成式d=(d1*d2)+d3を満たすようなd1、d2、d3を求める。ここで、d1、d2およびd3が上述した分割鍵であり、署名鍵から分割鍵を生成することを署名鍵の分割と呼ぶ。
この分割鍵(d1、d2、d3)と署名鍵生成式に基づき
S1=M^d1 mod n
S2=S1^d2 mod n
S=S2*M^d3 mod n
の順に演算を行う。これにより、署名鍵dを使うことなく、RSA署名生成式S=M^d mod nと同じ署名Sが得られる。また、署名生成処理中には、メモリ上に、署名鍵dではなく、分割鍵(d1、d2、d3)が現れることとなるので、署名鍵dを保護することが出来る。
「署名生成ソフトウェアのランタイムデータ探索による耐タンパー性評価」 横浜国立大学 本田洋之 松本 勉 SCIS2005
しかしながら、前述した手法では署名鍵生成式が常に固定であるため、署名生成部を静的解析することで署名鍵生成式を特定することができる。
さらに、毎回同一の分割鍵を利用するため、署名対象データを変えながら複数回の署名生成時のランタイムデータを収集し、収集した複数のランタイムデータ同士の差分を見て不変なデータを抽出するという動的解析を行うことにより、分割鍵を特定することができる。
そして、上記の方法により特定した分割鍵と署名鍵生成式とを用いると署名鍵の特定が可能であるという課題があった。
上記課題に鑑み本発明は、不正解析者により静的解析や動的解析が成された場合であっても、秘密情報を秘匿することが出来るセキュア処理装置を提供することを目的とする。
上記課題を解決するために、本発明は、メッセージに対して秘密情報を用いたセキュア演算を施した場合と同一の演算結果を得るセキュア処理装置であって、秘密情報を少なくとも2つに分割した分割秘密情報が引数として入力され、当該分割秘密情報から前記秘密情報を算出する第1の秘密情報生成式と、前記秘密情報を用いたセキュア演算の手順を示す第1のセキュア演算手順とを記憶している記憶手段と、少なくとも2つの前記分割秘密情報を演算した結果である結合秘密情報が引数として入力され、前記第1の秘密情報生成式と演算上等価な第2の秘密情報生成式を生成する第1生成手段と、前記第2の秘密情報生成式に含まれる演算子に基づいて、引数として前記結合秘密情報が入力され前記第1のセキュア演算手順と等価な演算の手順を示す第2のセキュア演算手順を生成する第2生成手段と、前記メッセージに対し前記第2のセキュア演算手順に従ったセキュア演算を施す実行手段とを備える。
本発明のセキュア処理装置は、上述の構成を備えることにより、セキュア処理の実行毎に、前記結合秘密情報を生成し、第2のセキュア演算手順を生成し、第2のセキュア演算手順を実行することにより、第1のセキュア演算と同じ結果を得るので、前記秘密情報の代わりにセキュア演算毎に異なる値となる結合秘密情報が演算用のメモリ上に現れ、第2のセキュア演算手順がセキュア処理の実行毎に異なるものとなるため、静的解析及び動的解析による前記秘密情報の特定が困難となる。よって、前記秘密情報を秘匿することが出来る。
また、前記第1の秘密情報生成式は、1以上の演算を含み、前記第2生成手段は、前記第1の秘密情報生成式に含まれる演算から、交換法則、結合法則、分配法則のいずれかを前記演算との間で満たす代替演算のある演算をランダムに選択し、選択した演算を前記代替演算に置き換えることにより第2の秘密情報生成式を生成することとしてもよい。
また、前記第1の秘密情報生成式は1以上の演算を含み、各演算は、複数の被演算子と、被演算子同士の計算の内容を示す演算子とを含み、前記記憶手段は、前記第1の秘密情報生成式に係る前記被演算子と前記演算子との関係を示す属性情報を記憶しており、前記第1生成手段は、前記属性情報を用いて前記第2の秘密情報生成式を生成することとしてもよい。
また、前記第1の秘密情報生成式において、前記被演算子には引数の値が入力され、前記引数それぞれの値は、前記分割秘密情報のいずれかが重複無く対応し、前記属性情報は、結合可能な複数の被演算子と対応する演算子を示し、前記第1生成手段は、前記属性情報に基づき、前記第1の秘密情報生成式における前記複数の被演算子を前記演算子で結合し、前記第2生成手段は、前記結合秘密情報を、前記結合された各被演算子に対応する分割秘密情報を、前記演算子を用いて結合することにより生成することとしてもよい。
また、前記第2の秘密情報生成式は、1以上の演算を含み、各演算は、複数の被演算子と、被演算子同士の計算の内容を示す演算子とを含み、前記記憶手段は、前記第2の秘密情報生成式に係る前記被演算子と前記演算子との関係を示す属性情報を記憶しており、前記第2生成手段は、前記属性情報を用いて前記第2のセキュア演算手順を生成することとしてもよい。
この構成によれば、第1の秘密情報生成式と同じ結果を得る第2の秘密情報生成式をランダムに生成することができるので、静的解析による秘密情報の特定を困難にすることができる。
また、前記第1生成手段は、更に、乱数情報を生成し、前記乱数情報を含んだ前記第2の秘密情報生成式を生成し、前記第2生成手段は、前記第2の秘密情報生成式に基づき、前記結合秘密情報と前記乱数情報とを用いて前記第1のセキュア演算手順と等価な演算の手順を示す第2のセキュア演算式を生成し、前記実行手段は、前記メッセージに対し前記結合秘密情報と、前記乱数情報とを用いて前記第2のセキュア演算手順に従ったセキュア演算を施すこととしてもよい。
この構成によれば、乱数情報を含むことにより、前記第2の秘密情報生成式の解析が困難となり、乱数情報を用いて実行する第2のセキュア演算手順に従ったセキュア演算の静的解析を困難にすることができる。
また、前記第1生成手段は、更に、前記秘密情報を用いた、演算処理の結果に影響を与えない冗長情報を生成し、当該冗長情報を用いて、前記第2の秘密情報生成式を生成することとしてもよい。
この構成によれば、冗長情報を用いるので第2の秘密情報生成式の静的解析を困難にすることができる。
また、前記記憶手段は、前記分割秘密情報と共に前記実行手段により用いられないダミー情報を記憶していることとしてもよい。
この構成によれば、記憶手段に記憶されている情報に基づきセキュア処理を静的解析することを困難にすることができる。
また、前記秘密情報は、デジタル署名を生成するための署名鍵であり、前記セキュア演算は、前記メッセージにデジタル署名を施す署名生成演算であることとしてもよい。
この構成によれば、デジタル署名処理の実行において、静的解析による秘密情報の特定を困難にすることができる。
また、前記署名生成処理は、RSA(Rivest Shamir Adleman)署名生成処理であることとしてもよい。
この構成によれば、RSA署名生成処理の実行において、静的解析による秘密情報の特定を困難にすることができる。
また、前記署名生成処理は、楕円曲線デジタル署名方式による署名処理であることとしてもよい。
また、前記セキュア処理装置は、更に、乱数情報を生成する乱数情報生成手段を備え、前記実行手段は、前記楕円曲線デジタル署名方式における定義体GF(p)上の楕円曲線の位数qであるベースポイントPの乱数値k倍点を計算する処理と、定義体GF(q)上でのkの逆数の値を用いた処理とを、前記乱数kを直接利用することなく、少なくとも2つの前記乱数情報を用いて行うこととしてもよい。
この構成によれば、楕円曲線デジタル署名方式による署名処理の実行において、静的解析による秘密情報の特定を困難にすることができる。
また、前記秘密情報は前記公開鍵暗号の前記秘密鍵であり、前記実行手段は、前記セキュア演算として、公開鍵と秘密鍵を利用した公開鍵暗号系の処理を行うこととしてもよい。
この構成によれば、公開鍵暗号によるセキュア処理の実行において、静的解析による秘密鍵の特定を困難にすることができる。
また、前記公開鍵暗号はRSA暗号であることとしてもよい。
この構成によれば、RSA暗号によるセキュア処理の実行において、静的解析による秘密鍵の特定を困難にすることができる。
また、前記公開鍵暗号は楕円曲線暗号であることとしてもよい。
この構成によれば、楕円曲線暗号によるセキュア処理の実行において、静的解析による秘密鍵の特定を困難にすることができる。
また、前記セキュア処理装置は、更に、外部から、前記第1生成手段の更新用データを取得する取得手段と、前記更新用データを用いて、前記第1生成手段を更新する更新手段とを含むこととしてもよい。
この構成によれば、第1生成手段を更新することにより、セキュア処理実行時に静的解析される場合であっても、秘密情報の特定を困難にすることができる。 また、生成される分割鍵の個数や結合分割鍵の個数を、装置外部から調整することが可能となり、セキュリティ強度を柔軟に設定することが可能となる。
また、前記セキュア処理装置は、更に、外部から、更新用の分割秘密情報を取得する取得手段と、前記記憶手段に記憶されている分割秘密情報を、前記取得手段が取得した更新用の分割秘密情報に更新する更新手段とを含むこととしてもよい。
この構成によれば、分割秘密情報を更新することにより、セキュア処理実行時に静的解析される場合であっても、秘密情報の特定を困難にすることができる。
また、生成される分割鍵の個数や結合分割鍵の個数を、装置外部から調整することが可能となり、セキュリティ強度を柔軟に設定することが可能となる。
本発明のセキュア処理方法は、メッセージに対し秘密情報を用いたセキュア演算を施した場合と同一の演算結果を得るセキュア処理装置において用いられるセキュア処理方法であって、前記セキュア処理装置は、秘密情報を少なくとも2つに分割した分割秘密情報が引数として入力され、当該分割秘密情報から前記秘密情報を算出する第1の秘密情報生成式と、前記秘密情報を用いたセキュア演算の手順を示す第1のセキュア演算手順とを記憶している記憶手段を備えており、前記セキュア処理方法は、少なくとも2つの前記分割秘密情報を演算した結果である結合秘密情報が引数として入力され、前記第1の秘密情報生成式と同一の結果を出力する第2の秘密情報生成式を生成する第1生成ステップと、前記第2の秘密情報生成式に含まれる演算子に基づいて、前記結合秘密情報が引数として入力され前記第1のセキュア演算手順と等価な演算の手順を示す第2のセキュア演算手順を生成する第2生成ステップと、前記メッセージに対し前記第2のセキュア演算手順に従ったセキュア演算を施す実行ステップとを含む。
本発明のコンピュータプログラムは、メッセージに対して秘密情報を用いたセキュア演算を施した場合と同一の演算結果を得るセキュア処理装置において用いられるコンピュータプログラムであって、前記セキュア処理装置は、秘密情報を少なくとも2つに分割した分割秘密情報が引数として入力され、当該分割秘密情報から前記秘密情報を算出する第1の秘密情報生成式と、前記秘密情報を用いたセキュア演算の手順を示す第1のセキュア演算手順とを記憶している記憶手段を備えており、前記コンピュータプログラムは、少なくとも2つの前記分割秘密情報を演算した結果である結合秘密情報が引数として入力され、前記第1の秘密情報生成式と演算上等価な第2の秘密情報生成式を生成する第1生成ステップと、前記第2の秘密情報生成式に含まれる演算子に基づいて、前記結合秘密情報が引数として入力され前記第1のセキュア演算手順と等価な演算の手順を示す第2のセキュア演算手順を生成する第2生成ステップと、前記メッセージに対し前記第2のセキュア演算手順に従ったセキュア演算を施す実行ステップとを含む。
本発明の記録媒体は、コンピュータ読み取り可能な記録媒体であって、前記コンピュータプログラムを記録している。
本発明の集積回路は、メッセージに対して秘密情報を用いたセキュア演算を施した場合と同一の演算結果を得る集積回路であって、秘密情報を少なくとも2つに分割した分割秘密情報が引数として入力され、当該分割秘密情報から前記秘密情報を算出する第1の秘密情報生成式と、前記秘密情報を用いたセキュア演算の手順を示す第1のセキュア演算手順とを記憶している記憶手段と、少なくとも2つの前記分割秘密情報を演算した結果である結合秘密情報が引数として入力され、前記第1の秘密情報生成式と演算上等価な第2の秘密情報生成式を生成する第1生成手段と、前記第2の秘密情報生成式に含まれる演算子に基づいて、引数として前記結合秘密情報が入力され前記第1のセキュア演算手順と等価な演算の手順を示す第2のセキュア演算手順を生成する第2生成手段と、前記メッセージに対し前記第2のセキュア演算手順に従ったセキュア演算を施す実行手段とを備える。
この構成によれば、セキュア処理の実行毎に、前記結合秘密情報を生成し、第2のセキュア演算手順を生成し、第2のセキュア演算手順を実行することにより、第1のセキュア演算と同じ結果を得るので、前記秘密情報の代わりにセキュア演算毎に異なる値となる結合秘密情報が演算用のメモリ上に現れ、第2のセキュア演算手順がセキュア処理の実行毎に異なるものとなるため、静的解析による前記秘密情報の特定が困難となる。よって、前記秘密情報を秘匿することが出来る。
本発明の難読化秘密情報埋め込み方法は、秘密情報を用いた演算を行うセキュア処理装置に、前記秘密情報を難読化して埋め込む難読化秘密情報埋め込み方法であって、前記秘密情報を解析が困難な状態に変換する難読化装置を用いて、前記秘密情報を難読化する秘密情報難読化ステップと、難読化情報書き込み装置を用いて、難読化された秘密情報を前記セキュア処理装置に埋め込む埋込ステップとを含む。
この構成によれば、セキュア処理装置に秘密情報を難読化して埋め込むことにより、秘密情報が暴露されるのを防ぐことができる。
また、前記難読化装置は、前記秘密情報の難読化の方法を決定するためのパラメータを入力として受け付ける入力手段を備え、前記秘密情報難読化ステップは、前記入力手段が前記パラメータを受け付ける受付ステップと、前記パラメータに基いて決定される難読化方法で、前記秘密情報を難読化する難読化ステップとを含んでもよい。
この構成によれば、前記秘密情報の難読化の方法を決定するためのパラメータを外部から与えることにより、セキュリティ強度を柔軟に設定することができる。
また、前記パラメータは、前記秘密情報の分割個数であり、前記難読化ステップは、前記分割個数に基づいて、前記秘密情報を少なくとも2つの分割秘密情報に分割する分割ステップを含むこととしてもよい。
また、前記難読化ステップは、更に、前記分割個数に基づき、少なくとも前記分割個数の項を含む第1の秘密情報生成式を生成する式生成ステップを含み、前記分割ステップは、前記第1の秘密情報生成式から前記秘密情報が算出されるように、前記秘密情報を分割することとしてもよい。
この構成によれば、秘密情報の分割個数を装置外部から調整することが可能になるためセキュリティ強度を柔軟に設定することができる。
また、前記パラメータは、第1の秘密情報生成式であり、前記難読化ステップは、前記第1の秘密情報生成式から前記秘密情報が算出されるように、前記秘密情報を少なくとも2つの分割秘密情報に分割するステップを含んでもよい。
この構成によれば、第1の秘密情報生成式を装置外部から与えることが可能になるため、セキュリティ強度を柔軟に設定することができる。
また、前記秘密情報は、鍵発行機関から発行される秘密鍵であり、前記難読化秘密情報埋め込み方法は、前記鍵発行機関が前記秘密鍵を鍵発行機関の秘密鍵で暗号化する暗号化ステップと、前記難読化装置が、暗号化された前記鍵を公開鍵で復号および検証する検証ステップとをさらに有し、前記秘密情報難読化ステップは、検証された前記秘密鍵を難読化し、前記埋込ステップは、前記難読化装置により難読化された前記難読化情報をバイナリデータに変換するバイナリ変換ステップと、前記秘密情報を用いた演算結果と同一の結果を前記難読化秘密情報を用いて演算する機能を有するセキュア処理装置に、前記バイナリデータを埋め込むバイナリ埋込ステップとを含んでもよい。
この構成によれば、鍵発行機関からメーカーへ渡される秘密鍵を、受け渡し途中の盗聴や改ざんから保護することができる。
以下、本発明の実施の形態について、図面を参照しながら説明する。
(実施の形態1)
本発明の実施の形態1に係る秘密情報を用いセキュア処理を行うセキュア処理装置について、署名鍵を用いて署名生成を行う署名生成装置を例として説明する。
本発明の一実施形態に係る署名生成装置は、入力されるメッセージMに対し、署名生成式S=M^d mod nに基づく署名Sを生成する場合に、署名鍵dを直接メモリ上に現さず、署名鍵dの代わりに分割鍵をメモリ上に現し署名を生成するものであり、かつ、分割鍵の生成手順、分割鍵の値、署名の生成手順を署名生成毎に動的に変更する。
これにより、不正解析者による静的解析や動的解析に対し、秘密情報である署名鍵dを秘匿することが出来る。
<構成>
図1は、本実施の形態1における、署名生成装置100を含む署名生成システムの概要図である。
署名生成システムは、署名鍵生成式F21を用いて、署名鍵Dから後述する分割鍵を生成する分割鍵生成装置22と、前記分割鍵を用いて署名を生成する署名生成装置100とを含んで構成される。
メッセージM10は、署名対象データであり、署名生成装置100に入力されるデータである。なお、図1において、メッセージM10は、外部から署名生成装置100に入力されているが、署名生成装置100内で生成したデータでもよく、署名鍵生成装置のメモリ内に格納されているプログラムコードやデータであってもよい。
署名鍵D20は、署名生成に利用する秘密鍵情報であり、不正解析から保護されるべき情報である。具体的には、公開鍵暗号系を用いたRSA署名生成の場合、素数pと素数qの積をnとした時のRSA署名生成演算M^d mod nにおける変数dが秘密鍵情報に当たり、dには、署名鍵D20が代入される。
図2に示す分割鍵111(D1、D2、D3…、Dn)は、署名生成時に署名鍵D20そのものの値がメモリ上に現れないようにするため、分割鍵生成装置22が、署名鍵D20の値を署名鍵生成恒等式F21に基づいて予め分割して得た分割鍵である。ここで、署名鍵生成式F21と分割鍵111(D1、D2、D3、…、Dn)との間には、分割鍵111(D1、D2、D3、…、Dn)を用いて署名鍵生成式F21を計算することにより、署名鍵D20の値が算出可能となるという関係がある。
次に、分割鍵生成装置22、署名生成装置100について、順に説明する。
(1)分割鍵生成装置22
分割鍵生成装置22は、外部から、署名鍵生成式F21と、署名鍵D20との入力を受け付けて、署名鍵生成式F21と署名鍵D20とに基づき、分割鍵識別情報テーブル200と、分割鍵情報テーブル400とを生成し、分割鍵識別情報テーブル200と、分割鍵情報テーブル400とを、後述する署名生成装置100が備える分割鍵格納手段110に書き込む。
分割鍵生成装置22は、具体的には、マイクロプロセッサ、ROM、RAM、ハードディスクユニット、ディスプレイユニット、キーボード、マウスなどから構成されるコンピュータシステムである。前記ROM又は前記ハードディスクユニットには、コンピュータプログラムが記憶されており、前記コンピュータプログラムが前記RAM上に読み出され、前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、分割鍵生成装置22は、その機能を達成する。
ここで、署名鍵生成式F21は、一例として、8変数(d1〜d8)を引数とする下式であるものとする。
F(d1,d2,d3,d4,d5,d6,d7,d8)=(d1+d2+d3+d4)*(d5+d6+d7+d8)
ここで、変数d1には分割鍵D1が代入され、変数d2には分割鍵D2が代入され、同様に、変数d3〜d8には、分割鍵D3〜D8がそれぞれ代入されるものとする。
署名鍵生成式F21は、分割鍵生成装置22に対し、図4に示す分割鍵情報テーブル400として入力されるのであるが、分割鍵情報テーブル400の説明に先立ち、署名鍵生成式F21の表現形式について図3を用いて説明を行う。
図3は、署名鍵生成式F21「F(d1,d2,d3,d4,d5,d6,d7,d8)=(d1+d2+d3+d4)*(d5+d6+d7+d8)」をツリー構造で概念的に表現したものである。
変数d1、d2、d3、d4は、加算グループ1というグループ情報と関連付けられている。
ここで、グループ情報とは、署名生成式F21において、被演算子(d1〜d8)が他の被演算子とどのような演算(例えば、加算、乗算など)がされるかという関係を表す属性情報である。また、上記のグループを構成する各被演算子や、より小さなグループ等をメンバーと呼ぶ。
例えば、「加算グループ」では、各メンバーが演算子「+(加算)」により演算され、「乗算グループ」では、各メンバーが演算子「*(乗算)」により演算される。
なお、複数の変数から構成されたグループ同士や、グループと他の変数とが、どのような演算子によって演算されるかという関係を表す属性情報についてもグループ情報と呼ぶものとする。
このようにグループ情報という属性情報を与えることで、各変数と署名鍵生成式F21との関係を識別することができる。
具体的には、「加算グループ」では、前述のように、各メンバーが演算子「+(加算)」で演算されるため、加算グループ1はd1+d2+d3+d4という式を表現していることになる。また、変数d5、d6、d7、d8は、加算グループ2というグループ情報と関連づけられている。加算グループ2は、加算グループ1の場合と同様にd5+d6+d7+d8という式を表現している。さらに、加算グループ1と加算グループ2とは、グループ情報として乗算グループ1と関連付けられている。
「乗算グループ」というグループ情報は、前述のように、そのグループの各メンバーが演算子「*(乗算)」で演算されることを示しており、乗算グループ1は、加算グループ1と加算グループ2との乗算という関係を表しており、(d1+d2+d3+d4)*(d5+d6+d7+d8)という署名鍵生成式F21を表現していることになる。
次に、図3の署名鍵生成式F21の構造を、情報として具体的に表した分割鍵情報テーブル400について、図4を用いて説明する。
分割鍵情報テーブル400は、図4に示すように、分割鍵グループ識別子401と分割鍵グループメンバー識別子402とから構成される。
分割鍵グループ識別子401は、上述したグループを識別する識別子であり、分割鍵グループメンバー識別子402は、各グループに属するメンバーを示す識別子である。
図4において、加算グループ1には、分割鍵グループ識別子401として「AG001」が割り当てられている。ここで、図3にて示したとおり、グループ「AG001」に属するメンバーは、変数d1、d2、d3、d4であるので、それぞれの変数を識別する「id001」、「id002」、「id003」、「id004」が、分割鍵グループメンバー識別子402として分割鍵情報テーブル400に登録されている。
また、加算グループ2には、分割鍵グループ識別子401として「AG002」が割り当てられている。ここで、グループ「AG002」に属するメンバーは、変数d5、d6、d7、d8であるので、それぞれの変数を識別する「id005」、「id006」、「id007」、「id008」が分割鍵グループメンバー識別子402として分割鍵情報テーブル400に登録されている。
また、乗算グループ1には、分割鍵グループ識別子401として「MG001」が割り当てられている。グループ「MG001」に属するメンバーは、加算グループ1と加算グループ2であるので、それぞれの分割鍵グループ識別子401である「AG001」と「AG002」が分割鍵グループメンバー識別子402として分割鍵情報テーブル400に登録されている。
このようなデータ構造を用いて、署名鍵生成恒等式生成手段120は、分割鍵識別情報テーブル200と分割鍵情報テーブル400とを参照することで、署名鍵生成式F21の構成を知ることが出来る。
次に、分割鍵生成装置22が、署名生成式F21に基づき、署名鍵Dを複数の分割鍵に分割する処理について説明する。
本実施の形態では、署名鍵生成式F21の入力変数の数が8個であることから、分割鍵生成装置22は、署名鍵D20を8個の分割鍵D1〜D8に分割する。
但し、D1〜D8には、F(D1,D2,D3,D4,D5,D6,D7,D8)=Dを満たす値がランダムに選択される。
ここで、分割鍵Dn(n:1〜8)は、署名鍵生成式の引数dnに代入される。即ち、分割鍵D1は、署名鍵生成式F21の引数d1に代入され、同様に分割鍵D2は、引数d2に代入され、分割鍵D3〜D8は、引数d3〜d8に代入される。
署名鍵Dから、署名鍵生成式F21に基づき、分割鍵D1〜D8を算出する方法の一例として、分割鍵生成装置22は、署名鍵生成式F21で行われている最も外側の演算から順に、演算の単位を細かくしていくことで行う。
具体的には、まず、分割鍵生成装置22は、D=R1*R2が成り立つランダムな値R1、R2を選出する。
次に、R1=(D1+D2+D3+D4)が成り立つランダムな値D1、D2、D3、D4を選出し、R2=(D5+D6+D7+D8)が成り立つランダムな値D5、D6、D7、D8を選出する。
分割鍵生成装置22は、選出した分割鍵D1〜D8のそれぞれに対し、各分割鍵を識別するための識別情報である分割鍵識別子201を割り当てる。
分割鍵生成装置22は、一例として、分割鍵D1に対し分割鍵識別子201として「ID001」を割り当て、分割鍵D2に対し分割鍵識別子201として「ID002」を割り当て、同様に、分割鍵D3、D4、D5、D6、D7、D8のそれぞれに対し、分割鍵識別子201として「ID003」、「ID004」、「ID005」、「ID006」、「ID007」、「ID008」を割り当てる。
分割鍵生成装置22は、図2に示す、分割鍵識別子201と分割鍵111を対応づけた分割鍵識別情報テーブル200を生成して、分割鍵識別情報テーブル200を、後述する署名生成装置100が備える分割鍵格納手段110に書き込む。
(2)署名生成装置100
署名生成装置100は、図1に示すように、分割鍵格納手段110、署名鍵生成恒等式生成手段120、結合分割鍵生成手段130、結合分割鍵格納手段140、署名生成手段150を含んで構成される。
署名生成装置100は、具体的には、マイクロプロセッサ、ROM、RAM、ハードディスクユニット、ディスプレイユニットなどから構成されるコンピュータシステムである。前記ROM又は前記ハードディスクユニットには、コンピュータプログラムが記憶されており、前記コンピュータプログラムが前記RAM上に読み出され、前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、署名生成装置100は、その機能を達成する。
分割鍵格納手段110は、メモリやハードディスクなどの記憶デバイスであり、分割鍵生成装置22により書き込まれる分割鍵識別情報テーブル200及び分割鍵情報テーブル400を記憶する。
署名鍵生成恒等式生成手段120は、署名鍵生成式F21と恒等な式である署名鍵生成恒等式121を生成する。ここで、恒等とは、演算において等価である、演算結果が同一になるような関係のことを言う。
以下、署名鍵生成恒等式生成手段120が、署名鍵生成式F21と署名鍵D20とから、署名鍵生成式F21に恒等な式である署名鍵生成恒等式G121と、図11に示すように後述する結合分割鍵141とを動的に生成する方法について、図を用いて詳細に説明していく。
なお、以降、RSA署名生成を例とした説明を行う。
図5は、署名生成恒等式G121と後述する結合分割鍵141を動的に生成し、署名S30を生成して出力するまでの処理の概要を示すフローチャートである。但し、図5の各ステップは、図6〜図11のフローチャートを用いて詳細に説明する。
図5において、先ず、署名鍵生成恒等式生成手段120が、分割鍵格納手段110に記憶されている分割鍵情報テーブル400を読み取り、署名鍵生成式F21と同一結果を出力する署名鍵生成恒等式G121を生成する(ステップS501)。
次に、署名鍵生成恒等式生成手段120は、ステップS501で生成された署名鍵生成恒等式G121に基づき、分割鍵格納手段110に記憶されている分割鍵111を結合演算することで、分割鍵111とは異なる値の結合分割鍵141を生成し、生成した結合分割鍵141を結合分割鍵格納手段140に書き込む(ステップS502)。
次に、署名生成手段150にて、署名対象メッセージM10と、署名鍵生成恒等式G121と結合分割鍵141を用いて、署名鍵D20の値をメモリに出現させることなく、M^d mod nと同一の結果となる署名S30を算出し、署名S30を出力し署名生成処理を終了する(ステップS503)。
ここで、明細書中「A^B」の記載は、AのB乗を表すものとし、「A mod B」の記載は、Aを自然数Bで割ったときの剰余を表すものとする。
次に、上述した図5のステップS501の詳細について、図6を用いて説明する。
まず、署名鍵生成恒等式生成手段120は、分割鍵格納手段110に記憶されている分割鍵情報テーブル400を読み込み、各グループに属するメンバーの並びをランダムに並び替えるランダムシャッフル処理を行う(ステップS601)。ランダムシャッフルの詳細フローについては、図7を用いて後述する。
次に、ランダムシャッフルされた分割鍵情報テーブル400の各グループのメンバーをランダムにグループ分けする(ステップS602)。ランダムにグループ分けする処理の詳細については、図8、図9を用いて後述する。
次に、ステップS602でランダムにグループ分けされた各グループを式展開して、後述するマトリックス表現というデータ構造に変形し、展開した各グループのうち結合する箇所をランダムに選択して結合を行う。この結果、署名鍵生成式F21と恒等な署名鍵生成恒等式121が生成されるので、これを出力する(ステップS603)。ステップS603については、図10を用いて後述する。
次に、ステップS601における分割鍵グループのメンバーのランダムシャッフル処理の詳細について図7を用いて説明する。
なお、本実施の形態におけるランダムシャッフルとは、例えば、式d1+d2+d3+d4を、交換法則を利用して、恒等な式に変換することを言う。また、加算などの場合に、式1+2+3の計算結果と式3+2+1の計算結果とが同一であるような関係、すなわち、式における被演算子の順序を入れ替えても計算結果が変わらないような関係を「交換法則が成立する」という。
まず、署名鍵生成恒等式生成手段120は、分割鍵格納手段110に記憶されている分割鍵情報テーブル400のグループ総数Nを取得する(ステップS701)。
ここで、分割鍵情報テーブル400は、二次元配列Tableとして表現されているものとする。また、Table[n][m]は、図4の分割鍵グループメンバー識別子401に対応しており、上からn行目のグループに属する、左からm個目の分割鍵グループ識別子を示す。また、単にTable[n]とだけ書く場合は、上からn行目のグループに属する分割鍵グループ識別子の集合を示す。
具体的には、図4に示した分割鍵情報テーブル400を上述したTableの形で表すと、以下のようになる。
Table[0]={AG001,AG002}、
Table[1]={id001,id002,id003,id004}、
Table[2]={id005,id006,id007,id008}
なお、この例及び以下の例では、Tableの各インデックスは0から始まるものとする。
グループ総数Nは、加算グループ、乗算グループ等のグループの個数であり、nの最大値+1に該当する。
図4に示した分割鍵情報テーブル400の場合、グループ総数Nは3となる。
次に、変数iを0で初期化する(ステップS702)。
ここで、iは現在シャッフル対象となっている分割鍵グループが何番目の分割鍵グループであるかをカウントする変数である。
次に、乱数値を発生させシャッフル回数をカウントする変数snに代入する(ステップS703)。
ここで、シャッフル回数snは、各分割鍵グループに対してあと何回シャッフルを行うかを示す変数である。ここで、シャッフル回数snとして乱数を利用することにより、シャッフルする回数を動的に設定することが出来、ひいては署名鍵生成恒等式を動的に生成することが出来る。
次に、Table[i]に登録されているメンバー数、すなわち、i番目のグループに登録されているメンバー数Mを取得する(ステップS704)。
次に、0以上M未満のランダムな整数を2つ発生させ、それぞれを変数s1、s2に代入する(ステップS705)。
ここで、s1、s2としてランダムな整数を利用することにより、シャッフル対象となるメンバーの位置を動的に設定することができ、ひいては署名鍵生成恒等式を動的に生成することが出来る。
次に、Table[i][s1]とTable[i][s2]の値を入れ替えて、snをデクリメントする(ステップS706)。
すなわち、i番目のグループに属するs1番目の構成要素とs2番目の構成要素とを入れ替えた上で、残りシャッフル回数snを1つ減らす。
次に、sn>0かどうか、すなわち現在シャッフルの対象となっているi番目の分割鍵グループについて、まだシャッフル回数が残っているか否かを判定する(ステップS707)。
ステップS707の判定の結果が「YES」ならば、さらにシャッフルを繰り返すため、ステップS705へ戻る。
そうでなく、判定の結果が「NO」ならば、iがN−1と等しいかどうか判定する(ステップS708)。すなわち、全グループについてシャッフルが終了したか否かを判定する。
ステップS708の判定の結果が「NO」ならば、iをインクリメントし、ステップS703へ移ることにより、次の分割鍵グループに対してシャッフルを行っていく(ステップS709)。そうでなく、ステップS708の判定の結果が「YES」ならば、全分割鍵グループに対するシャッフルが終了しているので、ランダムシャッフル処理を終了する。
次に、ステップS602における分割鍵グループのメンバーのランダムグループ分け処理の詳細について図8のフローチャートを参照しながら説明する。
ランダムグループ分けとは、例えば、式(d1+d2+d3)+d4を、結合法則を利用して恒等式d1+(d2+d3+d4)へと変換する処理である。ここで、例えば式(1+2)+3と式1+(2+3)は結果が同一の値となり、このような関係、すなわち、一度に計算を行う単位の分割の仕方に関わらず結果が同一の値となるような関係を「結合法則が成立する」という。
なお、図8においても、図5の説明の際、前述したように分割鍵情報テーブル400は、2次元配列のTable[n][m]で表現されるものとして説明する。
まず、署名鍵生成恒等式生成手段120は、分割鍵格納手段110に記憶されている分割鍵情報テーブル400のグループ総数Nを取得する(ステップS801)。
次に、変数iを0で初期化する(ステップS802)。ここでiは、現在ランダムグループ分けの対象となっている分割鍵グループの番号を示す変数である。
次に、グループ分割位置リストGPを空リストとしてセットする(ステップS803)。ここで、分割位置リストGPは、分割鍵グループのメンバーを、前から何番目の位置で分割するかを示す値のリストである。
次に、Table[i]に登録されているメンバー数Mを取得し、1以上M以下の自然数をランダムに選び、選んだ値をグループ分割数kとする(ステップS804)。ここで、グループ分割数とは、分割鍵グループを何個のグループに分割するかを示す数である。グループ分割数kをランダムな自然数とすることにより、式の分割数を動的に設定することができ、ひいては署名鍵生成恒等式を動的に生成することが出来る。
次に、0以上M−1以下の整数を、重複しないようにk−1個ランダムに選択し、選択した値を降順で並び替え、グループ分割リストGPにセットする(ステップS805)。
このように、グループ分割リストGPの内容ランダムに設定することにより、式の分割位置を動的に設定することができ、ひいては署名鍵生成恒等式を動的に生成することが出来る。
次に、ステップS804で選択されたグループ分割リストGPの位置にあるメンバーの後ろでTable内のメンバーのグループを区切り、k個のグループに分ける(ステップS806)。
次に、iがN−1と等しいかどうかチェックする(ステップS807)。すなわち、全分割鍵グループについて、ランダムグループ分けが終了したか否かを判定する。
ステップS807の判定の結果が「NO」であれば、iをインクリメントし、ステップS803へ戻ることにより、さらに次の分割鍵グループについてランダムグループ分けを行っていく(ステップS808)。そうでなく判定の結果が「YES」であれば、全分割鍵グループについてランダムグループ分けが終了したと判断しランダムグループ分けを終了する。
図9は、図4の分割鍵情報テーブルに対して、図7のランダムシャッフルと図8のランダムグループ分けの処理を行った後の分割鍵情報テーブル400の状態を示した図である。
図9には、図7のフローに従ってランダムシャッフルした結果、MG001では、Table[0][2]={AG001,AG002}であった並びが、{AG002,AG001}のようにシャッフルされ、AG001では、Table[1][4]={id001,id002,id003,id004}であった並びが、{id002,id001,id004,id003}のようにシャッフルされ、AG002では、Table[2][4]={id005,id006,id007,id008}であった並びが、{id007,id006,id008,id005}のようにシャッフルされたことが示されている。
また、図8のフローに従ってランダムグループ分けした結果、MG001では、分割鍵グループメンバー識別子が{AG002}と{AG001}の2個にグループ分けされ、AG001では、{id002,id001}と{id004,id003}の2個にグループ分けされ、AG002では、{id005,id006}と{id007,id008}の2個にグループ分けされたことを示している。
図9のようにランダムシャッフルおよびランダムグループ分けされた場合、図4の分割鍵情報テーブル400で示されていた署名鍵生成式F21
F(d1,d2,d3,d4,d5,d6,d7,d8)=(d1+d2+d3+d4)*(d5+d6+d7+d8)
は、交換法則と結合法則により、署名鍵生成式F21と恒等な署名鍵生成恒等式
G’(d1,d2,d3,d4,d5,d6,d7,d8)=((d7+d6)+(d8+d5))*((d2+d1)+(d4+d3))
に変換されたことになる。
続いて、さらに、この署名鍵生成恒等式G’を後述するマトリックス表現を用いて恒等変換していく。
図10(a)は、図9で生成された署名鍵生成恒等式121の右辺((d7+d6)+(d8+d5))*((d2+d1)+(d4+d3))をマトリックス表現したものである。
ここで、マトリックス表現とは、例えば(d1+d2)*(d3+d4)は、d1*(d3+d4)+d2*(d3+d4)と等しいように、分配法則を利用して署名鍵生成式Fと恒等な式Gを作成するために利用されるデータ構造である。ここで、例えば式3*(2+1)の値が式3*2+3*1の値と等しいような関係、すなわち、式展開前の値と式展開後の値とが等しいような関係を「分配法則が成立する」と言う。
ここで、マトリックス1000の各要素はランダムグループ分けされた各グループ同士について、式展開を施した場合に発生する乗算を示す式であり、それぞれ、署名鍵生成恒等式G’を分配法則を用いて展開した際に掛け合わせられる項を示す。
より具体的な例を示すと、例えばマトリックス1000をMatrix[2][2]の2×2の配列で表現すると、
Matrix[0][0]=(d7+d6)*(d2+d1)
Matrix[0][1]=(d7+d6)*(d4+d3)
Matrix[1][0]=(d8+d5)*(d2+d1)
Matrix[1][1]=(d8+d5)*(d4+d3)
のようになる。
ここで、Matrix[n][m]は、最初の加算グループにおけるn番目の要素と、次の加算グループにおけるm番目の要素との積であり、それぞれ、署名鍵生成恒等式を展開した際に掛け合わせられることになる項同士の積を示している。なお、インデックスnとmとの番号は0から始まるものとし、各加算グループにおいてはより左側にある要素ほどインデックス番号が小さいものとする。
例えば、Matrix[0][0]は、図9のテーブルにおいて最初の加算グループであるAG001における最初のメンバー(d7+d6)と、2番目の加算グループであるAG002における最初のメンバー(d2+d1)とを乗算した値となる。なお、加算グループの数に応じて、Matrix[n][m]「l」・・・と、配列の次元が増加していくことは言うまでもない。
このようなマトリックス表現した署名鍵生成恒等式Gに対して、前述したステップS603において、マトリックス表現の各要素に対して結合する箇所をランダムに選択する処理が行われる。すなわち、マトリックス表現では、同一の行もしくは同一の列に属する要素同士は、少なくとも1つは共通する項が含まれる式であるため、この性質を利用して同一の行もしくは列に属する式同士を結合することが出来る。
以下に、より具体的な例を示す。まず、図10(a)では、1001で図示されているように結合箇所としてMatrix[0][1]とMatrix[1][1]が選択されたものとする。ここで、結合箇所として選択された1001のMatrix[0][1]とMatrix[1][1]の両要素には、(d4+d3)が共に存在している。そのため、結合箇所1001は、
(d4+d3)*((d7+d6)*(d8+d5))
というように(d4+d3)で括ることで、結合することができる。
ここで、上述したように、結合箇所をランダムに選択することにより、結合箇所を動的に決定することができ、ひいては署名生成鍵恒等式Gを動的に生成することが出来る。
図10(b)は、マトリックス表現を用いて最終的な署名生成恒等式G121を生成するまでの式変形を、通常の式の変形で例示したものである。
図9で生成された署名鍵生成恒等式G’は、
G’=((d7+d6)+(d8+d5))*((d2+d1)+(d4+d3))…(式1)
であり、この式を分配法則を用いて展開すると、(式2)のようになる。
G’=(d7+d6)*(d2+d1)+(d7+d6)*(d4+d3)
+(d8+d5)*(d2+d1)+(d8+d5)*(d4+d3)…(式2)
さらに(式2)を図10(a)のマトリックス1000内でステップS603にて結合する箇所としてランダムに指定された1001にあたる項を結合すると、(式3)となる。
G’ = (d7+d6)*(d2+d1)+(d8+d5)*(d2+d1)
+(d4+d3)*((d7+d6)*(d8+d5)) …(式3)
この(式3)が図6のS601からS603を経て生成された署名鍵生成恒等式G121となる。
結合分割鍵生成手段130は、署名鍵生成恒等式G121に基づき、分割鍵格納手段110に記憶された分割鍵同士を結合演算して、分割鍵111とは異なる値の結合分割鍵141(CD1、CD2、…、CDm)を生成する。生成した結合分割鍵141のそれぞれに対し、結合分割鍵141を識別するための結合分割鍵識別子1101を付与して、図11に示す、結合分割鍵識別子1101と結合分割鍵141を対応づけた結合分割鍵識別情報テーブル600を生成して、結合分割鍵識別情報テーブル600を、結合分割鍵格納手段140に書き込む。
ここで、署名鍵生成恒等式G121と結合分割鍵141(CD1、CD2、…、CDm)との間には、結合分割鍵141(CD1、CD2、…、CDm)と署名鍵生成恒等式121から署名鍵Dの値が算出可能となるような関係を有する。
また、結合演算とは、複数の値をまとめて新しい値を生成する演算であり、具体的な例としては加算、乗算やその組み合わせ等がある。すなわち、1+2=3という演算において、「3」は、「1」と「2」という値に対して「+」という結合演算を施して得られる値である。
具体的には、前述したように、ランダムグループ分けした加算グループの各要素{id002,id001}と{id004,id003}{id005,id006}、{id007,id008}を、一塊の入力引数とする。
署名鍵生成恒等式G’の(式3)で示された最小の括弧の単位で、結合分割鍵141を生成すると、以下の7個の結合分割鍵141が生成されることになる。
変数cd1にはd7+d6を演算した結果値が格納され、cd2にはd2+d1を演算した結果値、cd3にはd8+d5を演算した結果値、cd4にはd2+d1を演算した結果値、cd5にはd4+d3を演算した結果値、cd6にはd7+d6を演算した結果値、cd7にはd8+d5を演算した結果値が格納される。すなわち、下式が成立する。
G’(d1,d2,d3,d4,d5,d6,d7,d8)
= G(cd1,cd2,cd3,cd4,cd5,cd6,cd7)
ここで、G’(d1,d2,d3,d4,d5,d6,d7,d8)の引数である変数d1には、id001に対応する分割鍵識別子ID001を持つ分割鍵D1が代入され、同様に変数d2には分割鍵D2が代入され、変数d3、d4、d5、d6、d7、d8のそれぞれには、分割鍵D3、D4、D5、D6、D7、D8がそれぞれ代入される。
また、G(cd1,cd2,cd3,cd4,cd5,cd6,cd7)の引数である変数cd1には、結合分割鍵D1が代入され、同様に変数cd2には結合分割鍵CD2が代入され、変数cd3、cd4、cd5、cd6、cd7のそれぞれには、結合分割鍵CD3、CD4、CD5、CD6、CD7がそれぞれ代入される。
ここで、CD1=D7+D6が成り立ち、CD2=D2+D1が成り立ち、CD3=D8+D5が成り立ち、CD4=D2+D1が成り立ち、CD5=D4+D3が成り立ち、CD6=D7+D6が成り立ち、CD7=D8+D5が成り立つ。
ここで、結合分割鍵141は演算の結果値であるため、この値のみから元の分割鍵111を導出するのは困難となり、分割鍵111を秘匿することが出来る。
図11は、各結合分割鍵141(CD1、CD2、…、CD7)に、それぞれ結合分割鍵識別子1101(ID001、ID002、…、ID007)が付与されていることを示している。
したがって、署名鍵生成恒等式G’である(式3)を、結合分割鍵141を用いた表現である署名鍵生成恒等式G121とすると、次の(式4)のようになる。
G(cd1,cd2,cd3,cd4,cd5,cd6,cd7)
= (cd1*cd2)+(cd3*cd4)+cd5*(cd6+cd7)…(式4)
ここで、(式4)の引数cd1,cd2,…、cd7に結合分割鍵(CD1、CD2、…、CD7)の値を代入した結果と、(式3)の引数d1、d2、…、d8に(D1、D2、…、D8)を代入した結果は等しく、
さらに結合分割鍵141(CD1、CD2、…、CD7)は分割鍵111(D1、D2、…、D8)を結合演算した結果であることから、(式4)は署名鍵生成式F21と同一の結果を得ることができる式となるため、署名生成手段150は、(式4)を署名鍵生成恒等式121として利用する。
結合分割鍵格納手段140は、結合分割鍵生成手段130により署名生成時に動的に生成された結合分割鍵141を記憶する。
署名生成手段150は、メッセージM10を入力とし、結合分割鍵格納手段140に記憶されている結合分割鍵141を用いて署名S30を生成する。RSA署名生成における例を示すと、署名鍵D20を用いず、結合分割鍵141のみを用いてS=M^d mod nと同一の演算結果となる署名S30を生成する。
続いて、図12、図13を用いて、署名生成手段150が結合分割鍵141と署名鍵生成恒等式G121(式4)とを用いた署名生成の処理を示すフローを説明する。
まず、署名Sの生成方法の概略を説明する。
署名生成に用いられる演算式は、署名鍵生成恒等式G121の構造により定まる。
署名Sは、例えば署名鍵生成恒等式Gの各引数cd1〜cd7に、CD1〜CD7が代入されており、(CD1*CD2)+(CD3*CD4)+CD5*(CD6+CD7)であったとき、メッセージMと、n(=p*q)とを用いて、
S0=(M^CD1)^CD2 mod n、
S1= S0*((M^CD3)^CD4) mod n、
S= S1*(((M^CD6)*(M^CD7))^CD5) mod n
という計算により、S=M^D mod nと同じ結果が生成される。
より具体的には、上式Gを(CD1*CD2)と(CD3*CD4)とCD5*(CD6+CD7)ように“+”演算子で区切り、区切られたそれぞれを利用してメッセージMに対してベキ乗演算して、それぞれのベキ乗演算結果を掛けることで署名Sを作成する。
以下、フローの詳細な説明に移るが、以下の例でも、署名鍵生成恒等式G121は(式4)であるものとする。また、署名生成手段150は(式4)を逆ポーランド記法で式表現したものを利用して署名生成するものとする。ここで、逆ポーランド記法とは、演算子を演算対象の後ろに記述する記法であり、演算子が現れるたびに、その演算子の2つ前の値および1つ前の値に対して、その演算子を適用した値を計算していくような規則で示される記法である。
例えば、(式4)を逆ポーランド記法で表し、配列に入れた例を示すと、次のような配列Pとなる。
P[13]={CD1,CD2,*,CD3,CD4,*,+,CD5,CD6,CD7,+,*,+}
以下、図12、図13を用いて、署名生成フローについて詳細に説明する。
まず、署名鍵生成恒等式Gを上記のように逆ポーランド記法で表現し、それを配列Pとして表現する(ステップS1201)。
次に、iとjを1に、ChkとFlagを0に、Nを配列Pのサイズに設定し、スタックにP[0]をプッシュする(ステップS1202)。ここで、iは、現在着目している配列のインデックスであり、jは現在スタックに積まれている分割結合鍵の個数を示す。また、Chkは、配列中でどのインデックスまで演算子“+”であるか否かを確認したかを示す。ここで、Chkは、前述したjを用いて、現在アクセスしている配列P[i]からj−1個先の演算子が“+”であるかどうかを判定し、“+”演算子の有効区間内であるか判定する際に利用する。また、Flagは、“+”演算子の有効な区間内であるか否かを示すフラグとして利用される。より具体的には、署名鍵生成恒等式Gの区切りポイントの判定に利用される。
次に、P[i]が結合分割鍵かどうか判別する(ステップS1203)。
ステップS1203の判別の結果が、「YES」すなわち結合分割鍵であれば、スタックにP[i]の値をプッシュし、配列Pにおけるアクセスを1つ移すためにiをインクリメントし、また、スタックに積まれる分割結合鍵の個数が増えるためjをインクリメントする(ステップS1204)。
そうでなく、判別の結果が「NO」であるなら、すなわち、P[i]が演算子であれば、スタックに積まれている上位2つの結合分割鍵をポップし、それぞれをVal1、Val2とする(ステップS1205)。
次に、i+j−1がChkの値より大きいか、且つi+j−1がN以下かどうかを判定する(ステップS1206)。
ステップS1206の判定結果が「YES」であれば、Chkをi+j−1の値に設定する。すなわち、配列Pのi+j−1番目まで“+”であるかの判定が終了しているため、Chkの値が更新される。そうでなく「NO」であれば、ステップS1208へ処理を移す。なお、ステップS1206にて、i+j−1がN以下かどうかも確認しているのは、Chkが配列のサイズを超えた箇所を示すことを防止するためである。
次に、j>0かつFlag=1かつP[Chk]が“+”演算子であるか判定する(ステップS1208)。
ステップS1208の判定結果が、「YES」であれば、Flagを0に設定する(ステップS1209)。
そうでなく、判定の結果がNOであれば、処理「A」へ処理を移す。
次に図13を用いて、図12のフローの続きについて説明する。
まず、Val1とVal2のパターンを判別する(ステップS1301)。
ステップS1301の判別の結果、Val1、Val2両者が結合分割鍵の場合ステップS1310へ処理を移す。
そうでなく、ステップS1301の判別の結果、Val1、Val2のどちらか一方が結合分割鍵で、他方が署名ベキ乗中間値の場合、ステップS1320へ処理を移す。ここでの署名ベキ乗中間値とは、メッセージM10を、少なくとも一つ以上の結合分割鍵でベキ乗した値を示し、署名S30を算出する過程での中間値となるものである。具体的には、後述するS0やS1等がこれに当たる。
そうでなく、ステップS1301の判別の結果、Val1、Val2の両者が署名ベキ乗中間値の場合、ステップS1330へ処理を移す。
ここから、S1301処理後にそれぞれ処理がS1310、S1320、S1330に分岐した際の、各処理以降の個別の処理について説明する。
ここから、ステップS1310へ処理が移った場合について説明する。
まず、Flagを判別する(ステップS1310)。
ステップS1310の判別の結果、Flag=0、すなわち、“+”演算子の有効区間内である場合は、ステップS1311へ処理を移す。
次に、P[i]の演算子を判別する(ステップS1311)。
ステップS1311の判別の結果、P[i]が“+”演算子であれば、ステップS1312へ処理を移す。
そうでなくステップS1311の判別の結果、P[i]が“*”演算子であれば、ステップS1313へ処理を移す。
ステップS1312では、(M^Val)*(M^Val2) mod nの値をスタックにプッシュする(ステップS1312)。
ステップS1313では、((M^Val1)^Val2)mod nを演算した値をスタックにプッシュする(ステップS1313)。
ステップS1312、S1313の処理後、j=j−2とし、ステップS1341へ処理を移す(ステップS1314)。ここで、j=j−2としているのは、一連の計算により、結合分割鍵(Val1とVal2に当たる)が使用されたため、スタックに積まれる結合分割鍵の数が減少するためである。なお、ステップS1312、S1313で計算結果をスタックにプッシュしているが、この値は上述した署名ベキ乗中間値であって結合分割鍵ではないため、jは2つ減ることになる。
ステップS1341においては、この区間に対する演算は終了したため、Flagは1に設定し直される(ステップS1341)。すなわちFlagが0と設定されている期間は、配列P[Chk]の場所の“+”演算子で区切ることと判定されたときから、S1312、S1313の処理が実行され、jの値が更新されるまでの間であり、それ以外の処理はFlag=1の状態で各ステップが処理される。言い換えると、Flag=1の状態は、前回P[Chk]の“+”演算子で区切れると判定されてから、次のP[Chk]の“+”演算子で区切れると判定されるまで続くことになる。
そうでなくステップS1310の判別の結果、Flag=1である場合、すなわち、演算子“+”によって区切られる区間外である場合には、ステップS1315へ処理を移す。
次に、ステップS1315では、P[i]の演算子を判別する(ステップS1315)。
ステップS1315の判別の結果、P[i]が“+”演算子であれば、ステップS1316へ処理を移す。
そうでなくステップS1315の判別の結果、P[i]が“*”演算子であれば、ステップS1317へ処理を移す。
ステップS1316では、Val1+Val2を演算した結果をスタックにプッシュする(ステップS1316)。
ステップS1317では、Val1*Val2を演算した結果をスタックにプッシュする(ステップS1317)。なお、ここで、ステップS1316およびS1317においてプッシュする値も、また、分割結合鍵であると見なす。すなわち、ベキ乗中間値以外としてプッシュする値は、分割結合鍵であると見なすものとする。
ステップS1316、S1317処理後、ステップS1340へ処理を移す。ステップS1340以降の処理については後述する。
ここまでが、S1310以降の個別の処理についての説明である。
ここから、ステップS1320へ処理が移った場合、すなわち、Val1とVal2との組、結合分割鍵と署名ベキ乗中間値の組であった場合について説明する。
まず、P[i]の演算子を判別する(ステップS1320)。
ステップS1320の判別の結果、P[i]が“+”演算子であれば、ステップS1321へ処理を移す。
そうでなくステップS1311の判別の結果、P[i]が“*”演算子であれば、ステップS1322へ処理を移す。
以下、まず、ステップS1321に分岐した場合の流れについて説明する。
ステップS1321では、結合分割鍵の値をVal1、ベキ乗中間値をVal2とし、(M^Val1)*Val2 mod nを演算した値をスタックへプッシュする(ステップS1321)。
ステップS1322では、結合分割鍵の値をVal2、ベキ乗中間値をVal1とし、Val1^Val2 mod nを演算した値をスタックにプッシュする(ステップS1322)。
ステップS1321、S1322処理後は、ステップS1340へ処理を移す(ステップS1340)。なお、ステップS1340以降の処理については後述する。
ここまでが、S1310以降の個別の処理についての説明である。
(S1330以降の個別処理)
ここから、ステップS1330へ処理が移った場合、すなわち、Val1、Val2の両者が署名ベキ乗中間値の場合について説明する。
ステップS1330では、ベキ乗中間値であるVal1とVal2を利用し、Val1*Val2 mod nを演算した値をスタックにプッシュし、ステップS1341へ処理を移す(S1330)。
ここまでが、S1330以降の個別の処理についての説明である。
以上でS1310、S1320、S1330以降個別のフローについて説明を終わる。
(S1310、S1320、S1330以降の共通処理)
ここからは、S1310、S1320、S1330以降で共通のフローとなる部分について説明する。
ステップS1316あるいはS1317、もしくは、S1321あるいはS1322処理後、jをデクリメントし、そうでなれば何も処理せずステップS1341へ処理を移す(ステップS1340)。ここで、jをデクリメントするのは、ステップS1316あるいはS1317の場合は、結合分割鍵であるVal1とVal2を用い、結合分割鍵とみなされる値をプッシュしているため、差し引き1つの結合分割鍵が減ったためである。また、ステップS1321あるいはS1322の場合は、ベキ乗中間値と結合分割鍵とを用いて、新しいベキ乗中間値を生成しているため、この生成に使われた結合分割鍵がスタックからなくなるからである。
ステップS1314、あるいはS1340処理後、Flagを1にセットし、ステップS1342へ処理を移す(ステップS1341)。
ステップS1341の処理後、i<Nかどうか判別する(ステップS1342)。
ステップS1342での判別の結果が、「NO」であれば、配列Pの次の要素について同様の処理を続けるため、ステップS1343にてiをインクリメントしBへ処理を移す。
そうでなく、ステップS1342での判別の結果が、「YES」であれば、署名の生成は完了しているため、スタックの値を署名S30とし、署名S30を出力(ステップS1344)し、署名生成を終了する。
以上により、署名生成恒等式G’と結合分割鍵141を用いてメッセージM10に対する署名S30が生成される。
図13では署名生成フローチャートについて説明した。ここでは、図13のフローを利用した際のスタックの様子を図14を用いて示す。
図14は、図12と図13で説明した署名生成フローにおけるスタックの様子を示した図である。
署名生成恒等式G121は、逆ポーランド記法で表現されたPに対して署名生成を順に説明する。
まず、P[13]={CD1,CD2,*,CD3,CD4,*,+,CD5,CD6,CD7,+,*,+}より、P[0]である結合分割鍵CD1と、P[1]である結合分割鍵CD2をスタックにプッシュする(ステップS1401)。このとき、iとjはともに2であり、i+j−1は3であるため、Chkの値は3に設定される。
次にP[2]が演算子“*”であるので、スタックの上位2つの値をポップし、Flag=0かつ演算子“*”であるので、(M^CD1)^CD2 mod nをS0とし、S0をスタックにプッシュする(ステップS1402)。この処理が終わった段階で、i=2、j=0、Chk=3となる。また、ステップS1341の動作により、Flagの値は1に戻される。
次に、P[3]である結合分割鍵CD3とP[4]である結合分割鍵CD4をスタックにプッシュする(ステップS1403)。このとき、i=4、j=2となり、Chkの値は5に更新される。なお、P[Chk]は演算子“+”でないため、Flagの値は1のままである。
次に、P[5]が演算子“*”であるため、スタックの上位2つの値をポップし、また、i=5、j=2であるので、Chkが6に更新される。ここで、P[Chk]の演算子は、“+”であるので、Flagの値は0に更新される。Flag=0かつP[5]の演算子が“*”であるので、(M^CD3)^CD4 mod nをS1とし、S1をスタックにプッシュし、Flagを1に更新する(ステップS1404)。この処理が終わった段階で、i=5、j=0、Chk=6、Flag=1となる。
次にP[6]が演算子“+”であり、Flag=1であるので、スタックの上位2つの値S0とS1をポップし、S0*S1 mod nの演算結果をS2とし、S2をスタックにプッシュする。
次に、P[7]、P[8]、P[9]に相当する結合分割鍵CD5、CD6、CD7を順にスタックにプッシュする(スタックS1405)。
次に、P[10]が演算子“+”であり、このときのiの値は10でjの値は3であり、Flag=1かつP[12]=“+”であるので、Flagを0に設定する。その後、スタックの上位2つの値CD6とCD7をポップし、Flag=0かつ演算子“+”であるので、(M^CD6)*(M^CD7) mod nを演算した値をS3とし、S3をスタックにプッシュする(ステップS1406)。
次に、P[11]が演算子“*”であるので、スタックの上位2つのS3とCD5をポップする。このときS3が署名ベキ乗中間値であり、CD5が結合分割鍵であり、演算子“*”であるので、S3^CD5 mod nを演算した値をS4とし、スタックにプッシュする(ステップS1407)。
次に、P[12]が演算子“+”であるので、スタックの上位2つのS2とS4をポップする。このとき、S2とS4は共に署名ベキ乗中間値であるのでS2*S4 mod nを演算した結果スタックにプッシュする(ステップS1408)。
以上により、S2*S4 mod nを演算した結果を署名S30とし、署名S30を出力し署名生成終了となる。
このように、本実施の形態では、署名鍵D21の値を一切利用せず、署名S30を生成することが可能である。さらに、結合分割鍵141が、署名生成時に動的に生成されるので、毎回異なる結合分割鍵を用いて署名生成が可能となる。さらに、署名鍵Dだけでなく、RSA署名における秘密情報(p、q)の値も一切利用せず署名生成が可能となる。また、署名生成恒等式Gも署名生成処理の実行の度に毎回異なるため、ランタイムデータの収集結果の差分をとっても、署名鍵dを算出するための鍵候補となる結合分割鍵特定は困難である。さらに、結合分割鍵が特定されたとしても、結合分割鍵から署名鍵Dを求めるためには、署名鍵生成式Gを特定する必要があり、署名鍵生成恒等式Gの取りうるパターンを総当りで解析しなければならなく、署名鍵Dの解析は非常に困難になる。さらに、署名生成フローも毎回異なるため、署名生成時の電力と署名生成処理時間も変化するので、電力差分攻撃やタイミング攻撃に対しても安全であるという効果も有する。
なお、本実施の形態1において、結合分割鍵141の生成をランダムシャッフルやランダムグループ分け、そしてマトリックス表現を用いて署名鍵生成恒等式Gを生成したが、これらはあくまで一実施例であり、署名鍵生成式F21から、交換法則、結合法則、分配法則などを用いて、署名鍵生成恒等式Gが生成されればよく、本実施の形態で説明した方法以外の方法でも良い。
なお、本実施の形態1では、予め分割鍵格納手段に記憶された分割鍵同士を結合演算することで結合分割鍵を生成しているが、結合分割鍵生成手段で生成される結合分割鍵は、結合分割鍵同士を結合演算した値でもよい。このようにすると、結合分割鍵の取りうる値のバリエーションが増加するため、署名鍵Dの特定をさらに困難にさせる効果がある。
なお、本実施の形態1では、予め分割鍵格納手段に記憶された分割鍵同士を結合演算することで結合分割鍵を生成しているが、署名鍵Dを用いた署名生成結果である署名Sと同じ結果を生成することが出きればよく、同じ結果を生成する処理に影響を与えないような冗長な鍵を用いて、処理を行ってもよい。また冗長鍵は、乱数を発生させた値としてもよい。乱数値をはじめとした冗長鍵を利用した場合、署名鍵生成恒等式で生成される式もこの値を含むようにしてもよい。このように冗長な鍵を利用することにより、本来の処理では必要としない情報を利用することで、不正解析者による解析をさらに困難させる効果がある。
(実施の形態2)
本発明の実施の形態2について、以下に説明する。
実施の形態1では、RSA署名生成における本発明の実施例を説明したが、本実施の形態2では、ECDSA(Elliptic Curve Digital Signature Algorithm)に適用した例について説明する。ECDSAは、楕円曲線上の離散対数問題に基づいて考案された署名方法である。ECDSA自体は公知技術であるため、詳細な説明は省略し、ECDSAに対して本発明を適用した場合の実施例を以下で説明する。なお、下記の図15の説明において、分割乱数情報や結合乱数情報等を用いて、メモリ上に秘密情報が現れないように計算する処理を除いた処理フローが、通常のECDSA署名の生成フローにあたる。
図15は、本発明を適用した場合のECDSAのフロー概要について説明した図である。
なお、本発明を適用した場合の署名生成装置100の構成、及び署名鍵生成恒等式G121と結合分割鍵141の作成方法は、実施の形態1と同じなので説明を省略する。
本実施の形態2では、ECDSAに適用した際に、本実施の形態1と異なる部分について説明する。
ECDSAにおける署名生成式は、次式で示される。
S = (h+r*d)/k mod q
ここで、Sは署名であり、dは署名鍵であり、rはベースポイントPのk倍点のx座標であり、qはベースポイントPの位数である。
また、hはMのハッシュ値でありh=Hash(M)と表され、Mは署名生成対象メッセージであり、Hash(M)は、署名生成対象メッセージMのハッシュ値を計算することを示す。
ECDSAで、秘密にしなければならない情報は、ステップS1502で利用される乱数kと、ステップS1504で利用される署名鍵dの値である。ここで、乱数kを秘密にしなければならない理由は、署名対象メッセージMと署名(r、S)を知り得た場合、次式より署名鍵dを計算できるからである。
h=Hash(M)
d=(k*S−h)/r mod q
以降、図15を用いて、署名鍵dと乱数kの2つの情報を秘密にした場合の、ECDSAの署名生成フローについて説明する。なお、署名生成装置100は、図1の署名生成装置100では図示していないが、楕円曲線のシステムパラメータ(y^2=x^3+a*x+b、定義体GF(p)、ベースポイントP、ベースポイントPの位数q)を保持しており、乱数を生成する乱数生成手段を備えているものとする。
まず、署名生成対象メッセージMに対して、ハッシュ値Hash(M)を計算し、そのハッシュ値をhとする(ステップS1501)。
次に、楕円曲線のベースポイントPに対して乱数kを発生させ、Pのk倍点を計算し、k倍した点をRとする(ステップS1502)。このとき、乱数kは、秘密情報であるので、乱数kの値がメモリに直接現れないように、複数の分割乱数情報を生成し、生成した分割乱数情報のみを用いてPのk倍点を計算する。ステップS1502におけるこの処理については、後に図16を用いて詳細に説明する。
次に、Rのx座標の値をrとする(ステップS1503)。
次に、乱数kと署名鍵dを用いた式S = (h+r*d)/k mod qと恒等な演算を、乱数kと署名鍵dの値を直接メモリ上に保持することなく、代わりに分割乱数情報と、署名鍵dを予め分割した分割鍵とをメモリ上に保持し、これらを用いて署名Sを生成する(ステップS1504)。
ステップS1504におけるこの処理については、後に図17を用いて詳細に説明する。
最後に、ステップS1503とS1504の結果から(r,S)のペアを署名として出力し、ECDSAの署名生成を終了する。
次に、ステップS1502の詳細について、図16に示すフローチャートを用いて説明する。
まず、m個のランダムな式R1…Rmを生成し、その積を演算する乱数生成式Tを作成する。ここで、R1…Rmの積が乱数kにあたる(ステップS1601)。
T = R1*R2*…Rm
更に、R1…Rmのそれぞれを更に細かな値(分割乱数情報)の和に分割する。
T = Σt(1,h)*Σt(2,i)*…*Σt(m,j)…(式T)
ここで、
Σt(1,h)=t(1,1)+t(1,2)+…+t(1,h)
Σt(2,i)=t(2,1)+t(2,2)+…+t(2,i)
・・・
Σt(m,j)=t(m,1)+t(m,2)+…+t(m,j)
である。
t(1,1)、t(1,2)、…、t(1,h)は、それぞれが分割乱数情報であり、式Σt(1,h)はh個の分割乱数情報の和を表す。
また、h、i、j…は、任意の数である。
次に、乱数生成式Tの項であるΣt(1,h)、Σt(2,i)、・・・、Σt(m,j)に用いられている分割乱数情報t(x,y)すなわちt(1,1)、t(1,2)、・・・、t(1,h)、t(2,1)、・・・、t(2,i)、t(m,1)、・・・、t(m,j)のそれぞれに対して、乱数を生成してセットする(ステップS1602)。
次に、Σt(1,h)、Σt(2,i)、・・・Σt(m,j)の値がそれぞれqと互いに素かどうか判定する(ステップS1603)。
ここで、「qと互いに素となる」という条件は、乱数kが逆元を持つために必要な条件である。
ステップS1603の判定の結果が、「NO」であればステップS1602へ処理を戻し、上述した乱数の生成とセットを再度行う。
そうでなくステップS1603の判定の結果が、「YES」であれば、乱数生成式Tと恒等な乱数生成恒等式Uを作成する(ステップS1604)。
ステップS1604における、乱数生成式Tから乱数生成恒等式Uの作成は、実施の形態1における署名鍵生成式F21から署名鍵生成恒等式G121を生成する方法と同様の方法で行うことができるため説明を省略する。
次に乱数生成恒等式Uに基づき結合乱数情報を作成する(ステップS1605)。ここで、結合乱数情報は、実施の形態1における結合分割鍵に相当する。したがって、ステップS1605の結合乱数情報の作成方法は、実施の形態1における結合分割鍵の作成と同様であるので、説明を省略する。
次に、乱数生成恒等式UとステップS1605で作成された結合乱数情報を用いて、ベースポイントPのU倍点U*Pを計算し、その計算結果をRとする(ステップS1606)。
このとき、乱数生成恒等式Uの式に結合乱数情報の値を代入して算出された結果は、ECDSAの本来のアルゴリズムで利用される乱数kに対応する。すなわち、S1502の乱数kに対応する値を直接メモリに出現させることなく、複数の分割乱数を結合演算した値である結合乱数情報のみ利用してPのU倍点を算出することができる。
ステップS1606は、楕円曲線上の点同士の加算および、点のn倍点演算を行う。ここで、この計算を、実施の形態1との対応で説明すると、実施の形態1ではRSAの署名生成処理のベキ乗演算における「ベキ乗演算」が楕円曲線上の「n倍点演算」に、RSAの署名生成処理の「乗算」が楕円曲線上の加算に対応する。したがって、RSAの署名生成フローにおいて、適用する演算の種類を変更したフローにより、楕円曲線上の点同士の加算およびn倍点演算を行うことができる。
ここで、理解の容易化のため、ステップS1601〜S1606までについて、具体例をあげて説明する。
まず、ステップS1601において、上述した方法で生成した乱数生成式Tが以下の式であるとする。
T = Σt(1,4)*Σt(2,4)…(式T)
Σt(1,4)=t(1,1)+t(1,2)+t(1,3)+t(1,4)
Σt(2,4)=t(2,1)+t(2,2)+t(2,3)+t(2,4)
次に、t(1,1)、t(1,2)、…、t(1,4)、t(2,1)、t(2,2)、…、t(2、4)のそれぞれに乱数値を設定する(ステップS1602)。
このとき、Σt(1,4)とΣt(2,4)とが互いに素になるまで、乱数値の設定をやり直す(ステップS1603)。
続いて、乱数生成恒等式Uを、
乱数生成式T=(t(1,1)+t(1,2)+t(1,3)+t(1,4))
*(t(2,1)+t(2,2)+t(2,3)+t(2,4))
から、交換法則、結合法則、分配法則を利用し、例えば、
T = (((t(1,1)+t(1,3))+((t(1,2)+t(1,4)))
*((t(2,1)+t(2,3))
+(((t(1,1)+t(1,4))+((t(1,2)+t(1,3)))
*((t(2,2)+t(2,4))
のように恒等変換し、引数u1〜u6を
u1=t(1,1)+t(1,3)
u2=t(1,2)+t(1,4)
u3=t(2,1)+t(2,3)
u4=t(1,1)+t(1,4)
u5=t(1,2)+t(1,3)
u6=t(2,2)+t(2,4)と設定する(ステップS1605)。
このようにすると乱数生成恒等式Uは、
U(u1,u2,u3,u4,u5,u6)
= (u1+u2)*u3+(u4+u5)*u6となる。
引数u1には、結合乱数情報U1が代入され、引数u2には、結合乱数情報U2が代入され、同様に、引数u3〜u6には、結合乱数情報U3〜U6が代入される。
U = (U1+U2)*U3+(U4+U5)*U6
また、ベースポイントPのU倍点U*Pは、
U*P = U3*(U1*P+U2*P)+U6*(U4*P+U5*P)
で計算可能となる。
ここで、乱数生成式Tと乱数生成恒等式Uとは恒等であるため、U*Pは、T*Pと同一の結果となる。さらに、Tは乱数kを計算する乱数生成式であるので、乱数kやその生成に用いる乱数生成式Tそのものをメモリ上に乗せることなく、Pのk倍点を計算することが可能となる。また、乱数生成恒等式Uや対応する結合乱数情報等は毎回ランダムに生成されるため、乱数kの値の解析を困難にすることができる。これにより、実施の形態2の署名生成装置は、ECDSA署名生成フローの解析を困難にすることができる。
続いて、図17を用いて、図15のステップS1504の詳細フローを説明する。
まず、ランダムな値をm個生成し、それぞれを分割冗長鍵du1、du2、…、dumとし、各分割冗長鍵を加算したdu1+du2+…+dumを分割冗長鍵生成式Duとする(ステップS1701)。
Du = du1+du2+…+dum …(式Du)
これは、式 S = (h+r*d)/k mod qにおける、1/kをメモリ上に直接現すことなく計算するためのものである。
即ち、
1/k = Du/(Du*k)
= du1/(Du*k)+ du2/(Du*k) +・・・+dum/(Du*k)
であり、かつ、S1502で生成したUはkと等価であるので、1/kの代わりに、
du1/(Du*U)+ du2/(Du*U) +・・・+dum/(Du*U)
を計算すればよい。
さらに、上式のDu*Uを式Aとし、Du*Uを、Du*Uと恒等な式B1、B2・・・Bmで置き換えると
1/k = (du1/B1)+ (du2/B2) +・・・+ (dum/Bm)となり
この(du1/B1)をC1に置き換え、同様に(du2/B2)をC2に・・・(dum/Bm)をCmに置き換えると、
1/k = C1+C2+・・・Cm
となる。
結局、署名Sを計算するためには、
S = (h/k + r*d/k) mod n
= (h*(C1+C2+・・・+Cm)
+ r*F*(C1+C2+…+Cm)) mod n
= (h*(C1+C2+・・・+Cm)
+ r*H) mod n
を計算すればよいことになる。
ここで、上式におけるFは、実施の形態1において示した下式
F(d1,d2,d3,d4,d5,d6,d7,d8)
=(d1+d2+d3+d4)*(d5+d6+d7+d8)
を示すものである。
また、Hは、式 F*(C1+C2+…+Cm)と恒等な式であり、Fは、上述の署名鍵生成式である。
以下、ステップS1702以降のフローチャートの説明に戻る。
次に、分割冗長鍵生成式Duの値がqと互いに素かどうか判定する(ステップS1702)。
ステップS1702の判定の結果が「NO」であれば、さらに別のdu1…dumを生成するために、ステップS1701へ処理を戻す。
そうでなく、ステップS1702の判定の結果が「YES」であれば、ステップS1502で求めた乱数生成恒等式Uと分割冗長鍵生成式Duを乗算した式U*DuをAとし、Aと恒等な式をm個生成し、B1、B2、…、Bmとする(ステップS1703)。
ステップS1703で生成した恒等式B1、B2、…、Bmに基づき、結合分割鍵bij(i、j=1、2、…)を生成する(ステップS1704)。
ステップS1703とS1704は、Aを実施の形態1における署名鍵生成式F21と見て、Aの式を構成している分割冗長鍵du1、du2、…、dumおよびステップS1504にて作成した結合乱数情報U1、U2、…、Uiを分割鍵111と見て、実施の形態1と同様の処理を行うことにより、恒等式B1、B2、…、Bm、および、それぞれの恒等式に対応する結合分割鍵bij(i,j=1,2,…)を生成することができる。
なお、実施の形態1では、署名鍵生成恒等式G121は1つしか作成しなかったが、ここでは、署名鍵生成恒等式G121に相当する恒等式B1等をm個生成し、それぞれについて結合分割鍵の組をm組作成する。
次に、ステップS1701で生成したm個の分割冗長鍵du1、du2、…、dumとm個の恒等式B1、B2、…、Bmを用いて、次のようなm個のC1、C2、…、Cmを作成する(ステップS1705)。
C1=du1/B1
C2=du2/B2

Cm=dum/Bm
このとき、C1+C2+…+Cmは、B1、B2、Bmは共にAと恒等であることと、Du=du1+du2+…+dumである性質を利用して、以下のように式変形できる。
C1+C2+…+Cm
=(du1/B1)+(du2/B2)+…+(dum/Bm)
=((du1+du2+…+dum)/A
=(du1+du2+…+dum)/U*Du
=1/U
Uは、ステップS1502の乱数kに相当するため、1/U mod qの値は、k^−1 mod qに相当することになる。これにより、k^−1 mod qの値を、kの値そのものはメモリに乗せることなく計算することができる。
また、恒等式B1…Bmや分割冗長鍵du1、du2…dum等はランダムに生成されるため、k^−1 mod qの計算過程を署名生成を行うたびに動的に変化させることができる。これにより、実施の形態2の署名生成装置は、ECDSA署名生成フローの解析を、困難にすることができる。
次に、署名鍵生成式FとステップS1705で生成したm個のCi(i=1,2,…,m)式を用いて、(式E)を生成する(ステップS1706)。
F*(C1+C2+…+Cm)…(式E)
次に、(式E)と恒等な(式H’)を生成する(ステップS1707)。
次に、(式H’)に基づき、署名鍵生成式Fの要素である分割鍵と、C1、C2、…、Cmの要素値に対して、実施の形態1で説明したフローを用いて結合演算し、結合演算した値を結合分割鍵とする(ステップS1708)。なお、ステップS1807およびステップS1708の処理は、実施の形態1における署名鍵生成式F21を(式E)と、C1、…、Cmの要素値と署名鍵生成式F21の要素値diとを実施の形態1における署名鍵生成式F21の要素値diと見ることにより、実施例1と同様の処理となるため、詳細な説明は省略する。このようにすると恒等式H’は、結合分割鍵を用いたHとして表すことができる。
これにより、恒等式Hに対応する結合分割鍵hiは毎回ランダムに生成されることになるため、ECDSA署名生成フローの解析を、困難にすることができる。
次にステップS1501で算出したハッシュ値hと、ステップS1705で生成した式C1、C2、…、Cmと、ステップS1707で生成した恒等式Hと、ステップS1503で算出した点RのX座標の値rを用いて、
S = (h+r*d)/k mod q
と恒等な演算を、
S = h*(C1+C2+…+Cm)+r*H mod q
上式で算出し、算出値をSとする(ステップS1709)。
以上まとめて、実施の形態2の署名生成装置は、乱数値kの値および署名鍵dの値を直接メモリに出すことなく、署名Sを生成することができる。
なお、ステップS1709の演算においては、h*(C1+C2+…+Cm)の演算結果値が直接メモリに出ないような順序で演算することが望ましい。
なぜならh*(C1+C2+…+Cm)の値から、乱数情報であるkを復元することが可能となるためである。
演算順序については、具体例を後述するので、ここでの説明は省略する。
続いて、図17のフローを具体例を上げて説明する。
まず、3個の乱数を生成し、それぞれを分割冗長鍵du1、du2、du3とし、
Du=du1+du2+du3
とする(ステップS1701)。
ここで、Duがqと互いに素でない場合には、Duとqとが互いに素になるまで分割冗長鍵の生成を繰り返す(ステップS1702)。
続いて、乱数生成恒等式Uを用いた計算の説明に移るが、以下の説明においては、乱数生成恒等式Uは、図16の説明にて生成した以下の(式U)とする。
U = (U1+U2)*U3+(U4+U5)*U6…(式U)
このとき、(式A)は、例えば、以下のようになる。
((U1+U2)*U3+(U4+U5)*U6)
*(du1+du2+du3) …(式A)
次に、(式A)と恒等な(式B1)、(式B2)、(式B3)を生成する。
恒等式B1の計算手順としては、まず、次のような式Aの恒等式1を生成し、
(((U1+U2)*U3)+((U4+U5)*U6))*(du1+du2)
+((U1+U2)*U3+(U4+U5)*U6)*du3
生成した恒等式1に基づいて結合分割鍵をそれぞれ以下のようにする。
b11=(U1+U2)*U3
b12=(U4+U5)*U6
b13=du1+du2
b14=(U1+U2)*U3+(U4+U5)*U6
b15=du3
すると、恒等式B1は、式Aの恒等式1と上記結合分割鍵を用いて以下の(式B1)になる。
(b11+b12)*b13+b14*b15…(式B1)
同様に、恒等式B2の計算手順は、まず、以下のような式Aの恒等式2を生成し、
(U1*U3+U2*U3+U4*U6+U5*U6)
*((du1)+(du2+du3))
生成した恒等式B2について、結合分割鍵をそれぞれ以下のようにする。
b21=U1*U3
b22=U2*U3
b23=U4*U6
b24=U5*U6
b25=du1
b26=du2+du3
すると、恒等式B2は、式Aの恒等式2と上記結合分割鍵を用いて以下の(式B2)になる。
B2 = (b21+b22+b23+b24)*(b25+b26)…(式B2)
さらに同様にして、恒等式B3の生成手順としては、まず、以下のような式Aの恒等式3を生成し、
((U1*U3+U4*U6)+(U2*U3+U5*U6))
*(du1+du2+du3)
生成した恒等式3に応じて、結合分割鍵をそれぞれ以下のようにする。
b31=U1*U3+U4*U6
b32=U2*U3+U5*U6
d33=du1+du2+du3
すると、恒等式B3は、式Aの恒等式3と上記結合分割鍵を用いて以下の式B3になる。
(b31+b32)*b33…(式B3)
続いて、生成した(式B1)、(式B2)、(式B3)を用い、ステップS1705にて、以下の3式C1、C2、C3が生成される。
C1=du1/B1=du1/((b11+b12)*b13+b14*b15)…(式C1)
C2=du2/B2=du2/((b21+b22+b23+b24)*(b25+b26))…(式C2)
C3=du3/B3=du3/((b31+b32)*b33)…(式C3)
このとき、上述したように、C1+C2+C3=k^(−1) mod qが成り立つことになる。
ここで、ECDSAの署名鍵dは8個の分割鍵に分割されており、署名鍵生成式Fは以下のような(式F)であるとする。
F = (d1+d2+d3+d4)*(d5+d6+d7+d8)…(式F)
このとき、次にステップS1706にて生成される(式E)は、
(d1+d2+d3+d4)*(d5+d6+d7+d8)*(C1+C2+C3)となる(ステップS1706)。続いて、(式E)から(式E)と恒等な(式H)を作成する(ステップS1707)。ここでは、(式E)の恒等変換例を
H = ((d1+d3)+(d2+d4))*((d6+d7)+(d8+d5))*C1
+((d2+d3)+(d1+d4))*((d6+d8)+(d7+d5))*(C2+C3)
とし、結合分割鍵をそれぞれ
H1=d1+d3
H2=d2+d4
H3=d6+d7
H4=d8+d5
H5=C1
H6=d2+d3
H7=d1+d4
H8=d6+d8
H9=d7+d5
H10=C2+C3
とする。この場合、恒等式Hは、上記の結合情報を利用して以下のような(式H)となる。
((H1+H2)*(H3*H4))*H5
+((H6+H7)*(H8*H9))*H10…(式H)
次に、
h*(C1+C2+C3)+r*H
=h*(C1+C2+C3)+r*{((H1+H2)*(H3*H4))*H5+
((H6+H7)*(H8*H9))*H10}
を交換法則、結合法則、分配法則を用いてh*(C1+C2+C3)の値が直接メモリに出ないように算出し、算出結果を署名Sとする。h*(C1+C2+C3)の値を直接メモリに出さないようにする計算順序の一例としては、
h*(C1+C2+C3)+r*{((H1+H2)*(H3*H4))*H5+
((H6+H7)*(H8*H9))*H10}
=h*(C1+C2)+r*{((H1+H2)*(H3*H4))*H5}
+h*C3+r*{((H6+H7)*(H8*H9))*H10}
という式に変形して計算する。
すなわち、上述の計算式では、h*(C1+C2+C3)をh*(C1+C2)とh*C3に分けて計算し、かつ、その計算の間に残りの計算を挟むことにより、h+(C1+C2+C3)の値が直接メモリ上に現れないようにしている。
以上のようにすることで、ステップS1502の乱数kに相当する値と署名鍵dの値を直接メモリに出現させることなく、且つ実行の度に署名Sの生成に用いる乱数生成恒等式Uと署名生成式Hを署名生成を実行するたびに変化させることが可能となるため、不正解析による署名鍵dの特定が非常に困難となるという効果がある。
なお、本実施の形態1および2では、RSA署名、ECDSAについて説明しているが、これに限定されるわけではなく、RSA暗号、楕円暗号、ElGamal暗号等、算出演算を用いた公開鍵暗号に利用してもよい。また、本実施の形態1および2にて例示した手順の応用先は、暗号や署名に利用する鍵情報に限定する必要はなく、これらとは異なる保護すべき秘密情報に対して適用してもよいことは言うまでもない。
(実施の形態3)
本発明の実施の形態3について、以下に説明する。
本実施の形態3では、署名鍵を分割鍵に分割し、分割鍵を端末に埋め込むまでの工程を図18を用いて説明する。
鍵発行機関は、署名生成をするための署名鍵を発行する機関である。
鍵発行機関では、n台(情報端末1(1810)、情報端末2(1820)、…、情報端末n(1830))の端末向けに、それぞれ異なる署名鍵1、署名鍵2、…、署名鍵nを発行する。
分割鍵生成装置1802は、鍵発行機関から発行された署名鍵と、署名鍵生成式を入力とし、署名鍵生成式に基づき、署名鍵を分割する装置であり、分割鍵と署名鍵生成式を出力する。
分割鍵書込み装置1805は、署名生成を行う情報端末に対して、分割鍵生成装置1802で生成された分割鍵と署名鍵生成式から成る分割鍵情報1804を情報端末に書き込む装置である。例えば、情報端末が携帯電話などの組み込み機器の場合は、分割鍵書込み装置としては、ROMライターが用いられる。
ここで、情報端末1(1810)、情報端末2(1820)、…、情報端末n(1830)は、署名生成を行う情報端末である。これら情報端末の構成は、実施の形態1で説明した署名生成装置100と同じ構成であるため、本実施の形態3の説明に必要な構成のみを図示している。
端末を製造するメーカーは、分割鍵生成装置1802に対し、鍵発行機関から発行された署名鍵1801と、署名鍵生成式1803を入力し、署名鍵1801を分割した分割鍵と、分割鍵から署名鍵を生成するための情報である署名鍵生成式1803とから構成される分割鍵情報1804を生成する。
分割鍵情報1804は、署名鍵1の分割鍵情報1811、署名鍵2の分割鍵情報1821、署名鍵nの分割鍵情報1831から構成されており、署名鍵1の分割鍵情報1811は、情報端末1810向けの分割鍵情報であり、署名鍵2の分割鍵情報1821は、情報端末2(1820)向けの分割鍵情報であり、署名鍵nの分割鍵情報1831は、情報端末n(1830)向けの分割鍵情報であることを示している。分割鍵情報(1811、1821、1831)は、実施の形態1で示した分割鍵識別情報テーブル200と分割鍵情報テーブル400としてもよく、また、署名鍵dと同じ値を算出できるように分割鍵と署名鍵生成式Fとの関係が識別できる情報であれば他の情報であってもよい。
次に、端末を製造するメーカーは、分割鍵生成装置1802により生成された分割鍵情報1804を、分割鍵書込み装置1805を用いて情報端末1810、1820、1830の各分割鍵格納手段に書き込む。
ここで、書き込むまでのより具体的な一例を説明すると、分割鍵生成装置により生成された分割鍵情報(1811、1821、1831)は、分割鍵識別情報テーブル200と分割鍵情報テーブル400を表現したデータファイルであり、そのデータファイルをコンパイルしてバイナリデータとし、そのバイナリデータをROMライターなどの分割鍵書込み装置1805を用いて、分割鍵格納手段に書き込む。
以上により、情報端末1(1810)の分割鍵格納手段には署名鍵1の分割鍵情報1811が書き込まれ、情報端末2(1820)の分割鍵格納手段には署名鍵2の分割鍵情報1821が書き込まれ、情報端末n(1830)の分割鍵格納手段には署名鍵nの分割鍵情報1831が書き込まれることになる。
なお、本実施の形態3では、情報端末(1810、1820、1830)の署名鍵生成式は、それぞれ異なる署名鍵生成式F1、F2、…Fnとしているが、情報端末全てで同じ署名鍵生成式としてもよい。この場合に情報端末ごとに異なる処理を行わせるためには、分割鍵生成装置1802が各情報端末毎に異なる分割鍵を生成し、生成された情報端末毎に異なる分割鍵を各情報端末(1810、1820、1830)に書き込めばよい。
なお、本実施の形態3では、分割鍵生成装置1802は、外部より署名鍵生成式1803を入力され、入力された署名鍵生成式に基づき署名鍵を分割しているが、入力される情報はこれに限られず、署名鍵から分割鍵を生成するための何らかのパラメータ情報であってもよい。例えば、分割鍵生成装置1802に署名鍵を分割する分割個数のパラメータを入力し、分割鍵生成装置1802内で入力された分割個数に従い、署名鍵を分割するようにしてもよい。さらに、分割鍵生成装置1802内で入力された分割個数に従い、署名鍵生成式を生成し、それを出力するようにしてもよい。ここで、分割鍵を生成するために入力されるパラメータは分割個数でなく、セキュリティレベルやCPUの性能を表すパラメータ情報であってもよく、この場合、入力されたパラメータに応じて分割鍵生成装置1802内で、分割個数を決定するようにしてもよい。具体的にはセキュリティレベルが低かったりCPU性能が高い場合には、より多くの分割鍵を生成するというようにしてもよい。このようにすることで、署名鍵dの分割数を調整することが可能になるためセキュリティ強度を柔軟に設定することが可能である。
また、署名鍵1801は、鍵発行機関にて暗号化された状態で発行されてもよい。その場合、端末を製造するメーカーは、暗号化された署名鍵1801を復号してから、復号した署名鍵を分割鍵生成装置1802に入力する。また、ここでの暗号化方式が公開鍵暗号方式を利用していれば、鍵発行機関は、署名鍵1801に、署名鍵1801の署名を付して送信し、メーカーは、鍵発行機関の公開鍵を利用して、署名鍵1801の署名を検証することにより正当性を検証できるようにしてもよい。このようにすることで、鍵発行機関からメーカーへ渡される署名鍵1801を、受け渡し途中の盗聴や改ざんから保護することができる。
なお、分割鍵生成装置1802と分割鍵書込み装置1805は、端末製造メーカーが利用するとして説明したが、現実的には、製造工程において、分割鍵生成装置1802と分割鍵書込み装置1805の利用場所が異なる場合がある。具体例としては、分割鍵書込み装置1805の利用を端末の製造工場で実施する場合などがある。この場合は、分割鍵生成装置1802で生成した分割鍵情報1804を暗号化し、暗号化した分割鍵情報を端末の製造工場に配布し、端末の製造工場では、配布された暗号化情報を復号し、復号した分割鍵情報1804を分割鍵書込み装置1805に入力するようにしてもよい。このようにすることで、安全な分割鍵の配布が可能となる。
なお、上記では、署名鍵1801、分割鍵情報1804の暗号化方法を示していないが、その場合の暗号化方法については特に限定するわけではなくAESなどの共通鍵暗号もしくは、RSAや楕円暗号などの公開鍵暗号を用いることで実現すればよい。
(実施の形態4)
実施の形態4では、署名鍵生成恒等式生成手段120にて、署名鍵生成恒等式を算出する署名鍵生成恒等式生成プログラムを、ネットワークを介して更新する方法について図19、図20を用いて説明する。
図19は、署名生成装置100が、ネットワーク上にある更新サーバー1901から更新用の署名鍵生成恒等式生成プログラムX1902をダウンロードし、署名鍵生成恒等式生成手段120の署名鍵生成恒等式生成プログラムを更新する概要図である。実施の形態1と異なる点は、実施の形態4は、新しい署名鍵生成恒等式生成プログラムをネットワーク上の更新サーバーからダウンロードし、署名鍵生成恒等式生成手段120の署名鍵生成恒等式生成プログラムを、ダウンロードした署名鍵生成恒等式生成プログラムX1902に更新することができる点である。
ここで、署名生成装置100と更新サーバー1901は、インターネットなどのネットワーク1900を介して接続されている。
更新サーバー1901は、署名生成装置100の署名鍵生成恒等式生成手段120の署名鍵生成恒等式生成プログラムとは別の署名鍵生成恒等式生成プログラムX1902を保持している。ここで、署名鍵生成恒等式生成プログラムX1902は、署名生成プログラムと同等な機能、すなわち、署名鍵生成式F21と恒等な式である署名鍵生成恒等式G121を生成する機能を有する。ただし、署名生成恒等式生成プログラムX1902が署名鍵生成恒等式G121を作成するフローは、署名鍵生成恒等式生成手段120の署名鍵生成恒等式生成プログラムとは異なるものとする。
また、更新サーバー1901は、更新用のプログラムである署名鍵生成恒等式生成プログラムX1902の正当性検証のために利用する署名生成恒等式生成プログラムXの改ざん検出値1903も保持している。なお、改ざん検出値1903の具体例としては、署名鍵生成恒等式生成プログラムXのハッシュ値等がある。
署名生成装置100は、実施の形態1の図1で説明した構成要素に加え、本実施の形態4では、送受信手段1910と署名鍵生成恒等式生成プログラム更新手段1920とを備えるものとする。
送受信手段1910は、ネットワークを介して更新サーバー1901とデータの送受信を行う手段である。
署名鍵生成恒等式生成プログラム更新手段1920は、署名鍵生成恒等式生成プログラムの更新要求メッセージを、送受信手段1910を利用して、ネットワーク上に存在する更新サーバー1901に送信する。さらに、送受信手段1910を介して更新サーバー1901から署名鍵生成恒等式生成プログラムX1902を受信し、受信した署名鍵生成恒等式生成プログラムX1902で署名鍵生成恒等式生成手段120のプログラムを更新する。
次に図20を用いて署名鍵生成恒等式生成手段120の署名鍵生成恒等式生成プログラムの更新フローについて説明する。
まず、署名鍵生成恒等式生成プログラム更新手段1920が送受信手段1910に、署名鍵生成恒等式生成プログラムX1902のダウンロードを要求する(ステップS2001)。
次に、ダウンロード要求を受けた送受信手段1910は、ネットワーク1900を介して、更新サーバー1901へ署名鍵生成恒等式生成プログラムX1902のダウンロード要求メッセージを送信する(ステップS2002)。
次に、ダウンロード要求メッセージを受けた更新サーバー1901は、更新サーバー1901内で保持している署名鍵生成恒等式生成プログラムX1902と署名鍵生成恒等式生成プログラムX1902のハッシュ値1903を送受信手段1910に送信する(ステップS2003)。
続いて、送受信手段1910は、署名鍵生成恒等式生成プログラムX1902と署名鍵生成恒等式生成プログラムX1902のハッシュ値1903を更新サーバー1901から受信を完了した時点で、ダウンロード完了通知を署名鍵生成恒等式生成プログラム更新手段1920に通知する(ステップS2004)。
次に、署名鍵生成恒等式生成プログラム更新手段1920は、署名鍵生成恒等式生成プログラムX1902のハッシュ値1903を利用して、署名鍵生成恒等式生成プログラムX1902が改竄されていないかを判定する。この判定の結果が「YES」、すなわち改ざんされていると判定された場合には更新フローを終了し、この判定結果が「NO」、すなわち改ざんされていないと判定された場合には更新処理を継続する(ステップS2005)。
次に、署名鍵生成恒等式生成プログラム更新手段1920は、署名鍵生成恒等式生成手段120の署名鍵生成恒等式生成プログラムを、ダウンロードした署名鍵生成恒等式生成プログラムX1902で上書きすることで更新する(ステップS2005)。
書き込みが完了すると、署名鍵生成恒等式生成プログラム更新手段1920は書込み完了通知を受信し、これをもって更新フローは終了する(ステップS2006)。
以上のように署名生成装置100は、ネットワーク1900を利用して、更新サーバー1901から新しい署名鍵生成恒等式生成プログラムX1902をダウンロードして署名鍵生成恒等式生成手段120の署名鍵生成恒等式プログラムの更新を行う。
このような更新機能を持たせることで、署名鍵生成恒等式プログラムが不正解析者により改竄された場合や、署名鍵生成恒等式生成プログラムの不具合があった場合に、署名鍵生成恒等式プログラムを更新することにより、署名生成装置100の安全性を確保することができる。
なお、実施の形態4では、図20のステップS2001のダウンロード要求を送信するタイミングについては示していないが、例えば、署名生成装置100内で署名生成処理の開始要求の前に署名鍵生成恒等式生成手段120のプログラム(署名鍵生成恒等式生成プログラムXに相当する)の正当性を検証し、検証の結果、「正当でない」と判定された場合に、ステップS2001のダウンロード要求をするようにしてもよい。署名鍵生成恒等式生成手段120のプログラムの正当性の検証についてのより具体的方法としては、署名生成装置100内の安全なメモリに署名鍵生成恒等式生成手段120のプログラムのハッシュ値を保持しておき、署名生成処理が開始される前に、署名鍵生成恒等式生成手段120の署名鍵生成恒等式生成プログラムのハッシュ値を算出し、算出したハッシュ値と、メモリ内に保持していたハッシュ値を比較する方法などがある。
また、実施の形態4では、署名生成装置100と更新サーバー1901間でのデータ通信を、セキュア通信路(SAC)でセッション鍵を共有し、セッション鍵で暗号化したデータの送受信としてもよい。SACについては、Secure Sockets Layer(SSL)などで利用されており既知の技術なので、説明を省略する。
また、実施の形態4では、ネットワークを介して更新サーバー1901から更新用の署名鍵生成恒等式生成プログラムX1902をダウンロードしていたが、ネットワークでなく、署名鍵生成恒等式生成プログラムX1902が記録されたDVDやCD等の記録媒体を用いることで、署名鍵生成恒等式生成手段120のプログラムを更新するようにしてもよい。この処理を行う署名生成装置100は、図20における送受信手段1910を、記録媒体とのデータの読み書きを操作するようなドライバの機能を持たせたものとすることにより実現することができる。すなわち、上述のような署名生成装置100は、図20において、送受信手段1910を記録媒体ドライバとし、更新サーバー1901を記録メディアとし、ダウンロード要求を媒体からの読み込み要求と置き換えることにより実現できるため、詳細な説明は省略する。
また、実施の形態4では、署名鍵生成恒等式生成手段120のプログラムを更新するとしていたが、更新する対象を分割鍵格納手段に記憶されている分割鍵111としてもよい。この場合は、分割鍵111のみの更新だけでなく、分割鍵111と署名鍵生成式F21との関連情報が分かる分割鍵識別情報テーブル200と分割鍵情報テーブル400も同時に更新するようにする。また、更新する対象を結合分割鍵生成手段のプログラムとしてもよい。
このようにすることで、生成される分割鍵の個数や結合分割鍵の個数を、更新サーバが調整することが可能となり、セキュリティ強度を柔軟に設定することが可能となる。
<なお書き>
なお、本発明を上記実施の形態に基づいて説明してきたが、本発明は、上記の実施の形態に限定されないのはもちろんである。以下のような場合も本発明に含まれる。
(1)上記の装置は、具体的には、マイクロプロセッサ、ROM、RAM、ハードディスクユニット、ディスプレイユニット、キーボード、マウスなどから構成されるコンピュータシステムである。前記RAMまたはハードディスクユニットには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムにしたがって動作することにより、上記装置は、その機能を達成する。ここでコンピュータプログラムは、所定の機能を達成するために、コンピュータに対する指令を示す命令コードが複数個組み合わされて構成されたものである。
(2)上記の各装置を構成する構成要素の一部又は全部は、1個のシステムLSI(Large Scale Integration:大規模集積回路)から構成されているとしてもよい。システムLSIは、複数の構成部を1個のチップ上に集積して製造された超多機能LSIであり、具体的には、マイクロプロセッサ、ROM、RAMなどを含んで構成されるコンピュータシステムである。前記RAMには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、システムLSIは、その機能を達成する。これらは個別に1チップ化されても良いし、一部又は全てを含むように1チップ化されても良い。
また、ここでは、システムLSIとしたが、集積度の違いにより、IC、システムLSI、スーパーLSI、ウルトラLSIと呼称されることもある。
また、集積回路化の手法はLSIに限るものではなく、専用回路又は汎用プロセサで実現してもよい。LSI製造後に、プログラムすることが可能なFPGA(Field Programmable Gate Array)や、LSI内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサーを利用しても良い。
さらには、半導体技術の進歩又は派生する別技術によりLSIに置き換わる集積回路化の技術が登場すれば、当然、その技術を用いて機能ブロックの集積化を行ってもよい。バイオ技術の適用等が可能性としてありえる。
(3) 本実施の形態1では、分割鍵識別情報テーブル200や分割鍵情報テーブル400は、分割鍵生成装置22が書き込むこととしているが、これらのテーブルを署名生成装置100内部で生成してもよいことは言うまでもない。
なお、不正解析により分割鍵情報テーブル400の内容から署名鍵生成式F21が特定される恐れがあるため、より安全な実装方法として、分割鍵情報テーブル400は、暗号化された状態で保持され、署名生成時にのみ復号するようにしてもよい。これにより、静的解析による署名鍵生成式F21の特定が困難となるため、安全性が向上する。また、署名鍵生成式F21が特定されなければ、署名鍵dの特定も困難となる。
(4)実施の形態では、先ず署名鍵生成恒等式を生成し、次いで前記署名生成絵恒等式に合わせた結合分割鍵を生成する場合について説明しているが、これに限らず、署名鍵生成恒等式と結合分割鍵とが生成できる手順に従えばよい。
例えば、先ず、ランダムに結合分割鍵を生成しておき、次いでその結合分割鍵に相当する部分が含まれる署名生成恒等式を生成することとしてもよい。
(5)上記の装置を構成する構成要素の一部または全部は、装置に脱着可能なICカードまたは単体のモジュールから構成されているとしてもよい。前記ICカードまたは前記モジュールは、マイクロプロセッサ、ROM、RAMなどから構成されるコンピュータシステムである。前記ICカードまたは前記モジュールは、上記の超多機能LSIを含むとしてもよい。マイクロプロセッサが、コンピュータプログラムにしたがって動作することにより、前記ICカードまたは前記モジュールは、その機能を達成する。このICカードまたはこのモジュールは、耐タンパ性を有するとしてもよい。
(6)本発明は、上記に示す方法であるとしてもよい。また、これらの方法をコンピュータにより実現するコンピュータプログラムであるとしてもよいし、前記コンピュータプログラムからなるデジタル信号であるとしてもよい。
また、本発明は、前記コンピュータプログラムまたは前記デジタル信号をコンピュータ読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、CD−ROM、MO、DVD、DVD−ROM、DVD−RAM、BD(Blu−ray Disc)、半導体メモリなどに記録したものとしてもよい。また、これらの記録媒体に記録されている前記デジタル信号であるとしてもよい。
また、本発明は、前記コンピュータプログラムまたは前記デジタル信号を、電気通信回線、無線または有線通信回線、インターネットを代表とするネットワーク、データ放送等を経由して伝送するものとしてもよい。
また、本発明は、マイクロプロセッサとメモリを備えたコンピュータシステムであって、前記メモリは、上記コンピュータプログラムを記憶しており、前記マイクロプロセッサは、前記コンピュータプログラムにしたがって動作するとしてもよい。
また、前記プログラムまたは前記デジタル信号を前記記録媒体に記録して移送することにより、または前記プログラムまたは前記デジタル信号を前記ネットワーク等を経由して移送することにより、独立した他のコンピュータシステムにより実施するとしてもよい。
(7)上記実施の形態及び上記変形例をそれぞれ組み合わせるとしてもよい。
(8)明細書中での用語「交換法則」、「分配法則」、「結合法則」、「逆ポーランド記法」に関する記述は、公知の用語を念のために述べているに過ぎず、これらの用語に新たな定義を与えるものではない。
本発明にかかるセキュア処理装置および方法は、分割された秘密情報のみの演算結果から導出することでプログラムの実行中に秘密情報を現すことなく、セキュアな処理を実行することができる効果を有する。また、秘密情報を利用するセキュア処理実行の度に、毎回異なる分割秘密情報を動的に生成し、セキュア処理の実行フローを動的に変更させることで、不正解析者の動的解析を困難にするという効果とを有する。このことから、不正解析者に漏洩すると不利益を招くような秘密情報を用いた処理を行うソフトウェア等の分野において有用である。
本発明の実施の形態1における署名生成装置の構成概要を示す図である。 本発明の実施の形態1における分割鍵識別情報テーブルの構成を示す図である。 本発明の実施の形態1における署名鍵生成式をツリー構造で概念的に表現した図である。 本発明の実施の形態1における分割鍵情報テーブルを示す図である。 本発明の実施の形態1における署名生成の概要を示すフローチャートである。 本発明の実施の形態1における恒等式生成フローチャートである。 本発明の実施の形態1における交換法則を利用したランダムシャッフル処理を表すフローチャートである。 本発明の実施の形態1における結合法則を利用したランダムグループ分けの処理を表すフローチャートである。 本発明の実施の形態1におけるランダムシャッフル、ランダムグループ分け処理実行後の分割鍵情報テーブルを示す図である。 本発明の実施の形態1におけるマトリックスを利用した恒等式生成処理の概念を示す図である。 本発明の実施の形態1における結合分割鍵識別情報テーブルを示す図である。 本発明の実施の形態1における署名生成処理を詳細に示すフローチャートである。 本発明の実施の形態1における図12のフローチャートの続きを示す図である。 本発明の実施の形態1における署名生成式の生成の具体例を説明する図である。 本発明の実施の形態2におけるECDSAのフローチャートである。 本発明の実施の形態2における図15のS1502の詳細フローチャートである。 本発明の実施の形態2における図15のS1504の詳細フローチャートである。 本発明の実施の形態3における分割鍵埋め込み工程を示す図である。 本発明の実施の形態4における署名鍵生成恒等式生成手段120のプログラムの更新の概要を示す図である。 本発明の実施の形態4における署名鍵生成恒等式生成プログラムの更新を示すフローチャートである。
符号の説明
10 メッセージM
20 署名鍵D
21 署名鍵生成式F
22 分割鍵生成装置
30 署名S
100 署名生成装置
110 分割鍵格納手段
120 署名鍵生成恒等式生成手段
121 署名鍵生成恒等式G
130 結合分割鍵生成手段
140 結合分割鍵格納手段
150 署名生成手段
200 分割識別情報テーブル
201 分割鍵識別子
1000 マトリックス
1001 結合箇所選択部
1900 ネットワーク
1901 更新サーバ
1902 更新用の署名鍵生成恒等式生成プログラム
1903 更新用の署名鍵生成恒等式生成プログラムの改ざん検出値
1910 送受信手段
1920 署名鍵生成恒等式生成プログラム更新手段

Claims (27)

  1. メッセージに対して秘密情報を用いたセキュア演算を施した場合と同一の演算結果を得るセキュア処理装置であって、
    秘密情報を少なくとも2つに分割した分割秘密情報が引数として入力され、当該分割秘密情報から前記秘密情報を算出する第1の秘密情報生成式と、前記秘密情報を用いたセキュア演算の手順を示す第1のセキュア演算手順とを記憶している記憶手段と、
    少なくとも2つの前記分割秘密情報を演算した結果である結合秘密情報が引数として入力され、前記第1の秘密情報生成式と演算上等価な第2の秘密情報生成式を生成する第1生成手段と、
    前記第2の秘密情報生成式に含まれる演算子に基づいて、引数として前記結合秘密情報が入力され前記第1のセキュア演算手順と等価な演算の手順を示す第2のセキュア演算手順を生成する第2生成手段と、
    前記メッセージに対し前記第2のセキュア演算手順に従ったセキュア演算を施す実行手段と
    を備えることを特徴とするセキュア処理装置。
  2. 前記第1の秘密情報生成式は、1以上の演算を含み、
    前記第2生成手段は、前記第1の秘密情報生成式に含まれる演算から、交換法則、結合法則、分配法則のいずれかを前記演算との間で満たす代替演算のある演算をランダムに選択し、選択した演算を前記代替演算に置き換えることにより第2の秘密情報生成式を生成する
    ことを特徴とする請求項1に記載のセキュア処理装置。
  3. 前記第1の秘密情報生成式は1以上の演算を含み、各演算は、複数の被演算子と、被演算子同士の計算の内容を示す演算子とを含み、
    前記記憶手段は、前記第1の秘密情報生成式に係る前記被演算子と前記演算子との関係を示す属性情報を記憶しており、
    前記第1生成手段は、前記属性情報を用いて前記第2の秘密情報生成式を生成する
    ことを特徴とする請求項2に記載のセキュア処理装置。
  4. 前記第1の秘密情報生成式において、前記被演算子には引数の値が入力され、前記引数それぞれの値は、前記分割秘密情報のいずれかが重複無く対応し、
    前記属性情報は、結合可能な複数の被演算子と対応する演算子を示し、
    前記第1生成手段は、前記属性情報に基づき、前記第1の秘密情報生成式における前記複数の被演算子を前記演算子で結合し、
    前記第2生成手段は、前記結合秘密情報を、前記結合された各被演算子に対応する分割秘密情報を、前記演算子を用いて結合することにより生成する
    ことを特徴とする請求項3に記載のセキュア処理装置。
  5. 前記第2の秘密情報生成式は、1以上の演算を含み、各演算は、複数の被演算子と、被演算子同士の計算の内容を示す演算子とを含み、
    前記記憶手段は、前記第2の秘密情報生成式に係る前記被演算子と前記演算子との関係を示す属性情報を記憶しており、
    前記第2生成手段は、前記属性情報を用いて前記第2のセキュア演算手順を生成する
    ことを特徴とする請求項2に記載のセキュア処理装置。
  6. 前記第1生成手段は、更に、
    乱数情報を生成し、前記乱数情報を含んだ前記第2の秘密情報生成式を生成し、
    前記第2生成手段は、
    前記第2の秘密情報生成式に基づき、前記結合秘密情報と前記乱数情報とを用いて前記第1のセキュア演算手順と等価な演算の手順を示す第2のセキュア演算手順を生成し、
    前記実行手段は、
    前記メッセージに対し前記結合秘密情報と、前記乱数情報とを用いて前記第2のセキュア演算手順に従ったセキュア演算を施す
    ことを特徴とする請求項1に記載のセキュア処理装置。
  7. 前記第1生成手段は、更に、
    前記秘密情報を用いた、演算処理の結果に影響を与えない冗長情報を生成し、
    当該冗長情報を用いて、前記第2の秘密情報生成式を生成する
    ことを特徴とする請求項1に記載のセキュア処理装置。
  8. 前記記憶手段は、前記分割秘密情報と共に前記実行手段により用いられないダミー情報を記憶している
    ことを特徴とする請求項1に記載のセキュア処理装置。
  9. 前記秘密情報は、デジタル署名を生成するための署名鍵であり、
    前記セキュア演算は、前記メッセージにデジタル署名を施す署名生成演算である
    ことを特徴とする請求項1に記載のセキュア処理装置。
  10. 前記署名生成処理は、RSA(Rivest Shamir Adleman)署名生成処理である
    ことを特徴とする請求項9記載のセキュア処理装置。
  11. 前記署名生成処理は、楕円曲線デジタル署名方式による署名処理である
    ことを特徴とする請求項9記載のセキュア処理装置。
  12. 前記セキュア処理装置は、更に、
    乱数情報を生成する乱数情報生成手段を備え、
    前記実行手段は、前記楕円曲線デジタル署名方式における定義体GF(p)上の楕円曲線の位数qであるベースポイントPの乱数値k倍点を計算する処理と、定義体GF(q)上でのkの逆数の値を用いた処理とを、前記乱数kを直接利用することなく、少なくとも2つの前記乱数情報を用いて行う
    ことを特徴とする請求項11記載のセキュア処理装置。
  13. 前記秘密情報は前記公開鍵暗号の前記秘密鍵であり、
    前記実行手段は、前記セキュア演算として、公開鍵と秘密鍵を利用した公開鍵暗号系の処理を行う
    ことを特徴とする請求項1に記載のセキュア処理装置。
  14. 前記公開鍵暗号はRSA暗号である
    ことを特徴とする請求項13記載のセキュア処理装置。
  15. 前記公開鍵暗号は楕円曲線暗号である
    ことを特徴とする請求項13記載のセキュア処理装置。
  16. 前記セキュア処理装置は、更に、
    外部から、前記第1生成手段の更新用データを取得する取得手段と、
    前記更新用データを用いて、前記第1生成手段を更新する更新手段と
    を含むことを特徴とする請求項1に記載のセキュア処理装置。
  17. 前記セキュア処理装置は、更に、
    外部から、更新用の分割秘密情報を取得する取得手段と、
    前記記憶手段に記憶されている分割秘密情報を、前記取得手段が取得した更新用の分割秘密情報に更新する更新手段と
    を含むことを特徴とする請求項1に記載のセキュア処理装置。
  18. メッセージに対して秘密情報を用いたセキュア演算を施した場合と同一の演算結果を得るセキュア処理装置において用いられるセキュア処理方法であって、
    前記セキュア処理装置は、
    秘密情報を少なくとも2つに分割した分割秘密情報が引数として入力され、当該分割秘密情報から前記秘密情報を算出する第1の秘密情報生成式と、前記秘密情報を用いたセキュア演算の手順を示す第1のセキュア演算手順とを記憶している記憶手段を備えており、
    前記セキュア処理方法は、
    少なくとも2つの前記分割秘密情報を演算した結果である結合秘密情報が引数として入力され、前記第1の秘密情報生成式と同一の結果を出力する第2の秘密情報生成式を生成する第1生成ステップと、
    前記第2の秘密情報生成式に含まれる演算子に基づいて、前記結合秘密情報が引数として入力され前記第1のセキュア演算手順と等価な演算の手順を示す第2のセキュア演算手順を生成する第2生成ステップと、
    前記メッセージに対し前記第2のセキュア演算手順に従ったセキュア演算を施す実行ステップと
    を含むことを特徴とするセキュア処理方法。
  19. メッセージに対して秘密情報を用いたセキュア演算を施した場合と同一の演算結果を得るセキュア処理装置において用いられるコンピュータプログラムであって、
    前記セキュア処理装置は、
    秘密情報を少なくとも2つに分割した分割秘密情報が引数として入力され、当該分割秘密情報から前記秘密情報を算出する第1の秘密情報生成式と、前記秘密情報を用いたセキュア演算の手順を示す第1のセキュア演算手順とを記憶している記憶手段を備えており、
    前記コンピュータプログラムは、
    少なくとも2つの前記分割秘密情報を演算した結果である結合秘密情報が引数として入力され、前記第1の秘密情報生成式と演算上等価な第2の秘密情報生成式を生成する第1生成ステップと、
    前記第2の秘密情報生成式に含まれる演算子に基づいて、前記結合秘密情報が引数として入力され前記第1のセキュア演算手順と等価な演算の手順を示す第2のセキュア演算手順を生成する第2生成ステップと、
    前記メッセージに対し前記第2のセキュア演算手順に従ったセキュア演算を施す実行ステップと
    を含むことを特徴とするコンピュータプログラム。
  20. コンピュータ読み取り可能な記録媒体であって、請求項19に記載のコンピュータプログラムを記録していることを特徴とする記録媒体。
  21. メッセージに対して秘密情報を用いたセキュア演算を施した場合と同一の演算結果を得る集積回路であって、
    秘密情報を少なくとも2つに分割した分割秘密情報が引数として入力され、当該分割秘密情報から前記秘密情報を算出する第1の秘密情報生成式と、前記秘密情報を用いたセキュア演算の手順を示す第1のセキュア演算手順とを記憶している記憶手段と、
    少なくとも2つの前記分割秘密情報を演算した結果である結合秘密情報が引数として入力され、前記第1の秘密情報生成式と演算上等価な第2の秘密情報生成式を生成する第1生成手段と、
    前記第2の秘密情報生成式に含まれる演算子に基づいて、引数として前記結合秘密情報が入力され前記第1のセキュア演算手順と等価な演算の手順を示す第2のセキュア演算手順を生成する第2生成手段と、
    前記メッセージに対し前記第2のセキュア演算手順に従ったセキュア演算を施す実行手段と
    を備えることを特徴とする集積回路。
  22. 秘密情報を用いた演算を行うセキュア処理装置に、前記秘密情報を難読化して埋め込む難読化秘密情報埋め込み方法であって、
    前記秘密情報を解析が困難な状態に変換する難読化装置を用いて、前記秘密情報を難読化する秘密情報難読化ステップと、
    難読化情報書き込み装置を用いて、難読化された秘密情報を前記セキュア処理装置に埋め込む埋込ステップと
    を含むことを特徴とする難読化秘密情報埋め込み方法。
  23. 前記難読化装置は、前記秘密情報の難読化の方法を決定するためのパラメータを入力として受け付ける入力手段を備え、
    前記秘密情報難読化ステップは、
    前記入力手段が前記パラメータを受け付ける受付ステップと、
    前記パラメータに基いて決定される難読化方法で、前記秘密情報を難読化する難読化ステップと
    を含むことを特徴とする請求項22に記載の難読化秘密情報埋め込み方法。
  24. 前記パラメータは、前記秘密情報の分割個数であり、
    前記難読化ステップは、前記分割個数に基づいて、前記秘密情報を少なくとも2つの分割秘密情報に分割する分割ステップを含む
    ことを特徴とする請求項23に記載の難読化秘密情報埋め込み方法。
  25. 前記難読化ステップは、更に、
    前記分割個数に基づき、少なくとも前記分割個数の項を含む第1の秘密情報生成式を生成する式生成ステップを含み、
    前記分割ステップは、前記第1の秘密情報生成式から前記秘密情報が算出されるように、前記秘密情報を分割する
    ことを特徴とする請求項24に記載の難読化秘密情報埋め込み方法。
  26. 前記パラメータは、第1の秘密情報生成式であり、
    前記難読化ステップは、
    前記第1の秘密情報生成式から前記秘密情報が算出されるように、前記秘密情報を少なくとも2つの分割秘密情報に分割するステップ
    を含むことを特徴とする請求項23に記載の難読化秘密情報埋め込み方法。
  27. 前記秘密情報は、鍵発行機関から発行される秘密鍵であり、
    前記難読化秘密情報埋め込み方法は、
    前記鍵発行機関が前記秘密鍵を鍵発行機関の秘密鍵で暗号化する暗号化ステップと、
    前記難読化装置が、暗号化された前記鍵を公開鍵で復号および検証する検証ステップとをさらに有し、
    前記秘密情報難読化ステップは、検証された前記秘密鍵を難読化し、
    前記埋込ステップは、
    前記難読化装置により難読化された前記難読化情報をバイナリデータに変換するバイナリ変換ステップと、
    前記秘密情報を用いた演算結果と同一の結果を前記難読化秘密情報を用いて演算する機能を有するセキュア処理装置に、前記バイナリデータを埋め込むバイナリ埋込ステップと
    を含むことを特徴とする請求項22に記載の難読化秘密情報埋め込み方法。
JP2007542571A 2005-10-31 2006-10-24 セキュア処理装置、セキュア処理方法、難読化秘密情報埋め込み方法、プログラム、記憶媒体および集積回路 Active JP4970279B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2007542571A JP4970279B2 (ja) 2005-10-31 2006-10-24 セキュア処理装置、セキュア処理方法、難読化秘密情報埋め込み方法、プログラム、記憶媒体および集積回路

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
JP2005316105 2005-10-31
JP2005316105 2005-10-31
JP2007542571A JP4970279B2 (ja) 2005-10-31 2006-10-24 セキュア処理装置、セキュア処理方法、難読化秘密情報埋め込み方法、プログラム、記憶媒体および集積回路
PCT/JP2006/321090 WO2007052491A1 (ja) 2005-10-31 2006-10-24 セキュア処理装置、セキュア処理方法、難読化秘密情報埋め込み方法、プログラム、記憶媒体および集積回路

Publications (2)

Publication Number Publication Date
JPWO2007052491A1 true JPWO2007052491A1 (ja) 2009-04-30
JP4970279B2 JP4970279B2 (ja) 2012-07-04

Family

ID=38005643

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007542571A Active JP4970279B2 (ja) 2005-10-31 2006-10-24 セキュア処理装置、セキュア処理方法、難読化秘密情報埋め込み方法、プログラム、記憶媒体および集積回路

Country Status (5)

Country Link
US (1) US8656175B2 (ja)
EP (1) EP1944904A1 (ja)
JP (1) JP4970279B2 (ja)
CN (1) CN101300775B (ja)
WO (1) WO2007052491A1 (ja)

Families Citing this family (50)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090157630A1 (en) * 2007-10-26 2009-06-18 Max Yuan Method of extracting data and recommending and generating visual displays
CN101937387B (zh) * 2009-06-30 2013-04-17 中国电信股份有限公司 一种测试参数的生成方法和系统
KR101344402B1 (ko) * 2010-08-12 2013-12-26 한국전자통신연구원 Rsa 서명 방법 및 장치
IT1401937B1 (it) * 2010-09-16 2013-08-28 St Microelectronics Srl Metodo di generazione di una firma digitale
US8874991B2 (en) * 2011-04-01 2014-10-28 Cleversafe, Inc. Appending data to existing data stored in a dispersed storage network
US11418580B2 (en) 2011-04-01 2022-08-16 Pure Storage, Inc. Selective generation of secure signatures in a distributed storage network
US10298684B2 (en) 2011-04-01 2019-05-21 International Business Machines Corporation Adaptive replication of dispersed data to improve data access performance
KR101620246B1 (ko) * 2011-10-24 2016-05-23 코닌클리즈케 케이피엔 엔.브이. 콘텐츠의 보안 배포
US9094205B2 (en) 2012-08-31 2015-07-28 Freescale Semiconductor, Inc. Secure provisioning in an untrusted environment
US9129536B2 (en) 2012-08-31 2015-09-08 Freescale Semiconductor, Inc. Circuit for secure provisioning in an untrusted environment
US9100189B2 (en) 2012-08-31 2015-08-04 Freescale Semiconductor, Inc. Secure provisioning in an untrusted environment
US9100174B2 (en) 2012-08-31 2015-08-04 Freescale Semiconductor, Inc. Secure provisioning in an untrusted environment
CN102932147B (zh) * 2012-10-09 2015-08-12 上海大学 基于隐马尔科夫模型的椭圆曲线密码计时攻击方法
EP2765720A1 (en) * 2013-02-06 2014-08-13 Koninklijke Philips N.V. Body coupled communication system
US10068228B1 (en) 2013-06-28 2018-09-04 Winklevoss Ip, Llc Systems and methods for storing digital math-based assets using a secure portal
US11282139B1 (en) 2013-06-28 2022-03-22 Gemini Ip, Llc Systems, methods, and program products for verifying digital assets held in a custodial digital asset wallet
US10354325B1 (en) 2013-06-28 2019-07-16 Winklevoss Ip, Llc Computer-generated graphical user interface
US9892460B1 (en) 2013-06-28 2018-02-13 Winklevoss Ip, Llc Systems, methods, and program products for operating exchange traded products holding digital math-based assets
US10269009B1 (en) 2013-06-28 2019-04-23 Winklevoss Ip, Llc Systems, methods, and program products for a digital math-based asset exchange
US9928263B2 (en) * 2013-10-03 2018-03-27 Google Llc Persistent shuffle system
CN103607645B (zh) * 2013-11-22 2017-06-23 深圳市九洲电器有限公司 一种机顶盒防盗版方法和机顶盒
US9264048B2 (en) * 2013-12-18 2016-02-16 Intel Corporation Secret operations using reconfigurable logics
US9489525B2 (en) * 2014-07-24 2016-11-08 International Business Machines Corporation Secure storage system
US9430658B2 (en) 2014-12-16 2016-08-30 Freescale Semiconductor, Inc. Systems and methods for secure provisioning of production electronic circuits
US9853977B1 (en) 2015-01-26 2017-12-26 Winklevoss Ip, Llc System, method, and program product for processing secure transactions within a cloud computing system
US9674162B1 (en) * 2015-03-13 2017-06-06 Amazon Technologies, Inc. Updating encrypted cryptographic key pair
US10158480B1 (en) 2015-03-16 2018-12-18 Winklevoss Ip, Llc Autonomous devices
US10915891B1 (en) 2015-03-16 2021-02-09 Winklevoss Ip, Llc Autonomous devices
US9479340B1 (en) 2015-03-30 2016-10-25 Amazon Technologies, Inc. Controlling use of encryption keys
CN107154921A (zh) * 2016-03-03 2017-09-12 阿里巴巴集团控股有限公司 共管账户的授权方法和装置、共管账户的认证方法和装置
JP6721832B2 (ja) * 2016-08-24 2020-07-15 富士通株式会社 データ変換プログラム、データ変換装置及びデータ変換方法
CN111108540B (zh) * 2017-09-21 2023-03-21 日本电信电话株式会社 秘密读写装置、秘密读写方法、以及记录介质
US11200569B1 (en) 2018-02-12 2021-12-14 Winklevoss Ip, Llc System, method and program product for making payments using fiat-backed digital assets
US11308487B1 (en) 2018-02-12 2022-04-19 Gemini Ip, Llc System, method and program product for obtaining digital assets
US10438290B1 (en) 2018-03-05 2019-10-08 Winklevoss Ip, Llc System, method and program product for generating and utilizing stable value digital assets
US10373129B1 (en) 2018-03-05 2019-08-06 Winklevoss Ip, Llc System, method and program product for generating and utilizing stable value digital assets
US11909860B1 (en) 2018-02-12 2024-02-20 Gemini Ip, Llc Systems, methods, and program products for loaning digital assets and for depositing, holding and/or distributing collateral as a token in the form of digital assets on an underlying blockchain
US11522700B1 (en) 2018-02-12 2022-12-06 Gemini Ip, Llc Systems, methods, and program products for depositing, holding and/or distributing collateral as a token in the form of digital assets on an underlying blockchain
US11139955B1 (en) 2018-02-12 2021-10-05 Winklevoss Ip, Llc Systems, methods, and program products for loaning digital assets and for depositing, holding and/or distributing collateral as a token in the form of digital assets on an underlying blockchain
US10540654B1 (en) 2018-02-12 2020-01-21 Winklevoss Ip, Llc System, method and program product for generating and utilizing stable value digital assets
US10373158B1 (en) 2018-02-12 2019-08-06 Winklevoss Ip, Llc System, method and program product for modifying a supply of stable value digital asset tokens
US11475442B1 (en) 2018-02-12 2022-10-18 Gemini Ip, Llc System, method and program product for modifying a supply of stable value digital asset tokens
US10929842B1 (en) 2018-03-05 2021-02-23 Winklevoss Ip, Llc System, method and program product for depositing and withdrawing stable value digital assets in exchange for fiat
US11334883B1 (en) 2018-03-05 2022-05-17 Gemini Ip, Llc Systems, methods, and program products for modifying the supply, depositing, holding and/or distributing collateral as a stable value token in the form of digital assets
US11736457B2 (en) * 2018-11-13 2023-08-22 Splitbyte Inc. Systems and methods for managing data based on secret sharing
US10985911B2 (en) * 2018-11-13 2021-04-20 KapiSoft Inc. Systems and methods for managing data based on secret sharing
US11501370B1 (en) 2019-06-17 2022-11-15 Gemini Ip, Llc Systems, methods, and program products for non-custodial trading of digital assets on a digital asset exchange
US11314876B2 (en) 2020-05-28 2022-04-26 Bank Of America Corporation System and method for managing built-in security for content distribution
CN112769553B (zh) * 2020-12-30 2022-08-19 北京宏思电子技术有限责任公司 嵌入式系统中加快sm9双线性对运算的实现方法及装置
CN116881986B (zh) * 2023-07-03 2024-05-07 深圳市博德越科技有限公司 一种硬盘数据保密方法和系统

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5497423A (en) * 1993-06-18 1996-03-05 Matsushita Electric Industrial Co., Ltd. Method of implementing elliptic curve cryptosystems in digital signatures or verification and privacy communication
US20020013898A1 (en) * 1997-06-04 2002-01-31 Sudia Frank W. Method and apparatus for roaming use of cryptographic values
US7212632B2 (en) * 1998-02-13 2007-05-01 Tecsec, Inc. Cryptographic key split combiner
WO1999001815A1 (en) * 1997-06-09 1999-01-14 Intertrust, Incorporated Obfuscation techniques for enhancing software security
EP1090480B1 (en) * 1998-06-03 2019-01-09 Cryptography Research, Inc. Improved des and other cryptographic processes with leak minimization for smartcards and other cryptosystems
US7599491B2 (en) * 1999-01-11 2009-10-06 Certicom Corp. Method for strengthening the implementation of ECDSA against power analysis
FR2789535B1 (fr) * 1999-02-04 2001-09-28 Bull Cp8 Procede de securisation d'un ensemble electronique de cryptographie a cle secrete contre les attaques par analyse physique
US6594761B1 (en) * 1999-06-09 2003-07-15 Cloakware Corporation Tamper resistant software encoding
FR2800478B1 (fr) * 1999-10-28 2001-11-30 Bull Cp8 Procede de securisation d'un ensemble electronique de cryptographie a base d'exponentiation modulaire contre les attaques par analyse physique
JP3659178B2 (ja) * 2001-02-22 2005-06-15 日本電信電話株式会社 分散ディジタル署名作成方法及び装置及び分散ディジタル署名付ディジタル文書作成方法及び装置及び分散ディジタル署名作成プログラム及び分散ディジタル署名作成プログラムを格納した記憶媒体
EP1249964A3 (en) * 2001-04-12 2004-01-07 Matsushita Electric Industrial Co., Ltd. Reception terminal, key management apparatus, and key updating method for public key cryptosystem
JP2002368735A (ja) 2001-06-11 2002-12-20 Sharp Corp マスタ用ic装置、マスタ用ic装置のためのバックアップ用ic装置、マスタ用ic装置にダミー鍵を与えるダミー鍵格納装置、マスタ用ic装置とバックアップ用ic装置とのための補助装置、及び二つ以上の補助装置を用いた鍵バックアップシステム
CN1207867C (zh) * 2001-09-28 2005-06-22 中国科学院研究生院 一种安全的数字签名系统及其数字签名方法
AU2002362696B2 (en) * 2001-10-05 2008-05-29 Cytos Biotechnology Ag Angiotensin peptide-carrier conjugates and uses thereof
JP2004004341A (ja) * 2002-05-31 2004-01-08 Toshiba Corp べき乗剰余計算装置、べき乗剰余計算方法及びプログラム
US7062043B1 (en) * 2002-06-28 2006-06-13 The United States Of America As Represented By The National Security Agency Method of elliptic curve digital signature using coefficient splitting
GB2405958A (en) * 2003-08-20 2005-03-16 Macrovision Europ Ltd Code obfuscation and controlling a processor by emulation

Also Published As

Publication number Publication date
WO2007052491A1 (ja) 2007-05-10
US20090132830A1 (en) 2009-05-21
CN101300775B (zh) 2012-12-19
JP4970279B2 (ja) 2012-07-04
EP1944904A1 (en) 2008-07-16
CN101300775A (zh) 2008-11-05
US8656175B2 (en) 2014-02-18

Similar Documents

Publication Publication Date Title
JP4970279B2 (ja) セキュア処理装置、セキュア処理方法、難読化秘密情報埋め込み方法、プログラム、記憶媒体および集積回路
CN107465505B (zh) 一种密钥数据处理方法、装置及服务器
US20190356666A1 (en) Generating Cryptographic Function Parameters From Compact Source Code
JP2022507796A (ja) ブロックチェーン上にデータを格納するコンピュータにより実施されるシステム及び方法
CN102016871B (zh) 密码系统
CN109784931B (zh) 一种基于区块链的数据查询平台的查询方法
US8670559B2 (en) White-box implementation
JP4840782B2 (ja) プログラム変換装置、セキュア処理装置、コンピュータプログラム及び記録媒体
CN110061840A (zh) 数据加密方法、装置、计算机设备及存储介质
US20070192622A1 (en) Computer system, computer program, and addition method
CN1941691B (zh) 生成用于检测在处理期间加密数据的虚假改造的数据的设备及方法
KR20110014630A (ko) 지수 불명료화
EP3488553A1 (en) Device and method for performing obfuscated arithmetic
CN105721156A (zh) 用于模幂加密方案的通用编码函数
Ertaul et al. Novel obfuscation algorithms for software security
EP3127271B1 (en) Obfuscated performance of a predetermined function
CN108805574B (zh) 基于隐私保护的交易方法和系统
JP7318490B2 (ja) 暗号処理システム及び暗号処理方法
Ahmad et al. A secure network communication protocol based on text to barcode encryption algorithm
EP3483867B1 (en) System, device, method, and program for indexing a secret-shared array with secure multiparty computations
EP2286610B1 (en) Techniques for peforming symmetric cryptography
EP3238365B1 (en) Cryptographic system and method
Carminati et al. Secure web service composition with untrusted broker
CN104050399B (zh) 用户验证方法和装置以及盗版追踪方法和装置
JP6881588B2 (ja) 秘密計算装置、秘密計算方法、プログラム、および記録媒体

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20090825

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120117

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120210

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20120306

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120404

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150413

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 4970279

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150