(57)【要約】【課題】汎用機能を持ち、なおかつ、セキュリティ機能（すなわち鍵データの安全保管とディジタル署名計算の高速化）も持つプロセッサの提供。【解決手段】一般用と署名演算用の命令を有するセキュア・プロセッサ１００内に、不揮発性の鍵レジスタ１３０に、鍵データが格納されている。鍵ビット参照カウンタ１５２は１０２３から０まで、順次デクリメントする。この鍵ビット参照カウンタ１５２の内容により、ビット指定ゲート１５４から、鍵レジスタ１３０に格納されているＫデータが順次１ビットづつ指定され、逐次署名演算に使用される。鍵Ｋを格納する鍵レジスタ１３０から他へデータを転送する語データ並列伝送経路を設けていない。  このようなハードウェア構造からして、鍵データを生の形で直接外部へ出すことは不可能である。【選択図】図１
2005141160.tif 000002
【特許請求の範囲】
【請求項１】
鍵データを格納した不揮発性メモリで構成される鍵レジスタと、
該鍵レジスタに格納された鍵データを１ビットづつ参照するために、ビット位置を示す鍵カウンタと、
デジタル署名に用いるダイジェスト・データを格納するダイジェスト・レジスタと、
前記鍵カウンタにより参照された１ビットの鍵データが０のときは前記ダイジェスト・レジスタの内容を１、１のときは前記ダイジェスト・レジスタの内容をそのまま出力するゲートとを備え、
一般命令とともに、前記鍵レジスタ、前記鍵カウンタ、及び前記ダイジェスト・レジスタを操作して前記ダイジェスト・データからデジタル署名を求めるための複数の署名専用命令を有する
ことを特徴とするセキュア・プロセッサ。
【請求項２】
請求項１に記載のセキュア・プロセッサにおいて、
プロセッサの走行モードとして、一般モードとセキュリティ・モードを有し、
前記セキュリティ・モードを表示するセキュリティ・レジスタを備えるとともに、前記セキュリティ・モードをセットする一般命令及びリセットする署名専用命令を有し、
前記一般命令は一般モードのときに有効となり、前記署名専用命令はセキュリティ・モードのときに有効となることを特徴とするセキュア・プロセッサ。
【請求項３】
請求項２に記載のセキュア・プロセッサにおいて、
前記セキュリティ・モード設定命令は、前記セキュリティ・レジスタをセットすると同時に、前記鍵カウンタを初期設定し、
前記署名専用命令は、署名計算を鍵レジスタの１ビット分実行する命令の実行と同時に鍵カウンタをデクリメントして、順次ビットごとの署名計算が進行し、前記鍵カウンタが０のときのみにセキュリティ・モードをリセットすることを特徴とするセキュア・プロセッサ。
【請求項４】
請求項３に記載のセキュア・プロセッサにおいて、
前記ダイジェスト・レジスタに設定されたダイジェスト・データが少なくとも「２ｎ」（ｎ＝１，２，…）ではないことを検出する手段を備え、
前記セキュリティ設定命令は、「２ｎ」ではないことを条件に、前記鍵カウンタを初期設定することを特徴とするセキュア・プロセッサ。
【請求項５】
請求項３又は４に記載のセキュア・プロセッサにおいて、
セキュア・プロセッサには、主メモリに接続しており、
前記署名専用命令は、前記デジタル署名を求める演算の演算結果を、前記主メモリの特定の領域のみに格納して、デジタル署名演算の最終結果を前の演算結果に上書きすることを特徴とするセキュア・プロセッサ。
【請求項６】
請求項１〜５のいずれかに記載のセキュア・プロセッサを組み込んだＩＣカード。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、汎用マイクロプロセッサのアーキテクチャ（論理構成）に関し、特に、デジタル署名等のセキュリティ技術にも用いられるマイクロプロセッサのアーキテクチャに関する。
【背景技術】
【０００２】
コンピュータ誕生以来約６０年の間、プロセッサの機能・性能の向上は１００万倍のオーダーにも達する。改善の主たる担い手は素子・回路の機能・性能の改善による。その次の副たる担い手は、アーキテクチャの改善である。そのアーキテクチャ面での改善も殆どが性能向上に向けられてきた。最近２０年間程度ではごく一部で、信頼性向上や電力低減のためのアーキテクチャ改善もあった。しかしながら、セキュリティ改善のために行われたアーキテクチャ改善の例はない。
ただし、セキュリティ改善の目的のために公開鍵暗号計算（例えばRSA暗号計算）専用のプロセッサが使用されている例はある。それはＩＢＭ，富士通，松下通信，ＮＴＴデータ等のセキュリティ専用プロセッサである。これは署名演算や暗号計算だけを引き受ける専用の付加プロセッサである。別に汎用の主プロセッサが存在することが前提である。これらは、もともと専用プロセッサ全体が署名演算・暗号計算だけしか受け付けない機能限定プロセッサであるから、鍵データを他目的に使われる危険も容易に避けられる。
なお、ＲＳＡによる暗号計算のアルゴリズムについては、例えば、非特許文献１に示した文献を参考にされたい。
【非特許文献１】Cetin Kaya Koc "High-Speed RSA Implementation Vresion 2.0" RSA Data Security, Inc. 1994(ftp://ftp.rsasecurity.com/pub/pdfs/tr201.pdf)
【発明の開示】
【発明が解決しようとする課題】
【０００３】
本発明の目的は、汎用機能を持ち、なおかつ、セキュリティ機能（すなわち鍵データの安全保管とディジタル署名計算の高速化）も持つプロセッサの提供である。
【課題を解決するための手段】
【０００４】
上述の目的を達成するために、本発明は、鍵データを格納した不揮発性メモリで構成される鍵レジスタと、該鍵レジスタに格納された鍵データを１ビットづつ参照するために、ビット位置を示す鍵カウンタと、デジタル署名に用いるダイジェスト・データを格納するダイジェスト・レジスタと、前記鍵カウンタにより参照された１ビットの鍵データが０のときは前記ダイジェスト・レジスタの内容を１、１のときは前記ダイジェスト・レジスタの内容をそのまま出力するゲートとを備え、一般命令とともに、前記鍵レジスタ、前記鍵カウンタ、及び前記ダイジェスト・レジスタを操作して前記ダイジェスト・データからデジタル署名を求めるための複数の署名専用命令を有することを特徴とするセキュア・プロセッサである。
これにより、汎用機能を持ち、不揮発性メモリの鍵レジスタに格納した鍵データを直接的には読めないため、セキュリティ機能も持つプロセッサを提供することができる。
このプロセッサの走行モードとして、一般モードとセキュリティ・モードを有し、前記セキュリティ・モードを表示するセキュリティ・レジスタを備えるとともに、前記セキュリティ・モードをセットする一般命令及びリセットする署名専用命令を有し、前記一般命令は一般モードのときに有効となり、前記署名専用命令はセキュリティ・モードのときに有効となるとすることもできる。
【０００５】
前記セキュリティ・モード設定命令は、前記セキュリティ・レジスタをセットすると同時に、前記鍵カウンタを初期設定し、前記署名専用命令は、署名計算を鍵レジスタの１ビット分実行する命令の実行と同時に鍵カウンタをデクリメントして、順次ビットごとの署名計算が進行し、前記鍵カウンタが０のときのみにセキュリティ・モードをリセットする構成とし、一旦、デジタル署名の演算過程に入ると、終了するまで（鍵カウンタが０となるまで）、演算過程から抜けられず、演算過程の中間結果からプログラムにより鍵データを推定することを不可能としている。
前記ダイジェスト・レジスタに設定されたダイジェスト・データが少なくとも「２ｎ」（ｎ＝１，２，…）ではないことを検出する手段を備え、前記セキュリティ設定命令は、「２ｎ」ではないことを条件に、前記鍵カウンタを初期設定して、鍵データを間接的にも読み出すことができないようにしてもよい。
セキュア・プロセッサには、主メモリに接続しており、前記署名専用命令は、前記デジタル署名を求める演算の演算結果を、前記主メモリの特定の領域のみに格納して、デジタル署名演算の最終結果を前の演算結果に上書きする構成として、中間結果を主メモリに残すことを不可能としてもよい。
上述のセキュア・プロセッサを組み込んだＩＣカードでは、署名演算をＩＣカード内で実行でき、鍵データをＩＣカード外部に取り出す必要がなく、署名演算を安全に実行することができる。また、鍵データをＩＣカードからプログラムにより外部に取り出すことは不可能である。
【発明の効果】
【０００６】
本発明のセキュア・プロセッサは、汎用性とセキュリティ機能の二律背反性を新しいアーキテクチャを考案することによって解決している。
上述のセキュア・プロセッサが用いられている個人認証用のＩＣカードの主たる機能は署名演算である。本発明のセキュア・プロセッサを用いることにより、セキュリティ機能で署名演算を行うばかりでなく、キャッシュカード機能、クレジットカード機能、改竄防止機能、通行料金支払い機能、予約チケット機能、等々の応用に対して、異なる汎用の応用プログラムをプロセッサの上で走行することにより、対応することができる。
【発明を実施するための最良の形態】
【０００７】
個人認証において、セキュリティ機能を突き詰めていくと、個人鍵データを署名演算にのみ使えるようにし、他のあらゆる操作を拒否するようにすることに行き着く。これを実現するために、本発明のセキュア・プロセッサは大きく分類して２つの構成を有している。
Ａ：個人鍵データが署名演算等において使われるときは、上位から順番に１ビットづつ参照される動作のみで、他の動作はない。このことに着目して、個人鍵を主メモリや汎用レジスタではなく、独自の不揮発性専用レジスタに格納する。そして、その専用レジスタには、全データを外部から読み取るパスはなくする。上位から順に１ビットづつ参照する演算のためのパスのみを作る。
Ｂ：セキュア・プロセッサにおいて、従来のプロセッサには存在しなかったセキュリティ・モードと称するモードを導入する。これはプログラム走行の環境を制約する条件でもある。セキュリティ・モードにおいては通常の命令語は命令として解読されない。署名演算でのみ使用される特殊な命令語のみが命令として機能する。
これらの手法によって、本発明のセキュア・プロセッサは、如何なるプログラムによっても個人鍵データを外部へ漏洩せしめることは不可能となる。
以下に、図面を用いて、上述のＡ，Ｂの両機能を備えたセキュア・プロセッサの構成例を詳しく説明する。
【０００８】
＜プロセッサの構成＞
図１は、セキュア・プロセッサの実施形態の１例を示すブロック図である。図２は、セキュア・プロセッサ内の鍵レジスタ部分のブロック図である。図３は、実施形態のセキュア・プロセッサの命令フォーマットである。図４は、セキュア・プロセッサのオペコード（ＯＰコード：命令コード）例である。
【０００９】
＜セキュア・プロセッサの内部構成＞
図１に示したプロセッサ１００は、署名演算のために、なるべく長い語長（６４ビット）を有し、１６倍長語までの計算が１個の命令できる。また、主メモリ２００とのアドレス単位も語単位（６４ビット単位）である。主メモリの容量は、６４ビット×６４Ｋ語（５１２ＫＢ＝４Ｍbits）である。これらについては、後で詳しく説明する。
なお、以下に説明するセキュア・プロセッサの語単位として、６４ビットを用いた構成としているが、これは、鍵データとの署名演算から、なるべく長い語長を選択したためであり、演算速度等やハードウェア量との関係から、決定すればよい事項である。
【００１０】
（セキュア・プロセッサ内部構成の説明）
図１のＣＰＵ１００内には、命令レジスタ（ＩＳ：InStruction Register）１４３，メモリデータ・レジスタ（ＭＤ：Memory Data Register）１４４，プログラム・カウンタ（PC：Program Counter）１４５，Ｆ−オペランド・カウンタ（ＦＣ：F-operand Counter）１４６，Ｔ−オペランド・カウンタ（ＴＣ：T-operand Counter）１４７が用意されている。これらは、主メモリ２００との間にあり、主メモリ２００から、命令やデータを読み出したり、書き込んだりするためのレジスタである。
プログラム・カウンタ（ＰＣ）１４５の内容により、主メモリ２００から命令レジスタ（ＩＳ）１４３に、図３（ａ）に示すフォーマット（６４ビット）の命令が読み出される。この命令により、図３（ａ）のＭＦやＭＴのフィールドで指定されたアドレスモード（図３（ｂ）参照）に従って、Ｆ−オペランド・カウンタ１４６，Ｔ−オペランド・カウンタ１４７にアドレス等が設定され、主メモリ２００からメモリデータ・レジスタ（ＭＤ）１４４にデータが読み出されたり、メモリデータ・レジスタ１４４（ＭＤ）内のデータが主メモリ２００に書き込まれたりする。
【００１１】
倍長演算命令では、図３のＬフィールドに指定された語長分、Ｆ−オペランド・カウンタ１４６やＴ−オペランド・カウンタ１４７は、インクリメント（１づつ増加）されて、オペランドが主メモリ２００から次々に読み出されるか書き込まれることで、１６倍長語までの処理が１個の命令できる。
汎用演算器（ＡＬＵ：Arithmetic and Logic Unit）１６４は、一般的な演算（加算，減算，論理演算等）を行う演算器であり、乗算器（ＭＰＹ：MultiPlY unit）１６２は、６４ビット×６４ビットの掛け算を行う演算器である。
ＰＦレジスタ（Program Status Flag）１４８は、命令の実行によりセットされる４ビットのフラグであり、図４−１（ａ），図４−２（ｂ）に示されているオペコード表のＰＳＷの項に示されているものがセットされる。オペコード表のＰＳＷ（Program Status Word）のＮ，Ｚ，Ｖ，Ｃは、それぞれ、負（Negative），ゼロ（Zero），オーバーフロー（oVerflow），キャリ（Carry）を示している。
演算用レジスタ（Ｒ０〜ＲＦ）１１０は、一般用の演算命令等で用いられる汎用のレジスタである。この汎用レジスタを用いる演算命令は、図３（ａ）のＭＦ又はＭＴに図３（ｂ）のレジスタ直接を指定して、Ｆ又はＴオペランドのフィールドにレジスタ番号を指定する。バッファ・レジスタ（Ｂ０，Ｂ１）１４１，１４２は、演算途中の結果等を格納しておくレジスタである。
上述の命令の動作や各レジスタの機能は、詳しくは、図３に示した命令のフォーマットと図４−１，図４−２のオペコード表（命令コード表）等を参照されたい。図４−１（ａ）及び図４−２（ｂ）はオペコード表であり、図４−２（ｃ）は、オペコード表のフィールドごとに使用されている記号の説明であり、図４−２（ｄ）は、オペコード表の動作の項の表記の説明であり、図４−２（ｅ）は、図４−２（ｃ），（ｄ）の＊で示していることの補足説明である。
オペコード表のＯＰ，ＳＯＰ，ＭＦ，ＭＴ，Ｌ，Ｆ，Ｔ，Ｓの各項は、図３（ａ）（ｂ）の命令フォーマットの説明と図４−２（ｃ）の記号の説明を参照されたい。また、ニモニックは、命令の略号であり、今後、各命令を参照するときは、このニモニックを使用している。各命令の動作は、動作の項に記載されている。属性は、命令の分類で、例えば、ＳＦＴはシフト命令、ＡＤＤは加算命令、ＳＵＢは減算命令、ＢＩＴはビット処理命令、ＭＯＶは移動命令、ＪＭＰはジャンプ命令、ＬＩＮＫはサブルーティンコール命令、ＢＲはＰＳＷによるブランチ命令を示している。なお、ＳＶＣ命令は、スーババイザ・コール命令で、図１に示していないＩＴフラグをセットしている。ＲＩＴはスーババイザ・コール命令のリターン命令で、ＩＴフラグをリセットしている。
なお、上述のオペコード表の中に、以下で説明する署名演算用の命令も含まれている。これらの命令については、後で説明する。
【００１２】
以上説明した構成は、通常の汎用マイクロ・プロセッサの構成と同様のものである。これらは、このセキュア・プロセッサが応用される分野に応じて、変更することができる。例えば、６４ビット／語の構成を生かすために、以下の署名演算で用意されているｍｏｄ演算に有効な命令を、暗号計算用に一般用の命令として用意してもよい。
【００１３】
＜署名演算に関する構成＞
以下に説明する構成は、セキュア・プロセッサの署名演算に密着している構成例である。
【００１４】
（鍵データ漏洩防止）
さて、セキュリティ機能のひとつの目的は、鍵データＫ漏洩の防止である。図１において、鍵データは、不揮発性メモリ（例えばＲＯＭ）で構成された鍵レジスタ（Ｋ０〜ＫＦ：Key register）１３０に格納されている。鍵レジスタ１３０には、各ユーザの例えばＲＳＡの秘密鍵データ（１０２４ビット）が書き込まれている。この不揮発性メモリへの鍵の書き込みは、例えば外部から専用のライタにより書き込むことで行っても良い。
ＲＳＡ公開鍵方式でのディジタル署名演算の方式では、鍵Ｋの値は１ビットづつ上位ビットから参照して、別の乗算へ反映させる必要があり、これが唯一の使用方法である。従って、この目的のために、図２のような、鍵レジスタ１３０から１ビットづつ選択して参照する鍵参照回路を設けている。なお、これらの回路を用いたデジタル署名演算のアルゴリズムについては、後で詳しく説明する。
【００１５】
図２の鍵参照回路において、鍵ビット参照カウンタ（ＫＣ：Key-bit reference Counter）１５２は１０２３から０まで、順次デクリメントする。この鍵ビット参照カウンタ１５２の内容により、ビット指定ゲート１５４から、鍵レジスタ１３０に格納されているＫデータが順次１ビットづつ指定されて参照される。図２からも分かるように、鍵Ｋを格納する鍵レジスタ１３０から他へデータを転送する語データ並列伝送経路を設けていない。図１に示すように、ビット指定ゲート１５４からの参照出力は、ダイジェスト・レジスタ１２０の出力選択ゲート１５６にのみ使用される。このように、図１，図２に示されているハードウェア構造からして、鍵データを生の形で直接外部へ出すことは不可能である。
【００１６】
図１のダイジェスト・レジスタ（Ｄ０〜Ｄ２：Digest register）１２０は、６４ビット×３のレジスタであり、デジタル署名の処理のために、デジタル署名を付加するための本文から抽出されたダイジェスト・データ（特徴データ）を格納するためのレジスタである。
デジタル署名の処理を行う前に、本文の３語長分のダイジェストを作成し、主メモリ２００に格納しておく。ダイジェストは、本文のビット構成如何にかかわらず１６０ビット程度まで圧縮攪拌され（たとえばハッシュ関数SHA-1によって）ランダムなビット構成となっている。しかしながら、このダイジェスト・データを故意に２のような単純な値に設定することもできる。すると、署名計算結果から鍵Ｋの値を逆算される危険が発生する。これを防止するためにダイジェスト・レジスタの内容が「２ｎ」（ｎ＝１，２，…）のような単純な値ではないことを検知する必要がある。セキュア・プロセッサでは、単純な値ではないことを「有効パターン」と呼んで署名計算開始の条件としている。  図４−１のオペコード表で、ＤＭＶと表記されている命令により、Ｆフィールドで指定されている主メモリ２００のアドレスに格納されている３語長分のダイジェストをダイジェスト・レジスタ（Ｄレジスタ）１２０に格納する。
Ｄレジスタ１２０には、ビットパターン検知ゲート（図示せず）が付属している。ビットパターン検知ゲートは、Ｄレジスタ１２０の全１６０ビットを１６ビットづつ１０ブロックに区分し、すべてのブロックが少なくとも１個の”１”を持つかを検知している。これにより、格納したデータが「有効パターン」であるかを検出している。
上述した鍵参照回路で読み出された１ビットの鍵データは、Ｄレジスタ１２０から読み出したダイジェスト・データＤに対して、Ｄ判定ゲート１５６により反映している。これについては、後述する署名演算で説明する。
【００１７】
（セキュリティ・モード）
さて、上述した鍵レジスタ１３０や鍵参照回路のハードウェア構造からして鍵データＫを生の形で外部へ出すことは不可能なことは自明である。残る問題は上記の計算の中で間接的に使用される鍵データのビット毎の値を計測され、集められるかどうかである。観測対象が複雑な署名処理の最終結果（全１０２４ビット）ならば、それはディジタル署名データであるから鍵データの推測は実用上不可能であることは知られている。そこで各個別の１ビット毎にモンゴメリー乗算結果からＫの値（０または１）を推測されないようにするための他の防護策を次に説明する。
【００１８】
署名演算を他の普通の計算と区別し、署名演算の途中で使用される命令を署名以外の目的に悪用されないように防護するために、セキュア・プロセッサでは、プログラム走行モードを普通モードとセキュリティ・モードとに区分している。どちらのモードで走行中かをセキュリティフラグ・レジスタ（ＳＦレジスタ：Security Flag register）１４９で示している。
図１のＳＦレジスタ１４９にはＳＦ３，ＳＦ２，ＳＦ１，ＳＦ０の４ビットがあるが、当面使うのはＳＦ０のみである。
（１）ＳＦ０＝０：普通モード
応用プログラム部分、パソコン交信部分、圧縮計算（ダイジェスト・データを得る）部分
（２）ＳＦ０＝１：署名モード
署名演算実行中（後で説明する図５のフローチャート部分）
命令セットの中で、一般的命令は、セキュリティ・フラグＳＦ０が０でないと有効に働かない。命令セットの一部に署名演算の途中でのみ使用される命令を用意する。これらの命令はＳＦ０＝１でないと有効に働かない。なお、ＳＦ０のマッチングがとれないときは無動作ＮＯＰ命令と同じになる。図４−１（ａ），図４−２（ｂ）のオペコード表で、「動作」の欄に［ＳＦ＝１］と表示がある命令がこの命令に該当し、ＳＩＥ，ＫＣＪ，ＡＤＯ，ＳＣＭＰ，ＳＳＢ，ＭＬＳ，ＭＤＫ，ＭＬＤ，ＭＬＬ，ＭＬＨ，ＭＬＰの各命令である。なお、ＭＬＳ，ＭＤＫ，ＭＬＤ，ＭＬＬ，ＭＬＨ，ＭＬＰの命令は、演算結果を格納するための先頭アドレスを指定するＳフィールドを有しており、他の命令とフォーマットが異なっている。
【００１９】
ＳＦ０＝１を設定する命令（図４−１（ａ）：ＳＩＧ）は、必ず同時に、ＫＣ＝０３ＦＦ（＝１０２３ｄ），００００〜０００Ｆ番地の１０２４ビットデータ＝００００‥‥０００１に設定する。ＳＩＧ命令は、ダイジェスト・レジスタ１２０の内容が有効パターンでないと有効に働かない。これは、ダイジェスト・レジスタ１２０に”２”と設定されて、２ＫｍｏｄＮから鍵Ｋを逆算されることを防ぐ。
【００２０】
署名演算の途中で使用する計算結果の格納箇所は、以下の主メモリの上位６４番地の固定番地を使用している。
（１）  ００００〜０００Ｆ  １６番地（１０２４ビットデータ）
（２）  ００１０〜００１Ｆ  １６番地（１０２４ビットデータ）
（３）  ００２０〜００２Ｆ  １６番地（１０２４ビットデータ）
（４）  ００３０〜００３Ｆ  １６番地（１０２４ビットデータ）
計算結果が１０２４ビットの場合は（１）００００〜０００Ｆ番地の１６番地へ格納される。計算結果が２０４８ビットの場合は（１）（２）００００〜００１Ｆの３２番地へ格納される。計算結果を一旦退避させたいときは、（３）（４）００２０〜００３Ｆへ退避させることのみできる。なお、ＳＦ０＝１が解除されてＳＦ０＝０になったあとでは、普通のＭＯＶ命令（図４−１（ａ）参照）等で上述の上位固定番地の内容を他番地へ移せる。
【００２１】
そして、署名演算が終了するまで、即ち、鍵カウンタＫＣがゼロとなるまで、ＳＦ０をリセットする命令（ＳＩＥ）を動作させることができない（図４−１（ａ）参照）。これについては後で詳しく説明する。
この結果、ビット毎の計算結果は固定の番地のみへどんどん集積し、ビットごとの途中結果は外部へ取り出すことはできず、最後の全ビット積算結果のみ外部へ取り出せる。
【００２２】
（署名演算）
ＲＳＡ公開鍵システムにおけるディジタル署名は、ＤＫｍｏｄＮ  （Ｄ：ダイジェスト・データ，Ｋ：鍵，Ｎ：特定の整数）を計算することである。
ＤＫｍｏｄＮを一個の巨大な特殊命令で扱うことは、セキュリティ上は望ましいものの、ハードウェア資源上得策でないので、通常の命令と同程度の大きさの特殊命令を複数個用意して実行する。すると、それらの特殊命令の使い方を変えて、鍵Ｋを外部へ漏洩する悪意のプログラムを構成できる可能性も発生する。これを防護するのが上述したセキュリティ機能である。このセキュリティ機能を利用する、ＤＫｍｏｄＮの計算をおこなう手順を、図５のフローチャートを用いて説明する。図５のフローチャートは、バイナリ法（Binary Method）のアルゴリズムで処理する場合であり、詳しくは、例えば上記の非特許文献１（2.3 The Binary Method (p.10〜p.11)）を参照されたい。なお、手順中のＡはメモリ００００〜０００Ｆ番地の内容である。
【００２３】
図５のフローチャートにおいて、初期設定（Ｓ３１２）に必要な、１→ＳＦ０，１→Ａ，１０２３→ＫＣの３つの初期動作を１個の命令（ＳＩＧ命令）で行っている。そして、署名演算のサブルーティンに入る。
ただし、ＳＦをセットするためには、ダイジェスト・レジスタ１２０の内容が有効パターンであることが条件となる。有効パターンとは、１６０ビットあるダイジェスト・レジスタ内のデータが十分に撹拌され、圧縮されたデータであることを言う。１６ビット×１０の１６ビット毎に少なくとも１個は１があることをハードウェア的に検知する。ＳＦ０＝１となったあとは  ダイジェスト・レジスタ１２０内のデータ変更はできない。      
【００２４】
さて、初期化のあと、Ａ２ｍｏｄＮを計算する（Ｓ３１４）。最初は、Ａ＝１である。
つぎに、Ａ×ＤｍｏｄＮを計算する（Ｓ３１６）。Ｄは、以下のようにＫｃ（鍵Ｋ中の、鍵カウンタ（ＫＣ）１５２で指示された位置のビット）の値によって２通りの値をとる。
【数１】
2005141160.tif 000003
Ｄは、ダイジェスト・レジスタＤ１２０から読み出されたダイジェスト・データＤと、鍵レジスタ１３０から鍵カウンタ（ＫＣ）１５２により読み出されたＫｃとから、ハードウェア・ゲート１５６で作られる。図４−２（ｂ）のオペコード表では、ＭＤＫ命令であり、鍵カウンタのデクレメントと上述のＤを得ることを同時に行う命令である。
問題の鍵Ｋは、直接には表面に現れないが、間接的にＡ×ＤＫｍｏｄＮ→ＡのＤに影響を与える。外部に絶対に漏洩させてはならないＫが、間接的に関与する部分はＡ×ＤＫｍｏｄＮの計算部分である。
【００２５】
これを鍵Ｋの長さ分、即ち、鍵カウンタＫＣ１５２が零となるまで（Ｓ３１８でＹＥＳ）、鍵カウンタＫＣ１５２をデクレメントして（Ｓ３２０）、２つのｍｏｄ計算（Ｓ３１４．Ｓ３１６）を行う。鍵カウンタＫＣ１５２が零となると、ＳＦ０を零にリセットして、この署名演算のサブルーティンから抜けることができる（ＳＩＥ命令）。
特定の領域に格納される計算途中の演算結果は、次々に上書きされ、署名演算が終了すると、最終結果として署名されたデータが格納されている。
【００２６】
上述のｍｏｄ計算（Ｓ３１４．Ｓ３１６）の部分は、乗算命令を中心とする複数ステップがループする構造になっている。ｍｏｄＮの演算は、通常ならば割り算となるが、モンゴメリー乗算と呼ばれる計算手順を使って多数の乗算と１回の減算で実行する。モンゴメリー乗算のアルゴリズムについては、モンゴメリー乗算については、非特許文献１（3.8 Montgomery's Method p.46〜p.47）を参照されたい。
【００２７】
（モンゴメリー乗算の手順）
ＡＤＫｍｏｄＮ  をモンゴメリー乗算で求めると、次のような式となる（式中の減算Ｎは引けないときはそのまま）。
【数２】
2005141160.tif 000004
上記の式に現れるＲ，Ｒ＊，Ｎ＊は、いずれもＮが与えられた最初の設定時に同時に導出できる定数である。実用上のＲＳＡ公開鍵システムでは、公開パラメータＮは１０２４ビット長に固定されているので、Ｒ，Ｒ＊，Ｎ＊は下記となる。
・Ｒ＝２１０２４＝１０００００‥‥０００
（Ｒのデータビット長は１０２５ビットになる。）
・Ｒ＊＝Ｒ２ｍｏｄＮ＝２２０４８ｍｏｄＮ
（ｍｏｄＮをとるから、Ｒ＊のデータビット長は１０２４ビット以下である。）
・ＮＮ＊＝γＲ−１を満足するようにＮ＊を計算する。γは任意の整数である。
（Ｎ＊のデータビット長は１０２４かまたはそれ以下となる。）
式の形の上ではＲによる除算が３箇所、ｍｏｄＲが３箇所存在するが、Ｒの値が特殊な形の２１０２４なのでビット操作で済ませられる。
【００２８】
上述の式を求めるための手順は、網掛け部分が同じであるので、以下の通りである。
（０１）  ＡＲ＊を求める。
乗算、結果は  Ｍａｘ．２０４８ビットである。
（０２）  ＡＲ＊Ｎ＊を求めると、２０４８ビットでもオーバーフローするので、ＡＲ＊ｍｏｄＲを先に求める（下位Ｌビットの抽出）。上半分の１０２４ビットを捨てる。
（０３）  （０２）×Ｎ＊を求める。乗算結果は最大２０４８ビットである。
（０４）  （０３）ｍｏｄＲ  を求める（下位Ｌビットの抽出）。上半分の１０２４ビットを捨てる。
（０５）  （０４）×Ｎを求める。乗算結果は最大２０４８ビットである。
（０６）  （０１）＋（０５）  を求める。加算結果は最大２０４９ビットである。
（０７）  （０６）／Ｒを求める（下位Ｌビットの０の除去）。下半分の１０２４ビットを捨てる。
（０８）  （０７）−Ｎを求める。これをＸとする。減算は、正負判定して選択して行う。
（０９）  （０８）×Ｄを求める（ここでＫｃが影響する）。乗算の結果は、１０２４＋１６０＝１１８４ビットである。
（１０）  （０９）Ｎ＊を求めると２０４８ビットでもオーバーフローするので、（０９）ｍｏｄＲを先に求める（下位Ｌビットの抽出）。下半分の１０２４ビットを取り出す。
（１１）  （１０）×Ｎ＊を求める。乗算結果は最大２０４８ビットである。
（１２）  （１１）ｍｏｄＲを求める（下位Ｌビットの抽出）。下半分の１０２４ビットを取り出す。
（１３）  （１２）×Ｎを求める。乗算結果は最大２０４８ビットである。
（１４）  （０９）＋（１３）を求める。加算結果は最大２０４９ビットである。
（１５）  （１４）／Ｒを求める（下位Ｌビットの除去）。下半分の１０２４ビットを捨てる。
（１６）  （１５）−Ｎを求める。減算は、正負判定して選択する。
なお、上述の（０８）および（１６）「正負判定して選択する」としているのは、減算結果が正ならばそのままの値を答えとし、減算結果が負ならば、その値を捨てて、減算する前の値を答えとすることを意味する。
【００２９】
上述の式を、図４−１（ａ），図４−２（ｂ）に示したオペコード表の命令で行う場合を、図６（ａ）に示す。図６（ａ）に表れた記号の意味は図６（ｂ）に示されている。
図６（ａ）で示されているように、上述の手順は、全て、図４−１および図４−２に示されている、セキュリティ・モードであるときに動作する命令で、計算することができる。
【００３０】
＜ＩＣカードへの応用＞
セキュア・プロセッサをＩＣカードに応用した場合について、図７を用いて説明する。
さて、ディジタル署名は、上述したように、対象メッセージから作成したダイジェストデータに対して、個人鍵で暗号化することで生成される。図７（ａ）は現在用いられている認証ＩＣカード３１０を示している。現在用いられている認証用ＩＣカード３１０は、ＩＣカード３１０に個人の鍵データが書き込まれている。メッセージ送り主は、パソコン３２０に付属するカードリーダ（図示せず）へ乗せ、パソコン３２０の表示画面上の署名動作を示すボタン等をクリックして起動する。すると、認証用ＩＣカード３１０から個人の鍵データが読み出され、パソコン３２０内でディジタル署名が生成され、メッセージ本体とペアになってインターネット３３０経由で相手先へ送られる。署名演算がすむとＩＣカードをリーダから取り除くことで署名動作全体が終了する。
この動作において、署名演算をどこで実施するかでセキュリティレベルが違ってくる。図７（ａ）に示す現在の方法では、個人鍵データがパソコンの中に移るわずかな時間の間にも、盗聴されたりコピーされたりする危険が有りうる。
図７（ｂ）に示すセキュア・プロセッサを組み込んだＩＣカード３１５の場合は、署名演算能力を有するので、ＩＣカード３１５に対象メッセージを取り込み、ＩＣカード３１５内で署名演算を実施する。ＩＣカード３１５に取り込むデータは、ダイジェスト・データでもよい。ＩＣカード３１５からパソコン３２０へ送られて出てくるのは、ディジタル署名結果であり、鍵データではない。ＩＣカード内で、署名演算を行っているために、鍵データを外部に読み出す必要はなく、上記の危険性はない。署名結果から鍵を逆算することは天文学的時間を要する。
しかも、セキュア・プロセッサＩＣカード３１５の場合は如何なるプログラム手段を講じても（ウイルス、クラッカーすべてを含め）鍵データそのものをＩＣカードから外部へ取り出すこと、コピーすること、計測すること、その他観察行為すべてが難しく、不可能である。
【図面の簡単な説明】
【００３１】
【図１】セキュア・プロセッサの構成例を示すブロック図である。
【図２】鍵データを読み出す部分のブロック図である。
【図３】セキュア・プロセッサの命令のフォーマット例を示す図である。
【図４−１】セキュア・プロセッサのオペコード表の一部分である。
【図４−２】セキュア・プロセッサのオペコード表の続きと、オぺコードのフィールド記号や動作の表記の説明の表等である。
【図５】署名演算を示すフローチャートである。
【図６】モントゴメリー演算をセキュア・プロセッサの命令で行う場合を示す図である。
【図７】セキュア・プロセッサをＩＣカードに適用した構成例を説明する図である。
【図１】
2005141160.tif 000005
【図２】
2005141160.tif 000006
【図３】
2005141160.tif 000007
【図４−１】
2005141160.tif 000008
【図４−２】
2005141160.tif 000009
【図５】
2005141160.tif 000010
【図６】
2005141160.tif 000011
【図７】
2005141160.tif 000012
【手続補正書】
【提出日】平成16年11月22日(2004.11.22)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項１
【補正方法】変更
【補正の内容】
【請求項１】
鍵データを格納した不揮発性メモリで構成される鍵レジスタと、
該鍵レジスタに格納された鍵データを１ビットずつ参照するために、ビット位置を示す鍵カウンタと、
デジタル署名に用いるダイジェスト・データを格納するダイジェスト・レジスタと、
前記鍵カウンタにより参照された１ビットの鍵データが０のときは前記ダイジェスト・レジスタの内容を１、１のときは前記ダイジェスト・レジスタの内容をそのまま出力するゲートとを備え、
前記鍵レジスタには全データを外部から読み取るパスは設けず、
一般命令とともに、前記鍵レジスタ、前記鍵カウンタ、及び前記ダイジェスト・レジスタを操作して前記ダイジェスト・データからデジタル署名を求めるための複数の署名専用命令を有する
ことを特徴とするセキュア・プロセッサ。
【手続補正２】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項３
【補正方法】変更
【補正の内容】
【請求項３】
請求項２に記載のセキュア・プロセッサにおいて、
前記セキュリティ・モード設定命令は、前記セキュリティ・レジスタをセットすると同時に、前記鍵カウンタを１０２３に初期設定し、
前記署名専用命令は、署名計算を鍵レジスタの１ビット分実行する命令の実行と同時に鍵カウンタをデクリメントして、順次ビットごとの署名計算が進行し、前記鍵カウンタが０のときのみにセキュリティ・モードをリセットすることを特徴とするセキュア・プロセッサ。
【手続補正３】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項４
【補正方法】変更
【補正の内容】
【請求項４】
請求項３に記載のセキュア・プロセッサにおいて、
前記ダイジェスト・レジスタに設定されたダイジェスト・データが１６ビット毎に少なくとも１つの１を有することを検出する手段を備え、
前記セキュリティ設定命令は、１６ビット毎に少なくとも１個は１があることを条件に、前記鍵カウンタを初期設定し、セキュリティ・レジスタがセットされたあとはダイジェスト・レジスタ内のデータは変更できないとすることを特徴とするセキュア・プロセッサ。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】０００２
【補正方法】変更
【補正の内容】
【０００２】
コンピュータ誕生以来約６０年の間、プロセッサの機能・性能の向上は１００万倍のオーダーにも達する。改善の主たる担い手は素子・回路の機能・性能の改善による。その次の副たる担い手は、アーキテクチャの改善である。そのアーキテクチャ面での改善も殆どが性能向上に向けられてきた。最近２０年間程度ではごく一部で、信頼性向上や電力低減のためのアーキテクチャ改善もあった。しかしながら、セキュリティ改善のために行われたアーキテクチャ改善の例はない。
ただし、セキュリティ改善の目的のために公開鍵暗号計算（例えばRSA暗号計算）専用のプロセッサが使用されている例はある。それはＩＢＭ，富士通，松下通信，ＮＴＴデータ等のセキュリティ専用プロセッサである。これは署名演算や暗号計算だけを引き受ける専用の付加プロセッサである。別に汎用の主プロセッサが存在することが前提である。これらは、もともと専用プロセッサ全体が署名演算・暗号計算だけしか受け付けない機能限定プロセッサであるから、鍵データを他目的に使われる危険も容易に避けられる。
なお、ＲＳＡによる暗号計算のアルゴリズムについては、例えば、非特許文献１に示した文献を参考にされたい。
【非特許文献１】Cetin Kaya Koc "High-Speed RSA Implementation Version 2.0" RSA Data Security, Inc. 1994(ftp://ftp.rsasecurity.com/pub/pdfs/tr201.pdf)
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】０００３
【補正方法】変更
【補正の内容】
【０００３】
本発明の目的は、汎用機能を持ち、なおかつ、セキュリティ機能（すなわち鍵データの安全保管とデジタル署名計算の高速化）も持つプロセッサの提供である。
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】０００４
【補正方法】変更
【補正の内容】
【０００４】
上述の目的を達成するために、本発明は、鍵データを格納した不揮発性メモリで構成される鍵レジスタと、該鍵レジスタに格納された鍵データを１ビットずつ参照するために、ビット位置を示す鍵カウンタと、デジタル署名に用いるダイジェスト・データを格納するダイジェスト・レジスタと、前記鍵カウンタにより参照された１ビットの鍵データが０のときは前記ダイジェスト・レジスタの内容を１、１のときは前記ダイジェスト・レジスタの内容をそのまま出力するゲートとを備え、前記鍵レジスタには全データを外部から読み取るパスは設けず、一般命令とともに、前記鍵レジスタ、前記鍵カウンタ、及び前記ダイジェスト・レジスタを操作して前記ダイジェスト・データからデジタル署名を求めるための複数の署名専用命令を有することを特徴とするセキュア・プロセッサである。
これにより、汎用機能を持ち、不揮発性メモリの鍵レジスタに格納した鍵データを直接的には読めないため、セキュリティ機能も持つプロセッサを提供することができる。
このプロセッサの走行モードとして、一般モードとセキュリティ・モードを有し、前記セキュリティ・モードを表示するセキュリティ・レジスタを備えるとともに、前記セキュリティ・モードをセットする一般命令及びリセットする署名専用命令を有し、前記一般命令は一般モードのときに有効となり、前記署名専用命令はセキュリティ・モードのときに有効となるとすることもできる。
【手続補正７】
【補正対象書類名】明細書
【補正対象項目名】０００５
【補正方法】変更
【補正の内容】
【０００５】
前記セキュリティ・モード設定命令は、前記セキュリティ・レジスタをセットすると同時に、前記鍵カウンタを１０２３に初期設定し、前記署名専用命令は、署名計算を鍵レジスタの１ビット分実行する命令の実行と同時に鍵カウンタをデクリメントして、順次ビットごとの署名計算が進行し、前記鍵カウンタが０のときのみにセキュリティ・モードをリセットする構成とし、一旦、デジタル署名の演算過程に入ると、終了するまで（鍵カウンタが０となるまで）、演算過程から抜けられず、演算過程の中間結果からプログラムにより鍵データを推定することを不可能としている。
前記ダイジェスト・レジスタに設定されたダイジェスト・データが１６ビット毎に少なくとも１つの１を有することを検出する手段を備え、前記セキュリティ設定命令は、１６ビット毎に少なくとも１個は１があることを条件に、前記鍵カウンタを初期設定し、ＳＦ０＝１となったあとはダイジェスト・レジスタ内のデータは変更できないとして、鍵データを間接的にも読み出すことができないようにしてもよい。
セキュア・プロセッサには、主メモリに接続しており、前記署名専用命令は、前記デジタル署名を求める演算の演算結果を、前記主メモリの特定の領域のみに格納して、デジタル署名演算の最終結果を前の演算結果に上書きする構成として、中間結果を主メモリに残すことを不可能としてもよい。
上述のセキュア・プロセッサを組み込んだＩＣカードでは、署名演算をＩＣカード内で実行でき、鍵データをＩＣカード外部に取り出す必要がなく、署名演算を安全に実行することができる。また、鍵データをＩＣカードからプログラムにより外部に取り出すことは不可能である。
【手続補正８】
【補正対象書類名】明細書
【補正対象項目名】０００６
【補正方法】変更
【補正の内容】
【０００６】
本発明のセキュア・プロセッサは、汎用性とセキュリティ機能の二律背反性を新しいアーキテクチャを考案することによって解決している。
上述のセキュア・プロセッサが用いられている個人認証用のＩＣカードの主たる機能は署名演算である。本発明のセキュア・プロセッサを用いることにより、セキュリティ機能で署名演算を行うばかりでなく、キャッシュカード機能、クレジットカード機能、改竄防止機能、通行料金支払い機能、チケット予約機能、等々の応用に対して、異なる汎用の応用プログラムをプロセッサの上で走行することにより、対応することができる。
【手続補正９】
【補正対象書類名】明細書
【補正対象項目名】０００７
【補正方法】変更
【補正の内容】
【０００７】
個人認証において、セキュリティ機能を突き詰めていくと、個人鍵データを署名演算にのみ使えるようにし、他のあらゆる操作を拒否するようにすることに行き着く。これを実現するために、本発明のセキュア・プロセッサは大きく分類して２つの構成を有している。
Ａ：個人鍵データが署名演算等において使われるときは、上位から順番に１ビットずつ参照される動作のみで、他の動作はない。このことに着目して、個人鍵を主メモリや汎用レジスタではなく、独自の不揮発性専用レジスタに格納する。そして、その専用レジスタには、全データを外部から読み取るパスはなくし、上位から順に１ビットずつ参照する演算のためのパスのみを作る。
Ｂ：セキュア・プロセッサにおいて、従来のプロセッサには存在しなかったセキュリティ・モードと称するモードを導入する。これはプログラム走行の環境を制約する条件でもある。セキュリティ・モードにおいては通常の命令語は命令として解読されない。署名演算でのみ使用される特殊な命令語のみが命令として機能する。
これらの手法によって、本発明のセキュア・プロセッサは、如何なるプログラムによっても個人鍵データを外部へ漏洩せしめることは不可能となる。
以下に、図面を用いて、上述のＡ，Ｂの両機能を備えたセキュア・プロセッサの構成例を詳しく説明する。
【手続補正１０】
【補正対象書類名】明細書
【補正対象項目名】０００９
【補正方法】変更
【補正の内容】
【０００９】
＜セキュア・プロセッサの内部構成＞
図１に示したプロセッサ１００は、署名演算のために、なるべく長い語長（６４ビット）を有し、１６倍長語までの計算が１個の命令でできる。また、主メモリ２００とのアドレス単位も語単位（６４ビット単位）である。主メモリの容量は、６４ビット×６４Ｋ語（５１２ＫＢ＝４Ｍbits）である。これらについては、後で詳しく説明する。
なお、以下に説明するセキュア・プロセッサの語単位として、６４ビットを用いた構成としているが、これは、鍵データとの署名演算から、なるべく長い語長を選択したためであり、演算速度等やハードウェア量との関係から、決定すればよい事項である。
【手続補正１１】
【補正対象書類名】明細書
【補正対象項目名】００１１
【補正方法】変更
【補正の内容】
【００１１】
倍長演算命令では、図３のＬフィールドに指定された語長分、Ｆ−オペランド・カウンタ１４６やＴ−オペランド・カウンタ１４７は、インクリメント（１ずつ増加）されて、オペランドが主メモリ２００から次々に読み出されるか書き込まれることで、１６倍長語までの処理が１個の命令でできる。
汎用演算器（ＡＬＵ：Arithmetic and Logic Unit）１６４は、一般的な演算（加算，減算，論理演算等）を行う演算器であり、乗算器（ＭＰＹ：MultiPlY unit）１６２は、６４ビット×６４ビットの掛け算を行う演算器である。
ＰＦレジスタ（Program Status Flag）１４８は、命令の実行によりセットされる４ビットのフラグであり、図４−１（ａ），図４−２（ｂ）に示されているオペコード表のＰＳＷの項に示されているものがセットされる。オペコード表のＰＳＷ（Program Status Word）のＮ，Ｚ，Ｖ，Ｃは、それぞれ、負（Negative），ゼロ（Zero），オーバーフロー（oVerflow），キャリ（Carry）を示している。
演算用レジスタ（Ｒ０〜ＲＦ）１１０は、一般用の演算命令等で用いられる汎用のレジスタである。この汎用レジスタを用いる演算命令は、図３（ａ）のＭＦ又はＭＴに図３（ｂ）のレジスタ直接を指定して、Ｆ又はＴオペランドのフィールドにレジスタ番号を指定する。バッファ・レジスタ（Ｂ０，Ｂ１）１４１，１４２は、演算途中の結果等を格納しておくレジスタである。
上述の命令の動作や各レジスタの機能は、詳しくは、図３に示した命令のフォーマットと図４−１，図４−２のオペコード表（命令コード表）等を参照されたい。図４−１（ａ）及び図４−２（ｂ）はオペコード表であり、図４−２（ｃ）は、オペコード表のフィールドごとに使用されている記号の説明であり、図４−２（ｄ）は、オペコード表の動作の項の表記の説明であり、図４−２（ｅ）は、図４−２（ｃ），（ｄ）の＊で示していることの補足説明である。
オペコード表のＯＰ，ＳＯＰ，ＭＦ，ＭＴ，Ｌ，Ｆ，Ｔ，Ｓの各項は、図３（ａ）（ｂ）の命令フォーマットの説明と図４−２（ｃ）の記号の説明を参照されたい。また、ニモニックは、命令の略号であり、今後、各命令を参照するときは、このニモニックを使用している。各命令の動作は、動作の項に記載されている。属性は、命令の分類で、例えば、ＳＦＴはシフト命令、ＡＤＤは加算命令、ＳＵＢは減算命令、ＢＩＴはビット処理命令、ＭＯＶは移動命令、ＪＭＰはジャンプ命令、ＬＩＮＫはサブルーティンコール命令、ＢＲはＰＳＷによるブランチ命令を示している。なお、ＳＶＣ命令は、スーパバイザ・コール命令で、図１に示していないＩＴフラグをセットしている。ＲＩＴはスーパバイザ・コール命令のリターン命令で、ＩＴフラグをリセットしている。
なお、上述のオペコード表の中に、以下で説明する署名演算用の命令も含まれている。これらの命令については、後で説明する。
【手続補正１２】
【補正対象書類名】明細書
【補正対象項目名】００１２
【補正方法】変更
【補正の内容】
【００１２】
以上説明した構成は、通常の汎用マイクロプロセッサの構成と同様のものである。これらは、このセキュア・プロセッサが応用される分野に応じて、変更することができる。例えば、６４ビット／語の構成を生かすために、以下の署名演算で用意されているｍｏｄ演算に有効な命令を、暗号計算用に一般用の命令として用意してもよい。
【手続補正１３】
【補正対象書類名】明細書
【補正対象項目名】００１４
【補正方法】変更
【補正の内容】
【００１４】
（鍵データ漏洩防止）
さて、セキュリティ機能のひとつの目的は、鍵データＫ漏洩の防止である。図１において、鍵データは、不揮発性メモリ（例えばＲＯＭ）で構成された鍵レジスタ（Ｋ０〜ＫＦ：Key register）１３０に格納されている。鍵レジスタ１３０には、各ユーザの例えばＲＳＡの秘密鍵データ（１０２４ビット）が書き込まれている。この不揮発性メモリへの鍵の書き込みは、例えば外部から専用のライタにより書き込むことで行っても良い。
ＲＳＡ公開鍵方式でのデジタル署名演算の方式では、鍵Ｋの値は１ビットずつ上位ビットから参照して、別の乗算へ反映させる必要があり、これが唯一の使用方法である。従って、この目的のために、図２のような、鍵レジスタ１３０から１ビットずつ選択して参照する鍵参照回路を設けている。なお、これらの回路を用いたデジタル署名演算のアルゴリズムについては、後で詳しく説明する。
【手続補正１４】
【補正対象書類名】明細書
【補正対象項目名】００１５
【補正方法】変更
【補正の内容】
【００１５】
図２の鍵参照回路において、鍵ビット参照カウンタ（ＫＣ：Key-bit reference Counter）１５２は１０２３から０まで、順次デクリメントする。この鍵ビット参照カウンタ１５２の内容により、ビット指定ゲート１５４から、鍵レジスタ１３０に格納されているＫデータが順次１ビットずつ指定されて参照される。図２からも分かるように、鍵Ｋを格納する鍵レジスタ１３０から他へデータを転送する語データ並列伝送経路を設けていない。図１に示すように、ビット指定ゲート１５４からの参照出力は、ダイジェスト・レジスタ１２０の出力選択ゲート１５６にのみ使用される。このように、図１，図２に示されているハードウェア構造からして、鍵データを生の形で直接外部へ出すことは不可能である。
【手続補正１５】
【補正対象書類名】明細書
【補正対象項目名】００１６
【補正方法】変更
【補正の内容】
【００１６】
図１のダイジェスト・レジスタ（Ｄ０〜Ｄ２：Digest register）１２０は、６４ビット×３のレジスタであり、デジタル署名の処理のために、デジタル署名を付加するための本文から抽出されたダイジェスト・データ（特徴データ）を格納するためのレジスタである。
デジタル署名の処理を行う前に、本文の３語長分のダイジェストを作成し、主メモリ２００に格納しておく。ダイジェストは、本文のビット構成如何にかかわらず１６０ビット程度まで圧縮攪拌され（たとえばハッシュ関数SHA-1によって）ランダムなビット構成となっている。しかしながら、このダイジェスト・データを故意に２のような単純な値に設定することもできる。すると、署名計算結果から鍵Ｋの値を逆算される危険が発生する。これを防止するためにダイジェスト・レジスタの内容が「２ｎ」（ｎ＝１，２，…）のような単純な値ではないことを検知する必要がある。セキュア・プロセッサでは、単純な値ではないことを「有効パターン」と呼んで署名計算開始の条件としている。
図４−１のオペコード表で、ＤＭＶと表記されている命令により、Ｆフィールドで指定されている主メモリ２００のアドレスに格納されている３語長分のダイジェストをダイジェスト・レジスタ（Ｄレジスタ）１２０に格納する。
Ｄレジスタ１２０には、ビットパターン検知ゲート（図示せず）が付属している。ビットパターン検知ゲートは、Ｄレジスタ１２０の全１６０ビットを１６ビットずつ１０ブロックに区分し、すべてのブロックが少なくとも１個の”１”を持つかを検知している。これにより、格納したデータが「有効パターン」であるかを検出している。
上述した鍵参照回路で読み出された１ビットの鍵データは、Ｄレジスタ１２０から読み出したダイジェスト・データＤに対して、Ｄ判定ゲート１５６により反映している。これについては、後述する署名演算で説明する。
【手続補正１６】
【補正対象書類名】明細書
【補正対象項目名】００１７
【補正方法】変更
【補正の内容】
【００１７】
（セキュリティ・モード）
さて、上述した鍵レジスタ１３０や鍵参照回路のハードウェア構造からして鍵データＫを生の形で外部へ出すことは不可能なことは自明である。残る問題は上記の計算の中で間接的に使用される鍵データのビット毎の値を計測され、集められるかどうかである。観測対象が複雑な署名処理の最終結果（全１０２４ビット）ならば、それはデジタル署名データであるから鍵データの推測は実用上不可能であることは知られている。そこで各個別の１ビット毎にモンゴメリー乗算結果からＫの値（０または１）を推測されないようにするための他の防護策を次に説明する。
【手続補正１７】
【補正対象書類名】明細書
【補正対象項目名】００２２
【補正方法】変更
【補正の内容】
【００２２】
（署名演算）
ＲＳＡ公開鍵システムにおけるデジタル署名は、ＤＫｍｏｄＮ  （Ｄ：ダイジェスト・データ，Ｋ：鍵，Ｎ：特定の整数）を計算することである。
ＤＫｍｏｄＮを一個の巨大な特殊命令で扱うことは、セキュリティ上は望ましいものの、ハードウェア資源上得策でないので、通常の命令と同程度の大きさの特殊命令を複数個用意して実行する。すると、それらの特殊命令の使い方を変えて、鍵Ｋを外部へ漏洩する悪意のプログラムを構成できる可能性も発生する。これを防護するのが上述したセキュリティ機能である。このセキュリティ機能を利用する、ＤＫｍｏｄＮの計算をおこなう手順を、図５のフローチャートを用いて説明する。図５のフローチャートは、バイナリ法（Binary Method）のアルゴリズムで処理する場合であり、詳しくは、例えば上記の非特許文献１（2.3 The Binary Method (p.10〜p.11)）を参照されたい。なお、手順中のＡはメモリ００００〜０００Ｆ番地の内容である。
【手続補正１８】
【補正対象書類名】明細書
【補正対象項目名】００２３
【補正方法】変更
【補正の内容】
【００２３】
図５のフローチャートにおいて、初期設定（Ｓ３１２）に必要な、１→ＳＦ０，１→Ａ，１０２３→ＫＣの３つの初期動作を１個の命令（ＳＩＧ命令）で行っている。そして、署名演算のサブルーティンに入る。
ただし、ＳＦをセットするためには、ダイジェスト・レジスタ１２０の内容が有効パターンであることが条件となる。有効パターンとは、１６０ビットあるダイジェスト・レジスタ内のデータが十分に撹拌され、圧縮されたデータであることを言う。１６ビット×１０の１６ビット毎に少なくとも１個は１があることをハードウェア的に検知する。ＳＦ０＝１となったあとはダイジェスト・レジスタ１２０内のデータ変更はできない。
【手続補正１９】
【補正対象書類名】明細書
【補正対象項目名】００２４
【補正方法】変更
【補正の内容】
【００２４】
さて、初期化のあと、Ａ２ｍｏｄＮを計算する（Ｓ３１４）。最初は、Ａ＝１である。
つぎに、Ａ×ＤｍｏｄＮを計算する（Ｓ３１６）。Ｄは、以下のようにＫｃ（鍵Ｋ中の、鍵カウンタ（ＫＣ）１５２で指示された位置のビット）の値によって２通りの値をとる。
【数１】
2005141160.tif 000013
Ｄは、ダイジェスト・レジスタＤ１２０から読み出されたダイジェスト・データＤと、鍵レジスタ１３０から鍵カウンタ（ＫＣ）１５２により読み出されたＫｃとから、ハードウェア・ゲート１５６で作られる。図４−２（ｂ）のオペコード表では、ＭＤＫ命令であり、鍵カウンタのデクリメントと上述のＤを得ることを同時に行う命令である。
問題の鍵Ｋは、直接には表面に現れないが、間接的にＡ×ＤＫｍｏｄＮ→ＡのＤに影響を与える。外部に絶対に漏洩させてはならないＫが、間接的に関与する部分はＡ×ＤＫｍｏｄＮの計算部分である。
【手続補正２０】
【補正対象書類名】明細書
【補正対象項目名】００２５
【補正方法】変更
【補正の内容】
【００２５】
これを鍵Ｋの長さ分、即ち、鍵カウンタＫＣ１５２が零となるまで（Ｓ３１８でＹＥＳ）、鍵カウンタＫＣ１５２をデクリメントして（Ｓ３２０）、２つのｍｏｄ計算（Ｓ３１４．Ｓ３１６）を行う。鍵カウンタＫＣ１５２が零となると、ＳＦ０を零にリセットして、この署名演算のサブルーティンから抜けることができる（ＳＩＥ命令）。
特定の領域に格納される計算途中の演算結果は、次々に上書きされ、署名演算が終了すると、最終結果として署名されたデータが格納されている。
【手続補正２１】
【補正対象書類名】明細書
【補正対象項目名】００２６
【補正方法】変更
【補正の内容】
【００２６】
上述のｍｏｄ計算（Ｓ３１４．Ｓ３１６）の部分は、乗算命令を中心とする複数ステップがループする構造になっている。ｍｏｄＮの演算は、通常ならば割り算となるが、モンゴメリー乗算と呼ばれる計算手順を使って多数の乗算と１回の減算で実行する。モンゴメリー乗算のアルゴリズムについては、非特許文献１（3.8 Montgomery's Method p.46〜p.47）を参照されたい。
【手続補正２２】
【補正対象書類名】明細書
【補正対象項目名】００２８
【補正方法】変更
【補正の内容】
【００２８】
上述の式を求めるための手順は、網掛け部分が同じであるので、以下の通りである。
（０１）  ＡＲ＊を求める。
乗算、結果は  Ｍａｘ．２０４８ビットである。
（０２）  ＡＲ＊Ｎ＊を求めると、２０４８ビットでもオーバーフローするので、ＡＲ＊ｍｏｄＲを先に求める（下位Ｌビットの抽出）。上半分の１０２４ビットを捨てる。
（０３）  （０２）×Ｎ＊を求める。乗算結果は最大２０４８ビットである。
（０４）  （０３）ｍｏｄＲ  を求める（下位Ｌビットの抽出）。上半分の１０２４ビットを捨てる。
（０５）  （０４）×Ｎを求める。乗算結果は最大２０４８ビットである。
（０６）  （０１）＋（０５）  を求める。加算結果は最大２０４９ビットである。
（０７）  （０６）／Ｒを求める（下位Ｌビットの０の除去）。下半分の１０２４ビットを捨てる。
（０８）  （０７）−Ｎを求める。これをＸとする。減算は、正負判定して選択して行う。
（０９）  （０８）×Ｄを求める（ここでＫｃが影響する）。乗算の結果は、１０２４＋１６０＝１１８４ビットである。
（１０）  （０９）Ｎ＊を求めると２０４８ビットでもオーバーフローするので、（０９）ｍｏｄＲを先に求める（下位Ｌビットの抽出）。下半分の１０２４ビットを取り出す。
（１１）  （１０）×Ｎ＊を求める。乗算結果は最大２０４８ビットである。
（１２）  （１１）ｍｏｄＲを求める（下位Ｌビットの抽出）。下半分の１０２４ビットを取り出す。
（１３）  （１２）×Ｎを求める。乗算結果は最大２０４８ビットである。
（１４）  （０９）＋（１３）を求める。加算結果は最大２０４９ビットである。
（１５）  （１４）／Ｒを求める（下位Ｌビットの除去）。下半分の１０２４ビットを捨てる。
（１６）  （１５）−Ｎを求める。減算は、正負判定して選択する。
なお、上述の（０８）および（１６）「正負判定して選択する」としているのは、減算結果が正ならばそのままの値を答えとし、減算結果が負ならば、その値を捨てて、減算する前の値を答えとすることを意味する。
【手続補正２３】
【補正対象書類名】明細書
【補正対象項目名】００２９
【補正方法】変更
【補正の内容】
【００２９】
上述の式を、図４−１（ａ），図４−２（ｂ）に示したオペコード表の命令で行う場合を、図６（ａ）に示す。図６（ａ）に表された記号の意味は図６（ｂ）に示されている。
図６（ａ）で示されているように、上述の手順は、全て、図４−１および図４−２に示されている、セキュリティ・モードであるときに動作する命令で、計算することができる。
【手続補正２４】
【補正対象書類名】明細書
【補正対象項目名】００３０
【補正方法】変更
【補正の内容】
【００３０】
＜ＩＣカードへの応用＞
セキュア・プロセッサをＩＣカードに応用した場合について、図７を用いて説明する。
さて、デジタル署名は、上述したように、対象メッセージから作成したダイジェスト・データに対して、個人鍵で暗号化することで生成される。図７（ａ）は現在用いられている認証ＩＣカード３１０を示している。現在用いられている認証用ＩＣカード３１０は、ＩＣカード３１０に個人の鍵データが書き込まれている。メッセージ送り主は、パソコン３２０に付属するカードリーダ（図示せず）へ乗せ、パソコン３２０の表示画面上の署名動作を示すボタン等をクリックして起動する。すると、認証用ＩＣカード３１０から個人の鍵データが読み出され、パソコン３２０内でデジタル署名が生成され、メッセージ本体とペアになってインターネット３３０経由で相手先へ送られる。署名演算がすむとＩＣカードをリーダから取り除くことで署名動作全体が終了する。
この動作において、署名演算をどこで実施するかでセキュリティレベルが違ってくる。図７（ａ）に示す現在の方法では、個人鍵データがパソコンの中に移るわずかな時間の間にも、盗聴されたりコピーされたりする危険が有りうる。
図７（ｂ）に示すセキュア・プロセッサを組み込んだＩＣカード３１５の場合は、署名演算能力を有するので、ＩＣカード３１５に対象メッセージを取り込み、ＩＣカード３１５内で署名演算を実施する。ＩＣカード３１５に取り込むデータは、ダイジェスト・データでもよい。ＩＣカード３１５からパソコン３２０へ送られて出てくるのは、デジタル署名結果であり、鍵データではない。ＩＣカード内で、署名演算を行っているために、鍵データを外部に読み出す必要はなく、上記の危険性はない。署名結果から鍵を逆算することは天文学的時間を要する。
しかも、セキュア・プロセッサＩＣカード３１５の場合は如何なるプログラム手段を講じても（ウイルス、クラッカーすべてを含め）鍵データそのものをＩＣカードから外部へ取り出すこと、コピーすること、計測すること、その他観察行為すべてが難しく、不可能である。
【手続補正２５】
【補正対象書類名】明細書
【補正対象項目名】００３１
【補正方法】変更
【補正の内容】
【００３１】
【図１】セキュア・プロセッサの構成例を示すブロック図である。
【図２】鍵データを読み出す部分のブロック図である。
【図３】セキュア・プロセッサの命令のフォーマット例を示す図である。
【図４−１】セキュア・プロセッサのオペコード表の一部分である。
【図４−２】セキュア・プロセッサのオペコード表の続きと、オペコードのフィールド記号や動作の表記の説明の表等である。
【図５】署名演算を示すフローチャートである。
【図６】モントゴメリー演算をセキュア・プロセッサの命令で行う場合を示す図である。
【図７】セキュア・プロセッサをＩＣカードに適用した構成例を説明する図である。