(57)【特許請求の範囲】
【請求項１】
予め定められた暗号方式の演算を実行する暗号回路と、
予め前記演算に用いる相補型のデータを格納しているメモリセルアレイと、
前記メモリセルアレイから読み出された前記データを格納する第１の領域、及び前記演算を実行する際に用いられる第２の領域を備えるページバッファと、
前記第１の領域からの前記データを格納し、格納した前記データを前記第２の領域に供給するレジスタと、
前記データを前記レジスタに格納する際に、前記データのエラーの有無を判定し、前記データにエラーが無いと判定した場合は、前記レジスタに前記データを格納する検査回路と、
前記データを前記メモリセルアレイから前記第１の領域に読み出す制御、及び前記データを前記第１の領域から前記第２の領域に読み出す制御を行う制御回路と、
前記制御回路から供給される信号に基づいて、ページバッファまたはメモリセルアレイのアドレスを指定するアドレス制御回路と、
を備え、
前記制御回路は、前記アドレス制御回路を制御することで、前記データを前記第１の領域から前記第２の領域に供給し、
前記検査回路は前記データにエラーがあると判定した場合に、その旨を前記アドレス制御回路に通知し、
前記アドレス制御回路は、前記通知を受信すると、前記ページバッファの前記データと同一内容のデータが格納されている別のアドレスを指定し、
前記検査回路は、前記別のアドレスのデータのエラーの有無の判定を行うことを特徴とする不揮発性半導体記憶装置。
【請求項２】
予め定められた暗号方式の演算を実行する暗号回路と、
予め前記演算に用いるデータを格納しているメモリセルアレイと、
前記メモリセルアレイから読み出された前記データを格納する第１の領域、及び前記演算を実行する際に用いられる第２の領域を備えるページバッファと、
前記第１の領域からの前記データを格納し、格納した前記データを前記第２の領域に供給するレジスタと、
を備えることを特徴とする不揮発性半導体記憶装置。
【請求項３】
前記データを前記レジスタに格納する際に、前記データのエラーの有無を判定し、前記データにエラーが無いと判定した場合は、前記レジスタに前記データを格納する検査回路を更に備えることを特徴とする請求項２に記載の不揮発性半導体記憶装置。
【請求項４】
前記データを前記メモリセルアレイから前記第１の領域に読み出す制御、及び前記データを前記第１の領域から前記第２の領域に読み出す制御を行う制御回路と、
前記制御回路から供給される信号に基づいて、ページバッファまたはメモリセルアレイのアドレスを指定するアドレス制御回路と、を更に備え、
前記制御回路は、前記アドレス制御回路を制御することで、前記データを前記第１の領域から前記第２の領域に供給し、
前記検査回路は前記データにエラーがあると判定した場合に、その旨を前記アドレス制御回路に通知し、
前記アドレス制御回路は、前記通知を受信すると、前記ページバッファの前記データと同一内容のデータが格納されている別のアドレスを指定し、
前記検査回路は、前記別のアドレスのデータのエラーの有無の判定を行うことを特徴とする請求項３に記載の不揮発性半導体記憶装置。
【請求項５】
前記データは、相補形式のデータであることを特徴とする請求項２乃至４のいずれか一項に記載の不揮発性半導体記憶装置。
【請求項６】
前記メモリセルアレイ及び前記ページバッファの間に設けられた演算部を更に備え、
前記演算部は、前記暗号回路が行う演算の一部を行うことを特徴とする請求項２乃至５のいずれか一項に記載の不揮発性半導体記憶装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、暗号化演算装置を搭載する不揮発性半導体記憶装置に関する。
【背景技術】
【０００２】
ＡＥＳ（Advanced Encryption Standard）は米国標準の暗号方式であり、様々な分野
に採用されている。ＡＥＳを実行する回路（ＡＥＳ演算回路）の小型化（ハードウェアの
回路規模縮小）は色々な研究が行われている。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】M. Feldhofer,J. Wolkerstorfer,and V. Rijmen,"AES Implementation on a Grain of Sand",IEE Proceedings Information Security,vol.152,pp. 13-20,2005.
【発明の概要】
【発明が解決しようとする課題】
【０００４】
暗号化演算装置を搭載する不揮発性半導体記憶装置を提供する。
【課題を解決するための手段】
【０００５】
実施形態の不揮発性半導体記憶装置は、予め定められた暗号方式の演算を実行する暗号回路と、予め前記演算に用いる相補型のデータを格納しているメモリセルアレイと、前記メモリセルアレイから読み出された前記データを格納する第１の領域、及び前記演算を実行する際に用いられる第２の領域を備えるページバッファと、前記第１の領域からの前記データを格納し、格納した前記データを前記第２の領域に供給するレジスタと、前記データを前記レジスタに格納する際に、前記データのエラーの有無を判定し、前記データにエラーが無いと判定した場合は、前記レジスタに前記データを格納する検査回路と、前記データを前記メモリセルアレイから前記第１の領域に読み出す制御、及び前記データを前記第１の領域から前記第２の領域に読み出す制御を行う制御回路と、前記制御回路から供給される信号に基づいて、ページバッファまたはメモリセルアレイのアドレスを指定するアドレス制御回路と、を備え、前記制御回路は、前記アドレス制御回路を制御することで、前記データを前記第１の領域から前記第２の領域に供給し、前記検査回路は前記データにエラーがあると判定した場合に、その旨を前記アドレス制御回路に通知し、前記アドレス制御回路は、前記通知を受信すると、前記ページバッファの前記データと同一内容のデータが格納されている別のアドレスを指定し、前記検査回路は、前記別のアドレスのデータのエラーの有無の判定を行う。
【図面の簡単な説明】
【０００６】
【図１】図１は、第１の実施形態に係るシステムの基本的な構成を概略的に示したブロック図である。
【図２】図２は、第１の実施形態に係るＮＡＮＤチップの基本的な構成を概略的に示したブロック図である。
【図３】図３は、第１の実施形態に係るメモリセルアレイの基本的な構成について模式的に示したブロック図である。
【図４】図４は、図３に示される複数のメモリブロックのうち、１つのメモリブロックの回路例を示す回路図である。
【図５】図５は、第１の実施形態に係るページバッファ及びその周辺の回路の基本的な構成を模式的に示したブロック図である。
【図６】図６は、第１の実施形態に係るページバッファ及びその周辺の回路例を模式的に示した回路図である。
【図７】図７は、第１の実施形態に係るページバッファ及びその周辺の回路例をより具体的に示した回路図である。
【図８】図８（ａ）は、第１の実施形態に係るページバッファの基本的な構成を示した模式図であり、図８（ｂ）は、第１の実施形態に係るページバッファへの、機能別に領域を分けた場合に関する模式図であり、図８（ｃ）は、第１の実施形態に係るページバッファへの、より詳細な割り当てについて示した模式図であり、図８（ｄ）は、第１の実施形態に係るページバッファへの割り当てについて示した模式図である。
【図９】図９は、第１の実施形態に係るＡＥＳ暗号回路の基本的な構成を模式的に示したブロック図である。
【図１０】図１０は、第１の実施形態に係るＡＥＳ暗号演算装置の基本的な構成及び信号の流れについて模式的に示したブロック図である。
【図１１】図１１は、第１の実施形態に係るＡＥＳ暗号化シーケンスを示すブロック図である。
【図１２】図１２は、第１の実施形態に係るＡＥＳ暗号化シーケンスを実行するために、ホスト機器がＮＡＮＤチップに入力するコマンドのセットを示している。
【図１３】図１３は、暗号化のメインシーケンスを実行する際のタイミングチャートである。
【図１４】図１４は、ＡＥＳ暗号回路がデータのロードを実行する際のタイミングチャートである。
【図１５】図１５は、ＡＥＳ暗号回路がデータのストアを実行する際のタイミングチャートである。
【図１６】図１６は、第３の実施形態にかかる暗号化装置を含む電子機器のブロック図である。
【図１７】図１７は、第３の実施形態にかかる暗号化装置のブロック図である。
【図１８】図１８は、擬似コード内の各命令の意味を説明するための図である。
【図１９】図１９は、第３の実施形態にかかるＡＬＵのブロック図である。
【図２０】図２０は、ｌｄ命令の処理例を示す図である。
【図２１】図２１は、ｓｔ命令の処理例を示す図である。
【図２２】図２２は、ｘｏｒ命令の処理例を示す図である。
【図２３】図２３は、ｓｂｏｘおよびｘｔｉｍｅ命令の処理例を示す図である。
【図２４】図２４は、第３の実施形態にかかる暗号化処理部のブロック図である。
【図２５】図２５は、第３の実施形態で用いるアドレス空間を示す図である。
【図２６】図２６は、第３の実施形態にかかるアドレス生成部のブロック図である。
【図２７】図２７は、図２６の各回路に相当する関数の入出力を示す図である。
【図２８】図２８は、第３の実施形態における暗号化処理のフローチャートである。
【図２９】図２９は、詳細版擬似コードを状態遷移表として書き直した図である。
【図３０】図３０は、状態遷移表の各項目の読み方を表す図である。
【図３１】図３１は、第３の実施形態の変形例にかかるアドレス生成部のブロック図である。
【図３２】図３２は、図３１の各回路に相当する関数の入出力を示す図である。
【図３３】図３３は、第４の実施形態にかかる復号装置のブロック図である。
【図３４】図３４は、第４の実施形態にかかるＡＬＵのブロック図である。
【図３５】図３５は、第４の実施形態における復号処理のフローチャートである。
【図３６】図３６は、第５の実施形態に係るメモリシステムのブロック図である。
【図３７】図３７は、第５の実施形態に係る複数のピンと、それらに割り当てられた信号とを示す表である。
【図３８】図３８は、第５の実施形態に係るメモリカードのブロック図である。
【図３９】図３９は、第５の実施形態に係るメモリ部のブロック図である。
【発明を実施するための形態】
【０００７】
近年では、ＮＡＮＤフラッシュメモリ（単にＮＡＮＤとも称す）の大容量化が進み、ＮＡＮＤフラッシュメモリに音楽や動画、ゲームソフト等の大容量データが保持されることが多くなっている。これらのデータには著作権等の権利がある場合が多い。
【０００８】
そこで、コンテンツの権利を守るためにＮＡＮＤフラッシュメモリを搭載したカードを動画再生機などのホスト機器が「認証する」という機能が考えられている。たとえば、ホスト機器は、メディアが正規のカードか、不正にコピーされたカードなのかを識別し、それが後者であった場合には動画の再生を拒否する、というような認証システムが考えられる。
【０００９】
以上のような認証システムにおいて、ＡＥＳ（Advanced Encryption Standard）という暗号方式を用いる事が現在考えられている。ＡＥＳとは、米国標準の暗号方式であり、様々な分野に採用されている。
【００１０】
現在、ＡＥＳを実行する回路（ＡＥＳ演算回路）の小型化（ハードウェアの回路規模縮小）に関して、様々な研究が行われている。
【００１１】
例えば、ＡＥＳの暗号化のための演算データを展開するための記憶装置（ＲＡＭ）を暗号装置外部に備えることでＡＥＳを搭載したシステムを小型化すること等も考えられている。
【００１２】
これまでのＡＥＳ演算回路の小型化の研究では、ＡＥＳ演算で用いる記憶素子（例えばＲＡＭ）も含めたＡＥＳ演算回路全体のサイズを小さくすることに主眼が置かれていた。ＡＥＳ演算回路は何らかの装置（電子機器）に組み込まれて使用されるため、このような使用状況を考慮してＡＥＳ演算回路のサイズを小さくする必要がある。しかし、これまでは、ＡＥＳ演算回路が他の機器（システム）に組み込まれて使用されるということを考慮した小型化の研究は行われていない。
【００１３】
一般に、システムには、他の用途で使うことを目的とした記憶装置、例えば不揮発性のＮＡＮＤフラッシュメモリのページバッファ（ＲＡＭ（Random Access Memory）など）が存在する。そこで、第１の実施形態の暗号化装置は、このような記憶装置を、ＡＥＳ演算回路を使用するときに転用する。これにより、ＡＥＳ演算回路内に記憶装置を備える必要がなくなり、さらなる小型化が実現できる。
【００１４】
以下に、構成された実施形態について図面を参照して説明する。なお、以下の説明において、略同一の機能及び構成を有する構成要素については、同一符号を付し、重複説明は必要な場合にのみ行う。参照符号を構成する数字の後ろのアルファベットは、同じ数字を含んだ参照符号によって参照され且つ同様の構成を有する要素同士を区別するために用いられている。  
また、以下に示す各実施形態は、この実施形態の技術的思想を具体化するための装置や方法を例示するものであって、実施形態の技術的思想は、構成部品の材質、形状、構造、配置等を下記のものに特定するものでない。実施形態の技術的思想は、特許請求の範囲において、種々の変更を加えることができる。
【００１５】
以下の各実施形態では、記憶装置及び演算装置をＡＥＳ暗号方式の暗号化装置に適用する場合について説明する。しかしながら、各実施形態は、ＡＥＳ暗号方式の暗号化装置以外にも適用することが可能である事に留意されたい。
【００１６】
（第１の実施形態）
ＡＥＳの機能を実現するためには、ＡＥＳ暗号回路以外に、ＡＥＳ鍵記憶装置と、ＲＡＭが必要である。本実施形態では、ＡＥＳ鍵記憶装置としてＮＡＮＤフラッシュメモリ、ＡＥＳ用のＲＡＭとしてページバッファをそれぞれ転用するものとする。ＡＥＳ暗号回路を含むＡＥＳ暗号化演算装置本体は、ＮＡＮＤチップのうち、コア回路を除いた周辺回路部分に配置されている。以下に詳細について記載する。
【００１７】
まず、図１を用いて第１の実施形態に係るシステムの基本的な構成について説明する。図１は、第１の実施形態に係るシステムの基本的な構成を概略的に示したブロック図である。
【００１８】
このシステムはＡＥＳ演算回路（ＡＥＳ暗号化装置とも称す）を搭載したＮＡＮＤチップ（ＮＡＮＤフラッシュメモリやＮＡＮＤ等とも称す）１００と、これを外部から制御するホスト機器２００と、を備えている。
【００１９】
次に、図２を用いて第１の実施形態に係るＮＡＮＤチップの基本的な構成について説明する。図２は、第１の実施形態に係るＮＡＮＤチップの基本的な構成を概略的に示したブロック図である。
【００２０】
図２に示すように、第１の実施形態に係るＮＡＮＤチップ１００は、入出力端子（Ｉ／Ｏ）１０２、制御信号入力端子１０４、入出力制御回路１１０、コマンドレジスタ１１１、一時レジスタ１１２、データチェック回路１１３、バス制御回路１１４、アドレスレジスタ１１５、ステータスレジスタ１１６、ロジック制御回路１２０、メモリセルアレイ１３０、センスアンプ１３１、演算部１３２、ページバッファ１３３，カラムデコーダ１３４、カラムバッファ１３５、ロウアドレスデコーダ１３６、ロウアドレスバッファデコーダ１３７、及び昇圧回路１４０を備えている。
【００２１】
入出力端子１０２及び制御信号入力端子１０４は、ホスト機器２００とＮＡＮＤチップ１００とを接続する外部インタフェースである。入出力端子１０２は、例えば図示しないデータ入出力端子、コマンド入力端子、及びアドレス入力端子等を備えている。制御信号入力端子１０４は、例えば図示しないデータ入力用クロックを供給するＷＥ端子、データ出力用クロックを供給するＲＥ端子、データ入出力用クロックを伝送するＤＱＳ端子、データ入力をコマンドとして入力するイネーブル用のＣＬＥ端子、データ入力をアドレスとして入力するイネーブル用のＡＬＥ端子、データ入出力等全般の機能を有効化するためのＣＥ端子、及び誤書き込み防止用の書き込み防止信号を伝送するＷＰ端子等を備えている。また、制御信号入力端子１０４は、高速インタフェースにてデータ伝送を実現する際に利用される端子として、ＲＥ端子、ＷＥ端子、ＤＱＳ端子の相補信号を伝送する／ＲＥ端子、／ＷＥ端子、／ＤＱＳ端子を備えている。また、図２では図示しないが、ＮＡＮＤチップ１００の内部動作状態を示すＲ／Ｂ端子、電力供給用のＶｃｃ／Ｖｓｓ／Ｖｃｃｑ／Ｖｓｓｑ端子等も存在する。
【００２２】
入出力制御回路１１０は、入出力端子１０２と、各種パラメータを保持する為のレジスタに接続されている。また、入出力制御回路１１０は、データ入出力バッファ１１０ａを備えている。データ入出力バッファ１１０ａは、データ入出力端子からデータを受信し、カラムデコーダ１３４によって選択された該データ記憶回路に記憶される。また、データ入出力バッファ１１０ａは、データ入出力端子を介して外部にデータを出力する。データ入出力端子からは、書き込みデータの他に、書き込み、読み出し、消去、およびステータス・リード等の各種コマンド、アドレスも入力される。
【００２３】
コマンドレジスタ１１１は、入出力制御回路１１０から入力されるコマンドをロジック制御回路１２０に出力する。
【００２４】
データチェック回路１１３は、ＡＥＳに用いる鍵などの記憶領域のデータをページバッファ１３３のワーキング領域（不図示）に移すときに、該データにエラーが無いかの検査を行うものである。
【００２５】
一時レジスタ１１２は、例えばデータチェック回路１１３の検査でエラーが無いと判定された該データを一時的に保持するレジスタである。
【００２６】
バス制御回路１１４は、例えば入出力制御回路１１０及びページバッファ１３３と、ロジック制御回路１２０及びページバッファ１３３との接続の切替えを行う回路である。
【００２７】
アドレスレジスタ１１５は、例えばホスト機器２００から供給されたアドレスをラッチし、ラッチしたアドレスを内部物理アドレスへ変換し、カラムアドレスをカラムバッファ１３５、及びロウアドレスをロウアドレスバッファデコーダ１３７に供給する。
【００２８】
ステータスレジスタ１１６は、ＮＡＮＤチップ１００内部の種々の状態を外部に知らせるためのものであって、ＮＡＮＤチップ１００がレディ／ビジー状態のいずれにあるかを示すデータを保持するレディ／ビジーレジスタ、書き込みのパス／フェイルを示すデータを保持する書き込みステータスレジスタ（不図示）を有する。
【００２９】
また、例えば、誤書き込み状態の有無（誤書き込みベリファイのパス／フェイル）を示すデータを保持する誤書き込みステータスレジスタ、過書き込み状態の有無（過書き込みベリファイのパス／フェイル）を示すデータを保持する過書き込みステータスレジスタ等を有していてもよい。
【００３０】
ロジック制御回路１２０は、メモリセルアレイ１３０、カラムデコーダ１３４、データ入出力バッファ１１０ａ、及びロウアドレスデコーダ１３６を制御する。
【００３１】
また、ロジック制御回路１２０は、ＡＥＳ制御回路１２１、ＡＥＳ暗号回路１２２、アドレス制御回路１２３、バッファデータ読み出しシーケンス１２４、及びバッファデータ書込みシーケンス１２５を備えている。尚、本実施形態では、ＡＥＳ制御回路１２１、ＡＥＳ暗号回路１２２、アドレス制御回路１２３、バッファデータ読み出しシーケンス１２４、及びバッファデータ書込みシーケンス１２５をまとめて、ＡＥＳ暗号化演算装置と呼ぶことがある。
【００３２】
ＡＥＳ制御回路１２１は、ＡＥＳ暗号回路１２２の制御を行う。
【００３３】
ＡＥＳ暗号回路１２２は、ＡＥＳ暗号方式の演算を実行する演算装置である。
【００３４】
アドレス制御回路１２３は、ＡＥＳ暗号化演算処理で用いられるデータを記憶するページバッファ１３３または一時レジスタ１１２のアドレスを生成する。
【００３５】
バッファデータ読み出しシーケンス１２４は、ページバッファ１３３からデータをＡＥＳ暗号回路１２２または、一時レジスタ１１２に転送するための制御を行うサブシーケンス制御回路である。
【００３６】
バッファデータ書込みシーケンス１２５は、ＡＥＳ暗号回路１２２または、一時レジスタからのデータをページバッファに転送するための順序回路である。
【００３７】
メモリ読み出しシーケンス１２６は、メモリセルアレイ１３０内のページから、センスアンプ１３１を用いてデータをセンスし、ページバッファ１３３に読み出しデータを格納する。
【００３８】
また、ロジック制御回路１２０は、外部から制御信号入力端子１０４を介して入力される制御信号（コマンドラッチイネーブル信号ＣＬＥ、アドレスラッチイネーブル信号ＡＬＥ、レディ／ビジー信号ＲＹ／ＢＹ等）およびデータ入出力端子からデータ入出力バッファ１１０ａを介して入力されるコマンドに応じて制御動作する。すなわち、ロジック制御回路１２０は、該制御信号およびコマンドに応じて、データのプログラム、ベリファイ、読み出し、消去時に、所望の電圧を発生し、メモリセルアレイ１３０の各部に供給する。
【００３９】
メモリセルアレイ１３０は、複数のビット線ＢＬと、複数のワード線ＷＬと、ソース線ＳＬとを含む。このメモリセルアレイ１３０は、電気的に書き換えが可能なメモリセルトランジスタ（単にメモリセル等とも称す）ＭＣがマトリクス状に配置された複数のブロックＢＬＫで構成されている。メモリセルＭＣは、例えば、制御ゲート電極及び電荷蓄積層（例えば浮遊ゲート電極）を含む積層ゲートを有し、浮遊ゲート電極に注入された電荷量により定まるトランジスタの閾値の変化によって二値、あるいは多値データを記憶する。また、メモリセルＭＣは、電荷トラップ型の絶縁膜（例えば窒化膜）に電子をトラップするＭＯＮＯＳ（Metal - Oxide - Nitride - Oxide - Silicon）構造を有するものであっても良い。
【００４０】
センスアンプ１３１は、メモリセルアレイ１３０内のビット線ＢＬ（カラム）の電圧をセンス増幅し、メモリセルアレイへのデータ記憶処理・データ読み出し処理・データ消去処理などを実行する。
【００４１】
演算部１３２は、任意のデータラッチ間でブール代数で示されるような演算を行い、その結果をデータラッチに格納することが可能である。この演算器は、ＮＡＮＤの書き込み、読み出し等の通常の動作において使われる。
【００４２】
ページバッファ１３３は、書き込みを行うためのデータをラッチする、データの一時記憶領域である。
【００４３】
カラムデコーダ１３４は、ページバッファ１３３内のデータ記憶回路（バッファ回路）を選択し、このデータ記憶回路に読み出されたメモリセルＭＣのデータを、データ入出力バッファ１１０ａを介してデータ入出力端子から外部（コントローラ１００）へ出力する。また、カラムデコーダ１３４は、ビット線ＢＬを介して該メモリセルＭＣの状態を検出し、ビット線ＢＬを介して該メモリセルＭＣに書き込み制御電圧を印加して該メモリセルＭＣに書き込みを行う。  
カラムバッファ１３５は、アドレスレジスタ１１５から入力されるカラムアドレスを記憶する。
【００４４】
ロウアドレスデコーダ１３６は、データの読み出し動作、書き込み動作、或いは消去動作時に、何れかのブロックＢＬＫを選択し、残りのブロックＢＬＫを非選択とする。つまり、ロウアドレスデコーダ１３６は、メモリセルアレイ１３０のワード線ＷＬ及び選択ゲート線ＶＳＧＳ、ＶＳＧＤに、読み出し動作、書き込み動作、或いは消去動作において必要な電圧を印加する。  
ロウアドレスバッファデコーダ１３７は、アドレスレジスタ１１５から入力されるロウアドレスを記憶する。
【００４５】
昇圧回路１４０は、電源電圧を昇圧する。電源電圧を必要に応じて昇圧し、メモリセルアレイ１３０、センスアンプ１３１及びロウアドレスデコーダ１３６に供給する。
【００４６】
図３及び図４を用いて、実施形態に係るメモリセルアレイ１３０の基本的な構成について概略的に説明する。  
図３は、実施形態に係るメモリセルアレイ１３０の基本的な構成について模式的に示したブロック図である。
【００４７】
メモリセルアレイ１３０は、複数のメモリブロックＢＬＫ０〜ＢＬＫｍ−１（ｍは１以上の整数である）から構成される。複数のメモリブロックＢＬＫ０〜ＢＬＫｍ−１は、ビット線ＢＬ方向（カラム方向）に並んで配置される。
【００４８】
このブロックはそれぞれ、例えば用途毎に使い分けられることが可能であり、ロムフューズ領域として用いられるロムフューズブロックＢＬＫｉ、及び鍵データが記憶されているページを含む鍵記憶ブロックＢＬＫｌ等がある。
【００４９】
ロムフューズブロックＢＬＫｉは、ＮＡＮＤチップ１００の初期化等に必要な各種の初期設定値を格納している。
【００５０】
鍵記憶ブロックＢＬＫｌはＮＡＮＤチップ１００の外部に対してはデータ記録だけでなく、データ読み出しも禁止される領域である。そして、鍵記憶ブロックＢＬＫｌは、秘密情報であり、ＡＥＳ暗号化演算で用いられる鍵データを予め保持している。
【００５１】
ここで、データ読み出しが禁止されている鍵記憶ブロックＢＬＫｌの実装上の扱いについて記述しておく。この鍵記憶ブロックＢＬＫｌに記憶されている情報は、機密情報であり保護すべきデータが収められているので、直接ＮＡＮＤチップ１００の外部（例えばホスト機器２００）にデータを出力できないようになっている。しかし、ＮＡＮＤチップ１００を製造する工程で、前記鍵記憶ブロックＢＬＫｌのテストを行う、等の目的で、正しく鍵データが書きこめたか否かを確認したい場合がある。この場合にはＮＡＮＤチップ１００の外部から特定のデータをＮＡＮＤチップ１００に与え、このデータと鍵の間で一定の規則に従った演算を行った結果を出力することで正しくデータが前記鍵記憶ブロックＢＬＫｌに書き込まれたか否かを判断する。前記特定のデータは鍵データそのものでも良く、その場合には、前記鍵記憶ブロックＢＬＫｌに記憶されている鍵データと、ＮＡＮＤチップ１００の外部から入力した鍵データの間で排他的論理和をとり、その結果をＮＡＮＤチップ１００の外部に出力すればよい。
【００５２】
別の例としては、ＮＡＮＤチップ１００の内部に乱数生成回路を更に備え、鍵データと前記乱数生成回路の発生した乱数の間に演算を行った後に、その結果をＮＡＮＤチップ１００の外部に出力するようにする。
【００５３】
ここで、ＮＡＮＤチップ１００の内部に乱数生成回路を備える場合、予めＮＡＮＤチップ１００の内部に備わっている回路の一部を転用して乱数を発生することが可能である場合には、そのようにすることで回路面積の増大を抑制する効果がある。
【００５４】
図４は、図３に示される複数のメモリブロックのうち、１つのメモリブロックの回路例を示す回路図である。  
図４に示すように、１つのメモリブロックは、ワード線ＷＬ方向（ロウ方向）に並んだ複数のＮＡＮＤセル（セルユニット、またはＮＡＮＤストリングス等とも称す）を含む。
【００５５】
１つのＮＡＮＤセルは、直列接続される複数のメモリセルトランジスタ（単にメモリセルとも称す）ＭＴと、一端のメモリセルトランジスタＭＴのドレインに接続される選択ゲートトランジスタＳＴ１と、他端のメモリセルのソースに接続される選択ゲートトランジスタＳＴ２とを含む。
【００５６】
メモリセルトランジスタＭＴは、半導体基板上にゲート絶縁膜を介在して形成された電荷蓄積層と、電荷蓄積層上に形成されたゲート絶縁膜と、更にゲート絶縁膜上に形成された制御ゲート電極とを有する。なお、メモリセルトランジスタＭＴの個数は８個に限られず、１６個や３２個、６４個、１２８個、２５６個等であってもよく、その数は限定されるものではない。またメモリセルトランジスタＭＴは、隣接するもの同士でソース、ドレインを共有している。そして、選択ゲートトランジスタＳＴ１、ＳＴ２間に、その電流経路が直列接続されるようにして配置されている。直列接続されたメモリセルトランジスタＭＴの一端側のドレイン領域は選択ゲートトランジスタＳＴ１のソース領域に接続され、他端側のソース領域は選択ゲートトランジスタＳＴ２のドレイン領域に接続されている。
【００５７】
ビット線ＢＬ０〜ＢＬｑ−１（ｑは１以上の整数である）は、選択ゲートトランジスタＳＴ１のドレインと接続される。ソース線ＳＬは、選択ゲートトランジスタＳＴ２のソースに接続される。尚、ビット線ＢＬ０〜ＢＬｑ−１についても、これらを区別しない場合には一括してビット線ＢＬと呼ぶ。また、選択トランジスタＳＴ１、ＳＴ２は必ずしも両方必要ではなく、ＮＡＮＤセルを選択出来るのであればいずれか一方のみが設けられていても良い。
【００５８】
ワード線ＷＬ０〜ＷＬｎ−１（ｎは１以上の整数である）は、ＷＬ方向に延び、ＷＬ方向に隣接するメモリセルで共有接続される。なお説明の簡単化のため、以下ではワード線ＷＬ０〜ＷＬ７を区別しない場合には、単にワード線ＷＬと呼ぶことがある。
【００５９】
セレクトゲート線ＳＧＤ、ＳＧＳはそれぞれ、メモリセルの選択トランジスタＳＴ１、ＳＴ２のゲート電極で共有接続される。
【００６０】
また、同一のワード線ＷＬに接続された複数のメモリセルトランジスタＭＴには一括してデータが書き込まれ、この単位をページと呼ぶ。更に、同一行にある複数のＮＡＮＤセルは一括してデータが消去され、この単位をメモリブロックと呼ぶ。
【００６１】
次に、図５〜８を用いて、第１の実施形態に係るページバッファ（データラッチ）１３３の基本的な構成について概略的に説明する。図５は、第１の実施形態に係るページバッファ１３３及びその周辺の回路の基本的な構成を模式的に示したブロック図である。  
図５に示すように、センスアンプ１３１は、ビット線ＢＬに接続される複数のセンス部ＳＡ＿０、ＳＡ＿１、ＳＡ＿２、ＳＡ＿３、…、ＳＡ＿ｑ−１を備えている。以下、複数のセンス部を特に区別する必要がない場合は、単にセンス部ＳＡと表記する場合がある。
【００６２】
また、演算部１３２は、センス部ＳＡにそれぞれ接続される複数の演算器ＹＢ＿０、ＹＢ＿１、ＹＢ＿２、ＹＢ＿３、…、ＹＢ＿ｑ−１を備えている。以下、複数の演算器を特に区別する必要がない場合は、単に演算器ＹＢと表記する場合がある。
【００６３】
また、ページバッファ１３３において、一つのセンス部ＳＡに複数のバッファ回路ＡＤ＿０、ＢＤ＿０、ＣＤ＿０、及びＸＤ＿０が接続されている。そして、ページバッファ１３３において、センス部ＳＡ毎に４つのバッファ回路が設けられている。以下、複数のバッファ回路を特に区別する必要がない場合は、単にバッファ回路ＡＤ、ＢＤ、ＣＤまたはＸＤ等と表記する場合がある。
【００６４】
カラムデコーダ１３４は、バッファ回路ＸＤにそれぞれ接続される複数のスィッチＳＷ＿０、ＳＷ＿１、ＳＷ＿２、ＳＷ＿３、…、ＳＷ＿ｑ−１を備えている。以下、複数のスィッチを特に区別する必要がない場合は、単にスィッチＳＷと表記する場合がある。
【００６５】
アドレス制御回路１２３は、アドレス選択信号を各スィッチＳＷに供給することで、カラムデコーダ１３４の制御を行う。
【００６６】
ＡＥＳ暗号回路１２２は、カラムデコーダ１３４を介してページバッファ１３３とデータの送受信を行う。また、ＡＥＳ暗号回路１２２は、アドレス制御回路１２３の制御を行う。  
ＡＥＳ制御回路１２１は、ＡＥＳ暗号回路１２２の制御を行う。
【００６７】
図６は、ページバッファ１３３、及びその周辺の回路例を模式的に示した回路図である。  
ひとつのセンス部ＳＡには、演算器（ＹＢＯＸ）ＹＢを介して複数のバッファ回路（ラッチ回路）ＡＤ、ＢＤ、ＣＤ、ＸＤが接続されている。また、これらページバッファのうち最低ひとつ（本例ではバッファ回路ＸＤ）は、入出力端子１０２内のデータ入出力端子（不図示）とデータ入出力バッファを結ぶデータ線ＩＯ＿ＢＵＳ＿Ｘ（図２のページバッファ１３３と、バス制御回路１１４とを結ぶデータ線）に直接接続されている。それぞれのバッファ回路は、データを保持することが可能である。
【００６８】
例えば各種シーケンスは、このバッファ回路ＸＤを介して、ホスト機器２００からメモリセルアレイ１３０に書き込むデータをロードし、また、メモリセルアレイ１３０から読み出したデータをホスト機器２００に出力することができる。
【００６９】
図７は、ページバッファ１３３及びその周辺の回路例をより具体的に示した回路図である。  
センス部ＳＡは、電流経路の一端がビット線ＢＬに接続され、ゲートにＢＬＶが入力され、他端がグランドに接続されるｎ型のトランジスタ１３１ａと、電流経路の一端がビット線ＢＬに接続され、ゲートにＢＬＣが入力され、他端がノードＮ１に接続されるｎ型のトランジスタ１３１ｂと、電流経路の一端がノードＮ１に接続され、ゲートにＩＮＶが入力され、他端がＳＲＣＧＮＤ電位に接続されるトランジスタ１３１ｃとを備えている。また、センス部ＳＡは、電流経路の一端が電源ＶＤＤに接続され、ゲートにＩＮＶが入力され、他端がノードＮ２に接続されるｐ型のトランジスタ１３１ｄと、電流経路の一端がノードＮ２に接続され、ゲートにＢＬＸが入力され、他端がノードＮ１に接続されるｎ型のトランジスタ１３１ｅと、電流経路の一端がノードＮ２に接続され、ゲートにＨＬＬが入力され、他端がノードＮ３（＝ＳＥＮ）に接続されるｎ型のトランジスタ１３１ｆと、電流経路の一端がノードＮ３に接続され、ゲートにＸＸＬが入力され、他端にノードＮ１が接続されるｎ型のトランジスタ１３１ｇと、を備えている。
【００７０】
演算器ＹＢは、電流経路の一端がノードＮ３に接続され、ゲートにＢＬＱが入力され、他端がノードＮ４に接続されるｎ型のトランジスタ１３２ａと、一端にノードＮ３が接続され、他端にＣＬＫが入力されるキャパシタ１３２ｂとを備えている。また演算器ＹＢは、電流経路の一端にノードＮ４が接続され、ゲートにＳＴＢが入力されるｎ型のトランジスタ１３２ｃと、電流経路の一端がトランジスタ１３２ｃの電流経路の他端に接続され、ゲートにノードＳＥＮが接続され、他端にＣＬＫが入力されるｎ型のトランジスタ１３２ｄとを備えている。更に演算器ＹＢは、電流経路の一端にノードＮ３が接続され、ゲートにＬＳＬが入力されるトランジスタ１３２ｅと、電流経路の一端にトランジスタ１３２ｅの電流経路の他端が接続され、ゲートにノードＮ４（＝データ線ＬＢＵＳ）が接続され、他端はグランドに接続されているトランジスタ１３２ｆと、を備えている。
【００７１】
バッファ回路ＡＤは、電流経路の一端に電源ＶＤＤが入力され、ゲートにＳＬＬが入力されるｐ型のトランジスタ１３３ａ１と、電流経路の一端にトランジスタ１３３ａ１の電流経路の他端が接続され、ゲートがノードＮ６（＝ＩＮＶ）に接続され、他端がノードＮ５に接続されるｐ型のトランジスタ１３３ａ２と、電流経路の一端がノードＮ５に接続され、ゲートにＳＴＬが入力され、他端がノードＮ４に接続されるｎ型のトランジスタ１３３ａ３と、電流経路の一端がノードＮ５に接続され、ゲートがノードＮ６に接続され、他端がグランドに接続されているｎ型のトランジスタ１３３ａ４と、を備えている。また、バッファ回路ＡＤは、電流経路の一端に電源ＶＤＤが入力され、ゲートにＳＬＩが入力されるｐ型のトランジスタ１３３ａ５と、電流経路の一端にトランジスタ１３３ａ５の電流経路の他端が接続され、ゲートがノードＮ５に接続され、他端がノードＮ６に接続されるｐ型のトランジスタ１３３ａ６と、電流経路の一端がノードＮ６に接続され、ゲートにＳＴＩが入力され、他端がノードＮ４に接続されるｎ型のトランジスタ１３３ａ７と、電流経路の一端がノードＮ６に接続され、ゲートがノードＮ５に接続され、他端がグランドに接続されているｎ型のトランジスタ１３３ａ８と、を備えている。
【００７２】
バッファ回路ＢＤは、電流経路の一端に電源ＶＤＤが入力され、ゲートにＬＬＬが入力されるｐ型のトランジスタ１３３ｂ１と、電流経路の一端にトランジスタ１３３ｂ１の電流経路の他端が接続され、ゲートがノードＮ８に接続され、他端がノードＮ７に接続されるｐ型のトランジスタ１３３ｂ２と、電流経路の一端がノードＮ７に接続され、ゲートにＬＴＬが入力され、他端がノードＮ４に接続されるｎ型のトランジスタ１３３ｂ３と、電流経路の一端がノードＮ７に接続され、ゲートがノードＮ８に接続され、他端がグランドに接続されているｎ型のトランジスタ１３３ｂ４と、を備えている。また、バッファ回路ＢＤは、電流経路の一端に電源ＶＤＤが入力され、ゲートにＬＬＩが入力されるｐ型のトランジスタ１３３ｂ５と、電流経路の一端にトランジスタ１３３ｂ５の電流経路の他端が接続され、ゲートがノードＮ７に接続され、他端がノードＮ８に接続されるｐ型のトランジスタ１３３ｂ６と、電流経路の一端がノードＮ８に接続され、ゲートにＬＴＩが入力され、他端がノードＮ４に接続されるｎ型のトランジスタ１３３ｂ７と、電流経路の一端がノードＮ８に接続され、ゲートがノードＮ７に接続され、他端がグランドに接続されているｎ型のトランジスタ１３３ｂ８と、を備えている。
【００７３】
バッファ回路ＣＤは、電流経路の一端に電源ＶＤＤが入力され、ゲートにＵＬＬが入力されるｐ型のトランジスタ１３３ｃ１と、電流経路の一端にトランジスタ１３３ｃ１の電流経路の他端が接続され、ゲートがノードＮ１０に接続され、他端がノードＮ９に接続されるｐ型のトランジスタ１３３ｃ２と、電流経路の一端がノードＮ９に接続され、ゲートにＵＴＬが入力され、他端がノードＮ４に接続されるｎ型のトランジスタ１３３ｃ３と、電流経路の一端がノードＮ９に接続され、ゲートがノードＮ１０に接続され、他端がグランドに接続されているｎ型のトランジスタ１３３ｃ４と、を備えている。また、バッファ回路ＣＤは、電流経路の一端に電源ＶＤＤが入力され、ゲートにＵＬＩが入力されるｐ型のトランジスタ１３３ｃ５と、電流経路の一端にトランジスタ１３３ｃ５の電流経路の他端が接続され、ゲートがノードＮ９に接続され、他端がノードＮ１０に接続されるｐ型のトランジスタ１３３ｃ６と、電流経路の一端がノードＮ１０に接続され、ゲートにＵＴＩが入力され、他端がノードＮ４に接続されるｎ型のトランジスタ１３３ｃ７と、電流経路の一端がノードＮ１０に接続され、ゲートがノードＮ９に接続され、他端がグランドに接続されているｎ型のトランジスタ１３３ｃ８と、を備えている。
【００７４】
また、バッファ回路ＢＤ及びＸＤの間において、電流経路の一端に電源ＶＤＤが入力され、ゲートにＬＰＣｎが入力され、他端がノードＮ４に接続されているｐ型のトランジスタ１３３ｄ１と、電流経路の一端がノードＮ４に接続され、ゲートにＤＳＷが入力され、他端がノードＮ１１に接続されるｎ型のトランジスタ１３３ｄ２と、電流経路の一端に電源ＶＤＤが入力され、ゲートにＤＰＣｎが入力され、他端がノードＮ１１に接続されるｐ型のトランジスタ１３３ｄ３と、電流経路の一端がノードＮ１１に接続され、ゲートにＤＤＣが入力され、他端がグランドに接続されるｎ型のトランジスタ１３３ｄ４と、が設けられている。ここで、ＬＰＣｎは、Ｌの場合にＬＢＵＳをプリチャージする。そして、ＤＳＷは、ＬＢＵＳとバッファ回路ＸＤとを接続する信号である。そして、ＤＰＣｎ及びＤＤＣは、バッファ回路ＸＤをプリチャージまたはディスチャージする信号である。
【００７５】
バッファ回路ＸＤは、電流経路の一端に電源ＶＤＤが入力され、ゲートにＸＬＬが入力されるｐ型のトランジスタ１３３ｘ１と、電流経路の一端にトランジスタ１３３ｘ１の電流経路の他端が接続され、ゲートがノードＮ１３に接続され、他端がノードＮ１３に接続されるｐ型のトランジスタ１３３ｘ２と、電流経路の一端がノードＮ１２に接続され、ゲートにＸＴＩが入力され、他端がノードＮ１１に接続されるｎ型のトランジスタ１３３ｘ３と、電流経路の一端がノードＮ１２に接続され、ゲートがノードＮ１３に接続され、他端がグランドに接続されているｎ型のトランジスタ１３３ｘ４と、を備えている。また、バッファ回路ＸＤは、電流経路の一端に電源ＶＤＤが入力され、ゲートにＸＬＩが入力されるｐ型のトランジスタ１３３ｘ５と、電流経路の一端にトランジスタ１３３ｘ５の電流経路の他端が接続され、ゲートがノードＮ１２に接続され、他端がノードＮ１３に接続されるｐ型のトランジスタ１３３ｘ６とを備えている。更にバッファ回路ＸＤは、電流経路の一端がノードＮ１３に接続され、ゲートにＸＮＬが入力され、他端がデータ線ＩＯ＿ＢＵＳ＿Ｘに接続されるｐ型のトランジスタ１３３ｘ７と、電流経路の一端がノードＮ１３に接続され、ゲートにＸＴＬが入力され、他端がデータ線ＩＯ＿ＢＵＳ＿Ｘに接続されるｎ型のトランジスタ１３３ｘ８と、電流経路の一端がノードＮ１３に接続され、ゲートがノードＮ１２に接続されるｎ型のトランジスタ１３３ｘ９と、電流経路の一端がトランジスタ１３３ｘ９の電流経路の他端に接続され、ゲートにＸＮＬが入力され、他端がグランドに接続されているｎ型のトランジスタ１３３ｘ１０と、を備えている。
【００７６】
次に、図８を用いて、本実施形態に係るＡＥＳ暗号回路１２２で使用するページバッファ１３３内の記憶領域のアドレス空間について概略的に説明する。図８（ａ）は、本実施形態に係るページバッファ１３３の基本的な構成を示した模式図であり、図８（ｂ）は、本実施形態に係るページバッファ１３３への、機能別に領域を分けた場合に関する模式図であり、図８（ｃ）は、本実施形態に係るページバッファ１３３への、より詳細な割り当てについて示した模式図である。
【００７７】
メモリセルアレイ１３０の鍵記憶ブロックＢＬＫｌ内には、鍵データとして、多くのデータセット（スロット）が記憶されており、これらの鍵スロットのうちどのスロットを演算に使用するかはホスト機器２００が選択する。このスロットは、データ全体の容量が数ページにわたることもある。また、製品によりページ長が異なることもある。しかし、ＡＥＳ演算装置が実際にＲＡＭとして使用するアドレス空間は４９バイト程度である。メモリセルアレイ１３０のページ容量１６キロバイトと比較して非常に小さい。このようにＡＥＳ演算装置が演算の際にＲＡＭとして用いる領域は少ない。
【００７８】
図８（ａ）に示すように、ＡＥＳ暗号回路１２２のＲＡＭとして、ページバッファ１３３を使用する前は、ＡＥＳ暗号回路１２２の演算用ＲＡＭとしての領域（ワーキングエリア）と、鍵等の情報を記憶しておく鍵記憶領域と、に領域が分けられていない。しかし、後述する手段によって、図８（ｂ）に示すように、ＡＥＳ暗号回路１２２のＲＡＭとして、ページバッファ１３３を使用する際に、ページバッファ１３３はＡＥＳ暗号回路１２２が演算を行う演算用ＲＡＭとしての領域（ワーキング領域）１３３ａと、鍵等の情報を記憶しておく領域（鍵記憶領域）１３３ｂと、に領域が分けて用いられる。
【００７９】
より具体的には、図８（ｃ）に示すように、鍵記憶領域１３３ｔには、秘密情報（Ｍｅｄｉａ  Ｋｅｙ）ＭＫＥＹと、複数のスロット鍵（Ｓｌｏｔ  ｋｅｙ）ＳＬＯＴ０〜ＳＬＯＴ＿Ｅが保持されている。ワーキング領域１３３ｓには、ＮＡＮＤチップ１００の外部からメッセージデータＭＥＳＳＡＧＥがロードされる。また後述する手段によって鍵記憶領域１３３ｔのＳＬＯＴ０〜ＳＬＯＴ＿Ｅのうち一組のスロット鍵がワーキング領域１３３ｓに転送され、ＡＥＳ暗号回路１２２が演算で用いるスロット鍵（ＳＫＥＹ）となる。ＭＫＥＹについても後述の手段により、ワーキング領域１３３ｓに転送され、ＡＥＳ暗号回路１２２が演算で用いるＭｅｄｉａＫｅｙ（ＭＫＥＹ）となる。また、後述するＡＥＳ暗号化演算が終了した後、認証情報が図８（ｄ）に示すようにワーキング領域１３３ｓに書き込まれる。
【００８０】
次に、図９を用いて、本実施形態に係るＡＥＳ暗号回路１２２の基本的な構成について説明する。図９は、本実施形態に係るＡＥＳ暗号回路１２２の基本的な構成を模式的に示したブロック図である。
【００８１】
図９に示すように、ＡＥＳ暗号回路１２２は、暗号化処理部１２２ａと、暗号化のための演算を行うＡＬＵ（Arithmetic and Logic Unit）１２２ｂと、演算結果を一時的に記憶するためのアキュムレータ１２２ｃと、を備えている。
【００８２】
ＡＥＳ暗号回路１２２は、ＡＥＳ制御回路１２１からの制御信号に従ってＡＥＳ暗号の暗号化処理の演算を制御し、演算の状態を表すステータス信号を出力する。
【００８３】
ＡＬＵ１２２ｂは、暗号化処理部１２２ａにより選択された機能を表す情報（図中の「機能選択」）に従って演算を実行する。ＡＬＵ１２２ｂは、必要に応じて、暗号化処理部１２２ａにより指定されたアドレスのデータに対して演算を実行する。
【００８４】
アキュムレータ１２２ｃは、ＡＬＵ１２２ｂによる演算結果を記憶するためのレジスタである。アキュムレータ１２２ｃに記憶されたデータは、暗号化処理部１２２ａからの指示に応じてページバッファ１３３に書き込まれる。
【００８５】
なお、ＡＥＳ暗号回路１２２は、ページバッファ１３３のうち、一部の記憶領域を使用してＡＥＳ暗号の演算を実行する。
【００８６】
暗号化処理部１２２ａは、ＡＥＳ制御回路１２１を介してホスト機器２００から暗号化処理の命令を受け、ページバッファ１３３のアドレスを指定し、ＡＬＵ１２２ｂにこのデータについて演算をさせるようになっている。ＡＥＳ暗号回路１２２は、ホスト機器２００から与えられた入力データを元に、ＡＥＳ暗号化方式で定められた手順によって演算を行い、演算結果のデータを返す。この演算を式であらわすと、下記の様な式になる。
【００８７】
Ｒ＝ＡＥＳ（ｍ，ｋ）
Ｒ：Ｒｅｓｕｌｔ；演算結果，ｍ：Ｍｅｓｓａｇｅ；メッセージ，ｋ：ｋｅｙ；鍵
上記のＡＥＳ暗号化演算装置は、下記の５種類の命令を備えており、演算はバイト単位で行われる。このうち、３つはＡＥＳ内部の演算処理の命令（ｓｂｏｘ、ｘｔｉｍｅ、および、ｘｏｒ）であり、残りの２つは２種類のメモリアクセスのための命令（ｌｄ（ロード）およびｓｔ（ストア））である。
【００８８】
［演算処理の命令］
１．ｓｂｏｘ
２．ｘｔｉｍｅ
３．ｘｏｒ
［メモリアクセスのための命令］
４．ｌｄ（ロード）
５．ｓｔ（ストア）。
【００８９】
また、ＡＥＳ暗号回路１２２の使用方法は以下のようになる。
【００９０】
・ページバッファ１３３に入力データ（メッセージｍ（１６バイト）および鍵ｋ（１６バイト）を書き込む
・ＡＥＳ暗号回路１２２を実行開始する
・ＡＥＳ暗号回路１２２の実行終了を待つ
・演算結果はページバッファ１３３に書き込まれているので、演算結果をページバッファ１３３から読み出す。
【００９１】
次に、図１０を用いて、本実施形態に係るＡＥＳ暗号演算装置の基本的な構成及び信号の流れについて説明する。図１０は、本実施形態に係るＡＥＳ暗号演算装置の基本的な構成及び信号の流れについて模式的に示したブロック図である。
【００９２】
図１０に示すように、ＮＡＮＤチップ１００内部のコマンドレジスタ１１１は、入出力端子１０２および入出力制御回路１１０を介してＡＥＳ暗号化シーケンスをスタートさせるコマンドをホスト機器２００から受け取る。そして、コマンドレジスタ１１１は、該コマンドを保持し、暗号化実行コマンドｃｍｄとしてＡＥＳ制御回路１２１へ送る。この暗号化実行コマンドｃｍｄを受け取ったＡＥＳ制御回路１２１は、信号ａｅｓ＿ｓｔａｒｔをＡＥＳ暗号回路１２２に送る、そして、ＡＥＳ暗号回路１２２は、信号ａｅｓ＿ｓｔａｒｔを受信すると、ＡＥＳ暗号化シーケンスを開始する。
【００９３】
また、ＡＥＳ暗号回路１２２は、信号ａｅｓ＿ｓｔａｒｔを受信すると、演算の状態を示す信号ａｅｓ＿Ｒ／ＢをＡＥＳ制御回路１２１に返す。例えば、ＡＥＳ暗号回路１２２はＡＥＳ暗号化シーケンスの演算中であれば、ＡＥＳ制御回路１２１にビジー信号としてａｅｓ＿Ｒ／Ｂを送信する。
【００９４】
ＡＥＳ暗号回路１２２は、ＡＥＳ暗号化シーケンス中にデータのロード、ストアが必要になった場合には、それぞれ信号ａｅｓ＿ｒｅａｄ／ａｅｓ＿ｗｒｉｔｅをＡＥＳ制御回路１２１に送信する。ＡＥＳ暗号回路１２２はＲＡＭ（ページバッファ１３３）のアドレスを信号ａｅｓ＿ａｄｄｒｅｓｓによって指定し、信号ａｅｓ＿ａｄｄｒｅｓｓをアドレス制御回路（カラムアドレス制御回路）１２３に送信する。アドレス制御回路１２３は、該アドレス信号を物理アドレスに変換し、信号ｃｏｌｕｍｎ＿ａｄｄｒｅｓｓをカラムデコーダ１３４に送信することで、ページバッファ１３３のうちの該当するアドレスに属するビットを指定する。
【００９５】
また、ＡＥＳ暗号回路１２２はシーケンスの状態に応じて、アドレス制御回路１２３を制御し、アドレスを変更することが可能である。
【００９６】
アドレス制御回路１２３は、ＡＥＳ暗号回路１２２から供給されるアドレスをページバッファ１３３のワーキング領域１３３ｓのアドレスに変換することができる。
【００９７】
ＡＥＳ暗号回路１２２は、８ビットのデータ線ＩＯ＿ＢＵＳ＿Ｓ（図２のロジック制御回路１２０と、バス制御回路１１４とを結ぶデータ線）、バス制御回路１１４、及びデータ線ＩＯ＿ＢＵＳ＿Ｘを介してページバッファ１３３とデータの送受信を行う。バス制御回路１１４は、入力端がデータ線ＩＯ＿ＢＵＳ＿Ｓに接続されるインバータ１１４ａと、入力端にインバータ１１４ａの出力端が接続され、出力端がデータ線ＩＯ＿ＢＵＳ＿Ｓに接続されるインバータ１１４ｂと、入力端がデータ線ＩＯ＿ＢＵＳ＿Ｘに接続されるインバータ１１４ｃと、入力端にインバータ１１４ｃの出力端、インバータ１１４ａの入力端、及びインバータ１１４ｂの出力端が接続され、入力端がデータ線ＩＯ＿ＢＵＳ＿Ｘに接続される１１４ｄとを有する。
【００９８】
また、データ線ＩＯ＿ＢＵＳ＿Ｓには、データチェック回路１１３及び一時レジスタ１１２が備えられている。データチェック回路１１３は、鍵などのデータをページバッファ１３３のワーキング領域１３３ｓに移すときに、データにエラーが無いか否かの検査を行う。一時レジスタ１１２は、ＡＥＳの演算を行う前の段階で、データチェック回路１１３において、エラーが無いと判定されたデータをワーキング領域に移すために、一時的に保持する。また、一時レジスタ１１２を介してページバッファ１３３内部でのデータのアドレス変換を行う事もできる。
【００９９】
ＡＥＳ制御回路１２１は、ページバッファ１３３からデータをＡＥＳ暗号回路１２２に転送するための制御を行うバッファデータ読み出しシーケンス１２４、及びＡＥＳ暗号回路１２２からのデータをページバッファに転送するためのバッファデータ書込みシーケンス１２５と接続されている。
【０１００】
ＡＥＳ制御回路１２１は、ＡＥＳ暗号回路１２２からメモリロード（リード）の命令を受けると、信号ｐａｇｅ＿ｌｏａｄを、バッファデータ読み出しシーケンス１２４に送信する。バッファデータ読み出しシーケンス１２４は、信号ｐａｇｅ＿ｌｏａｄを受信すると、サブシーケンスを開始する。バッファデータ読み出しシーケンス１２４は動作が終了すると、それぞれ信号ｌｏａｄ＿ｅｎｄをＡＥＳ制御回路１２１に送信し、バッファデータ読み出しシーケンス１２４のサブシーケンスを終了する。
【０１０１】
ＡＥＳ制御回路１２１は、ＡＥＳ暗号回路１２２から、メモリストア（ライト）の命令を受けると、信号ｐａｇｅ＿ｒｅａｄを、バッファデータ書込みシーケンス１２５に送信する。バッファデータ書込みシーケンス１２５は、信号ｐａｇｅ＿ｒｅａｄを受信すると、サブシーケンスを開始する。バッファデータ書込みシーケンス１２５は動作が終了すると、信号ｓｔｏｒｅ＿ｅｎｄをＡＥＳ制御回路１２１に送信し、バッファデータ書込みシーケンス１２５のサブシーケンスを終了する。
【０１０２】
次に、本実施形態に係るＡＥＳ暗号化シーケンスについて説明する。図１１は、ＡＥＳ暗号化シーケンス１０００を示すブロック図である。図１２は、上記ＡＥＳ暗号化シーケンスを実行するために、ホスト機器２００がＮＡＮＤチップ１００（ＡＥＳ制御回路１２１）に入力するコマンドのセットを示している。
【０１０３】
以下にＡＥＳ暗号化シーケンス１０００について説明する。
【０１０４】
ＡＥＳの実行シーケンスとしては、図１１に示すようなステップで操作が行われる。
【０１０５】
［ステップＳ１００１］
ホスト機器２００は、ＮＡＮＤチップ１００（入出力端子１０２）にメッセージデータを入力する。このメッセージデータは例えば、先頭にＡＥＳシーケンス用の特別コマンドＸＸｈを含んでいる。ホスト機器２００から入力するメッセージデータはページバッファ１３３のワーキング領域１３３ｓのうち、ＡＥＳ制御回路１２１がｔｒａｎｓ＿ａｄｄｒｅｓｓをアドレス制御回路１２３に供給することで、予め決まったアドレスに格納される。
【０１０６】
［ステップＳ１００２］
ホスト機器２００は、スロット鍵を指定して、ＮＡＮＤチップ１００（入出力端子１０２）に入力する。具体的には、ホスト機器２００は、多くのスロットのうちのいずれかを選択し、スロットの番号を決定する。そして、ホスト機器２００は、入出力端子１０２に通常の書き込みアドレス入力コマンド８０ｈを入力し、入出力端子１０２に決定したスロット鍵番号（またはスロット鍵のあるアドレス）を入力する。ＮＡＮＤチップ１００（アドレス制御回路１２３）はスロットの番号をカラムアドレスに変換する。
【０１０７】
通常、アドレスは５サイクルのアドレス入力が行われ、はじめの２サイクルはカラムアドレスであり、残りの３サイクルはロウアドレスを指す。ステップＳ１００２では、ホスト機器２００が入出力端子１０２にＸＸｈコマンドを入力した段階で、鍵データが書かれているブロックとページが自動的に指定されるものとし、スロット鍵を指定するアドレス以外はダミーアドレスが、入出力端子１０２に入力されるものとする。
【０１０８】
［ステップＳ１００３］
ホスト機器２００は、ＮＡＮＤチップ１００（入出力端子１０２）にＡＥＳ暗号化実行コマンドを入力する。ホスト機器２００は、アドレス入力の後にＡＥＳ暗号演算に必要なメッセージデータＤｉｎを入力する。１０ｈコマンドはメモリセルアレイ１３０への書き込み実行コマンドであるが、このコマンドシーケンスの先頭にＸＸｈコマンドが入力されていた場合には、ＡＥＳ制御回路１２１は、１０ｈコマンドをＡＥＳ暗号化実行コマンドと解釈し、ＡＥＳ演算シーケンスを開始する。
【０１０９】
［ステップＳ１００４］
ホスト機器２００がＡＥＳ実行コマンド１０ｈをＡＥＳ制御回路１２１に入力すると、ＡＥＳ制御回路１２１は、鍵情報（スロット鍵のデータ）が記憶されているメモリセルアレイ１３０のページのデータをページバッファ１３３に読み出してくる。すなわち、ＡＥＳ制御回路１２１はメモリ読み出しシーケンス１２６に、該当のメモリセルアレイ１３０内のページから、センスアンプ１３１を用いてデータをセンスし、ページバッファ１３３に読み出しデータを格納するように命令を出す。
【０１１０】
尚、メモリセルアレイ１３０において、スロット鍵は相補データのデータ形式で何セットかを記憶されている。そのため、データｔｒａｎｓ＿ｉｎは、相補データのデータ形式となっている。後述する検査のために、スロット鍵は相補形式で多重記録されているので、検査の結果データにエラーがあった場合には正しいデータと取り替えることが可能である。また、メディア鍵も同様に相補データのデータ形式にしておくことで、後述するデータのチェックを行うことができる。
【０１１１】
［ステップＳ１００５］
次に、ステップＳ１００２で指定されたスロット鍵のデータを一時レジスタ１１２のワーキング領域（不図示）にコピーする。データチェック回路１１３は、ページバッファ１３３から一時レジスタ１１２へ、データｔｒａｎｓ＿ｉｎの転送を行う途中で、データｔｒａｎｓ＿ｉｎが正しいデータか否かのチェックを行う。具体的には、データチェック回路１１３で、鍵データの相補データチェックを行い、データが相補形式に保たれていれば、そのまま一時レジスタ１１２へデータｔｒａｎｓ＿ｉｎを転送する。
【０１１２】
［ステップＳ１００６］
もし、ステップＳ１００５の相補チェックに失敗した場合には、データチェック回路１１３は、一時レジスタ１１２を介してバッファデータ読み出しシーケンス１２４にｃｈｅｃｋ＿ｆｌａｇを送信する。その後、バッファデータ読み出しシーケンス１２４はｆｌａｇ＿ｆａｉｌをアドレス制御回路１２３に送信する。そして、アドレス制御回路１２３は、同じスロット鍵のデータが書かれている別のアドレスを指定し、再度データチェック回路１１３へデータｔｒａｎｓ＿ｉｎの転送を試みる。このようにして、相補チェックが成功するまで、データｔｒａｎｓ＿ｉｎのチェックが行われる。そのため、エラービットが取り除かれたデータが一時レジスタ１１２に格納される。この例では、相補チェックが失敗した場合、同じスロット鍵のデータが書かれている別のアドレスを指定しているが、必ずしもこれに限らない。
【０１１３】
［ステップＳ１００７］
ステップＳ１００５の相補チェックに成功した場合には、ステップＳ１００２で指定されたスロット鍵のデータを一時レジスタ１１２にコピーする。一時レジスタ１１２は、少なくともスロット鍵のデータ長と等しいサイズの記憶領域を有している。
【０１１４】
［ステップＳ１００８］
一時レジスタ１１２に格納されたデータをページバッファ１３３のワーキング領域１３３ｓに移すため、ＡＥＳ制御回路１２１は、バッファデータ書込みシーケンス１２５のサブシーケンスを起動する。アドレス制御回路１２３は、アドレス制御回路１２３にワーキング領域１３３ｓ内部の転送先アドレスｔｒａｎｓ＿ａｄｄｒｅｓｓを指定する。一時レジスタ１１２のデータｔｒａｎｓ＿ｏｕｔがデータ線ＩＯ＿ＢＵＳ＿Ｓ、バス制御回路１１４、及びデータ線ＩＯ＿ＢＵＳ＿Ｘを介してページバッファ１３３に転送される。データの転送が完了したのち、アドレス制御回路１２３は、アドレスをインクリメントし、このインクリメントと同期して一時レジスタ１１２のアドレスをインクリメントし、都度一時レジスタ１１２から、ページバッファ１３３へのデータの転送を１バイトずつ行う。鍵データの長さだけ転送動作を繰り返すことで、鍵データのワーキング領域１３３ｓへのコピーが完了する。
【０１１５】
続いて、上述したステップＳ１００５〜ステップＳ１００８でスロット鍵について説明した方法と同様の方法で、メディア鍵を、鍵記憶領域１３３ｔからワーキング領域１３３ｓへとコピーする。
【０１１６】
［ステップＳ１００９］
次に、メディア鍵のデータを一時レジスタ１１２のワーキング領域（不図示）にコピーする。データチェック回路１１３は、ページバッファ１３３から一時レジスタ１１２へ、データｔｒａｎｓ＿ｉｎの転送を行う途中で、データｔｒａｎｓ＿ｉｎが正しいデータか否かのチェックを行う。
【０１１７】
［ステップＳ１０１０］
もし、ステップＳ１００９の相補チェックに失敗した場合には、データチェック回路１１３は、一時レジスタ１１２を介してバッファデータ読み出しシーケンス１２４にｃｈｅｃｋ＿ｆｌａｇを送信する。その後、バッファデータ読み出しシーケンス１２４はｆｌａｇ＿ｆａｉｌをアドレス制御回路１２３に送信する。そして、アドレス制御回路１２３は、同じメディア鍵のデータが書かれている別のアドレスを指定し、再度データチェック回路１１３へデータｔｒａｎｓ＿ｉｎの転送を試みる。このようにして、相補チェックが成功するまで、データｔｒａｎｓ＿ｉｎのチェックが行われる。そのため、エラービットが取り除かれたデータが一時レジスタ１１２に格納される。この例では、相補チェックが失敗した場合、同じスロット鍵のデータが書かれている別のアドレスを指定しているが、必ずしもこれに限らない。
【０１１８】
［ステップＳ１００７］
ステップＳ１００５の相補チェックに成功した場合には、該メディア鍵のデータを一時レジスタ１１２にコピーする。一時レジスタ１１２は、少なくともメディア鍵のデータ長と等しいサイズの記憶領域を有している。
【０１１９】
［ステップＳ１００８］
一時レジスタ１１２に格納されたデータをページバッファ１３３のワーキング領域１３３ｓに移すため、ＡＥＳ制御回路１２１は、バッファデータ書込みシーケンス１２５のサブシーケンスを起動する。アドレス制御回路１２３は、アドレス制御回路１２３にワーキング領域１３３ｓ内部の転送先アドレスｔｒａｎｓ＿ａｄｄｒｅｓｓを指定する。この際、ＡＥＳ暗号回路１２２は、メディア鍵のコピーの先として、アドレス制御回路１２３に、スロット鍵がコピーされたワーキング領域１３３ｓとは異なるアドレスを指定する。一時レジスタ１１２のデータｔｒａｎｓ＿ｏｕｔがデータ線ＩＯ＿ＢＵＳ＿Ｓ、バス制御回路１１４、及びデータ線ＩＯ＿ＢＵＳ＿Ｘを介してページバッファ１３３に転送される。データの転送が完了したのち、アドレス制御回路１２３は、アドレスをインクリメントし、このインクリメントと同期して一時レジスタ１１２のアドレスをインクリメントし、都度一時レジスタ１１２から、ページバッファ１３３へのデータの転送を１バイトずつ行う。鍵データの長さだけ転送動作を繰り返すことで、鍵データのワーキング領域１３３ｓへのコピーが完了する。
【０１２０】
［ステップＳ１０１０］
ＡＥＳのワーキング領域にチップ外部から入力されたメッセージと、スロット鍵、メディア鍵がコピーされた後、ＮＡＮＤチップ１００（ＡＥＳ暗号回路１２２）は、ＡＥＳ暗号化を実行し、実行中はビジー信号ａｅｓ＿Ｒ／Ｂ（ｂｕｓｙ）を、ＡＥＳ制御回路１２１及び図示せぬＲＢ（レディ・ビジー）パッドを介してホスト機器２００に出力する。ＲＢパッドは、ＡＥＳ演算シーケンスが終了するまでビジーをホスト機器２００に出力する。
【０１２１】
図１３〜１５を用いて、ステップＳ１０１０についてより具体的に説明する。  
図１３は、暗号化のメインシーケンスを実行する際のタイミングチャートであり、図１４は、ＡＥＳ暗号回路１２２がデータのロードを実行する際のタイミングチャートであり、図１５は、ＡＥＳ暗号回路１２２がデータのストアを実行する際のタイミングチャートである。尚、各信号はＮＡＮＤチップ１００内部で発生された図示せぬクロック信号ｃｌｏｃｋと同期して動作している。
【０１２２】
メッセージと鍵データが、ページバッファ１３３のワーキング領域１３３ｓに揃うと、図１３に示すように、ＡＥＳ制御回路１２１は、信号ａｅｓ＿ｓｔａｒｔをＡＥＳ制御回路１２１へ送信する。ＡＥＳ暗号回路１２２は、この信号を受信することで暗号化のメインシーケンスを実行する。そして、ＡＥＳ暗号回路１２２は、ＡＥＳ演算を実行している間ビジー信号ａｅｓ＿Ｒ／Ｂ（ｂｕｓｙ）を出力する。
【０１２３】
ＡＥＳ暗号回路１２２のＡＥＳ演算を実行している間に、ＡＥＳ暗号回路１２２がメモリのロードまたはストアを行う場合、ＡＥＳ暗号回路１２２から直接アドレス制御回路１２３にワーキング領域１３３ｓのアドレスａｅｓ＿ａｄｄｒｅｓｓが送信される。このメモリのロード及びストアとは、ＡＥＳ暗号回路１２２が演算を行っているときに、ページバッファ１３３の中のワーキング領域１３３ｓとＡＥＳ暗号回路１２２との間でデータを授受する動作のことである。より具体的には、ロードは、ワーキング領域１３３ｓの中のａｅｓ＿ａｄｄｒｅｓｓで指定されたバイトをＡＥＳ暗号回路１２２に読み出す動作。ストアは、ＡＥＳ暗号回路１２２で計算したデータをワーキング領域１３３ｓのａｅｓ＿ａｄｄｒｅｓｓで指定されたアドレスに書き込む動作である。つまり、ＡＥＳ暗号回路１２２がページバッファ１３３にａｅｓ＿ａｄｄｒｅｓｓでランダムにアクセスして、メモリの読み書きを行う動作のことである。
【０１２４】
図１４に示すように、ＡＥＳ暗号回路１２２がロードを行う場合、ＡＥＳ暗号回路１２２は、信号ａｅｓ＿ｒｅａｄをＡＥＳ制御回路１２１に送信し、アドレス制御回路１２３にワーキング領域１３３ｓのアドレスａｅｓ＿ａｄｄｒｅｓｓを送信する。そして、ＡＥＳ制御回路１２１は、信号ｐａｇｅ＿ｌｏａｄをバッファデータ読み出しシーケンス１２４に送信する。そして、バッファデータ読み出しシーケンス１２４が起動し、ワーキング領域１３３ｓのａｅｓ＿ａｄｄｒｅｓｓで指定されたアドレスにあるページバッファ１３３をＩＯ＿ＢＵＳ＿Ｘ、ＩＯ＿ＢＵＳ＿Ｓ、ａｅｓ＿ｄｉｎを介してＡＥＳ暗号回路１２２に接続する。その後、バッファデータ読み出しシーケンス１２４からＡＥＳ制御回路１２１にｌｏａｄ＿ｅｎｄ信号が送られ、ＡＥＳ制御回路１２１はデータロードが終了したことを示す信号ａｅｓ＿ｒｅａｄ＿ｅｎｄ信号をＡＥＳ暗号回路１２２へと送信し、ＡＥＳ暗号回路１２２は、ページバッファから所望のデータをａｅｓ＿ｄｉｎから得ることでロード動作が完了する。
【０１２５】
図１５に示すように、ＡＥＳ暗号回路１２２がストアを行う場合、ＡＥＳ暗号回路１２２は、信号ａｅｓ＿ｗｒｉｔｅをＡＥＳ制御回路１２１に送信し、アドレス制御回路１２３にワーキング領域１３３ｓのアドレスａｅｓ＿ａｄｄｒｅｓｓを送信する。そしてＡＥＳ制御回路１２１は、信号ｐａｇｅ＿ｓｔｏｒｅをバッファデータ書込みシーケンス１２５に送信する。そして、バッファデータ書込みシーケンス１２５が起動し、ａｅｓ＿ｄｏｕｔから、ＩＯ＿ＢＵＳ＿Ｓ、ＩＯ＿ＢＵＳ＿Ｘを経由してページバッファ１３３へデータ線が接続される。ＡＥＳ暗号回路１２２からａｅｓ＿ｄｏｕｔに、ストアすべきデータが出力されているので、このデータが上記のデータ経路からページバッファ１３３に送信され、所望のアドレスａｅｓ＿ａｄｄｒｅｓｓに該当するページバッファ１３３にデータが書き込まれる。その後、バッファデータ書き込みシーケンス１２５からＡＥＳ制御回路１２１にｓｔｏｒｅ＿ｅｎｄ信号が送られ、ＡＥＳ制御回路１２１はデータストアが終了したことを示す信号ａｅｓ＿ｗｒｉｔｅ＿ｅｎｄ信号をＡＥＳ暗号回路１２２へと送信し、ストア動作が完了する。
【０１２６】
尚、この場合ワーキング領域１３３ｓ内のデータにはエラーが無いので、データチェック回路１１３によって相補データチェックを行う必要は無い。
【０１２７】
［ステップＳ１０１０］
ＮＡＮＤチップ１００（ＡＥＳ暗号回路１２２）は、一連のＡＥＳ暗号化シーケンスが終了した後、ＡＥＳ暗号回路１２２はレディ信号ａｅｓ＿Ｒ／Ｂ（ｒｅａｄｙ）をＡＥＳ制御回路１２１に送信する。そして、ＡＥＳ制御回路１２１は、レディ信号ａｅｓ＿Ｒ／Ｂ（ｒｅａｄｙ）を、ＡＥＳ制御回路１２１及び図示せぬＲＢ（レディ・ビジー）パッドを介してホスト機器２００に出力する。そして、ＮＡＮＤチップ１００はレディ状態になる。ページバッファ１３３のワーキング領域１３３ｓにはＡＥＳ暗号演算の結果としてのデータが残っている。
【０１２８】
［ステップＳ１０１１］
ホスト機器２００は、ページバッファ１３３のワーキング領域１３３ｓから該演算結果を読み出す。ホスト機器２００は、ＡＥＳ暗号演算シーケンスが終了した後、ページバッファ１３３ワーキング領域１３３ｓに残った認証情報を読み出す。この際、ホスト機器２００は、この認証情報を読み出すコマンドシーケンスとして、通常のレジスタ（ページバッファ）読み出しコマンドシーケンスと同様のコマンドシーケンスを用いる。
【０１２９】
上述した第１の実施形態によれば、第１の実施形態に係る不揮発性半導体記憶装置（ＮＡＮＤチップ１００）は、予め定められた暗号方式の演算を実行する暗号回路（ＡＥＳ暗号回路）１２２と、予め前記演算に用いる相補型のデータを格納しているメモリセルアレイ１３０と、前記メモリセルアレイ１３０から読み出された前記データを格納する第１の領域（鍵記憶領域）１３３ｔ、及び前記演算を実行する際に用いられる第２の領域（ワーキング領域）１３３ｓを備えるページバッファ１３３と、を備えている。また、不揮発性半導体記憶装置は、前記第１の領域１３３ｔからの前記データを格納し、格納した前記データを前記第２の領域１３３ｓに供給するレジスタ（一時レジスタ）１１２と、前記データを前記レジスタ１１２に格納する際に、前記データのエラーの有無を判定し、前記データにエラーが無いと判定した場合は、前記レジスタ１１２に前記データを格納する前記検査回路１１３と、を備えている。更に、不揮発性半導体記憶装置は、前記データを前記メモリセルアレイ１３０から前記第１の領域１３３ｔに読み出す制御、及び前記データを前記第１の領域１３３ｔから前記第２の領域１３３ｓに読み出す制御を行う制御回路（ＡＥＳ制御回路）１２１と、前記制御回路１２１から供給される信号に基づいて、ページバッファ１３３またはメモリセルアレイ１３０のアドレスを指定するアドレス制御回路１２３と、を備えている。前記制御回路１２１は、前記アドレス制御回路１２３を制御することで、前記データを前記第１の領域１３３ｔから前記第２の領域１３３ｓに供給し、前記検査回路１１３は前記データにエラーがあると判定した場合（ステップＳ１００５）に、その旨を前記アドレス制御回路１２３に通知し、前記アドレス制御回路１２３は、前記通知を受信すると、前記ページバッファ１３３の前記データと同一内容のデータが格納されている別のアドレスを指定し、前記検査回路１１３は、前記別のアドレスのデータのエラーの有無の判定を行う（ステップＳ１００６）。
【０１３０】
このように、第１の実施形態に係るＮＡＮＤチップ１００は、ページバッファ１３３を、ＡＥＳ演算用のＲＡＭとして転用することで、面積のオーバーヘッドを抑制して、ホスト機器２００に依存せず、ＮＡＮＤチップ１００内の構成のみでＡＥＳの機能を実現することが可能である。
【０１３１】
ところで、ＮＡＮＤチップ１００のページバッファ１３３は、基本的には、大規模データの一括アクセスを前提としたものであり、通常の演算装置が用いるＲＡＭとは異なる。より具体的に説明すると、ページバッファ１３３をＡＥＳ暗号化演算装置のための記憶装置として使用する場合には、ＡＥＳ暗号回路１２２に、メモリセルアレイ１３０のページ長に相当するアドレス空間を認識させることが考えられる。この場合、ＡＥＳ暗号回路１２２のアドレス線が増加し、周辺回路の回路規模が増大してしまう。また、製品によりページ長、スロット数等が異なることが考えられ、その都度ＡＥＳ演算回路を変更しなければならないかもしれない。
【０１３２】
また、ＮＡＮＤチップ１００の微細化により、メモリセルアレイ１３０の信頼性が劣化してきており、ビット不良が増える傾向にある。ＡＥＳ暗号化演算に用いる鍵情報等のデータを記憶する鍵記憶装置としてメモリセルアレイ１３０を利用するためには、鍵情報等のデータのエラーを取り除かなくてはならないという問題もある。
【０１３３】
このため、ページバッファ１３３をＡＥＳ暗号化演算装置のための記憶装置として使用する場合には工夫が必要であり、更に、ＡＥＳ暗号回路１２２が演算を始める前に、何らかの方法で鍵情報等のデータを検査してビット不良が無いことを保証する必要がある。
【０１３４】
そこで、本実施形態のように、ページバッファ１３３を、ＡＥＳ暗号化演算処理に用いるＲＡＭとして機能するワーキング領域１３３ｓと、鍵情報等のデータを記憶する鍵記憶領域１３３ｔと、に領域を分けている。そして、一時レジスタ１１２を用いて、鍵記憶領域１３３ｔから、ワーキング領域１３３ｓへとＡＥＳ暗号化演算で用いるデータの移動を行っている。このため、アドレス線の増加等を抑制し、ページバッファ１３３をＡＥＳ暗号化演算処理用のＲＡＭとして転用することが可能となる。
【０１３５】
また、本実施形態のように、データチェック回路１１３を用いて、ＡＥＳ暗号化演算処理を行う前に、鍵情報等のデータのエラーチェックを行うことで、エラーの無い鍵情報等のデータを保証することができる。
【０１３６】
以上のように、工夫を施せば、ＮＡＮＤチップの外部にＡＥＳ演算用の構成を設けることなく、ＡＥＳ暗号化演算を行うことが可能となる。つまり、暗号化演算装置を搭載した不揮発性半導体記憶装置（ＮＡＮＤチップ）を実現することができる。
【０１３７】
また、上記で、ページバッファ１３３をＡＥＳ暗号演算装置のＲＡＭとして使用する方法について説明してきたが、ＡＥＳ暗号装置に代えてＮＡＮＤ内部にＥＣＣ、セキュリティ等に関連した演算器をＮＡＮＤチップ１００に混載した場合にもページバッファ１３３を同様の方法で、これらの演算器のＲＡＭとして使用することが可能である。
【０１３８】
また、前記ＡＥＳ暗号化シーケンスで用いたデータチェック回路１１３、バッファデータ読み出しシーケンス１２４、バッファデータ書き込みシーケンス１２５等の回路は、ＮＡＮＤに予め備わっているパワーオンリード動作を制御する回路を用いることが可能である場合には、これを用いてもよい。パワーオンリード動作とは、ＮＡＮＤチップ１００に電源を投入した際にメモリセルアレイ１３０のロムフューズ領域に記憶されているデータを読み出す動作のことを指す。前記パワーオンリードを制御する回路の一部を転用できることが可能である場合には回路面積の増加を抑える効果がある。
【０１３９】
（第２の実施形態）
次に、第２の実施形態について説明する。第２の実施形態に係るＮＡＮＤチップ１００は、ＡＥＳ暗号回路１２２の演算部の一部を、演算部１３２を転用することによって、更にＡＥＳ暗号回路１２２の回路規模を減らすことができる。
【０１４０】
図５に示すように、演算器ＹＢは、センス部ＳＡとバッファ回路との間に設けられている。この演算器ＹＢは、センス部ＳＡ毎に備えられている。この演算器ＹＢは任意のバッファ回路間でブール代数で示されるような演算を行い、その結果をバッファ回路に格納することが可能である。この演算器ＹＢは、ＮＡＮＤの書き込み、読み出し等の通常の動作においても用いられる。
【０１４１】
演算器ＹＢに対して、例えば所定の制御回路の命令により、全てのカラムに対して一括して演算をさせることが出来る。
【０１４２】
上述した第２の実施形態によれば、第２の実施形態に係る不揮発性半導体記憶装置（ＮＡＮＤチップ１００）は、前記メモリセルアレイ１３０及び前記ページバッファ１３３の間に設けられた演算部１３２を更に備え、前記演算部１３２は、暗号回路１２２が行う演算の一部を行う。
【０１４３】
ＡＥＳ暗号回路１２２が行う演算について演算器ＹＢを転用する場合、ＡＬＵ１２２ｂの回路規模を低減することができ、またはＡＬＵ１２２ｂを備えなくてもＡＥＳ暗号回路１２２の演算の機能を実施することが可能となる。その結果、ＮＡＮＤチップ１００の回路規模を更に削減することが可能である。また、演算器ＹＢは、並列に演算を行うことができるので、演算を更に高速化することが可能である。
【０１４４】
（第３の実施形態）
次に、第３の実施形態について説明する。  
第３の実施形態では、ＡＥＳ暗号回路で使用するＲＡＭ（Random Access Memory）にＡＥＳ演算回路を組み込むシステム内の記憶装置を転用することでＡＥＳ演算回路の小型化を図った場合のＡＥＳ暗号演算回路内部の回路に関する。このような観点に基づいてＡＥＳ演算回路の小型化を考えた例は今までに存在しない。
【０１４５】
以下の各実施形態では、演算装置をＡＥＳ暗号方式の暗号化装置（第３の実施形態）および復号装置（第４の実施形態）に適用した例を説明する。
【０１４６】
次に、本実施形態の暗号化装置の構成の概要について説明する。ＡＥＳ暗号は、基本的にバイト単位で演算処理が実行される。ＳｈｉｆｔＲｏｗｓは１６バイトのバイト単位の並び替えである。ＳｈｉｆｔＲｏｗｓにより実際に並び替えるためには、１６バイトの他にバッファとなる記憶装置が必要になる。また、ＭｉｘＣｏｌｕｍｎｓは４バイト単位の変換であるが、入力の４バイトが揃わないと変換が実行できない。
【０１４７】
本実施形態では、最低限必要な５種類の命令（擬似命令）のみでＡＥＳを実現する。５種類の命令には、３種類の演算処理の命令（ｓｂｏｘ、ｘｔｉｍｅ、および、ｘｏｒ）と、２種類のメモリアクセスの命令（ｌｄ（ロード）およびｓｔ（ストア））とが含まれる。また、演算結果を記憶するためのレジスタとして８ビットのアキュムレータを設ける。また、これらの命令によりＡＥＳ暗号をハードウェアで実行する順序機械である制御部を備える。命令や各構成部の詳細は後述する。
【０１４８】
図２０は、第３の実施形態にかかる暗号化装置４００を含む電子機器１０の構成の一例を示すブロック図である。図２０に示すように、電子機器１０は、暗号化装置４００と、入出力インタフェース（入出力ＩＦ）５００と、記憶装置６００と、鍵記憶装置７００と、を備えている。
【０１４９】
記憶装置６００は、電子機器１０で扱う各種データを記憶する。記憶装置６００は、データを記憶するアドレスを指定することにより当該データにアクセス可能とする記憶媒体である。記憶装置６００は、例えばＲＡＭにより構成できる。
【０１５０】
入出力ＩＦは、図示しない制御回路からの指示に従い、外部との間でデータを送受信するためのインタフェースである。鍵記憶装置７００は、暗号化処理で用いる鍵情報を記憶する。暗号化装置４００は、記憶装置６００と接続され、ＡＥＳ暗号方式の演算を実行する。記憶装置６００は、ページバッファ用のＲＡＭを用いてもよい。鍵記憶装置７００は、ＮＡＮＤフラッシュを用いても良い。記憶装置６００は、揮発性メモリまたは不揮発性メモリである。鍵記憶装置７００は、不揮発性メモリである。また、記憶装置６００と鍵記憶装置７００は物理的に同一のメモリを用いても良い。
【０１５１】
制御回路は、例えば、以下のようにしてＡＥＳ暗号を実行する。
【０１５２】
（１）入出力ＩＦを介して暗号化するデータ（メッセージ）を読み出し、記憶装置６００に書き込む。
【０１５３】
（２）鍵記憶装置７００から鍵情報を読み出し、記憶装置６００に書き込む。
【０１５４】
（３）暗号化装置４００に演算を指示する。これにより、演算の処理結果である暗号文が記憶装置６００に書き込まれる。
【０１５５】
図２１は、第３の実施形態にかかる暗号化装置４００の構成の一例を示すブロック図である。図２１に示すように、暗号化装置４００は、暗号化処理部４１０と、演算部としてのＡＬＵ（Arithmetic Logic Unit）４２０と、アキュムレータ４３０と、を備えている。
【０１５６】
暗号化処理部４１０は、図２０で説明した電子機器１０の制御回路からの制御信号に従ってＡＥＳ暗号の暗号化処理の演算を制御し、演算の状態を表すステータス信号を出力する。暗号化処理部４１０の詳細は後述する。
【０１５７】
ＡＬＵ４２０は、暗号化処理部４１０により選択された機能を表す情報（図２１の「機能選択」）に従って演算を実行する。ＡＬＵ４２０は、必要に応じて、暗号化処理部４１０により指定されたアドレスのデータに対して演算を実行する。
【０１５８】
アキュムレータ４３０は、ＡＬＵ４２０による演算結果を記憶するためのレジスタである。アキュムレータ４３０に記憶されたデータは、暗号化処理部４１０からの指示に応じて記憶装置６００に書き込まれる。
【０１５９】
なお、暗号化装置４００は、記憶装置６００のうち、一部の記憶領域を使用してＡＥＳ暗号の演算を実行する。記憶装置６００内に必要な記憶領域の内訳は以下のとおりである。  
・使用する記憶領域全体のサイズ＝４９バイト
・入力となるメッセージｍ＝１６バイト
・入力となる鍵ｋ＝１６バイト
・作業領域ｗ＝１６バイト
・ラウンド定数ｒｃ＝１バイト
なお、演算結果である暗号文はメッセージｍに上書きされる。
【０１６０】
図２１の暗号化装置４００の使用方法は以下のようになる。
【０１６１】
・記憶装置６００に入力データ（メッセージｍ（１６バイト）および鍵ｋ（１６バイト）を書き込む
・暗号化装置４００を実行開始する
・暗号化装置４００の実行終了を待つ
・演算結果は記憶装置６００に書き込まれているので、演算結果を記憶装置６００から読み出す
ここで、本実施形態によるＡＥＳ暗号方式の暗号化処理の擬似コードについて説明する。最初に、簡略化した擬似コード（簡易版擬似コード）を記載する。
【０１６２】
//m=AES（m,k）
//入力 m:メッセージ、k:鍵
round=0
rc=0x01
m=AK（m,k）//AddRoundKey
while（1）｛
k=KS（k）//KeyExpansion
m=SB（m）//SubBytes
w=SR（m）//ShiftRows
round=round+1
if（round==10） break;//exit while loop
m=MC（w）//MixColumns
m=AK（m,k）//AddRoundKey
rc=xtime（rc）//rc update
｝
m=AK（w,k）//AddRoundKey
擬似コード内の各関数は、それぞれＡＥＳ暗号で定められる関数と以下のように対応する。各ＡＥＳ暗号で定められる関数は各々FIPS197(Federal Information Processing Standards Publication 197, the National Institute of Standards and Technology (NIST))で定義される関数である。
【０１６３】
AK：AddRoundKey
KS：KeyExpansion
MC：MixColumns
SB：SubBytes
SR：ShiftRows
次に、詳細なＡＥＳ擬似コード（詳細版擬似コード）を記載する。詳細版擬似コードは、上記簡易版擬似コードの各関数（ＡＫ、ＫＳ、ＳＢ、ＳＲ、ＭＣなど）を具体化したコ（１）入出力ＩＦを介して暗号化するデータ（メッセージ）を読み出し、記憶装置６００に書き込む。
【０１６４】
（２）鍵記憶装置７００から鍵情報を読み出し、記憶装置６００に書き込む。
【０１６５】
（３）暗号化装置４００に演算を指示する。これにより、演算の処理結果である暗号文が記憶装置６００に書き込まれる。
【０１６６】
図２１は、第３の実施形態にかかる暗号化装置４００の構成の一例を示すブロック図である。図２１に示すように、暗号化装置４００は、暗号化処理部４１０と、演算部としてのＡＬＵ（Arithmetic Logic Unit）４２０と、アキュムレータ４３０と、を備えている。
【０１６７】
暗号化処理部４１０は、図２０で説明した電子機器１０の制御回路からの制御信号に従ってＡＥＳ暗号の暗号化処理の演算を制御し、演算の状態を表すステータス信号を出力する。暗号化処理部４１０の詳細は後述する。
【０１６８】
ＡＬＵ４２０は、暗号化処理部４１０により選択された機能を表す情報（図２１の「機能選択」）に従って演算を実行する。ＡＬＵ４２０は、必要に応じて、暗号化処理部４１０により指定されたアドレスのデータに対して演算を実行する。
【０１６９】
アキュムレータ４３０は、ＡＬＵ４２０による演算結果を記憶するためのレジスタである。アキュムレータ４３０に記憶されたデータは、暗号化処理部４１０からの指示に応じて記憶装置６００に書き込まれる。
【０１７０】
なお、暗号化装置４００は、記憶装置６００のうち、一部の記憶領域を使用してＡＥＳ暗号の演算を実行する。記憶装置６００内に必要な記憶領域の内訳は以下のとおりである。
【０１７１】
・使用する記憶領域全体のサイズ＝４９バイト
・入力となるメッセージｍ＝１６バイト
・入力となる鍵ｋ＝１６バイト
・作業領域ｗ＝１６バイト
・ラウンド定数ｒｃ＝１バイト
なお、演算結果である暗号文はメッセージｍに上書きされる。
【０１７２】
図２１の暗号化装置４００の使用方法は以下のようになる。
【０１７３】
・記憶装置６００に入力データ（メッセージｍ（１６バイト）および鍵ｋ（１６バイト）を書き込む
・暗号化装置４００を実行開始する
・暗号化装置４００の実行終了を待つ
・演算結果は記憶装置６００に書き込まれているので、演算結果を記憶装置６００から読み出す
ここで、本実施形態によるＡＥＳ暗号方式の暗号化処理の擬似コードについて説明する。最初に、簡略化した擬似コード（簡易版擬似コード）を記載する。
【０１７４】
//m=AES（m,k）
//入力 m:メッセージ、k:鍵
round=0
rc=0x01
m=AK（m,k）//AddRoundKey
while（1）｛
k=KS（k）//KeyExpansion
m=SB（m）//SubBytes
w=SR（m）//ShiftRows
round=round+1
if（round==10） break;//exit while loop
m=MC（w）//MixColumns
m=AK（m,k）//AddRoundKey
rc=xtime（rc）//rc update
｝
m=AK（w,k）//AddRoundKey
擬似コード内の各関数は、それぞれＡＥＳ暗号で定められる関数と以下のように対応する。各ＡＥＳ暗号で定められる関数は各々FIPS197(Federal Information Processing Standards Publication 197, the National Institute of Standards and Technology (NIST))で定義される関数である。
【０１７５】
AK：AddRoundKey
KS：KeyExpansion
MC：MixColumns
SB：SubBytes
SR：ShiftRows
次に、詳細なＡＥＳ擬似コード（詳細版擬似コード）を記載する。詳細版擬似コードは、上記簡易版擬似コードの各関数（ＡＫ、ＫＳ、ＳＢ、ＳＲ、ＭＣなど）を具体化したコ  このようにして、本実施形態では、５種類の命令であるｓｂｏｘ、ｘｔｉｍｅ、ｘｏｒ、ｌｄおよびｓｔでＡＥＳを実現している。
【０１７６】
図２３は、第３の実施形態にかかるＡＬＵ４２０の構成の一例を示すブロック図である。図２３に示すように、ＡＬＵ４２０は、ＸＴＩＭＥ４２１と、ＳＢＯＸ４２２と、ＸＯＲ４２３と、セレクタ４２４と、を備えている。ＸＴＩＭＥ４２１、ＳＢＯＸ４２２、および、ＸＯＲ４２３は、それぞれ上述の３種類の演算処理（ｓｂｏｘ、ｘｔｉｍｅ、および、ｘｏｒ）を実行する回路である。セレクタ４２４は、記憶装置６００から読み出したデータ（ＬＤ）、ＸＴＩＭＥ４２１の演算結果、ＳＢＯＸ４２２の演算結果、および、ＸＯＲ４２３の演算結果のいずれかを選択して出力する。このようにして、ＡＬＵ４２０は、暗号化処理部４１０による機能選択の指定に従い、ｌｄ、ｘｔｉｍｅ、ｓｂｏｘ、および、ｘｏｒの４つの演算処理のいずれかを実行する。
【０１７７】
次に、５種類の命令が実行されたときの暗号化装置４００内の処理の流れについて図２４から図２７を用いて説明する。図２４は、ｌｄ命令が実行されたときの暗号化装置４００内の処理例を示す図である。
【０１７８】
ｌｄ命令では、暗号化処理部４１０からアドレスが指定（出力）され、記憶装置６００の指定されたアドレスのデータが読み出され、ＡＬＵ４２０を経由してアキュムレータ４３０に書き込まれる。図２４の「ａｃｃ−ｗｅ」はアキュムレータ４３０への書き込みを指示する信号を表す。図２４の「ｒｅａｄ」は記憶装置６００からのデータの読み出しを指示する信号を表す。
【０１７９】
図２５は、ｓｔ命令が実行されたときの暗号化装置４００内の処理例を示す図である。ｓｔ命令では、暗号化処理部４１０からアドレスが指定（出力）され、アキュムレータ４３０に記憶されているデータが、記憶装置６００の指定されたアドレスに書き込まれる。アキュムレータ４３０に記憶されているデータは変更しないことを示すため、図２４ではａｃｃ−ｗｅ信号に否定を示す上線が付されている。「ｗｒｉｔｅ」は記憶装置６００へのデータの書き込みを指示する信号を表す。
【０１８０】
図２６は、ｘｏｒ命令が実行されたときの暗号化装置４００内の処理例を示す図である。ｘｏｒ命令では、暗号化処理部４１０からアドレスが指定（出力）され、アキュムレータ４３０に記憶されているデータと、記憶装置６００の指定されたアドレスのデータとの排他的論理和の演算結果が、アキュムレータ４３０に書き込まれる。
【０１８１】
図２７は、ｓｂｏｘおよびｘｔｉｍｅ命令が実行されたときの暗号化装置４００内の処理例を示す図である。ｓｂｏｘおよびｘｔｉｍｅでは用いる関数が異なるが、動作は同様であるため同じ図にまとめて記載している。ｓｂｏｘ命令（ｘｔｉｍｅ命令）では、アキュムレータ４３０に記憶されているデータに、ＳＢＯＸ関数（ＸＴＩＭＥ関数）を適用した結果がアキュムレータ４３０に書き戻される。
【０１８２】
図２８は、第３の実施形態にかかる暗号化処理部４１０の構成の一例を示すブロック図である。図２８に示すように、暗号化処理部４１０は、制御部４１１と、ラウンドカウンタ４１２と、インデックスレジスタ４１３と、アドレス生成部４１４と、を備えている。
【０１８３】
制御部４１１は、電子機器１０の制御回路（図示せず）などの外部装置からの制御信号に従い、各種制御信号を出力して、ＡＥＳ暗号化方式に応じて定められた手順に従って暗号化処理の演算を制御する。図２８の点線は、制御部４１１から各部に制御信号を出力することを表している。この制御信号の詳細については後述する。
【０１８４】
制御部４１１には、例えば、ＡＥＳ暗号の演算をリセットする信号、および、演算の開始を指示する信号などの制御信号が入力される。制御部４１１は、処理状態を表すステータス信号（ビジー、完了など）を、例えば制御信号の入力元に出力する。
【０１８５】
ＡＬＵ機能選択は、ＡＬＵ４２０に対していずれの機能（演算）を実行するかを示す信号を表す。Ａｃｃ書き込みは、アキュムレータ４３０にデータを書き込むか否かを指定するための信号を表す。メモリＲ／Ｗは、記憶装置６００からデータを読み出すか（Ｒ）、記憶装置６００にデータを書き込むか（Ｗ）を指定するための信号を表す。
【０１８６】
ラウンドカウンタ４１２は、ＡＥＳ暗号のラウンド数（ｒｏｕｎｄ）を数えるためのカウンタである。ラウンドカウンタ４１２は、例えばフリップフロップにより構成できる。  インデックスレジスタ４１３は、アドレス生成部４１４がアドレスを生成するために用いるカウンタ値（ｉｘ）を記憶するレジスタである。本実施形態では、インデックスレジスタ４１３は、４ビットのカウンタ値を記憶する。
【０１８７】
アドレス生成部４１４は、制御部４１１が出力する２ビットの値（ページ）と、インデックスレジスタ４１３の４ビットのカウンタ値ｉｘとから、６ビットのアドレスを生成して出力する。
【０１８８】
ここで、本実施形態の暗号化装置４００で使用する記憶装置６００内の記憶領域のアドレス空間について説明する。図２５は、第３の実施形態で用いるアドレス空間の一例を示す図である。
【０１８９】
図２５では、メッセージｍ、鍵ｋ、作業領域ｗおよびラウンド定数ｒｃの順に連続するアドレスを用いる例が示されている。アドレスの並び順はこれに限られるものではない。例えば、１６バイトのデータ（メッセージｍ、鍵ｋ）または１６バイトの作業領域ｗの各バイトのアドレスが連続していれば、各データまたは作業領域のアドレスは連続していなくてもよい。
【０１９０】
図２９は、第３の実施形態にかかるアドレス生成部４１４の構成の一例を示すブロック図である。図２９に示すように、アドレス生成部４１４は、ｋｐ８０１と、ｓｒ８０２と、ｏｆｓ１（８１１）（以下、単にｏｆｓ１という）と、ｏｆｓ２（８１２）（以下、単にｏｆｓ２という）と、ｏｆｓ３（８１３）（以下、単にｏｆｓ３という）と、セレクタ８２１と、を備えている。
【０１９１】
ｋｐ８０１、ｓｒ８０２、ｏｆｓ１、ｏｆｓ２、および、ｏｆｓ３は、それぞれインデックスレジスタから入力される４ビットのカウンタ値ｉｘを変換する回路である。図３０は、図２９の各回路に相当する関数の入出力の一例を示す図である。
【０１９２】
例えばｋｐ（ｘ）は、カウンタ値ｉｘ（図３０の表のｘに相当）が「０」の場合、「１３」を出力する関数である。関数ｋｐ（ｘ）は、鍵拡大処理（KeyExpansion）でのデータのアクセス順が１３,１４,１５,１２,０,１,２，３，４，５，６，７，８，９，１０，１１であることを反映している。ｓｒ（ｘ）は、１６バイトの並び替えを行うShiftRowsの処理内容を反映している。
【０１９３】
ｏｆｓ１（ｘ）〜ｏｆｓ３（ｘ）は、ｘの下位２ビットに、２ビットの１〜３を加算するが、ｘの上位２ビットは不変となる関数である。
【０１９４】
セレクタ８２１は、制御部４１１からの指示（図２８の点線）に従い、０、カウント値ｉｘ、ｋｐ８０１の出力、ｓｒ８０２の出力、ｏｆｓ１の出力、ｏｆｓ２の出力、および、ｏｆｓ３の出力、のいずれかを選択して出力する。
【０１９５】
図２９の右上に示すように、アドレス生成部４１４は、制御部４１１から入力される２ビットのページと、セレクタ８２１から出力される４ビットの値（オフセットに相当）とを結合したアドレスを出力する。このように、ページがアドレスの上位２ビットになり、例えば、インデックスレジスタを各関数で変形した結果がアドレスの下位４ビットになる。ページは、演算処理に用いられるデータの種類および演算処理に用いられる記憶装置６００内の作業領域を特定するための特定情報として用いられる。例えば、ページは、メッセージｍ、鍵ｋ、作業領域ｗ、および、ラウンド定数ｒｃの４つを特定するために４値をとる。このため、本実施形態ではページを２ビットで表している。
【０１９６】
次に、このように構成された第３の実施形態にかかる暗号化装置４００による暗号化処理について図３１を用いて説明する。図３１は、第３の実施形態における暗号化処理の全体の流れを示すフローチャートである。図３１は、上述のＡＥＳの簡易版擬似コードをフローチャートとして記載した図に相当する。
【０１９７】
まず、ラウンド数のカウンタ（ｒｏｕｎｄ）およびラウンド定数（ｒｃ）がそれぞれ０および１に初期化される（ステップＳ８００１）。次に、AddRoundKeyが実行され、メッセージｍが更新される（ステップＳ８００２）。次に、KeyExpansion（ステップＳ８００３）、SubBytes（ステップＳ８００４）、ShiftRows（ステップＳ８００５）が順次実行され、ラウンド数に１加算される（ステップＳ８００６）。
【０１９８】
ラウンド数が１０に達しない場合（ステップＳ８００７：Ｎｏ）、さらにMixColumns（ステップＳ８００８）、AddRoundKey（ステップＳ８００９）、およびxtime（ステップＳ８０１０）が実行される。その後、ステップＳ８００３に戻り処理が繰り返される。ラウンド数が１０に達した場合（ステップＳ８００７：Ｙｅｓ）、AddRoundKeyが実行され（ステップＳ８０１１）、暗号化処理が終了する。
【０１９９】
SR（ShiftRows）は１６バイトの並び替えだが、上書きすると元の値が消えるので、別な領域である作業領域ｗにコピーしながら並び替えている（ステップＳ８００５）。この処理（ステップＳ８００５）をＣ言語で記載すると次のようなコードになる。
【０２００】
for（i=0; i<16; i++）｛
w[i]=m[sr[i]];
｝
上記コード内の変数srは、
int sr[16]=｛0,5,10,15,4,9,14,3,8,13,2,7,12,1,6,11｝;
であるため、上記コードは、
w[0]=m[0]
w[1]=m[5]
w[2]=m[10]
w[3]=m[15]
w[4]=m[4]
w[5]=m[9]
w[6]=m[14]
w[7]=m[3]
w[8]=m[8]
w[9]=m[13]
w[10]=m[2]
w[11]=m[7]
w[12]=m[12]
w[13]=m[1]
w[14]=m[6]
w[15]=m[11]
という代入をしているのと同じことになる。
【０２０１】
１変数だけで逐次的に実行しようとすると、これから先に必要な値が上書きされて消されてしまうので、別な変数にコピーしながら順番を入れ替えている。
【０２０２】
MC（MixColumns）も、値が上書される問題が生じるので、別の変数にコピーしながら変換している（ステップＳ８００８）。
【０２０３】
ＡＥＳ暗号の規格（ＦＩＰＳ−１９７）では、
m[0]=xtime（w[0]）^xtime（w[1]）^w[1]^w[2]^w[3]
のように計算することが定められている。一方、xtime（a）^xtime（b）=xtime（a^b）であるため、次のようにxtimeをまとめて計算することもできる。
【０２０４】
m[0]=xtime（w[0]^w[1]）^w[1]^w[2]^w[3]
MC全体では以下のような計算をすることになる。
【０２０５】
m[0]=xtime（w[0]^w[1]）^w[1]^w[2]^w[3]
m[1]=xtime（w[1]^w[2]）^w[2]^w[3]^w[0]
m[2]=xtime（w[2]^w[3]）^w[3]^w[0]^w[1]
m[3]=xtime（w[3]^w[0]）^w[0]^w[1]^w[2]
m[4]=xtime（w[4]^w[5]）^w[5]^w[6]^w[7]
m[5]=xtime（w[5]^w[6]）^w[6]^w[7]^w[4]
m[6]=xtime（w[6]^w[7]）^w[7]^w[4]^w[5]
m[7]=xtime（w[7]^w[4]）^w[4]^w[5]^w[6]
m[8]=xtime（w[8]^w[9]）^w[9]^w[10]^w[11]
m[9]=xtime（w[9]^w[10]）^w[10]^w[11]^w[8]
m[10]=xtime（w[10]^w[11]）^w[11]^w[8]^w[9]
m[11]=xtime（w[11]^w[8]）^w[8]^w[9]^w[10]
m[12]=xtime（w[12]^w[13]）^w[13]^w[14]^w[15]
m[13]=xtime（w[13]^w[14]）^w[14]^w[15]^w[12]
m[14]=xtime（w[14]^w[15]）^w[15]^w[12]^w[13]
m[15]=xtime（w[15]^w[12]）^w[12]^w[13]^w[14]
添え字の並びを考慮し、本実施形態では以下のようにxtimeを計算する。m[i]=xtime（w[i]^w[ofs1（i）]）^w[ofs1（i）]^w[ofs2（i）]^w[ofs3（i）]
図３２は、詳細版擬似コードを状態遷移表として書き直した図である。図３３は、状態遷移表の各項目の読み方を表す図である。ｃｏｄｅは、５種類の命令のうち各状態で実行される機能（命令）のコードである。ｒｅａｄは、記憶装置６００からデータを読み出すときに１が設定され、読み出さない場合は０が設定される。ｗｒｉｔｅは、記憶装置６００にデータを書き込むときに１が設定され、書き込まない場合は０が設定される。ｆｕｎｃは、ＬＤ、ＸＴＩＭＥ、ＳＢＯＸ、ＸＯＲ、および、任意（ＡＬＵ４２０による演算は実行しない）のいずれかが設定される。ａｃｃ−ｗｅは、アキュムレータ４３０にデータを書き込むときに１が設定され、書き込まない場合は０が設定される。
【０２０６】
例えば、state＝S01では、ld m[i]というコードを実行する。その際に、read信号を１に設定し、write信号を０に設定し、funcをLDに設定し、acc＿weを１に設定する。またアドレス生成部４１４の出力はページがPMでoffsetがixである。ix欄とround欄は空白なので何も実行されない。制御欄は「↓」なので次の状態であるS02に遷移する。
【０２０７】
S03ではix欄がix+1、制御はif（ix!=15） S01となっている。これはixの値を１増やしてix+1に更新することと、ixの更新前の値が１５でない場合はS01へ遷移することを意味している。またixが１５である場合は次の状態S04へ遷移する。図３２に示されるように、ixは、各演算処理の対象となるデータを変更するタイミングで更新される。
【０２０８】
（第３の実施形態の変形例）
図３４は、第３の実施形態の変形例にかかるアドレス生成部４１４−２の構成の一例を示すブロック図である。図３４に示すように、アドレス生成部４１４−２は、ｋｐ８０１と、ｓｒ８０２と、ｏｆｓ８１０と、セレクタ８２１−２と、を備えている。
【０２０９】
本変形例では、オフセットを出力する３つの回路であるｏｆｓ１、ｏｆｓ２、および、ｏｆｓ３の代わりに、１つのｏｆｓ８１０を備えている。ｏｆｓ８１０は、カウンタ値ｉｘを３つの関数ｏｆｓ（ｘ，１）、ｏｆｓ（ｘ，２）、ｏｆｓ（ｘ，３）のいずれかを用いて変換する回路である。３つの関数ｏｆｓ（ｘ，１）、ｏｆｓ（ｘ，２）、ｏｆｓ（ｘ，３）のいずれを用いるかを指定する信号（図３４の「１〜３」）は、例えば制御部４１１から指定する。図３５は、図３４の各回路に相当する関数の入出力の一例を示す図である。
【０２１０】
セレクタ８２１−２は、制御部４１１からの指示に従い、０、カウント値ｉｘ、ｋｐ８０１の出力、ｓｒ８０２の出力、ｏｆｓ８１０の出力、のいずれかを選択して出力する。このような構成でも、図２９と同様の機能を実現できる。
【０２１１】
このように、第３の実施形態にかかる演算装置（暗号化装置）では、装置外部の記憶装置を利用し、演算で用いるデータを当該記憶装置に記憶するように制御する。これにより、ＡＥＳ演算回路内に記憶装置を備える必要がなくなり、さらなる小型化が可能となる。また、本実施形態では、ＡＬＵ内には暗号化で用いる演算処理を実行する最小限の回路（ＸＴＩＭＥ、ＳＢＯＸ、ＸＯＲ）のみを備えるため、この点でも装置の小型化が可能となっている。また、本実施形態では、暗号化で用いる各演算処理を所定の回数単位で実行している。例えばインデックスレジスタのカウント値が１５に達するごとに、すなわち、１６回単位で各演算を実行している。このため、回数が不一致となる場合に必要となる制御回路が不要になり、さらに小型化が実現できる。
【０２１２】
（第４の実施形態）
第４の実施形態では、ＡＥＳ暗号方式の復号装置に演算装置を適用した例を説明する。図３６は、第４の実施形態にかかる復号装置４００−２の構成の一例を示すブロック図である。図３６に示すように、復号装置４００−２は、復号処理部４１０−２と、演算部としてのＡＬＵ（Arithmetic Logic Unit）４２０−２と、アキュムレータ４３０と、を備えている。
【０２１３】
復号処理部４１０−２は、ＡＥＳ暗号の復号処理の演算を制御し、演算の状態を表すステータス信号を出力する。アキュムレータ４３０は、ＡＬＵ４２０による演算結果を記憶するためのレジスタである。
【０２１４】
ＡＬＵ４２０−２は、復号処理部４１０−２により選択された機能を表す情報に従って演算を実行する。ＡＬＵ４２０−２は、必要に応じて、復号処理部４１０−２により指定されたアドレスのデータに対して演算を実行する。
【０２１５】
本実施形態によるＡＥＳ暗号方式の復号処理の擬似コードについて説明する。以下に、復号処理を簡略化した擬似コード（簡易版擬似コード）を記載する。
【０２１６】
//m=invAES（m,k）
//入力 m:暗号文 k:復号鍵
round=0;
rc=0x36;
m=AK（m,k）//AddRoundKey
while（1）｛
k=iKS（k）//invKeyExpansion
m=iSB（m）//invSubBytes
w=iSR（m）//invShiftRows
round=round+1
if（round==10） break;//exit while loop
w=AK（w,k）//AddRoundKey
m=iMC（w）//invMixColumns
rc=ixtime（rc）//rc update
｝
m=AK（w,k）//AddRoundKey
暗号化処理で用いる関数の先頭に「i」が付加された関数は、暗号化処理で用いる関数の逆関数であることを意味する。例えば、iSBはSBの逆関数である。
【０２１７】
iKSはsboxとxorにより作成できる。iSBはsboxの逆関数（isbox）が必要である。iMCはxtimeにより作成できる。ixtimeはxtimeにより作成できる。従って、ＡＬＵ４２０−２は、以下の５つ演算を実行できる回路を備えていればよい。
【０２１８】
（１）LD
（２）XTIME
（３）SBOX
（４）ISBOX
（５）XOR
図３７は、このように構成される第４の実施形態にかかるＡＬＵ４２０−２の構成の一例を示すブロック図である。図３７に示すように、ＡＬＵ４２０−２は、ＸＴＩＭＥ４２１と、ＳＢＯＸ４２２と、ＸＯＲ４２３と、セレクタ４２４−２と、ＩＳＢＯＸ４２５と、を備えている。ＩＳＢＯＸ４２５は、ＳＢＯＸ４２２の逆関数に相当する演算を実行する回路である。
【０２１９】
復号処理部４１０−２は、上記擬似コードの復号処理を実現するようにＡＬＵ４２０−２の演算を制御する。復号処理部４１０−２は、暗号化処理部４１０と同様の制御部４１１、ラウンドカウンタ４１２、インデックスレジスタ４１３、および、アドレス生成部４１４を備える。復号処理部４１０−２は、暗号化処理部４１０が暗号化処理を実行するのと同様の手法で、ＡＥＳ暗号の復号処理を実行すればよい。なお、図３７に示すＡＬＵ４２０−２の構成で暗号化処理を行うことも可能である。この場合、図２３で説明したような動作を行い、ＩＳＢＯＸの機能選択の指定はなされない。
【０２２０】
次に、このように構成された第４の実施形態にかかる復号装置４００−２による復号処理について図３８を用いて説明する。図３８は、第４の実施形態における復号処理の全体の流れを示すフローチャートである。
【０２２１】
まず、ラウンド数のカウンタ（ｒｏｕｎｄ）およびラウンド定数（ｒｃ）がそれぞれ０および０ｘ３６(１６進数の３６)に初期化される（ステップＳ９００１）。次に、逆AddRoundKey（iAK）が実行され、メッセージｍが更新される（ステップＳ９００２）。次に、逆KeyExpansion（iKS）（ステップＳ９００３）、逆SubBytes（iSB)（ステップＳ９００４）、逆ShiftRows（iSR)（ステップＳ９００５）が順次実行され、ラウンド数に１加算される（ステップＳ９００６）。
【０２２２】
ラウンド数が１０に達しない場合（ステップＳ９００７：Ｎｏ）、さらにAddRoundKey（ステップＳ９００８）、逆MixColumns（iMC）（ステップＳ９００９）、および逆xtime（ixtime）（ステップＳ９０１０）が実行される。その後、ステップＳ２０３に戻り処理が繰り返される。ラウンド数が１０に達した場合（ステップＳ９００７：Ｙｅｓ）、AddRoundKeyが実行され（ステップＳ９０１１）、復号処理が終了する。
【０２２３】
以上説明したとおり、第１および第４の実施形態によれば、演算処理に用いるデータを記憶する記憶装置を演算装置内に備える必要がなくなり装置の小型化が実現できる。例えば、メモリカード内にＡＥＳ演算回路を備える場合に、さらなるＡＥＳ演算回路の小型化が実現できる。
【０２２４】
また、上記実施形態は、以下の態様を含む。
【０２２５】
（１）  データの種類ごとにＮ個の前記データを連続するアドレスに記憶する記憶装置と接続され、予め定められた暗号方式の演算を実行する演算装置であって、
前記暗号方式で用いられる複数の演算処理を実行する演算部と、
前記演算処理で用いられる種類のＮ個の前記データのうち先頭のデータのアドレスの上位ビットと、指定に応じて更新されるカウンタ値に応じた値であって前記先頭のデータのアドレスを基準とするオフセットと、に基づいて、前記演算処理で用いられるデータを記憶する前記記憶装置のアドレスを生成するアドレス生成部と、
前記暗号方式で定められる順序で前記演算処理を実行するように前記演算部を制御するとともに、前記演算処理で用いられるデータの種類を変更するタイミング、および、前記演算処理で用いられるデータを変更するタイミングで前記カウンタ値の更新を指定する制御部と、
を備える演算装置。
【０２２６】
（２）  （１）の態様に係る演算装置において、前記暗号方式は、ＡＥＳ（Advanced Encryption Standard）暗号方式である。
【０２２７】
（３）  （２）の態様に係る演算装置において、複数の前記演算処理は、前記ＡＥＳ暗号方式で定められるｓｂｏｘ、ｘｔｉｍｅ、及びｘｏｒと、前記記憶装置から前記データを読み出すロード処理である。
【０２２８】
（４）  （２）の態様に係る演算装置において、複数の前記演算処理は、前記ＡＥＳ暗号方式で定められるｓｂｏｘ、ｉｓｂｏｘ、ｘｔｉｍｅ、及びｘｏｒと、前記記憶装置から前記データを読み出すロード処理である。
【０２２９】
（第５の実施形態）
次に、第５の実施形態に係る半導体装置の構成について、図３６を用いて説明する。図３６は、本実施形態に係るメモリシステムのブロック図である。第５の実施形態では、上述した各実施形態を用いた半導体装置をメモリカードで適用する例について説明する。
【０２３０】
図３６に示すように、メモリシステムであるメモリカード３００は、コネクタ１３を介してホスト機器２００に接続される。ホスト機器２００は、コネクタ１３を介して接続されるメモリカード３００に対しアクセスを行うためのハードウェアおよびソフトウェアを備えている。メモリカード３００は、ホスト機器２００に接続された時に電源供給を受けて動作し、ホスト機器２００からのアクセスに応じた処理を行う。
【０２３１】
メモリカード３００は、例えばホスト機器２００に装着されて使用され、ホスト機器２００の外部記憶装置として用いられるＳＤメモリカードである。ホスト機器２００としては、画像データまたは音楽データなどの各種データを処理するパーソナルコンピュータやデジタルカメラ等を含む情報処理装置が挙げられる。  
なお、本実施形態では、このメモリカード３００が適用されるホスト機器２００と含めてメモリシステムとして構成されていてもよいし、カードの形態としてではなく、フラッシュメモリとこのフラッシュメモリを制御するコントローラがホスト機器２００に組み込まれてメモリシステムを構成してもよい。なお、ホスト機器２００としては、上述で挙げたものの他に、ＰＤＡ、電子ブック、デジタルビデオ、携帯電話などの電子機器類も考えられる。
【０２３２】
メモリカード３００は、ホスト機器２００とコネクタ１３を介して情報の授受を行う。メモリカード３００は、ＮＡＮＤ型フラッシュメモリチップ（単にＮＡＮＤ型フラッシュメモリ、フラッシュメモリ、またはＮＡＮＤチップ等とも呼ぶ）であるメモリ部（不揮発性の半導体記憶部）１１、メモリ部１１を制御するメモリコントローラ（カードコントローラ）１２、および複数の信号ピン（ピン１乃至ピン９）であるコネクタ１３を備えている。
【０２３３】
コネクタ１３は、メモリコントローラ１２と電気的に接続されている。コネクタ１３におけるピン１乃至ピン９に対する信号の割り当ては、例えば図３７に示すようになっている。図３７は、ピン１乃至ピン９と、それらに割り当てられた信号とを示す表である。なお、図３７において、ＳＤモード（１ビット、４ビット）およびＳＰＩモードとは、ＳＤメモリカードの規格で規定されているデータ転送の動作モードである。なお、メモリカード３００の転送モードは、転送クロック周波数等により、最大２５ＭＨｚまでサポートしているノーマルスピードモード（「ＮＳＭ」とも呼ぶ）と、最大５０ＭＨｚまでサポートしているハイスピードモード（「ＨＳＭ」とも呼ぶ）に加えて、最大１０４ＭＨｚまでサポートしているウルトラハイスピードモード（「ＵＨＳＭ」とも呼ぶ）等もある。
【０２３４】
データＤＡＴ０、ＤＡＴ１、ＤＡＴ２、ＤＡＴ３はそれぞれ、ピン７、ピン８、ピン９、ピン１に割り当てられている。また、ピン１は、カード検出信号ＣＤにも割り当てられている。コマンドＣＭＤと、このコマンドＣＭＤに対するメモリカード３００の応答信号であるレスポンスＲＥＳは、ピン２に割り当てられている。クロック信号ＣＬＫは、ピン５に割り当てられている。電源電圧ＶＤＤはピン４に、接地電圧ＶＳＳ１はピン３に、接地電圧ＶＳＳ２はピン６に割り当てられている。
【０２３５】
また、メモリカード３００は、ホスト機器２００に設けられたスロットに対して挿抜可能なように形成されている。ホスト機器２００に設けられたホストコントローラ（図示せず）は、これらピン１乃至ピン９を介してメモリカード３００内のメモリコントローラ１２と各種信号およびデータを通信する。例えば、メモリカード３００にデータが書き込まれる際には、ホストコントローラは、書き込みコマンドを、ピン２を介してメモリコントローラ１２にシリアルな信号として転送する。このとき、メモリコントローラ１２は、ピン５に供給されているクロック信号に応答して、ピン２に与えられる書き込みコマンドを取り込む。
【０２３６】
４ビットバス幅単位でデータ転送を行うＳＤモード（ＳＤ４ビットモード）では、データ用の４つのピン１、ピン７、ピン８、ピン９がすべてデータ転送に使用される。一方、１ビットバス幅単位でデータ転送を行うＳＤモード（ＳＤ１ビットモード）では、ピン７のみがデータ転送に使用され、データ用のピン８、ピン９は使用されない。また、ピン１は、例えばメモリカード３００からホスト機器２００への非同期割り込み等のために使用される規定となっている。
【０２３７】
ＳＰＩモードは、１ビットバス幅の転送モードであり、ピン７がメモリカード３００からホスト機器２００へのデータ信号線（ＤＡＴＡＯＵＴ）に用いられる。ピン２は、ホスト機器２００からメモリカード３００へのデータ信号線（ＤＡＴＡＩＮ）に用いられる。ピン８、ピン９は、使用されない。また、ＳＰＩモードでは、ピン１がホスト機器２００からメモリカード３００へのチップセレクト信号ＣＳの送信に用いられる規定となっている。
【０２３８】
なお、ＳＤモードを使用するか、ＳＰＩモードを使用するかは、メモリカード３００の初期化時に決定される。また、ＳＤモードの１ビットモードと４ビットモードとは、ホストからのコマンド（ＳＥＴ  ＢＵＳ  ＷＩＤＴＨ）によって選択される。
【０２３９】
ここで、前述したように、書き込みコマンドは、ピン２のみを利用してメモリコントローラ１２にシリアルに入力される。コマンドの入力に割り当てられているピン２は、図３７に示すように、ピン１と接地電位Ｖｓｓ用のピン３との間に配置されている。つまり、コネクタ１３は、ホスト機器２００内のホストコントローラとメモリカード３００とが通信するのに使用される。
【０２４０】
これに対し、メモリ部１１とメモリコントローラ１２との間の通信は、ＮＡＮＤ型フラッシュメモリ用のメモリインタフェース部（以下、単にＮＡＮＤバスまたはＮＡＮＤインタフェースと呼ぶことがある）２１によって行われる。したがって、ここでは図示しないが、メモリ部１１とメモリコントローラ１２とは例えば８ビットの入出力（Ｉ／Ｏ）線により接続されている。
【０２４１】
また、メモリインタフェース部２１では、メモリ部１１に対するコマンドとデータが同じＩ／Ｏ線を共用して通信されている。このように、ホスト機器２００内のホストコントローラとメモリカード３００とが通信するインタフェース（コネクタ１３）と、メモリ部１１とメモリコントローラ１２とが通信するインタフェース（ＮＡＮＤバス２１）とは異なる。
【０２４２】
次に、図３６に示すメモリカード３００の備えるメモリコントローラの内部構成について図３８を用いて説明する。図３８はメモリカード３００のブロック図である。
【０２４３】
メモリ部１１は、不揮発性の半導体メモリであり、複数のＮＡＮＤチップ（上述した各実施形態に対応するＮＡＮＤチップ）により構成されている。ホスト機器２００から送信されたデータなどは、このメモリ部１１に記憶される。また、制御プログラムであるファームウェア（システム情報）等も記憶されていても良い。
【０２４４】
また、コネクタ１３は、バス１４を介してメモリコントローラ１２に接続されている。バス１４は、ＣＬＫライン、ＣＭＤ／ＲＥＳライン、ＤＡＴ０ライン、ＤＡＴ１ライン、ＤＡＴ２ライン、ＣＤ／ＤＡＴ３ライン、ＶＤＤライン、ＶＳＳ１ライン、およびＶＳＳ２ラインを含む。メモリコントローラ１２は、例えば８ビットバス幅のバスを介してメモリ部１１と接続されている。
【０２４５】
メモリコントローラ１２は、メモリ部１１内部の物理状態（例えば、何処の物理ブロックアドレスに、何番目の論理セクタアドレスデータが含まれているか、あるいは、何処のブロックが消去状態であるか）を管理する。メモリコントローラ１２は、外部インタフェース部１５と、コマンド制御部１６と、データ制御部１７と、ＭＰＵ（Micro Processing Unit）１８と、ＲＯＭ（Read Only Memory）１９と、ＲＡＭ（Random Access Memory）２０と、メモリインタフェース部２１と、タイマー（計測部）２２とを備えている。
【０２４６】
外部インタフェース部１５は、メモリコントローラ１２とホスト機器２００との間のインタフェース処理を行う。具体的には、外部インタフェース部１５は、コネクタ１３を介してホスト機器２００と接続されており、ＭＰＵ（制御部）１８の制御のもと、所定のプロトコルに従ってコマンドあるいは各種データ等の送受信を行う機能ブロックである。
【０２４７】
コマンド制御部１６は、ホスト機器２００から送信されるコマンドＣＭＤを受け取り、このコマンドＣＭＤを解釈する。また、コマンド制御部１６は、コマンドＣＭＤに対する応答信号であるレスポンスＲＥＳを生成し、このレスポンスＲＥＳをホスト機器２００に送信する。
【０２４８】
データ制御部１７は、ホスト機器２００から送信されるコマンドＣＭＤに基づいて、データの送受信を行う。また、データ制御部１７は、メモリカード３００の動作状態などを示すステータスデータ（ＳＴＡＴＵＳ）を生成し、このステータスデータをホスト機器２００に送信する。
【０２４９】
ＭＰＵ１８は、メモリカード３００全体の動作を制御するものである。ＭＰＵ１８は、例えばメモリカード３００が電源供給を受けたときに、ＲＯＭ１９やメモリ部１１に格納されているファームウェア（システム情報）をＲＡＭ２０に読み出して所定の処理を実行することにより、各種のテーブルをＲＡＭ２０に作成する。また、ＭＰＵ１８は、ホスト機器２００から書き込みコマンド、読み出しコマンド、あるいは消去コマンド等を受け取り、メモリ部１１に対して所定の処理を実行したり、バッファを通じたデータ転送処理を制御したりする。より具体的には、例えばデータの書き込みの際には、書き込みコマンドを発行する。書き込みコマンドは、例えばＮＡＮＤインタフェースで規定されている“８０Ｈ”や“１０Ｈ”等である。また、ＭＰＵ１８は、タイマー２２の制御を行うタイマー制御部（計測制御部）１８ａを有している。このタイマー制御部１８ａは、タイマー２２に計測時間を設定したり、タイマー２２からの時間計測完了の信号によってＭＰＵ１８やメモリインタフェース部２１の制御を行ったりすることができる。具体的には、タイマー制御部１８ａは、メモリインタフェース部２１の制御を行い、ＭＰＵ１８の発行した書き込みコマンドの転送やデータの入力（データイン）の実行を制御する（遅らせる）。なお、タイマー制御部１８ａは、計測完了の信号をＭＰＵ１８に供給しても良い。また、このタイマー制御部１８ａは、ＭＰＵ１８の外に設けられていても良い。
【０２５０】
ＲＯＭ１９は、ＭＰＵ１８により実行されるファームウェアなどを格納するメモリである。ＲＡＭ２０は、ＭＰＵ１８の作業エリアとして使用され、ファームウェアや各種のテーブル（表）を記憶するメモリである。メモリインタフェース部２１は、メモリコントローラ１２とメモリ部１１との間のインタフェース処理を行う機能ブロックである。
【０２５１】
また、メモリインタフェース部２１は、例えばタイマー制御部１８ａからの時間計測完了の信号等を受けて、メモリ部１１へのＭＰＵ１８の発行した書き込みコマンドの転送やデータの入力（データイン）を行う。なお、図３８ではＭＰＵ１８とメモリインタフェース部２１とを別々の回路ブロックとして図示しているが、例えばＭＰＵ１８における書き込みコマンドを発行する機能がメモリインタフェース部２１に含まれていても良い。
【０２５２】
タイマー２２は、１ＣＬＫ（クロック）の立ち上がりから立下りまでを最小単位として時間の計測（カウント）を行う。また、タイマー２２は、タイマー制御部１８ａに、時間の計測が完了すると、その旨を通知する。
【０２５３】
また、メモリコントローラ１２には、図示しないバッファが設けられており、ホスト機器２００から送られてくるデータをメモリ部１１へ書き込む際に、一定量のデータ（例えば、１ページ分）を一時的に記憶したり、メモリ部１１から読み出されるデータをホスト機器２００へ送り出す際に、一定量のデータを一時的に記憶したりすることができる。
【０２５４】
次に、図３９を用いて、メモリ部１１の構成について概略的に説明する。図３９は、メモリ部１１のブロック図である。図示するように、メモリ部１１は、複数（例えばチップ０〜チップｎ−１のｎ個）のＮＡＮＤチップ（上述した各実施形態に対応するＮＡＮＤチップ）１１ａを有している。
【０２５５】
上述する実施形態によれば、第〜第の実施形態に係るＮＡＮＤチップは、メモリカード等にも搭載することが可能であることがわかる。
【０２５６】
尚、上述した各実施形態は、それぞれ組み合わせて実施することが可能である。特に、第１〜第４の実施形態を適宜組み合わせて用いると、ＡＥＳ暗号化演算回路の面積を更に抑制することができる。例えば、ＮＡＮＤチップ１００の面積に対して、ＡＥＳ暗号化演算回路の占める割合は数％程度で済ませることが可能となる。
【０２５７】
また、上述した各実施形態では、ＡＥＳ暗号回路１２２の変わりに、各種暗号装置、ＥＣＣ、セキュリティシステムなどの演算装置を搭載しても良い。
【０２５８】
また、上述した第５の実施形態では、ＳＤカードを用いて説明したが、同様の動作をする半導体記憶装置であれば、他のメモリカード、メモリデバイスまたは内部メモリ等にも適用可能であり、上述した各実施形態と同様の作用効果を奏することができる。また、メモリセルアレイ１３０はＮＡＮＤ型フラッシュメモリに限らず、その他の半導体メモリであっても良い。
【０２５９】
以上、本発明の実施形態を説明したが、本発明は上記実施形態に限定されるものではなく、その趣旨を逸脱しない範囲内において種々変形して実施することが可能である。さらに、上記実施形態には種々の段階の発明が含まれており、開示された構成要件を適宜組み合わせることによって種々の発明が抽出される。例えば、開示された構成要件からいくつかの構成要件が削除されても、所定の効果が得られるものであれば、発明として抽出され得る。
【符号の説明】
【０２６０】
１０…電子機器、  １１…メモリ部、  １１ａ…ＮＡＮＤチップ、
１２…メモリコントローラ、    １３…コネクタ、    １４…バス
１５…外部インタフェース部、    １６…コマンド制御部、    １７…データ制御部
１８…ＭＰＵ、    １８ａ…タイマー制御部、    １９…ＲＯＭ、    ２０…ＲＡＭ
２１…メモリインタフェース部、    ２２…タイマー、    １００…ＮＡＮＤチップ
１０２…入出力端子、    １０４…制御信号入力端子、    １１０…入出力制御回路
１１０ａ…データ入出力バッファ、    １１１…コマンドレジスタ、  
１１２…一時レジスタ、    １１３…データチェック回路、    １１４…バス制御回路
１１４ａ…インバータ、    １１４ｂ…インバータ、    １１４ｃ…インバータ
１１５…アドレスレジスタ、    １１６…ステータスレジスタ、  
１２０…ロジック制御回路、    １２１…ＡＥＳ制御回路、  １２２…ＡＥＳ暗号回路
１２２ａ…暗号化処理部、    １２２ｂ…ＡＬＵ、    １２２ｃ…アキュムレータ
１２３…アドレス制御回路、    １２４…バッファ読み出しシーケンス
１２５…バッファデータ書込みシーケンス、
１２６…メモリ読み出しシーケンス、      １３０…メモリセルアレイ
１３１…センスアンプ、    １３２…演算部、    １３３…ページバッファ
１３３ｓ…ワーキング領域、    １３３ｔ…鍵記憶領域、    １３４…カラムデコーダ
１３５…カラムバッファ、    １３６…ロウアドレスデコーダ
１３７…ロウアドレスバッファデコーダ、    １４０…昇圧回路
２００…ホスト機器、    ３００…メモリカード、    ４００…暗号化装置
４００…復号装置、    ４１０…暗号化処理部、    ４１１…制御部
４１２…ラウンドカウンタ、    ４１３…インデックスレジスタ、  
４１４…アドレス生成部、    ４２０…ＡＬＵ、    ４２１…ＸＴＩＭＥ
４２２…ＳＢＯＸ、    ４２３…ＸＯＲ、    ４２４…セレクタ
４２５…ＩＳＢＯＸ、    ４３０…アキュムレータ、  
５００…入出力インタフェース、    ６００…記憶装置、    ７００…鍵記憶装置
８２１…セレクタ。
【図１】
0005674630.tif 000002
【図２】
0005674630.tif 000003
【図３】
0005674630.tif 000004
【図４】
0005674630.tif 000005
【図５】
0005674630.tif 000006
【図６】
0005674630.tif 000007
【図７】
0005674630.tif 000008
【図８】
0005674630.tif 000009
【図９】
0005674630.tif 000010
【図１０】
0005674630.tif 000011
【図１１】
0005674630.tif 000012
【図１２】
0005674630.tif 000013
【図１３】
0005674630.tif 000014
【図１４】
0005674630.tif 000015
【図１５】
0005674630.tif 000016
【図１６】
0005674630.tif 000017
【図１７】
0005674630.tif 000018
【図１８】
0005674630.tif 000019
【図１９】
0005674630.tif 000020
【図２０】
0005674630.tif 000021
【図２１】
0005674630.tif 000022
【図２２】
0005674630.tif 000023
【図２３】
0005674630.tif 000024
【図２４】
0005674630.tif 000025
【図２５】
0005674630.tif 000026
【図２６】
0005674630.tif 000027
【図２７】
0005674630.tif 000028
【図２８】
0005674630.tif 000029
【図２９】
0005674630.tif 000030
【図３０】
0005674630.tif 000031
【図３１】
0005674630.tif 000032
【図３２】
0005674630.tif 000033
【図３３】
0005674630.tif 000034
【図３４】
0005674630.tif 000035
【図３５】
0005674630.tif 000036
【図３６】
0005674630.tif 000037
【図３７】
0005674630.tif 000038
【図３８】
0005674630.tif 000039
【図３９】
0005674630.tif 000040