(57)【要約】【課題】スキャンチェインを介したデータ漏洩を防止した構成を実現する。【解決手段】ＬＳＩなどの集積回路のテスト用パスとして設定されたスキャンチェインの出力部にデータ拡散処理を行うインターリーブ回路を設定した。インターリーブ回路は例えば段数の異なるレジスタによって構成される複数のブランチと、スキャンチェインからのデータ入力および外部出力を行うブランチを選択するセレクタを備え、選択ブランチを逐次変更する制御を実行する。本構成により、スキャンチェインからの出力ビット系列が拡散され外部に出力されることになり、フリップフロップに格納されたデータの漏洩を防止することができる。【選択図】図３
2010261768.tif 000002
【特許請求の範囲】
【請求項１】
集積回路のテスト用接続経路であり複数のフリップフロップを接続したスキャンチェインと、
前記スキャンチェインの出力部に設けられたインターリーブ回路を有し、
前記インターリーブ回路は、
段数の異なる記憶素子からなる複数のブランチと、
前記スキャンチェインからのデータ入力と、前記インターリーブ回路からの出力を行う入出力ブランチを選択するセレクタと、
前記入出力ブランチを、所定タイミング毎に切り替える処理を実行するセレクタ制御部、
を有する半導体集積回路。
【請求項２】
前記セレクタ制御部は、
前記入出力ブランチを、前記スキャンチェインからのデータ入力毎に切り替える処理を実行する請求項１に記載の半導体集積回路。
【請求項３】
前記セレクタ制御部は、
段数の異なる記憶素子からなる複数のブランチを、予め設定された切り替えシーケンスに従って切り替える処理を実行する請求項１に記載の半導体集積回路。
【請求項４】
前記半導体集積回路は、
前記スキャンチェインからのデータ入力と、前記インターリーブ回路からの出力を行うブランチを選択するためのブランチ選択表であり、メモリアドレスとブランチ識別子とを対応付けたブランチ選択表を格納したメモリと、
所定タイミング毎にカウント値をカウントするカウンタと、
前記ブランチ選択表から、前記カウンタのカウント値に応じたメモリアドレスに対応するブランチ識別子を前記インターリーブ回路のセレクタ制御部に出力する制御部を有する制御回路を備え、
前記セレクタ制御部は、前記制御回路から入力するブランチ識別子に対応するブランチを前記入出力ブランチとして選択する処理を行う請求項１に記載の半導体集積回路。
【請求項５】
前記ブランチ選択表は、前記メモリアドレスに対してランダムにブランチ識別子を対応付けた設定を有し、
前記セレクタ制御部は、前記制御回路から入力するランダムシーケンスのブランチ識別子に対応させて、前記入出力ブランチをランダムに選択する処理を行う請求項４に記載の半導体集積回路。
【請求項６】
前記半導体集積回路は、さらに、
前記複数のブランチに設定された記憶素子の初期値を設定する初期化処理部を有する請求項１〜５いずれかに記載の半導体集積回路。
【請求項７】
前記初期化処理部は、
乱数生成部を有し、
前記乱数生成部の生成乱数を前記複数のブランチに設定された記憶素子の初期値として入力する初期化処理を行なう請求項６に記載の半導体集積回路。
【請求項８】
前記記憶素子は、レジスタである請求項１〜７いずれかに記載の半導体集積回路。
【請求項９】
前記請求項１〜８いずれかに記載の半導体集積回路を備えた情報処理装置。
【請求項１０】
情報処理装置において実行する出力データ拡散方法であり、
インターリーブ回路において、集積回路のテスト用接続経路であり複数のフリップフロップを接続したスキャンチェインからの出力の拡散処理を実行するデータ拡散ステップを有し、
前記データ拡散ステップは、
段数の異なる記憶素子からなる複数のブランチに対する、前記スキャンチェインからのデータ入力と、前記インターリーブ回路からの出力を行う入出力ブランチを順次切り替えるブランチ選択ステップを有する出力データ拡散方法。
【請求項１１】
情報処理装置において出力データ拡散処理を実行させるプログラムであり、
インターリーブ回路において、集積回路のテスト用接続経路であり複数のフリップフロップを接続したスキャンチェインからの出力の拡散処理を実行させるデータ拡散ステップを有し、
前記データ拡散ステップは、
段数の異なる記憶素子からなる複数のブランチに対する、前記スキャンチェインからのデータ入力と、前記インターリーブ回路からの出力を行う入出力ブランチを順次切り替えるブランチ選択ステップを有するプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体集積回路、情報処理装置、および出力データ拡散方法、並びにプログラムに関する。さらに詳細には、半導体集積回路のテスト用回路であるスキャン回路からの情報漏洩を防止する構成を持つ半導体集積回路、情報処理装置、および出力データ拡散方法、並びにプログラムに関する。
【背景技術】
【０００２】
半導体集積回路にはフリップフロップ（ＦＦ）が多数利用されている。フリップフロップ（ＦＦ）は、ビット値（０，１）を保持し、ビット値入出力を高速に行うことが可能であり、例えばキャッシュメモリやレジスタ、その他の電子回路を構成する素子として多く利用されている。なお、以下、本明細書においてフリップフロップをＦＦとして略して表現する場合がある。
【０００３】
半導体集積回路を試験する方法として、スキャンテストが知られている。［特許文献１］に記載されているスキャンテスト構成について図１を参照して説明する。図１に示すように、半導体集積回路１００内には、様々なデータ処理や演算処理を実行する複数の回路素子からなる組み合わせ回路１２１，１２２がある。さらに、組み合わせ回路１２１，１２２に対する入力データや、組み合わせ回路１２１，１２２からの出力データを保持、転送するフリップフロップ（ＦＦ）が複数存在する。図１に示すスキャンＦＦ１１１，１１２，１１３である。
【０００４】
なお、図１に示すスキャンＦＦ１１１，１１２，１１３の各々は、１つのスキャンＦＦに限らず複数のスキャンＦＦを含む構成であってもよい。図１に示すスキャンＦＦ１１１，１１２，１１３を連結する接続ラインが回路テスト用のスキャンチェインとして設定され、半導体集積回路の製造段階のテストなどに利用される。
【０００５】
テストは、組み合わせ回路の前後にあるフリップフロップ（ＦＦ）を組み合わせ回路に対するデータ入力および出力部に見立て行われる。フリップフロップ（ＦＦ）にテスト用のデータを設定し、組み合わせ回路の処理結果を後段のＦＦに格納し、これを外部に取り出すことによって、組み合わせ回路が正常な動作がなされているか否かを確認する。このスキャンチェインを利用した回路テストはスキャンテストと呼ばれる。
【０００６】
図１に示すように、半導体集積回路１００の外部端子としてスキャンイン（Ｓｃａｎ−ｉｎ）１３１、スキャンクロック（ＳＣＫ）１３２、スキャンイネーブル（Ｓｃａｎ−ｅｎａｂｌｅ）１３３、およびスキャンアウト（Ｓｃａｎ−ｏｕｔ）１３４がある。
【０００７】
スキャンイン（Ｓｃａｎ−ｉｎ）１３１はスキャンテスト時にスキャンＦＦに格納する値を入力する端子である。
スキャンクロック（ＳＣＫ）１３２はスキャンテスト時に使われるクロックを入力するための端子であり、各スキャンＦＦのスキャンクロック（ＳＣＫ）入力部に供給される。
【０００８】
スキャンイネーブル（Ｓｃａｎ−ｅｎａｂｌｅ）１３３は、スキャンＦＦの入力を切り替えるための端子で、各スキャンＦＦのスキャンイネーブル入力部（ＳＥ）に供給される。
さらに、スキャンアウト（Ｓｃａｎ−ｏｕｔ）１３４はスキャンＦＦに格納された値を外部へ取り出すための端子である。
【０００９】
図１に示すスキャンＦＦ１１１，１１２，１１３の間に挟まれているのが組み合わせ回路１２１，１２２である。スキャンテストではこの組み合わせ回路１２１，１２２とスキャンＦＦ１１１，１１２，１１３とのデータ入出力を実行させて試験を行う。
【００１０】
スキャンＦＦ１１１，１１２，１１３の内部回路構成について図２を参照して説明する。なお、スキャンチェインに接続されテストデータとその他のデータとの選択入力を可能とした構成を持つフリップフロップ（ＦＦ）をスキャンＦＦと呼ぶ。スキャンＦＦ１１１，１１２，１１３の内部回路は、図２に示す構成を持つ。図２には、スキャンＦＦ１１１を示しているが、スキャンＦＦ１１２，１１３も同様の構成である。
【００１１】
スキャンＦＦ１１１は、図２に示すように、マルチプレクサ１５１とフリップフロップ（ＦＦ）１５２で構成されている。図２に示すように、スキャンＦＦ１１１に入力されるスキャンクロック（ＳＣＫ）は、フリップフロップ（ＦＦ）１５２のスキャンクロック入力部（ＳＣＫ）に供給され、クロックの立ち上りでＦＦ１５２のＤ端子の値をラッチする。ラッチされた値はＦＦ１５２のＱ端子から出力され、スキャンＦＦ１１１の出力Ｑ端子へ供給される。
【００１２】
また、スキャンＦＦ１１１に入力されるスキャンイネーブル（ＳＥ）信号はマルチプレクサ１５１のＤｉｎとＳＩ（Ｓｃａｎ  Ｉｎ）のどちらかを選択するマルチプレクサ１５１のセレクタ信号であり、スキャンイネーブル（ＳＥ）がＨｉｇｈのときはＳＩの信号を、ＬｏｗのときはＤｉｎを選択する。マルチプレクサ１５１はＳＥで選択された信号をマルチプレクサ１５２の出力信号として出力し、ＦＦ１５２の入力部Ｄ端子に供給する。
【００１３】
次に図１を用いてスキャン回路を使った半導体集積回路の試験方法について説明する。
まず半導体集積回路１００のスキャンイネーブル（Ｓｃａｎ−ｅｎａｂｌｅ）１３３を［Ｈｉｇｈ］に設定し、スキャンイン（Ｓｃａｎ−ｉｎ）１３１からクロックサイクルごとに予め設定したテスト用のシリアルにデータを入力して。スキャンＦＦ１１１，１１２，１１３にテスト用の値を設定する。スキャンＦＦ１１１、１１２、１１３はシリアルに接続されている。前述したスキャンチェインである。スキャンチェインで接続されたスキャンＦＦ１１１〜１１３はシフトレジスタ動作を行い、入力データを伝達していく。
【００１４】
その後、スキャンイネーブル（Ｓｃａｎ−ｅｎａｂｌｅ）１３３を［Ｌｏｗ］に設定して、１サイクルのクロックパルスをスキャンクロック（ＳＣＫ）１３２に与えて、キャプチャー動作を行う。このキャプチャー動作により、組み合わせ回路の前段に接続されたスキャンＦＦの値に対応する演算結果が後段のスキャンＦＦに格納される。
【００１５】
例えばスキャンＦＦ１１１に格納された値は組み合わせ回路１２１に供給され、その出力はスキャンＦＦ１１２に格納される。同時にスキャンＦＦ１１２に格納されていた値は組み合わせ回路１２２に供給され、その出力がスキャンＦＦ１１３に格納される。このようなキャプチャー動作を行った後、再びスキャンイネーブル（Ｓｃａｎ−ｅｎａｂｌｅ）１３３を［Ｈｉｇｈ］にして、スキャンクロック（ＳＣＫ）１３２にクロックを印加する。この処理によって、各スキャンＦＦ１１１〜１１３に格納された値はシフトレジスタ動作を行いながらスキャンアウト（Ｓｃａｎ−ｏｕｔ）１３４を介して外部に出力される。
【００１６】
この作業を、様々なテスト用データを適用して複数回行い、スキャンアウト（Ｓｃａｎ−ｏｕｔ）１３４から出てきた値を解析することにより、組み合わせ回路のテストを行うのである。
【００１７】
前述したスキャンチェインの配線を含むスキャン回路を半導体集積回路にどのように設定するかについては半導体集積回路の設計段階で決定される。通常、これらの設計は設計用ツールによって自動的に行われ、効率的なスキャンチェイン配線を行うように処理がなされる。結果として、機械的に近くのスキャンＦＦを順次接続するように配線される可能性が高い。
【００１８】
従って、スキャンチェインによって接続される複数のＦＦは必然的に同等の機能を有する複数のスキャンＦＦが直列に並んだ状態に設定されることが多い。例えば、組み合わせ回路が暗号処理回路である場合、この暗号処理回路に鍵データなどを入力する複数のＦＦが設定された構成では、ｎ個のＦＦから演算回路に対してｎビットの秘密鍵情報が入力される設定とされる。このようなｎ個のＦＦがスキャンチェインによって接続されると、秘密情報としてのｎビットの鍵情報のＭＳＢあるいはＬＳＢのビット列に従ってシリアルにスキャンチェインも接続されることが考えられる。
【００１９】
このようにスキャンチェインが接続されてしまうと、スキャンアウト（Ｓｃａｎ−ｏｕｔ）１３４から出てきた値も、ＦＦの接続順、すなわち、ＭＳＢまたはＬＳＢのビットデータがそのまま出力されてしまうことになる。
【００２０】
また、半導体集積回路のテスト終了後には、スキャンイン（Ｓｃａｎ−ｉｎ）１３１、スキャンアウト（Ｓｃａｎ−ｏｕｔ）１３４、これらの端子は多くの場合、削除されて出荷されるが、スキャンチェインは削除されずユーザに提供されることになる。従って出荷後の半導体集積回路上にもスキャンチェインは残存する。従って、このスキャンチェインを悪用して出力を確認するといった処理が行われると、半導体集積回路の回路を利用して通常のデータ処理を行ったスキャンチェインを利用してＦＦに設定された情報の取り出しが行われる可能性がある。例えば、暗号処理に適用する鍵情報などの秘密情報が漏洩してしまう可能性がある。
【００２１】
このような秘密情報漏洩を防止するため、スキャンチェインを利用したスキャンテストモードに移行する際、スキャンチェインに接続されたスキャンＦＦを初期化し、スャンＦＦに保持されたデータをリセットする対策を行っているものもある。これにより、攻撃者がその動作途中に回路をスキャンテストモードに移行させたとしても、スキャンアウトされた値から鍵等の重要情報を取得、解析することは困難となっている。
【先行技術文献】
【特許文献】
【００２２】
【特許文献１】特許第３６７１９４８号公報
【発明の概要】
【発明が解決しようとする課題】
【００２３】
上述したように、スキャンチェインを悪用されると、スキャンチェインに接続されたＦＦから秘密情報が漏洩する可能性がある。例えば、スキャンアウトされる数百ビットの情報に鍵等の重要情報が含まれており、かつビット列がＭＳＢまたはＬＳＢから順に出力される状況の場合、以下のような鍵解析が行われる可能性がある。攻撃者は予め公開通信路上を流れる平文と暗号文のペアを取得しておき、その後、スキャンアウトによって出力されたビット列を１ビットずつずらした値を鍵候補として既知の平文を暗号化し、予め保持していた既知の暗号文との比較を繰り返す。この処理によって鍵の特定が可能となる。このようにスキャンチェインを介してスキャンアウトされた値がＭＳＢまたはＬＳＢから整然と並んでいた場合には、鍵の特定が総当たりによる特定と比較して非常に簡単になるという問題点が存在する。
【００２４】
また、スキャンテストモード移行時にスキャンチェインに接続されたスキャンＦＦをリセットする対策も秘密情報の漏洩対策としては不十分である。
例えば、電源投入後スキャンテストモードに入り、キャプチャー動作を何度か行い、スキャンＦＦに鍵等の秘密情報が格納されたのちに、スキャンアウトで外部に取り出せてしまえば、後は前述の方法と同様の探索によってスキャンアウトされた値を解析することで鍵データを特定できてしまうといった問題点が存在する。
【００２５】
スキャンテストは半導体集積回路の故障検出システムとして必要不可欠なものであり、特別なことがないかぎり、半導体集積回路に組み込まれる。セキュリティ機能を備えた半導体集積回路も例外ではない。しかしながらセキュリティ機能を備えた半導体集積回路の場合には特に、スキャン回路による故障検出を実現しつつ、鍵等の内部情報が容易に特定されない仕組みが要求される。すなわち、スキャンアウトによって、鍵情報を含んだビット列が出力されたとしても、正当なテスト実施者はその出力値を容易に解析可能であるが、回路構成を知らない攻撃者がスキャンアウトによって得られた値を解析しても、鍵を特定することが困難となる仕組みを実現する必要がある。
しかしながら、前述のように、従来構成においては、スキャンチェインに接続されたスキャンＦＦの格納値を出力させて解析可能であり、鍵データなどの秘密情報の漏洩対策が不十分であるという問題が存在していた。
【００２６】
本発明は、例えば上述の状況に鑑みてなされたものであり、半導体集積回路のスキャンチェインを利用した情報漏洩の防止を実現する半導体集積回路、情報処理装置、および出力データ拡散方法、並びにプログラムを提供することを目的とする。
【課題を解決するための手段】
【００２７】
本発明の第１の側面は、
集積回路のテスト用接続経路であり複数のフリップフロップを接続したスキャンチェインと、
前記スキャンチェインの出力部に設けられたインターリーブ回路を有し、
前記インターリーブ回路は、
段数の異なる記憶素子からなる複数のブランチと、
前記スキャンチェインからのデータ入力と、前記インターリーブ回路からの出力を行う入出力ブランチを選択するセレクタと、
前記入出力ブランチを、所定タイミング毎に切り替える処理を実行するセレクタ制御部、
を有する半導体集積回路にある。
【００２８】
さらに、本発明の半導体集積回路の一実施態様において、前記セレクタ制御部は、前記入出力ブランチを、前記スキャンチェインからのデータ入力毎に切り替える処理を実行する。
【００２９】
さらに、本発明の半導体集積回路の一実施態様において、前記セレクタ制御部は、段数の異なる記憶素子からなる複数のブランチを、予め設定された切り替えシーケンスに従って切り替える処理を実行する。
【００３０】
さらに、本発明の半導体集積回路の一実施態様において、前記半導体集積回路は、前記スキャンチェインからのデータ入力と、前記インターリーブ回路からの出力を行うブランチを選択するためのブランチ選択表であり、メモリアドレスとブランチ識別子とを対応付けたブランチ選択表を格納したメモリと、所定タイミング毎にカウント値をカウントするカウンタと、前記ブランチ選択表から、前記カウンタのカウント値に応じたメモリアドレスに対応するブランチ識別子を前記インターリーブ回路のセレクタ制御部に出力する制御部を有する制御回路を備え、前記セレクタ制御部は、前記制御回路から入力するブランチ識別子に対応するブランチを前記入出力ブランチとして選択する処理を行う。
【００３１】
さらに、本発明の半導体集積回路の一実施態様において、前記ブランチ選択表は、前記メモリアドレスに対してランダムにブランチ識別子を対応付けた設定を有し、前記セレクタ制御部は、前記制御回路から入力するランダムシーケンスのブランチ識別子に対応させて、前記入出力ブランチをランダムに選択する処理を行う。
【００３２】
さらに、本発明の半導体集積回路の一実施態様において、前記半導体集積回路は、さらに、前記複数のブランチに設定された記憶素子の初期値を設定する初期化処理部を有する。
【００３３】
さらに、本発明の半導体集積回路の一実施態様において、前記初期化処理部は、乱数生成部を有し、前記乱数生成部の生成乱数を前記複数のブランチに設定された記憶素子の初期値として入力する初期化処理を行なう。
【００３４】
さらに、本発明の半導体集積回路の一実施態様において、前記記憶素子は、レジスタである。
【００３５】
さらに、本発明の第２の側面は、前記請求項１〜７いずれかに記載の半導体集積回路を備えた情報処理装置にある。
【００３６】
さらに、本発明の第３の側面は、
情報処理装置において実行する出力データ拡散方法であり、
インターリーブ回路において、集積回路のテスト用接続経路であり複数のフリップフロップを接続したスキャンチェインからの出力の拡散処理を実行するデータ拡散ステップを有し、
前記データ拡散ステップは、
段数の異なる記憶素子からなる複数のブランチに対する、前記スキャンチェインからのデータ入力と、前記インターリーブ回路からの出力を行う入出力ブランチを順次切り替えるブランチ選択ステップを有する出力データ拡散方法にある。
【００３７】
さらに、本発明の第４の側面は、
情報処理装置において出力データ拡散処理を実行させるプログラムであり、
インターリーブ回路において、集積回路のテスト用接続経路であり複数のフリップフロップを接続したスキャンチェインからの出力の拡散処理を実行させるデータ拡散ステップを有し、
前記データ拡散ステップは、
段数の異なる記憶素子からなる複数のブランチに対する、前記スキャンチェインからのデータ入力と、前記インターリーブ回路からの出力を行う入出力ブランチを順次切り替えるブランチ選択ステップを有するプログラムにある。
【００３８】
なお、本発明のプログラムは、例えば、様々なプログラム・コードを実行可能な画像処理装置やコンピュータ・システムに対して、コンピュータ可読な形式で提供する記憶媒体、通信媒体によって提供可能なプログラムである。このようなプログラムをコンピュータ可読な形式で提供することにより、画像処理装置やコンピュータ・システム上でプログラムに応じた処理が実現される。
【００３９】
本発明のさらに他の目的、特徴や利点は、後述する本発明の実施例や添付する図面に基づくより詳細な説明によって明らかになるであろう。なお、本明細書においてシステムとは、複数の装置の論理的集合構成であり、各構成の装置が同一筐体内にあるものには限らない。
【発明の効果】
【００４０】
本発明の一実施例によれば、ＬＳＩなどの集積回路のテスト用パスとして設定されたスキャンチェインの出力部にデータ拡散処理を行うインターリーブ回路を設定した。インターリーブ回路は例えば段数の異なるレジスタによって構成される複数のブランチと、スキャンチェインからのデータ入力および外部出力を行うブランチを選択するセレクタを備え、選択ブランチを逐次変更する制御を実行する。本構成により、スキャンチェインからの出力ビット系列が拡散され外部に出力されることになり、フリップフロップに格納されたデータの漏洩を防止することができる。
【図面の簡単な説明】
【００４１】
【図１】半導体集積回路におけるスキャンチェインについて説明する図である。
【図２】スキャンチェインに接続されたフリップフロップを持つスキャンＦＦの構成を示す図である。
【図３】本発明の第１の実施形態に係る半導体集積回路の構成例について説明する図である。
【図４】本発明の第１の実施形態に係る半導体集積回路に設定されるインターリーブ回路の構成例について説明する図である。
【図５】本発明の第１の実施形態に係る半導体集積回路におけるインターリーブ回路を適用したデータ拡散処理シーケンスの例について説明する図である。
【図６】本発明の第２の実施形態に係る半導体集積回路の構成例について説明する図である。
【図７】本発明の第２の実施形態に係る半導体集積回路に設定されるインターリーブ回路および制御回路の構成例について説明する図である。
【図８】本発明の第２の実施形態に係る半導体集積回路に設定される制御回路内のＲＯＭの格納するブランチ選択表の構成例について説明する図である。
【図９】本発明の第２の実施形態に係る半導体集積回路におけるインターリーブ回路を適用したデータ拡散処理シーケンスの例について説明する図である。
【図１０】本発明の第３の実施形態に係る半導体集積回路の構成例について説明する図である。
【図１１】本発明の第３の実施形態に係る半導体集積回路に設定されるインターリーブ回路および初期化処理部の構成例について説明する図である。
【図１２】本発明の第３の実施形態に係る半導体集積回路におけるインターリーブ回路を適用したデータ拡散処理シーケンスの例について説明する図である。
【発明を実施するための形態】
【００４２】
以下、図面を参照しながら本発明の半導体集積回路、情報処理装置、および出力データ拡散方法、並びにプログラムの詳細について説明する。説明は、以下の項目に従って行う。
１．本発明の第１の実施形態の構成および処理について
２．本発明の第２の実施形態の構成および処理について
３．本発明の第３の実施形態の構成および処理について
【００４３】
［１．本発明の第１の実施形態の構成および処理について］
図３以下を参照して本発明の第１の実施形態について説明する。図３は本発明の第１の実施形態に係る半導体集積回路２００を示す図である。
【００４４】
図３に示す本実施例の半導体集積回路２００の回路部２１０は、先に図１を参照して説明した回路と同様の回路である。すなわち、様々なデータ処理や演算処理を実行する複数の回路素子からなる組み合わせ回路２２１，２２２と、組み合わせ回路２２１，２２２に対する入力データや、組み合わせ回路２２１，２２２からの出力データを保持、転送するフリップフロップ（ＦＦ）２１１〜２１３を有する。
【００４５】
なお、図３に示すスキャンＦＦ２１１〜２１３の各々は、１つのスキャンＦＦに限らず複数のスキャンＦＦを含む構成であってもよい。図３に示すスキャンＦＦ２１１〜２１３を連結する１つの接続ラインが回路テスト用のスキャンチェインとして設定され、半導体集積回路の製造段階のテストなどに利用される。
【００４６】
半導体集積回路２００の外部端子の構成も先に図１を参照して説明した構成と同様であり、スキャンイン（Ｓｃａｎ−ｉｎ）２３１、スキャンクロック（ＳＣＫ）２３２、スキャンイネーブル（Ｓｃａｎ−ｅｎａｂｌｅ）２３３、およびスキャンアウト（Ｓｃａｎ−ｏｕｔ）２３４を有する。
【００４７】
図３に示す半導体集積回路２００は、図１の構成と異なり、インターリーブ回路３００を有する。インターリーブ回路３００は、スキャンアウト（Ｓｃａｎ−ｏｕｔ）２３４の前段に設定される。すなわち、半導体集積回路２００内のスキャンＦＦ２１１〜２１３を接続するスキャンチェインの最後尾に位置するスキャンＦＦ２１３の出力部側のスキャンアウト（Ｓｃａｎ−ｏｕｔ）２３４の前段にインターリーブ回路３００が設けられる。
【００４８】
インターリーブ回路３００は、スキャンＦＦ２１３の出力を入力して、入力データを拡散するインターリーブ処理を実行し、処理データをスキャンアウト（Ｓｃａｎ−ｏｕｔ）２３４を介して出力する。
【００４９】
半導体集積回路２００の外部端子は図１における半導体集積回路１００と同一であり、これらの端子はスキャンテストにおいて使用される。スキャンテストにおいて、キャプチャー動作後、スキャンアウトするためにスキャンＦＦ２１１〜２１３と組み合わせ回路２２１〜２２２からの最終出力ビット系列がインターリーブ回路３００を経てスキャンアウト（Ｓｃａｎ−ｏｕｔ）２３４を介して出力される。
【００５０】
インターリーブ回路３００の詳細を図４に示す。インターリーブ回路３００は、図４に示すように、入力側、出力側ともＮ個のブランチを備えるセレクタ３０１およびセレクタ３０２を有しており、セレクタ制御部３０３がクロックサイクルごとに順にブランチを選択する構成となっている。
【００５１】
すなわちスキャンクロック（ＳＣＫ）２３２にクロックが印加される度に、セレクタ制御部３０３がブランチ０、ブランチ１、ブランチ２、…と各ブランチをクロックに応じてＮ−１まで順に選択する。ブランチＮ−１が選択された後には、ブランチ０にもどり、前述の動作を繰り返す。このセレクタ３０１，３０２との間にはレジスタ３１１〜３１４がある。なお、本実施例ではレジスタを利用しているが、その他のメモリなど、様々な記憶素子を利用する構成としてもよい。
【００５２】
図には、４つのブランチのみを示しているが、０〜Ｎ−１のＮ個のブランチが設定されている。各ブランチのレジスタ数は、レジスタ３１１が１個、レジスタ３１２が２個、レジスタ３１３が３個と順次、１つずつ増加し、最終のブランチＮ−１のレジスタ３１４のレジスタ数はＮ個となっている。このように各ブランチは段数の異なるレジスタによって構成される。
すなわち、ブランチｉ（ｉ＝０、１、...、Ｎ−１）の各々に対してｉ＋１個のレジスタが接続されている。
【００５３】
各ブランチにおけるレジスタはシフトレジスタを構成しており、セレクタ３０１によって選択されたブランチにあるレジスタには、セレクタ３０１からの出力値が入力として供給され、スキャンクロック（ＳＣＫ）によりクロックが印加された場合には、すでに格納されている値を隣接（図中の例では右隣）レジスタに格納する、すなわちシフト動作を行うと共に、セレクタ３０１より供給されている値が格納される。つまりＦＩＦＯ（Ｆｉｒｓｔ−Ｉｎ−Ｆｉｒｓｔ−Ｏｕｔ）の動作を行う。このとき、セレクタ３０１およびセレクタ３０２によって選択されていないブランチにあるレジスタは、スキャンクロック（ＳＣＫ）によらず値を保持する。
【００５４】
以下、インターリーブ回路３００の機能を具体的に説明する。以下の説明では、ブランチ数Ｎ＝４として説明する。
セレクタのブランチ選択は、セレクタ制御部３０３によって、セレクタ３０１およびセレクタ３０２とも、０、１、２、３、０、１、２、３、０、…と、クロックサイクルごとに同じブランチが同期して選択される。レジスタも先の説明と同様で、セレクタ３０１の選択ブランチにあるレジスタに入力が供給され、クロックサイクルごとにＦＩＦＯ動作を行う。
【００５５】
インターリーブ回路３００は、スキャンチェインの最終出力を入力したビット系列の拡散処理を実行する。インターリーブ回路３００でビット系列がどのように拡散されるかについて、図５に示すタイミングチャートを用いて説明する。まず図５に記載の信号について説明する。
ＳＣＫはスキャンクロックを示す。
入力はセレクタ３０１への入力値を示し、そのビット系列を今｛ｂ０，ｂ１，ｂ２，ｂ３，ｂ４，ｂ５，ｂ６，ｂ７，...｝とする。
ブランチは、セレクタ３０１およびセレクタ３０２が選択しているブランチを示している。
レジスタ３１１、レジスタ３１２、レジスタ３１３およびレジスタ３１４はそれぞれ格納している値を示し、初期状態は簡単のためすべて０としている。
さらに出力はインターリーブ回路３００の出力であるセレクタ３０２の出力を示している。
【００５６】
まず時刻ｔ０ではインターリーブ回路３００内の各レジスタ３１１〜３１４が０で初期化されている。入力セレクタ３０１にはスキャンチェインからの最初の出力ビットが供給されている。図に示す［入力］のｂ０である。セレクタ３０１および３０２はブランチ０を選択している。ただし、時間ｔ０時点では、入力値ｂ０はセレクタ３０１のブランチ０を経由してレジスタ３１１に格納されていない。格納処理は、クロック印加を契機として行われる。従って、インターリーブ回路３００の出力はセレクタ３０２が選択しているブランチ０に接続されているレジスタ３１１の値となる。すなわち０が出力されている。
【００５７】
次に、時刻ｔ１でＳＣＫにクロックが印加されると、セレクタ３０１への入力値ｂ０はセレクタ３０１のブランチ０を経由してレジスタ３１１に格納される。他のレジスタ３１２、レジスタ３１３およびレジスタ３１４の値は保持（オール０）される。同時にセレクタ３０１および３０２はブランチ１に切り替わり、セレクタ３０１にはｂ１が供給される。セレクタ３０２はブランチ１を選択しているため、その出力はブランチ１に接続されているレジスタ３１２の右端の値、すなわち０となる。
【００５８】
さらに時刻ｔ２でＳＣＫにクロックが印加されると、レジスタ３１２がシフト動作を実施すると共に、セレクタ３０１への入力値ｂ１がセレクタ３０１のブランチ１を経由してレジスタ３１２の左端のレジスタに格納され、結果としてレジスタ３１２には｛ｂ１，０｝が格納されることとなる。他のレジスタ３１１、３１３および３１４の値は保持したままである。同時にセレクタ３０１および３０２はブランチ２に切り替わり、セレクタ３０１にはｂ２が供給される。セレクタ３０２はブランチ２を選択しているため、出力はブランチ２に接続されているレジスタ３１３の右端の値、すなわち０となる。
【００５９】
以降、同様にして時刻ｔ３ではレジスタ３１３の左端にセレクタ３０１への入力値ｂ２が格納され｛ｂ２，０，０｝となり、レジスタ３１４の右端の値すなわち０が出力される。時刻ｔ４ではレジスタ３１４の左端にセレクタ３０１への入力値ｂ３が格納され、｛ｂ３，０，０，０｝となり、セレクタ３０１および３０２のセレクタはブランチ０に戻るので、レジスタ３１１の値、すなわちｂ０が出力される。時刻ｔ５以降は図５のタイミングチャートを見れば明らかであるので、説明は割愛する。
【００６０】
図５に示すタイミングチャートから理解されるように、インターリーブ回路３００に対する入力ビット系列と出力ビット系列は以下のような設定となる。
入力ビット系列
｛ｂ０，ｂ１，ｂ２，ｂ３，ｂ４，…｝
は、インターリーブ回路３００を経由することによって、
出力ビット系列
｛０，０，０，０，ｂ０，０，０，０，ｂ４，ｂ１，０，０，ｂ８，ｂ５，ｂ２，０，ｂ１２，ｂ９，ｂ６，ｂ３，ｂ１６，…｝
となる。
このように、インターリーブ回路３００の処理によって、インターリーブ回路３００入力時に隣接していたビットが出力時には拡散される。すなわち、インターリーブ回路３００に入力されたビット系列は、インターリーブ回路３００から入力ビット系列と異なる拡散されたビット系列として出力される。
【００６１】
なお、正当なスキャンテストの実行者は、インターリーブ回路３００において実行されるインターリーブ処理のアルゴリズムを知っている。従って、インターリーブ処理の逆処理を実行するアルゴリズムを例えばソフトウェアを適用して実行する。この処理によって、インターリーブ前のビット系列を取得してテスト処理を行うことが可能である。
【００６２】
一方、悪意のある解析者は、インターリーブ処理のアルゴリズムを知らないため、インターリーブ回路によって拡散されたデータのみからスキャンチェインに接続されたスキャンＦＦの保持値の解析を行うことになる。
【００６３】
以下、スキャンチェインに接続されたスキャンＦＦに秘密情報である暗号鍵データが格納されていたと仮定し、インターリーブ回路によって拡散されたデータを用いて鍵解析を実行する場合の鍵探索に必要な試行回数について考察する。ここでは、簡単のため、スキャンチェインを介してスキャンアウトされる値を２５６ビットのビット列とし、ここに１２８ビットの鍵が含まれているものとする。
【００６４】
インターリーブ回路を有さない従来の回路、例えば、図１に示す半導体集積回路１００からスキャンアウトされたビット列の端から連続する１２８ビットをひとつの鍵候補として取り出し、そこから１ビットずつずらした値を各々鍵候補とすると、全部で１２８の鍵候補が得られる。この１２８組の鍵候補に対して、既知の平文を暗号化し、あらかじめ保持していた既知の暗号文との比較を繰り返すことにより、最大でも１２８回の試行で、スキャンアウトされたビット系列から容易に鍵を特定することができる。
【００６５】
これに対し、図３〜図５を参照して説明したインターリーブ回路３００によって拡散されたビット系列を用いた鍵データの解析は以下のようになる。攻撃者はスキャン回路に対して実施されている対策、すなわちインターリーブ回路３００が設けられていることを知らないと仮定した場合、攻撃者は少なくとも、スキャンアウトされた２５６ビットから１２８ビットの全鍵候補に関して鍵確認を行う必要がある。
【００６６】
この場合、鍵として取りうる値は、２５６ビットのスキャンアウト出力値から、１２８ビットの順序を考慮した上で重複なく取得した値となるため、攻撃者が実施する必要のある鍵確認試行回数は、
２５６Ｐ１２８＞＞２１２８＞＞１２８
となる。このように、図３〜図５を参照して説明したインターリーブ回路３００を持つ構成では、従来方式と比較して試行回数を大幅に増加させることが可能となる。
【００６７】
次に、少し条件を緩めて、攻撃者はスキャン回路に対して、インターリーブ回路によるビット拡散対策が実施されていることを知っているが、そのブランチ数Ｎは未知であると仮定する。
【００６８】
この場合、攻撃者は、インターリーブ回路のブランチ数Ｎを仮定してその逆関数をあらかじめ構成しておき、スキャンアウトから得られたビット系列を、前記Ｎを仮定したインターリーブ回路の逆関数に入力することによって、スキャンアウト（ＳＯ）出力時点でのビット系列候補、すなわち拡散されていないビット系列候補を得る。その後、得られたビット系列候補に対して、従来方式の場合と同様の攻撃を適用することにより、鍵候補を取得する。ここで攻撃者は、前述の攻撃手順を、想定されるブランチ数である２からＮまでのすべてに対して実施する必要があるため、攻撃者が実施する必要のある試行回数は１２８（Ｎ−１）≧１２８となる。したがって、Ｎ＞２の場合、従来方式と比較して攻撃者の試行回数を増加させることが可能となる。
【００６９】
一方、正当にスキャンテストを行うことができる製造業者は、前述のようにインターリーブ回路が適用されていること、およびそのブランチ数Ｎを知っているため、事前にインターリーブ回路の逆関数を構成することが可能となる。よってスキャンテスト時には、スキャンアウトされたビット系列を、この逆関数を利用して拡散前のビット系列に変換することにより、通常のスキャンテストを行うことができる。
【００７０】
上述したように、図３〜図５を参照して説明したインターリーブ回路３００をスキャンチェインにおけるスキャンアウト前段に設定した半導体集積回路２００は、スキャンアウトされるビット系列からスキャンＦＦに保持されたビット列を解析する困難性を著しく高めることが可能となる。従って秘匿性の高いデータを扱う半導体集積回路においてスキャンチェインを介した秘密情報の漏洩を効果的に防止することが可能となる。
【００７１】
なお、本実施例では、インターリーブ回路３００を図４に示すようにセレクタとレジスタを用いて構成したが、同様のデータ拡散機能が実現可能な構成であれば、このようなセレクタとレジスタの組み合わせに限らず、その他の回路構成としてもよい。例えば、データ変換処理を行う演算回路や、暗号処理回路を適用した構成としてもよい。
【００７２】
［２．本発明の第２の実施形態の構成および処理について］
次に、図６以下を参照して本発明の第２の実施形態について説明する。図６は本発明の第２の実施形態に係る半導体集積回路４００を示す図である。
【００７３】
図６に示す本実施例の半導体集積回路４００の回路部２１０は、先に図１を参照して説明した回路と同様の回路である。すなわち、様々なデータ処理や演算処理を実行する複数の回路素子からなる組み合わせ回路２２１，２２２と、組み合わせ回路２２１，２２２に対する入力データや、組み合わせ回路２２１，２２２からの出力データを保持、転送するフリップフロップ（ＦＦ）２１１〜２１３を有する。
【００７４】
なお、図６に示すスキャンＦＦ２１１〜２１３の各々は、１つのスキャンＦＦに限らず複数のスキャンＦＦを含む構成であってもよい。図６に示すスキャンＦＦ２１１〜２１３を連結する１つの接続ラインが回路テスト用のスキャンチェインとして設定され、半導体集積回路の製造段階のテストなどに利用される。
【００７５】
半導体集積回路４００の外部端子の構成も先に図１を参照して説明した構成と同様であり、スキャンイン（Ｓｃａｎ−ｉｎ）２３１、スキャンクロック（ＳＣＫ）２３２、スキャンイネーブル（Ｓｃａｎ−ｅｎａｂｌｅ）２３３、およびスキャンアウト（Ｓｃａｎ−ｏｕｔ）２３４を有する。
【００７６】
図６に示す半導体集積回路２００は、先に図３〜図５を参照して説明した第１の実施形態と同様のインターリーブ回路３００を有する。インターリーブ回路３００は、スキャンアウト（Ｓｃａｎ−ｏｕｔ）２３４の前段に設定される。すなわち、半導体集積回路２００内のスキャンＦＦ２１１〜２１３を接続するスキャンチェインの最後尾に位置するスキャンＦＦ２１３の出力部側のスキャンアウト（Ｓｃａｎ−ｏｕｔ）２３４の前段にインターリーブ回路３００が設けられる。
【００７７】
インターリーブ回路３００は、スキャンＦＦ２１３の出力を入力して、入力データを拡散するインターリーブ処理を実行し、処理データをスキャンアウト（Ｓｃａｎ−ｏｕｔ）２３４を介して出力する。
【００７８】
図６に示す本実施例の半導体集積回路４００は、さらに、制御回路４５０を有する。制御回路４５０はインターリーブ回路３００におけるセレクタの制御、すなわちブランチの選択制御を行う。
【００７９】
半導体集積回路４００の外部端子は図１における半導体集積回路１００と同一であり、これらの端子はスキャンテストにおいて使用される。スキャンテストにおいて、キャプチャー動作後、スキャンアウトするためにスキャンＦＦ２１１〜２１３と組み合わせ回路２２１〜２２２からの最終出力ビット系列がインターリーブ回路３００を経てスキャンアウト（Ｓｃａｎ−ｏｕｔ）２３４を介して出力される。
【００８０】
インターリーブ回路３００および制御回路４５０の具体的な構成例を図７に示す。制御回路４５０は、制御部４５１、カウンタ４５２、ＲＯＭ４５３を有する。ＲＯＭ４５３は、インターリーブ回路３００のセレクタ３０１，３０２によるブランチの選択順序を記載したブランチ選択表を格納した記憶部である。
【００８１】
以下の説明では、ブランチ数Ｎ＝４として説明する。
ブランチ選択表のアドレスに対応する要素を除いた要素数をＭとし、ブランチ数Ｎ＝４、要素数Ｍ＝１６とした場合のＲＯＭ４５３に記憶されるブランチ選択表の例を図８に示す。図８に示すように、ブランチ選択表は、ＲＯＭ４５３におけるブランチ選択表の各アドレス（ａｄｄｒｅｓｓ）に、０から３までのブランチ番号（Ｄａｔａ）が順不同に格納されたリストである。
【００８２】
一方、カウンタ４５２は、０からＭ−１までをカウントするＭ進カウンタである。制御部４５１の制御により、スキャンクロック（ＳＣＫ）に応じてカウント値を更新する。制御部４５１の制御により、ＲＯＭ４５３に対してカウンタ４５２で生成したカウント値（０〜Ｍ−１）をアドレスとして供給する。
【００８３】
ＲＯＭ４５３は、図８に示すブランチ選択表から、カウンタ４５２から供給されたカウント値（０〜Ｍ−１）に相当するアドレスを選択し、選択したアドレスに対応付けて記録されたブランチ番号（Ｄａｔａ）を取得する。取得したブランチ番号（Ｄａｔａ）が、制御部４５１の制御の下、各クロックタイミング毎にインターリーブ回路３００のセレクタ制御部３０３に供給される。
【００８４】
インターリーブ回路３００のセレクタ制御部３０３は、制御回路４５０から供給されたブランチ番号をセレクタ３０１および３０２のセレクト信号として適用する。この処理により、インターリーブ回路３００には、制御回路４５０のＲＯＭ４５０に格納されたブランチ選択表に設定されたブランチ番号が、順次提供される。
【００８５】
図８に示すブランチ選択表を適用した場合、インターリーブ回路３００には、０，３，１，２，１，２，０，３・・・の各ブランチ番号がクロックタイミング毎に提供される。インターリーブ回路３００のセレクタ制御部３０３は、制御回路４５０から供給されたこのブランチ番号をセレクタ３０１および３０２のセレクト信号として、クロックタイミング毎に順次適用する。
【００８６】
ＲＯＭ４５３に格納するブランチ選択表を図８に示すような設定、すなわち、ブランチ選択順序を順不同なものとすることにより、セレクタ３０１および３０２におけるブランチが見かけ上ランダムに選択されているように動作させることが可能となる。
【００８７】
以下、第２の実施形態における制御回路４５０の動作と、それに伴うインターリーブ回路３００の動作シーケンスについて説明する。今、簡単のため、Ｎ＝４、Ｍ＝１６とし、制御回路４５０のＲＯＭ４５３には図８に示すブランチ選択表が記憶されているものとする。この場合、カウンタ４５２は１６進カウンタとなる。
【００８８】
制御回路４５０では、はじめにカウンタ４５２の初期値（ここでは仮に０とする）がＲＯＭ４５３のアドレスに供給され、ＲＯＭ４５３からはアドレス０ｘ００に対応するブランチ選択表の値、すなわち０が出力される。これにより、インターリーブ回路３００におけるセレクタ３０１および３０２ではブランチ０が選択される。
【００８９】
次に、スキャンクロック（ＳＣＫ）が入力されると、カウンタ４５２がカウントアップし、ＲＯＭ４５３には１が供給される。これに伴い、ＲＯＭ４５３はアドレス０ｘ０１に対応するブランチ選択表の値、すなわち３を出力する。したがって、セレクタ３０１および３０２ではブランチ３が選択されることとなる。
【００９０】
以下、制御回路４５０は、スキャンクロック（ＳＣＫ）が入力される度に同様の動作を実行する。これにより、セレクタ３０１および３０２では、ＲＯＭ４５３に格納されたブランチ選択表に従ってブランチが選択されるため、ブランチ選択表に記載の選択順序を順不同なものとすることにより、見かけ上ランダムにブランチが選択されているよう動作させることが可能となっている。
【００９１】
以上の動作による拡散処理、すなわちインターリーブ回路３００に入力されたビット系列｛ｂ０，ｂ１，ｂ２，ｂ３，…｝がどのように拡散するかについて、図９のタイミングチャートを用いて説明する。図９の信号名は、先に説明した実施例１に対応する図５に示す信号名と同様である。なお、図５同様、簡単のため各レジスタ及びカウンタにおける初期値は０であるものとする。
【００９２】
時刻ｔ０では、入力セレクタ３０１にはスキャンチェインからの最初の出力ビットが供給されている。図に示す［入力］のｂ０である。この時点で、制御回路４５０のカウンタ４５２からの出力は初期値０であるため、ＲＯＭ４５３の出力も０となり、セレクタ３０１および３０２が選択するブランチは０となる。ただし、時間ｔ０時点では、入力値ｂ０はセレクタ３０１のブランチ０を経由してレジスタ３１１に格納されていない。格納処理は、クロック印加を契機として行われる。従って、インターリーブ回路３００の出力はセレクタ３０２が選択しているブランチ０に接続されているレジスタ３１１の値となる。すなわち０が出力されている。
【００９３】
次に、時刻ｔ１でＳＣＫにクロックが印加されると、セレクタ３０１への入力値ｂ０はセレクタ３０１のブランチ０を経由してレジスタ３１１に格納される。このときレジスタ３１２、３１３および３１４の値は保持（オール０）される。同時にカウンタ４５２がインクリメントされ１となる。これは、図８に示すブランチ選択表のアドレス０ｘ０１に対応する。
【００９４】
ＲＯＭ４５３のブランチ選択表のアドレス０ｘ０１に対応するブランチ番号３が、インターリーブ回路３００のセレクタ制御部３０３に供給される。これによりセレクタ３０１および３０２のセレクタはブランチ３に切り替わり、セレクタ３０２の出力はレジスタ３１４の右端の値、すなわち０となる。また、セレクタ３０１にはｂ１が供給され、それがレジスタ３１４に供給される。
【００９５】
さらに時刻ｔ２でＳＣＫにクロックが印加されると、レジスタ３１４が１−ｂｉｔシフト動作を行うと共に、ｂ１がセレクタ３０１のブランチ３を経由してレジスタ３１４の左端のレジスタに格納される。この結果、レジスタ３１４の値は｛ｂ１，０，０，０｝となる。同時にカウンタ４５２がインクリメントされ、２となる。するとＲＯＭ４５３はセレクタ３０１および３０２のセレクト信号に１を供給する。これによりセレクタ３０１および３０２のセレクタはブランチ１に切り替わり、セレクタ３０２の出力はレジスタ３１２の右端の値、すなわち０となり、セレクタ３０１にはｂ２が供給される。
時刻ｔ３以降も同様であり、図９のタイミングチャートにより動作が確認できるので説明は省略する。
【００９６】
図９のタイミングチャートから理解されるように、インターリーブ回路３００に対する入力ビット系列と出力ビット系列は以下のような設定となる。
入力ビット系列
｛ｂ０，ｂ１，ｂ２，ｂ３，ｂ４，…｝
は、インターリーブ回路３００を経由することによって、
出力ビット系列
｛０，０，０，０，０，０，ｂ０，０，０，ｂ６，０，ｂ２，０，ｂ３，ｂ４，ｂ９，ｂ１５，ｂ１，ｂ１１，ｂ５，…｝
となる。
このように、インターリーブ回路３００の処理によって、インターリーブ回路３００入力時に隣接していたビットが出力時には拡散される。すなわち、インターリーブ回路３００に入力されたビット系列は、インターリーブ回路３００から入力ビット系列と異なる拡散されたビット系列として出力される。
【００９７】
なお、正当なスキャンテストの実行者は、インターリーブ回路３００において実行されるインターリーブ処理のアルゴリズムを知っている。従って、インターリーブ処理の逆処理を実行するアルゴリズムを例えばソフトウェアを適用して実行する。この処理によって、インターリーブ前のビット系列を取得してテスト処理を行うことが可能である。
【００９８】
一方、悪意のある解析者は、インターリーブ処理のアルゴリズムを知らないため、インターリーブ回路によって拡散されたデータのみからスキャンチェインに接続されたスキャンＦＦの保持値の解析を行うことになる。
【００９９】
以下、スキャンチェインに接続されたスキャンＦＦに秘密情報である暗号鍵データが格納されていたと仮定し、インターリーブ回路によって拡散されたデータを用いて鍵解析を実行する場合の鍵探索に必要な試行回数について考察する。ここでは、簡単のため、スキャンチェインを介してスキャンアウトされる値を２５６ビットのビット列とし、ここに１２８ビットの鍵が含まれているものとする。
【０１００】
まず、攻撃者がスキャン回路に対して実施されている対策に関して未知である場合について考察する。この場合、第１の実施形態同様、攻撃者はスキャンアウトされた出力から、取りうるすべての鍵候補に関して試行を実施する必要があるため、その最大試行回数は２５６Ｐ１２８となる。よって、第１の実施形態同様、攻撃者に対してその試行回数を大幅に増加させることが可能となっている。
【０１０１】
次に、スキャン回路に対してインターリーブ回路が対策として利用されていることが既知である一方、ブランチ数ＮおよびＲＯＭに記憶されているブランチ選択表が未知である場合について考える。この場合攻撃者は、第１の実施形態同様、インターリーブ回路におけるブランチ数Ｎを探索する必要があることに加え、ＲＯＭに格納されたブランチ選択表にあるブランチ選択順序をも探索する必要がある。
【０１０２】
以下、攻撃者が実施する手順について具体的に説明する。攻撃者はまず、ブランチ数をｉと仮定した上で、ＲＯＭに記憶されている表のブランチ選択順序として取りうるすべての組み合わせに対して試行を行う。このため、拡散されたビット系列をＳＯからの出力に戻すための試行回数は、仮定したブランチ数ｉに対して最大ｉ！となる。これに加えて攻撃者は、前述の試行の各々において、２５６ビットの出力から１２８ビットの鍵を順に探索するという試行が必要となるため、仮定したブランチ数ｉに対して攻撃者が行う必要のある試行回数は、最大１２８×ｉ！となる。さらに攻撃者は、ブランチ数ｉとして２からＮまでの全候補に前述した試行を適用する必要がある。このため、攻撃者が行うべき試行の最大回数は、以下の値となる。
【０１０３】
【数１】
2010261768.tif 000003
【０１０４】
また、ＲＯＭに格納されているブランチ選択表の要素数Ｍは、通常Ｍ≧Ｎであるため、この場合には最大、以下の試行回数となる。
【０１０５】
【数２】
2010261768.tif 000004
【０１０６】
また図８のブランチ選択表は、ブランチ選択順序が重複しないようにその要素を選択しているが、攻撃者の試行回数を増加させるために、重複するよう選択してもよい。この場合には最大試行回数は、以下の回数となり、さらに試行回数が増加する。
【０１０７】
【数３】
2010261768.tif 000005
【０１０８】
上述したように、ランダムなブランチ選択を可能とした第２の実施形態の構成を適用することにより、前述の第１の実施形態よりもさらに攻撃者の試行回数を増加させることが可能となる。なお、第２の実施形態では、攻撃者はインターリーブ回路のブランチ数Ｎに加え、ブランチ選択表の各要素をも特定する必要がある。さらに、ブランチ選択表の要素数ＭはＲＯＭのサイズに合わせて増加させることが可能であるため、インターリーブ回路の利用が既知である場合においても、攻撃者の試行回数を増加させることが可能となっている。
【０１０９】
一方、正当にスキャンテストを行うことができる製造業者は、前述のようにインターリーブ回路が適用されていること、およびそのブランチ数Ｎおよびブランチ選択表の内容を知っているため、事前にインターリーブ回路の逆関数を構成することが可能となる。よってスキャンテスト時には、スキャンアウトされたビット系列を、この逆関数を利用して拡散前のビット系列に変換することにより、通常のスキャンテストを行うことができる。
【０１１０】
以上、説明した第２の実施形態では、ブランチが見かけ上ランダムに選択されているように動作させる一形態として、ＲＯＭに格納されたブランチ選択表を用いてブランチ選択の信号を発生させている。しかしながら、その本質は、ブランチをランダムに選択することによって、攻撃者が実施すべき試行回数を増加させることにあり、これを達成するものであれば、この方法に限定されないことは明らかである。例えば、カウンタとＲＯＭを利用する代わりに、乱数発生器を用いてブランチの選択信号を発生させるといった構成を適用してもよい。
【０１１１】
［３．本発明の第３の実施形態の構成および処理について］
最後に図６以下を参照して本発明の第１の実施形態について説明する。図３は本発明の第１の実施形態に係る半導体集積回路４００を示す図である。
【０１１２】
この第３の実施形態は、前述の第１の実施形態、または第２の実施形態と組み合わせて適用することが可能な実施例である。前述の第１および第２の実施形態では、インターリーブ回路を用いてビット系列を拡散することで、攻撃者に対して、ビット系列に含まれる鍵などの重要情報の解析を困難にしている。
【０１１３】
しかしながら、前述の第１，２の実施形態において説明した処理例をそのまま適用すると、攻撃者は各実施形態において説明した試行回数よりもはるかに少ない試行回数で鍵を特定できてしまう可能性が存在する。これを第１の実施形態を例として具体的に説明する。
【０１１４】
第１の実施形態では、簡単のためインターリーブ回路内の各レジスタを０のような固定値で初期化していた。このような初期化設定を行った場合には、拡散された最初のビット系列であるｂ０が出力されるまで、０または１といった同一の値が出力されることとなる。ここで、第１の実施形態において示したインターリーブ回路の特性から、スキャンアウト（Ｓｃａｎ−ｏｕｔ）より出力される最初のＮビットは、インターリーブ回路内に存在する各レジスタの初期値となることが分かる。よって攻撃者は、スキャンテスト実施開始時から出力される固定値の出力回数を測定することによって、インターリーブ回路におけるブランチ数Ｎを類推可能となる。よって、第１および第２の実施形態を実際に適用する場合には、各レジスタの初期値を固定化しないことが求められる。これを満たす構成を以下、第３の実施形態として説明する。
【０１１５】
第３の実施形態では、インターリーブ回路内のレジスタを乱数で初期化する。つまり第３の実施形態は第１および第２の実施形態に対する付加機能として位置づけられる。
【０１１６】
図１０は、本発明の第３の実施形態に係る半導体集積回路５００を示す図である。図１０に示す例は、先に図３を参照して説明した前述の第１の実施形態の半導体集積回路２００に初期化処理部５５０を追加した構成である。
【０１１７】
図１０に示す本実施例の半導体集積回路５００の回路部２１０は、先に図１を参照して説明した回路と同様の回路である。すなわち、様々なデータ処理や演算処理を実行する複数の回路素子からなる組み合わせ回路２２１，２２２と、組み合わせ回路２２１，２２２に対する入力データや、組み合わせ回路２２１，２２２からの出力データを保持、転送するフリップフロップ（ＦＦ）２１１〜２１３を有する。
【０１１８】
インターリーブ回路３００は、先に説明した第１の実施形態のインターリーブ回路と同様の処理を実行する回路である。スキャンＦＦ２１３の出力を入力して、入力データを拡散するインターリーブ処理を実行し、処理データをスキャンアウト（Ｓｃａｎ−ｏｕｔ）２３４を介して出力する。
【０１１９】
インターリーブ回路３００および初期化処理部５５０の具体的な構成例を図１１に示す。初期化処理部５５０は、制御部５５１および乱数生成部５５２を有する。制御部５５１はインターリーブ回路３００内にあるレジスタの初期化処理制御を行い、乱数生成部５５２はインターリーブ回路３００内にあるレジスタを初期化するための設定値を乱数として生成する処理を行う。
【０１２０】
制御部５５１はインターリーブ回路３００内のレジスタ入力を乱数生成部５５２からの入力に切り替え、ＳＣＫにクロックを印加すると、すべてのレジスタが一度に乱数で初期化される構成になっている。
【０１２１】
乱数生成部５５２は、インターリーブ回路３００内のレジスタの初期化に必要な乱数列を発生する。つまり、インターリーブ回路３００内にＺビット分のレジスタがあれば、Ｚビットの乱数列を発生し、これが各レジスタの初期化処理時に各レジスタに供給される。
【０１２２】
以下、乱数列によって初期化された各レジスタの具体的な値を例示する。
インターリーブ回路３００のブランチ数Ｎ＝４の場合を例として説明する。ブランチ数Ｎ＝４の場合、インターリーブ回路３００のレジスタ数は、
１＋２＋３＋４＝１０となる。
乱数生成部５５２は、１０個のレジスタ設定値に対応する
乱数列｛ｒ０，ｒ１，ｒ２，…，ｒ９｝を生成する。
【０１２３】
これらの値によって各レジスタが初期化される。この場合、例えば、レジスタ３１１の値は｛ｒ０｝、レジスタ３１２は｛ｒ２，ｒ１｝、レジスタ３１３は｛ｒ５，ｒ４，ｒ３｝、レジスタ３１４は｛ｒ９，ｒ８，ｒ７，ｒ６｝となる。
【０１２４】
図１２は第１の実施形態に対して前述の乱数によるレジスタの初期化を行った場合のタイミングチャートである。各信号は図５を参照して説明した信号と同様である。
【０１２５】
時刻ｔ０のとき、初期化され、各レジスタには前述の乱数値が格納されている状態である。時刻ｔ１以降、スキャンチェインでつながったスキャンＦＦに格納された値がインターリーブ回路３００内のレジスタに格納されていく。インターリーブ回路３００に入力されるビット系列は｛ｂ０，ｂ１，ｂ２，ｂ３，ｂ４，…｝であり、これは第１の実施形態の動作説明での入力ビット系列と同様である。第１の実施形態と同様なので、詳細な動作説明は省略する。
【０１２６】
図１２に示すタイミングチャートから理解されるように、インターリーブ回路３００に対する入力ビット系列と出力ビット系列は以下のような設定となる。
入力ビット系列
｛ｂ０，ｂ１，ｂ２，ｂ３，ｂ４，…｝
は、インターリーブ回路３００を経由することによって、
｛ｒ０，ｒ１，ｒ３，ｒ６，ｂ０，ｒ２，ｒ４，ｒ７，ｂ４，ｂ１，ｒ５，ｒ８，…｝
となる。
【０１２７】
第１の実施形態で示した図５のスキャンアウトされたビット系列には、初期化されていた値、すなわち０が出力されていた。ところが、第３の実施形態では、０が出力されていた部分に、乱数が出力される。これにより次のような効果が得られる。
【０１２８】
第１の実施形態で例示したように、インターリーブ回路内の各レジスタを固定値で初期化した場合には、スキャンテスト開始時から出力される固定値（第１の実施形態における例では０）の連続回数からインターリーブ回路のブランチ数Ｎが推測可能となるため、インターリーブ回路によるビット拡散の効果を無効化可能となっていた。しかしながら、第３の実施形態を適用することにより、連続して出力される固定値部分が乱数となっているため、スキャンアウトによって出力されたビット系列からブランチ数を推測することが困難となり、攻撃者は各実施形態において示した通り、ブランチ数候補を全探索する必要がある。
【０１２９】
一方、正当にスキャンテストを行うことができる製造業者は、インターリーブ回路の逆関数を用意しておき、スキャンアウトのビット系列をインターリーブ入力前のビット系列に変換することにより、通常のスキャンテストを行うことができる。つまり初期化する機能を付加しても、それによってスキャンアウトされたビット系列に対して新たな操作を必要としない。
【０１３０】
第３の実施形態ではインターリーブ回路内のレジスタの初期化の一例を示したが、これ以外にも、インターリーブ回路内の各レジスタを、攻撃者にとって未知である値に毎回初期化する機能を備えるものであればよい。
【０１３１】
なお、上述した説明では、第１の実施形態に初期化処理部を追加した構成例を説明したが、第２の実施形態に初期化処理部を組み合わせてもよい。初期化処理部を追加することで、秘密情報の解析困難性を高めることが可能となる。
【０１３２】
なお、先にも簡単に説明したが、インターリーブ回路３００は、データ拡散機能が実現可能な構成であれば、このようなセレクタとレジスタの組み合わせに限らず、その他の回路構成としてもよい。例えば、データ変換処理を行う演算回路や、暗号処理回路を適用した構成としてもよい。また、秘密情報の漏洩防止の観点から、スキャンチェインを鍵情報などの秘密情報が格納されるレジスタを連続して接続するのではなく、秘密情報の格納されるレジスタを不連続になるような設定としたスキャンチェインのレイアウトとすることが効果的である。すなわち、例えば暗号鍵のような秘密譲歩が格納される複数のレジスタを、連続接続することなく不連続な接続としたスキャンチェインを設定することで、スキャンチェインを介した出力からのデータ解析困難性をさらに高めることが可能となる。
【０１３３】
なお、上記実施例においては集積回路の構成を中心として説明したが、上記の実施例において説明した半導体集積回路を例えばＰＣ等の情報処理装置に装着し、情報処理装置内において上述した各実施例の半導体集積回路におけるデータ拡散処理に対する制御を行う構成としてもよい。この処理制御は、上記の実施例において説明した半導体集積回路内部の制御部において、半導体集積回路内のメモリに格納したプログラムを利用して実行することが可能である。あるいは、情報処理装置内の半導体集積回路と接続された他のＬＳＩ素子などに形成された制御部やメモリを利用して、プログラムを実行して上記の構成を持つ半導体集積回路にコマンドを入力してインターリーブ処理などのデータ拡散処理に対する制御を行う構成としてもよい。
【０１３４】
以上、特定の実施例を参照しながら、本発明について詳解してきた。しかしながら、本発明の要旨を逸脱しない範囲で当業者が実施例の修正や代用を成し得ることは自明である。すなわち、例示という形態で本発明を開示してきたのであり、限定的に解釈されるべきではない。本発明の要旨を判断するためには、特許請求の範囲の欄を参酌すべきである。
【０１３５】
また、明細書中において説明した一連の処理はハードウェア、またはソフトウェア、あるいは両者の複合構成によって実行することが可能である。ソフトウェアによる処理を実行する場合は、処理シーケンスを記録したプログラムを、専用のハードウェアに組み込まれたコンピュータ内のメモリにインストールして実行させるか、あるいは、各種処理が実行可能な汎用コンピュータにプログラムをインストールして実行させることが可能である。例えば、プログラムは記録媒体に予め記録しておくことができる。記録媒体からコンピュータにインストールする他、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットといったネットワークを介してプログラムを受信し、内蔵するハードディスク等の記録媒体にインストールすることができる。
【０１３６】
なお、明細書に記載された各種の処理は、記載に従って時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されてもよい。また、本明細書においてシステムとは、複数の装置の論理的集合構成であり、各構成の装置が同一筐体内にあるものには限らない。
【産業上の利用可能性】
【０１３７】
以上、説明したように、本発明の一実施例構成によれば、ＬＳＩなどの集積回路のテスト用パスとして設定されたスキャンチェインの出力部にデータ拡散処理を行うインターリーブ回路を設定した。インターリーブ回路は例えば段数の異なるレジスタによって構成される複数のブランチと、スキャンチェインからのデータ入力および外部出力を行うブランチを選択するセレクタを備え、選択ブランチを逐次変更する制御を実行する。本構成により、スキャンチェインからの出力ビット系列が拡散され外部に出力されることになり、フリップフロップに格納されたデータの漏洩を防止することができる。
【符号の説明】
【０１３８】
１００  半導体集積回路
１１１〜１１３  スキャンＦＦ
１２１，１２２  組み合わせ回路
１３１  スキャンイン（Ｓｃａｎ−ｉｎ）
１３２  スキャンクロック（ＳＣＫ）
１３３  スキャンイネーブル（Ｓｃａｎ−ｅｎａｂｌｅ）
１３４  スキャンアウト（Ｓｃａｎ−ｏｕｔ）
１５１  マルチプレクサ
１５２  フリップフロップ（ＦＦ）
２００  半導体集積回路
２１１〜２１３  スキャンＦＦ
２２１，２２２  組み合わせ回路
２３１  スキャンイン（Ｓｃａｎ−ｉｎ）
２３２  スキャンクロック（ＳＣＫ）
２３３  スキャンイネーブル（Ｓｃａｎ−ｅｎａｂｌｅ）
２３４  スキャンアウト（Ｓｃａｎ−ｏｕｔ）
３００  インターリーブ回路
３０１，３０２  セレクタ
３０３  セレクタ制御部
３１１〜３１４  レジスタ
４００  半導体集積回路
４５０  制御回路
４５１  制御部
４５２  カウンタ
４５３  ＲＯＭ
５００  半導体集積回路
５５０  初期化処理部
５５１  制御部
５５２  乱数生成部
【図１】
2010261768.tif 000006
【図２】
2010261768.tif 000007
【図３】
2010261768.tif 000008
【図４】
2010261768.tif 000009
【図５】
2010261768.tif 000010
【図６】
2010261768.tif 000011
【図７】
2010261768.tif 000012
【図８】
2010261768.tif 000013
【図９】
2010261768.tif 000014
【図１０】
2010261768.tif 000015
【図１１】
2010261768.tif 000016
【図１２】
2010261768.tif 000017
【手続補正書】
【提出日】平成21年6月16日(2009.6.16)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００１３
【補正方法】変更
【補正の内容】
【００１３】
次に図１を用いてスキャン回路を使った半導体集積回路の試験方法について説明する。
まず半導体集積回路１００のスキャンイネーブル（Ｓｃａｎ−ｅｎａｂｌｅ）１３３を［Ｈｉｇｈ］に設定し、スキャンイン（Ｓｃａｎ−ｉｎ）１３１からクロックサイクルごとに予め設定したテスト用のシリアルにデータを入力して、スキャンＦＦ１１１，１１２，１１３にテスト用の値を設定する。スキャンＦＦ１１１、１１２、１１３はシリアルに接続されている。前述したスキャンチェインである。スキャンチェインで接続されたスキャンＦＦ１１１〜１１３はシフトレジスタ動作を行い、入力データを伝達していく。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００４４
【補正方法】変更
【補正の内容】
【００４４】
図３に示す本実施例の半導体集積回路２００の回路部２１０は、先に図１を参照して説明した回路と同様の回路である。すなわち、様々なデータ処理や演算処理を実行する複数の回路素子からなる組み合わせ回路２２１，２２２と、組み合わせ回路２２１，２２２に対する入力データや、組み合わせ回路２２１，２２２からの出力データを保持、転送するスキャンフリップフロップ（ＦＦ）２１１〜２１３を有する。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００７３
【補正方法】変更
【補正の内容】
【００７３】
図６に示す本実施例の半導体集積回路４００の回路部２１０は、先に図１を参照して説明した回路と同様の回路である。すなわち、様々なデータ処理や演算処理を実行する複数の回路素子からなる組み合わせ回路２２１，２２２と、組み合わせ回路２２１，２２２に対する入力データや、組み合わせ回路２２１，２２２からの出力データを保持、転送するスキャンフリップフロップ（ＦＦ）２１１〜２１３を有する。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００８１
【補正方法】変更
【補正の内容】
【００８１】
以下の説明では、ブランチ数Ｎ＝４として説明する。
ブランチ選択表のアドレスに対応する要素数をＭとし、ブランチ数Ｎ＝４、要素数Ｍ＝１６とした場合のＲＯＭ４５３に記憶されるブランチ選択表の例を図８に示す。図８に示すように、ブランチ選択表は、ＲＯＭ４５３におけるブランチ選択表の各アドレス（ａｄｄｒｅｓｓ）に、０から３までのブランチ番号（Ｄａｔａ）が順不同に格納されたリストである。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】０１１１
【補正方法】変更
【補正の内容】
【０１１１】
［３．本発明の第３の実施形態の構成および処理について］
最後に図６以下を参照して本発明の第３の実施形態について説明する。図６は本発明の第３の実施形態に係る半導体集積回路４００を示す図である。
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】０１１７
【補正方法】変更
【補正の内容】
【０１１７】
図１０に示す本実施例の半導体集積回路５００の回路部２１０は、先に図１を参照して説明した回路と同様の回路である。すなわち、様々なデータ処理や演算処理を実行する複数の回路素子からなる組み合わせ回路２２１，２２２と、組み合わせ回路２２１，２２２に対する入力データや、組み合わせ回路２２１，２２２からの出力データを保持、転送するスキャンフリップフロップ（ＦＦ）２１１〜２１３を有する。