(57)【要約】  【課題】縮退故障発生の新たな原因となる要素に対応でき、ハードウェアコストを抑え、また暗号処理時間の増大を抑えた故障利用解析の対策を有する暗号回路を提供することを目的とする。  【解決手段】平文および秘密鍵４Ａを入力し、秘密鍵４Ａから得たＲ個の部分鍵Ｋｎを入力して平文に対してＲ回繰り返しラウンド演算を実行することにより平文を暗号化する秘密鍵暗号方式の暗号回路であって、平文のラウンド演算後の値を格納するレジスタ４Ｇ、４Ｈと、レジスタ４Ｇ、４Ｈの値より縮退故障の有無を判定する故障検査回路１Ａと、その検査結果に縮退故障が存在する場合に秘密鍵４Ａを無効化する回路１Ｂとを備えている。【選択図】  図１
2005340892.tif 000002
【特許請求の範囲】
【請求項１】
暗号化対象および秘密鍵を入力し、前記秘密鍵に対してＲ回部分鍵演算を実行することによってＲ個の部分鍵を取得し、前記Ｒ個の部分鍵を入力して前記暗号化対象に対してＲ回繰り返しラウンド演算を実行することにより前記暗号化対象を暗号化する秘密鍵暗号方式の暗号回路であって、
前記暗号化対象の前記ラウンド演算後の値を格納するレジスタと、このレジスタの値により縮退故障の有無を判定する故障検査回路と、前記故障検査回路の検査結果を入力して前記検査結果に前記縮退故障が存在するものである場合に前記秘密鍵を無効化する回路とを備えた暗号回路。
【請求項２】
秘密鍵を無効化する回路に代えて、暗号回路の動作を制御する回路により暗号回路の処理を停止する回路を有する請求項１記載の暗号回路。
【請求項３】
故障検査回路は、ラウンド演算後の値を格納するレジスタの格納前の値と格納後の値より、前記レジスタの縮退故障の有無を判定する請求項１または請求項２記載の暗号回路。
【請求項４】
故障検査回路は、前もって用意した検査用のパターンに対して実行されたラウンド演算の終了後のレジスタの値により故障の有無を判定する請求項１または請求項２記載の暗号回路。
【請求項５】
故障検査回路は、すべてのデータに対する暗号処理において、故障の有無を判定する請求項１から請求項４のいずれか一項記載の暗号回路。
【請求項６】
故障検査回路は、連続するＮ個のデータに対する暗号処理において、Ｍ個（Ｍ＜Ｎ）のデータに対して故障の有無を判定する請求項１から請求項４のいずれか一項記載の暗号回路。
【請求項７】
故障検査回路は、Ｒ回のラウンド演算を開始する前とＲ回のラウンド演算を終了した後に故障の有無を判定する請求項１、請求項２、請求項３、請求項５または請求項６記載の暗号回路。
【請求項８】
故障検査回路は、Ｒ回すべてのラウンド演算において故障の有無を判定する請求項１、請求項２、請求項３、請求項５または請求項６記載の暗号回路。
【請求項９】
故障検査回路は、Ｒ回のラウンド演算のうち、Ｎ（Ｎ＜Ｒ）回の前記ラウンド演算において故障の有無を判定する請求項１、請求項２、請求項３、請求項５または請求項６記載の暗号回路。
【請求項１０】
故障検査回路は、検査用パターンに対して実行するラウンド演算のラウンド演算数を、暗号処理規定の前記ラウンド演算数Ｒよりｎ回減らしたＲ−ｎ回実行し、得られた値により故障の有無を判定する請求項４から請求項６のいずれか一項記載の暗号回路。
【請求項１１】
故障検査回路は、検査用パターンに対して実行するラウンド演算のラウンド演算数を、暗号処理規定の前記ラウンド演算数Ｒよりｎ回増やしたＲ＋ｎ回実行し、得られた値により故障の有無を判定する請求項４から請求項６のいずれか一項記載の暗号回路。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、ＩＣカードやメディアカードなどのカードや情報処理端末装置等（以下、機密処理装置という）の内部に実装され、その機密処理装置の内部に記録される機密情報の保護を図る回路、特に近年脅威となっている故障利用解析に対抗する対抗手段を有する暗号回路に関するものである。
【背景技術】
【０００２】
近年、機密処理装置はクレジットカードや電子マネーといった金融・流通分野などの各業態での利用が広がり、情報化社会を支える上で重要な役割を果たすようになってきた。ところが、悪意を持った攻撃者により機密処理装置内部に記憶される機密情報が外部へ漏洩されないことがその利用上必須となる。
【０００３】
しかし、これらの機密処理装置内の機密情報を不正に取得する方法がいくつかすでに報告されており、それらはプローブ解析、電力解析、およびタイミング解析と呼ばれている。そのため、これらの解析手法への対抗手段を確立させることは、機密処理装置の利用を考える上で必要不可欠な課題となっている。
【０００４】
特にこれらの解析手法の中で故障利用解析と呼ばれる、機密処理装置内に実装される暗号処理を実現する暗号回路内に、故意に物理的な故障を発生させ、故障のない状態における暗号回路内の信号線の値と、故障発生時の暗号回路内の信号線の値の差を利用することにより、機密処理装置に実装される機密情報である秘密鍵を推定する解析方法が問題となっている（非特許文献１参照）。
【０００５】
この故障利用解析には、故障非差分攻撃と故障差分攻撃と呼ばれる二種類の攻撃方法がある。故障非差分攻撃では、暗号処理を実現する暗号回路において暗号処理過程の値を格納するために用いるレジスタ内のフリップフロップに、その値が常に０（あるいは１）となる０縮退故障（１の場合は１縮退故障）を故意に発生させ、故障のない状態の回路の値と故障発生時の回路の値を利用して秘密鍵を解読することができる。一方、故障差分攻撃では、常に値が０や１になる故障ではなく、一時的に値が０や１に固定される故障を回路内に発生させ、さらにその故障を暗号回路のレジスタ内のフリップフロップや、暗号処理を行うために必要な演算を行う組み合わせ回路に発生させることにより解析を行う。
【０００６】
ところが故障差分攻撃では、その攻撃において一時的な縮退故障を攻撃者の意図した期間のみに暗号回路内のフリップフロップや組み合わせ回路に発生させる必要がある。また、故障利用解析では秘密鍵情報を取得するために、５０〜２００個程度のデータに対して暗号処理を行う必要があるとされている。
【０００７】
故障利用解析に対する従来の対応策としては、故障発生の原因となる熱や電圧を検知する回路を、機密処理装置上の暗号回路および秘密鍵情報を含むチップ内に設置する方法がある。この方法では、熱や電圧といった故障発生の原因が暗号回路および秘密鍵情報を含むチップに対して加えられた場合、検知回路によりこれらの故障発生の原因を検知し、チップ内部の回路の動作を停止する、あるいはその使用を禁止する。
【０００８】
また検知回路を使用しない方法としては、図２０に示すように、暗号回路において同一の二つの暗号処理を利用するか、または図２１に示すように暗号処理に加え復号処理を利用する方法がある（特許文献１参照）。図２０における方法では、暗号処理を行う対象である平文２０Ａに対し、同一の処理を行う暗号処理２０Ｃと暗号処理２０Ｄを用いて、平文から暗号文を生成するための秘密鍵２０Ｂにより、二つの暗号処理の出力である暗号文２０Ｅと暗号文２０Ｆを得る。そして、これら二つの暗号文を比較２０Ｇにより比較する。もし比較結果２０Ｈが異なる場合は、故障の影響によりいずれかの暗号文が故障のない状態とは異なる値を持った暗号文となっていることが分かるため、暗号処理２０Ｃおよび暗号処理２０Ｄを実現する暗号回路のいずれかに故障が存在すると判定する。また図２１における方法では、暗号処理を行う対象である平文２１Ａに対し、平文から暗号文を生成するための秘密鍵２１Ｂにより暗号処理２１Ｃを行い、暗号文２１Ｄを得る。そして暗号文２１Ｄに対し秘密鍵２１Ｂにより再び復号処理２１Ｅを行い、平文２１Ｆを得る。この平文２１Ｆを暗号処理を行う前の平文２１Ａと比較２１Ｇにより比較し、比較結果２１Ｈが異なった場合、故障の影響により暗号処理２１Ｃが正しく行われていないか、もしくは復号処理２１Ｅが正しく行われていないことが分かるため、それらの処理を実現するいずれかの暗号回路内において故障が存在すると判定する。
【特許文献１】特開平１０−１５４９７６号公報
【非特許文献１】“平成１１年度  スマートカードの安全性に関する調査  調査報告書”、[online]、[平成１５年１０月２７日検索]、インターネットURL:http://www.ipa.go.jp/security/fy11/report/contents/crypto/crypto/report/SmartCard/sc.html
【発明の開示】
【発明が解決しようとする課題】
【０００９】
縮退故障を発生させるために加えられる熱や電圧を検知する回路を用いた場合、電圧や熱以外の故障発生の原因となる新たな要素が利用された場合、それらの要素を検知できないという問題がある。
【００１０】
また上記特許文献１の発明においては、図２０に示すように同一の平文に対し同一の秘密鍵により暗号を行い、同じ暗号文が出力するかどうかを確認するため、二つの暗号回路を用いる必要があり、これによるハードウェアコストの増大や、二つの暗号回路において同一の箇所に縮退故障を発生させた場合、対応できないといった問題がある。
【００１１】
上記特許文献１の発明においては、図２１に示すように暗号化された暗号文を再び同一の秘密鍵により復号し、同じ平文が生成されるかを確認する方法も存在するが、この場合同一の平文に対し暗号処理に加え復号処理も行う必要があるため、暗号処理にかかる時間が増大するという問題がある。
【００１２】
そこで本発明では、故障発生の原因に依存することなく故障を検出可能とし、同一の暗号回路を二つ使用する場合に比べハードウェア増大を抑えた形で実現することができ、または故障検査による処理時間の増大を抑えた形で実現することができる暗号回路を提供することを目的とする。
【００１３】
このため、本発明では、暗号回路の信号線の値を利用することにより故障の有無を判定する故障検査回路を暗号回路内部に設置し、それにより故障発生の原因に依存することなく故障を検出可能とする。またそれらの故障検査回路は、同一の暗号回路を二つ使用する場合に比べハードウェアの増大を抑えた形で実現する、もしくは故障検査による処理時間の増大を抑えた形で実現する。
【課題を解決するための手段】
【００１４】
上記のような問題を解決するため、本発明では暗号回路において暗号処理段階の値を格納するために用いるレジスタの値を利用することにより故障を検出する検査回路を暗号回路内に設置する。ここで格納される値としては、平文を暗号化もしくは復号化するための秘密鍵により平文を暗号文に暗号化する秘密鍵暗号方式の暗号アルゴリズムにおいて、秘密鍵に対してＲ回部分鍵演算を実行することによって得られるＲ個の部分鍵を入力とし、平文を暗号化するために平文に対してＲ回繰り返し実行されるラウンド演算における各ラウンド演算後の値を考える。暗号回路内に設置する故障検査回路は、ラウンド演算後の値を格納するレジスタの値を用いて検査を行うため、暗号回路を二つ使用しそれらの出力を比較する場合に比べハードウェアコストを抑えた形で検査が可能となり、もしくは暗号処理に加え復号処理を行う場合に比べ、暗号処理時間の増大を抑えた形で検査が可能となる。そして故障検査回路から出力される判定結果により、故障が存在すると分かった場合は秘密鍵情報を無効化する回路に故障が存在することを知らせ、秘密鍵情報を無効化する、もしくは暗号回路の動作を制御する回路に故障が存在することを知らせ、暗号回路の処理を停止することにより秘密鍵情報の漏洩を防ぐ。
【００１５】
請求項１における発明は、暗号回路内において秘密鍵を保持するレジスタと、ラウンド演算後の値を格納するレジスタの値を用い、故障の有無を判定するための判定処理期間においてラウンド演算後の値を格納するレジスタに０縮退故障または１縮退故障が存在するかどうかを判定する故障検査回路と、故障検査回路から出力される検査結果からラウンド演算後の値を格納するレジスタに縮退故障が存在することが確認された場合、秘密鍵を保持するレジスタの値を無効化する回路を備えることを特徴とする暗号回路である。
【００１６】
請求項２における発明は、暗号回路内において秘密鍵を保持するレジスタと、ラウンド演算後の値を格納するレジスタの値を用い、故障の有無を判定するための判定処理期間においてラウンド演算後の値を格納するレジスタの０または１縮退故障が存在するかどうかを判定する故障検査回路と、故障検査回路から出力される検査結果からラウンド演算後の値を格納するレジスタに縮退故障が存在することが確認された場合、暗号回路の動作を制御する回路により暗号回路の処理を停止する回路を備えることを特徴とする暗号回路である。
【００１７】
請求項３における発明は、請求項１または請求項２に記載のいずれかの暗号回路において、ラウンド演算後の値を格納するレジスタの格納前の値と格納後の値の両方を用いることにより、故障の有無を判定するための判定処理期間をラウンド演算と並列に実行して、ラウンド演算後の値を格納するレジスタの０または１縮退故障が存在するかどうかを判定できるように故障検査回路を構成した暗号回路である。
【００１８】
請求項４における発明は、請求項１または請求項２に記載のいずれかの暗号回路において、故障の有無を判定するために前もって用意した検査用のパターンを用いることにより、故障の有無を判定するための判定処理期間において、ラウンド演算後の値を格納するレジスタの０または１縮退故障に加え、データに対しラウンド演算を行う組み合わせ回路における０または１縮退故障の有無を判定できるように故障検査回路を構成した暗号回路である。
【００１９】
請求項５における発明では、請求項１から請求項４のいずれかに記載の暗号回路において、すべてのデータに対する暗号処理において故障の有無を判定するための判定処理期間を設け、その期間内に実行される故障検査の判定結果により縮退故障が存在すると分かった場合は秘密鍵を無効化する、もしくは暗号回路の処理を停止することにより故障利用解析を防ぐ。
【００２０】
請求項６における発明では、請求項１から請求項４のいずれかに記載の暗号回路において、規定数Ｎを設定しておき、連続するＮ個のデータに対する暗号処理のうちＭ個（Ｍ＜Ｎ）のデータに対する暗号処理において故障の有無を判定するための判定処理期間を設け、その期間内に実行される故障検査の判定結果により縮退故障が存在すると分かった場合は秘密鍵を無効化する、もしくは暗号回路の処理を停止することにより故障利用解析を防ぐ。
【００２１】
請求項７における発明では、請求項１から請求項３および請求項５から請求項６のいずれかに記載の暗号回路において、検査を実施する各データに対し、暗号処理規定のＲ回のラウンド演算を開始する前とＲ回のラウンド演算を終了した後に故障の有無を判定するための判定処理期間を設け、その期間内に実行される故障検査の判定結果により縮退故障が存在すると分かった場合は秘密鍵を無効化する、もしくは暗号回路の処理を停止することにより故障利用解析を防ぐ。
【００２２】
請求項８における発明では、請求項１から請求項３および請求項５から請求項６のいずれかに記載の暗号回路において、検査を実施する各データに対し、暗号処理規定のＲ回すべてのラウンド演算において故障の有無を判定するための判定処理期間を設け、その期間内に実行される故障検査の判定結果により縮退故障が存在すると分かった場合は秘密鍵を無効化する、もしくは暗号回路の処理を停止することにより故障利用解析を防ぐ。
【００２３】
請求項９における発明では、請求項１から請求項３および請求項５から請求項６のいずれかに記載の暗号回路において、検査を実施する各データに対し、規定のラウンド数Ｒを持つ暗号処理の下で規定数Ｎ（Ｎ＜Ｒ）を設定し、Ｒ回のラウンド演算のうち、Ｎ回のラウンド演算において故障の有無を判定するための判定処理期間を設け、その期間内に実行される故障検査の判定結果により縮退故障が存在すると分かった場合は秘密鍵を無効化する、もしくは暗号回路の処理を停止することにより故障利用解析を防ぐ。
【００２４】
請求項１０における発明では、請求項４から請求項６のいずれかに記載の暗号回路において、検査を実施する各データに対し、故障の有無を判定するための判定処理期間において、故障の有無を判定するために用いる検査用パターンに対し実行するラウンド数を、暗号処理規定のラウンド数Ｒよりｎ回減らしたＲ−ｎ回実行し、縮退故障が存在すると分かった場合は秘密鍵を無効化する、もしくは暗号回路の処理を停止することにより故障利用解析を防ぐ。
【００２５】
請求項１１における発明では、請求項４から請求項６のいずれかに記載の暗号回路において、検査を実施する各データに対し、故障の有無を判定するための判定処理期間において、故障の有無を判定するために用いる検査用パターンに対し実行するラウンド数を、暗号処理規定のラウンド数Ｒよりｎ回増やしたＲ＋ｎ回実行し、縮退故障が存在すると分かった場合は秘密鍵を無効化する、もしくは暗号回路の処理を停止することにより故障利用解析を防ぐ。
【発明の効果】
【００２６】
以上のように、ラウンド演算後の値を格納するレジスタの値を利用して縮退故障の検出を行う検査回路を暗号回路内部に設置し、この回路の検査結果により鍵情報を無効化する、もしくは暗号回路の処理を停止することで電圧や熱以外の故障発生の原因となる新たな要素が利用された場合にも対応でき、またハードウェアの増大を抑えた形、もしくは暗号処理と並列に故障の有無を判定することにより、処理時間の増大を抑えた形での故障利用解析の対策が可能となる。
【発明を実施するための最良の形態】
【００２７】
図２は本発明で対象とする秘密鍵暗号方式のアルゴリズムを示す図である。図２において暗号回路２Ａは、暗号化を行う対象である平文２Ｂ、および平文２Ｂを暗号化するための鍵である秘密鍵２Ｃを入力とし、暗号アルゴリズムで規定される所定の演算を行い、暗号文２Ｄを出力する。
【００２８】
図３は暗号回路２Ａで実現される秘密鍵暗号方式のアルゴリズムの一例として、ＤＥＳ（Ｄａｔａ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）と呼ばれるアルゴリズムを図示したものである。図３において図２と同じ構成要素については同じ符号を用い、説明を省略する。秘密鍵暗号方式のアルゴリズムＤＥＳにおいては、平文２Ｂに対し初期転置３Ａを行った後、データを上位３２ビット、および下位３２ビットに分割して、それぞれの分割されたデータに対して１６段のラウンド演算を繰り返す。また各ラウンド演算では秘密鍵２Ｃから部分鍵演算３Ｂにより生成される部分鍵を利用する。なお部分鍵演算ｎにより生成された部分鍵ｎは以後Ｋｎと表す。そして１６段のラウンド演算終了後、最終転置３Ｃを行い、暗号文２Ｄを得る。
【００２９】
図４はアルゴリズムＤＥＳにおけるラウンド演算を行う回路を図示したものであり、この回路により秘密鍵４Ａから部分鍵演算回路４Ｂを用いて生成した部分鍵Ｋｎにより、ｎ−１番目のラウンド演算後のデータＬｎ−１およびＲｎ−１からｎ番目のラウンド演算後のデータＬｎおよびＲｎを得ることができる。アルゴリズムＤＥＳにおいてＬｎおよびＲｎは、Ｒｎ−１、Ｋｎを入力とするＦ関数と呼ばれる関数を用いて以下の式で与えられる。
【００３０】
Ｌｎ＝Ｒｎ−１
Ｒｎ＝Ｌｎ−１  ＸＯＲ  Ｆ（Ｒｎ−１、Ｋｎ）
ここで、図４における回路においてＦ関数であるＦ（Ｒｎ−１、Ｋｎ）はＦ関数４Ｃとして構成され、ＸＯＲ（排他的論理和）はＸＯＲ４Ｄにより構成される。またｎ−１番目のラウンド演算後のデータＬｎ−１はレジスタ４Ｅに、Ｒｎ−１はレジスタ４Ｆに格納され、ｎ番目のラウンド演算後のデータＬｎはレジスタ４Ｇに、Ｒｎはレジスタ４Ｈに格納される。ただし図５に示すように、ｎ−１番目のラウンド演算後のデータＬｎ−１を格納するレジスタ４Ｅ、およびＲｎ−１を格納するレジスタ４Ｆをｎ番目のラウンド演算後のデータＬｎやＲｎを格納するレジスタとして共有することもできる。Ｆ関数４Ｃ、初期転置３Ａ、部分鍵演算３Ｂ、および最終転置３Ｃの詳細については、アルゴリズムＤＥＳ自体が公開された周知のアルゴリズムであるため、ここではその説明を割愛する。
【００３１】
以下、本発明の実施の形態において、暗号回路２ＡはアルゴリズムＤＥＳを改良して故障利用解析に対する対抗手段を有するように実装したものである。
（実施の形態１）
図１は本発明の第１の実施の形態における故障検出および秘密鍵無効化の機能を有するラウンド演算の概略を示す図である。図１において、図２、図３および図４と同じ構成要素については同じ符号を用い、説明を省略する。図１における回路は、図４において示したアルゴリズムＤＥＳのラウンド演算を実現する回路に加え、故障の有無を判定するための判定処理期間においてラウンド演算後の値を格納するレジスタ４Ｇ、４Ｈの値を入力とし、それらの値により縮退故障の有無を判定する故障検査回路１Ａ、および故障検査回路１Ａから出力される検査結果により、レジスタ４Ｇ、４Ｈを構成するフリップフロップ内に縮退故障が存在する場合は秘密鍵無効化信号により暗号回路内の秘密鍵４Ａを無効化する秘密鍵無効化回路１Ｂを追加したものから構成される。なお図１では、ｎ番目のラウンド演算後のデータＬｎを格納するレジスタ４Ｇ、およびＲｎを格納するレジスタ４Ｈにおけるフリップフロップの縮退故障を検出するものとし、この場合故障検査回路１Ａの入力には、レジスタ４Ｇの値およびレジスタ４Ｈの値が出力される。そしてレジスタ４Ｇおよびレジスタ４Ｈに縮退故障が存在することが分かった場合、秘密鍵４Ａが無効化される。無効化の一例としては、秘密鍵４Ａが格納されるレジスタの値をリセットする方法がある。またレジスタ４Ｇおよびレジスタ４Ｈ以外のレジスタにおいて縮退故障が存在するかどうかを調べる場合は、それらのレジスタの値を故障検査回路１Ａに入力し、その値を用いて故障検査を行うように回路を構成すればよい。また図５に示すように、ｎ−１番目のラウンド演算後のデータＬｎ−１を格納するレジスタ４ＥおよびＲｎ−１を格納するレジスタ４Ｆを、ｎ番目のラウンド演算後のデータＬｎやＲｎを格納するレジスタとして共有する場合も同様に、共有するレジスタ４Ｅおよびレジスタ４Ｆの値を用いて故障検査を行い、秘密鍵４Ａを無効化するように構成すればよい。
【００３２】
図１におけるラウンド演算を行う回路は、図６のように構成することができる。この回路においては、レジスタ４Ｇおよびレジスタ４Ｈへの入力にセレクタ６Ａを挿入し、ラウンド演算後の値のＬｎおよびＲｎをレジスタ４Ｇおよびレジスタ４Ｈに格納するか、もしくは検査用の入力を設定するかを選択することができる。また、レジスタ４Ｇおよびレジスタ４Ｈの出力は全ビットのＡＮＤ６Ｂに接続され、さらに全ビットのＡＮＤ６Ｂの出力を秘密鍵無効化回路１Ｂに接続する。この回路においてレジスタ４Ｇおよびレジスタ４Ｈの値が０に固定される故障である０縮退故障を検出する場合は、故障の有無を判定する判定処理期間においてセレクタ６Ａを用いて、レジスタ４Ｇおよびレジスタ４Ｈの全ビットに１を設定する。このような設定においては、レジスタ４Ｇおよびレジスタ４Ｈに０縮退故障が存在しない場合は全ビットのＡＮＤ６Ｂの出力は１となるが、いずれかのフリップフロップに０縮退故障が存在する場合は、このフリップフロップの値により出力が０となる。したがって、全ビットのＡＮＤ６Ｂの出力に接続された秘密鍵無効化回路１Ｂは、この入力に従い縮退故障が存在する場合に秘密鍵を無効化することができる。レジスタ４Ｇおよびレジスタ４Ｈにおける値が１に固定される１縮退故障を検出する場合は、セレクタ６Ａを用いてレジスタ４Ｇおよびレジスタ４Ｈの全ビットに０を設定し、全ビットのＡＮＤ６Ｂの代わりに全ビットのＯＲを使用すればよい。この場合、レジスタ４Ｇおよびレジスタ４Ｈに１縮退故障が存在しなければ全ビットのＯＲの出力は０となるが、いずれかのビットに１縮退故障が存在する場合は１となる。したがってこの出力を用いることにより、０縮退故障の場合と同様に秘密鍵を無効化できる。また、Ｌｎを格納するレジスタ４ＧとＲｎを格納するレジスタ４Ｈ以外のレジスタに存在する縮退故障を検出する場合は、セレクタ６Ａと同様のセレクタをその入力に設置し、それらのレジスタの全ビットに１または０を設定可能とし、さらにレジスタの値を全ビットのＡＮＤまたは全ビットのＯＲに接続することにより縮退故障を検出し秘密鍵を無効化することができる。
【００３３】
また図１におけるラウンド演算を行う回路は、図７に示すように、レジスタ４Ｇの値をシフト動作によりシリアル出力可能なレジスタ７Ａと、レジスタ４Ｇの値をコピー可能なレジスタ７Ｂ、および比較回路７Ｃを用いることにより故障を検出することもできる。もしＬｎを格納するレジスタ４Ｇにおいて縮退故障が存在する場合、例として１縮退故障を考えると、レジスタ４Ｇからシリアル出力されるデータはあるビット以降がすべて１に固定されてしまう。この場合レジスタ７Ａとレジスタ７Ｂとは値が異なるため、比較回路７Ｃにより比較を行い、故障を検出できる。レジスタ４Ｇに０縮退故障が存在する場合も同様である。また、レジスタ４Ｇ以外のレジスタを検査の対象とした場合も、値をシリアル出力させるレジスタと値をコピーするレジスタを用いることにより、同様に故障が検出可能である。
【００３４】
以上のように、ラウンド演算後の値を格納するレジスタの値を利用することにより、電圧や熱以外の故障発生の原因となる新たな要素が利用された場合にも対応できる。また暗号回路を二つ使用する場合に比べハードウェア量を抑えた形で故障の検出が可能となる。
（実施の形態２）
図８は第２の実施の形態における秘密鍵無効化回路の構成を示す図である。第１の実施の形態における暗号回路で用いた秘密鍵無効化回路１Ｂは、図１、図６および図７に示すように秘密鍵無効化信号を出力して秘密鍵４Ａを無効化するように構成していたが、第２の実施の形態における暗号回路においては、図８（ａ）に示すように秘密鍵無効化信号を出力する代わりに、図８（ｂ）に示すように暗号回路停止信号を出力して、故障が存在する場合は暗号回路の動作を制御する回路に対して故障が存在することを知らせ、暗号回路の動作を停止するように構成する。
（実施の形態３）
図９は本発明の第３の実施の形態における故障検出および秘密鍵無効化の機能を有するラウンド演算の内容を示す図である。図９において図１、図２、図３および図４と同じ構成要素については同じ符号を用い、説明を省略する。この回路においては、ハミング重みを算出するハミング重み算出回路９Ａを二つ使用し、それぞれに対しＲｎのレジスタ４Ｈへの設定前の値と、レジスタ４Ｈへの設定後の値を入力する。ここでハミング重みとは、ある値を２進数で表したときに２進数の中で１となるビットの個数を表したものである。そして、二つのハミング重み算出回路９Ａの出力を比較回路９Ｂにより比較を行い、その出力を秘密鍵無効化回路１Ｂに入力することにより、秘密鍵４Ａの無効化を行う。なおこの回路では、ｎ番目のラウンド演算後のデータＲｎを格納するレジスタ４Ｈに存在する縮退故障を検査の対象としている。
【００３５】
このような回路構成を用いた場合、もしレジスタ４Ｈのいずれかのビットに０または１縮退故障が存在すると、その故障の影響によりレジスタに設定する値のハミング重みがレジスタ４Ｈへの設定前後で変わる場合がある。例えば、０縮退故障を起こしているビットが存在し、さらにこのビットに１を設定しようとした場合、レジスタ４Ｈへの設定前と設定後ではこのビットの０縮退故障の影響によりハミング重みが１減少することになる。したがって、Ｒｎのレジスタ４Ｈへの設定前後のハミング重みを比較回路９Ｂにより比較することで、縮退故障の有無を判定することができる。ただし、０縮退故障を起こしているビットが存在し、このビットに０を設定しようとした場合は、レジスタ４Ｈへの設定前後でハミング重みが変わらず故障を見逃すことになる。しかし、この場合の見逃しの確率は１／２であるが、故障利用解析を行うためには５０〜２００のデータに対する演算が必要となるため、これらすべてのデータにおいて故障の見逃しとなる確率は低いと考えられる。
【００３６】
以上のような構成を用いた場合、レジスタ４Ｈへの設定前のハミング重みと設定後のハミング重みはラウンド演算を停止することなく算出可能なので、ラウンド演算を行いながら故障検査が可能となる。またＲｎを格納するレジスタ４Ｈ以外のレジスタの縮退故障を検査する場合も同様に、それらのレジスタへの設定前後にハミング重みを算出するように回路を構成すればよい。
【００３７】
なお、図９における回路においては、秘密鍵無効化回路１Ｂから秘密鍵無効化信号を出力して秘密鍵４Ａを無効化する代わりに、秘密鍵無効化回路１Ｂから暗号回路停止信号を出力して、故障が存在する場合は暗号回路の動作を制御する回路に対して故障が存在することを知らせ、暗号回路の動作を停止することにより秘密鍵の漏洩を防ぐこともできる。
【００３８】
以上のようにラウンド演算後の値を格納するレジスタにおいてレジスタへの設定後の値に加え、レジスタへの設定前の値も利用することにより、ラウンド演算実行中に縮退故障が検出可能となり、暗号処理時間の増大を抑えた形で故障利用解析への対策を行うことができる。
（実施の形態４）
図１０は本発明の第４の実施の形態における故障検出および秘密鍵無効化の機能を有するラウンド演算の内容を示す図である。図１０において、図１、図２、図３および図４と同じ構成要素については同じ符号を用い、説明を省略する。この回路においては、ラウンド演算開始前の値のＬ０およびＲ０を格納するレジスタ１０Ｃおよびレジスタ１０Ｄに、ラウンド演算開始前のデータを格納するか、もしくは内部メモリ１０Ａに格納された検査用パターンを設定するかを選択するセレクタ１０Ｂを用意し、またすべてのラウンド演算終了後の値のＬ１６およびＲ１６を格納するためのレジスタ１０Ｅおよびレジスタ１０Ｆの値を、内部メモリ１０Ｇに格納された期待値と比較回路１０Ｈにより比較を行うように構成する。そしてこの構成により、故障の有無を判定するための判定処理期間において、内部メモリ１０Ａに格納された検査用パターンをセレクタ１０Ｂを用いてラウンド演算開始前の値のＬ０およびＲ０を格納するレジスタ１０Ｃとレジスタ１０Ｄに設定し、設定後に通常の平文に対するラウンド演算と同様に、検査用パターンに対してラウンド演算を実行する。すべてのラウンド演算が終了すると、レジスタ１０Ｅおよびレジスタ１０Ｆに格納された値と、前もって内部メモリ１０Ｇに格納した期待値とを比較回路１０Ｈを用いて比較する。もし、ラウンド演算後の値を格納するレジスタ、およびラウンド演算を行う組み合わせ回路に縮退故障が存在した場合は、それらの故障の影響によりレジスタ１０Ｅおよびレジスタ１０Ｆに格納された値が期待値と異なっている場合がある。したがって、比較回路１０Ｈの出力を秘密鍵無効化回路１Ｂに接続することにより、秘密鍵無効化信号を出力することができる。なお、この方法ではラウンド演算を行う際に使用する部分鍵Ｋｉは、秘密鍵４Ａから生成されるものではなく、検査用に前もって用意したデータを使用することもできる。
【００３９】
またこの方法においては、図１１に示すように全ラウンド演算終了後のデータの値が全ビット１となるような検査用パターンを前もって作成しておけば、期待値を図１０のように内部メモリ１０Ｇに格納することなく、全ラウンド演算終了後の値に対して全ビットのＡＮＤ１１Ａを用いることにより縮退故障を検出できる。この場合、レジスタおよび組み合わせ回路に縮退故障が存在しないときはレジスタ１０Ｅおよびレジスタ１０Ｆの値がすべて１となるが、故障が存在する場合はその値が１とならないビットがレジスタ１０Ｅまたはレジスタ１０Ｆのいずれかのビットに現れる。
【００４０】
さらに、図１２に示すように全ラウンド演算終了後の値を格納するレジスタ１０Ｅおよびレジスタ１０Ｆの値が等しくなるような検査用パターンを前もって作成しておけば、図１０のように期待値を内部メモリ１０Ｇに格納することなく、全ラウンド演算終了後にレジスタ１０Ｅとレジスタ１０Ｆの値を比較回路１２Ａにより比較すれば縮退故障を検出できる。
【００４１】
なお、図１０、図１１および図１２における回路においては、秘密鍵無効化回路１Ｂから秘密鍵無効化信号を出力して秘密鍵４Ａを無効化する代わりに、秘密鍵無効化回路１Ｂから暗号回路停止信号を出力して、故障が存在する場合は暗号回路の動作を制御する回路に対して故障が存在することを知らせ、暗号回路の動作を停止することにより秘密鍵の漏洩を防ぐこともできる。
【００４２】
以上のように、故障検査用のパターンを前もって用意し、このパターンに対してラウンド演算を実施することにより、ラウンド演算後の値を格納するレジスタに存在する縮退故障に加え、ラウンド演算を行う組み合わせ回路の縮退故障がともに検出可能となる。
（実施の形態５）
図１３は本発明の第５の実施の形態における暗号回路２Ａの故障検査の実行期間を示す図である。本発明の第１の実施の形態から第４の実施の形態のいずれかにおいて、アルゴリズムＤＥＳを実現し、かつ故障利用解析への対抗手段を有する暗号回路２Ａは、平文２Ｂを秘密鍵２Ｃにより暗号化し暗号文２Ｄを得る暗号処理１３Ａを実行する際に、図１３に示すようにすべての平文２Ｂに対する暗号処理１３Ａにおいて故障の有無を判定するための判定処理期間を設け故障検査を実行する。そして、それぞれの検査において検査結果１３Ｂを出力し、故障が存在することが判明した場合、秘密鍵を無効化する、もしくは暗号回路の処理を停止する。図１３のようにすべてのデータの暗号処理において故障検査を実施することにより、故障を検出できる頻度を高め秘密鍵の漏洩を防ぐことができる。
（実施の形態６）
図１４は本発明の第６の実施の形態における暗号回路２Ａの故障検査の実行期間を示す図である。本発明の第１の実施の形態から第４の実施の形態のいずれかにおいて、アルゴリズムＤＥＳを実現し、かつ故障利用解析への対抗手段を有する暗号回路２Ａは、平文２Ｂを秘密鍵２Ｃにより暗号化し暗号文２Ｄを得る暗号処理を実行する際に、前もって規定のデータ数Ｎを定めておき、連続するＮ個のデータのうちＭ個（Ｍ＜Ｎ）のデータに対する暗号処理において、故障の有無を判定するための判定処理期間を設け故障検査を実行する。検査を行うデータの個数ＭはＭ＜Ｎの範囲で任意の数が設定可能である。例として連続するＮ個のデータの中でＭ＝２を考えた場合は、図１４に示すようにｉ番目とｊ番目のデータに対しては故障検査を伴う暗号処理１４Ｂを行い、他のデータに対しては故障検査を伴わない暗号処理１４Ａを行う。ここで、ｉとｊはｉ≠ｊを満たし１≦ｉ≦Ｎの１≦ｊ≦Ｎ範囲で任意に設定可能とする。Ｍ＝２以外の場合も同様である。また規定のデータ数Ｎも任意の数が設定可能とする。そして、故障検査をともなう暗号処理１４Ｂにおいては検査結果１４Ｃを出力し、故障が存在することが判明した場合、秘密鍵を無効化する、もしくは暗号回路の処理を停止する。このように規定数Ｎを設定し、連続するＮ個のデータのうちＭ個のデータに対する暗号処理において故障検査を実施することにより、すべてのデータの暗号処理において故障検査を実行する場合に比べ、故障検査にかかる時間を抑えて秘密鍵の漏洩を防ぐことができる。
（実施の形態７）
図１５は本発明の第７の実施の形態における暗号回路２Ａの故障検査の実行期間を示す図である。本発明の第１の実施の形態から第３の実施の形態ならびに第５の実施の形態から第６の実施の形態のいずれかにおいて、アルゴリズムＤＥＳを実現し、かつ故障利用解析への対抗手段を有する暗号回路２Ａは、平文２Ｂから秘密鍵２Ｃを用いて暗号文２Ｄを生成する際に、暗号処理規定のＲ回のラウンド演算の開始前とすべてのラウンド演算の終了後に故障の有無を判定するための判定処理期間を設け故障検査１５Ａを実行する。そして、それぞれの故障検査１５Ａにおいて検査結果１５Ｂを出力し、故障が存在することが判明した場合、秘密鍵を無効化する、もしくは暗号回路の処理を停止する。また、故障検査１５Ａはラウンド演算の開始前のみに実行する、またはラウンド演算終了後のみに実行することが可能である。このようにラウンド演算の実行前後のみに故障検査を実施することにより、故障検査にかかる時間を抑えて秘密鍵の漏洩を防ぐことができる。
（実施の形態８）
図１６は本発明の第８の実施の形態における暗号回路２Ａの故障検査の実行期間を示す図である。本発明の第１の実施の形態から第３の実施の形態ならびに第５の実施の形態から第６の実施の形態のいずれかにおいて、アルゴリズムＤＥＳを実現し、かつ故障利用解析への対抗手段を有する暗号回路２Ａは、平文２Ｂから秘密鍵２Ｃを用いて暗号文２Ｄを生成する際に、暗号処理規定のＲ回のすべてのラウンド演算において故障の有無を判定するための判定処理期間を設け故障検査１６Ａを実行する。そして、それぞれの故障検査１６Ａにおいて検査結果１６Ｂを出力し、故障が存在することが判明した場合、秘密鍵を無効化する、もしくは暗号回路の処理を停止する。このようにすべてのラウンド演算において故障検査１６Ａを実施することにより、故障を検出できる頻度を高め秘密鍵の漏洩を防ぐことができる。
（実施の形態９）
図１７は本発明の第９の実施の形態における暗号回路２Ａの故障検査の実行期間を示す図である。本発明の第１の実施の形態から第３の実施の形態ならびに第５の実施の形態から第６の実施の形態のいずれかにおいて、アルゴリズムＤＥＳを実現し、かつ故障利用解析への対抗手段を有する暗号回路２Ａは、平文２Ｂから秘密鍵２Ｃを用いて暗号文２Ｄを生成する際に、規定のラウンド数Ｎを設定しておき、１６回のラウンド演算のうち、Ｎ回のラウンド演算において故障の有無を判定するための判定処理期間を設け故障検査１７Ａを実行する。そして、それぞれの故障検査１７Ａにおいて検査結果１７Ｂを出力し、故障が存在することが判明した場合、秘密鍵を無効化する、もしくは暗号回路の処理を停止する。ただし、故障検査の実行回数Ｎとしては任意の数が設定でき、さらにＮ回の故障検査をどのラウンド演算において実行するかも任意に選択できる。このように規定のＮ回のラウンド演算において暗号処理１７Ａを実施することにより、故障検査にかかる時間を抑える、または故障を検出できる頻度を高めるかを選択して秘密鍵の漏洩を防ぐことができる。
（実施の形態１０）
図１８は本発明の第１０の実施の形態における暗号回路２Ａの故障検査の実行期間を示す図である。本発明の第４の実施の形態から第６の実施の形態のいずれかにおいて、アルゴリズムＤＥＳを実現し、かつ故障利用解析への対抗手段を有する暗号回路２Ａは、故障の有無を判定するための判定処理期間において、故障の有無を判定するために用いる検査用パターン１８Ａに対し秘密鍵２ＣによりアルゴリズムＤＥＳ規定の１６ラウンドよりもｎ回（１≦ｎ≦１５）少ない１６−ｎ回のラウンド演算を実行する。そして１６−ｎ回ラウンド演算を実行後、得られた出力１８Ｂを、前もって用意した期待値１８Ｃと比較１８Ｄにより比較し、検査結果１８Ｅを得る。検査結果１８Ｅより、故障が存在することが判明した場合、秘密鍵を無効化する、もしくは暗号回路の処理を停止する。このように故障検査において、アルゴリズムＤＥＳ規定のラウンド数よりｎ回少なくラウンド演算を実行することにより故障検査にかかる時間を抑えることができる。
（実施の形態１１）
図１９は本発明の第１１の実施の形態における暗号回路２Ａの故障検査の実行期間を示す図である。本発明の第４の実施の形態から第６の実施の形態のいずれかにおいて、アルゴリズムＤＥＳを実現し、かつ故障利用解析への対抗手段を有する暗号回路２Ａは、故障の有無を判定するための判定処理期間において、故障の有無を判定するために用いる検査用パターン１９Ａに対し秘密鍵２ＣによりアルゴリズムＤＥＳ規定の１６ラウンドよりもｎ回（ｎ≧１）多い１６＋ｎ回のラウンド演算を実行する。そして１６＋ｎ回ラウンド演算を実行後、得られた出力１９Ｂを、前もって用意した期待値１９Ｃと比較１９Ｄにより比較し、検査結果１９Ｅを得る。検査結果１９Ｅより、故障が存在することが判明した場合、秘密鍵を無効化する、もしくは暗号回路の処理を停止する。このように故障検査において、アルゴリズムＤＥＳ規定のラウンド数よりｎ回多くラウンド演算を実行することにより、故障を発見する可能性を高めることができる。
【産業上の利用可能性】
【００４３】
本発明は故障利用解析への対抗手段を回路内部に有し、機密処理装置の実現に対して有効である。この回路により、故障発生の原因となる熱や電圧を検知する回路を設置する方法と比較して、電圧や熱以外の故障発生の原因となる新たな要素が利用された場合にも対応できるといった利点や、またラウンド演算後の値を格納するレジスタの値を使用することにより、暗号回路を二つ有する場合と比較して必要なハードウェアコストを抑えた形、もしくは処理時間の増大を抑えた形で実現できるといった利点がある。このため、故障利用解析への対抗手段を有する暗号回路等として有用である。
【図面の簡単な説明】
【００４４】
【図１】本発明の第１の実施の形態における故障検出および秘密鍵無効化の機能を有する暗号回路の概略を示すブロック図である。
【図２】本発明で対象とする秘密鍵暗号方式のアルゴリズムを実装した暗号回路を示す説明図である。
【図３】ＤＥＳアルゴリズムの内容を示す説明図である。
【図４】レジスタの共有を行わずにＤＥＳアルゴリズムにおけるラウンド演算を行う回路の内容を示すブロック図である。
【図５】レジスタを共有することによりＤＥＳアルゴリズムにおけるラウンド演算を行う回路の内容を示すブロック図である。
【図６】レジスタの全ビットに１を設定することにより故障検出および秘密鍵無効化の機能を有する暗号回路の内容を示すブロック図である。
【図７】レジスタの値をシリアル出力することにより故障検出および秘密鍵無効化の機能を有する暗号回路の内容を示すブロック図である。
【図８】本発明の第２の実施の形態における秘密鍵無効化回路の内容を示す説明図である。
【図９】本発明の第３の実施の形態における故障検出および秘密鍵無効化の機能を有する暗号回路の内容を示すブロック図である。
【図１０】本発明の第４の実施の形態における、検査用のパターンと期待値を用いることにより故障検出および秘密鍵無効化の機能を有する暗号回路の内容を示すブロック図である。
【図１１】レジスタの全ビットの値が１となる検査用パターンを用いることにより故障検出および秘密鍵無効化の機能を有する暗号回路の内容を示すブロック図である。
【図１２】二つのレジスタの値が等しくなる検査用パターンを用いることにより故障検出および秘密鍵無効化の機能を有する暗号回路の内容を示すブロック図である。
【図１３】本発明の第５の実施の形態における暗号回路２Ａの故障検査の実行期間を示す説明図である。
【図１４】本発明の第６の実施の形態における暗号回路２Ａの故障検査の実行期間を示す説明図である。
【図１５】本発明の第７の実施の形態における暗号回路２Ａの故障検査の実行期間を示す説明図である。
【図１６】本発明の第８の実施の形態における暗号回路２Ａの故障検査の実行期間示す説明図である。
【図１７】本発明の第９の実施の形態における暗号回路２Ａの故障検査の実行期間を示す説明図である。
【図１８】本発明の第１０の実施の形態における暗号回路２Ａの故障検査の実行期間を示す説明図である。
【図１９】本発明の第１１の実施の形態における暗号回路２Ａの故障検査の実行期間を示す説明図である。
【図２０】暗号回路を二つ有する従来方法の概略を示す説明図である。
【図２１】暗号回路および復号回路を有する従来方法の概略を示す説明図である。
【符号の説明】
【００４５】
１Ａ：故障検査回路
１Ｂ：秘密鍵無効化回路
２Ａ：秘密鍵暗号回路
２Ｂ：平文
２Ｃ：秘密鍵
２Ｄ：暗号文
３Ａ：初期転置
３Ｂ：部分鍵演算
３Ｃ：最終転置
４Ａ：秘密鍵
４Ｂ：部分鍵演算回路
４Ｃ：Ｆ関数
４Ｄ：排他的論理和
４Ｅ：Ｌｎ−１を格納するレジスタ
４Ｆ：Ｒｎ−１を格納するレジスタ
４Ｇ：Ｌｎを格納するレジスタ
４Ｈ：Ｒｎを格納するレジスタ
６Ａ：セレクタ
６Ｂ：全ビットのＡＮＤ
７Ａ：シリアル出力用レジスタ
７Ｂ：コピー用レジスタ
７Ｃ：比較回路
９Ａ：ハミング重み算出回路
９Ｂ：比較回路
１０Ａ：内部メモリ
１０Ｂ：セレクタ
１０Ｃ：Ｌ０を格納するレジスタ
１０Ｄ：Ｒ０を格納するレジスタ
１０Ｅ：Ｌ１６を格納するレジスタ
１０Ｆ：Ｒ１６を格納するレジスタ
１０Ｇ：内部メモリ
１０Ｈ：比較回路
１１Ａ：全ビットのＡＮＤ
１２Ａ：比較回路
１３Ａ：故障検査を伴う暗号処理
１３Ｂ：検査結果
１４Ａ：故障検査を伴わない暗号処理
１４Ｂ：故障検査を伴う暗号処理
１４Ｃ：検査結果
１５Ａ：故障検査
１５Ｂ：検査結果
１６Ａ：故障検査
１６Ｂ：検査結果
１７Ａ：故障検査
１７Ｂ：検査結果
１８Ａ：検査用パターン
１８Ｂ：ラウンド演算後の出力
１８Ｃ：期待値
１８Ｄ：比較処理
１８Ｅ：検査結果
１９Ａ：検査用パターン
１９Ｂ：ラウンド演算後の出力
１９Ｃ：期待値
１９Ｄ：比較処理
１９Ｅ：検査結果
２０Ａ：平文
２０Ｂ：秘密鍵
２０Ｃ：暗号処理１
２０Ｄ：暗号処理２
２０Ｅ：暗号文１
２０Ｆ：暗号文２
２０Ｇ：比較処理
２０Ｈ：検査結果
２１Ａ：平文１
２１Ｂ：秘密鍵
２１Ｃ：暗号処理
２１Ｄ：暗号文
２１Ｅ：暗号処理
２１Ｆ：平文２
２１Ｇ：比較処理
２１Ｈ：検査結果
【図１】
2005340892.tif 000003
【図２】
2005340892.tif 000004
【図３】
2005340892.tif 000005
【図４】
2005340892.tif 000006
【図５】
2005340892.tif 000007
【図６】
2005340892.tif 000008
【図７】
2005340892.tif 000009
【図８】
2005340892.tif 000010
【図９】
2005340892.tif 000011
【図１０】
2005340892.tif 000012
【図１１】
2005340892.tif 000013
【図１２】
2005340892.tif 000014
【図１３】
2005340892.tif 000015
【図１４】
2005340892.tif 000016
【図１５】
2005340892.tif 000017
【図１６】
2005340892.tif 000018
【図１７】
2005340892.tif 000019
【図１８】
2005340892.tif 000020
【図１９】
2005340892.tif 000021
【図２０】
2005340892.tif 000022
【図２１】
2005340892.tif 000023