(57)【要約】【課題】バイアスアタックとＤＰＡ（Differential Power Analysis）手法を組み合わせた解析に対してスループットが著しく低下させることなく耐タンパ性を維持する暗号処理装置が求められていた。【解決手段】本発明の暗号処理装置は、秘密鍵を記憶する秘密鍵記憶手段と、秘密鍵と同一のハミングウエイトを有する複数のダミー鍵を生成するダミー鍵生成手段と、秘密鍵と複数のダミー鍵とを用いて暗号処理を行う暗号処理手段と、を具備する。当該構成により、鍵の値を処理する際の消費電流などに代表されるサイドチャネルリークは類似した波形となって、正規演算とダミー演算の判別が困難となり、サイドチャネル解析を困難化して耐タンパ性を維持している。【選択図】図１
2013126078.tif 000002
【特許請求の範囲】
【請求項１】
秘密鍵を記憶する秘密鍵記憶部と、
前記秘密鍵と同一のハミングウエイトを有する複数のダミー鍵を生成するダミー鍵生成部と、
前記秘密鍵と前記複数のダミー鍵とを用いて暗号処理を行う暗号処理部と、
を具備する暗号処理装置。
【請求項２】
前記ダミー鍵生成部は、
前記秘密鍵記憶部から読み出した秘密鍵を構成するデータの順序を入れ替えることで前記秘密鍵と同一のハミングウエイトを有する複数のダミー鍵を生成する暗号鍵生成部と、
前記秘密鍵と前記複数のダミー鍵とを記憶する暗号鍵記憶部と、
前記暗号鍵記憶部から前記秘密鍵と前記複数のダミー鍵とを所定の順番で選択する暗号鍵選択部と、
を備え、
前記暗号処理部は、前記暗号鍵選択部で前記所定の順番で選択される前記秘密鍵と前記複数のダミー鍵とを用いて暗号処理を行う、
請求項１に記載の暗号処理装置。
【請求項３】
前記ダミー鍵生成部は、
前記秘密鍵にマスクをかけてマスク済み秘密鍵を取得するマスク処理部と、
前記マスク済み秘密鍵と同一のハミングウエイトを有する複数のマスク済みダミー鍵を生成するマスク済みダミー鍵生成部と、
前記マスク済み秘密鍵と前記複数のマスク済みダミー鍵とを記憶する暗号鍵記憶部と、
前記マスク済み秘密鍵と前記複数のマスク済みダミー鍵とのマスクを解除して秘密鍵と複数のダミー鍵とを取得するマスク解除部と、
を備え、
前記暗号処理部は、マスク解除後の前記秘密鍵と前記複数のダミー鍵とを用いて暗号処理を行う、
請求項１に記載の暗号処理装置。
【請求項４】
第１の乱数を発生させる乱数発生部を更に具備し、
前記マスク処理部は、前記秘密鍵と前記第１の乱数との排他的論理和をとることで前記マスク済み秘密鍵を取得し、
前記マスク解除部は、前記マスク済み秘密鍵と前記第１の乱数との排他的論理和をとることで前記秘密鍵を取得し、前記複数のマスク済みダミー鍵と前記第１の乱数との排他的論理和を取ることで前記複数のダミー鍵を取得する、
請求項３に記載の暗号処理装置。
【請求項５】
前記乱数発生部は、第２の乱数を発生させ、
前記ダミー鍵生成部は、前記マスク済み秘密鍵を暗号鍵記憶部の前記第２の乱数が示す位置に格納するマスク済み秘密鍵格納部を更に備える、
請求項３又は４に記載の暗号処理装置。
【請求項６】
前記乱数発生部は、第３の乱数を発生させ、
前記ダミー鍵生成部は、前記暗号鍵記憶部の前記第３の乱数が示す位置から前記マスク済み秘密鍵と前記複数のマスク済みダミー鍵とを所定の順番で選択する暗号鍵選択部を更に備える、
請求項５に記載の暗号処理装置。
【請求項７】
前記暗号処理部における暗号処理結果を記憶する暗号処理結果記憶部と、
前記暗号処理部における前記暗号処理結果を前記暗号処理結果記憶部の前記第３の乱数が示す位置から前記所定の順番で格納する暗号処理結果格納部と、
を更に具備する、請求項６に記載の暗号処理装置。
【請求項８】
前記暗号処理結果記憶部に記憶されている複数の暗号処理結果の中から前記第２の乱数が示す位置に記憶されている前記暗号処理結果を正解結果として抽出する抽出部を更に具備する、
請求項７に記載の暗号処理装置。
【請求項９】
前記暗号処理部に入力される前記秘密鍵又は前記複数のダミー鍵のビットを反転させる第１反転部と、
前記暗号処理部に入力される暗号処理対象データのビットを反転させる第２反転部と、
を更に具備する、請求項３乃至８のいずれか１項に記載の暗号処理装置。
【請求項１０】
前記乱数発生部は、第４の乱数を発生させ、
前記第１反転部及び前記第２反転部は、前記第４の乱数に基づいてビットを反転させるかどうかを決定する、
請求項９に記載の暗号処理装置。
【請求項１１】
前記マスク済みダミー鍵生成部は、前記マスク済み秘密鍵を構成するデータの順序を入れ替えることで前記マスク済み秘密鍵と同一のハミングウエイトを有する前記マスク済みダミー鍵を生成することを特徴とする、
請求項３乃至１０のいずれか１項に記載の暗号処理装置。
【請求項１２】
前記マスク済みダミー鍵生成部は、前記マスク済み秘密鍵のバイト順序をFisher-Yatesシャッフルアルゴリズムに従って、入れ替えることで前記マスク済みダミー鍵を生成することを特徴とする、
請求項１１に記載の暗号処理装置。
【請求項１３】
前記マスク済みダミー鍵生成部は、前記マスク済み秘密鍵のバイト順序を前記Fisher-Yatesシャッフルアルゴリズムに従って入れ替えた後に所定のマスクをかけることで前記マスク済みダミー鍵を生成することを特徴とする、
請求項１２に記載の暗号処理装置。
【請求項１４】
前記請求項１乃至１３のいずれか１項に記載の暗号処理装置を内部に搭載したＩＣカード。
【請求項１５】
前記請求項１乃至１３のいずれか１項に記載の暗号処理装置を内部に搭載した移動体通信装置。
【請求項１６】
秘密鍵が記憶された不揮発性メモリから前記秘密鍵を読み出し、
前記読み出した秘密鍵と同一のハミングウエイトを有する複数のダミー鍵を生成し、
前記秘密鍵と前記複数のダミー鍵とを用いて暗号処理を行う、
暗号処理方法。
【請求項１７】
秘密鍵が記憶された不揮発性メモリにアクセスして前記秘密鍵を読み出す読出工程と、
前記読み出した秘密鍵と同一のハミングウエイトを有する複数のダミー鍵を生成する生成工程と、
前記秘密鍵と前記複数のダミー鍵とを用いて暗号コプロセッサに暗号処理を行わせる制御信号を出力する制御信号出力工程と、
を情報処理装置に実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は暗号処理技術に関し、特に秘密鍵の秘匿性を向上させた暗号処理技術に関する。
【背景技術】
【０００２】
現在広く使用されている暗号方式は、暗号学的解析手法に対しては計算量的に安全であるとされている。しかし、実際の暗号アルゴリズムを実装する場合、消費電流や処理時間といった、実装に依存したリークが発生する。
【０００３】
非特許文献１には、このようなリーク情報を用いて統計的に秘密鍵を推定する差分電力解析（ＤＰＡ：Differential Power Analysis）手法が開示されている。この手法を用いると、通常は解析に数十年かかる暗号が、オシロスコープや市販のＰＣを用いて短い期間で解析できるようになる。このような解析手法は、既知の入力もしくは出力値に対応する消費電流、電磁放射、実行時間などを多数回測定し、統計的解析を行うことで、秘密鍵情報を推定する。
【０００４】
上記解析手法では、リークのうちの秘密情報に依存する成分と、秘密情報に依存しないノイズとみなせる成分の比率により、アタックに必要な測定回数が変動する。秘密情報に依存する成分の比率が１／ｎになると、必要な測定回数は、ｎ＾２倍必要となる。
【０００５】
秘密情報に依存する成分の比率を下げる方法の一つとして、例えば特許文献１のように、入力パラメータを変えて同じ演算を行うことで撹乱するダミー演算を混ぜる方式がある。特許文献１では、本物の鍵を使用した処理と、ダミー鍵を使用した処理をランダムな順番で実行することで、サイドチャネルリークと秘密鍵との間の相関を小さくすることを試みている。
【０００６】
また、特許文献２には、２つのラウンド演算部で正規演算とダミー演算を並列して行う構成とすることで演算のスループットを向上させる暗号化技術が開示されている。
【０００７】
また、特許文献３には、暗号化装置内のハミングウエイトを一定にして暗号処理時の消費電力を一定にすることで差分電力解析に対する耐性を持たせつつ、ダミー演算を混ぜることで暗号演算タイミングを特定しにくくする暗号化技術が開示されている。
【０００８】
また、特許文献４には、複数のダミーマスクでマスキングされた暗号鍵でダミー演算実効する際に注入されたエントロピーを制御する技術が開示されている。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００７−６７９４２号公報
【特許文献２】特開２００７−１９５１３２号公報
【特許文献３】特開２００６−２５３６６号公報
【特許文献４】特表２００９−５１６９６４号公報
【非特許文献】
【００１０】
【非特許文献１】Paul Kocher, Joshua Jaffe, and Benjamin Jun, "Introduction to Differential Power Analysis and Related Attacks", 1998
【発明の概要】
【発明が解決しようとする課題】
【００１１】
ダミー演算による対策手法は、ダミーの演算が本当の演算と区別可能であった場合、ダミー演算の対策効果が減少する。例えば、演算処理中の消費電力の違いを検出することでハミングウエイトの違いを特定し、処理中の暗号演算がダミー演算であるか本当の演算であるかを判別することができる場合がある。この場合、ダミー演算の測定結果を解析データから取り除いたり、真の演算処理の波形のみを選択的に取り出したりすることが可能となるため、秘密情報に依存する成分とノイズ成分の比率を変えることができる。こうした前処理は、バイアスアタックと呼ばれる。
【００１２】
上記特許文献１〜３の暗号化技術では、このようなバイアスアタックに対する耐性が弱く、バイアスアタックとＤＰＡ（Differential Power Analysis）手法を組み合わせて解析された場合に耐タンパ性を維持することが困難であった。
【００１３】
ここで、上記特許文献４の暗号化技術は、正規演算とダミー演算とを含めてすべてのリークパターンが現れるようにすることで、リークを平均化した際の平均値が一定となるように構成し、バイアスアタックに対する耐性を持たせている。しかしながら、当該特許文献４の暗号化技術では、処理される際のビット長で定義される全ビットパターンをマスクパターンとして生成した上で処理する必要がある。この方法では短いビットパターンで表現可能な値の種類だけ演算処理を行う必要が生じる。広く用いられているＤＥＳ暗号での場合は、１ブロックが６ビットであるため２＾６＝６４通りの演算処理を行う必要があるがそのうちの１つの処理だけが真の演算処理である。すなわち、このような構成でダミー演算を混ぜて行う場合、処理時間が常に６４倍と膨れ上がり、スループットが著しく低下するという課題が存在していた。
【課題を解決するための手段】
【００１４】
本発明の暗号処理装置は、秘密鍵を記憶する秘密鍵記憶手段と、前記秘密鍵と同一のハミングウエイトを有する複数のダミー鍵を生成するダミー鍵生成手段と、前記秘密鍵と前記複数のダミー鍵とを用いて暗号処理を行う暗号処理手段と、を具備する。当該構成により、正規演算とダミー演算との間でサイドチャネルリークが類似した波形を示すように暗号処理を行うことができる。
【００１５】
また、本発明の暗号処理方法は、秘密鍵が記憶された不揮発性メモリから前記秘密鍵を読み出し、前記読み出した秘密鍵と同一のハミングウエイトを有する複数のダミー鍵を生成し、前記秘密鍵と前記複数のダミー鍵とを用いて暗号処理を行う。当該構成により、正規演算とダミー演算との間でサイドチャネルリークが類似した波形を示すように暗号処理を行うことができる。
【００１６】
また、本発明のプログラムは、秘密鍵が記憶された不揮発性メモリにアクセスして前記秘密鍵を読み出す読出工程と、前記読み出した秘密鍵と同一のハミングウエイトを有する複数のダミー鍵を生成する生成工程と、前記秘密鍵と前記複数のダミー鍵とを用いて暗号コプロセッサに暗号処理を行わせる制御信号を出力する制御信号出力工程と、を情報処理装置に実行させる。当該構成により、正規演算とダミー演算との間でサイドチャネルリークが類似した波形を示すように暗号処理を行うことができる。
【発明の効果】
【００１７】
本発明によれば、ハミングウエイトが同一である複数の暗号鍵を用いてデータを暗号化するため、消費電力の違いを監視しても正規演算とダミー演算とを区別することができず、高い耐タンパ性を維持することができる。
【図面の簡単な説明】
【００１８】
【図１】実施の形態１に係る暗号処理装置の構成を示すブロック図である。
【図２】実施の形態２に係る暗号処理装置の構成を示すブロック図である。
【図３】実施の形態３に係る暗号処理装置の構成を示すブロック図である。
【図４】実施の形態３に係る秘密鍵格納方法を模式的に示す図である。
【図５】実施の形態３に係る暗号鍵記憶部（暗号鍵記憶用ワークエリア）の構成を示す図である。
【図６】実施の形態３に係る暗号処理部の具体構成を示すブロック図である。
【図７】Fisher-Yates shuffleアルゴリズムを用いた暗号鍵生成方法を説明する図である。
【図８】実施の形態３に係る暗号処理装置の動作を示すフローチャートである。
【図９】実施の形態４に係る暗号処理装置の構成を示すブロック図である。
【図１０】実施の形態４に係る暗号処理装置の構成を模式的に示した図である。
【図１１】実施の形態４に係る暗号処理装置の動作を示すフローチャートである。
【図１２】実施の形態５に係る暗号処理装置の構成を示すブロック図である。
【図１３】実施の形態５に係る暗号処理装置の構成を模式的に示した図である。
【図１４】実施の形態５に係る暗号処理装置の動作を示すフローチャートである。
【図１５】実施の形態６に係る暗号処理装置の構成を示すブロック図である。
【図１６】実施の形態６に係る暗号処理装置の構成を模式的に示した図である。
【図１７】実施の形態６に係る暗号処理装置の動作を示すフローチャートである。
【図１８】実施の形態７に係る暗号処理装置の一部の構成を模式的に示した図である。
【図１９】実施の形態７に係る暗号処理装置の動作を示すフローチャートである。
【図２０】本発明の暗号処理装置の構成の一例を示すブロック図である。
【発明を実施するための形態】
【００１９】
本発明の実施の形態について以下に図面を参照して説明する。以下の説明は、本発明の好適な実施の形態を示すものであって、本発明の範囲が以下の実施の形態に限定されるものではない。以下の説明において、同一の符号が付されたものは実質的に同様の内容を示している。
【００２０】
（実施の形態１）
以下、図面を参照して本発明の実施の形態１について説明する。図１は、実施の形態１に係る暗号処理装置１００の構成を示すブロック図である。暗号処理装置１００は、秘密鍵記憶部１１０と、ダミー鍵生成部１２０と、暗号処理部１３０と、を備える。
【００２１】
秘密鍵記憶部１１０は、ＥＥＰＲＯＭ（Electrically Erasable Programmable Read-Only Memory）などの不揮発メモリであり、秘密鍵Ｋを記憶する。
【００２２】
ダミー鍵生成部１２０は、ダミー鍵Ｄを生成する。具体的には、ダミー鍵生成部１２０は、秘密鍵記憶部１１０に記憶されている秘密鍵Ｋと同一のバイト長であり、かつ、同一のハミングウエイトを有する複数のダミー鍵Ｄを生成する。ここで、ダミー鍵Ｄは、後述の暗号処理部１３０におけるダミー演算で用いられる鍵である。
【００２３】
また、同一バイト長の複数の鍵に関してハミングウエイトが同一であるとは、複数の鍵をそれぞれ構成するビットの１の数が等しいことを指す。
【００２４】
暗号処理部１３０は、入力したデータに対して秘密鍵Ｋと複数のダミー鍵Ｄを所定の順序で用いて暗号化する。すなわち、暗号処理部１３０は、各データに対して、複数のダミー鍵Ｄを用いたダミー演算と秘密鍵Ｋを用いた正規演算とを混ぜて行う。なお、暗号処理部１３０は、セキュリティ強化の観点から個別の処理装置である暗号コプロセッサなどで構成することが可能である。
【００２５】
秘密鍵Ｋによる正規演算で求められた正解結果とダミー鍵Ｄによるダミー演算で求められたダミー結果は、別途設けられた暗号処理結果記憶部に格納された後、正解結果が取り出される。
【００２６】
このように本実施の形態１に係る暗号処理装置は、秘密鍵を格納する秘密鍵格納手段と、秘密鍵と同一のハミングウエイトを有する複数のダミー鍵を生成するダミー鍵生成手段と、前記秘密鍵及び前記複数のダミー鍵を用いてデータを暗号化する暗号化手段と、を具備する。
【００２７】
当該構成によれば、ダミー演算に用いられるダミー鍵Ｄは秘密鍵Ｋと同一のハミングウエイトを有しているため、消費電力の違いを監視しても正規演算とダミー演算とを区別することができず、高い耐タンパ性を維持することができる。
【００２８】
（実施の形態２）
本発明の実施の形態２に係る暗号処理装置２００は、秘密鍵Ｋとダミー鍵Ｄを同一のワークエリアに格納した上で、所定の順番で取り出して暗号化を行うことを特徴とする。以下、図面を参照して本発明の実施の形態２について説明する。
【００２９】
図２は、実施の形態２に係る暗号処理装置２００の構成を示すブロック図である。暗号処理装置２００は、秘密鍵記憶部１１０と、暗号鍵生成部２１０と、暗号鍵記憶部２２０と、暗号鍵選択部２３０と、暗号処理部１３０と、を備える。実施の形態１との比較において、暗号鍵記憶部２２０、暗号鍵生成部２１０、暗号鍵選択部２３０、の各機能を纏めたものがダミー鍵生成部１２０に該当する。
【００３０】
秘密鍵記憶部１１０は、正規の鍵である秘密鍵Ｋを記憶する。
【００３１】
暗号鍵生成部２１０は、秘密鍵記憶部１１０より秘密鍵Ｋを読み出して暗号鍵記憶部２２０に一つの暗号鍵として格納する。以下、当該格納された秘密鍵Ｋを第１暗号鍵と称することがある。また、暗号鍵生成部２１０は、当該秘密鍵である第１暗号鍵と略同一のハミングウエイトを有する複数の暗号鍵を生成し、暗号鍵記憶部２２０に格納する。当該第１暗号鍵に基づいて暗号鍵生成部２１０で生成される複数の暗号鍵を総称して第２暗号鍵と呼ぶことがある。本実施の形態２では、秘密鍵記憶部１１０より読み出される秘密鍵Ｋがそのまま第１暗号鍵として暗号鍵記憶部２２０に記憶されるため、第２暗号鍵として暗号鍵記憶部２２０に記憶される複数の暗号鍵は複数のダミー鍵Ｄとなる。
【００３２】
暗号鍵記憶部２２０は、暗号鍵を記憶する。ここで言う暗号鍵には、上記秘密鍵Ｋや当該秘密鍵Ｋと略同一のハミングウエイトを有するダミー鍵Ｄの他、秘密鍵Ｋが所定のマスクでマスキングされたマスク済み秘密鍵Ｋｍや、当該マスク済み秘密鍵と同一のハミングウエイトを有するマスク済みダミー鍵Ｄｍを含む鍵の総称である。
【００３３】
暗号鍵記憶部２２０は、具体的にはＲＡＭ（Random Access Memory）内に設けられた暗号鍵記憶用ワークエリアであり、当該ワークエリアに複数の暗号鍵が外部より判別困難な状態で記憶されている。本実施の形態２では、暗号鍵記憶部２２０には、秘密鍵記憶部１１０より読み出される秘密鍵Ｋ及び後述する暗号鍵生成部２１０で生成される複数のダミー鍵Ｄが暗号鍵として記憶される。
【００３４】
暗号鍵選択部２３０は、暗号鍵記憶部２２０に記憶されている第１暗号鍵及び第２暗号鍵をそれぞれ秘密鍵Ｋ及び複数のダミー鍵Ｄとして所定の順番で選択して暗号処理部１３０へ送る。ここで、暗号鍵選択部２３０は、暗号鍵をランダムな順番で選択して読み出しても良いし、予め決められた順番で選択して読み出しても良い。
【００３５】
暗号処理部１３０は、入力したデータに対して暗号鍵選択部２３０により所定の順序で選択されて送られてくる暗号鍵である秘密鍵Ｋ及び複数のダミー鍵Ｄを用いて暗号化する。すなわち、暗号処理部１３０において、複数のダミー鍵を用いたダミー演算と秘密鍵を用いた正規演算との両方が各データに対して行われ、秘密鍵を用いた正規演算で得られた正解結果だけが最終的に抽出される。
【００３６】
このように本実施の形態２に係る暗号処理装置は、第１暗号鍵と同一のハミングウエイトを有する第２暗号鍵を生成する暗号鍵生成手段と、前記第１暗号鍵と第２暗号鍵とを記憶する暗号鍵記憶手段と、を備える。ここで、第１暗号鍵は、具体的には、秘密鍵記憶手段より読み出される秘密鍵であり、第２暗号鍵は、当該秘密鍵と同一のハミングウエイトを有する複数のダミー鍵である。また、暗号処理装置は、暗号鍵記憶手段に記憶された第１暗号鍵及び第２暗号鍵をそれぞれ秘密鍵及び複数のダミー鍵として所定の順番で選択する暗号鍵選択手段と、暗号鍵選択手段で所定の順番で選択される秘密鍵及びダミー鍵を用いてデータを暗号化する暗号化手段を備える。
【００３７】
当該構成によれば、読み出された秘密鍵と生成されたダミー鍵とがそれぞれ暗号鍵として同一のワークエリアに格納され、そこから適宜いずれかの暗号鍵が選択されてデータの暗号化が行われる。従って、外部から正規演算とダミー演算とを区別することができず、高い耐タンパ性を維持することができる。
【００３８】
（実施の形態３）
実施の形態２に係る暗号処理装置２００では、不揮発性メモリである秘密鍵記憶部より読み出した秘密鍵Ｋをそのまま暗号鍵記憶部であるＲＡＭのワークエリアに格納している。しかしながら、秘密鍵をそのままの状態でＲＡＭに記憶することは、アタッカーの標的となる可能性があるため好ましくない。そこで、本実施の形態３に係る暗号処理装置３００は、より安全な状態で秘密鍵をワークエリアに格納することを特徴とする。以下、図面を参照して本発明の実施の形態３について説明する。
【００３９】
図３は、実施の形態３に係る暗号処理装置３００の構成を示すブロック図である。暗号処理装置３００は、秘密鍵記憶部１１０と、乱数発生部３１０と、マスク値記憶部３２０と、マスク処理部３３０と、暗号鍵生成部３４０と、暗号鍵記憶部３５０と、暗号鍵選択部３６０と、マスク解除部３７０と、暗号処理部１３０と、を備える。
【００４０】
秘密鍵記憶部１１０は、正規の鍵である秘密鍵Ｋを記憶する。秘密鍵Ｋはｎバイト長で、個々のバイトをＫ［０］〜Ｋ［ｎ−１］と表記する。例えば、シングルＤＥＳの場合は、ｎ＝８である。
【００４１】
乱数発生部３１０は、乱数Ｒ１を発生する。当該乱数Ｒ１の値はマスク値記憶部３２０に格納される。
【００４２】
マスク値記憶部３２０は、乱数発生部３１０で発生した乱数Ｒ１の値をマスク値として記憶する。マスク値記憶部３２０は、具体的には、ＲＡＭに設けられたマスク値記憶用のワークエリアである。
【００４３】
マスク処理部３３０は、秘密鍵記憶部１１０より読み出した秘密鍵Ｋにマスク値記憶部３２０に記憶されているマスク値Ｒ１でマスキングして、マスク済み秘密鍵Ｋｍを取得する。
【００４４】
具体的には、図４に示すように、マスク処理部３３０は、読み出した秘密鍵Ｋを構成する各ビットと、マスク値Ｒ１を構成する各ビットとのＸＯＲを計算する（排他的論理和を取る）ことでマスク済み秘密鍵Ｋｍを生成する。従って、当該マスク処理においてバイト長が保たれ、マスク済み秘密鍵Ｋｍも秘密鍵Ｋと同じくｎバイトとなる。マスク処理部３３０は、生成したマスク済み秘密鍵Ｋｍを一つの暗号鍵として暗号鍵記憶部３５０に格納する。具体的には、マスク処理部３３０は、暗号鍵記憶部３５０の先頭格納位置にマスク済み秘密鍵Ｋｍを構成する各々のデータをランダムな順番で格納する。
【００４５】
暗号鍵生成部３４０は、マスク済み秘密鍵Ｋｍである第１暗号鍵と同一のハミングウエイトを有する複数の暗号鍵を生成し、暗号鍵記憶部３５０に格納する。後述するように当該生成される各暗号鍵は、暗号処理部１３０側から見るとマスクされたダミー鍵に見えるため、以下の説明では、マスク済みダミー鍵と称する事がある。また、暗号鍵生成部３４０が生成する複数の暗号鍵である複数のマスク済みダミー鍵Ｄｍを総称して第２暗号鍵と呼ぶ事がある。
【００４６】
暗号鍵記憶部３５０は、マスク済み秘密鍵Ｋｍである第１暗号鍵と複数のマスク済みダミー鍵Ｄｍである第２暗号鍵とを記憶する。暗号鍵記憶部３５０は、暗号鍵記憶部２２０と同様ＲＡＭ内に設けられた暗号鍵記憶用ワークエリアであり、複数の暗号鍵が外部より判別困難な状態で記憶されている。
【００４７】
図５は、当該暗号鍵記憶部３５０である暗号鍵記憶用ワークエリアに暗号鍵が記憶されている様子を示している。図５に示すように、暗号鍵記憶用ワークエリアには、１つのマスク済み秘密鍵Ｋｍとｐ個のマスク済みダミー鍵Ｄｍの合わせてｐ＋１個の暗号鍵を記憶する領域が確保されている。各暗号鍵はｎバイトであるため、ｎ×（ｐ＋１）のバイト領域となり、各アドレスは［０］［０］〜［ｐ］［ｎ−１］で指定される。
【００４８】
暗号鍵選択部３６０は、暗号鍵記憶部３５０に所定の順番でアクセスして暗号鍵を読み出してマスク解除部３７０に送る。すなわち、暗号鍵記憶部３５０に記憶されている複数の暗号鍵を所定の順番で選択してマスク解除部３７０に送る。
【００４９】
マスク解除部３７０は、マスク値Ｒ１を用いて暗号鍵選択部３６０で選択されて順番に送られてくる暗号鍵のマスクを解除して暗号処理部１３０にマスク解除後の鍵を送る。具体的には、マスク解除部３７０は、暗号鍵選択部３６０で選択されて順番に送られてくる暗号鍵を構成する各ビットと、マスク値記憶部３２０に記憶されているマスク値Ｒ１を構成する各ビットとのＸＯＲを計算することでマスクを解除する。
【００５０】
従って、暗号鍵選択部３６０より第１暗号鍵であるマスク済み秘密鍵Ｋｍが送られてきた場合は、マスク解除部３７０がマスクを解除することで秘密鍵Ｋに戻されて暗号処理部１３０に送られる。また、暗号鍵選択部３６０より第２暗号鍵であるマスク済みダミー鍵Ｄｍが送られてきた場合は、マスク解除部３７０がマスクを解除することでダミー鍵Ｄとなって暗号処理部１３０に送られる。
【００５１】
暗号処理部１３０は、マスク解除部３７０より所定の順序で送られてくる秘密鍵Ｋ及び複数のダミー鍵Ｄを用いて暗号化する。暗号処理部１３０は、秘密鍵Ｋによる正規演算で求められた正解結果とダミー鍵Ｄによるダミー演算で求められたダミー結果を暗号処理結果記憶部３８０に格納する。
【００５２】
図６に、暗号処理部１３０の具体的構成を示す。暗号処理部１３０は、鍵レジスタ１３１０と、入力レジスタ１３２０と、鍵拡張回路１３３０と、暗号処理回路１３４０と、出力レジスタ１３５０、とを備える。暗号処理部１３０の外部からは、鍵レジスタ１３１０及び入力レジスタ１３２０への書き込みと、出力レジスタ１３５０からの読み出しが少なくとも可能で、さらに外部から暗号化処理の実行を制御できるように構成されている。
【００５３】
鍵レジスタ１３１０は、マスク解除部３７０より送られてくる鍵を保持する。入力レジスタ１３２０は、暗号対象として入力されたデータの値を保持する。鍵拡張回路１３３０は、鍵レジスタ１３１０に格納された鍵をラウンド鍵に拡張する。暗号処理回路１３４０は、鍵拡張回路１３３０で拡張されたラウンド鍵を用いて入力レジスタ１３０２に保持されている値をＤＥＳ暗号やＴＤＥＳ暗号で暗号化処理を行い、出力レジスタ１３５０に格納する。出力レジスタ１３５０が保持している暗号処理後のデータの値は、その後暗号処理結果記憶部３８０に格納される。
【００５４】
暗号処理結果記憶部３８０は、暗号鍵記憶部３５０同様ＲＡＭに設けられた暗号処理結果記憶用ワークエリアであり、暗号処理部１３０で暗号化されたデータを記憶する。暗号処理結果記憶部３８０は、暗号鍵記憶部３５０に記憶された暗号鍵の数と同数の暗号処理結果を記憶するエリアが設けられている。暗号処理結果記憶部３８０には、一つの秘密鍵Ｋによる正規演算で求められた一つの正解結果とｐ個のダミー鍵Ｄによるダミー演算で求められたｐ個のダミー結果の両方が一旦格納される。一つの正解結果とｐ個のダミー結果がすべて格納された後、正解結果が暗号処理結果記憶部３８０より抽出される。
【００５５】
次に、暗号鍵生成部３４０における暗号鍵生成方法について説明する。当該暗号鍵生成方法としては、様々な手法を採用することができるが、生成処理に要する時間、生成するマスク済みダミー鍵の数、要求される安全性、などに基づいて選択されることが好ましい。一つの暗号鍵生成方法としては、暗号鍵記憶部３５０に格納されたマスク済み秘密鍵Ｋｍを構成する各バイトＫｍ［０］〜Ｋｍ［ｎ−１］のシャッフルを行うことでマスク済みダミー鍵Ｄｍを生成する手法がある。シャッフルを行うアルゴリズムは、既存のアルゴリズムを用いることができるが、シャッフル結果に偏りがないものが好ましい。本実施の形態３では、暗号鍵生成部３４０は、Fisher-Yates shuffleアルゴリズムを使用してマスク済み秘密鍵Ｋｍを構成する各バイトをシャッフルすることで複数のマスク済みダミー鍵Ｄｍを生成するものとして説明する。
【００５６】
Fisher-Yates Shuffleアルゴリズムを図７に示す。Fisher-Yates Shuffleアルゴリズムでは、注目する配列インデックスをｉとし、ｉに配列終端のインデックスを代入する。配列の先頭からインデックスｉまでの間から１つのインデックスを選びｊとする。配列のインデックスｉとインデックスｊの位置の値を交換する。インデックスｉから１を引いて、新たなインデックスｉとし、再びインデックスｊをランダムに選び中身を交換する処理に戻る。上記処理を、インデックスｉの値が配列の先頭に達するまで繰り返す。シャッフルされた鍵の値は、殆どの場合は元の鍵とは異なる値となる。また、当該処理によって生成される鍵は、ハミングウエイト及びバイト長がそれぞれ保存される。当該処理をマスク済み秘密鍵Ｋｍに施すことでマスク済みダミー鍵Ｄｍを生成する。
【００５７】
暗号鍵生成部３４０は、上記生成方法で生成した１つのマスク済みダミー鍵Ｄｍを暗号鍵記憶部３５０であるＲＡＭ内の暗号鍵記憶用ワークエリアの先頭（０行目）に格納する。当該暗号鍵記憶用ワークエリアのｈ行目に格納されるマスク済みダミー鍵Ｄｍをバイト表記でＤｍ［ｈ］［０］〜Ｄｍ［ｈ］［ｎ−１］と表記する。
【００５８】
暗号鍵生成部３４０は、マスク済み秘密鍵Ｋｍから最初に生成して暗号鍵記憶用ワークエリア先頭に格納したＤｍ［０］［０］〜Ｄｍ［０］［ｎ−１］を次行にコピーしてＤｍ［１］［０］〜Ｄｍ［１］［ｎ−１］とし、同様にシャッフルを行う。暗号鍵生成部３４０は、シャッフル後に、Ｄｍ［１］［０］〜Ｄｍ［１］［ｎ−１］をＤｍ［２］［０］〜Ｄｍ［２］［ｎ−１］にコピーし、同様にシャッフルを行う。このように、シャッフル後にＤｍ［ｈ］［０］〜Ｄｍ［ｈ］［ｎ−１］を次行にコピーしてＤｍ［ｈ＋１］［０］〜Ｄｍ［ｈ＋１］［ｎ−１］とし、同様にシャッフルするという処理を繰り返し、必要ダミー鍵数をｐとしてＤｍ［ｐ］［０］〜Ｄｍ［ｐ］［ｎ−１］が埋まるまで上記生成処理を繰り返す。
【００５９】
暗号鍵生成部３４０は、必要数のマスク済みダミー鍵Ｄｍを生成して暗号鍵記憶用ワークエリアに格納した後、当該暗号鍵記憶用ワークエリアの中から一箇所を選んでマスク済み秘密鍵Ｋｍを格納する。
【００６０】
次に、暗号処理装置３００の動作について説明する。図８は、暗号処理装置３００の全体動作を示すフローチャートである。暗号処理装置３００の動作は、主にステップＳ１０１〜ステップＳ１０８で示される暗号鍵生成プロセスと、ステップＳ１０９〜ステップＳ１１６で示される暗号処理プロセスの２つに分けられる。
【００６１】
第１に、乱数発生部３１０は、図示せぬ暗号処理制御部からの乱数発生指示に従って鍵マスク用乱数Ｒ１を生成する（ステップＳ１０１）。生成された乱数Ｒ１は、マスク値Ｒ１として当該暗号処理制御部の制御に従ってマスク値記憶部３２０に格納される。
【００６２】
次に、マスク処理部３３０は、暗号鍵記憶部３５０である暗号鍵記憶用ワークエリアの先頭に秘密鍵Ｋとマスク値Ｒ１とをＸＯＲ（Exclusive OR）しながら（排他的論理和を計算しながら）コピーすることでマスク済み秘密鍵Ｋｍを格納する（ステップＳ１０２）。
【００６３】
次に、暗号鍵生成部３４０は、複数のマスク済みダミー鍵Ｄｍを生成する（ステップＳ１０３〜ステップＳ１０７）。具体的には、パラメータｈをｈ＝０にセットし（ステップＳ１０３）、暗号鍵記憶用ワークエリアのｈ番目（ここでは０番目）の鍵を上述のアルゴリズムでシャッフルし、（ステップＳ１０４）、ｈの値をインクリメントして新たなｈとする（ステップＳ１０５）。ここで、ｈは暗号鍵生成部３４０が暗号鍵生成処理を行う番号を示している。
【００６４】
次に、暗号鍵生成部３４０は、現在のｈの値をチェックし（ステップＳ１０６）ｈ＜ｐ＋１であれば、暗号鍵生成部３４０は、暗号鍵記憶用ワークエリアのｈ−１番目の鍵をｈ番目のワークエリアにコピーしてステップＳ１０４に戻る（ステップＳ１０７）。一方、ｈ＝ｐ＋１であれば、暗号鍵生成部３４０は、マスク処理部３３０が再度秘密鍵ＫとＲ１とをＸＯＲして求めたマスク済み秘密鍵Ｋｍを、ワークエリアの所定の位置Ｚに、既に記憶されているマスク済みダミー鍵Ｄｍと入れ替える形で格納する（ステップＳ１０８）。この段階で、暗号鍵記憶用ワークエリアには、マスク済み秘密鍵Ｋｍとマスク済み秘密鍵Ｄｍが判別困難な状態で記憶されたことになる。
【００６５】
次に、暗号鍵選択部３６０は、パラメータｉｎｄｅｘをｉｎｄｅｘ＝０にセットする（ステップＳ１０９）。ここで、ｉｎｄｅｘは暗号鍵記憶用ワークエリアに格納されている暗号鍵の読み出し位置を示している。
【００６６】
暗号鍵選択部３６０は、暗号鍵記憶用ワークエリアの０番目の暗号鍵を読み出し、マスク解除部３７０が読み出された暗号鍵とＲ１とをＸＯＲすることでマスクを解除した鍵を暗号処理部１３０内の鍵レジスタ１３１０に格納する（ステップＳ１１０）。
【００６７】
次に、上記図示せぬ暗号処理制御部の制御に基づいて暗号処理部１３０内の入力レジスタ１３２０に暗号対象のデータが格納される（ステップＳ１１１）。そして、暗号処理部１３０は、当該暗号処理制御部の制御に従って暗号処理を実行する（ステップＳ１１２）。暗号処理によって暗号処理部１３０の出力レジスタ１３５０に格納される暗号処理結果は、暗号処理結果記憶用ワークエリアの前記ｉｎｄｅｘ番目に格納される（ステップＳ１１３）
【００６８】
次に、暗号鍵選択部３６０は、ｉｎｄｅｘの値をインクリメントしてｉｎｄｅｘ＝ｉｎｄｅｘ＋１とし（ステップＳ１１４）、ｉｎｄｅｘ＜ｐ＋１かどうかをチェックする（ステップＳ１１５）。ｉｎｄｅｘ＜ｐ＋１であれば、暗号鍵記憶用ワークエリアに格納されたすべての暗号鍵で暗号処理が行われていないため、ステップＳ１１０に戻って次の暗号鍵を用いた暗号処理に移る。一方、ｉｎｄｅｘ＝ｐ＋１であれば、一つのデータに対してすべての暗号鍵を用いて暗号処理が終了して処理結果がワークエリアに格納されたことを意味するため、秘密鍵Ｋで暗号された正解結果が格納されているＺ番目の位置より処理結果を出力する（ステップＳ１１６）。
【００６９】
以上のように本実施の形態３に係る暗号処理装置は、秘密鍵にマスクをかけてマスク済み秘密鍵を取得するマスク処理手段と、前記マスク済み秘密鍵と同一のハミングウエイトを有する複数のマスク済みダミー鍵を生成するマスク済みダミー鍵生成手段と、前記マスク済み秘密鍵と前記複数のマスク済みダミー鍵とを記憶する暗号鍵（マスク済み鍵）記憶手段と、を具備する。
【００７０】
また、上記暗号処理装置は、暗号鍵記憶手段に記憶された前記マスク済み秘密鍵及び前記複数のマスク済みダミー鍵を所定の順番で選択する暗号選択手段と、前記暗号選択手段で選択される前記マスク済み秘密鍵及び前記複数のマスク済みダミー鍵の前記マスクを解除するマスク解除手段と、前記マスク解除手段でマスクが解除された秘密鍵及び複数のダミー鍵を用いて暗号処理を行う暗号処理手段と、を具備する。
【００７１】
当該構成とすることで、正規演算とダミー演算でそれぞれ用いられる秘密鍵とダミー鍵はハミングウエイトが等しくなることから、鍵の値を処理する際の消費電流などに代表されるサイドチャネルリークは類似した波形となる。従って、正しい秘密鍵が使用されている正規演算と、ダミー鍵が使用されているダミー演算との区別が難しくなる。そのため、ダミー鍵を用いた処理を区別し、正しい秘密鍵の値を用いたサイドチャネル波形を選別することが難しくなり、ダミー鍵を用いた処理の波形はノイズとして働くため、サイドチャネル解析が難しくなる。
【００７２】
なお、上記説明したように、乱数を発生させる乱数発生手段を更に備え、前記マスク済み秘密鍵生成手段や前記マスク解除手段は、前記乱数を前記マスクとして用いるとより秘匿性が向上するため好ましい。
【００７３】
また、上記説明したように、暗号化手段で暗号化されたデータを記憶する暗号処理結果記憶手段を、更に備え、秘密鍵で暗号化された正解データと複数のダミー鍵でそれぞれ暗号化された複数のダミーデータとを記憶する構成とすると更に秘匿性を向上させることができる。
【００７４】
また、マスク済みダミー鍵生成手段は、マスク済み秘密鍵を構成するデータの順序を入れ替えることで前記マスク済み秘密鍵と同一のハミングウエイトを有する前記マスク済みダミー鍵を生成する手法を用いることができる。具体的には、マスク済みダミー鍵生成手段は、マスク済み秘密鍵のバイト順序を入れ替えることでマスク済み秘密鍵のデータ順序をシャッフルしてマスク済みダミー鍵を生成する。当該構成によれば、マスク済み秘密鍵とマスク済みダミー鍵との間でハミングウエイトを等しくすることができる。従って、マスクが解除されたダミー鍵と秘密鍵との間でもハミングウエイトを等しくすることができる。当該マスク済みダミー鍵生成手段によれば、簡単な計算方法で高速に必要数のマスク済みダミー鍵を生成することができ、暗号処理に先だって暗号鍵を準備する上で好ましい構成とすることができる。
【００７５】
（実施の形態４）
実施の形態３に係る暗号処理装置３００では、暗号鍵記憶部であるＲＡＭのワークエリアの所定位置にマスク済み秘密鍵が格納される構成をとっている。しかしながら、アタッカーがＲＡＭにレーザ光を照射する解析手法を採用した場合、ＲＡＭに格納されている複数の暗号鍵の中でどの暗号鍵がマスク済み秘密鍵かを特定できる可能性がある。当該解析手法が成功した場合、正規演算とダミー演算を判別することが可能になるため、バイアスアタックによる耐タンパ性を低下させることになる。
【００７６】
そこで、本実施の形態４に係る暗号処理装置４００は、よりセキュアな状態で秘密鍵をワークエリアに格納することを特徴とする。以下、図面を参照して本発明の実施の形態４について説明する。なお、実施の形態１〜３で既に説明した部分については発明の明確化のため一部説明を省略する。
【００７７】
図９は、実施の形態４に係る暗号処理装置４００の構成を示すブロック図である。暗号処理装置４００は、秘密鍵記憶部１１０と、暗号処理部１３０と、マスク処理部３３０と、暗号鍵記憶部３５０と、暗号鍵選択部３６０と、マスク解除部３７０と、暗号処理結果記憶部３８０と、乱数発生部４１０と、格納位置記憶部４２０と、暗号鍵生成部４３０と、正解結果抽出部４４０と、暗号処理制御部４５０と、を備える。
【００７８】
乱数発生部４１０は、暗号処理制御部４５０の制御に従って乱数Ｒ１と乱数Ｒ２の２つの乱数を発生させる。乱数Ｒ１はマスク値としてマスク値記憶部３２０に、乱数Ｒ２は、マスク済み秘密鍵Ｋｍの格納位置を示す値として格納位置記憶部４２０にそれぞれ送られる。
【００７９】
格納位置記憶部４２０は、乱数発生部４１０で生成された乱数Ｒ２を第１暗号鍵であるマスク済み秘密鍵Ｋｍの格納位置を示す値として記憶する。
【００８０】
暗号鍵生成部４３０は、マスク済み秘密鍵Ｋｍである第１暗号鍵と同一のハミングウエイトを有する暗号鍵であるマスク済みダミー鍵Ｄｍを複数生成し、暗号鍵記憶部３５０に格納する。また、暗号鍵生成部４３０は、格納位置記憶部４２０に記憶されている値を参照し、暗号鍵記憶部３５０である暗号鍵記憶用ワークエリアのＲ２番目の位置に既に記憶されているマスク済みダミー鍵Ｄｍと入れ替える形でマスク済み秘密鍵Ｋｍを格納する。
【００８１】
正解結果抽出部４４０は、格納位置記憶部４２０に記憶されている値を参照し、暗号処理結果記憶部３８０である暗号処理結果記憶用ワークエリアのＲ２番目に記憶されている処理結果を正解結果として抽出し、出力インタフェース等を介して装置外部に出力する。
【００８２】
暗号処理制御部４５０は、暗号処理装置４００の全体を制御する。具体的には、暗号処理制御部４５０は、乱数発生部４１０に乱数を発生させる指示を行ったり、暗号処理部１３０に暗号処理を開始させる指示を行ったりする。
【００８３】
図１０は、暗号処理装置４００の構成を模式的に示した図である。図１０の例では暗号鍵記憶用ワークエリアの３番目の位置にマスク済み秘密鍵Ｋｍが記憶されている。すなわち、暗号処理制御部４５０の制御に従って、乱数発生部４１０は０〜ｐ＋１の間の値の中からＲ２として「３」の値を発生させている。当該「３」の値が格納位置記憶部４２０に記憶されるため、暗号鍵生成部４３０によって当該３番目の位置にマスク済み秘密鍵Ｋｍが格納されることになる。
【００８４】
また、当該マスク済み秘密鍵Ｋｍが暗号鍵選択部３６０で読み出され、マスク解除部３７０でマスクが解除された秘密鍵Ｋｍを用いて暗号処理部１３０で暗号化された処理データは、暗号処理結果記憶部３８０である暗号処理結果記憶用ワークエリアの３番目の位置に格納される。従って、正解結果抽出部４４０は、格納位置記憶部４２０に記憶された乱数Ｒ２である「３」の値を参照し、当該暗号処理結果記憶用ワークエリアの３番目の位置に記憶されているデータを正解結果として抽出する。
【００８５】
次に、暗号処理装置４００の動作を図１１のフローチャートを用いて説明する。但し、ステップＳ２０１〜Ｓ２０７及びステップＳ２１０〜Ｓ２１６は、それぞれ図８のステップＳ１０１〜Ｓ１０７、ステップＳ１０９〜１１５と同一であるため説明を省略する。
【００８６】
ステップＳ２０１〜Ｓ２０７においてｐ＋１個のマスク済みダミー鍵Ｄｍを生成した段階で、暗号処理制御部４５０は、乱数発生部４１０に乱数Ｒ２を発生させ、当該乱数Ｒ２の値を格納位置記憶部４２０に格納する（ステップＳ２０８）。
【００８７】
次に、暗号鍵生成部４３０は、格納位置記憶部４２０に格納されている値を参照し、マスク済み秘密鍵Ｋｍを暗号鍵記憶用ワークエリアのＲ２番目の位置に格納する（ステップＳ２０９）。具体的には、マスク処理部３３０が秘密鍵Ｋとマスク値Ｒ１とをＸＯＲすることで生成したマスク済み秘密鍵Ｋｍを暗号鍵生成部４３０が暗号鍵記憶用ワークエリアのＲ２番目の位置に他のマスク済みダミー鍵Ｄｍと同様の手順で格納する。
【００８８】
ステップＳ２１０〜ステップＳ２１６の処理によって正解結果と全てのダミー結果が暗号処理結果記憶用ワークエリアに格納された後、正解結果抽出部４４０が暗号処理結果記憶用ワークエリアのＲ２番目の位置に格納されている処理結果を抽出して処理を完了する（ステップＳ２１７）。
【００８９】
以上のように本実施の形態４に係る暗号処理装置において、乱数発生手段は、マスク済み秘密鍵の格納位置を示す第２の乱数を発生させる。そして、暗号処理装置は、マスク済み秘密鍵の格納位置を示す第２の乱数を記憶する格納位置記憶手段と、前記格納位置記憶手段に記憶された値を参照して前記マスク済み鍵記憶手段の前記第２の乱数が示す位置にマスク済み秘密鍵を格納するマスク済み秘密鍵格納手段と、を更に備える。当該構成とすることで、前記マスク済み鍵記憶手段に格納される暗号鍵のうち、どの位置にマスク済み秘密鍵が格納されたかの判別が困難となるため、サイドチャネル解析に対してより耐性を持たせることが可能となる。
【００９０】
また、前記格納位置記憶手段に記憶された値を参照して暗号処理結果記憶手段の前記第２の乱数が示す位置に記憶されているデータを抽出する抽出手段を更に備えることで、適切に正解結果を取り出すことが可能となる。
【００９１】
また、上記暗号処理制御部４５０は、ダミー鍵生成部１２０の一機能としてダミー鍵生成部１２０内に設けられていても良い。
【００９２】
（実施の形態５）
実施の形態４に係る暗号処理装置４００では、暗号鍵選択部３６０が所定の位置（ワークエリアの先頭）から暗号鍵を選択して暗号処理部１３０に送る構成を取っている。しかしながら、暗号鍵を読み出す順番が固定されていると、アタッカーがＲＡＭにレーザ光を照射する解析手法を採用した場合、何番目の暗号処理が正規演算であるかを推定できる可能性がある。当該解析手法が成功した場合、正規演算とダミー演算を判別することが可能になるため、バイアスアタックによる耐タンパ性を低下させることになる。
【００９３】
そこで、本実施の形態５に係る暗号処理装置５００は、より安全な状態で秘密鍵をワークエリアに格納することを特徴とする。以下、図面を参照して本発明の実施の形態５について説明する。なお、実施の形態１〜４で既に説明した部分については発明の明確化のため一部説明を省略する。
【００９４】
図１２は、実施の形態５に係る暗号処理装置５００の構成を示すブロック図である。暗号処理装置５００は、秘密鍵記憶部１１０と、暗号処理部１３０と、マスク処理部３３０と、暗号鍵記憶部３５０と、マスク解除部３７０と、暗号処理結果記憶部３８０と、格納位置記憶部４２０と、暗号鍵生成部４３０と、正解結果抽出部４４０と、暗号処理制御部４５０と、乱数発生部５１０と、読み取り位置記憶部５２０と、暗号鍵選択部５３０と、暗号処理結果格納位置選択部５４０と、を備える。
【００９５】
乱数発生部５１０は、暗号処理制御部４５０の制御に従って乱数Ｒ１、乱数Ｒ２に加えて新たに乱数Ｒ３の３つの乱数を発生させる。乱数Ｒ３は、暗号鍵記憶部３５０に記憶された暗号鍵の読み取り開始位置を示す値であり、換言すると暗号処理の開始位置を示す値である。同時に、乱数Ｒ３は、暗号処理結果記憶部３８０へ暗号処理結果を格納する格納開始位置を示す値でもある。乱数発生部５１０で生成された乱数Ｒ３は、暗号処理制御部４５０の制御に従って読み取り位置記憶部５２０に送られる。
【００９６】
読み取り位置記憶部５２０は、暗号鍵記憶部３５０に記憶されている複数の暗号鍵の読み取り位置を示す値を記憶する。読み取り位置記憶部５２０には、乱数発生部５１０で生成された乱数Ｒ３の値が暗号鍵の読み取り開始位置を示す値として格納される。
【００９７】
暗号鍵選択部５３０は、読み取り位置記憶部５２０に記憶されている値を参照し、暗号鍵記憶部３５０に記憶されている複数の暗号鍵を読み取り位置記憶部５２０に記憶されている乱数Ｒ３が示す位置から順番に選択してマスク解除部３７０に送る。
【００９８】
暗号処理結果格納位置選択部５４０は、暗号処理部１３０で処理されて暗号処理部１３０内部の出力レジスタ１３５０に格納された処理結果を読み取り位置記憶部５２０に記憶されている乱数Ｒ３が示す位置から順番に選択して暗号処理結果記憶用ワークエリアに格納する。すなわち、暗号処理結果格納位置選択部５４０は、暗号処理部１３０内部の出力レジスタ１３５０から順次読み出す処理結果を、暗号処理結果記憶部３８０に乱数Ｒ３が示す位置から順番にアクセスして当該処理結果を書き込んでいく。
【００９９】
上述のように暗号鍵選択部５３０と暗号処理結果格納位置選択部５４０は、それぞれ読み取り位置記憶部５２０に記憶されている同一の値を参照して暗号鍵の読み出しと暗号処理結果の格納を行う。従って、暗号処理結果格納位置選択部５４０は、暗号鍵記憶部３５０におけるマスク済み秘密鍵Ｋｍの記憶位置に対応する暗号処理結果記憶部３８０の記憶位置に正解結果を格納する。
【０１００】
図１３は、暗号処理装置５００の構成を模式的に示した図である。図１３は、読み取り位置記憶部５２０に格納されたＲ３の値が「２」であり、暗号鍵選択部５３０によって暗号鍵記憶用ワークエリアの２番目の位置から順番に暗号鍵が取り出されて暗号処理が一巡した時点での様子を示している。
【０１０１】
図１４は、暗号処理装置５００の動作を示すフローチャート図である。なお、ステップＳ３０１〜Ｓ３０９、ステップＳ３１３〜Ｓ３１４、ステップＳ３２０は、それぞれ図１１に示すステップＳ２０１〜Ｓ２０９、ステップＳ２１２〜Ｓ２１３、ステップＳ２１７と同一であるため説明を省略する。
【０１０２】
ステップＳ３０１〜ステップＳ３０９の処理において暗号鍵の生成及び格納が完了した段階で、暗号処理制御部４５０は、乱数発生部５１０に乱数Ｒ３を発生させる（ステップＳ３１０）。次に、暗号処理制御部４５０は、当該乱数Ｒ３の値を読み取り位置記憶部５２０に格納することで、暗号鍵選択部５３０における暗号鍵の読み取り位置（ｉｎｄｅｘ）を乱数Ｒ３の値にセットする（ステップＳ３１１）。
【０１０３】
次に、暗号鍵選択部５３０は、読み取り位置記憶部５２０を参照し、ｉｎｄｅｘで示される暗号鍵記憶部３５０の位置（この段階ではＲ３番目）より暗号鍵を選択してマスク解除部３７０に渡し、マスク解除部３７０が当該暗号鍵とＲ１とをＸＯＲすることでマスクを解除した鍵を暗号処理部１３０内の鍵レジスタ１３１０に格納する（ステップＳ３１２）。
【０１０４】
暗号処理結果格納位置選択部５４０は、読み取り位置記憶部５２０に記憶されているｉｎｄｅｘが示す暗号処理結果記憶用ワークエリアの位置（この段階ではＲ３番目）を選択し、暗号処理部１３０で処理されて暗号処理部１３０内部の出力レジスタ１３５０に格納されている処理結果を当該位置に格納する（ステップＳ３１５）。
【０１０５】
次に、暗号鍵選択部５３０は、ｉｎｄｅｘの値をインクリメントし（ステップＳ３１６）、ｉｎｄｅｘの値が読み取り開始位置であったＲ３の値と等しいかを判定する（ステップＳ３１７）。等しければ、暗号処理が一巡して読み取り開始位置に戻ったものとしてステップＳ３２０に移行する。一方、等しくなければ、一巡の暗号処理が未完了であるとしてステップＳ３１８に移行する。
【０１０６】
上記ステップＳ３１７の判定によりｉｎｄｅｘ≠Ｒ３であった場合は、暗号鍵選択部５３０は、ｉｎｄｅｘの値がｐ＋１と等しいかを判定する（ステップＳ３１８）。等しければ、暗号鍵記憶用ワークエリアの最下段まで到達したとしてＩｎｄｅｘの値を０にリセットする（ステップＳ３１９）。一方、ｉｎｄｅｘ≠ｐ＋１であれば、ステップＳ３１２に戻り、現在のｉｎｄｅｘで指定されている記憶位置より暗号鍵を読み出して同様の処理を継続する。
【０１０７】
以上のように本実施の形態５に係る暗号処理装置において、乱数発生手段は、暗号鍵の読み取り開始位置を示す第３の乱数を発生させる。そして、暗号処理装置は、暗号鍵の読み取り位置を示す第３の乱数を記憶する読み取り位置記憶手段を更に備え、暗号鍵選択手段は、前記読み取り位置記憶手段に記憶されたＲ３が示す前記マスク済み鍵記憶手段の記憶位置から暗号鍵を順番に選択する。当該構成とすることで、暗号処理手段における暗号処理がダミー演算か正規演算かをサイドチャネル解析で特定することがより困難となるため、良好な秘匿性を維持することが可能となる。
【０１０８】
また、読み取り位置記憶部５２０の値をインクリメントする処理は、暗号鍵選択部５３０が行っても良いし、暗号処理制御部４５０が行っても良い。
【０１０９】
なお、暗号処理制御部４５０は、暗号鍵記憶部３５０に格納された暗号鍵セットを用いた暗号処理が一巡する毎に乱数発生部５１０に新たな乱数Ｒ３を発生させても良いし、一定期間毎に乱数Ｒ３を発生させても良い。発生頻度を高める方が秘匿性が向上する一方、処理も増大するため、想定される再度チャネル解析によって秘匿性を低下させない程度以上の頻度で読み取り開始位置であるＲ３を更新することが好ましい。
【０１１０】
（実施の形態６）
本実施の形態６に係る暗号処理装置６００では、同一の演算に対して２通りのリーク情報が現れるようにすることで、撹乱効果を増加させる構成を取ることを特徴とする。以下、図１５〜図１６を参照して本発明の実施の形態６について説明する。なお、実施の形態１〜５で既に説明した部分については発明の明確化のため一部説明を省略する。
【０１１１】
図１５は、本実施の形態６に係る暗号処理装置６００の構成を示すブロック図である。また、図１６は、暗号処理装置６００の構成を模式的に示した図である。暗号処理装置６００は、暗号処理装置５００の構成と比較して、乱数発生部６１０と、反転フラグ記憶部６２０と、第１反転回路６３０と、第２反転回路６４０と、第３反転回路６５０と、を更に備えることを特徴とする。
【０１１２】
乱数発生部６１０は、暗号処理制御部４５０の制御に従って乱数Ｒ１〜乱数Ｒ３に加えて新たに乱数Ｒ４の４つの乱数を発生させる。乱数Ｒ４の値は、後述のように第１反転回路６３０及び第２反転回路６４０において、それぞれ入力平文及び秘密鍵の双方を反転するか否かを決める反転フラグを示している。
【０１１３】
反転フラグ記憶部６２０は、乱数発生部６１０で生成された乱数Ｒ４を、反転フラグを示す値として記憶する。
【０１１４】
第１反転回路６３０は、暗号処理部１３０の鍵入力端子に接続されている。第１反転回路６３０は、マスク解除部３７０でマスクが解除されて送られてくる秘密鍵Ｋ又はダミー鍵Ｄに対して、反転フラグ記憶部６２０に記憶されている反転フラグの値に応じた反転処理を行う。すなわち、第１反転回路６３０は、上記反転フラグが立っている場合は、マスク解除部３７０より入力した鍵のビット値を反転させて暗号処理部１３０内の鍵レジスタ１３１０に格納する。一方、反転フラグが立ってない場合は、マスク解除部３７０より入力した鍵をそのまま鍵レジスタ１３１０に格納する。
【０１１５】
第２反転回路６４０は、暗号処理部１３０のデータ入力端子に接続される。第２反転回路６４０は、入力平文であるデータに対して、反転フラグ記憶部６２０に記憶されている反転フラグの値に応じた反転処理を行う。すなわち、第２反転回路６４０は、上記反転フラグが立っている場合は、入力したデータのビット値を反転させて暗号処理部１３０内の入力レジスタ１３２０に格納する。一方、反転フラグが立ってない場合は、入力したデータをそのまま入力レジスタ１３２０に格納する。
【０１１６】
第３反転回路６５０は、正解結果抽出部４３０の出力端子に接続される。第３反転回路６５０は、正解結果抽出部４３０で抽出された正解結果に対して、反転フラグ記憶部６２０に記憶されている反転フラグの値に応じた反転処理を行う。すなわち、第３反転回路６５０は、上記反転フラグが立っている場合は、入力した正解結果のビット値を反転させた上で外部へ出力する。一方、反転フラグが立ってない場合は、入力した正解結果をそのまま外部へ出力する。
【０１１７】
図１７は、暗号処理装置６００の動作を示すフローチャート図である。なお、ステップＳ４０１〜Ｓ３１１、ステップＳ４１５〜Ｓ４２０は、それぞれ図１４に示すステップＳ３０１〜Ｓ３１１、ステップＳ３１４〜Ｓ３１９と同一であるため説明を省略する。
【０１１８】
ステップＳ４０１〜ステップＳ４１１の処理において暗号鍵の読み込み準備が完了した段階で、暗号処理制御部４５０は、乱数発生部６１０に乱数Ｒ４を発生させ、当該乱数Ｒ４の値を反転フラグ記憶部６２０に格納する（ステップＳ４１２）。乱数Ｒ４は、反転を示す１又は反転を示さない０の１ビットのフラグである。
【０１１９】
マスク解除部３７０は、暗号鍵選択部５３０によって暗号鍵記憶用ワークエリアのＲ３番目の位置より読み出された暗号鍵とＲ１とをＸＯＲすることでマスクを解除した鍵に対してＲ４に応じた反転処理を行った後に暗号処理部１３０内の鍵レジスタ１３１０に格納する（ステップＳ４１３）。具体的には、反転フラグ記憶部６２０に記憶されている反転フラグの値Ｒ４が０の場合は、第１反転回路６３０が、マスク解除部３７０より入力したマスク解除後の鍵をそのまま暗号処理部１３０に出力する。一方、反転フラグの値Ｒ４が１の場合は、第１反転回路６３０が、マスク解除部３７０より入力したマスク解除後の鍵のビット値を反転した上でビット反転後の鍵を暗号処理部１３０に出力する。
【０１２０】
次に、第２反転回路６４０が、処理対象のデータである入力値に対して反転フラグ記憶部６２０に記憶されている反転フラグの値Ｒ４の値に応じて反転処理を行った上で、入力値を暗号処理部１３０の入力レジスタ１３２０に格納する（ステップＳ４１４）。具値的には、反転フラグ記憶部６２０に記憶されている反転フラグの値Ｒ４が０の場合は、第２反転回路６４０が、入力値をそのまま暗号処理部１３０に出力する。一方、反転フラグの値Ｒ４が１の場合は、第２反転回路６４０が、入力値のビットを反転した上でビット反転後の入力値を暗号処理部１３０に出力する。
【０１２１】
最後に、第３反転回路６５０が、正解結果抽出部４３０によって抽出されたデータに対して反転フラグ記憶部６２０に記憶されている反転フラグの値Ｒ４の値に応じて反転処理を行った上で、データを外部へ出力する（ステップＳ４２１）。具値的には、反転フラグ記憶部６２０に記憶されている反転フラグの値Ｒ４が０の場合は、第３反転回路６５０が、入力したデータをそのまま外部に出力する。一方、反転フラグの値Ｒ４が１の場合は、第３反転回路６５０が、入力したデータのビット値を反転した上で反転後のデータを外部に出力する。
【０１２２】
以上のように、本実施の形態６に係る暗号処理装置は、暗号処理手段に入力される鍵のビット及びデータのビットをそれぞれ反転させる反転手段を更に備える。また、前記反転手段は、乱数発生手段で生成される第４の乱数を参照して、入力したビットを反転して出力するかどうかを決定する。当該乱数発生手段で生成される第４の乱数は、反転フラグとして反転フラグ記憶手段に格納される。乱数発生手段は、暗号処理制御手段からの制御に従って第４の乱数を改めて生成し、反転フラグ記憶手段に改めて格納することで反転フラグ記憶手段に記憶される反転フラグは初期化される。
【０１２３】
当該構成とすることで、実装されたＤＥＳ暗号もしくはＴＤＥＳ暗号処理において、鍵と入力平文を反転させた場合、暗号化結果も反転値となることを利用し、同一の演算に対して、中間値の一部が２通りの値をとり得るように設計される。従って、同一の演算に対して２通りのリーク情報が現れるようにすることで、サイドチャネル解析に対する撹乱乱効果を増加させることができる。
【０１２４】
なお、上記説明では第３反転回路６５０を正解結果抽出部４４０の後段に設置し、抽出された正解結果のビットを反転フラグ記憶部６２０に記憶されている反転フラグ値に対応した反転処理を行う構成について説明したがこれに限るものではない。第３反転回路６５０は、暗号処理部１３０や暗号処理結果格納位置選択部５４０の後段に設置され、暗号処理結果に対して上記反転フラグ値に対応する反転処理を行った上で暗号処理結果記憶部３８０に暗号処理結果を格納する構成であっても良い。
【０１２５】
（実施の形態７）
上記説明した秘密鍵（マスク済み秘密鍵を含む）をバイト単位でシャッフルするダミー鍵（マスク済みダミー鍵を含む）の生成方法では、秘密鍵の全てのバイトが同一である場合、ダミー鍵は、秘密鍵と同一のままとなる。そこで本実施の形態７に係る暗号処理装置７００は、秘密鍵の全てのバイトが同一である場合においても、秘密鍵と異なるダミー鍵を生成する手法を採用した事を特徴とする。以下、図面を参照して説明する。なお、実施の形態１〜６で既に説明した部分については発明の明確化のため一部説明を省略する。
【０１２６】
図１８は、実施の形態７に係る暗号処理装置７００の一部分について模式的に示した図である。暗号処理装置７００は、暗号鍵記憶部３５０と、乱数発生部７１０と、マスクペア読み出し位置記憶部７２０と、マスクペア記憶部７３０と、マスクペア選択部７４０と、暗号鍵選択・格納部７５０と、第１マスク処理部７６０と、第２マスク処理部７７０と、を、備える。なお、マスクペア選択部７４０、暗号鍵選択・格納部７５０、第１マスク処理部７６０、第２マスク処理部７７０、はそれぞれ暗号鍵生成部の一部分を構成し、上記説明したFisher-Yatesシャッフルアルゴリズムによるマスク済みダミー鍵生成機能に追加して設けられた機能ブロックである。
【０１２７】
乱数発生部７１０は、乱数Ｒ１〜乱数Ｒ４に加えて新たに乱数Ｒ５を発生させる。乱数Ｒ５の値は、マスクペアをランダムに選択するために使用される。
【０１２８】
マスクペア読み出し位置記憶部７２０は、乱数発生部７１０で生成された乱数Ｒ５をマスクペアの読み出し位置を示す値として記憶する。
【０１２９】
マスクペア記憶部７３０は、マスク値テーブル７３１を記憶する。マスク値テーブルには複数のマスクペアが記憶される。図１８の例では４組のマスクペアが記憶されている。ここで、マスク値テーブルに格納されている値は、４つのマスク１および４つのマスク２の間で、ハミングウエイトが等しい。それぞれのマスク値のペアは、まったくビットを反転しないペア、半分のビットを反転させるペアで、反転するビット位置が異なるペアが２種類、すべてのビットが反転するペアが１種類で構成されている。こうした条件を満たすペアは、図１８に示した値以外にも存在し、別の値を使ってもよい。
【０１３０】
マスクペア選択部７４０は、マスクペア読み出し位置記憶部７２０に記憶されている値Ｒ５が示すマスクペア記憶部７３０の位置からマスク１組を読み出してそれぞれ第１マスク処理部７６０及び第２マスク処理部７７０に送る。
【０１３１】
暗号鍵選択・格納部７５０は、内部にカウンタ７５１を有し、暗号鍵記憶部３５０に記憶されている複数の暗号鍵であるマスク済みダミー鍵を選択して読み出して第１マスク処理部７６０に送る。また、第２マスク処理部７７０で処理されたマスク済みダミー鍵を、暗号鍵記憶部３５０の同一位置に再格納する。
【０１３２】
第１マスク処理部７６０は、マスクペア選択部７４０より選択されたマスクペアのうち、片方のマスク１を使用して、暗号鍵記憶部３５０より読み出した暗号鍵であるマスク済みダミー鍵に第１のマスク処理を行う。
【０１３３】
同様に、第２マスク処理部７７０は、マスクペア選択部７４０より選択されたマスクペアのうち、もう片方のマスク２を使用して、第１マスク処理部７６０で第１のマスク処理が行われたマスク済みダミー鍵に対して第２のマスク処理を行い、暗号鍵選択・格納部７５０に送る。
【０１３４】
図１９は、暗号処理装置７００の動作を示すフローチャートである。なお、ステップＳ５０１〜Ｓ５０７及びステップＳ５１７〜Ｓ５１９は、それぞれ、図８のステップＳ１０１〜Ｓ１０７及びステップＳ１０８〜Ｓ１１６と等しいため説明を省略する。なお、ステップＳ１０９〜Ｓ１１５の各処理は暗号処理としてステップＳ５１８に纏めて説明している。
【０１３５】
ステップＳ５０１〜Ｓ５０７の処理により暗号鍵記憶部３５０に必要数のマスク済みダミー鍵が格納されると、暗号鍵選択・格納部７５０は、内部のカウンタ７５１を０にセットする（ステップＳ５０８）。次に、暗号鍵選択・格納部７５０は、カウンタ７５１に示される暗号鍵記憶部３５０の位置に記憶されている暗号鍵であるマスク済みダミー鍵を読み出して第１マスク処理部７６０に送る（ステップＳ５０９）。
【０１３６】
次に、乱数発生部７１０は、暗号処理制御部からの制御に従って乱数Ｒ５を生成する（ステップＳ５１０）。生成された乱数Ｒ５は、暗号処理制御部の制御に従ってマスクペア読み出し位置記憶部７２０に格納される。
【０１３７】
次に、マスクペア選択部７４０は、マスクペア記憶部７３０に記憶されているマスクテーブル７３１の中から、マスクペア読み出し位置記憶部７２０に記憶されている乱数Ｒ５が示すエントリ位置のマスクペアを選択して読み出す（ステップＳ５１１）。マスクペア選択部７４０は、読み出したマスクペアのうち、片方のマスクを第１マスク処理部７６０へ、もう片方のマスクを第２マスク処理部７７０に送る。
【０１３８】
第１マスク処理部７６０は、暗号鍵選択・格納部７５０より送られてきた暗号鍵であるマスク済みダミー鍵に対して、マスクペア選択部７４０より送られてきたマスク１を用いてＸＯＲを計算することでマスク処理を行う（ステップＳ５１２）。第１マスク処理後のマスク済みダミー鍵は第２マスク処理部７７０に送られる。
【０１３９】
第２マスク処理部７７０は、第１マスク処理部７６０より送られてきた暗号鍵であるマスク済みダミー鍵に対して、マスクペア選択部７４０より送られてきたマスク２を用いてＸＯＲを計算することでマスク処理を行う（ステップＳ５１３）。第２マスク処理後のマスク済みダミー鍵は暗号鍵選択・格納部７５０に送られる。
【０１４０】
暗号鍵選択・格納部７５０は、第１、第２マスク処理部でそれぞれマスク処理が行われたマスク済みダミー鍵をカウンタ７５１が示す位置に再度格納する（ステップＳ５１４）。
【０１４１】
次に、暗号鍵選択・格納部７５０は、カウンタ７５１の値をインクリメントし（ステップＳ５１５）、カウンタ７５１の値ｊがｊ＜ｐ＋１かを判定する（ステップＳ５１６）。判定の結果、ｊ＜ｐ＋１であれば、暗号鍵記憶部２２０に記憶されている全ての暗号鍵について第１、第２のマスク処理が完了していないものとして、ステップＳ５０９に戻る。一方、ｊ＝ｐ＋１であれば、ステップＳ５１７に進む。
【０１４２】
以上のように、本実施の形態７に係る暗号処理装置において、暗号鍵生成部は、第１暗号鍵であるマスク済み秘密鍵をシャッフルした後、所定のマスクペアを用いてマスク処理を行うことで第２暗号鍵であるマスク済みダミー鍵を生成する。従って、秘密鍵のバイトが全て同一であっても、秘密鍵とは異なるダミー鍵を生成することが可能になる。
【０１４３】
以上各実施の形態で説明したように、本発明によれば、ハミングウエイトが等しい複数のダミー鍵を生成して正規演算とダミー演算とを混ぜて行う。従って、アタッカーがサイドチャネル解析を行っても正規演算とダミー演算とを判別することが困難となり、高いセキュリティを維持することが可能となる。
【０１４４】
また、本発明によれば、暗号処理のために用意された暗号鍵とダミー鍵とを用いて入力値（平文データ）が暗号処理されて格納される。そして、本発明の処理方法を採用することで、暗号鍵に基づく暗号化処理とダミー鍵を用いた暗号化処理とが同じように実行され、かつ、どの順序で秘密鍵を用いた処理が実行されているかを判別することが困難となる。従って、消費電力をモニタリングしたとしても、秘密鍵か否かを見出すことができないため、バイアスアタックに対して耐性を持たせることが可能となる。
【０１４５】
なお、上記説明した各部の機能はハードウェアによって実現されていても良いし、ハードウェアとソフトウェアの結合のより実現されていても良い。すなわち、上記各部の機能は、ＣＰＵ（Central Processing Unit）に所定のプログラムを実行させることで実現されていても良い。このような場合の暗号処理装置１０の構成の一例を図２０に示す。
【０１４６】
暗号処理装置１０では、プログラムを実効するＣＰＵ１１、生成した暗号鍵や処理結果等を記憶するＲＡＭ１２、秘密鍵を記憶する不揮発性メモリ１３、暗号処理を行う暗号コプロセッサ１４、乱数生成器１５、がバス１６を介して接続される構成を取る。
【０１４７】
ＣＰＵ１１は、所定のプログラムを実行することで、上述した暗号処理制御部、暗号鍵生成部、暗号鍵選択部、マスク処理部、マスク解除部、正解結果抽出部、暗号処理結果格納位置選択部、マスクペア選択部、暗号鍵選択・格納部、第１マスク処理部、第２マスク処理部、等の各種機能を実現する。
【０１４８】
ＲＡＭ１２は、上述した暗号鍵記憶部、暗号処理結果記憶部、マスク値記憶部、格納位置記憶部、暗号鍵読み出し位置記憶部、マスクペア読み出し位置記憶部、マスクペア記憶部等に対応する。また、不揮発性メモリ１３は、秘密鍵記憶部に対応し、暗号コプロセッサ１４は、暗号処理部に対応し、乱数生成器１５は乱数発生部にそれぞれ対応する。ＣＰＵ１１とプログラムの結合で実現される暗号鍵生成部は、所定のプログラムを実行して不揮発性メモリ１３へアクセスし、秘密鍵を読み出してＲＡＭ１２に格納する。また、ＣＰＵ１１とプログラムの結合で実現される暗号処理制御部は、暗号コプロセッサ１３に暗号処理を実行させる制御信号を、乱数発生器１４に乱数を発生させる制御信号を出力する。このように実現されていても良い。
【０１４９】
また、上記各部間のデータ転送において、多倍長のデータを移動させる場合には、個々のバイトやワードの転送順序はランダムに行うことが望ましい。当該制御は、暗号処理制御部によるデータ転送制御によって実現できる。
【０１５０】
また、上述したプログラムは、コンピュータ・システムがアクセス可能な様々な種類の記憶媒体に格納することが可能である。また、このプログラムは、通信媒体を介して伝達されることが可能である。ここで、記憶媒体には、例えば、フレキシブルディスク、ハードディスク、磁気ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＤＶＤ、ＲＯＭカートリッジ、バッテリバックアップ付きＲＡＭメモリカートリッジ、フラッシュメモリカートリッジ、不揮発性ＲＡＭカートリッジ等が含まれる。また、通信媒体には、電話回線等の有線通信媒体、マイクロ波回線等の無線通信媒体等が含まれ、インターネットも含まれる。
【０１５１】
また、上記暗号処理装置は、ＩＣカードに組み込まれて暗号処理機能付きＩＣカードとして実現されても良いし、基地局と無線通信を行うことでデータの送受信を行う携帯電話等の携帯端末に組み込まれて暗号処理機能付き移動体通信装置として実現されていても良い。
【０１５２】
その他、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。例えば、本発明は、秘密鍵が記憶された不揮発性メモリから前記秘密鍵を読み出し、前記読み出した秘密鍵と同一のハミングウエイトを有する複数のダミー鍵を生成し、前記秘密鍵と前記複数のダミー鍵とを用いて暗号処理を行う、暗号処理方法とすることも可能である。また、秘密鍵が記憶された不揮発性メモリにアクセスして前記秘密鍵を読み出す読出工程と、前記読み出した秘密鍵と同一のハミングウエイトを有する複数のダミー鍵を生成する生成工程と、前記秘密鍵と前記複数のダミー鍵とを用いて暗号コプロセッサに暗号処理を行わせる制御信号を出力する制御信号出力工程と、を情報処理装置（ＣＰＵ）に実行させるプログラムとすることも可能である。
【符号の説明】
【０１５３】
１１  ＣＰＵ                              １２  ＲＡＭ
１３  不揮発性メモリ                      １４  暗号コプロセッサ
１５  乱数生成器                          １６  ハス
１１０  秘密鍵記憶部                      １２０  ダミー鍵生成部
１３０  暗号処理部                        ２００  暗号処理装置
２１０  暗号鍵生成部                      ２２０  暗号鍵記憶部
２３０  暗号鍵選択部                      ３１０  乱数発生部
３２０  マスク値記憶部                    ３２０  マスク値記憶部
３３０  マスク処理部                      ３４０  暗号鍵生成部
３５０  暗号鍵記憶部                      ３６０  暗号鍵選択部
３７０  マスク解除部                      ３８０  暗号処理結果記憶部
４００  暗号処理装置                      ４１０  乱数発生部
４２０  格納位置記憶部                    ４３０  暗号鍵生成部
４４０  正解結果抽出部                    ４５０  暗号処理制御部
５１０  乱数発生部                        ５２０  位置記憶部
５３０  暗号鍵選択部                      ５４０  暗号処理結果格納位置選択部
６１０  乱数発生部                        ６２０  反転フラグ記憶部
６３０  第１反転回路                      ６４０  第２反転回路
６５０  第３反転回路                      ７１０  乱数発生部
７２０  マスクペア読み出し位置記憶部      ７３０  マスクペア記憶部
７３１  マスク値テーブル                  ７４０  マスクペア選択部
７５０  暗号鍵選択・格納部                ７５１    カウンタ
７６０  第１マスク処理部                  ７７０    第２マスク処理部
１３１０  鍵レジスタ                      １３２０  入力レジスタ
１３３０  鍵拡張回路                      １３４０  暗号処理回路
１３５０  出力レジスタ
【図１】
2013126078.tif 000003
【図２】
2013126078.tif 000004
【図３】
2013126078.tif 000005
【図４】
2013126078.tif 000006
【図５】
2013126078.tif 000007
【図６】
2013126078.tif 000008
【図７】
2013126078.tif 000009
【図８】
2013126078.tif 000010
【図９】
2013126078.tif 000011
【図１０】
2013126078.tif 000012
【図１１】
2013126078.tif 000013
【図１２】
2013126078.tif 000014
【図１３】
2013126078.tif 000015
【図１４】
2013126078.tif 000016
【図１５】
2013126078.tif 000017
【図１６】
2013126078.tif 000018
【図１７】
2013126078.tif 000019
【図１８】
2013126078.tif 000020
【図１９】
2013126078.tif 000021
【図２０】
2013126078.tif 000022