(57)【要約】【課題】メモリのデータだけでなくメモリアドレスに誤りが発生した場合も誤りを検出可能とする半導体記憶装置を提供する。【解決手段】データをメモリとしてのＥＥＰＲＯＭ７における例えばメモリアドレスAddr01のメモリセルに書き込む場合、誤り検査回路８において、そのデータのデータ誤り検出符号と、メモリアドレスAddr01のアドレス誤り符号との演算により、メモリアドレスAddr01に応じて異なる誤り検出符号を生成する。この誤り検出符号はデータと共に同じメモリアドレスAddr01のメモリセルに書き込まれ、データだけでなくメモリアドレスに誤りが発生した場合も誤りを検出可能とする。【選択図】図３
2008204085.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号公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
本発明は上述した点に鑑みてなされたもので、メモリのデータだけでなくメモリアドレスに誤りが発生した場合も誤りを検出可能とする半導体記憶装置を提供することを目的とする。
【課題を解決するための手段】
【００１２】
本発明の一実施形態に係る半導体記憶装置は、データと、前記データに対応する誤り検出符号とをメモリセルに記憶するメモリと、前記データと、該データが記憶されるメモリアドレスの情報とを用いて、前記メモリアドレスに応じて異なる誤り検出符号を生成する演算を行う演算手段と、前記メモリセルに前記誤り検出符号を記憶する手段と、を備えることを特徴とする。
【発明の効果】
【００１３】
本発明によれば、メモリが誤作動し、誤ったデータが出力されたことを検知可能となる。
【発明を実施するための最良の形態】
【００１４】
以下、図面を参照して本発明の実施例を説明する。  
（実施例１）
図１は本発明の実施例１に係る半導体記憶装置を備えたＩＣカードチップ１の構成を示す。このＩＣカードチップ１は、図２に示すように、例えば名刺サイズにしたＩＣカード本体２に搭載されている。  
図１に示すＩＣカードチップ１は、このＩＣカードチップ１全体の動作を制御するＣＰＵ３、コプロセッサ４、ＲＡＭ５、ＲＯＭ６、ＥＥＰＲＯＭ７、誤り検査回路８、入出力部（Ｉ／Ｏ）９がバス１０を介してそれぞれ接続されている。  
コプロセッサ４は、ＣＰＵ３の補助的な機能を有し、ＲＳＡのべき剰余除算等、計算量が多い演算処理を行う。ＲＡＭ５は、ＣＰＵ３が読出し／書込み等の処理を行うワークエリアとして使用されたり、暗号処理中の途中結果などの保持に利用される。ＲＯＭ６は、ＣＰＵ３から読出し可能なメモリであり、暗号処理プログラムなど、ＣＰＵ３の動作制御の為のプログラム等が格納されている。  
ＥＥＰＲＯＭ７は、ＣＰＵ３から読出し／書込みが可能な不揮発性で、かつ電気的に書き換え可能なメモリである。このＥＥＰＲＯＭ７には、暗号処理を行う際に用いられる秘密鍵等の秘匿性を確保すべきデータが、そのデータの誤り検出符号とが別のアドレスとなるようにして格納されている。
【００１５】
誤り検査回路８は、ＥＥＰＲＯＭ７等のメモリから読み出されたデータの誤りの有無を検査する回路である。そして、メモリから読み出されたデータと誤り検出符号は、まずこの誤り検査回路８に取り込まれ、データを誤り検出符号に対応した誤り検出方法で照合（検査）の結果、誤りが発生していなければ、バス１０を介してＣＰＵ３またはコプロセッサ４にそのデータを送る。  
一方、照合の結果、誤りが発生した場合は、誤り検出信号を出力する。そして、ＣＰＵ３等が暗号処理或いは復号処理等を行わせないようにして、データの保護或いはデータの機密性を確保する。  
図３は本実施形態に係る半導体記憶装置１１の構成をデータ書き込み時（但し、このデータ書き込み時におけるデータは、データ及びそのデータに対応する誤り検出符号も含めた意味を持つ）の動作状態で示す。
【００１６】
図３においては、半導体記憶装置１１は、ＣＰＵ３、メモリとしてのＥＥＰＲＯＭ７、誤り検査回路８を含む構成である。ＣＰＵ３と共に、コプロセッサ４を含む構成にしても良い。  
なお、後述するように、この誤り検査回路８内には、メモリにデータと共に誤り検出符号とが記憶されるメモリセルのメモリアドレスを用いて少なくともメモリアドレスに応じて異なる誤り検出符号を生成する演算を行う演算手段と、この演算を符号化とした場合、その復号化となる逆演算を行う逆演算手段とを備えている（具体的な構成例では、共通の演算回路１５により、演算及び逆演算を行う）。  
以下においては、メモリとしてＥＥＰＲＯＭ７の場合で説明するが、ＲＯＭ６やＲＡＭ５に適用してもよい。
【００１７】
図３に示すように、ＥＥＰＲＯＭ７には、保護されるべきデータとそのデータの誤り検出符号とが格納される。ＣＰＵ３は、ＥＥＰＲＯＭ７内のアドレスデコーダ１２を介してＥＥＰＲＯＭ７にデータ及びそのデータに対応する誤り検出符号の書き込み及び読み出しを行う。  
本実施形態においては、ＥＥＰＲＯＭ７にデータとそのデータに対応する誤り検出符号とを書き込む際、図３に示すようにデータに対しては、そのまま書き込む（記憶する）。これに対して、そのデータに対応する誤り検出符号を、そのまま書き込まないで、そのデータが書き込まれるメモリアドレス（のアドレスデータ）の情報を用いて演算を行い、メモリアドレスの値に応じて異なる誤り検出符号が生成されるように変換して、データと同じメモリアドレスのメモリセルに書き込む。
【００１８】
その場合の具体的な演算例としては、データから、そのデータに対応する誤り検出符号と、そのデータが書き込まれるメモリセルのメモリアドレスの誤り検出符号としてのアドレス誤り検出符号とから排他的論理和を生成する演算を行う。  
また、後述するようにＥＥＰＲＯＭ７からデータを、このデータ及びそのメモリアドレスに対応する誤り検出符号と共に読み出した場合、その誤り検出符号に対して上記演算の逆演算を行うことにより、演算前の前記データに対応する誤り検出符号を生成する。  
このようにデータと共に書き込まれる誤り検出符号として、そのデータが書き込まれるメモリアドレスに応じて異なる誤り検出符号を生成して、データと共に書き込む。
【００１９】
これにより、仮にアタッカーが各データが書き込まれているその正しいメモリアドレスとは異なるメモリアドレスを指定するような攻撃を行って、データを得ようと試みても、メモリアドレスが異なるため、生成される誤り検出符号は正しいデータに対応するものと異なる。従って、データと誤り検出符号との照合により、誤り有りを検出することができるようになる。  
このようにメモリアドレスの値に応じて異なる誤り検出符号を生成する演算は、本実施形態においては誤り検査回路８内で行われる。  
図３に示すようにＥＥＰＲＯＭ７に書き込まれるデータ（図３の具体例ではMdata01）は、ＣＰＵ３からバス１０を介して誤り検査回路８に入力され、このデータは例えばデータレジスタ１３ａに格納される。
【００２０】
また、このデータは、データが記憶されるメモリアドレス（図３ではAddr01:[001]）と共に、誤り検出符号生成回路（図３等においては、単にEDC生成と略記）１４に入力される。  
この誤り検出符号生成回路１４は、データに対するデータ誤り検出符号EDC(Md**)を生成する（ここで、**はメモリアドレスの値を示す）。  
生成されたデータ誤り検出符号EDC(Md**)は、データ誤り検出符号レジスタ１３ｂに格納される。また、誤り検出符号生成回路１４は、メモリアドレス（のアドレスデータ）に対するアドレス誤り検出符号EDC(Addr**)も生成する。生成されたアドレス誤り検出符号EDC(Addr**)は、アドレス誤り検出符号レジスタ１３ｃに格納される。
【００２１】
上記データレジスタ１３ａに格納されたデータは、誤り検査回路８からＥＥＰＲＯＭ７に出力され、ＣＰＵ３によりアドレスデコーダ１２を介して指定されたメモリアドレスのメモリセルに書き込まれる。  
一方、データ誤り検出符号レジスタ１３ｂに格納されたデータ誤り検出符号EDC(Md**)と、アドレス誤り検出符号レジスタ１３ｃに格納されたアドレス誤り検出符号EDC(Addr**)は、データ及びメモリアドレスの両誤り検出符号に対する演算手段と（後述する逆演算手段と）して機能する演算回路１５に入力される。  
この演算回路１５は、データ誤り検出符号EDC(Md**)とアドレス誤り検出符号EDC(Addr**)に対して、所定の演算を行い、この演算により符号化された誤り検出符号EDC(Md**・Addr**)を生成する。この演算の１例として例えば排他的論理和を行う。
【００２２】
つまり、排他的論理和の演算符号を ^ で表すと、演算回路１５は、 { EDC(Md) } ^ { EDC(Addr) }の演算を行い、この演算結果の誤り検出符号EDC(Md**・Addr**)を生成する。従って、この場合には、誤り検出符号EDC(Md**・Addr**)は、誤り検出符号EDC(Md** ^Addr**)となる。  
このようにして生成された誤り検出符号EDC(Md**・Addr**)は、誤り検出符号レジスタ１６に格納される。この誤り検出符号レジスタ１６に格納された誤り検出符号EDC(Md**・Addr**)は、データの場合と同様にＥＥＰＲＯＭ７に出力され、データが格納される同じメモリアドレスのメモリセルに書き込まれる。  
図４は、データ書き込みの処理手順を示すフローチャートを示す。
【００２３】
データ書き込みの処理がスタートすると、最初のステップＳ１においてＣＰＵ３から書き込みを行おうとする書き込みデータと、メモリアドレス（のデータ）とが出力される。  ステップＳ２に示すようにＣＰＵ３から出力される書き込みデータと、メモリアドレスとは誤り検査回路８内に格納される。  
ステップＳ３に示すように誤り検査回路８内の誤り検出符号生成回路１４は、書き込みデータからデータ誤り検出符号EDC(Md)を生成する（図４では**を省略している。後述する図６でも同様）。また、ステップＳ４に示すようにこの誤り検出符号生成回路１４は、メモリアドレスからアドレス誤り検出符号EDC(Addr)も生成する。
【００２４】
次のステップＳ５に示すようにこの誤り検出符号生成回路１４により生成されたデータ誤り検出符号EDC(Md)とアドレス誤り検出符号EDC(Addr)は、演算回路１５に入力される。そして、ステップＳ６に示すようにこの演算回路１５は、所定の演算を行い、演算結果として符号化された誤り検出符号EDC(Md・Addr)を生成する。  
ステップＳ７に示すようにステップＳ１の書き込みデータと、ステップＳ６で生成された誤り検出符号EDC(Md・Addr)とからなるデータ組は、ＥＥＰＲＯＭ７に入力され、ＣＰＵ３から出力されるメモリアドレスのメモリセルに書き込まれる。  
また、図５は、半導体記憶装置１１の構成をデータ読み出し時（この場合もこのデータは、データ及びそのデータに対応する誤り検出符号も含めた意味を持つ）の動作状態で示している。
【００２５】
ＣＰＵ３は、データ読み出しのメモリアドレスAddr**をＥＥＰＲＯＭ７のアドレスデコーダ１２及び誤り検査回路８の誤り検出符号生成回路１４に出力する。  
ＥＥＰＲＯＭ７は、ＣＰＵ３から出力されたメモリアドレスAddr**のメモリセルからデータ組（つまりデータMdata**と誤り検出符号EDC(Md**・Addr**)）を読み出す。  
読み出されたデータ組は、誤り検査回路８に格納される。より具体的には、データMdata**はデータレジスタ１３ａに、誤り検出符号EDC(Md**・Addr**)は誤り検出符号レジスタ１６にそれぞれ格納される。  
上記誤り検出符号生成回路１４は、ＣＰＵ３から出力されたメモリアドレスAddr**からアドレス誤り検出符号EDC(Addr**)を生成し、このアドレス誤り検出符号EDC(Addr**)は、アドレス誤り検出符号レジスタ１３ｃに格納される。このアドレス誤り検出符号EDC(Addr**)は、復号化手段として機能する演算回路１５に入力される。
【００２６】
また、誤り検出符号レジスタ１６に格納された誤り検出符号EDC(Md**・Addr**)も演算回路１５に入力される。この演算回路１５は、上述したデータ書き込み時の符号化の演算処理と逆の復号化の演算処理を行い、データに対するデータ誤り検出符号EDC(Md**)を生成する。  
演算回路１５は、例えばデータ書き込み時に排他的論理和の演算処理を行った場合には、逆の演算の処理としてやはり排他的論理和の演算処理を行う。この場合には、演算回路１５は、読み出した誤り検出符号{ EDC(Md01) } ^ { EDC(Addr01) }と、EDC(Addr01)との排他的論理和を計算する。この結果は下式のように変形できる。  
{ EDC(Md01) } ^ { EDC(Addr01) } ^ { EDC(Addr01) } 
= { EDC(Md01) } ^0
=  EDC(Md01) 
演算回路１５による演算処理により生成されたデータ誤り検出符号EDC(Md**)は、誤り検出符号レジスタ１３ｂに格納される。
【００２７】
そして、誤り検査回路８は、データレジスタ１３ａに格納されているデータMdata**と演算回路１５により演算処理で生成されたデータ誤り検出符号EDC(Md**)との照合を行う。  図５の場合は、誤りなく照合できた場合を示し、この場合には照合されたデータMdata**がバス１０に出力される。  
一方、照合により誤り有りと判定された場合には、誤り検査回路８は、誤り検出信号を出力することになる（照合により誤り有りと判定された場合のデータMdata**は、出力されない）。  
このため、アタッカーによる攻撃等により、（本来の正しい条件の下での演算によるデータ以外の情報となる）誤ったデータMdata**が出力されてしまうことを防止できるようにしている。
【００２８】
図６は、データ読み出し時の動作手順を示す。  
データ読み出しが開始すると、ステップＳ１１に示すようにＣＰＵ３からデータ読み出しのメモリアドレスAddr**が出力される。このメモリアドレスAddr**は、ＥＥＰＲＯＭ７及び誤り検査回路８の誤り検出符号生成回路１４に出力される。  
そして、ステップＳ１２に示すようにＥＥＰＲＯＭ７からメモリアドレスAddr**のメモリセルからデータ組（つまりデータMdata**と誤り検出符号EDC(Md**・Addr**)）とが読み出される。  
次のステップＳ１３に示すように読み出されたデータMdata**と誤り検出符号EDC(Md**・Addr**)）は、誤り検査回路８に格納される。この場合、データMdata**はデータレジスタ１３ａに、誤り検出符号EDC(Md**・Addr**)は誤り検出符号レジスタ１６にそれぞれ格納される。
【００２９】
また、ステップＳ１４に示すように（ステップＳ１１において）ＣＰＵ３から出力されたメモリアドレスAddr**は、誤り検出符号生成回路１４に入力され、アドレス誤り検出符号EDC(Addr**)が生成される。  
このアドレス誤り検出符号EDC(Addr**)は、アドレス誤り検出符号レジスタ１３ｃに格納される。そして、ステップＳ１５に示すようにこのアドレス誤り検出符号EDC(Addr**)と誤り検出符号EDC(Md**・Addr**)とは、演算回路１５に入力される。  
ステップＳ１６に示すように演算回路１５は、上述したデータ書き込み時の演算と逆の演算を行い、データに対するデータ誤り検出符号EDC(Md**)を生成（出力）する。このデータ誤り検出符号EDC(MD**)は、誤り検出符号EDC(MD**・Addr**)とは異なり、メモリアドレスAddr**の誤り検出符号は含まれていない。
【００３０】
次のステップＳ１７に示すようにこのデータ誤り検出符号EDC(Md**)は、データレジスタ１３ａに格納されているデータMdata**とで（データ）照合が行われる。そして、ステップＳ１８に示すようにこのデータ照合がＯＫか否かの判定が行われる。  
データ照合がＯＫ、つまり誤りが無い場合にはステップＳ１９に示すようにデータがバス１０に出力される。一方、データ照合がＯＫでないと、ステップＳ２０に示すように誤り検査回路８は、誤り検出信号を出力する。このようにして、図６の処理を終了する。  
このような構成及び動作を行うようにして、アタッカーが半導体記憶装置１１に攻撃を加えて、メモリアドレスが改竄された場合や、メモリアドレスにデータ化けが発生した場合、半導体記憶装置１１は、それを検出することが可能となり、データを保護する。
【００３１】
以下、図７を参照してその動作を説明する。図７の具体的な動作説明例においては、演算回路１５による符号化が排他的論理和による演算の場合として説明する。  
まず図７の例では、アタッカーによりアドレスデコーダ１２における例えば最上位ビットが、‘1’に固定にされた場合を考えており、この時、ＣＰＵ３がデータ‘Mdata01’を読み出す為に、メモリアドレス[001]にアクセスし、データ組 [ Mdata01 , { EDC(Md01) } ^ { EDC(Addr01) } ]を読み出そうとする。  
しかし、アドレスデコーダ１２の最上位ビットが‘1’に固定になっているので、実際にはメモリアドレス[101]にアクセスしてデータ組[ Mdata05 , { EDC(Md05) } ^ { EDC(Addr05) } ]を読み出し、このデータ組が誤り検査回路８に取り込まれることになる。
【００３２】
この時、誤り検査回路８では、以下の(ａ)〜(d)の動作を実行し、読み出したデータを照合し、照合結果に応じた処理をする。  
(a) ＣＰＵ３から入力されたメモリアドレスAddr01：[001]に対して、誤り検査回路８内の誤り検出符号生成回路１４は、メモリアドレスAddrの誤り検出符号EDC(Addr01)を生成する。  
この誤り検出符号EDC(Addr01)は、アドレス誤り検出符号レジスタ１３ｃに格納され、以下の(b)で使用される。  
(b) 誤り検査回路８内の演算回路１５は、ＥＥＰＲＯＭ７から読み出された誤り検出符号{ EDC(Md05) } ^ { EDC(Addr05) }と、(a)で生成された誤り検出符号EDC(Addr01)との排他的論理和の演算を行う。この演算は、符号化の演算を行った場合の逆演算であり、復号化の演算に相当する。この時の計算結果は下式のようになる。
【００３３】
{ EDC(Md05) } ^ { EDC(Addr05) } ^ { EDC(Addr01) } 
(c) また、誤り検査回路８は、ＥＥＰＲＯＭ７から読み出され、誤り検査回路８内に格納されたデータMdata05と、(b)の計算で得られた{ EDC(Md05) } ^ { EDC(Addr05) } ^ { EDC(Addr01) }を照合し、誤りが無いかを検証する。この場合、
{ EDC(Addr05) } ≠ { EDC(Addr01) }
であるので、
{ EDC(Md05) } ^ { EDC(Addr05) } ^ { EDC(Addr01) }≠EDC(Md05) 
となり、照合の結果は誤りが有りとなる。  
(d)そして誤り検査回路８は、誤り検出信号を出力することになる。
【００３４】
このようにして誤ったメモリアドレスがメモリに対して指示された場合、そのメモリとしてのＥＥＰＲＯＭ７からデータが読み出されると、誤り検査回路８により、誤りとして検出することが可能である。  
この結果、メモリの信頼性および、故障利用解析といった本半導体記憶装置１１が搭載されたＩＣカード等への攻撃に対する耐性を向上することができる。  
なお、本実施形態においては、データを改竄した場合には、照合によりそのデータ誤り検出符号とは一致しないということが明らかであるため、その詳しい動作説明を省略する。
【００３５】
また、本実施形態で適用可能な誤り検出符号は、パリティ符号やハミング符号、ＣＲＣ符号などデータの誤りを検出できる方式であれば良く、誤り検出方式に限定されない。  
演算回路１５による符号化の演算及び復号化の演算の１例として、排他的論理和の演算例で説明した。この場合には、符号化の演算と、その復号化の演算を共通の排他的論理和演算で行うことができる利点がある。また、簡単な処理で実現できる。
【００３６】
なお、上記のように演算回路１５による符号化の演算及び復号化の演算の１例として、排他的論理和の演算例で説明したが、本実施形態はこれに限定されるものでない。  
演算回路１５により、ある符号化の演算を行って誤り検出符号を生成した場合、その誤り検出符号とアドレス誤り検出符号を用いてデータの誤り検出符号を生成することができる任意の演算を利用することができる。  
簡単な例としては、例えば演算回路１５は、データ書き込み時にはデータの誤り検出符号からメモリアドレスの誤り検出符号を減算する演算を行い、メモリアドレスの値に応じて異なる誤り検出符号を生成し、データ読み出し時にはこの誤り検出符号からメモリアドレスの誤り検出符号を加算する（前記演算の）逆演算を行うようにしても良い。この場合にも、メモリアドレスを改竄してデータを読み出そうとしてもメモリアドレスが異なることにより、照合によりその誤りを検出できる。
【００３７】
このため、本実施形態によれば、アタッカーによる攻撃等により、（本来の正しい条件の下での演算によるデータ以外の情報となる）誤ったデータMdata**が出力されてしまうことを防止できる。  
また、アタッカーによりメモリアドレスが改竄される場合のような人為的にメモリアドレスが変化する状況の他、単にＩＣが動作中にメモリアドレスでエラーが発生して、メモリアドレスが変化してしまい、誤ったデータを読み込んだ場合にも、同様の動作で誤りを検出することが可能である。
【００３８】
上述した実施形態に対して、公知技術を用いた場合の比較内容を説明する。以下では、特許文献１の場合の特徴を説明する。この特許文献１の場合には、図８に示すように、メモリはデータ部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) }に対する誤り検査回路での照合結果は「誤り無し」となり、誤り検出信号は出力されない。
【００４５】
これに対して上述した本実施形態は、システムが予期しない不正なデータを読み込んだ場合に、その誤りを検出することができる。
【図面の簡単な説明】
【００４６】
【図１】本発明の一実施形態に係る半導体記憶装置を組み込んだＩＣカードチップの構成を示す模式図。
【図２】図１のＩＣカードチップが搭載されたＩＣカード本体の外観を示す図。
【図３】本発明の一実施形態に係る半導体記憶装置の概略の構成をデータ書き込み時の動作説明状態で示す図。
【図４】図３のデータ書き込み時の動作内容を示すフローチャート。
【図５】本発明の一実施形態に係る半導体記憶装置の概略の構成をデータ読み出し時の動作説明状態で示す図。
【図６】図５のデータ読み出し及び照合の動作内容を示すフローチャート。
【図７】アタッカーによりアドレスデコーダへの攻撃が行われた際のデータ読み出し及び照合の動作説明図。
【図８】従来例におけるデータと誤り検出符号とが同じメモリアドレスに格納された構成を示す図。
【図９】図８の構成の場合におけるデータのビットパターンを改竄したアタックを行った場合の動作説明図。
【図１０】図８の構成の場合におけるメモリアドレスを改竄したアタックを行った場合の動作説明図。
【符号の説明】
【００４７】
３…ＣＰＵ
７…ＥＥＰＲＯＭ
８…誤り検査回路
１１…半導体記憶装置
１４…誤り検出符号生成回路
１５…演算回路
【図１】
2008204085.tif 000003
【図２】
2008204085.tif 000004
【図３】
2008204085.tif 000005
【図４】
2008204085.tif 000006
【図５】
2008204085.tif 000007
【図６】
2008204085.tif 000008
【図７】
2008204085.tif 000009
【図８】
2008204085.tif 000010
【図９】
2008204085.tif 000011
【図１０】
2008204085.tif 000012