(57)【要約】【課題】メモリのデータだけでなくアドレスに誤りが発生した場合も、誤りを検出可能とする半導体記憶装置を提供する。【解決手段】メモリとしてのＥＥＰＲＯＭ７には、データが記憶されるメモリアドレスと対応する誤り検出符号とが例えばメモリアドレス値が１つづつシフトしたメモリアドレス関係で記憶されている。これにより、アドレスデコーダ１２に対して、メモリアドレスの例えば特定のビットを固定する攻撃が行われた場合にも誤り検査回路８でのデータ照合により、誤り有りを検出する。【選択図】図７
2008204084.tif 000002
【特許請求の範囲】
【請求項１】
第１のアドレスにデータを記憶し、前記第１のアドレスと所定の関係に設定され、前記第１のアドレスとは異なる第２のアドレスに前記データに対応する誤り検出符号を記憶するメモリと、
前記第１のアドレス及び前記第２のアドレスとのアドレス関係の情報を保存するアドレス保存手段と、
を備えることを特徴とする半導体記憶装置。
【請求項２】
さらに、前記データ及び前記誤り検出符号とを読み出し、前記データの誤り検査を行う誤り検査手段を備えることを特徴とする請求項１に記載の半導体記憶装置。
【請求項３】
前記第１のアドレスで指定される前記メモリのメモリセルには、前記データと、該データとは異なるデータに対応した誤り検出符号とをデータ組として記憶することを特徴とする請求項１又は２に記載の半導体記憶装置。
【請求項４】
前記第１のアドレス及び前記第２のアドレスとのアドレス関係は、一方のアドレスの値が他方のアドレスの値に依存して変化する関係に設定されることを特徴とする請求項１から３のいずれか１つの請求項に記載の半導体記憶装置。
【請求項５】
前記データと、該データに対応する前記誤り検出符号とは、前記メモリから複数回の読み出しにより行われることを特徴とする請求項１から４のいずれか１つの請求項に記載の半導体記憶装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、保護すべきデータを記憶するメモリを備えた半導体記憶装置に関する。
【背景技術】
【０００２】
インターネットの普及により、パーソナルコンピュータや、携帯電話などをはじめとするモバイル情報端末からのネットワーク上での取引が増加しており、暗号技術よる安全な通信の確保が必要とされている。なかでも磁気カードより偽造が困難であり、高いセキュリティをもつＩＣカードが注目されている。
【０００３】
しかし、ＩＣカードは暗号実装に対して様々な攻撃手法が発表されており、これらの攻撃手法への対策が必須となっている。
【０００４】
ＩＣカードへの攻撃方法の一つとして、故障利用解析が上げられる。これは暗号の計算中にＩＣカードの外部から物理的な手段によりＩＣカード内部のデータのビットパターンを故意に変更し、演算結果に誤りを生じさせて、秘密情報である暗号鍵の解析を行うものである。
【０００５】
故障利用解析による攻撃の例としては、中国人剰余定理(Chinese remainder theorem：以下CRTという)を用いたＲＳＡ復号方式に対する攻撃手法が知られており、Bonehらによって発表されている（例えば、非特許文献１参照。）。
【０００６】
ＣＲＴを用いＲＳＡ復号方式に対する攻撃手法の中で、メモリ内容を改竄する手法が知られている。このメモリ内容が改竄された事を検知する方法として、誤り検出符号(EDC：Error Detecting Code)を利用した対策がある（例えば、特許文献１参照。）。
【０００７】
この方法はメモリのデータ部に対する改竄に対して誤り検出回路で検知可能となる。
【０００８】
しかし、アタッカーが故障利用解析を試みようとして行う攻撃は、メモリのデータ部を直接改竄する以外にも、例えば、アドレスデコーダへ攻撃し、メモリアドレスを変化させて、正しいメモリアドレスと異なるメモリアドレスにアクセスさせることで、メモリカードＩＣのシステムに対して、システムが予期しない不正なデータを読み出させる方法もある。
【０００９】
このアドレスデコーダへ攻撃し不正なデータを読み出して、ＩＣを故障状態に陥らせるような攻撃方法に対しては上記の特許文献１の方式では検知することができないという問題がある。
【００１０】
したがって、このようにシステムが予期しない不正なデータを読み込んでしまった場合も誤りを検知できることが望まれる。
【非特許文献１】D.Boneh,R.A.DeMillo, and R.J.Lipton, “On the Importance of Checking Computations”  Submitted to Eurocrypt’97
【特許文献１】特開2003-51817号公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
本発明は上述した点に鑑みてなされたもので、メモリのデータだけでなくアドレスに誤りが発生した場合も、誤りを検出可能とする半導体記憶装置を提供することを目的とする。
【課題を解決するための手段】
【００１２】
本発明の一実施形態に係る半導体記憶装置は、第１のアドレスにデータを記憶し、前記第１のアドレスと所定の関係に設定され、前記第１のアドレスとは異なる第２のアドレスに前記データに対応する誤り検出符号を記憶するメモリと、前記第１のアドレス及び前記第２のアドレスとのアドレス関係の情報を保存するアドレス保存手段と、を備えることを特徴とする。
【発明の効果】
【００１３】
本発明によれば、メモリのデータだけでなくアドレスに誤りが発生した場合も誤りの検出が可能となる。
【発明を実施するための最良の形態】
【００１４】
以下、図面を参照して本発明の実施形態を説明する。  
図１は本発明の一実施形態に係る半導体記憶装置を備えたＩＣカードチップ１の構成を示す。このＩＣカードチップ１は、図２に示すように、例えば名刺サイズにしたＩＣカード本体２に搭載することができる。  
図１に示すＩＣカードチップ１は、このＩＣカードチップ１全体の動作を制御するＣＰＵ３、コプロセッサ４、ＲＡＭ５、ＲＯＭ６、ＥＥＰＲＯＭ７、誤り検査回路８、入出力部（Ｉ／Ｏ）９がバス１０を介してそれぞれ接続されている。  
コプロセッサ４は、ＣＰＵ３の補助的な機能を有し、ＲＳＡのべき剰余除算等、計算量が多い演算処理を行う。ＲＡＭ５は、ＣＰＵ３が読出し／書込み等の処理を行うワークエリアとして使用されると共に、暗号処理の途中結果の情報の保持等に利用される。ＲＯＭ６は、ＣＰＵ３から読出し可能なメモリであり、暗号処理プログラムなど、ＣＰＵ３の動作制御の為のプログラム等が記憶されている。
【００１５】
ＥＥＰＲＯＭ７は、ＣＰＵ３から読出し／書込みが可能な不揮発性、かつ電気的に書き換え可能なメモリである。このＥＥＰＲＯＭ７には、暗号処理を行う際に用いられる秘密鍵等の秘匿性を保護すべきデータが、そのデータに対応する誤り検出符号と共に、別のメモリアドレスとなるようにして記憶（保持）されている。
【００１６】
なお、以下の説明においては、データと、そのデータに対応する誤り検出符号とを共通のメモリとしてのＥＥＰＲＯＭ７の場合で説明するが、これに限定されるものでなく、別々のメモリに記憶しても良い。例えば、物理的に別々となる第１のメモリと第２のメモリとを用意し、データを第１のメモリのメモリセルに、対応する誤り検出符号を第２のメモリのメモリセルに記憶しても良い。
【００１７】
また、別々となる第１のメモリと第２のメモリを１つのメモリとして扱えるように、第１のメモリのメモリセルと第２のメモリのメモリセルを包含するメモリのメモリセルとして、共通化したメモリアドレスで管理するようにしても良い。この場合にもデータと対応する誤り検出符号とは異なるメモリアドレスのメモリセルに記憶される。
【００１８】
誤り検査回路８は、ＥＥＰＲＯＭ７等の保護すべきメモリから読み出されたデータの誤りの有無を検査する回路である。そして、メモリから読み出されたデータと誤り検出符号は、まずこの誤り検査回路８に取り込まれ、データがそのデータに対応する誤り検出符号と一致するかの照合（検査）の結果、誤りが発生していなければ、バス１０を介してＣＰＵ３またはコプロセッサ４にそのデータを送る。
【００１９】
一方、照合の結果、誤りが発生した場合は、誤り検出信号を出力する。そして、この場合には、ＣＰＵ３等が暗号処理等を行わせないようにして、データの保護或いはデータの機密性を確保する。  
図３及び図４は、本実施形態に係る半導体記憶装置１１における構成を、データ読み出し及び誤り符号読み出しの動作状態にて示す。  
図３及び図４においては、半導体記憶装置１１は、ＣＰＵ３、保護すべきデータを記憶するメモリとしてのＥＥＰＲＯＭ７、誤り検査回路８を含む構成で示している。ＣＰＵ３と共に、コプロセッサ４を含む構成にしても良い。なお、半導体記憶装置１１は、少なくともメモリ（ここではＥＥＰＲＯＭ７）を含む。  
以下においては、メモリとしてＥＥＰＲＯＭ７の場合で説明するが、ＲＯＭ６やＲＡＭ５に適用してもよい。
【００２０】
図３及び図４に示すように、ＥＥＰＲＯＭ７には、保護すべきデータとそのデータの誤り検出符号とが異なるメモリアドレスに記憶保持されている。そして、ＣＰＵ３は、ＥＥＰＲＯＭ７内のアドレスデコーダ１２を介してＥＥＰＲＯＭ７に保持されたデータ及びそのデータに対応する誤り検出符号を読み出すことができる。  
この場合、データ及びそのデータに対応する誤り検出符号は、異なるメモリアドレスに記憶されているので、ＣＰＵ３は、データ及びそのデータに対応する誤り検出符号を読み出すためにＥＥＰＲＯＭ７に対して複数回、読み出しの処理を行うことになる。  
また、誤り検査回路８は、データとそのデータに対応する誤り検出符号とを照合することにより、読み出されたデータが誤りを有するものであるか否かの誤り検査機能を有する。
【００２１】
また、この誤り検査回路８は、さらに、ＥＥＰＲＯＭ７に記憶された各データのメモリアドレスと、各データに対応する誤り検出符号を記憶したメモリアドレスとの対となるメモリアドレス関係の情報を保存するアドレス保存手段として、データ・誤り符号保存アドレス制御回路１３を有する。  
なお、本実施形態においては、誤り検査回路８内にデータ・誤り符号保存アドレス制御回路１３を設けているが、これに限定されるものでなく、誤り検査回路８の外部に設けるようにしても良い。  
そして、ＥＥＰＲＯＭ７にデータと、そのデータに対応する誤り検出符号とを記憶する場合、このデータ・誤り符号保存アドレス制御回路１３に保存されているメモリアドレス関係の情報に従って、それぞれが別々のメモリアドレスに記憶されている。
【００２２】
勿論、データ及び対応する誤り検出符号を別のメモリアドレスに記憶した後に、そのメモリアドレス関係を示す情報を作成しても良い。
【００２３】
図３に示す例では、データが記憶されるメモリアドレスに対して対応する誤り検出符号が記憶されるメモリアドレスを１つシフトした別のメモリアドレスに記憶するようにしている。  
例えばデータMdataijが記憶されるメモリアドレスAddrが（十進法で）ijであると、対応する誤り検出符号EDC（Mdij）が記憶されたメモリアドレスAddrはij+1にしている。  
この関係のメモリアドレスの情報は、データ・誤り符号保存アドレス制御回路１３に保存されている。なお、以下においては、メモリアドレスｉｊをAddrijで、対応するデータMdataijの誤り検出符号をEDC（Mdij）で示す。
【００２４】
また、本実施形態においては、ＥＥＰＲＯＭ７のメモリセルには、メモリアドレスAddrijにおける例えば上位ビット側にデータMdataijを、下位ビット側には１つメモリアドレスをシフトしたデータMdataij-1に対応する誤り検出符号EDC（Mdij-1）とをセットにして記憶している。  
つまり、各メモリアドレスAddrijのメモリセルには、データ組｛Mdataij、EDC（Mdij-1）｝が記憶されている。  
そして、半導体記憶装置１１に対して、データの読み出しの指示がＣＰＵ３を介して行われた場合、上述したように誤り検査回路８は、データ及びそのデータに対応する誤り符号を照合する。なお、各々の誤り検出符号としては、パリティ符号やＣＲＣ符号などが広く使用されるが、これに限定されるものでなく、データの誤りを検出できる任意の符号等を利用できる。
【００２５】
なお、メモリとしてのＥＥＰＲＯＭ７として、例えば物理的に異なる２つのＥＥＰＲＯＭ７ａ、７ｂを用意した場合には、上記の上位ビット側のメモリセルをデータが記憶される例えばＥＥＰＲＯＭ７ａのメモリセルに、下位ビット側のメモリセルをデータに対応する誤り検出符号が記憶されるＥＥＰＲＯＭ７ｂのメモリセルに、それぞれ読み替えることにより同様に適用できる。
【００２６】
次に本実施形態に係る半導体記憶装置１１が設けられたＩＣカードチップ１の動作を説明する。  
上述したように半導体記憶装置１１におけるＥＥＰＲＯＭ７には、データとそのデータに対応する誤り検出符号が別のメモリアドレスとなるように記憶保持されている状態であるとして説明する。  
この場合、データと誤り検出符号とがＥＥＰＲＯＭ７内のどのメモリアドレスに保持されているかという情報は、例えば誤り検査回路８内のデータ・誤り検出符号保存アドレス制御回路１３が有している。  
図５は、本実施形態に係る半導体記憶装置１１からデータをリードする（読み出す）時の動作手順のフローチャートを示す。
【００２７】
図５により全体的な動作を説明し、その際に図３，図４の具体的な例を用いて説明する。  
データ読み出しの指示によりデータ読み出し動作が開始すると、ステップＳ１に示すようにＣＰＵ３からデータ読み出し時のメモリアドレスが出力される。  
また、このメモリアドレスは、誤り検査回路８内のデータ・誤り検出符号保存アドレス制御回路１３にも入力される。データ・誤り検出符号保存アドレス制御回路１３は、データ読み出し時には、ＣＰＵ３に対して読み出し要求信号を送る。  
ステップＳ２に示すようにＣＰＵ３からのメモリアドレスは、ＥＥＰＲＯＭ７のアドレスデコーダ１２に入力され、このアドレスデコーダ１２を介してＥＥＰＲＯＭ７から対応するメモリアドレスのメモリセルからデータ組が読み出される。
【００２８】
ステップＳ３に示すように、読み出されたデータ組は、誤り検査回路８に送られ、この誤り検査回路８内のレジスタ等に記憶される。  
図３の例では、データ読み出し時のメモリアドレスAddrを十進の表示で０１で示している。また、図３の例では、メモリアドレスAddrを二進の表示でも［001］と併記している。以下、二進の表示を、［  ］を用いる。なお、図３等に示すように、メモリアドレスAddrを十進と二進とで併記する場合にはAddr01：［001］のように表記する。
【００２９】
そして、このメモリアドレスAddr01：［001］がＣＰＵ３からＥＥＰＲＯＭ７のアドレスデコーダ１２に出力され、対応するデータ組｛Mdata01、EDC（Md00）｝がＥＥＰＲＯＭ７から読み出され、誤り検査回路８に記憶される。
【００３０】
読み出されたデータ組｛Mdata01、EDC（Md00）｝が、誤り検査回路８に記憶されると、この誤り検査回路８内のデータ・誤り検出符号保存アドレス制御回路１３は、（データ読み出し時の）読み出し終了フラグ信号をＣＰＵ３に出力する。  
また、データ・誤り検出符号保存アドレス制御回路１３は、読み出し終了フラグ信号をＣＰＵ３に出力後、図４に示すようにデータMdata01に対応する誤り検出符号を読み出すためのメモリアドレスAddr02：［010］をＣＰＵ３に出力する。また、読み出し要求信号もＣＰＵ３に出力する。  
図５においては、ステップＳ３に続くステップＳ４においてＣＰＵ３は、データ・誤り検出符号保存アドレス制御回路１３からの読み出し要求信号により、読み出しが完了していないと判定し、ステップＳ５の処理に移り、その後にステップＳ１の処理に戻る。
【００３１】
図４に示す具体例では、データ読み出し時のメモリアドレスAddrが01［001］であり、データ・誤り検出符号保存アドレス制御回路１３は、これに対応する誤り検出符号を読み出すためのアドレス情報としてメモリアドレスAddr02［010］（の値）をＣＰＵ３に出力する。  
ＣＰＵ３は、このメモリアドレスAddr02［010］が入力されると、データ読み出し時の場合と同様に、このメモリアドレスAddr02［010］をＥＥＰＲＯＭ７のアドレスデコーダ１２に出力する（図５のステップＳ２）。  
そして、図４に示すようにＥＥＰＲＯＭ７におけるメモリアドレスAddr02［010］に記憶されたデータMdata02と誤り検出符号EDC（Md01）からなるデータ組{ Mdata02, EDC(Md01) }が読み出される（図５のステップＳ３）。
【００３２】
そして、図４に示すように読み出されたこのデータ組｛Mdata02,EDC（Md01）｝は、誤り検査回路８内のレジスタ等に格納される（図５のステップＳ３）。  
データ・誤り検出符号保存アドレス制御回路１３は、誤り検出符号読み出し時のデータ組{ Mdata02, EDC(Md01) }が誤り検査回路８内のレジスタ等に格納されると、読み出し終了フラグをＣＰＵ３に送る。  
これにより図５のステップＳ３に続くステップＳ４の処理においてＣＰＵ３或いは誤り検査回路８は、読み出し完了と判定し、ステップＳ６のデータと誤り検出符号を照合する処理に進む。このステップＳ６の処理は、誤り検査回路８により行われる。  
そして、誤り検査回路８は、照合した結果により、ステップＳ７に示すように照合がＯＫか否か、つまりデータに誤り無いか否かを判定する。この判定により、データに誤り無しと判定した場合には、ステップＳ８に示すように誤り検査回路８は、そのデータをバス１０に出力する。
【００３３】
一方、誤り有りと判定した場合には、ステップＳ８に示すように誤り検査回路８は、そのデータをバス１０に出力することなく、誤り検出信号をバス１０等に出力する。  
図４に示す具体例では、上記ステップＳ６に対応して誤り検査回路８は、１回目（データ読み出し時）に格納した例えば上位ビット側のデータMdata01と、２回目（誤り符号読み出し時）に格納した例えば下位ビット側の誤り検出符号EDC（Md01）とを照合する。  
そして、図５のステップＳ７に示すように照合した結果がＯＫか否かを判定する。  
図４に示す例では、１回目のデータMdata01と２回目の誤り検出符号EDC（Md01）とを照合した場合を示しているので、この場合には誤り検査回路８は、図５のステップＳ８に示すように誤り無しと判定して、データMdata01をバス１０に出力することになる。一方、誤り検査回路８は、照合した結果、誤りありと判定した場合にはステップＳ９に示すように誤り検出信号を出力する。
【００３４】
図３及び図４では、ＥＥＰＲＯＭ７から正常にデータを読み出す場合で説明した。  
上述したように本実施形態においては、メモリとしてのＥＥＰＲＯＭ７に各データとそのデータに対応する誤り検出符号とが１つシフトした別のメモリアドレスに記憶されている。  
そして、データを読み出す時は、ＥＥＰＲＯＭ７に内に保持されたデータ及び別のメモリアドレスに記憶されている誤り検出符号をそれぞれ読み出した後、両者を照合することにより誤りの有無を検証できるようになっている。  
その為、アタッカーが暗号化鍵の故障利用解析を試みようとして、アドレスデコーダ１２への攻撃を行い、メモリアドレスを改竄した場合でも、誤りとして検知することが可能である。なお、アタッカーが暗号化鍵の故障利用解析を試みようとして、データに対して攻撃を行った場合には、従来例の場合と同様に誤りを検出することができるため、その説明を省略する。
【００３５】
以下、図６を用いて、メモリアドレスの改竄の場合に対する動作を説明する。アタッカーによるアドレスデコーダ１２への攻撃により、メモリアドレスAddrが本来のメモリアドレスAddr01［001］が、例えば２番目のビットが‘1’に固定にされている例で説明する。  
この場合においても、１回目は、図５に示したフローチャートのステップＳ１からの処理に沿って行われる。この場合には、ステップＳ１のＣＰＵ３から出力されるメモリアドレスAddrは、メモリアドレスAddr01［001］である。
【００３６】
そして、このメモリアドレスAddr01［001］が誤り検査回路８のデータ・誤り検出符号保存アドレス制御回路１３に入力される。  
また、このメモリアドレスAddr01［001］は、ＥＥＰＲＯＭ７のアドレスデコーダ１２に出力されるが、図６に示すように２番目のビットが‘1’に固定にされているため、メモリアドレスはAddr03［011］となる。
【００３７】
そして、ＥＥＰＲＯＭ７からメモリアドレスAddr03［011］のデータ組{ Mdata03, EDC(Md02) }が読み出され、誤り検査回路８に格納される。  
上記のようにデータ・誤り検出符号保存アドレス制御回路１３にはメモリアドレスAddr01［001］が入力され、図７に示すようにデータ・誤り検出符号保存アドレス制御回路１３からＣＰＵ３に、誤り検出符号読み出し時のメモリアドレスAddr02［010］が出力される。  
第２回目には、アドレスデコーダ１２の２番目のビットが‘1’に固定にされているため、ＥＥＰＲＯＭ７のメモリアドレスAddr02［010］から対応するデータ組{ Mdata02, EDC(Md02) }が読み出され、誤り検査回路８には、このデータ組{ Mdata02, EDC(Md01) }が格納される。
【００３８】
この場合には、誤り検査回路８は、１回目のデータMdata03と２回目の誤り検出符号EDC(Md01)とで誤りの有無を検査する。そして、この場合には誤り検査回路８は、誤り有りと判定して、誤り検出信号を出力する。  
このように動作する本実施形態によれば、誤り検査回路８により誤りが検出され、誤り検出信号が出力されることから、アタッカーによるメモリアドレスの改竄に対しても検知可能になる。  
また、アタッカーによりメモリアドレスが改竄される場合のような人為的にメモリアドレスが変化する状況の他、単にＩＣが動作中にメモリアドレスにエラーが発生して、メモリアドレスが変化してしまい、誤ったデータを読み込んだ場合にも、同様の動作で誤りを検出することが可能である。
【００３９】
この結果、メモリの信頼性および、故障利用解析といったＩＣカードへの攻撃に対する耐性を向上することができる。  
上述したように本実施形態は、誤り検出符号は、これに対応するデータとは別のメモリアドレスに保持することを特徴としており、図３に示したものに限定されない。図３の場合とは異なるその記憶形態の例を下記の（１）〜（５）により具体的に説明する。  
（１）誤り検出符号を対応するデータの配置に対して、メモリアドレスを全体的にずらして記憶する形態
（１）の形態の例を図８に示す。図８は図３の場合と類似して、データのメモリアドレスの位置に対して、誤り検出符号を記憶するメモリアドレスを全体的にシフトさせた位置に記憶する形態である。
【００４０】
図８の例は、図３の場合と異なる点は、例えば４つのメモリアドレスを１組（周期）としてデータ組が形成されている。この場合には、メモリアドレス[001]〜[011]までは、Mdata00〜Mdata03と、EDC(Md03)、 EDC(Md00) 〜EDC(Md02)とがそれぞれ記憶保持される。また、メモリアドレス[100]〜[111]までは、Mdata04〜Mdata07と、EDC(Md07)、EDC(Md04) 〜EDC(Md06)とがそれぞれ記憶保持される。  
（２）誤り検出符号を対応するデータの配置に対して、逆順になるようにメモリに記憶する形態
（２）の形態の例を図９に示す。各メモリアドレス[000]〜[111]のメモリセルに、データMdata00〜Mdata07が昇順で記憶保持されている。
【００４１】
そして、それぞれのデータに対応する誤り検出符号はメモリアドレス[000]のメモリセルにEDC(Md07)が記憶され、メモリアドレス[001]にはEDC(Md06)が記憶されるというように、対応するデータの配置と逆順になるように記憶する形態である。  
この場合には、データMdataのメモリアドレスをijとすると、対応する誤り検出符号はメモリアドレスが7-(i+j)となり、両者のメモリアドレスの関係として一方のアドレス値の値に依存して他方のアドレス値が変化する。  
つまり、図３で示してように全体的に１つづつ（或いは一定数づつ）メモリアドレス値がシフトするのでなく、一方のメモリアドレス値に応じて、対応する他方のメモルアドレス値が変化するようなメモリアドレスの関係に設定するようにしている。このようにすると、よりデータ保護の機能を向上できる。
【００４２】
（３）誤り検出符号を互いに入れ替えることで、対応するデータの配置と異なるメモリアドレスに記憶する形態
（３）の形態に沿った第１例を図１０に示す。図１０の例は、誤り検出符号とそれに対応するデータが同一のメモリアドレスに記憶されている形態から、奇数メモリアドレスに記憶されている誤り検出符号と偶数メモリアドレスに記憶されている誤り検出符号を互いに入れ替えて記憶するような形態になっている。  
また、このように誤り検出符号を互いに入れ替えるような形態では、図１０に示す例のように一つ一つの誤り検出符号を互いに入れ替える他に、図１１に示す第２例のようにしても良い。
【００４３】
図１１の例では、誤り検出符号をあるまとまった組（この例の場合には、データMd00〜Md03とMd04〜Md07部分に応じて２組に分けている)にして、それぞれの組同士の誤り検出符号を入れ替えることで対応するデータ配置と異なるメモリアドレスに記憶するような形態にしている。  
具体的には、メモリアドレス[001]〜[011]のメモリセルには、EDC(Md04)〜EDC(Md07)が記憶され、メモリアドレス[100]〜[111]のメモリセルには、EDC(Md00)〜EDC(Md03)がそれぞれ記憶されている。  
（４）データ(Mdata)を上位ビット側と下位ビット側とに分割し、分割した一方のデータを別のメモリアドレスに記憶する形態
（４）の形態の例を図１２に示す。図１２では誤り検出符号とそれに対応するデータが同一のメモリアドレスに記憶されている形態から、データMdata00〜Mdata07をそれぞれ上位ビット：Mdata_Uと下位ビット：Mdata_Lに分割している。
【００４４】
そして、上位ビットまたは下位ビットのデータを誤り検出符号EDC(Md00) 〜EDC(Md07)とは別のメモリアドレスに記憶する。  
図１２の具体例では、上位ビットのデータMdata00_U〜Mdata07_Uは、誤り検出符号EDC(Md00) 〜EDC(Md07)と同じメモリアドレスのメモリセルにそれぞれ記憶する。一方、下位ビットのデータに関しては、例えばメモリアドレス[100]〜[111]のメモリセルにMdata07_L 〜Mdata00_Lのように配置して、誤り検出符号EDC(Md00) 〜EDC(Md07)とは別のメモリアドレスに記憶する。  
そして、これらのメモリアドレス関係の情報は、データ・誤り検出符号保存アドレス制御回路１３に保存される。  
データ組の読み出しから誤り検査回路８での照合までの動作は、前述の動作説明と基本的には同様であり、メモリとしてのＥＥＰＲＯＭ７に２回アクセスしてデータ等を読み出す。
【００４５】
１回目の読み出しにより、図１２の下側に示すようにメモリとしてのＥＥＰＲＯＭ７から例えばメモリアドレスAddr01:[001]の上位ビットのデータMdata01_U及び誤り検出符号EDC（Md01）とが読み出されて、誤り検査回路８に格納される。  
そして、２回目の読み出しには、図１３に示すようにＥＥＰＲＯＭ７からメモリアドレスAddr06:[110]の下位ビットのデータMdata01_Lが読み出されて、誤り検査回路８に格納される。なお、１回目から２回目の読み出しの際、データ・誤り検出符号保存アドレス制御回路１３に保存されたメモリアドレス関係の情報により行われる。  
誤り検査回路８は、１回目読み出されたデータMdata01_U及び誤り検出符号EDC（Md01）と２回目のデータMdata01_Lとを用いて照合して誤りの有無を検査する。図１３の場合には、誤り無しとしてデータをバスに出力する。
【００４６】
なお、図１２及び図１３における読み出しでは、誤り検査に必要な情報のみを誤り検査回路８に格納する例で示しているが、図３，図４等で示したようにそれぞれデータ組として読み出し、誤り検査回路８側において、必要なデータ及び誤り検出符号を抽出して誤り検査の照合を行うようにしても良い。  
（５）メモリセル内にデータのみを記憶する領域及び、誤り検査符合のみを記憶する領域をもつ形態
（５）の形態の例を図１４に示す。この記憶形態は、一つのメモリアドレスのメモリセルにデータ組{ Mdata00 , EDC(Md00) }のような、データ+誤り検出符号という形態ではなく、一つのメモリアドレスのメモリセルにはデータのみ、もしくは誤り検出符号のみを記憶する形態である。
【００４７】
図１４の具体例では、メモリアドレスAddr00:［0000］〜Addr07:［0111］の各メモリセルにはデータMdata00〜 Mdata07が記憶され、メモリアドレスAddr08:［1000］〜Addr11:［1011］の各メモリセルには誤り検出符号EDC(Md00)〜 EDC（Md07）が２つづつの組（例えば、Addr08:［1000］にはEDC(Md00), EDC（Md01））で記憶されている。  
読み出しから誤り検査回路８での照合までの動作は、前述の動作説明と基本的にはほぼ同様であり、この場合も読み出し時には２回メモリとしてのＥＥＰＲＯＭ７にアクセスしてデータ等を読み出す。  
図１４に示すように一回目のデータ読み出しでＥＥＰＲＯＭ７からデータMdata01が読み出され、誤り検査回路８に格納される。図１５に示すように２回目の誤り符号読み出しでＥＥＰＲＯＭ７から誤り検出符号EDC(Md01)が読み出されて誤り検査回路８に格納される。そして、誤り検査回路８は、１回目のデータMdata01と誤り検出符号EDC(Md01)を照合する。
【００４８】
この場合の構成においても、アタッカーによるメモリアドレスへの攻撃或いは、メモリアドレスにエラーが発生した場合にも誤り検出ができる。このように（１）、（２）、（３）、（４）、（５）に挙げたデータと誤り検出符号の記憶形態例においても図３及び図４で説明した場合とほぼ同様の効果を有する。  
なお、前述の（１）、（２）、（３）、（４）、（５）に挙げた以外の記憶形態であっても、誤り検出符号を対応するデータと異なるメモリアドレスに記憶するという特徴を満たしていれば、本実施形態と同様の効果を有し、本発明の範疇に属することになる。  
上述したように本実施形態によれば、簡単な構成でメモリに記憶されたデータを保護することができる。より、具体的には、メモリのデータだけでなくメモリアドレスに誤りが発生した場合も誤りの検出が可能となる。  
その結果、このメモリを搭載したＩＣカード等のデバイスにおける故障利用解析などの攻撃に対する耐性、つまり情報の漏洩をより有効に防止でき、その信頼性を向上することができる。
【００４９】
なお、上述の説明においては、メモリからデータ等を複数回読み出す例として２回の場合で説明したが、３回以上の複数回にして、より情報の秘匿性を確保する構成にしても良い。  
例えば、図１２のようにデータを上位ビットと下位ビットに分けて、上位ビットと下位ビットとのデータとも、対応する誤り検出符号を記憶するメモリアドレスとは異なるメモリアドレスに記憶する構成にする。  
このようにすることにより、メモリから３回データや誤り検出符号の読み出しのため、メモリに３回アクセスすることが必要になり、これら３回の読み出しでそれぞれが正しい対応関係の情報が読み出された場合にのみ、誤り無しとしてデータが出力される。このようにして、保護すべきデータの漏洩をより確実に防止できるようにしても良い。
【００５０】
上述した実施形態に対して、公知技術を用いた場合の比較内容を説明する。以下では、特許文献１の場合の特徴を説明する。この特許文献１の場合には、図１６に示すように、メモリはデータ部Mdataとそのデータに対応した誤り検出符号EDC(Md)とが同じメモリアドレスのメモリセルに格納する構造をとる。
【００５１】
各々のメモリのビット幅は、Mdataの1Word分のビットと、対応するMdataのハミング符号をとった検査ビットの和になる。(検査ビットに必要なビット幅はMdataの1Wordのビット幅で決定される。１例としてMdataが8bitの場合、必要検査ビットは4bitになる。)
この手法では例えば、メモリアドレスAddr[001]（ここで、[001]は二進表示）に保持されているMdata01をリードする場合を考えると、メモリアドレス[001]から読み出されたデータ組{ Mdata01, EDC(Md01) }は、誤り検査回路に取り込まれた後、読み出されたデータに対する誤りの有無がチェックされる。
【００５２】
この時、誤り検査回路は、データをチェックして誤りが無ければそのままバスへデータを送るが、もしデータに誤りがあった場合は、誤り検出信号が出力することで、アタッカーによるメモリ内容の改竄を検知する事が可能となる。  
実際に図１７のようにアタッカーがメモリアドレス[001]に保持されているデータMdata01のビットパターンを変更させて改竄した結果、Mdata01 (改竄前) ⇒ Mdata01’ (改竄後)に変化させられたとする。  
この状態でメモリアドレス[001]からデータを読み出すと、データ組{ Mdata01’, EDC(Md01) }が読み出され、誤り検査回路に送られた後、データ照合が実行される。ここで、EDC(Md01)は改竄される前のデータMdata01に対応する誤り検出符号である為、改竄されたデータMdata01’との照合の結果は当然NG(誤り有り)となる。
【００５３】
したがって上記の特許文献１の方法は、図１７のようにメモリのデータ部に対する改竄に対しては誤り検出回路で検知可能である。  
しかし、アタッカーが故障利用解析を試みようとして行う攻撃は、メモリのデータ部のデータを直接改竄する以外にもメモリアドレスを変化させて、正しいメモリアドレスと異なるメモリアドレスにアクセスさせることで、間違ったデータを読み出させる方法もある。  
このアドレスデコーダへ攻撃し不正なデータを読み出して、ＩＣを故障状態に陥らせるような攻撃方法に対しては上記の特許文献１の方法では検知することができないという問題がある。
【００５４】
その例として図１８に示すようにメモリアドレス[001]に保持されているMdata01をリードする時にアタッカーからアドレスデコーダへの攻撃があった場合を考える。  
Mdata01を読み出すためにメモリアドレス[001]が指定されるが、アタッカーによって例えばメモリアドレスの最上位ビットが‘1’に固定にされた場合、メモリアドレスの値は[001]（改竄前）⇒[101]（改竄後） となる。  
そして、本来読み出されるべきメモリアドレス[001]のデータ組{ Mdata01, EDC(Md01) }では無く、実際にメモリから改竄されたアドレス[101]のデータ組{ Mdata05, EDC(Md05) }が読み出されることになる。
【００５５】
この時に読み出されたデータ組{ Mdata05, EDC(Md05) }は、誤り検査回路に取り込まれ、データに誤りがないかをチェックされるが、このデータ自体は改竄されてはおらず、‘EDC(Md05)’も読み出したデータ‘Mdata05’に対応した正しい誤り検出符号である。
【００５６】
この為、このデータ組{ Mdata05, EDC(Md05) }に対する誤り検査回路での照合結果は「誤り無し」となり、誤り検出信号は出力されない。
【００５７】
これに対して上述した本実施形態は、システムが予期しない不正なデータを読み込んだ場合に、その誤りを検出することができる。  
なお、上述した実施形態等を組み合わせる等して構成される実施形態等も本発明に属する。また、上述した実施形態は、以下の構成内容を包含する。
【００５８】
１．第１のアドレスにデータを記憶する第１のメモリと、前記第１のアドレスと所定の関係に設定され、前記第１のアドレスとは異なる第２のアドレスに前記データに対応する誤り検出符号を記憶する第２のメモリと、
前記第１のアドレス及び前記第２のアドレスとのアドレス関係の情報を保存するアドレス保存手段と、
を備えることを特徴とする半導体記憶装置。
【００５９】
２．１の半導体記憶装置において、さらに、前記データ及び前記誤り検出符号とを読み出し、前記データの誤り検査を行う誤り検査手段を備える。  
３．１又は２の半導体記憶装置において、前記第１のメモリ及び前記第２のメモリを含むメモリを有し、前記メモリにおける前記第１のアドレスで指定されるメモリセルは、前記データと、該データとは異なるデータに対応した誤り検出符号とをデータ組として記憶する。  
４．１〜３のいずれかの半導体記憶装置において、前記第１のアドレス及び前記第２のアドレスとのアドレス関係は、一方のアドレスの値が他方のアドレスの値に依存して変化する関係に設定される。  
５．１〜４のいずれかの半導体記憶装置において、前記データと、該データに対応する前記誤り検出符号とは、前記第１のメモリ及び前記第２のメモリに対する複数回の読み出しにより行われる。
【図面の簡単な説明】
【００６０】
【図１】本発明の一実施形態に係る半導体記憶装置を組み込んだＩＣカードチップの構成を示す模式図。
【図２】図１のＩＣカードチップが搭載されたＩＣカード本体の外観を示す図。
【図３】本発明の一実施形態に係る半導体記憶装置の概略の構成をデータ読み出し時の動作説明状態で示す図。
【図４】本発明の一実施形態に係る半導体記憶装置の概略の構成を誤り符号読み出し時の動作説明状態で示す図。
【図５】本発明の一実施形態に係る半導体記憶装置からのデータの読み出しとデータ照合を行う動作内容を示すフローチャート。
【図６】アタッカーによりアドレスデコーダへの攻撃が行われた際の１回目のデータ読み出しの動作説明図。
【図７】アタッカーによるアドレスデコーダへの攻撃が行われた際の２回目の誤り符号読み出し及びデータ照合の動作説明図。
【図８】データ及び誤り検出符号を別のメモリアドレスに記憶する第１の記憶形態例を示す図。
【図９】データ及び誤り検出符号を別のメモリアドレスに記憶する第２の記憶形態例を示す図。
【図１０】データ及び誤り検出符号を別のメモリアドレスに記憶する第３の記憶形態例を示す図。
【図１１】データ及び誤り検出符号を別のメモリアドレスに記憶する第４の記憶形態例を示す図。
【図１２】データの一部及び誤り検出符号を別のメモリアドレスに記憶する第５の記憶形態例及び１回目の読み出しの動作説明図。
【図１３】図１２において２回目の読み出し及びデータ照合の動作説明図。
【図１４】データ及び誤り検出符号を別のメモリアドレスに記憶する第６の記憶形態例及び１回目のデータ読み出しの動作説明図。
【図１５】図１４において、２回目の誤り符号読み出し及びデータ照合の動作説明図。
【図１６】従来例におけるデータと誤り検出符号とが同じメモリアドレスに記憶された構成を示す図。
【図１７】図１６の構成の場合におけるデータのビットパターンを改竄したアタックを行った場合の動作説明図。
【図１８】図１６の構成の場合におけるメモリアドレスを改竄したアタックを行った場合の動作説明図。
【符号の説明】
【００６１】
３…ＣＰＵ
７…ＥＥＰＲＯＭ
８…誤り検査回路
１１…半導体記憶装置
１３…データ・誤り検出符号保存アドレス制御回路
【図１】
2008204084.tif 000003
【図２】
2008204084.tif 000004
【図３】
2008204084.tif 000005
【図４】
2008204084.tif 000006
【図５】
2008204084.tif 000007
【図６】
2008204084.tif 000008
【図７】
2008204084.tif 000009
【図８】
2008204084.tif 000010
【図９】
2008204084.tif 000011
【図１０】
2008204084.tif 000012
【図１１】
2008204084.tif 000013
【図１２】
2008204084.tif 000014
【図１３】
2008204084.tif 000015
【図１４】
2008204084.tif 000016
【図１５】
2008204084.tif 000017
【図１６】
2008204084.tif 000018
【図１７】
2008204084.tif 000019
【図１８】
2008204084.tif 000020