(57)【要約】  ビット列生成装置２００は、グリッチを発生するグリッチ発生回路２０５と、グリッチ発生回路２０５によって発生されたグリッチ波形をサンプリングするサンプリング回路２２０と、サンプリング回路２２０によってサンプリングされたグリッチ波形に基づいて、１か０かのいずれかを示す１ビットデータを生成し、生成された複数の１ビットデータからなるビット列を生成するグリッチ形状判定回路２１１とを備えた。ビット列生成装置２００により、配置配線の自由度が低いデバイスであっても、ランダム性の高い秘密情報を生成可能であり、かつ、デザインルールに違反しないＰＵＦ回路を提供できる。
2011086688.tif 000002
【特許請求の範囲】
【請求項１】
グリッチを発生するグリッチ発生部と、
前記グリッチ発生部によって発生された前記グリッチの波形を取得するグリッチ波形取得部と、
前記グリッチ波形取得部によって取得された前記グリッチの波形に基づいて、１か０かのいずれかを示す１ビットデータを生成するビットデータ生成部と、
前記ビットデータ生成部によって生成された複数の前記１ビットデータからなるビット列を生成するビット列生成部と
を備えたことを特徴とするビット列生成装置。
【請求項２】
前記グリッチ発生部は、
複数の論理回路を組み合わせた組み合わせ回路であって、入力された入力データに対して過渡遷移に起因する前記グリッチを発生して出力する組み合わせ回路を備え、
前記グリッチ波形取得部は、
前記組み合わせ回路から前記グリッチを入力し、入力された前記グリッチを遅延させるグリッチ遅延部と、
前記グリッチ遅延部により遅延された前記グリッチをサンプリングするサンプリング部と
を備えたことを特徴とする請求項１記載のビット列生成装置。
【請求項３】
前記組み合わせ回路は、
前記入力データとしてｕビット（ｕは１以上の整数）の入力データＸを入力し、入力データＸを用いて、ｖビット（ｖは１以上の整数）のデータである出力データＹを計算するためにＹ＝ｆ（Ｘ）の演算を実行すると共に、前記出力データＹを各ビットごとに前記グリッチを含んで出力するｖ本のビット信号線を備え、
前記グリッチ発生部は、さらに、
前記複数のビット信号線のいずれかのビット信号線による出力を指示する選択信号を入力し、入力された前記選択信号の指示するビット信号線から前記ビットに対応するビット対応信号を出力するグリッチ出力セレクタを備えた
ことを特徴とする請求項２記載のビット列生成装置。
【請求項４】
前記組み合わせ回路は、
互いに異なる前記入力データＸを入力し、
前記グリッチ出力セレクタは、
前記選択信号で制御されることによって、それぞれの前記入力データＸについて前記複数のビット信号線の各ビット信号線から前記ビット対応信号を出力することを特徴とする請求項３記載のビット列生成装置。
【請求項５】
前記組み合わせ回路は、
同一の前記入力データＸを繰り返し入力し、
前記グリッチ出力セレクタは、
同一の前記入力データＸが前記組み合わせ回路へ繰り返し入力されるごとにいずれかの前記ビット信号線から前記ビット対応信号を出力することにより、どの前記ビット信号線からも所定回数、前記ビット対応信号を出力し、
前記ビットデータ生成部は、
前記所定回数出力された前記ビット対応信号のそれぞれに対応する前記１ビットデータを前記ビット信号線ごとに生成し、前記ビット信号線ごとに生成された前記１ビットデータの総数に占める１と０との比率に応じて、同一の前記入力データＸに対する各ビット信号線の出力の使用可否を決定することを特徴とする請求項３または４のいずれかに記載のビット列生成装置。
【請求項６】
前記ビットデータ生成部は、
前記ビット信号線から出力された前記ビット対応信号を元に生成された前記１ビットデータの総数に占める１の比率が１００％の場合と、０の比率が１００％の場合とのいずれかの場合には、同一の前記入力データＸに対する前記ビット信号線の出力を使用可能と決定することを特徴とする請求項５記載のビット列生成装置。
【請求項７】
前記組み合わせ回路は、
前記ビットデータ生成部によって同一の前記入力データＸに対する前記ビット信号線の出力が使用可能と決定された後に、再び、同一の前記入力データＸを繰り返し入力し、
前記グリッチ出力セレクタは、
同一の前記入力データＸが前記組み合わせ回路へ繰り返し入力されるごとに前記ビットデータ生成部によって出力が使用可能と決定された前記ビット信号線である特定の決定信号線から、所定回数、前記ビット対応信号を出力し、
前記ビットデータ生成部は、
前記特定の決定信号線から前記所定回数出力された前記ビット対応信号ごとに前記ビット対応信号に対応する前記１ビットデータを生成し、生成された前記１ビットデータの総数からなるビットグループに含まれる１と０との比率に基づいて前記ビットグループを代表する代表ビットを１と０とのいずれかに決定し、
前記組み合わせ回路と、前記グリッチ出力セレクタと、前記ビットデータ生成部とは、
繰り返し入力される同一の前記入力データＸに対して同様の処理を実行することにより、少なくとも他の一本の前記決定信号線に関して、同一の前記入力データＸに対する前記代表ビットを決定し、
前記ビット列生成部は、
前記ビットデータ生成部によって決定された複数の前記代表ビットを使用して、前記ビット列を生成することを特徴とする請求項５または６のいずれかに記載のビット列生成装置。
【請求項８】
前記ビット列生成装置は、さらに、
前記ビット列生成部によって生成された前記ビット列の誤りを訂正する誤り訂正部を備えたことを特徴とする請求項２〜７のいずれかに記載のビット列生成装置。
【請求項９】
前記グリッチ遅延部は、
信号線で直列に接続され、前記グリッチを遅延させて伝搬させる複数の遅延素子を備え、
前記サンプリング部は、
入力信号線と、クロック信号線と、出力信号線とを有する複数のレジスタであって、各レジスタの入力信号線は重複することなくいずれかの前記遅延素子の入力側と出力側とのいずれかの側に接続され、前記クロック信号線から入力される前記クロック信号の立ち上がりに連動して、前記入力信号線の接続部における情報をラッチする複数のレジスタを備え、
前記ビット列生成装置は、さらに、
ゼロから所定の値に立ち上がる信号である伝令信号を入力し、入力された伝令信号を遅延させ、遅延された伝令信号を前記グリッチ遅延部の直列接続の最初の遅延素子に出力する伝令信号遅延部と、
前記サンプリング部の各レジスタに入力するためのクロック信号を入力すると共に、入力された前記クロック信号の出力タイミングを制御する制御信号を入力し、入力された前記制御信号に従ったタイミングで、入力された前記クロック信号を前記サンプリング部の各レジスタに出力する可変遅延部と
を備えたことを特徴とする請求項２〜８のいずれかに記載のビット列生成装置。
【請求項１０】
前記ビットデータ生成部は、
前記伝令信号遅延部によって出力された遅延された伝令信号を前記可変遅延部によって出力された前記クロック信号に連動して前記サンプリング部の各レジスタがラッチした前記レジスタごとのラッチデータの値に基づいて前記レジスタごとのラッチデータをソートし、ソート結果を記憶することを特徴とする請求項９記載のビット列生成装置。
【請求項１１】
前記ビットデータ生成部は、
前記サンプリング部の各レジスタが前記グリッチ発生部からグリッチ遅延部に出力された信号をラッチした場合には、記憶された前記ソート結果に基づいて、前記グリッチ発生部から出力され各レジスタによってラッチされた信号をソートすることを特徴とする請求項１０記載のビット列生成装置。
【請求項１２】
前記ビットデータ生成部は、
前記伝令遅延部における前記伝令信号と前記可変遅延部における前記クロック信号との同一の設定に対して、前記サンプリング部の各レジスタを用いた前記伝令信号のサンプリングを繰り返し行うことを特徴とする請求項９〜１１のいずれかに記載のビット列生成装置。
【請求項１３】
前記遅延部は、
加算器の桁上げ信号を用いることにより信号を遅延させることを特徴とする請求項２〜９のいずれかに記載のビット列生成装置。
【請求項１４】
前記ビットデータ生成部は、
前記グリッチ波形取得部によって取得された前記グリッチの波形に含まれる立ち上がりエッジの数が奇数か偶数かによって０と１とのいずれかの１ビットデータを生成すると共に、前記グリッチの波形におけるパルス幅が閾値ｗ以下の場合には、そのパルスを無視することを特徴とする請求項１〜１３のいずれかに記載のビット列生成装置。
【請求項１５】
グリッチを発生し、
発生された前記グリッチの波形を取得し、
取得された前記グリッチの波形に基づいて、１か０かのいずれかを示す１ビットデータを生成し、
生成された複数の前記１ビットデータからなるビット列を生成することを特徴とするビット列生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、認証処理や暗号化処理などを実行するセキュリティ装置に関する。例えば、暗号処理で用いる秘密情報や、装置を認証するために必要な装置固有の識別子を、装置に固有な物理量を元に生成する装置に関する。
【背景技術】
【０００２】
近年、携帯電話に代表される組み込み機器のネットワーク化に伴い、組み込み機器で扱うデータの秘匿や、データ完全性の保持及び組み込み機器そのものの認証のために、組み込み機器が、情報セキュリティに関わる処理を行う必要性が高まっている。これら情報セキュリティに関わる処理は、暗号化アルゴリズムや認証アルゴリズムによって実現される。【０００３】
ここで、前記アルゴリズムを実行する上で大前提となるのは、各組み込み機器がユニークな秘密情報や、機器固有の識別子（以下ではこれらの情報を「鍵情報」と呼ぶ）を「安全に」保持していることである。この「安全に」の意味は、その機器を正当に利用可能な者以外にとって、鍵情報の読み取りや改竄が困難であることを指す。【０００４】
鍵情報を安全に保持するための手段として、各種センサ（光センサ、電圧センサ、周波数検出器）を搭載し、物理的な保護膜（金属ケースや樹脂によるモールド）によって外部からの不正アクセスを防ぐ筐体やセキュリティチップなどの耐タンパ機構を用いた保護方法がある。これらの保護方法は、不揮発的に装置内にデジタルデータとして存在する鍵情報を守ることを前提とした手段である。【０００５】
一方、前述の手段とは異なるアプローチで鍵情報を安全に保持する方法として、ＰＵＦ（Ｐｈｙｓｉｃａｌ  Ｕｎｃｌｏｎａｂｌｅ  Ｆｕｎｃｔｉｏｎ）と呼ばれる技術がある。ＰＵＦの大きな特徴は、鍵情報を装置内に不揮発的なデジタルデータとして保持しない点にある。ＰＵＦの実施形態はいくつか存在するが、以下では特許文献１に開示される汎用性の高い「信号発生器をベースとした装置セキュリティ」を代表例として従来技術を説明する。【０００６】
図１９は、特許文献１におけるＰＵＦの実施形態を示す。ビット生成器１００は、Ｎ個のリングオシレータ１０２（Ｒ０〜ＲＮ）で構成されるリングオシレータ群１０１と、選択回路１０４及び周波数比較器１０７で構成される。【０００７】
ビット生成器１００は、各リングオシレータ１０２の周波数特性を鍵情報の情報源とする。リングオシレータの出力信号１０３は各リングオシレータを構成する帰還回路の遅延特性で決定される周波数で発振する。選択回路１０４はＮ本のリングオシレータの出力信号１０３から選択信号１０５（Ｉ，Ｊ）の値に応じて２つの信号１０６（Ｓｉ，Ｓｊ）を対として出力する。次に、Ｓｉ，Ｓｊの発振周波数は周波数比較器１０７にて比較され、周波数比較器１０７は、比較結果１０８を出力する。ここで、Ｓｉ及びＳｊの発振周波数をそれぞれＦｉ、Ｆｊと表記するならば、例としてその差分値Ｆｉ−Ｆｊを比較結果１０８とする方法が挙げられる。最後にビット生成器１００は比較結果１０８と比較結果１０８の正負を表す応答ビット値１０９を出力する。【０００８】
前記特許文献１の実施例において、リングオシレータの発振周波数はデバイスの遅延特性のばらつきに応じて異なるため、ビット生成器１００を同一の設計情報に基づき製造しても、個体に応じて異なる応答ビット値を出力する。従って、前記応答ビット値を各デバイスの識別子として利用することが可能であり、前記識別子は不揮発的なデジタルデータとして格納されておらず、ビット生成器を動作されるたびに生成されるため、従来よりも高い耐タンパ性を持つ、と特許文献１では主張されている。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特表２００９−５２４９９８号公報
【非特許文献】
【００１０】
【非特許文献１】Ａｌｔｅｒａ，「Ｄｅｓｉｇｎ  Ｇｕｉｄｅｌｉｎｅｓ  ｆｏｒ  ＨａｒｄＣｏｐｙ  Ｓｅｒｉｅｓ  Ｄｅｖｉｃｅｓ」，２００８
【非特許文献２】Ａｌｔｅｒａ，「Ｄｅｓｉｇｎ  Ｒｅｃｏｍｍｅｎｄａｔｉｏｎｓ  ｆｏｒ  Ａｌｔｅｒａ  Ｄｅｖｉｃｅｓ  ａｎｄ  ｔｈｅ  Ｑｕａｒｔｕｓ  ＩＩ  Ｄｅｓｉｇｎ  Ａｓｓｉｓｔａｎｔ」，２００９
【発明の概要】
【発明が解決しようとする課題】
【００１１】
特許文献１に記載されたリングオシレータによるＰＵＦの実現には、２つの課題がある。【００１２】
一つは、実装時の配置配線制約と前記応答ビット値の安全性に関するものである。特許文献１ではリングオシレータをすべて同じ設計（５つのインバータを用いたループ回路）によって構成することが記載されている。しかしながら、ＦＰＧＡ（）のような配置配線の自由度が低いデバイスでは、同一の設計によるリングオシレータであっても配置配線によって周波数が大きく異なることがある。この場合、デバイスの個体差によって発生する差よりも、配置配線によって異なる差の方が支配的となるケースがある。その結果として、配置配線によって発振周波数に大きな差があるリングオシレータの対を選択した場合、デバイスに依存せず常に同じ応答ビット値を出力することになる。このようなビット値が多く含まれる場合、応答ビット値のランダム性が低くなるため、安全性上問題となる。この問題の解決策として、Ｎ個のリングオシレータの発振周波数が大きく変わらないように手動で配置配線を行うアプローチが考えられるが、Ｎが大きい場合は非常に困難になることが予想される。あるいは、あらかじめ実装するリングオシレータの数を多くし、自動配置配線を行うことで、偶然に発振周波数が近接するリングオシレータの対のみを用いて応答ビットを生成することも考えられるが、この場合Ｎの大きさを設計保証することが難しく、またリングオシレータと選択回路の回路規模が増大することになる。【００１３】
２つ目の課題は、リングオシレータのような組み合わせループ回路は、ＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）などのデバイスにおいてデザインルール上推奨されない構成となっている課題である。例えば、非特許文献１では、設計によってはリングオシレータを構成するインバータの入出力が中間電位状態となり、発振しない可能性があることが指摘されている。一般に、中間電位状態は貫通電流が定常的に流れる可能性があり、デバイスの信頼性を損ねる危険性がある。同様に、非特許文献２においても、組み合わせループ回路を推奨しない旨が記載されている。【００１４】
本発明は以上のような技術的課題を鑑みてなされたものであり、その目的とするところは、配置配線の自由度が低いデバイスであっても、ランダム性の高い秘密情報を生成可能で、かつデザインルール違反を引き起こさないＰＵＦ回路を提供することにある。
【課題を解決するための手段】
【００１５】
この発明のビット列生成装置は、
グリッチを発生するグリッチ発生部と、
前記グリッチ発生部によって発生された前記グリッチの波形を取得するグリッチ波形取得部と、
前記グリッチ波形取得部によって取得された前記グリッチの波形に基づいて、１か０かのいずれかを示す１ビットデータを生成するビットデータ生成部と、
前記ビットデータ生成部によって生成された複数の前記１ビットデータからなるビット列を生成するビット列生成部と
を備えたことを特徴とする。
【発明の効果】
【００１６】
本発明により、配置配線の自由度が低いデバイスであっても、ランダム性の高い秘密情報を生成可能であり、かつ、デザインルールに違反しないＰＵＦ回路を提供できる。
【図面の簡単な説明】
【００１７】
【図１】実施の形態１における、ビット列生成装置２００のシステムＬＳＩへの搭載例。
【図２】実施の形態１における、同一の論理回路が異なる遅延情報を持つときに起こりうる、回路の挙動の例。
【図３】実施の形態１における、サンプリング回路２２０の構成。
【図４】実施の形態１における、サンプリング結果の期待値と、発生しうるサンプリング結果とを示す図。
【図５】実施の形態１における、ジッタ補正処理を用いてグリッチ捕捉処理を行った場合の捕捉結果。
【図６】実施の形態１における、ジッタ補正処理を行わない場合の捕捉結果。
【図７】実施の形態１における、補足されたグリッチパターンの例。
【図８】実施の形態１における、ビット列生成装置２００の回路構成。
【図９】実施の形態１における、グリッチ発生回路２０５の構成例。
【図１０】実施の形態１における、キャリーパスによる遅延回路とＬＵＴによる遅延回路とを組み合わせた遅延回路の構成例。
【図１１】実施の形態１における、各パラメータの関係。
【図１２】実施の形態１における、ビット列生成装置２００の実装評価結果。
【図１３】実施の形態１における、伝令信号用遅延回路２０６、サンプリング用遅延回路２０９として使用される遅延回路の内部構成例。
【図１４】実施の形態１における、可変遅延回路２０７の内部構成例。
【図１５】実施の形態１における、ビット列生成装置２００の動作を示すフローチャート。
【図１６】実施の形態１における、ビット列生成装置２００によるジッタ補正処理の動作を示すフローチャート。
【図１７】実施の形態１における、サンプリング回路２２０による伝令信号（ｈ）のサンプリングの状態。
【図１８】実施の形態１における、サンプリング用レジスタ群２１０によってラッチされるデータ。
【図１９】従来技術を示す図。
【発明を実施するための形態】
【００１８】
実施の形態１．
図１〜図１８を参照して、実施の形態１のビット列生成装置２００を説明する。実施の形態１のビット列生成装置２００は、グリッチ形状を利用してＰＵＦを構成する方法である。
【００１９】
図１は、ビット列生成装置２００をシステムＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ）１０００に搭載する例を示す図である。ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）５００、内部メモリ６００、外部インタフェース７００などを備える一般的な構成のシステムＬＳＩに、ビット列生成装置２００と、誤り訂正回路３００（誤り訂正部）、暗号処理回路４００を搭載した例である。以下に説明するが、ビット列生成装置２００は、発生させたグリッチからビット列である鍵情報を生成する。この鍵情報は、グリッチＰＵＦである。ビット列生成装置２００によって生成されたデータ（ビット列）は、例えば、暗号処理回路４００による暗号処理などの、情報セキュリティ処理で必要な鍵情報として利用される。ビット列生成装置２００に対する制御は、ＣＰＵ５００から制御可能としてもよい。
【００２０】
以下では、まず「１．１  基本アイデア」〜「３．１  実装評価結果」においてビット列生成装置２００（後述のグリッチＰＵＦ）の概要を説明した後、さらに詳しく、ビット列生成装置２００の構成及び動作を詳しく説明する。
【００２１】
（１．１  基本アイデア）
論理回路の上流設計においてデバイス固有の特徴量を入力し、その特徴に応じたデバイスの挙動をシミュレートすることを考える。このシミュレーションの目的は、実装するＰＵＦがデバイスの個体差によってどの程度の情報量をもつかを評価することであり、製造したＬＳＩを大量に評価せずとも、その情報量（特にその下限を）を評価できる環境を構築することにある。前述のように、上流設計のシミュレーションに最も親和性のある特徴量は遅延情報である。各デバイスが持つ遅延情報の個体差がＰＵＦのレスポンスの違いに直接結びつくような回路構成であれば、現状の論理回路設計フローの範囲でＰＵＦの情報量を評価できる可能性がある。ここで、ある同一の論理回路が異なる遅延情報を持つときに起こりうる、回路の挙動の違いについて考える。
図２は、同一の論理回路が異なる遅延情報を持つときに起こりうる、回路の挙動の例を示す。例えば図２（ａ）のように、複数の入力に対してＡＮＤやＸＯＲなどの論理演算を行う回路を考える。このような回路では、ある特殊な条件が成立しない限り、各信号の遅延差によって、「グリッチ」と呼ばれる信号の過渡遷移が発生する。図２の例では、入力信号ｘ１、ｘ２、ｘ３がすべて０から１へと変化する場合、ＸＯＲゲートの出力は、入力信号ｘ１、ｘ２の信号変化に差があることによって凸状のグリッチが発生する。図２（ｂ）のように、入力信号ｘ３の変化がそのグリッチよりも早くＡＮＤゲートに到達していれば、グリッチはＡＮＤゲートの出力に伝播する。逆に、図２（ｃ）のように、入力信号ｘ３が遅ければ、グリッチはＡＮＤゲート出力に伝播せず、出力は変化しないことになる。さらに、ｘ３の到達時刻が早い場合であっても、グリッチの幅が短い場合は、信号変化が出力に伝播しないケースもある。ここで、十分な幅を持つグリッチ波形に限定すれば、そのグリッチ波形の形状は、各ゲートの遅延の絶対量によって決定するのではなく、信号間の遅延値の相対関係によって確定する。つまり、グリッチ形状は動作環境が変化してもその形状が保存されることが期待できる。
発明者は、論理回路を構成する各ゲートの入力信号間の遅延関係によって様々な形状を取りうるグリッチに着目し、ＰＵＦの構成に応用する方法を考案した。以下では、この構成方法を「グリッチＰＵＦ」と呼ぶ場合がある。
【００２２】
（１．２  グリッチ形状の補足）
上記で述べたように、発明者は、遅延のばらつきによって様々な形状を取りうるグリッチを用いて、ＰＵＦを構成することを試みた。ここで問題となるのは、グリッチのような微小時間に発生するパルス信号の形状を如何にして正確に捕捉するかという点である。この点につき、その捕捉処理は、デジタル回路で実現する必要がある。
【００２３】
（位相シフト方法）
この問題の一般的な解決方法として、位相シフト法によりグリッチ波形をサンプリングする案が考えられる。位相のずれたクロック信号を複数用いし、それらのクロックを用いて微小パルスをサンプリングする。さらに、サンプリング精度を高めるためには、可能な限り多く位相の異なるクロックを用意する必要がある。この場合、クロックラインの数が多くなりすぎるため、この方式は現実的でない。特にＦＰＧＡでは、ジッタの少ないグローバルクロックラインの本数は数本から数十本と限られている。グリッチ波形を再生成し、サンプリング処理を時分割処理することでクロックラインの本数を減らす方法も考えられるが、分割数に応じて抽出速度が低下することになる。
【００２４】
そこで発明者は、サンプリング対象のデータを微小時間ずらし、同一のクロックでサンプリングする処理方式を採用した。
図３は、この方式を用いたサンプリング回路２２０の構成を示す。以下、このサンプリング処理を「グリッチ捕捉処理」（グリッチ形状取得処理ともいう）と呼ぶことにする。このサンプリング方式では、正確な形状捕捉のためにはサンプリング間隔を短くする必要がある。よって、図３における各フリップ・フロップ（レジスタＲ１〜Ｒｎ）に取り込む信号間に挿入するバッファの段数（Ｂ１〜Ｂｎ）を少なくすること、あるいは、より遅延値の小さい素子を用いることで、フリップ・フロップ（以下、ＦＦと表記する）に取り込む信号間の遅延差をできる限り小さくする必要がある。しかしながら、信号間の遅延差が小さくなればなるほど、ＦＦ間のクロックジッタ、配線遅延及びゲート遅延のばらつきなどの影響で、図４のように、ＦＦのサンプリング位置と遅延の順序関係が一致しなくなる。よって、サンプリングしたデータの時刻順序関係に、入れ替わりが発生する。つまり、グリッチの形状を正確に復元できなくなることが予想される。尚この問題は、前述のクロックに対する位相シフトにおいても同様に発生する。
図４は、「実際のグリッチ波形とサンプリング結果の期待値」（図４（ａ））と「順序補正の誤差によって発生するサンプリング結果」（図４（ｂ））とを示す図である。すなわち、図４（ｂ）のように、サンプリングしたデータの時刻順序関係に入れ替わりが発生し、グリッチの形状を正確に復元できなくなることが予想される。
【００２５】
（ジッタ補正処理）
そこで発明者は、グリッチ捕捉処理を行う前に以下に示す「前処理」を行う。「前処理」を行うことでサンプリング結果の時刻順序関係を決定する。以下では、この「前処理」を「ジッタ補正処理」（後述のＳ７０１）と呼ぶ。以下に「ジッタ補正処理」の概要を説明する。
（１）まず、グリッチが発生する信号とは別に、単純な立ち上がり信号が発生する信号線を用意する。以下、この信号を伝令信号（後述の伝令信号（ｈ））と呼ぶことにする。
（２）次に伝令信号を図３のサンプリング回路２２０へ入力し、サンプリングを行う。この場合、サンプリング回路２２０の各ＦＦ（Ｒ１〜Ｒｎ）は、クロックの立ち上がりよりも伝令信号の到達が早いものは１、遅いものは０をラッチすることになる。この処理をクロックラインに遅延値を可変とする遅延回路（後述の可変遅延回路２０７）を入れた状態で遅延値を変えながら複数回行い、ＦＦ毎に１をラッチする回数をカウントする。
（３）最後に、この回数の大小によって各ＦＦがサンプリングする時刻の順序関係を算出する。この順序関係を用いて、グリッチ波形のサンプリング結果に対して並び替えを行うことでグリッチ形状を復元する。
【００２６】
「ジッタ補正処理」の結果を用いて、グリッチ捕捉処理の結果に対して並び替えを行う。この並び替え処理を「ソート処理」（後述のＳ７０８）と呼ぶことにする。
図５は、ジッタ補正処理を用いてグリッチ捕捉処理を行った場合の捕捉結果を示す。
図６は、ジッタ補正処理を行わない場合の捕捉結果を示す。
【００２７】
（１．３  グリッチ形状のビット値への変換）
前述したサンプリング方法によりデジタルデータとして捕捉されたグリッチ形状は、１ビットの値に変換される。ここでは、グリッチ形状がもつ立ち上がりエッジの偶奇性をビット値に変換する方法について述べる。立ち上がりエッジの偶奇判定は、微分処理と加算処理とをハードウェアあるいはソフトウェアで実装することで検出可能である。この処理を「形状判定処理」（後述のＳ７０９）と呼ぶ。
【００２８】
一方で、前述のような前処理（ジッタ補正処理）を行っても、ＦＦ間の時間順序関係を完全に補正することは困難である。前処理によって算出されたＦＦ間の順序関係が実際の回路の挙動と異なると、図４（ｂ）に示されるような、見かけ上グリッチ波形のエッジ付近でパルス幅の短いグリッチが連続して発生するように捕捉される。このような現象は、ＦＦ間の時間順序関係が近接している場合に発生する不安定な動作であるため、グリッチを捕捉するたびにエッジ検出の結果が異なることになる。また、実際に発生するグリッチのパルス幅が極端に狭い場合も、同様の現象が発生しうる。
【００２９】
（フィルタ処理）
そこで発明者は、エッジの偶奇性を判定する前に図７に示すような捕捉されたグリッチ形状のパルス幅が閾値ｗ以下の場合、そのパルスを無視する処理を行うことにした。以下この処理を「フィルタ処理」と略記する。
図７は補足されたグリッチパターンの例を３つ示している。
【００３０】
（１．４  エラーレートの改善）
形状判定処理の結果のエラーレートを改善するために、繰り返し同じ処理を実行できる特徴を生かして、同じ入力レジスタの状態変化よって発生するグリッチに対して繰り返し形状判定を行い、多数決処理によって最終的な出力を決定する。
特に「初期鍵生成時」には、Ｍ回の繰り返し処理に対して出力が全て同じになる入力のみを鍵生成のために利用する。「初期鍵生成時」とは、ビット列生成装置２００が搭載されたシステムＬＳＩ１０００において、ビット列生成装置２００によって初めて鍵情報（ビット列）が生成される時である。例えば、工場出荷時において、そのＬＳＩにおいて、鍵情報が初めて生成されるような場合である。この場合、Ｎ個の状態変化に対してそれぞれＭ回の判定処理を行い、Ｎビットのレスポンスを生成するが、同時にＮビットのマスク値を生成することになる。マスク値が１のビットは鍵生成に利用するビットを表し、０のビットは鍵生成に用いないことを表す。マスク値はＨｅｌｐｅｒ  Ｄａｔａの一部として外部に出力する。この「エラーレートの改善」については、「図１５のｉ，ｊ」として後述する説明以降で、詳しく説明する。
【００３１】
なお、マスク処理を行う場合は、マスク処理を行わない場合と比較して情報量は低下する。しかしながら、グリッチＰＵＦは高いエラーレートを持つビット位置が個体に依存して定まり、かつそのビット量は少ないという特徴を持つため、誤り訂正符号の訂正能力を軽減する方が鍵生成の実装率が向上する。
【００３２】
（２．１  グリッチＰＵＦの構成）
図８は、グリッチＰＵＦを実行するビット列生成装置２００の回路構成を示す。ビット列生成装置２００は、主に、制御レジスタ群２０３、データレジスタ群２０４、グリッチ発生回路２０５、サンプリング回路２２０及び２種類の遅延回路（伝令信号用遅延回路２０６、可変遅延回路２０７）によって構成される。
（１）制御レジスタ群２０３は、以下に示す制御用のパラメータを格納する。
制御信号Ｓｅｌ（１）：グリッチ発生回路の選択信号（ｌｏｇｕビット）、
制御信号ｓｅｌ（２）：  サンプリング回路の入力選択信号（１ビット）、
伝令信号（ｈ）：（１ビット）、
制御信号（Ｄ）：可変遅延回路の遅延値指定信号（ｑ＋ｑ’ビット）、
制御信号（ｐ）：トリガー信号（１ビット）、
（２）データレジスタ群２０４は、グリッチ発生回路２０５に入力するデータＸ（ｕビット）を格納する。
（３）図９は、グリッチ発生回路２０５の構成を示す。グリッチ発生回路２０５は、図９に示すように、入力データＸに対して、定められた論理演算Ｙ＝ｆ（Ｘ）を実行する組み合わせ回路（ランダムロジック部２０５１）と、ｖビットのＹから１ビットを選択信号Ｓｅｌ（１）により選択して１ビットを出力するｖ−１セレクタ２０５２によって構成される。
（４）伝令信号用遅延回路２０６は、例えばバッファチェーンによって構成され、伝令信号（ｈ）の遅延信号ｈｄであるＤＬＹ（ｈ）を出力する。バッファチェーンの段数は、設計時にグリッチ発生回路２０５で生成されるグリッチ信号の発生タイミングをシミュレーションで評価して決定する。この詳細は、後述する。
（５）サンプリング回路２２０は、図３に示したような、バッファチェーン（サンプリング用遅延回路２０９）とＦＦ（サンプリング用レジスタ群２１０）とにより構成される。尚、ＦＰＧＡにグリッチＰＵＦを実装することを想定した場合、サンプリング回路２２０で用いるバッファチェーンにはＬｏｏｋ−ｕｐ  Ｔａｂｌｅ（ＬＵＴ）にバッファを実装するよりも算術加算回路用のキャリーパスを用いた方がサンプリングの分解能を高めることができる。また、可変遅延回路２０７に関しても変更可能な遅延値の刻みを細かくするためにキャリーパスを用いる。但し、可変遅延回路２０７の可変範囲はサンプリング範囲よりも広く取る必要があるため、全てをキャリーパスで実装すると回路規模が増大する。そのため、図１０に示すように、キャリーパスによる遅延回路とＬＵＴによる遅延回路を組み合わせることで分解能を落とさずに広い稼動範囲を確保することができる。
図１０は、キャリーパスによる遅延回路とＬＵＴによる遅延回路を組み合わせた遅延回路の構成を示す。
【００３３】
実施の形態１で扱うグリッチＰＵＦは、生成されるグリッチの挙動を観測するためにサンプリング（サンプリング回路２２０）までをハードウェアで行い、それ以降の処理をファームウェアで実装している。
【００３４】
（２．２  設計パラメータの調整）
グリッチの形状捕捉を効率よく実現するためには、設計段階で各回路のパラメータを調整する必要がある。調整すべきパラメータは以下の通りである。
ｎ：サンプリング回路２２０のＦＦ数、
ｄｅｌａｙｓ：サンプリング回路２２０の信号間に挿入するバッファの遅延値、
ｒａｎｇｅｓ：サンプリング回路２２０のサンプリング範囲、
ｒａｎｇｅｇ：グリッチ発生回路２０５のグリッチ発生範囲、
ｒａｎｇｅＣＬＫ：可変遅延回路２０７の可変範囲、
ｔｇ：グリッチ発生範囲の中央値の時刻、
ｔｈ：伝令信号（ｈ）の遅延信号ｈｄ（ＤＬＹ（ｈ））の立ち上がり時刻。
図１１は、各パラメータの関係を示す図である。「ｎ」及び「ｄｅｌａｙｓ」は、サンプリング範囲とその分解能に関係するパラメータであり、サンプリング範囲ｒａｎｇｅｓは、おおよそ「ｎ・ｄｅｌａｙｓ」なる。つまり、ｒａｎｇｅｓ≒ｎ・ｄｅｌａｙｓである。
グリッチ形状を捕捉するためには、
ｒａｎｇｅｇ＜ｒａｎｇｅｓ＜ｒａｎｇｅＣＬＫ
となる必要がある。以下に、この関係を成立させるための設計手順について述べる。
（１）まず、グリッチ発生回路２０５の論理を決定した段階で、遅延情報付きの論理シミュレーションを行い、サンプリング回路２２０の入力においてグリッチが発生する時間範囲ｒａｎｇｅｇと発生タイミングｔｇとを見積もる。
（２）次に、
ｒａｎｇｅｇ＜ｒａｎｇｅｓ
を満たす「ｎ」及び「ｄｅｌａｙｓ」を決める。このとき実装対象のプラットフォームにおいてｄｅｌａｙｓが可能な限り小さくなるようなセルをバッファとして利用することでサンプリングの分解能を高めることができる。従って、実際に決定するのはｎとなる。実施の形態１の実装では、設計マージンとしてｒａｎｇｅｇの倍以上になるようにｒａｎｇｅｓを設定している。また、ｒａｎｇｅＣＬＫも同様にｒａｎｇｅｓの倍を目安に可変遅延回路のバッファ段数を設定している。
（３）次に、伝令信号用遅延回路のバッファ段数を決定する。このとき、遅延回路の遅延値は、前述の見積もり結果ｔｇを用いてｔｇ≒ｔｈとなるように設計する。伝令信号に対してタイミング調整を行う理由は、サンプリング結果の時刻順序関係を算出するために利用するのと同時に、グリッチの形状捕捉を行う際に用いる可変遅延回路の遅延値指定信号の値Ｄｇを決定するためである。
以下その方法について説明する。
サンプリング結果の時刻順序関係を算出する際に伝令信号に対してＤを最小値から最大値へとインクリメントしながら変化してサンプリングする。このとき、サンプリング結果の中心付近のＦＦが最初に１をラッチするＤの値をＤｇとする。グリッチ発生範囲は伝令信号の遅延と同程度になるように調整してあるため、グリッチ波形をサンプリング範囲の中央付近でサンプリングすることが可能となる。ただし、正確に信号間の遅延を調整することは一般に困難なため、ｒａｎｇｅｓやｒａｎｇｅＣＬＫは、前述した倍半分のようなマージンをとって設定する必要がある。
【００３５】
（３．１  実装評価結果）
以下、試作したグリッチＰＵＦ（ビット列生成装置２００）の回路性能を示す。
図１２は、実装評価結果を示す。試作は、ＡＶＮＥＴ社のＳｐａｒｔａｎ−３Ａ評価ボードを用いて行った。ターゲットデバイスは、ＸＣ３Ｓ４００Ａ−４ＦＴ２５６である。また、前述した形状捕捉処理以降に行う処理は同一ＦＰＧＡ上に実装したＭｉｃｒｏＢｌａｚｅを用いてファームウェア処理で実行する。グリッチ発生回路２０５としては、論理の複雑さと広く暗号ハードウェア設計者に回路構造が知られていることからＡＥＳのＳｕｂＢｙｔｅｓ回路を用いた。また、サンプリング回路２２０のＦＦ数は２５６個で実装し、可変遅延回路２０７は２５６ビットの加算回路と、ＬＵＴの段数が４、８、１２、１６段と異なるバッファチェーンを４−１セレクタで選択する構成とした。
【００３６】
以上ではビット列生成装置２００の概要を説明した。次にビット列生成装置２００の詳しい構成及び動作を以下に説明する。
【００３７】
図８を参照して、鍵情報として使用するビット列を生成するビット列生成装置２００を説明する。
【００３８】
（ビット列生成装置２００の構成）
ビット列生成装置２００は、データバス２０２に接続されている。ビット列生成装置２００は、制御レジスタ群２０３、データレジスタ群２０４、グリッチ発生回路２０５（グリッチ発生部）、伝令信号用回路２０６（伝令信号遅延部）、可変遅延回路２０７（可変遅延部）、セレクタ２０８、サンプリング用遅延回路２０９（グリッチ遅延部）、サンプリング用レジスタ群２１０（サンプリング部）、グリッチ形状判定回路２１１（ビットデータ生成部、ビット列生成部）、及びビット列出力バス２１２を備える。サンプリング用遅延回路２０９とサンプリング用レジスタ群２１０とは、サンプリング回路２２０（グリッチ波形取得部）を構成する。
以下、各構成要素を説明する。
【００３９】
（制御レジスタ群２０３）
制御レジスタ群２０３は、データバス２０２からのデータ入力に対して、
グリッチ発生回路２０５への制御信号ｓｅｌ（１）と、
後述するジッタ補正処理を行う際に用いる伝令信号（ｈ）と、
セレクタ２０９への制御信号ｓｅｌ（２）と、
可変遅延回路２０７における遅延値の変更のための制御信号（Ｄ）と、
サンプリング用レジスタ群２１０へのクロック入力のための制御信号（ｐ）と、
を保持する複数のレジスタを備える。
【００４０】
（データレジスタ群２０４）
データレジスタ群２０４は、データバス２０２からのデータ入力に対して、グリッチ発生回路２０５への入力信号Ｘを保持する複数のレジスタを備える。
【００４１】
（グリッチ発生回路２０５）
グリッチ発生回路２０５は、データレジスタ群２０４からのデータ信号Ｘと、制御レジスタ群２０３からの制御信号ｓｅｌ（１）を入力とし、信号ｇを出力する回路である。図９を参照して、グリッチ発生回路２０５の内部構成を説明する。ランダムロジック部２０５１（組み合わせ回路）は、Ｘをビット毎に表現した｛ｘ１，・・・，ｘｕ｝のｕビットの入力を、任意の関数を組み合わせた組み合わせ回路によって処理し、ｖビットのデータ｛ｙ１，・・・，ｙｖ｝を出力する。セレクタ２０５２（グリッチ出力セレクタ）は、制御信号ｓｅｌ（１）に従って、｛ｙ１，・・・，ｙｖ｝のｖ本の信号線（ビット信号線という場合がある）のなかから１ビットの信号線を１本選択し、出力ｇとする。ランダムロジック部２０５１で処理する関数としては、ＤＥＳで定義されるＳ−ｂｏｘが例として挙げられる。この例の場合、「ｕ＝６，ｖ＝４」となる。なお、Ｓ−ｂｏｘは、あくまでも一例であり、ランダムロジック部２０５１の構成を限定するものではない。
【００４２】
（伝令信号用遅延回路２０６，サンプリング用遅延回路２０９）
伝令信号用遅延回路２０６及びサンプリング用遅延回路２０９は、固定の信号遅延を発生させる回路である。
図１３は、伝令信号用遅延回路２０６、あるいはサンプリング用遅延回路２０９として使用される遅延回路の内部構成を示す。図１３に示す遅延回路４０１、遅延回路４０２は、伝令信号用遅延回路２０６あるいはサンプリング用遅延回路２０９として使用される。  図１３（ａ）に示す遅延回路４０１は、一般的なバッファ回路（遅延素子の一例）の直列接続によって構成する例であり、ＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）で一般的に用いられる。一方、図１３（ｂ）に示す遅延回路４０２は、加算器（遅延素子の一例）のキャリー伝播遅延を利用して遅延回路を構成する例である。ＦＰＧＡでは、加算回路は専用のハードマクロで構成されるため、キャリー伝播遅延は通常の論理を構成するＬＵＴよりも高速となる。このため、キャリー伝播遅延を遅延回路として利用することで、遅延の粒度を細かくすることが可能となる。ここで、伝令信号用遅延回路２０６の論理段数は、グリッチ発生回路２０５の論理段数と同程度になるように設計される。
【００４３】
（可変遅延回路２０７）
可変遅延回路２０７は、制御信号（Ｄ）によって入力から出力までの遅延を変更可能とする遅延回路である。
図１４は、可変遅延回路２０７の内部構成を示す。図１４に示す可変遅延回路５０１、可変遅延回路５０２は、可変遅延回路２０７として使用される。
図１４（ａ）の可変遅延回路５０１は、直列に接続されるバッファ回路の段毎に制御信号（Ｄ）によってパスをセレクタで切り替える構成である。
図１４（ｂ）の可変遅延回路５０２は、制御信号（Ｄ）をエンコードしたデータとａｌｌ「１」のデータとを加算することで発生するキャリーの伝播遅延を用いた構成である。たとえば、可変遅延回路５０２において大きい遅延値を必要とする場合は、「００・・・０１」とａｌｌ「１」との加算を行うことで下位から桁上げを伝播させ、最上位で発生するキャリー信号を出力する。可変遅延回路５０２において小さい遅延値を必要とする場合は、「１００…０」とａｌｌ「１」とを加算することで、上位で発生した桁上げを出力する。可変遅延回路５０２のような加算回路を遅延回路として用いる理由は、前述のように、ＦＰＧＡのようなＬＳＩにおいて遅延の粒度を細かくするためである。可変遅延回路２０７の可変範囲は、サンプリング用遅延回路２０９の最小パス遅延（ｓ１の遅延）と最大パス遅延（ｓｎ）とを含む範囲で変更可能に設計される。
【００４４】
（セレクタ２０８）
セレクタ２０８は、グリッチ発生回路２０５の出力ｇと伝令信号用遅延回路２０６の出力ＤＬＹ（ｈ）とを制御信号ｓｅｌ（２）によって選択する回路であり、セレクタ２０８の出力ｓ０は、サンプリング用遅延回路２０９に接続される。
【００４５】
（サンプリング用レジスタ群２１０）
図３を参照してサンプリング用レジスタ群２１０の構成を説明する。サンプリング用レジスタ群２１０は、サンプリング用遅延回路２０９の出力を、可変遅延回路２０７の出力ＣＬＫ（ｖ）をクロック信号としてラッチするレジスタ群である。サンプリング用遅延回路２０９は、遅延素子の段数が異なる信号ｓ１，・・・，信号ｓｎを出力する。
サンプリング用遅延回路２０９は、サンプリング用レジスタ群２１０を構成する各レジスタＲに接続される。
レジスタＲｉは、入力信号線から信号ｓｉを入力し、クロック信号線からクロック信号ＣＬＫ（ｖ）を入力し、出力信号線から信号ｒｉを出力する。
【００４６】
（グリッチ形状判定回路２１１）
グリッチ形状判定回路２１１は、サンプリング用レジスタ群２１０の出力「ｒ１，ｒ２，…，ｒｎ」であるｎビットの信号を入力とし、後述するジッタ補正処理を実行すると共に、ジッタ補正処理の後、グリッチに基づき得られたｎビットのデータ「ｒｃ１，ｒｃ２，…，ｒｃｎ」を、１ビットのデータｂに変換する論理を有する。
【００４７】
（動作の説明）
図１５は、ビット列生成装置２００の動作を示すフローチャートである。図１５を参照してビット列生成装置２００の動作を説明する。以下に説明する図１５及び後述の図１６の動作に関しては、ＣＰＵ５００がビット列生成装置２００を制御するものとする。
【００４８】
（ジッタ補正処理）
最初に、ビット列生成装置２００は、ジッタ補正処理（Ｓ７０１）を行う。
図１６は、ビット列生成装置２００によるジッタ補正処理の動作を示すフローチャートである。以下、図１６を参照して、ジッタ補正処理に関して説明する。
【００４９】
（１）図１６の初期設定では、ＣＰＵ５００は、全レジスタを初期化した後、制御信号ｓｅｌ（２）を、ＤＬＹ（ｈ）を選択する信号値に設定する（Ｓ８０１）。
（２）続けて、ＣＰＵ５００は、可変遅延回路２０７への制御信号（Ｄ）の変更を繰り返しながら、伝令信号（ｈ）を入力する（Ｓ８０２、Ｓ８０４）。
（３）このとき、ＣＰＵ５００は、同一の制御信号（Ｄ）に対してＮ回、伝令信号（ｈ）を入力する（Ｓ８０３）。伝令信号（ｈ）の入力は、図８に示す伝令信号（ｈ）の信号線と制御信号（ｐ）の信号線とを、それぞれ同一タイミング（同じサイクルで）０から１に変更することで行う。これにより、サンプリング用遅延回路２０９およびサンプリング用レジスタ群２１０では、図１７のタイミングチャートに記載されるような処理が行われる。
図１７は、サンプリング回路２２０による伝令信号（ｈ）のサンプリングの状態を示す図である。
【００５０】
（１）図１７を参照して、まず制御信号（Ｄ）の値が小さい場合（つまり、可変遅延回路２０７の遅延が小さい場合）を説明する。制御信号（Ｄ）の値が小さい場合、サンプリング用遅延回路２０９において伝令信号（ｈ）が伝播して立ち上がりが観測される区間（図１７の中ＤＬＹ（ｈ）に対するサンプリング範囲２５４）よりも前に、サンプリング用レジスタ群２１０のクロック入力であるＣＬＫ（ｖ）の立ち上がりエッジが発生する。よって、サンプリング用レジスタ群２１０は、すべて０をラッチする。すなわち、サンプリング用レジスタ群２１０の各レジスタＲは、信号ｓ１〜ｓｎに関しすべて「０」をラッチする。
（２）逆に、制御信号（Ｄ）の値が大きい場合は、伝令信号（ｈ）が伝播して立ち上がりが観測される区間よりも後にＣＬＫ（ｖ）の立ち上がりエッジが発生する。よって、この場合、サンプリング用レジスタ群２１０は、すべて１をラッチする。すなわち、サンプリング用レジスタ群２１０の各レジスタＲは、信号ｓ１〜ｓｎに関しすべて「１」をラッチする。
（３）制御信号（Ｄ）を最小値から最大値まで変化させ、同様の処理（伝令信号（ｈ）と制御信号ｌ（ｐ）の信号線をそれぞれ同一タイミングで０から１に変更し、サンプリング用レジスタ群２１０によるラッチ）を行った場合、信号線ｓ１〜ｓｎのうち伝令信号（ｈ）の伝播が速い信号線から順に１に変化する。
【００５１】
（信号線ｓｋの信号遅延の順序逆転）
伝令信号（ｈ）の伝播に関して、図１７では、信号線ｓ１が最も伝令信号（ｈ）の伝播が速い信号線であり、信号線ｓｎが最も遅い信号線として表記されている。しかし、サンプリング用遅延回路２０９の各遅延の粒度を細かくした場合、図１７の信号線ｓｔと信号線ｓｔ’との関係のように、「ｔ＜ｔ’」であるが、信号遅延値は「ｓｔ＞ｓｔ’」となる信号線が発生しうる。これは、サンプリング用遅延回路２０９からサンプリング用レジスタ群２１０までの配線遅延や、ＣＬＫ（ｖ）のジッタによって発生する現象である。
【００５２】
信号線ｓ１から信号線ｓｎの信号遅延の順序関係を正しく計測するために、図１７のタイミングチャートでは、ＣＰＵ５００は制御信号（Ｄ）を最小値Ｄｍｉｎから最大値Ｄｍａｘまで変化させる。そして、グリッチ形状判定回路２１１はサンプリング用レジスタ群２１０の各レジスタＲが「１」をラッチする回数を記憶し（Ｓ８０５）、各レジスタＲの回数の合計値（Ｓ８０６）を比較して（Ｓ８０７）、サンプリング用レジスタ群２１０の各レジスタＲの順序関係をソートし、ソート結果ＲｅｇＯとして記憶する（Ｓ８０８）。ソート結果ＲｅｇＯは，グリッチの形状を正しく復元する際に用いられる（後述のＳ７０８）。またグリッチ形状判定回路２１１は、サンプリング用レジスタ群２１０の代表値位置に配置されるレジスタＲｎ’の出力ｒｎ’が、最初に「１」となる制御信号（Ｄ）の値Ｄｇを記憶する（Ｓ８０９）。「ｎ’」の値は、例としてｎ／２が挙げられる。
【００５３】
（Ｓ８０３の繰り返し処理の理由）
Ｓ８０３で同一の制御信号（Ｄ）に対して繰り返し処理を行う理由は、サンプリング用レジスタ群２１０の各レジスタＲにおいて、データの変化とクロックの立ち上がりのタイミングとが近接しているレジスタは、ラッチするデータが不安定になる。したがって、ラッチするデータの精度を上げるために繰り返し処理を行う。
【００５４】
（グリッチ形状取得処理）
図１５のグリッチ形状取得処理の説明に戻る。ジッタ補正処理後、ＣＰＵ５００は、グリッチ形状取得処理のための初期設定処理を行う（Ｓ７０２）。この初期設定処理では、ＣＰＵ５００は全レジスタを初期化した後、制御信号ｓｅｌ（２）を、信号ｇを選択する信号値に設定する。また、ＣＰＵ５００は、可変遅延回路２０７の遅延値を決定する制御信号（Ｄ）を、ジッタ補正処理で記憶された値Ｄｇに設定する。これは、グリッチ発生回路２０５と同等の論理段数を持つ伝令信号用遅延回路２０６の信号ＤＬＹ（ｈ）を補足したＣＬＫ（ｖ）の立ち上がりタイミングで、グリッチ発生回路２０５の信号ｇを補足するためである。
【００５５】
初期設定後、ＣＰＵ５００は、ｓｅｌ（１）を初期値（ｉ＝１）に設定し（Ｓ７０４）、データレジスタ群２０４にデータを入力し、同時に、制御信号（ｐ）を０から１へアサートする（Ｓ７０７）。これにより、グリッチ発生回路２０５では、Ｘの入力変化に伴う信号変化が発生し、すなわち信号ｇがグリッチ発生回路２０５によって出力され、信号ｇが、セレクタ２０８を経由してサンプリング用遅延回路２０９に伝達される。伝達された信号ｇがサンプリング用レジスタ群２１０の各レジスタでラッチされる。
【００５６】
図１８は、サンプリング用レジスタ群２１０によってラッチされるデータ「ｒ１，・・・，ｒｎ」（以下、ラッチデータともいう）を示す図である。図１８に示すように、グリッチ発生回路２０５から出力された信号ｇの形状に応じて、ラッチされるデータ「ｒ１，・・・ｒｎ」の値が決まる。グリッチ形状判定回路２１１は、サンプリング用レジスタ群２１０のレジスタＲ１〜Ｒｎによってラッチされたデータ「ｒ１，・・・ｒｎ」を、ジッタ補正処理で記憶されたソート結果ＲｅｇＯに基づきソートすることで、グリッチ形状の補正を行う（Ｓ７０８）。グリッチ形状判定回路２１１は補正されたデータ、すなわちソートされた「ｒ１，・・・ｒｎ」を、形状判定処理によって、１ビットのデータｂに変換する（Ｓ７０９）。
【００５７】
図１５を参照して、グリッチ形状判定回路２１１による１ビットのデータｂへの変換の例を説明する。図１５の説明で述べたように、形状判定処理では、データの信頼性が低い微小時間の信号変化（閾値ｗ以下）を無視する処理を含めることで、データの再現性を高めることが可能である。
【００５８】
（図１５のｉ，ｊ）
図１５に示すように、ビット列生成装置２００では、前述の処理を、入力データＸ（変数ｊ）及び制御信号ｓｅｌ（１）（変数ｉ）を変えて繰り返し行う。
図１５の変数ｉ，ｊ，ｋは次の意味である。
変数ｉ：「１〜ｖ」本の信号線のうち、ｓｅｌ（１）の選択する信号線を示す。
変数ｊ：２ｕ通り（ｊ＝０〜２ｕ−１）のうちの、どの入力データＸかを示す。
変数ｋ：同一の「Ｘ、ｓｅｌ（１）」に対する繰り返し回数を示す。
また、データの信頼性を高めるために、同一の入力データＸと制御信号ｓｅｌ（１）とに対しても繰り返し処理を行う。すなわち図１５に示すように、変数ｉ，ｊを固定して、Ｋ＝１〜Ｎまでを繰り返す。この処理の一例として、グリッチ形状判定回路２１１は、「ｉ，ｊ」が同一でＫの異なる、ｂ（ｉ，ｊ，１），ｂ（ｉ，ｊ，２），ｂ（ｉ，ｊ，Ｎ）に対して多数決処理を行い、その結果をｂ（ｉ，ｊ）とする例が挙げられる。最終的に、上記の処理で得られた互いに「ｉ，ｊ」の異なる複数の１ビットのデータｂ（ｉ，ｊ）からなるビット列であるビット列ｂ（ｉ，ｊ）を鍵情報として利用する。
【００５９】
図１５は、特定の信号線ｉに着目して同一の入力データＸｊをＮ回繰り返し入力することで、同一の入力データＸｊに対する特定の信号線ｉの出力から生成される１ビットデータの信頼性を評価するフローである。
そして、図１５では、「ｉ，ｊ」を切り替えることで、各信号線ｉ（ｉ：１〜ｖ）ごとに、各入力データＸｊ（ｊ：０〜２ｕ−１）に対する各信号線ｉ（ｉ：１〜ｖ）の出力から生成される１ビットデータの信頼性を評価している。
この図１５のフローは、例えば、上記で「１．４  エラーレートの改善」として説明した「初期鍵生成時」と、「初期鍵生成時以降」との双方に適用できる。これを以下に説明する。
【００６０】
（初期鍵生成時）
初期鍵生成時は、例えば以下のような処理によって、生成されるビットの信頼性を向上する。ランダムロジック回路２０５１（組み合わせ回路）は、同一の入力データＸｊを繰り返し入力する。グリッチ発生回路２０５のセレクタ２０５２は、同一の入力データＸｊがランダムロジック回路２０５１へ繰り返し入力されるごとにいずれかのビット信号線から信号ｇ（ビット対応信号）を出力することにより、ｖ本のどのビット信号線からもＮ回（所定回数）、信号ｇを出力する。なおセレクタ２０５２の出力は、制御信号ｓｅｌ（１）による制御に基づく。グリッチ形状判定回路２１１（ビットデータ生成部）は、Ｎ回出力された信号ｇのそれぞれに対応する１ビットデータ（Ｎ個）をｖ本のビット信号線ごとに生成する。そして、グリッチ形状判定回路２１１はビット信号線ごとに生成された１ビットデータの総数に占める１と０との比率に応じて、同一の入力データＸに対する各ビット信号線の出力の使用可否を決定する。すなわち、各ビット信号線から信号ｇがＮ回出力されるので、グリッチ形状判定回路２１１によって、１と０とのいずれかである１ビットデータが各ビット信号線ごとにＮ個生成される。グリッチ形状判定回路２１１は、各ビット信号線ごとに、Ｎ個に占める１と０との比率に応じて、同一の入力データＸに対する各ビット信号線の出力の使用可否を決定する。この判定は、例えば入力データＸ（０）についてビット信号線ｉから出力された信号ｇを元にする１ビットデータがＮ個とも全部「１」である場合、あるいはＮ個とも全部「０」である場合にのみ、ビット信号線ｉを使用可能と決定する。各ビット信号線の出力の使用可否に関しては、前記「１．４  エラーレートの改善」で述べたように、マスク値を用いることができる。
【００６１】
（ビット信号線の使用可否の決定以降）
マスク値の生成以降は、同一の入力データＸに対して使用可能と決定されたビット信号線の出力の信頼性が判定される。ランダムロジック回路２０５１は、グリッチ形状判定回路２１１によって同一の入力データＸに対するビット信号線の出力が使用可能と決定された後に、再び、同一の入力データＸを繰り返し入力する。セレクタ２０５２は、同一の入力データＸがランダムロジック回路２０５１へ繰り返し入力されるごとにグリッチ形状判定回路２１１によって出力が使用可能と決定されたビット信号線である特定の決定信号線から、所定回数（例えばＮ’回）、信号ｇ（ビット対応信号）を出力する。グリッチ形状判定回路２１１は、特定の決定信号線からＮ’回出力された信号ｇごとにこの信号ｇに対応する１ビットデータをＮ’個生成し、生成された１ビットデータの総数（Ｎ’個）からなるビットグループに含まれる１と０との比率に基づいて、このビットグループを代表する代表ビットを１と０とのいずれかに決定する。この代表ビットの決定は、前記のように多数決処理を用いることができる。ランダムロジック回路２０５１と、セレクタ２０５２と、グリッチ形状判定回路２１１とは、繰り返し入力される同一の入力データＸに対して同様の処理を実行することにより、少なくとも他の一本の決定信号線に関して、同一の入力データＸに対する代表ビットを決定する。そしてグリッチ形状判定回路２１１（ビット列生成部）は、決定された複数の代表ビットを使用して、ビット列を生成する。
【００６２】
入力データＸと異なる他の入力データＸ’についても、入力データＸ’を同一のデータとして繰り返し入力することで、入力データＸ’について決定信号線ごとに代表ビットを決定することができる。なお図１５では、ビット信号線ｉを固定して、最初に入力データＸ（０）をＮ回入力し、次に入力データＸ（１）をＮ回入力し、そして最後に入力データＸ（２ｕ−１）をＮ回入力している。これは一例である。入力データＸｊを固定して、信号線ｉの「ｉ」を切り替えても構わない。
【００６３】
このように、まず、グリッチ形状判定回路２１１によって初期鍵生成時に各ビット信号線の出力の使用可否を決定する。次に、グリッチ形状判定回路２１１によって、使用可能と決定されたビット信号線の出力に関して代表ビットを生成する。これらにより、生成されるビット列の信頼性を向上できる。また、このようにして生成されたビット列に対して誤り訂正回路３００により誤り訂正することで、ビット列の信頼性をさらに向上できる。
【００６４】
以上、グリッチ形状を取得し、グリッチ形状からビット列を生成するビット列生成装置２００を説明した。グリッチの形状はグリッチ発生回路２０５を構成する各論理ゲートの遅延関係によって異なる振る舞いをするので、デバイス毎に、他のデバイスと異なるそのデバイス固有のビット列が生成される。そして、生成されるごとに、同一のデバイスではグリッチから同一のビット列が生成される。グリッチ発生回路２０５にデータを入力することでグリッチが発生するので、当然に鍵情報を不揮発的に格納する必要はない。
【００６５】
実施の形態１のビット列生成装置２００では、配置配線に関する特殊な制約はないので、配置配線の自由度が低いＦＰＧＡであっても、デバイス毎に異なるビット列を出力することが可能である。
【００６６】
また、実施の形態１のビット列生成装置２００では、組み合わせ回路によるループ回路を必要とする処理部は存在しないので、「課題で述べたデザインルール」に違反しないＰＵＦ回路を提供することが可能となる。
【００６７】
以上の実施の形態１ではビット列生成装置２００を説明したが、ビット列生成装置２００の構成要素の動作をステップと把握することで、ビット列生成装置２００をビット列生成方法と把握することができる。
【符号の説明】
【００６８】
１００  ビット生成器、１０１  リングオシレータ群、１０２  リングオシレータ、１０３  出力信号、１０４  選択回路、１０５  選択信号、１０６  信号、１０７  周波数比較器、１０８  比較結果、１０９  応答ビット値、２００  ビット列生成装置、２０２  データバス、２０３  制御レジスタ群、２０４  データレジスタ群、２０５  グリッチ発生回路、２０６  伝令信号用遅延回路、２０７  可変遅延回路、２０８  セレクタ、２０９  サンプリング用遅延回路、２１０  サンプリング用レジスタ群、２１１  グリッチ形状判定回路、２２０  サンプリング回路、３００  誤り訂正回路、４００  暗号処理回路、５００  ＣＰＵ、６００  内部メモリ、７００  外部Ｉ／Ｆ、１０００  システムＬＳＩ。
【図１】
2011086688.tif 000003
【図２】
2011086688.tif 000004
【図３】
2011086688.tif 000005
【図４】
2011086688.tif 000006
【図５】
2011086688.tif 000007
【図６】
2011086688.tif 000008
【図７】
2011086688.tif 000009
【図８】
2011086688.tif 000010
【図９】
2011086688.tif 000011
【図１０】
2011086688.tif 000012
【図１１】
2011086688.tif 000013
【図１２】
2011086688.tif 000014
【図１３】
2011086688.tif 000015
【図１４】
2011086688.tif 000016
【図１５】
2011086688.tif 000017
【図１６】
2011086688.tif 000018
【図１７】
2011086688.tif 000019
【図１８】
2011086688.tif 000020
【図１９】
2011086688.tif 000021
【国際調査報告】
2011086688.tif 000022
2011086688.tif 000023
2011086688.tif 000024
2011086688.tif 000025