(57)【要約】【課題】バスプロービング耐性に優れる半導体装置の被処理データの暗号化方法、及びその半導体装置等を提供する。【解決手段】本発明の半導体装置の被処理データの暗号化方法は、暗号化の鍵となる鍵データの初期値は、ＣＰＵの外部の記憶部に置き、鍵データの生成及び鍵データを用いた被処理データのスクランブル／デクスクランブル処理をＣＰＵ内部の汎用レジスタを用いて、またはハードウエアとしてのスクランブル／デスクランブル回路で行うことを特徴とする。このため、周辺バスに鍵データが流出しないのでバスプロービング耐性に優れる。【選択図】図１
2007251783.tif 000002
【特許請求の範囲】
【請求項１】
半導体装置の被処理データのスクランブル／デスクランブル方法であって、スクランブル／デスクランブルの鍵となる鍵データの初期値は前記半導体装置のＣＰＵの外部の記憶部に置き、前記初期値を用いた鍵データの生成及び前記鍵データを用いた前記被処理データのスクランブル処理及びデスクランブル処理を前記半導体装置内のＣＰＵ内部で行うこと、又は前記ＣＰＵと接続しているバスを介したスクランブル／デスクランブル回路内部で行うことを特徴とする半導体装置の被処理データのスクランブル／デスクランブル方法。
【請求項２】
請求項１において、前記鍵データの生成及び保持は、前記ＣＰＵ内部の汎用レジスタを用いて行うことを特徴とする半導体装置の被処理データのスクランブル／デスクランブル方法。
【請求項３】
請求項１において、前記鍵データを用いた前記被処理データのスクランブル処理及びデスクランブル処理は、前記ＣＰＵ内部の汎用レジスタを用いて行うことを特徴とする半導体装置の被処理データのスクランブル／デスクランブル方法。
【請求項４】
半導体装置の被処理データをスクランブル／デスクランブルするプログラムであって、スクランブル／デスクランブルの鍵となる鍵データをＣＰＵ内部の汎用レジスタを用いて生成すると共に、前記鍵データを用いた前記被処理データのスクランブル処理及びデスクランブル処理を前記半導体装置内のＣＰＵ内部の汎用レジスタを用いて行うことを特徴とするプログラム。
【請求項５】
半導体装置の被処理データのスクランブル／デスクランブル回路であって、
スクランブル／デスクランブルの鍵となる鍵データの初期値を受け取り、前記初期値をもとにして鍵データの生成、保存を行う鍵データ生成部と、
スクランブル対象データを受け取り、前記鍵データを用いてスクランブルを行うと共に、デスクランブル対象データを受け取り、前記鍵データを用いてデスクランブルを行うスクランブル部と、
前記スクランブル対象データ及び前記デスクランブル対象データの一時保存部と、
を有することを特徴とする半導体装置の被処理データのスクランブル／デスクランブル回路。
【請求項６】
請求項５において、前記鍵データ生成部は、レジスタの値が鍵データとなる一のＬＦＳＲと、前記ＬＦＳＲのシフト数を制御する他のＬＦＳＲとからなる鍵データ生成部であることを特徴とする半導体装置の被処理データのスクランブル／デスクランブル回路。  
【請求項７】
被処理データのスクランブル／デスクランブルを行う半導体装置であって、
スクランブル／デスクランブルの鍵となる鍵データの初期値は、ＣＰＵ外部の記憶部に置き、前記初期値を用いた鍵データの作成及び前記鍵データを用いた前記被処理データのスクランブル処理及びデスクランブル処理を前記半導体装置内のＣＰＵ内部の汎用レジスタを用いて行うことを特徴とする半導体装置。
【請求項８】
請求項７において、前記鍵データを用いた前記被処理データのスクランブル処理及びデスクランブル処理のプログラムを前記ＣＰＵ内部に備えたＲＯＭに格納していることを特徴とする半導体装置。
【請求項９】
被処理データのスクランブル／デスクランブル回路を備える半導体装置であって、
前記スクランブル／デスクランブル回路は、
スクランブル／デスクランブルの鍵となる鍵データの初期値を受け取り、前記初期値をもとにして鍵データの生成、保存を行う鍵データ生成部と、
スクランブル対象データを受け取り、前記鍵データを用いてスクランブルを行うと共に、デスクランブル対象データを受け取り、前記鍵データを用いてデスクランブルを行うスクランブル部と、
前記スクランブル対象データ及び前記デスクランブル対象データの一時保存部と、
を有することを特徴とする半導体装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体装置内部のデータ保護回路及びその方法に関し、特に暗号回路で使用する秘密鍵や秘密鍵を生成する乱数の保護方法、保護プログラム、保護回路、及びそれらを備える半導体装置に関する。
【背景技術】
【０００２】
半導体装置は、認証処理、暗号処理など秘密保持が重要となる分野に今日幅広く用いられている。このため、暗号回路で使用する秘密鍵や秘密鍵などを生成するのに使用する乱数のように半導体装置の外へ漏洩すると半導体装置のセキュリティ低下につながるデータ（以下セキュリティ関連データともいう）の保護は非常に重要である。
【０００３】
一方、これらセキュリティ関連データを窃取しようとする種々の試みが知られている。例えば、その一例はＩＣカードなどに外部端子からロジック・アナライザなどの機器を用いて認証動作過程などでの信号などをモニタする方法である。これらの方法のなかでも、半導体のモールド樹脂などの外装をはがし、半導体チップを露出させ、実際に内部バスにオシロスコープをあててデータを窃取する、いわゆるバスプローピングという手段は秘密データそのものを直接読み取ることが可能であるため注意が必要である。  
【０００４】
従来から、バスプロービングに対しては、これが行われても元のデータ、つまり被処理データが分からないようにすべく、元のデータに対して、スクランブル用の鍵（以下、本明細書では鍵データともいう）を用いてスクランブル処理を行い、元のデータを得たい場合には、その鍵データを用いてデスクランブル処理を行うことが良く知られている。この技術は例えば特許文献１や２などに開示されている。
【０００５】
特許文献１には、４つの線形フィードバックレジスタ（Linear Feedback Shift Register、以下ＬＦＳＲと略称する）とＬＦＳＲの出力を非線形変換する非線形変換部を用いて、スクランブル／デスクランブル用に使用する乱数性の高い鍵データを生成する技術などが開示されている。また、特許文献２には、鍵データを生成する回路の構成に関して更に乱数性を向上させる技術が開示されている。なお、特許文献１も２も共に生成された鍵データとスクランブル／デスクランブル対象となるデータとをＸＯＲ（排他的論理和）演算することでデータのスクランブル／デクスランブルを行っている。  
【０００６】
一方、特許文献３は、スクランブル用のキーデータ（鍵データ）のセキュリティを向上させるべく、暗号化用鍵データ読み出しステップを用いて、鍵データをメモリへ格納する技術などを開示している。このメモリに格納された鍵データを用いてスクランブル／デスクランブル対象のデータをＸＯＲ演算する技術が開示されている。  
【特許文献１】特開平６−３４２２５７号公報
【特許文献２】特開平８−３０７４１１号公報
【特許文献３】特開平７−２８４０６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
従って、スクランブル／デスクランブル処理を非常に複雑なものとし、バスプロービングが行われ鍵データが漏洩しても、元のデータ、つまり被処理データの解読を困難にすることが好ましいが、こうしようとすると演算資源などの負荷が膨大になり、小型化、携帯化が要請されているＩＣカードや携帯電話、携帯端末などのニーズに対応できなくなる。一方、演算資源などを考慮してスクランブル／デスクランブル処理をＸＯＲ演算など比較的簡単な演算処理で行うこととすると、鍵データが漏洩すると容易に元のデータがデスクランブルされる、つまり、解読されてしまう恐れがあった。
【０００８】
本発明は、これらの課題を解決する簡便なスクランブル／デスクランブル方法、そのプログラム、スクランブル／デスクランブル回路、及びそれらを備える半導体装置などを提供しようとするものである。
【課題を解決するための手段】
【０００９】
本発明は半導体装置の被処理データのスクランブル／デスクランブル方法であって、スクランブル／デスクランブルの鍵となる鍵データの初期値は前記半導体装置のＣＰＵの外部の記憶部に置き、前記初期値を用いた鍵データの生成及び前記鍵データを用いた前記被処理データのスクランブル処理及びデスクランブル処理を前記半導体装置内のＣＰＵ内部で行うこと、又は前記ＣＰＵと接続しているバスを介したスクランブル／デスクランブル回路内部で行うことを特徴とする。従って、バスプロービングの対象となる周辺バスに鍵データが流出することはないので、バスプロービング耐性に優れる。本発明の他の態様の記載は割愛する。
【００１０】
本発明を要説すると、本発明の第一の観点は、鍵データをＣＰＵの内部、特に汎用レジスタへ保持すると共に、この鍵データを使い汎用レジスタを用いて被処理データ、つまり保護対象データのスクランブル／デスクランブル処理を行おうとするものである。また、第二の観点はこの考え方を活かしつつ、汎用レジスタを用いることに代えて鍵データが周辺バスなどへ流出せず、バスプロービング耐性には同様の効果を有するスクランブル／デスクランブル回路を用いようとするものである。
【発明の効果】
【００１１】
本発明によれば、バスプロービング対策に優れるスクランブル／デスクランブル方法などが得られる。
【発明を実施するための最良の形態】
【００１２】
図１から図３を用いて本発明の第１の実施形態の概要を説明する。図１は、本発明の第１の実施形態の半導体装置のブロック図である。本発明の半導体装置１は、ＣＰＵ１０、ＲＡＭ３１、ＲＯＭ１（第１ＲＯＭ）３２、入力インターフェイス（入力Ｉ／Ｆ）３３、出力インターフェイス（出力Ｉ／Ｆ）３４、ＣＰＵ１０と、ＲＡＭ３１、ＲＯＭ１（第１ＲＯＭ）３２、入力Ｉ／Ｆ３３、出力Ｉ／Ｆ３４などとのデータ、アドレスなどのやり取りをする周辺バス２１を一つの半導体チップに備える。また、入力Ｉ／Ｆ３３、出力Ｉ／Ｆ３４は、図示しない外部端子を介して外部とデータ等のやりとりを行う。なお、周辺バス２１は、詳しくは図示しないアドレスバス、データバスなどを含めたバスの総称である。
【００１３】
ＣＰＵ１０は、その内部にＣＰＵバス１１、ＢＣＵ（バス・コントロール・ユニット）１２、ＰＣ（プログラム・カウンタ）１３、レベルシフタ１４、システムレジスタ１５、汎用レジスタ１６、ＡＬＵ（演算装置）１７、乗算器１８、ＲＯＭ２(第２ＲＯＭ）１９などを備える。なお、ＢＣＵ１２は、ＣＰＵ内部と外部のＲＡＭ３１、ＲＯＭ１（第１ＲＯＭ）３２等と周辺バス２１を介してのデータのやり取りや、ＣＰＵバス１１を介してのデータのやり取りなどを制御している。システムレジスタ１５とは、例えば、入出力レジスタや、累算用レジスタなど特定の機能を果たすためのレジスタの総称であり、換言すれば専用レジスタとも言える。汎用レジスタ１６は、システムレジスタと異なり、機能が限定されていないレジスタをいう。また、ＲＯＭ２(第２ＲＯＭ）１９は、汎用レジスタなどを用いて後述するスクランブル／デスクランブル動作を行わせるプログラムなどをＣＰＵ１０内に格納しておくＲＯＭである。
【００１４】
次に図２のフローチャートを用いて第１の実施形態の半導体装置のスクランブル動作についてより詳しく説明する。以下の動作は主としてＣＰＵ１０で行われる。汎用レジスタ１６以外にもＣＰＵの累算用レジスタなどのシステムレジスタ１５やＡＬＵ１７、ＰＣ１３などＣＰＵ１０の種々の構成要素を用いて行われるが、これら他の要素の利用については、公知の手段であるので、詳しい記載は省略する。従って、以下の記載は主として汎用レジスタ１６をどう使用するか、という点に着目して述べる。
【００１５】
まず、ＣＰＵ１０のスクランブル開始命令を受けて、図２に示すようにＳ１（ステップ１）でスクランブル開始動作が始まると、Ｓ２（ステップ２）に示すように鍵データの初期値（ＳＥＥＤ）をＲＡＭ３１に格納する。ＲＡＭ３１に格納する具体的な方法としては、外部からＳＥＥＤを入力Ｉ／Ｆ３３を介して入力しＲＡＭ３１に格納する方法と、あらかじめＲＯＭ１（第１ＲＯＭ）３２にＳＥＥＤを格納しておき、これをＲＡＭ３１に展開する方法などがある。次にＳ３（ステップ３）でＣＰＵ１０のＢＣＵ１２を介してＲＡＭ３１に格納されているＳＥＥＤをＣＰＵ１０の汎用レジスタ１６にセットする。具体的には、汎用レジスタ１６の一部であり、鍵データ生成用に用いる汎用レジスタＡにセットする。以下、この鍵データ生成用の汎用レジスタＡを汎用レジスタの鍵データ生成領域ともいう。なお、後述するようにスクランブル／デスクランブル対象データを格納する他の汎用レジスタ、以下汎用レジスタＢという、も本発明では用いる。
【００１６】
次にＳ４（ステップ４）では、ＣＰＵ１０が汎用レジスタＡなどを用いて、スクランブル用の鍵を生成する。この具体的な一例は後述する。なお、１回目のスクランブル用の鍵は汎用レジスタＡにセットしたＳＥＥＤを用いて生成するが、２回目のスクランブル鍵は１回目のスクランブル鍵から生成し、３回目は２回目のスクランブル鍵から生成される、というように以下同様な生成方法となる。引き続くＳ５（ステップ５）では、ＣＰＵ１０は、鍵データとスクランブル対象データとのスクランブルを行う。この具体例も後述する。なお、ここで、スクランブル対象データ、つまりスクランブルの対象となるデータは、例えばＣＰＵ１０の演算結果などであり、ＣＰＵ１０の汎用レジスタＢに格納されている。
【００１７】
次のＳ６（ステップ６）では、スクランブル対象データはまだあるかを調べ、あればＳ４(ステップ４)に戻り、スクランブル処理を行う。スクランブル処理の対象データがなくなったら、Ｓ７（ステップ７）でスクランブル処理を終了する。終了後のデータは、汎用レジスタＢに格納される。次にＳ８（ステップ８）で汎用レジスタＢに格納されているスクランブルデータ（スクランブル済みのデータ）を周辺バス２１を介してＲＡＭ３１などのＣＰＵ１０外部のメモリへ格納する。これで一連のスクランブル動作が終わる。
【００１８】
図３は、スクランブルデータをデスクランブルする時の動作フローチャートを示す図である。全体的にスクランブル動作の場合とほぼ同様であるので、順を追った細かい説明は割愛する。なお、実施形態１では、後述するように、スクランブルとデスクランブルに用いる鍵データは同一である。また、Ｓ２５でいうデスクランブル対象データは、デスクランブルの対象となるスクランブルデータ、つまりスクランブル済みのデータであり、汎用レジスタＢへ格納されているものである。
【００１９】
Ｓ２６（ステップ２６）でデスクランブル対象データはまだあるか、を判断する。まだある場合は、Ｓ２４（ステップ２４）へ戻る。デスクランブル対象データがない場合はＳ２７(ステップ２７）でデスクランブル処理を終了する。そして、Ｓ２８（ステップ２８）でデスクランブルデータ、つまり、スクランブルの対象となったデータを汎用レジスタ１６、具体的には汎用レジスタＢに格納することで一連のデスクランブル動作が終了する。
【００２０】
次に図２のフローチャートで示したスクランブル動作について、１具体例をあげて図４から図７を用いて説明する。図４は、本発明の第１の実施形態に用いる鍵データ生成の説明用のイメージ図である。この鍵データ生成は具体的には、前述のようにＣＰＵ１０のＡＬＵ１７などＣＰＵの各構成要素と前述の汎用レジスタＡなどを用いて行われる。ここでは、図に示すようにＳＥＥＤは２つある。鍵データ生成に際しては、生成する鍵データの推測が困難になるように、レジスタの値がそのまま鍵データとなるＬＦＳＲ１と、ＬＦＳＲ１のシフトクロック数を制御するＬＦＳＲ２とで構成することができる。ＬＦＳＲ１は初期値ＳＥＥＤ１、ＬＦＳＲ２は初期値ＳＥＥＤ２を使用する。なお、この例では、２つのＳＥＥＤを設けているが、３つ以上のＳＥＥＤとそれぞれに対応するＬＦＳＲを設けても良いのはいうまでもないことである。
【００２１】
なお、適宜、図２のフローチャートとも関連づけて説明する。以下の説明では理解の容易さのため、ＳＥＥＤ２の具体的なデータを０ｘ２、ＳＥＥＤ１の具体的なデータを０ｘ２ＥＣＡとして説明する。なお、０ｘ２、０ｘ２ＥＣＡの冒頭の０ｘは、引き続く２や２ＥＣＡが１６進数であることを示す。
【００２２】
前述のように図２のステップ３で鍵データの初期値（ＳＥＥＤ）を汎用レジスタ１６、具体的には汎用レジスタＡにセットする。汎用レジスタＡは、更にＬＦＳＲ１の領域と、ＬＦＳＲ２の領域とを有する。これらの領域に各ＳＥＥＤを保持する。つまり、これにより、（０ｘ２ＥＣＡ）と、（０ｘ２）をセットする。この様子を図５に示す。なお、図５で二重線で囲んだ部分はデータが汎用レジスタ１６にあることを示す（後述する図６，７も同様である）。また、汎用レジスタ１６、具体的には汎用レジスタＡはこの例では、ＬＦＳＲ２が４ビット、ＬＦＳＲ１が１６ビットであるので、１６ビット又は１６ビットよりも大きいビット数を有して構成されている。なお、ＬＦＳＲ１とＬＦＳＲ２とは１つの汎用レジスタＡで構成すること以外に汎用レジスタＡと汎用レジスタＣなど２つの汎用レジスタを用いて構成することも勿論可能である。
【００２３】
次に具体的なデータのスクランブル経過を図６、図７を用いて示す。まず、ＬＦＳＲ２を右へ１ビットシフトする（シフト結果は、０ｘ１）。次にＬＦＳＲ２の値だけ、つまり１回だけＬＦＳＲ１をシフトし、そのときのＬＦＳＲ１の値（０ｘ１７６７）を鍵データとする。最後に鍵データとスクランブル対象データとをＸＯＲ演算によりスクランブルを行う。結果は、０ｘ４００Ｃとなる（図７）。このスクランブルデータは、ＣＰＵの汎用レジスタＢからＣＰＵバス１１、周辺バス２１を介して、ＲＡＭ３１などメモリへ格納される。なお、このスクランブルデータは、その後、必要に応じて出力Ｉ／Ｆ３４を介して外部へ出力することができる。勿論、ＲＡＭ３１に格納したスクランブルデータを半導体チップ１内部に留めて、つまり、外部へ出さずに使用することも可能である。なお、図７に示すスクランブル対象データは、図２のＳ５（ステップ５）の説明の際に述べたように汎用レジスタ１６の一部である汎用レジスタＢに保持されており、これはＣＰＵ１０の演算結果である。なお、以上のＸＯＲ演算などを含めたスクランブル／デスクランブル処理を行うプログラムなどは、前述したように、予めＣＰＵ１０内のＲＯＭ２（第２ＲＯＭ）１９に格納されている。
【００２４】
以上のように第１の実施形態では、ＣＰＵの汎用レジスタ１６を用いて鍵データの作成及び前記鍵データを用いた前記被処理データのスクランブル処理及びデスクランブル処理を行った。なお、説明が遅れたが、第１の実施形態の半導体装置は、最近の半導体装置の一般的な設計方法であるレイアウトの自動生成を行っている。つまり、ＣＰＵ１０全体が自動レイアウトされているので、ＣＰＵバス１１は外部からの検出は困難である。さらに鍵データを生成・保持している汎用レジスタ１６は、物理的な場所の特定などが極めて困難であるので、バスプロービングされる恐れは事実上無いに等しい。このため、特別な暗号化処理や専用回路等を用いなくても秘匿性は大変高まる。
【００２５】
なお、第１の実施形態で述べたＸＯＲ演算はスクランブル／デスクランブル処理の一例であるが、周知のようにＸＯＲ演算は２回演算処理を行うことで元のデータに戻るという性質を有しており、この特性を用いてデータ・スクランブル／デスクランブルを行っているものである。しかし、他のスクランブル／デスクランブル手法をとってもよいことはいうまでもない。また、前述の説明でスクランブルデータは半導体装置１の外部へ出力されない場合もあると述べたが、例えば、ＲＮＧ（ソフトウエア）で生成した乱数表をスクランブルしてＲＡＭ３１上へ展開し、ＤＳＡ（ソフトウエア）でＲＡＭ３１上に展開されたスクランブルデータをデスクランブルして使用したりすることもできる。このような場合にはスクランブルデータは、出力Ｉ／Ｆ３４から半導体装置の外部へ出力されることはない。また、スクランブル／デスクランブル処理のプログラムなどは、ＣＰＵ１０の内部に備えるＲＯＭ２（第２ＲＯＭ）１９へ保存しておくと述べた。これは、プログラムの保護上、こうした方が好ましいという観点から選択した実施形態であるが、必ずしもＲＯＭ２におくことに限定されず、ＲＯＭ２を設けることをやめて、ＲＯＭ１（第１ＲＯＭ）３２からスクランブル／デスクランブル処理のプログラムなどをＣＰＵ１０に取り入れてそれを用いることもできる。
【００２６】
次に第２の実施形態について図８を用いて説明する。半導体装置では、ＣＰＵの汎用レジスタで処理できる規模はおのずから制約がある。そこで第２の実施形態では、第１の実施形態の思想を活かしつつ、対象データのスクランブル／デスランブル処理を行うハードウエア、つまり、スクランブル／デスランブル回路を用いることでＣＰＵの汎用レジスタの使用負荷を更に軽減しようとするものである。
【００２７】
第２の実施形態の半導体装置２は、１チップの半導体装置、つまり半導体チップ２に特徴的な回路であるスクランブル／デスランブル回路４０を備える。すなわち、鍵データを生成・保持するとともにデータのスクランブル、デスクランブルを行う回路を設けているのが特徴である。通常、半導体装置２は、１チップで構成する。また、図１とハードウエアとして同じ構成要素は同じ番号を付し、その説明を省略する。ＣＰＵ２０もＣＰＵ１０と殆ど同じであるが、ＣＰＵ１０とは異なり汎用レジスタ１６で鍵データの生成等をさせる訳ではなく、またこのためのプログラムを格納しておくＲＯＭ２（第２ＲＯＭ）１９を有するわけでもないので、別の構成要素として別の番号としている。スクランブル／デスランブル回路４０は、内部にレジスタ４１、鍵データ生成部４２、データ・スクランブル／デスクランブルを行うスクランブル部４４とスクランブル／デスクランブルデータを保持するデータ保持部４３とを有する。さらに、半導体装置２は、スクランブル対象データとなる、つまり、データの保護を行いたいマクロ回路４６（いわゆるハード・マクロ回路であり、特定の演算処理を行う）を有し、マクロ回路４６の演算結果が、スクランブル／デスクランブル回路４０のデータ保持部４３に入出力される構成となっている。
【００２８】
次に第２の実施形態の動作について第１の実施形態との比較も交え、簡単に説明する。前述のように第１の実施形態は、ＣＰＵ１０とその内部の汎用レジスタ１６などでいわばソフトウエア的に処理していたものであるが、第２の実施形態はこれをスクランブル／デスクランブル回路４０というハードウエアで構成した回路を用いて行うものである。ＣＰＵ２０の命令によりＲＡＭ３１から周辺バス２１を介して受け取った鍵データのＳＥＥＤを用いて、鍵データ生成部４２で鍵データとして生成し、レジスタ４１に保持する。このレジスタ４１に保持された鍵データを用いて、スクランブル対象データ、デスクランブル対象データをスクランブル部４４でスクランブル、デスクランブルなどの処理を行う。また、スクランブル対象データは、前述のようにマクロ回路４６の演算結果をデータ保持部４３に受け、それを保持する。これらはハードウエアとしての電子回路を用いて公知の手段により回路的に構成しておくことができる。
【００２９】
データ保持部４３は具体的にはレジスタなどからなる。そういう点では単にレジスタと書いたほうが良いかもしれないが、スクランブル／デスクランブル処理の対象データを保持するということを分かりやすく説明するという観点からデータ保持部４３と示した。また、鍵データ生成部４２、スクランブル部４４は、第１の実施形態の具体例図４から図７を実現するような回路構成、つまり、２つのＬＦＳＲからなる回路であって、第１のＬＦＳＲはレジスタの値が鍵データとなり、第２のＬＦＳＲは、その第１のＬＦＳＲのシフト数を制御する回路構成をとっている。この回路構成の具体的な手段、つまり、回路素子、トランジスタレベルにおける回路図は周知のＬＦＳＲの構成と同じなのでその説明は割愛する。また、ＬＦＳＲは３つ以上を備えても良いのは勿論である。
【００３０】
以上述べたようにスクランブル／デスクランブル回路４０を用いることにより、汎用レジスタの負荷を減らすことや高速処理が可能になるなどの特徴もあるので、こういった要求が高い場合には、スクランブル／デスクランブル回路４０を用いるとより効果的である。なお、本実施例において、マクロ回路４６は、ハードウエアで構成すると述べたが、ソフトウエアで構成しても良いのは勿論である。
【００３１】
以上、本発明を種々、説明したが、本発明は、以上の実施形態のほか、その技術思想の範囲内で種々の変形が可能であることは言うまでもないことである。例えば、実施形態１、実施形態２ともＲＡＭ３１、ＲＯＭ１（第１ＲＯＭ）３２などがＣＰＵ１０又はＣＰＵ２０と同一の半導体チップ内に備えられていることを説明したが、必ずしもこれらが同一のチップに備えられなくても良いのは勿論である。これは鍵データがＣＰＵの外部の周辺バスを行き来するということがないからである。このように、本発明は開示した範囲に限定されるものでなく、本発明の趣旨の範囲で種々の変更が可能である。
【図面の簡単な説明】
【００３２】
【図１】本発明の第１の実施形態の半導体装置のブロック図である。
【図２】本発明の第１の実施形態のスクランブル時のフローチャート図である。
【図３】本発明の第１の実施形態のデスクランブル時のフローチャート図である。
【図４】本発明の第１の実施形態の１具体例の鍵データ生成のイメージ図である。
【図５】本発明の第１の実施形態の１具体例の鍵データ生成の途中図である。
【図６】本発明の第１の実施形態の１具体例の鍵データ生成の完成図である。
【図７】本発明の第１の実施形態の鍵データと対象データのスクランブルの１具体例である。
【図８】本発明の第２の実施形態の半導体装置のブロック図である。
【符号の説明】
【００３３】
１，２      半導体装置
１０，２０  ＣＰＵ
１１        ＣＰＵバス
１２        ＢＵＰ（バス・コントロール・ユニット）
１３        ＰＣ（プログラム・カウンタ）
１４        レベルシフタ
１５        システムレジスタ
１６        汎用レジスタ
１７        ＡＬＵ（算術論理ユニット）
１８        乗算器
１９        ＲＯＭ２（第２ＲＯＭ）
３１        ＲＡＭ
３２        ＲＯＭ１（第１ＲＯＭ）
３３        入力Ｉ／Ｆ
３４        出力Ｉ／Ｆ  
４０        スクランブル／デスクランブル回路
４１        レジスタ
４２        鍵データ生成部
４３        データ保持部
４４        スクランブル部
４６        マクロ回路
【図１】
2007251783.tif 000003
【図２】
2007251783.tif 000004
【図３】
2007251783.tif 000005
【図４】
2007251783.tif 000006
【図５】
2007251783.tif 000007
【図６】
2007251783.tif 000008
【図７】
2007251783.tif 000009
【図８】
2007251783.tif 000010