(57)【要約】【課題】集積回路のメモリコンテンツを保護するシステム及び方法を提供する。【解決手段】本発明は、メモリと、メモリコンテンツ認証機能と、エラー訂正機能とを含む集積回路を備える自己訂正メモリシステムを提供する。認証機能は、認証待ちコンテンツと標準コンテンツとを比較し、両者が同じであると、「正しい」ことを出力し、その以外の場合は、「正しくない」ことを出力する。訂正機能は、メモリにおける少なくとも１つの誤りのある文字エンティティに対して少なくとも一種の可能な訂正を行い、正しいと思われる文字エンティティを生成し、認証機能を呼び出して、正しいと思われる文字エンティティに適用し、検証された出力が「正しい」である場合、メモリにおける誤りのある文字エンティティを正しいと思われる文字エンティティに置き換えて、メモリコンテンツ認証機能に関連する信頼レベルから導出された信頼レベルでエラー訂正を生成する。【選択図】図１
2020195134.tif 000002
【特許請求の範囲】
【請求項１】
メモリと、メモリコンテンツ認証機能ユニットと、エラー訂正機能ユニットとを含む集積回路と、
を備え、
前記メモリは、メモリコンテンツを記憶し、
前記メモリコンテンツ認証機能ユニットは、認証待ちメモリコンテンツと標準コンテンツとを比較し、前記認証待ちメモリコンテンツが前記標準コンテンツと同じである場合、「正しい」ことを出力し、前記認証待ちメモリコンテンツが前記標準コンテンツと同じではない場合、「正しくない」ことを出力し、
前記エラー訂正機能ユニットは、少なくとも１つの可能な訂正を前記メモリにおける少なくとも１つの誤りのある文字エンティティに適用して、正しいと思われる文字エンティティを生成し、前記メモリコンテンツ認証機能ユニットを呼び出して、文字認証を前記正しいと思われる文字エンティティに適用し、前記メモリコンテンツ認証機能ユニットの出力が「正しい」である場合、前記メモリにおける前記誤りのある文字エンティティを前記正しいと思われる文字エンティティに置き換えて、前記メモリコンテンツ認証機能ユニットに関連する信頼レベルから導出された信頼レベルでエラー訂正を生成することを特徴とする自己訂正メモリシステム。
【請求項２】
前記メモリコンテンツ認証機能ユニットは、暗号化された強力な認証を実行するように作動することを特徴とする請求項１に記載の自己訂正メモリシステム。
【請求項３】
前記メモリコンテンツ認証機能ユニットは、文字認証を実行するように作動することを特徴とする請求項２に記載の自己訂正メモリシステム。
【請求項４】
前記エラー訂正機能ユニットは、
前記少なくとも１つの可能な訂正を前記メモリにおける少なくとも１つの誤りのある文字に適用して、正しいと思われる文字を生成し、
前記メモリコンテンツ認証機能ユニットを呼び出して、前記文字認証を前記正しいと思われる文字に適用し、
前記メモリコンテンツ認証機能ユニットの出力が「正しい」である場合、前記暗号化された強力な認証を呼び出して、前記正しいと思われる文字を含むメモリイメージ又はチャンク全体に適用し、
前記暗号化された強力な認証の出力が「正しい」である場合、前記メモリにおける前記少なくとも１つの誤りのある文字を前記正しいと思われる文字に置き換えて、前記暗号化された強力な認証及び前記文字認証の少なくとも一方に関連する信頼レベルから導出された信頼レベルで前記エラー訂正を実行するように配置されることを特徴とする請求項３に記載の自己訂正メモリシステム。
【請求項５】
前記文字認証を前記メモリにおける少なくとも１つの文字に適用することで、前記少なくとも１つの誤りのある文字を検出し、
「正しくない」の出力を生成する任意の文字は誤りがあると見なされ、「正しい」の出力を生成する任意の文字は誤りがないと見なされることを特徴とする請求項４に記載の自己訂正メモリシステム。
【請求項６】
前記少なくとも１つの可能な訂正は、
前記誤りのある文字エンティティにおける少なくとも１ビットを０から１にまたは１から０にフリップすることを含むことを特徴とする請求項１に記載の自己訂正メモリシステム。
【請求項７】
前記可能な訂正が複数の誤りのある文字に適用されて、前記複数の正しいと思われる文字を生成し、それに、前記暗号化された強力な認証を何度も呼び出して前記複数の正しいと思われる文字をそれぞれ含む複数のメモリイメージ又はチャンクに適用するのではなく、前記暗号化された強力な認証を一度呼び出して訂正されたメモリイメージ又はチャンクに適用して、前記訂正されたメモリイメージ又はチャンクにおける全ての前記複数の誤りのある文字をそれぞれ前記正しいと思われる文字に置換して、メモリ及び訂正時間の少なくとも一方を節約することを特徴とする請求項２に記載の自己訂正メモリシステム。
【請求項８】
第１の可能な訂正及び第２の可能な訂正は、少なくとも１つの誤りのある文字に適用され、前記第１の可能な訂正で前記誤りのある文字におけるフリップされた任意のビットは、前記第２の可能な訂正が前記誤りのある文字に適用される前にフリップされないため、前記第２の可能な訂正を同じ前記誤りのある文字に適用する前に、前記誤りのある文字の前記第１の可能な訂正を元に戻すことを特徴とする請求項１に記載の自己訂正メモリシステム。
【請求項９】
全ての前記可能な訂正が前記少なくとも１つの誤りのある文字に適用されることを特徴とする請求項８に記載の自己訂正メモリシステム。
【請求項１０】
全ての前記可能な訂正が適用される前記誤りのある文字は、
全ての前記可能な訂正が前記誤りのある文字に適用されても、正しい文字認証を生成できない訂正不可能と見なされる誤りのある文字を含むことを特徴とする請求項９に記載の自己訂正メモリシステム。
【請求項１１】
全ての前記可能な訂正より少ない訂正を含む前記可能な訂正のサブセットを判定するために、少なくとも１つのヒューリスティック法を採用し、
前記サブセットには，正しい前記文字認証をもたらす前記可能な訂正がなくても、前記サブセットにおける前記可能な訂正が前記少なくとも１つの誤りのある文字に適用されることを特徴とする請求項８に記載の自己訂正メモリシステム。
【請求項１２】
前記メモリコンテンツと前記標準コンテンツとを比較して認証する前記メモリコンテンツ認証機能ユニットは、時点ｔ２で特定のメモリ位置に記憶される前記メモリコンテンツに前記暗号化された強力な認証を適用して、計算された認証値を生成し、且つ前記計算された認証値と期待される認証値とを比較し、
前記時点ｔ２よりも前の時点ｔ１で、前記メモリコンテンツの信頼性が正しいと判定された場合、前記暗号化された強力な認証を前記特定のメモリ位置における前記メモリコンテンツに適用して、前記期待される認証値を生成することを特徴とする請求項２に記載の自己訂正メモリシステム。
【請求項１３】
前記エラー訂正機能ユニットは、少なくとも１つの可能な訂正を前記メモリにおける少なくとも１つの誤りのある文字に適用し、１つの正しいと思われる文字を生成し、前記メモリコンテンツ認証機能ユニットを呼び出して、前記正しいと思われる文字に認証を適用し、前記メモリコンテンツ認証機能ユニットの出力が「正しい」である場合、前記メモリにおける前記誤りのある文字を前記正しいと思われる文字に置換することを特徴とする請求項１に記載の自己訂正メモリシステム。
【請求項１４】
前記エラー訂正機能ユニットは、少なくとも１つの可能な訂正を少なくとも１つの誤りのある文字エンティティの文字認証に適用し、１つの正しいと思われる文字エンティティを生成し、前記メモリコンテンツ認証機能ユニットを呼び出して、前記正しいと思われる文字エンティティに認証を適用し、前記メモリコンテンツ認証機能ユニットの出力が「正しい」である場合、前記メモリにおける前記誤りのある文字エンティティの文字認証を前記正しいと思われる文字エンティティの文字認証に置換することを特徴とする請求項１に記載の自己訂正メモリシステム。
【請求項１５】
前記時点ｔ１は、前記メモリのファームウェア更新が発生した時点であることを特徴とする請求項１２に記載の自己訂正メモリシステム。
【請求項１６】
前に順序付けられた前記能な訂正が後に順序付けられた前記能な訂正よりも事前に訂正される可能性が高くなって、所望の合計修正時間を短縮するように、少なくとも１つのヒューリスティック法を採用して、前記可能な訂正が順序付けられることを特徴とする請求項１に記載の自己訂正メモリシステム。
【請求項１７】
集積回路のターゲットメモリに常駐するメモリコンテンツにエラー訂正機能を提供する方法であって、
前記ターゲットメモリに常駐する前記メモリコンテンツのエラーを検出することと、
それぞれが前記エラーの可能な訂正からなる少なくともいくつかのビット置換によって、少なくとも１つのオンザフライシグネチャマッチを検索して、強力な認証を成功させる提案の訂正を定義することと、
前記少なくとも１つのオンザフライシグネチャマッチを見つけると、前記提案された訂正の最終検証として全体的な認証を使用することと、
前記最終検証に成功すると、パワーフェイルセーフコードリカバリ更新プロセスを使用して、前記エラーを訂正するため、前記ターゲットメモリにエラー訂正を提供して、前記ターゲットメモリをラボに持ち込む必要がないことと、
を含むことを特徴とする方法。
【請求項１８】
メモリの訂正ニーズの出力指示を提供し、前記メモリコンテンツの訂正が既に失敗した場合、出力指示は、前記少なくとも１つのターゲットメモリをラボに持ち込んで、完全に再プログラミングするように指示することとを更に含むことを特徴とする請求項１７に記載の方法。
【請求項１９】
前記出力指示を提供する前に、前記検索は前記エラーのシングルビット置換のみに対して実行されることを特徴とする請求項１８に記載の方法。
【請求項２０】
前記出力指示を提供する前に、前記検索は前記エラーの全てのシングルビット置換及びダブルビット置換に対して実行されることを特徴とする請求項１８に記載の方法。
【請求項２１】
前記出力指示を提供する前に、前記検索は前記エラーの全てのシングルビット置換に対して実行され、前記少なくとも１つのオンザフライシグネチャマッチを見つけないと、今回の前記検索は前記エラーの少なくともいくつかのダブルビット置換に対して再度実行されることを特徴とする請求項１８に記載の方法。
【請求項２２】
前記検出の前に、前記強力な認証を一度実行し及びオンザフライの文字認証を実行して、前記ターゲットメモリに常駐する前記メモリコンテンツを保護することとを更に含むことを特徴とする請求項１７に記載の方法。
【請求項２３】
前記強力な認証は、前記集積回路がアクティブでない状態からウェイクアップされた直後に実行される前記強力な認証を含むことを特徴とする請求項２２に記載の方法。
【請求項２４】
前記強力な認証は、前記集積回路の起動の直後に実行される前記強力な認証を含むことを特徴とする請求項２３に記載の方法。
【請求項２５】
前記強力な認証は、前記集積回路がスリープ状態を終了した直後に実行される前記強力な認証を含むことを特徴とする請求項２３に記載の方法。
【請求項２６】
前記メモリコンテンツは、前記ターゲットメモリに記憶されたコードを含むことを特徴とする請求項２３に記載の方法。
【請求項２７】
前記出力指示を提供する前に、前記検索は前記エラーのシングルビット置換に対して何度も実行されることを特徴とする請求項１８に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、集積回路に関わり、特に、集積回路（ＩＣ）のメモリコンテンツを保護するシステム及び方法に関する。
【背景技術】
【０００２】
本発明の一般的な分野における従来のシステムには、以下の特許文献が含まれる、
ＵＳ６８３８３３１Ｂ２、ＵＳ９５２５５４６Ｂ２、ＵＳ２００７００８９０３４Ａ１、ＵＳ２００８０１６８３１９Ａ１、ＵＳ２００９０１６４７０４Ａ１、ＵＳ２００８０２２２４９１Ａ１、ＵＳ７２６６７４７Ｂ２、ＵＳ２００６０２５６６１５Ａ１、ＵＳ７９３７６３９Ｂ２（Ｉｎｆｉｎｅｏｎ  ２００６）、ＵＳ２０１７０２５５５１２Ａ１、ＵＳ１００２６４８８Ｂ２（Ｓａｎｄｉｓｋ）、ＵＳ２０１８０２３９６６５Ａ１、ＵＳ２０１８０２４６７８３Ａ１（Ｓａｎｄｉｓｋ  ２０１６）及びＵＳ２０１８００９１３０８（Ｄｕｒｈａｍ）。
【０００３】
ウィキペディア（Ｗｉｋｉｐｅｄｉａ）のデータ整理に関する項目（ｈｔｔｐｓ：／／ｅｎ．ｗｉｋｉｐｅｄｉａ．ｏｒｇ／ｗｉｋｉ／Ｄａｔａ＿ｓｃｒｕｂｂｉｎｇ）は、データの完全性（データの破損を減らす）が重要であると述べる。例えば、メモリ、ディスクアレイ、ファイルシステム、ＦＰＧＡ又はその他の場所でのデータの書き込み、読み取り、記憶、送信及び処理を行うように構成されたオペレーティングシステム、ストレージシステム又はデータ送信システムにおけるハードウェア又はソフトウェアの障害を防ぐために使用される。完全性を促進するために、データの不一致をチェックすることにより、データ整理を実行する。データ整理はエラー訂正の一種であり、バックグラウンドタスクを使用してメモリのチェック及びエラーの検出を定期的に行う、その後、使用可能な冗長データ（例えば、エラーが検出されたデータのチェックサム及び／又はコピー）を使用して、検出されたエラーを訂正する。データ整理を実行しないと、訂正可能な単一のエラーは、複数の訂正不可能なエラーに蓄積する傾向があるため、データエラーが訂正できるほど小さい時にデータ整理を実行することは有益である。
【０００４】
本明細書で記載された全ての刊行物と特許文献、及びそこに直接的または間接的に引用された刊行物及び特許文献の開示は、それぞれに参照により本明細書に組み込まれる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】ＵＳ６８３８３３１Ｂ２
【特許文献２】ＵＳ９５２５５４６Ｂ２
【特許文献３】ＵＳ２００７００８９０３４Ａ１
【特許文献４】ＵＳ２００８０１６８３１９Ａ１
【特許文献５】ＵＳ２００９０１６４７０４Ａ１
【特許文献６】ＵＳ２００８０２２２４９１Ａ１
【特許文献７】ＵＳ７２６６７４７Ｂ２
【特許文献８】ＵＳ２００６０２５６６１５Ａ１
【特許文献９】ＵＳ７９３７６３９Ｂ２（Ｉｎｆｉｎｅｏｎ  ２００６）
【特許文献１０】ＵＳ２０１７０２５５５１２Ａ１
【特許文献１１】ＵＳ１００２６４８８Ｂ２（Ｓａｎｄｉｓｋ）
【特許文献１２】ＵＳ２０１８０２３９６６５Ａ１
【特許文献１３】ＵＳ２０１８０２４６７８３Ａ１（Ｓａｎｄｉｓｋ  ２０１６）
【特許文献１４】ＵＳ２０１８００９１３０８（Ｄｕｒｈａｍ）
【非特許文献】
【０００６】
【非特許文献１】ウィキペディア（Ｗｉｋｉｐｅｄｉａ）のデータ整理に関する項目（ｈｔｔｐｓ：／／ｅｎ．ｗｉｋｉｐｅｄｉａ．ｏｒｇ／ｗｉｋｉ／Ｄａｔａ＿ｓｃｒｕｂｂｉｎｇ）
【発明の概要】
【発明が解決しようとする課題】
【０００７】
本発明の目的は、集積回路（ＩＣ）のメモリコンテンツを保護するシステム及び方法を提供することである。
【課題を解決するための手段】
【０００８】
いくつかの実施例は、エラーを識別するだけでなく、様々な可能な訂正を認証する（又は認証しない）ために、メモリ認証機能（ｍｅｍｏｒｙ  ａｕｔｈｅｎｔｉｃａｔｉｏｎ  ｆｕｎｃｔｉｏｎａｌｉｔｙ）を使用して、メモリエラーの可能な訂正をテストするシステムを提供する。
【０００９】
いくつかの実施例は、少なくとも１つの可能なエラー訂正を適用し、集積回路の既存の検証機能を使用して、この可能なエラー訂正が正しいかどうかを認証することを含むエラー訂正方法を提供する。
【００１０】
いくつかの実施例は、従来のエラー訂正のソリューションとは異なり、メモリのコストを増加させないエラー訂正のソリューションを提供する（エラー訂正コード（ｅｒｒｏｒ  ｃｏｒｒｅｃｔｉｏｎ  ｃｏｄｅ，ＥＣＣ）に対して、ｙ個のデータ量ごとにｘビットを記憶する必要がある）。これは、データの「評価」が従来機能の検証を利用するためであり、例えば、セキュリティと完全性を感知する（ｓｅｃｕｒｉｔｙ−ａｎｄ  ｉｎｔｅｇｒｉｔｙ−ａｗａｒｅ）メモリ管理は、必然的にその自体のオーバーヘッドを伴い、且つ本明細書で説明するようにこれを利用してエラー訂正を行い、この結果、通常は検証以外のオーバーヘッドが必要ない。
【００１１】
本明細書の実施例の適用性は、特に、プロセッサ及びメモリを有する任意の機能を実行する任意の一般的なマイクロコントローラまで広げる。これらの機能は通常、プロセッサにより実行されるファームウェア（ｆｉｒｍｗａｒｅ，ＦＷ）によって作動され、ＦＷは、メモリに常駐し、その自体が、保護を求めるメモリコンテンツに含まれる可能性がある。
【００１２】
本明細書のいくつかの実施例は、レガシーＩＣと共に使用されることができる同時に、レガシーＩＣ自体のレガシー検証（ｌｅｇａｃｙ  ａｕｔｈ）の一部を利用し、その暗号計算がハードウェア（ｈａｒｄｗａｒｅ，ＨＷ）又はファームウェアで行うことができる。通常、検証ダイジェストを記憶するためのハードウェアを提供し、通常のＣＰＵ命令を使用するファームウェアを使用することも、ハードウェアアクセラレータを使用することもできる。例えば、ハッシュベースのメッセージ検証コード（Ｈａｓｈ−ｂａｓｅｄ  ｍｅｓｓａｇｅ  ａｕｔｈｅｎｔｉｃａｔｉｏｎ  ｃｏｄｅ，ＨＭＡＣ）を強力な認証に使用し、レガシーＩＣがＨＭＡＣを実行するために作動する暗号化されたハードウェアの一部を有する場合、レガシーハードウェアが対象ＩＣのプロセッサのアクセスに使用できれば、これによって、プロセッサが実行しているファームウェアにアクセス可能な場合、ファームウェアはレガシーＩＣで当該レガシーハードウェアを利用できる。
【００１３】
追加的または代替的に、ＩＣのレガシーハードウェア及び／又はファームウェアのアクセス制御機能を採用できる。
【００１４】
追加的または代替的に、本明細書の実施例は、既存のＩＣのレガシーハードウェア及び／又はファームウェアを採用せずに、適切なファームウェアで本明細書に記載される機能の一部又は全部を実施し、そのファームウェアが既存のＩＣのレガシーファームウェアの可変コード（ｍｕｔａｂｌｅ  ｃｏｄｅ）に追加される。
【００１５】
従って、少なくとも以下の実施例を提供する。
【００１６】
実施例１
メモリと、メモリコンテンツ認証機能と、エラー訂正機能とを含む集積回路と、を備え、
メモリコンテンツ認証機能は、認証待ちメモリコンテンツと標準コンテンツとを比較し、認証待ちメモリコンテンツが標準コンテンツと同じであると認証された場合、メモリコンテンツ認証機能は、「正しい（ａｕｔｈｅｎｔｉｃ）」ことを出力し、そうでない場合は「正しくない（ｎｏｎ−ａｕｔｈｅｎｔｉｃ）」ことを出力し、
エラー訂正機能は、少なくとも１つの可能な訂正をメモリにおける少なくとも１つの誤りのある文字エンティティ（ｅｒｒｏｎｅｏｕｓ  ｗｏｒｄ  ｅｎｔｉｔｙ）に適用して、正しいと思われる文字エンティティを生成し、メモリコンテンツ認証機能を呼び出して、正しいと思われる文字エンティティに適用し、メモリコンテンツ認証機能の出力が「正しい」である場合、メモリにおける誤りのある文字エンティティを正しいと思われる文字エンティティに置き換えて、認証に関連する信頼レベルから導出された信頼レベルに達するエラー訂正を生成することを特徴とする自己訂正メモリシステム。
【００１７】
認証待ちコンテンツを標準コンテンツと比較することは、実際の生のコンテンツを直接比較するのではなく、通常、そのダイジェストなどの認証待ちコンテンツのいくつかの派生物を計算し、その派生物を標準コンテンツと比較する。
【００１８】
実施例２
上述の実施例のいずれかに記載のシステムによると、認証機能は、暗号化された強力な認証を実行するように作動できる。
【００１９】
実施例３
上述の実施例のいずれかに記載のシステムによると、認証機能は、文字認証を実行するように作動してもい。
【００２０】
実施例４
上述の実施例のいずれかに記載のシステムによると、エラー訂正機能は、少なくとも１つの可能な訂正をメモリにおける少なくとも１つの誤りのある文字に適用して、正しいと思われる文字を生成し、文字認証を呼び出して正しいと思われる文字に適用し、文字認証の出力が「正しい」である場合、強力な認証を呼び出して、正しいと思われる文字に適用し、強力な認証の出力が「正しい」である場合、メモリにおける誤りのある文字をこの正しいと思われる文字に置き換えて、強力な認証及び文字認証に関連する信頼レベルから導出された信頼レベルに達するエラー訂正を生成するように配置される。
【００２１】
実施例５
上述の実施例のいずれかに記載のシステムによると、文字認証をメモリにおける少なくとも１つの文字に適用することで、前記誤りのある文字を検出し、「正しくない」の出力を生成する任意の文字は誤りがあると見なされ、「正しい」の出力を生成する任意の文字は誤りがないと見なされる。
【００２２】
実施例６
上述の実施例のいずれかに記載のシステムによると、少なくとも１つの可能な訂正は、誤りのある文字エンティティにおける少なくとも１ビットを０から１にまたは１から０にフリップする（ｆｌｉｐ）ことを含む。
【００２３】
実施例７ａ
上述の実施例のいずれかに記載のシステムによると、可能な訂正が複数の誤りのある文字に適用されて、複数の正しいと思われる文字を生成する。それに、強力な認証を何度も呼び出して複数の正しいと思われる文字をそれぞれ含む複数のメモリイメージ又はチャンクに適用するのではなく、強力な認証を一度呼び出して訂正されたメモリイメージ又はチャンクに適用して、訂正されたメモリイメージ又はチャンクにおける全ての複数の誤りのある文字をそれぞれ正しいと思われる文字に置換、この結果、メモリ及び／又は訂正時間を節約する。
【００２４】
実施例７ｂ
上述の実施例のいずれかに記載のシステムによると、可能な訂正が複数の誤りのある文字に適用されて、複数の正しいと思われる文字を生成する。また、強力な認証を何度も呼び出して複数の正しいと思われる文字をそれぞれ含む複数のメモリイメージ又はチャンクに適用するのではなく、強力な認証を一度呼び出して複数の正しいと思われる文字の全てに適用し、この結果、メモリ及び／又は訂正時間を節約する。
【００２５】
実施例８
上述の実施例のいずれかに記載のシステムによると、第１の可能な訂正及び第２の可能な訂正は、少なくとも１つの誤りのある文字に適用され、第１の可能な訂正で誤りのある文字におけるフリップされた任意のビットは、第２の可能な訂正が誤りのある文字に適用される前にフリップされない、これにより、第２の可能な訂正を同じ誤りのある文字に適用する前に、誤りのある文字の第１の可能な訂正を取り消す（ｕｎｄｏ）。
【００２６】
実施例９
上述の実施例のいずれかに記載のシステムによると、全ての可能な訂正が少なくとも１つの誤りのある文字に適用される。
【００２７】
実施例１０
上述の実施例のいずれかに記載のシステムによると、全ての可能な訂正が適用される誤りのある文字は、訂正不可能な誤りのある文字を含む。当該訂正不可能な誤りのある文字は、全ての可能な訂正を試みたが、まだ正しい文字認証に失敗ため、訂正不可能（ｕｎｃｏｒｒｅｃｔａｂｌｅ）と見なされる。
【００２８】
実施例１１
上述の実施例のいずれかに記載のシステムによると、全ての可能な訂正より少ない訂正を含む可能な訂正のサブセットを判定するために、少なくとも１つのヒューリスティック法（ｈｅｕｒｉｓｔｉｃ）を採用し、ここで、サブセットには，正しい文字認証をもたらす可能な訂正がなくても、サブセットにおける可能な訂正が少なくとも１つの誤りのある文字に適用される。
【００２９】
特定の使用例で正しい訂正をより早く見つけるために、ヒューリスティック法を使用して候補訂正（可能な訂正とも呼ぶ）のサブセットを生成したり、候補訂正に優先順位（ｐｒｉｏｒｉｔｉｚｅ）を付けたりすることができ、可能性の低い訂正は後でのみテストされる（例えば、可能性のより高い訂正が検証に失敗場合のみ）。
【００３０】
通常、優先する可能な訂正の特定のサブセットが検証に失敗と、システムは残りの可能な訂正を実行しない（事前に検証に成功する可能性が低いと見なされるため、低い優先度と見なされる）。
【００３１】
実施例１２
上述の実施例のいずれかに記載のシステムによると、認証待ちメモリコンテンツと標準コンテンツとを比較することは、時点ｔ２で特定のメモリ位置に記憶されている認証待ちメモリコンテンツに強力な認証を適用して、計算された認証値を生成し、且つこの計算された認証値と記憶された結果とを比較することである。記憶された結果は、期待される認証値とも呼ばれ、期待される認証値は、前記時点ｔ２よりも前の時点ｔ１で特定のメモリ位置のメモリコンテンツに強力な認証を適用することで生成される。
【００３２】
実施例１３
集積回路のターゲットメモリ（不揮発性または揮発性）に常駐するメモリコンテンツにエラー訂正機能を提供する方法であり、この方法は少なくとも以下のステップを含む、
（ｂ）ターゲットメモリに常駐するメモリコンテンツのエラーを検出する。
（ｃ）それぞれがエラーの可能な訂正からなる少なくともいくつかのビット置換によって、少なくとも１つのオンザフライシグネチャマッチ（ｏｎ−ｔｈｅ−ｆｌｙ  ｓｉｇｎａｔｕｒｅ  ｍａｔｃｈ）を検索して、強力な認証を成功させる提案の訂正を定義する。
（ｄ）少なくとも１つのオンザフライシグネチャマッチを見つけると、提案された訂正の最終検証として全体的な認証を使用する。
（ｅ）コードを修正して最終検証に成功するために、パワーフェイルセーフコードリカバリ更新プロセス（ｐｏｗｅｒ−ｆａｉｌ  ｓａｆｅ  ｃｏｄｅ  ｒｅｃｏｖｅｒｙ  ｕｐｄａｔｅ  ｐｒｏｃｅｓｓ）を使用する場合、ターゲットメモリをラボに持ち込む必要がない。
【００３３】
実施例１４
上述の実施例のいずれかに記載の方法によると、メモリの訂正ニーズを示す出力指示を提供することをさらに含む。例えば、メモリコンテンツの訂正は既に失敗したため、少なくとも１つのターゲットメモリをラボに持ち込んで完全な再プログラミングする必要がある。
【００３４】
実施例１５
上述の実施例のいずれかに記載の方法によると、出力指示を提供する前に、検索がエラーのシングルビット置換（ｓｉｎｇｌｅ−ｂｉｔ  ｐｅｒｍｕｔａｔｉｏｎ）のみに対して実行される。
【００３５】
実施例１６
上述の実施例のいずれかに記載の方法によると、出力指示を提供する前に、エラーの全てのシングルビット置換及びダブルビット置換に対して検索を実行する。
【００３６】
実施例１７
上述の実施例のいずれかに記載の方法によると、出力指示を提供する前に、エラーの全てのシングルビット置換に対して検索を実行し、少なくとも１つのオンザフライシグネチャマッチも見つけないと、エラーの少なくともいくつかのダブルビット置換に対して検索を再度実行する。
【００３７】
実施例１８
上述の実施例のいずれかに記載の方法によると、検出の前に、強力な認証を一度実行し及びオンザフライの文字認証によって、ターゲットメモリに常駐するメモリコンテンツを保護することをさらに含む。
【００３８】
実施例１９
上述の実施例のいずれかに記載の方法によると、一度実行される強力な認証は、集積回路がアクティブでない状態からウェイクアップされた直後に実行される強力な認証を含む。
【００３９】
実施例２０
上述の実施例のいずれかに記載の方法によると、一度実行される強力な認証は、集積回路の起動の直後に実行される強力な認証を含む。
【００４０】
実施例２１
上述の実施例のいずれかに記載の方法によると、一度実行される強力な認証は、集積回路がスリープ状態を終了した直後に実行される強力な認証を含む。
【００４１】
実施例２２
上述の実施例のいずれかに記載の方法によると、メモリコンテンツは、ターゲットメモリに記憶されたコードを含む。
【００４２】
実施例２３
上述の実施例のいずれかに記載のシステムによると、エラー訂正機能は、少なくとも１つの可能な訂正をメモリにおける少なくとも１つの誤りのある文字に適用するために作動でき、エラー訂正機能は、正しいと思われる文字を生成し、続いてメモリコンテンツ認証機能を呼び出して、正しいと思われる文字に適用し、且つメモリコンテンツ認証機能の出力が「正しい」である場合、メモリにおける誤りのある文字をこの正しいと思われる文字に置き換える。
【００４３】
実施例２４
上述の実施例のいずれかに記載のシステムによると、エラー訂正機能は、少なくとも１つの可能な訂正を少なくとも１つの誤りのある文字エンティティの文字認証に適用するために作動でき、エラー訂正機能は、正しいと思われる文字エンティティを生成し、且つメモリコンテンツ認証機能を呼び出して、正しいと思われる文字エンティティに適用し、メモリコンテンツ認証機能の出力が「正しい」である場合、メモリにおける誤りのある文字認証をこの正しいと思われる文字認証に置き換える。
【００４４】
実施例２５
上述の実施例のいずれかに記載のシステムによると、前の時点ｔ１は、メモリのファームウェア更新が発生した時間である。
【００４５】
実施例２６
命令を含むコンピュータプログラムであって、プロセッサが前記命令を実行すると、前記命令は、前記プロセッサを上述の１つ又は複数の方法における１つ又は複数の動作を実行させることを特徴とするコンピュータプログラム。
【００４６】
実施例２７
少なくとも１つのプロセッサを備えるシステムであって、通常、対応する専用のハードウェアと協同して作動し、本明細書に記載の１つ又は複数の方法における少なくとも１つの動作を実行するように構成されるシステム。
【００４７】
以下の用語は、先行技術文献に記載されている任意の定義により解釈されたり、明細書に記載されている任意の定義により解釈されたり、それぞれの範囲に以下の内容を含んだりことができる。
【００４８】
アクセス制御（Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ）
通常、プロセッサとメモリ間のインターフェイスに関連付けられている任意の従来のアクセス制御機能を含むように意図され、ハードウェアとファームウェアを含む仮想ロジックエンティティとして実行できる。
【００４９】
ターゲットメモリ（Ｔａｒｇｅｔ  Ｍｅｍｏｒｙ）
集積回路（ＩＣとも呼ばれる）における任意のメモリアレイを含んでもよい、メモリアレイは通常、使用中及びフリーのメモリのページを含む。現在使用されていないフリーのページは、保留ページ（Ｒｅｓｅｒｖｅｄ  ｐａｇｅ）と見なされる。
【００５０】
メモリページの更新時に非常に短期的なウェアハウス（ｗａｒｅｈｏｕｓｅ）として、保留ページを使用する場合、メソッドは通常、保留ページに含まれるコンテンツが書き込まれたコンテンツであることを検証することである（例えば、保留ページのコンテンツと保留ページにコピーされたデータをリアルタイムで比較し、両者が同じであることを確保する）。そうでない場合は、保留ページのコンテンツが削除され、保留ページに改めて書き込んでやり直す。検証は、保留ページに書き込んだ後に、直ちに保留ページを読み取ることを含み、その結果、保留ページ又は空白ページに記憶されるデータが正しくなり、例えば、書き込まれたデータと完全に等しい。
【００５１】
強力な認証（Ｓｔｒｏｎｇ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ）
メモリコンテンツを検証するためのアルゴリズム又はプロセスを含んでもよい。大きなコード又は持続的なデータセグメントでは、ダイジェスト／セキュリティキーに基づくＨＡＳＨ関数を採用することができる。
【００５２】
強力な認証に使用される認証コードは、ＳＨＡ（ＳＨＡ−１、ＳＨＡ−２）又はＨＭＡＣなどの安全なハッシュ関数に基づいてもよい、例えば、ｈｔｔｐｓ：／／ｅｎ．ｗｉｋｉｐｅｄｉａ．ｏｒｇ／ｗｉｋｉ／Ｓｅｃｕｒｅ＿Ｈａｓｈ＿Ａｌｇｏｒｉｔｈｍｓを参照。
【００５３】
通常、本明細書の「強力な認証」は、従来の２Ｄ水平／垂直エラー訂正方式のように、特定の対応する行または列が検証されるイメージチャンクを確保するだけではない、保護されるコンテンツのデータ全体の一部又はデータ全体のイメージ又はイメージチャンク（コードに限定されるわけではない）を保証する単一の値を生成して、認証待ちデータ全体の一部又はデータ全体のイメージ又はイメージチャンクのコンテンツの完全性を保証する。
【００５４】
通常、強力な認証は、文字認証よりも高い信頼度でメモリコンテンツを認証する。従って、本明細書の「強力な認証」は、小さいダイジェスト（本明細書の「文字認証」アルゴリズムにより生成されるダイジェストと比較する）を生成する任意のアルゴリズムまたは任意のメッセージ認証コード方式を含むことが意図されている。従って、文字認証に対して、本明細書の「強力な認証」は、不可逆、即ち、ダイジェストから元の平文を改めて生成することは不可能であると見なされる。
【００５５】
通常、メモリコンテンツ（認証によって識別される）における特定のデータ文字のエラーを訂正又は修正した後、且つデータ及び強力な認証を訂正されたデータ及び強力な認証に置き換えた後、全てのメモリコンテンツに使用される強力な認証は再計算され、再計算された結果は、記憶される事前計算された強力な認証又はダイジェストと比較される。
【００５６】
強力な認証は通常、特定のデータ本体に適用される（少なくとも１つの誤りのある文字がそれぞれ提案された正しい文字に置き換えられる）。例えば、再計算された強力な認証と比較するデータ本体に応じて、メモリイメージ全体またはその一部のみに適用される。また、再計算された強力な認証と比較する事前計算された強力な認証のデータがメモリイメージ全体（通常、誤りのある文字を提案された正しい文字に置き換える）にあるか、又はメモリーブロックのみに（以上のように）事前計算されているかによって異なりる。
【００５７】
再計算された強力な認証のデータと事前計算された強力な認証のデータ（期待される強力な認証のデータとも呼ばれる）とが完全に等しい場合、強力な認証を「成功」と見なされる。
【００５８】
「強力な認証」は、ファームウェアがリクエストする時に発生する可能性があり、ファームウェアのリクエストは通常、アプリケーションシステム、つまり集積回路を利用して組み込んだ高いレベルのシステムから発生する（図１を参照）。追加的または代替的に、「強力な認証」は、特定のＩＣ（集積回路）で実行されるアプリケーションファームウェアのリクエストに応じて実行され、特定のＩＣにはエラーを訂正しようとするメモリコンテンツが含まれる。通常、リクエストを受信することは、他のいくつかのＩＣ又はシステム要素で識別されたなどのイベントに起因する特定のトリガー（例えば、図１２に従い）に応答して、その自体を再認証することができる。従って、高いレベルのシステムは、本明細書に説明される機能（例えば、強力な認証）のリクエストを実行する可能性のあるソースであり、ＩＣにおけるファームウェア及びハードウェアイベントも同様である。
【００５９】
文字（Ｗｏｒｄ）
メモリよりもはるかに小さい任意のデータの断片を含んでもよい。例えば、数千の文字を含む可能性のあるメモリアレイにおける１６ビットのデータ、又は１２８ビットのデータ、２５６ビットのデータ或いはそれ以上である。通常、文字はメモリから取得される最小データの断片であり、独自の認証コードを持っている。
【００６０】
文字認証（Ｗｏｒｄ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ）
シグネチャマッチとも呼ばれ、認証待ち「文字」のダイジェストを含んでもよい。
【００６１】
オンザフライシグネチャマッチ（ｏｎ−ｔｈｅ−ｆｌｙ  ｓｉｇｎａｔｕｒｅ  ｍａｔｃｈ）
文字を読み取るたびに、文字認証を同時に読み取る。通常、ビット構造の長さは、データの長さに認証の長さを加えたものである。同時に、読み取られた文字に基づいて認証を再計算して、計算された認証データと読み取られた文字の認証とを比較する。再計算された認証データがメモリから読み取られた認証データと等しい場合、一致であると判断する。
【００６２】
全体的な認証（Ｏｖｅｒａｌｌ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ）
システムが管理しようとするメモリのコンテンツ全体に対する強力な認証を含んでもよい。通常、いつでも、特にデータが訂正された後、コンテンツのダイジェストと事前計算されたデータとが同じであれば、再認証時に、現在のコンテンツは、当時の事前計算されたコンテンツと同じであると見なすことができ、よって、データが訂正された直後に実行される強力な認証が成功した場合、提案された訂正又は修正は正しく、認証又は確認されたものである。
【００６３】
ダイジェスト（ｄｉｇｅｓｔ）
コンテンツからハッシュ（ｈａｓｈ）を生成するアルゴリズム（例えば、強力な認証などに使用される）を含んでもよい、前記ハッシュは、認証待ちコンテンツの完全性を確認できる。例えば、コンテンツが既に変更されたのか、又は（アクセスが制御されたメモリの場合）不正な変更が加えられたか、又は改ざんされたのかを確認する。従って、ダイジェスト及びハッシュは、本明細書で通常、交換可能に使用され、両方とも名詞と動詞で使用される。
【００６４】
ＨＭＡＣアルゴリズム
通常、メッセージ認証コード（ｍｅｓｓａｇｅ  ａｕｔｈｅｎｔｉｃａｔｉｏｎ  ｃｏｄｅ，ＭＡＣ）アルゴリズムであり、内部的にハッシュを使用して（暗号化ではなく）ＭＡＣを生成する。
【００６５】
オンザフライ（ｏｎ−ｔｈｅ−ｆｌｙ）
例えば、別の実行中のプロセスと同時に実行する。例えば、認証中に、認証待ちデータを読み取り同時にダイジェストを計算し、このダイジェストを期待される値と比較することができ、又は（コンテンツの）書き込み操作中にダイジェストを計算し、このダイジェストをメモリに書き込むことができる。
【００６６】
例えば、以下の特許文献には、オンザフライの暗号化、復号化および認証証が記載されており、その公開内容は参照によりここに組み込まれる。ｈｔｔｐｓ：／／ｐａｔｅｎｔｓ．ｇｏｏｇｌｅ．ｃｏｍ／ｐａｔｅｎｔ／ｕｓ９５２５５４６ｂ２／ｅｎ。
【００６７】
エラー検証（Ｅｒｒｏｒ  Ｖｅｒｉｆｉｃａｔｉｏｎ）
時点ｔ２で計算されたメモリの「強力な認証のデータ」と、時点ｔ２よりも前の時点ｔ１で事前計算された／記憶（期待）された同じメモリゾーン（ｍｅｍｏｒｙ  ｚｏｎｅ）の「強力な認証のデータ」との間に一致する又は一致しない（等しいまたは等しくない）ことがあるかの判定を含んでもよい。
【００６８】
通常、事前計算された強力な認証のデータは、メモリ空間又はアレイ（本明細書の実施例を使用してその完全性の保護を求める）のコンテンツ全体に対する強力な認証のダイジェストを含む。
【００６９】
スタックフラッシュ（Ｓｔａｃｋｅｄ  ｆｌａｓｈ）
１つのチップを含んでもよい、前記チップは「垂直」又は「３Ｄ」チップとして分類され、複数の（数十層の場合もある）メモリ層又は結晶粒を積層することで超高密度ストレージを生成してビットコストを低減する。ビットコストスケーリング（ｂｉｔ  ｃｏｓｔ  ｓｃａｌｉｎｇ，ＢｉＣＳ）又はパンチアンドプラグ  プロセス（ｐｕｎｃｈ  ａｎｄ  ｐｌｕｇ  ｐｒｏｃｅｓｓ）を使用できる。本明細書の実施例は、通常、メモリに適用され、スタックフラッシュ及び他のフラッシュ／不揮発メモリ（ＮＶＭ）技術を含むが、これに限定されなくてもよい。
【００７０】
オーバーヘッド（Ｏｖｅｒｈｅａｄ）
メモリ容量における冗長性を含んでもよいが、これは通常、結晶粒の面積及び製品コストの面で不利である。例えば、エラー訂正コード（ＥＣＣ）を使用してエラー訂正を実行するとは、通常、ＥＣＣのＸビットをデータ／検証情報のＹビットに適用し、エラー訂正に使用されるオーバーヘッド又は追加のメモリ容量（Ｙ／Ｘ）＊１００％に変換することを意味する。
【００７１】
文字エンティティ（ｗｏｒｄ  ｅｎｔｉｔｙ）
文字自体（文字ビットとも呼ばれる）と、文字に関する文字検証のデータ（検証ビットとも呼ばれる）と、メモリに記憶される文字に関するデータを含んでもよい。文字認証は、この明細書では「対応する」文字認証データと呼ばれる。いくつかの実施例によれば、文字部分のビットと認証部分のビットとがそれぞれスキャン又はフリップされるが、通常、文字に対して計算を実行し、認証比較に対して本明細書に記載される全てのものを実行する。
【００７２】
本明細書は、以下のような略称を採用する。
ＥＣＣ（エラー訂正コードを示す）、ＦＷ（ファームウェアを示す）、ＮＶＭ（不揮発メモリを示す）、ＡＳＩＣ（アプリケーション固有の集積回路を示す）、ＤＳＰ（デジタル信号処理を示す）、ＨＭＡＣ（ハッシュベースのメッセージ認証コードを示す）、ＩＣ（集積回路を示す）及びＨＷ（ハードウェアを示す）。
【００７３】
上記の実施例及び他の実施例については、次のセクションで詳細に説明する。本文又は図面で使用される商標は、それぞれが所有者のものであり、本明細書で使用される目的は、如何に本発明の１つの例を実行するかを解釈又は説明するのみである。
【００７４】
明細書では、特に明記しない限り、以下の説明から明らかなように、「処理」、「計算」、「推定」、「選択」、「ランキング」、「判断」、「生成」、「再評価」、「分類」、「ステレオマッチング（ｓｔｅｒｅｏ−ｍａｔｃｈｉｎｇ）」、「検出」、「組み合わせ」及び「取得」、又はその類似用語とは、操作、変換およびその組み合わせが実際のデータとして表される少なくとも１つのコンピュータ、コンピュータシステム、プロセッサまたは類似の電子計算装置の動作、プログラムまたはその組み合わせ、例えばコンピュータシステムのスタック、メモリおよびその組み合わせ、あるいはその他のこのような情報記憶、転送または表示装置内の電子数を意味する。「コンピュータ」という用語は、非限定的な例として、パーソナルコンピュータ、サーバー、組み込みコア、コンピューティングシステム、通信デバイス、プロセッサ（例えば、デジタル信号プロセッサー（ＤＳＰ）、マイクロコントローラー、フィールドプログラマブルゲートアレイ（ｆｉｅｌｄ  ｐｒｏｇｒａｍｍａｂｌｅ  ｇａｔｅ  ａｒｒａｙ，ＦＰＧＡ）、アプリケーション固有の集積回路（ＡＳＩＣ）など）及びその他の電子計算デバイスを含んでもよいが、これに限定されなくてもよい。
【００７５】
本明細書でそれぞれに記載された要素は、必ずしも異なる要素ではなく、代替的に同じ構造であってもよい。要素または特徴が存在できる記載は、（ａ）要素または特徴が存在する実施例を含むことを意図している、（ｂ）要素または特徴が存在しない実施例、（ｃ）要素または特徴が選択的に存在する実施例、例えば、構成要素または特徴が存在するかどうかをユーザが設定または選択できる。
【図面の簡単な説明】
【００７６】
本発明のいくつかの実施例は、以下の図面に示される。
【図１】図１は、本発明の１つの実施例にかかる集積回路を示す図であり、当該集積回路は、いくつかの実現しようとする機能（「他の機能」とも呼ばれる）を有し、且つエラー訂正機能を有し、当該エラー訂正機能は、認証を利用して可能なエラー訂正をテストする機能を含む。
【図２】図２は、認証とエラー訂正とを組み合わせるフローの簡略化されたフローチャート図である。
【図３】図３は、図２の操作ステップ３０を実行するための例示的なフローの簡略化されたフローチャート図である。
【図４】図４は、メモリがページベースの不揮発性メモリであるときに、エラー訂正および検証を実行するための例示的なフローの簡略化されたフローチャート図である。
【図５】図５は、図２の操作ステップ２２０を実行するための例示的なフローの簡略化されたフローチャート図である。
【図６】図６は、図１の集積回路の動作のフローの簡略化されたフローチャート図である。
【図７】図７は、可能なエラー訂正のテストを含む適切なエラー訂正シーケンスフローの簡略化されたフローチャート図である。
【図８】図８は、図７の操作ステップ１００１２を実行するための例示的なフローの簡略化されたフローチャート図である。
【図９】図９は、図１のメモリゾーン３を示す図であり、文字認証比較機能も示している。ペイロード（ｐａｙｌｏａｄ）と認証のサイズは例としてのみ示され、他の値を持つことができる。
【図１０】図１０は、いくつかの実施例にかかるスキャン及びエラー訂正機能を示す図である。ビットを、順次にフリップする、又は任意の適切なヒューリスティック法に基づいて順番にフリップすることができる。
【図１１】図１１は、図１のメモリゾーン３を示す図であり、強力な認証比較機能も示している。
【図１２】図１２は、いくつかの実施例にかかる強力な認証サイクルがどのようにトリガーされるかを示す図である。
【発明を実施するための形態】
【００７７】
本発明の範囲に含まれる方法およびシステムは、例として具体的に示された機能ブロックの一部（例えば、任意の適切なサブセット）又は全部を含んでもよい、例えば任意の適切な順序で例示されている。
【００７８】
本明細書で記載及び説明される計算、機能、又はロジックコンポーネントは、例えば、ハードウェア回路のような様々な形態で実施できるが、カスタムＶＬＳＩ回路、ゲートアレイ又はプログラマブルハードウェアデバイスに限定されない、また、例えばＦＰＧＡに限定されない、あるいは、そのソフトウェアプログラムコードが少なくとも１つの有形または無形のコンピュータ読取可能媒体に記憶され、且つ少なくとも１つのプロセッサまたはその任意の適切な組合せによって実行される。
【００７９】
特定の機能コンポーネントは、１つの特定のソフトウェアコードシーケンス又は複数のこのようなソフトウェアコードにより形成されてもよい。これらのソフトウェアコードは、機能コンポーネントを参照して本明細書で説明するように共同で機能したり、作動したり又は利用したりする。例えば、コンポーネントは、オブジェクト（ｏｂｊｅｃｔｓ）、プロシージャ（ｐｒｏｃｅｄｕｒｅｓ）、機能（ｆｕｎｃｔｉｏｎｓ）、ルーチン（ｒｏｕｔｉｎｅｓ）及びプログラム（ｐｒｏｇｒａｍｓ）など、複数のコードシーケンスにわたって分散でき、通常、協同的に作動するいくつかのコンピューターファイルから発生する可能性がある。
【００８０】
適切であれば、本明細書で説明する任意のロジック機能は、リアルタイムアプリケーションとして実施でき、ＡＳＩＣやＤＳＰ又はその適切な組み合わせなどを採用でき、これに限定されない、適切なアーキテクチャオプションを採用できる。実際には、本明細書で記載される任意のハードウェアコンポーネントは、同じ場所に位置し又は位置が互いに離れるウエハなどの１つ又は複数のハードウェアデバイスを含んでもよい。
【００８１】
ＩＣメーカーは、集積回路のメモリのコンテンツの保護を求める。
【００８２】
本明細書の実施例は、多くの異なる技術のメモリに応用できる。したがって、本明細書で使用される「フラッシュ」という用語は、例としてのみ使用される。
【００８３】
本発明は、ＩＣにおけるメモリコンテンツの完全性を保証するシステムについて詳しく説明する。通常、このようなメモリへのアクセスは制御され、ダイジェストは、制御され且つ承認されたメモリ更新にサインするために使用できる。従って、その制御されたアクセスの結果ではないメモリの変更は、悪意のあるものか、又は恐らく、一時的な物理的または電気的障害（例えば、物理的なメモリ自体の障害）によるものかなど、望ましくないエラーである。本明細書のシステムは、エラーの可能な訂正をテストするように作動し、集積回路が組み込まれたコンピュータ又は他の製品の「順序外」時間（ｏｕｔ−ｏｆ−ｏｒｄｅｒ  ｔｉｍｅ）を低減する。通常、（１つ又は複数のレベル）認証機能は、集積回路が他の目的で可能な訂正を検証し又は承認し、例えば、文字認証を使用してエラーを発見し、提案された訂正を最初に検証し、且つ強力な認証を使用して最終的に提案された訂正を検証する。
【００８４】
いくつかの実施例は、図１に示されるような集積回路を提供することにより、又は既存のＩＣにソフトウェア１８を追加するなど、既存の集積回路を変更することにより、エラー検出および回復（エラー訂正とも呼ばれる）を集積回路に提供する。ソフトウェア１８は、同じＩＣの別の通常は独立したメモリ空間に常駐できる。そのＩＣは、システムが保護しようとするメモリ空間へのアクセス許可を持ち、通常は、認証を実行するように作動できる。例えば、文字認証及び強力な認証の少なくとも一方は、本明細書で説明するエラー訂正及び検証の少なくとも一方を完成するために使用される。
【００８５】
いくつかの実施例は、集積回路にエラー検出及び回復機能を提供する。前記機能は、メモリコンテンツが変更されたイベントを識別するための検出（例えば、従来の認証に基づく）ことを含み、且つＩＣ（及びＩＣに組み込まれた装置、例えばＰＣ）が通常通りに操作を続行して、できるだけ装置のエンドユーザーのオーバーヘッドを低減するために、これらのイベントから回復する。これは、特定のイベント（例として、エンドユーザーが処理しているＰＣ）が故障し、エンドユーザーがコンピューターをラボに持ち込んで修理する必要があることを意味するため、特に有利である。本明細書に記載のいくつかの実施例によれば、メモリ故障を有するコンポーネント自体は自動的に訂正できて、システムのセキュリティを維持するため、以上の問題はない。
【００８６】
エラー訂正機能は、ＨＷ及びＦＷの適切な組み合わせで実行できる。メモリは通常、認証及び文字認証の構造をサポートするように構成される。通常、オンザフライの文字認証はハードウェアに実行される（メモリを読み取る時）。強力な認証は通常、ファームウェアに実行され、適切な暗号化されたＨＷを使用してプロセスを高速化する。ＦＷ又はＨＷにビットフリッピング（ｂｉｔ  ｆｌｉｐｐｉｎｇ）及び一致性チェック（ｃｏｎｓｉｓｔｅｎｃｙ  ｃｈｅｃｋ）を実行できる。ＮＶＭの消去及び書き換えなどの複雑な操作を考慮して、メモリコンテンツの実際の更新は、通常、ファームウェアにより完成される。
【００８７】
図１のシステムは、より高いレベルのシステム１６に組み込むことができるいくつかの実施例にかかる集積回路を示す。図１のより高いレベルのシステム１６は、本明細書で説明される機能（例えば、強力な認証などの認証）を実行するためのリクエストの１つの可能なソースである。追加的または代替的に、より高いレベルのシステムは、図１のメモリアレイ２を介してその元のコンテンツ（例えば、メモリアレイ２に記憶されたコード）を合法的に取得できるアクセスパスとして機能し、又は後で更新され、即ち、メモリアレイのコンテンツが異なるコンテンツに置き換えられる。
【００８８】
アクセス制御機能（例えば、図１に示す））は、通常、ＨＷとＦＷの組み合わせである。通常、アクセスできるメモリゾーンとアクセスできないメモリゾーンを定義するＨＷがある。ファームウェアは、いくつかの特権レベルで、メモリアクセスを制御するＨＷにアクセスできる。したがって、メモリコンテンツの更新は、そのアクセスの許可が存在することをＦＷに「納得させる」ことによって行われ、この場合、ＦＷはロジックゲートを開き、メモリを更新する。
【００８９】
例えば図７の方法に従って、可能なエラー訂正をテストする機能は、ハードウェアまたはファームウェアで実行できる別個のステートマシン（ｓｔａｔｅ  ｍａｃｈｉｎｅ）を含んでもよい（図１のハードウェア６及びファームウェア７の少なくとも一方を参照）。同様に、エラー訂正機能のロジックは、ハードウェアとファームウェアの適切な組み合わせに組み込まれてもよい。
【００９０】
図１、図９、図１０及び図１１の実施例の全て又は任意のサブセットを組み合わせて、及び／又は前述の図２で説明したフローのすべてまたは任意のサブセットと組み合わせて、図１のシステム又はそこで説明したブロックの任意のサブセットを提供できる。
【００９１】
図２は、メモリオーバーヘッドの面で経済的である認証機能とエラー訂正とを組み合わせる提案又は方法を説明する。従来のＥＣＣは、各データを記憶するためのＥＣＣビットのメモリ容量を必要とするため、本明細書の実施例は、既存の設計に存在する又は新しい設計に提供されるオンザフライの認証を利用することで、エラー検出又は訂正コードの使用または記憶を排除し、セキュリティレベルを損なうことなくエラー訂正に使用する。
【００９２】
ＥＣＣを使用する場合、攻撃者はデータ及びそのＥＣＣを同時に修正し、データ及びＥＣＣがそれぞれ互いに一致するように修正されるため、エラーがリアルタイムで認識されない、文字認識又は強力な認証を実行した場合にのみ、システムはエラーを検証できるため、セキュリティレベルは通常、影響を受けない。
【００９３】
「オーバーヘッド」という用語は、本明細書では、認証、又はエラー訂正、又は任意の適切な場所に記憶できる他のメモリ管理プロセスによって生じたストレージのニーズを含む。例えば、文字認証（文字レベル認証とも呼ばれる）又は文字ＥＣＣでは、より広い文字長さを利用してメモリを生成するため、文字を読み取るときに、認証／ＥＣＣビットにもアクセスできるように、認証／ＥＣＣは文字のすぐ隣に記憶される。又は、ハードウェアシステムでは、必要な実際のペイロード（認証／ＥＣＣビットとは対照的に）を読み取る同時に、１つの追加のメモリコンポーネントの読み取りを実行して、より大きい文字長さを有効に許容する。この後、メモリ全体の文字長を実際のペイロードに専用でき、その実際のペイロードの認証／ＥＣＣビットは他の場所に記憶される。
【００９４】
図２の方法は、以下の操作の全て又は適切に順序付けられた任意のサブセットを含んでもよい。
【００９５】
操作ステップ１０
メモリに記憶されたコードなどのメモリコンテンツが、「強力な認証」及び「文字認証」に保護される集積回路を提供する。
【００９６】
「強力な認証」を起動する（例えば、大きなコードセグメントでＨＭＡＣまたはＣＭＡＣを実行する）。例えば、コールドフラッシュコンテンツ（ｃｏｌｄ  ｆｌａｓｈ  ｃｏｎｔｅｎｔ）の置換に対する。
【００９７】
オンザフライの「文字認証」（例えば、１２８ビットのペイロード＋１６ビットの認証）。例えば、ホットフラッシュコンテンツ（ｈｏｔ  ｆｌａｓｈ  ｃｏｎｔｅｎｔ）の置換に対して、フラッシュから直接コードを実行する。
【００９８】
オンザフライの暗号化、復号化、および認証は、以下の特許文献に記載されており、その公開内容は参照によりここに組み込まれる。ｈｔｔｐｓ：／／ｐａｔｅｎｔｓ．ｇｏｏｇｌｅ．ｃｏｍ／ｐａｔｅｎｔ／ＵＳ９５２５５４６Ｂ２／ｅｎ。
【００９９】
操作ステップ２０
オンザフライの文字認証が失敗するたびに（例えば、実行中に）、集積回路は停止する（例えば、次の起動まで）又は自動的に再び起動する。例えば、メモリ空間に確保するコードがあるとする。従って、メモリからの読み取りは通常、ＩＣのプロセッサがそのメモリ空間からコードをフェッチしていることを意味する。これは、通常、文字認証の失敗が識別された場合、対象のプロセッサが変更されたコードのみフェッチすることを意味する。このとき、変更されたコードの実行を防止するために、プロセッサは停止する可能性があり、通常はリカバリを開始する必要がある。回復動作は、例えば、ＲＯＭにおけるコードのような１００％安全であることがわかっている別のコードにジャンプすること、又は
ソフトウェアまたはハードウェアのいずれかによって、ここで説明するエラー訂正及び検証の少なくとも一方をトリガするリセットをＲＯＭから再開することを含んでもよい。
【０１００】
操作ステップ３０
次に起動する時（又は上記の例に従って）に、全ての「文字認証」は、メモリコンテンツを保護するための「強力な認証」計算の一部としてチェックされる。「文字認証」が起動認証中に失敗した場合（実行時とは逆）、エラー検出を構成するため、集積回路は、例えば図３の操作ステップ１４０〜１７０の全て又は任意のサブセットを実行することによって、メモリコンテンツで見つかったエラーを訂正しようとする。
【０１０１】
操作ステップ８０
メモリがコード実行メモリ（ｃｏｄｅ  ｅｘｅｃｕｔｉｏｎ  ｍｅｍｏｒｙ）である場合、例えばエラー訂正を行うと（例えば、図３の操作ステップ１４０〜１７０の全て又は任意のサブセットを実行する）、訂正されたコードを解析できる。この場合、適切なパワーフェイルセーフコードリカバリ更新フロー（Ｐｏｗｅｒ−ｆａｉｌ  ｓａｆｅ  Ｃｏｄｅ  ｒｅｃｏｖｅｒｙ  ｕｐｄａｔｅ  ｆｌｏｗ）が実行される。コードが成功に修正されると、プロセッサは、通常の操作として実行を再開できる。
【０１０２】
図３の方法は、以下の操作の全て又は適切に順序付けられた任意のサブセットを含んでもよい。
【０１０３】
操作ステップ１４０
破損した文字（例えば起動認証中に「文字認証」がこの文字で失敗したためにエラーが検出された文字）の全てのビット置換（例えば、説明された実施例では１２８＋１６のビット置換）をチェックして、一致を検索する。データと認証との間に適切な比率が存在する可能性があることを強調する。１２８ビット及び１６ビットのパラメータは単なる例示である。
【０１０４】
専用ＨＷまたはＳＷは、速やかに全ての置換をスキャンできる。例えば、メモリ上、またはメモリ制御およびインターフェイス  ユニットの一部として、フラッシュなどのメモリへの書き込み／読み取りを繰り返し行う必要がない。
【０１０５】
いくつかの実施例によれば、専用のバッファは、破損した文字のデータ構造を記憶でき、また、破損した文字はビットごとに操作され得る。この後、専用のファームウェアコードまたはハードウェアステートマシンを使用して、データ構造の順列をスキャンし、一度に１ビット（例えば、図１０の「１ビットをフリップ」のステップを参照）又は１ビット以上をフリップする。置き換えのたびに、当時の、操作された、ビットフリップ反転されたデータ構造に文字認証の計算を行う。通常、置換のスキャンはファームウェアによって実行され、又は代替的に、専用のハードウェアによって実行できる。
【０１０６】
操作ステップ１５０
一致が見つかった場合、訂正または修正された（例えば、誤りのあるコンテンツに対する提案された訂正）誤りのあるデータ又はコンテンツを「強力な認証」計算の一部としてダイジェストできる。認証アルゴリズムと訂正されたビット数によっては、複数の一致が見つかる可能性がある。この場合、一致するビットの組み合わせの全ての置換（ビットパターンとも呼ばれ）を試し、正しい「強力な認証」を生成する置換が採用される。通常、正しいとは、訂正またはコードを使用した（または適用した）「強力な認証」の結果が、メモリの元のコンテンツを使用した（または適用された）強力な認証の事前計算の結果と等しいことを意味する。
【０１０７】
例えば、１ビットエラーの場合、この方法は、最初のビット、例えばビット０をフリップし、続いて認証をチェックし、その後、一致が見つかるまでビット１、２などの後続のビットをチェックすることを含む。２ビットエラーの場合、一度に一対のビットをフリップできる、且つ通常は、それぞれ２ビットの可能な値の各ペアを考慮する。
【０１０８】
操作ステップ１６０
それ以外の場合は、例えば、再検索によって、今回はエラーの少なくともいくつかのダブルビット置換に対して、複数のエラーを訂正することが好ましい。１つ以上のエラー（１つ以上のビットを含む）は訂正可能であるが、いくつかの実施例によれば、複数のビットを含むエラーは、その計算が１ビットのエラーの計算よりも複雑で、その計算が約Ｘ２／２（たとえば１４４２／２）回のチェックが必要であるため修正できない。
【０１０９】
操作ステップ１７０
図１に示すように、エラーを訂正できない場合、通常、例えば高いレベルのソフトウェアを介してエンドユーザーにアラートを提供する。
【０１１０】
図４は、メモリがページベースの不揮発性メモリ（ｐａｇｅ−ｂａｓｅｄ  ｎｏｎｖｏｌａｔｉｌｅ  ｍｅｍｏｒｙ）であるときに、エラー訂正および検証を実行する方法である。通常、このようなメモリでは、削除の操作はページ全体（又はメモリ全体）しか操作できない。従って、訂正が必要なエラーが見つかった場合、通常は訂正を適用できるように、ページの調整が実行される。例えば、訂正を適用する際に、訂正データを有するページをいくつかの保留ページにコピーする。より一般的には、本発明は、メモリ使用制限で行われる修正を含む。
【０１１１】
図４の方法は、例えば、エラーが検出された時にすぐに（以下の操作ステップ２２０）、又は次のＩＣのブート（ＩＣ  ｂｏｏｔ）時（以下の操作ステップ２３０）などの任意の適切な時間に実行されてもよい。
【０１１２】
図４の方法は、以下の操作の全て又は適切に順序付けられた任意のサブセットを含んでもよい。
【０１１３】
操作ステップ２１０
訂正待ちフラッシュページを識別する。複数のページは訂正の必要がある場合、訂正が必要な文字（アドレス＋データ）を不揮発性メモリに保留（又はこの文字の指示）する。次に、操作ステップ２２０を実行してすぐに訂正し、又は操作ステップ２３０を実行して次の起動後に修正する。
【０１１４】
操作ステップ２２０
例えば、ページごとに図５の操作ステップ３１０〜３５０の全てを実行することで、各訂正待ちページを訂正する。
【０１１５】
操作ステップ２３０
ブート時、フラッシュコード認証が実行される前に、ブートコード（ｂｏｏｔ  ｃｏｄｅ）は、例えば使用可能とマークされたページが存在するかをチェックし、使用可能な場合、ブートコードは、ブートを続行する前に、操作ステップ３１０〜３５０の全て又は任意のサブセットを完了できる、そうでない場合、いくつかのより高いレベルのファームウェアは、「ガベージコレクション（ｇａｒｂａｇｅ  ｃｏｌｌｅｃｔｉｏｎ）」を実行できる。例えば、可能な限り最小のメモリ空間を占めるようにメモリコンテンツを圧縮するため、一時的なエラー訂正のために少なくとも１ページを解放する。
【０１１６】
図５の方法は、以下の操作の全て又は適切に順序付けられた任意のサブセットを含んでもよい。
【０１１７】
操作ステップ３１０
保留された事前定義のフラッシュ  ページにフラッシュページのアドレス及び訂正されたデート（コード）を書き込み、正しく書き込まれるかを検証する。
【０１１８】
操作ステップ３２０
保留ページに、例えば、このページに有効な情報を含む、または使用中で消去しない他のファームウェアを示すビットを設定する。このビットは、本発明のシステムが中断された場合（例えば、ユーザーが電源をオフした後、操作を再開しようとする）にも有用である。
【０１１９】
操作ステップ３３０
例えば、図４の操作ステップ２１０でエラーが検出されたページなどの元のフラッシュページを消去する。
【０１２０】
操作ステップ３４０
保留されたフラッシュページからの訂正されたデータで元のフラッシュページを更新し、正しく書き込まれるかを検証する。
【０１２１】
操作ステップ３５０
保留されたページを消去して、他のページのエラーを訂正するために将来そのページを使用できるようにする。
【０１２２】
先に図２のエラー検出および訂正方法をトリガーする変化型は、次のものを含んでもよい。
【０１２３】
（Ｉ）オンザフライ（ｏｎ−ｔｈｅ−ｆｌｙ）
文字認証の失敗にメモリのチェックですぐに応答し、ターゲットメモリから読み取り中に文字認証の不一致が見つかった場合、プロセッサの次の実行シーケンスの前に上記のプロセスを実行する。
【０１２４】
例えば、メモリからのコードが実行されており、コードフェツチで文字認証の失敗が識別された場合、コードの実行が停止して、例えばメモリ空間の全体またはアレイをスキャンして失敗やエラーを検査きるようになる。その後、コードの実行が一時的に終了し、プロセッサの実行シーケンスで次に実行される操作が実行され、又はコードの先頭から実行が再開される。データがコードでない場合、データの読み取り中にエラーが発生する可能性がある。この場合、プロセッサは再び停止し、メモリのスキャン／訂正／検証がトリガーされる可能性がある。
【０１２５】
（ＩＩ）起動（Ｐｏｗｅｒ−ｕｐ）
各集積回路がアクティブでない状態からウェイクアップされるイベントでトリガーされる。例えば、起動又はスリープ状態からアクティブ状態に変更した後、強力な認証を再計算し、事前計算された強力な認証のデータと比較し、再計算された強力な認証と事前計算された強力な認証との間に不一致が発生した場合、上記のエラー訂正メカニズムを有効にする。
【０１２６】
（ＩＩＩ）定期的なデータ整理（Ｐｅｒｉｏｄｉｃ  ａｋａ  ｓｃｒｕｂｂｉｎｇ）
場合によっては、強力な認証を再計算し、再計算の結果を事前計算された強力な認証と比較し、再計算された強力な認証と事前計算された強力な認証との間に不一致が発生した場合、本明細書で記載されるメモリエラー訂正のプロセスを有効にできる。トリガーは、例えば、上記の操作を実行するための時間的な指示を与えるいくつかのプログラム可能なタイマーを使用して実行できる。集積回路の正常の操作が妨害されて中断されるため、このメカニズムは通常、損失をもたらすが、より大きな保護を取得できる。
【０１２７】
（ＩＶ）初期化（Ｉｎｉｔｉａｔｅｄ）
外部イベントによってトリガーされる。例えば、装置（集積回路とも呼ばれる）は、ハッカー攻撃又は他のいくつかの機能エラーの原因となる試みを認識した（例えば、ＩＣに存在する可能性のあるハードウェアまたはファームウェアのハッカー検出機能を使用する）場合、強力な認証を再計算して、事前計算された強力な認証と比較し、再計算された強力な認証のデータと事前計算された強力な認証のデータとの間に不一致が存在した場合、本明細書で説明するメモリエラー訂正のプロセスを有効にできる。
【０１２８】
（Ｖ）アクセストリガー
メモリがアクセスされるたびにターゲットメモリ全体をチェックする。この実施例は、例えば頻繁に実行されないコードにとっては適切である。メモリへのアクセスが少なく、リアルタイムのデータ完全性が極めて重要である場合、パフォーマンスのオーバーヘッドが比較的重要ではない。
【０１２９】
任意の特定の装置に上記の変化型の全て又は任意のサブセットを提供できる。
【０１３０】
図６に示すように、図１にかかる集積回路の操作の流れは、図１のプロセッサ１によって制御又は実行することができる。流れは、以下の操作の全て又は適切に順序付けられた任意のサブセットを含んでもよい。
【０１３１】
操作ステップ１００１
複数の文字が含まれるコードなどのコンテンツをメモリゾーンに入力する。各文字に対して、書き込み中に「文字認証データ（ｗｏｒｄ  ａｕｔｈ）」を計算し、「文字認証データ」を文字に隣接して記憶する。
【０１３２】
操作ステップ１００２
メモリコンテンツに対して「強力な認証」を実行し、結果をメモリのどこかに記憶し（例えば、強力な認証を実行する機能を備えたメモリイメージをオフラインで準備するエンティティなどによって事前に計算される）、セキュリティメモリアレイ２が常駐するＩＣに提供される。
【０１３３】
通常は、ＩＣの外部で１つのメモリイメージ（ｍｅｍｏｒｙ  ｉｍａｇｅ）を準備し、当該メモリイメージをＩＣに「注入」して、コンテンツに添付された認証コードと共にプログラミングする。
【０１３４】
操作ステップ１００３
メモリの読み取りを含め、通常どおりメモリを使用する。各メモリの読み取りには、
次のものが含まれる。
【０１３５】
先ずは、現在のコンテンツに文字認証の計算を行い、これは再計算の「文字認証」とも呼ばれる。
【０１３６】
続いて、操作ステップ１００１で記憶された事前計算の文字認証データをメモリから読み取り、計算された認証データと事前計算された文字認証データとを比較する。
【０１３７】
再計算された「文字認証データ」がメモリから読み取られた事前計算された「文字認証データ」と等しい場合は、全てのデータが正常であるため、操作を続行する。等しくない場合は、エラーが識別されたと想定して、エラー訂正シーケンスを開始する。
【０１３８】
可能なエラー訂正のテストを含む適切なエラー訂正シーケンスフローは図７に示されるように、以下の操作の全て又は適切に順序付けられた任意のサブセットを含んでも良い。また、エラー訂正機能によって制御または実行することもできる、そのエラー訂正機能はソフトウェアで実行され、図１のプロセッサ１に常駐することができる。
【０１３９】
操作ステップ１００６
訂正待ちコンテンツにエラー修正を実行する。当該訂正待ちコンテンツは、文字と、文字に関連する文字認証とを含む。文字と文字認証とは組み合わせである（例えば、順次の組み合わせ）ため、結合されたビットのストリングが提供される。エラー訂正は、全てのビットをスキャンすることと、結合されたビットのストリングにおける各ビット（ターゲットが１ビットエラーを訂正する場合）及び各ビットのペア（ターゲットが２ビットエラーを訂正する場合）の少なくとも一方をフリップし、文字認証データを再確認することとを含む。エラーが、文字に存在するではなく、文字認証データに存在する可能性があるため、メモリに記憶されたメモリ文字認証データと比較しない。代替的に、１ビットをフリップして、文字認証データを再計算し、再計算された文字認証を使用可能な文字認証データと比較する。例えば、Ｘビットの読み取りデータとＹビットの認証データをメモリから読み取り、この組み合わせられた構造でビットをフリップする。フリップされたビットがＸビットのデータにあると、訂正後のデータのＸビットの認証を再計算し、再計算された認証データをメモリから読み取られたＹビットの認証データと比較する。
【０１４０】
フリップされたビットがＹビットの認証データのビットである場合、メモリから読み取られたＸビットの認証データを再計算し、訂正されたＹビットの認証データと比較する。
【０１４１】
一致が見つかった場合（比較された文字認証データが等しいことが見つかった場合）、文字と文字認証データが「一致している」ことを意味しているため、操作ステップ１００９に進む。一致が見つからない場合は、次のビット（又はそのペア）をフリップし、上記の再計算と比較の操作を繰り返す。ここおよび他の場所で、「次の」という用語は、実際的に隣接していても、適切なヒューリスティック法により定義されたビット間の順序付けによって、順次または次々と見なされるビットであってもよい。
【０１４２】
操作ステップ１００８
このステップに入ると、通常、ビットフリップ（または２ビットエラーの場合にそのペアフリップ）が実行可能な訂正を生成しなかったため、文字レベルでエラー訂正が失敗した。従って、このメモリコンテンツを訂正不可能なメモリコンテンツにマークする。例えば、図１に示すようにより高いレベルのソフトウェアに警告し、システムを停止することで、プロセッサ１及びその組み合わせは（例えば、適切な出力指示を生成することにより）より高いレベルの回復を促すことができる。例えば、集積回路が取り付けられた装置をに送ってテクニカルサポートを行う。
【０１４３】
操作ステップ１００９
「強力な認証」を行い、例えばメモリゾーン全体のＨＭＡＣなどのダイジェストを計算して、強力な認証結果を生成する。通常、強力な認証は、ダイジェスト／  ＭＡＣ  ／サインを生成する。
【０１４４】
操作ステップ１００１０
強力な認証結果を操作ステップ１００２でメモリに記憶された事前計算の強力な認証結果と比較する。結果が等しい場合、強力な認証は一致である。それ以外の場合（等しくない）は、強力な認証は不一致である。
【０１４５】
操作ステップ１００１１
強力な認証は一致であり、訂正後にメモリコンテンツが合格であることを示す場合は、通常どおりこのメモリを使用し続ける。例えば、操作ステップ１００３を実行する。
【０１４６】
操作ステップ１００１２
それ以外の場合、即ち、強力な認証は不一致である場合、例えば図８のような不一致プロセスを実行する。図８に示すように、操作ステップ１００１２における不一致プロセスの適切なフローは、以下の操作の全て又は適切に順序付けられた任意のサブセットを含んでも良い。また、次のように、エラー訂正機能によって制御または実現できる。
【０１４７】
操作ステップ１００１２．５
操作ステップ１００６をやり直すことにより、図１のメモリアレイ２全体をスキャンするが、識別されたすべてのエラーを修正する。
【０１４８】
操作ステップ１００１３
操作ステップ１００９〜１００１１をやり直すことにより、強力な認証をやり直す。
【０１４９】
操作ステップ１００１４
強力な認証が失敗した場合（つまり、不一致の場合）、訂正できないと想定して、より高いレベルの回復が必要になる場合がある。従って、このメモリコンテンツを訂正不可能なメモリコンテンツにマークする。例えば、図１に示すようにより高いレベルのソフトウェアに警告し、システムを停止することで、プロセッサ１及びその組み合わせは（例えば、適切な出力指示を生成することにより）より高いレベルの回復を促すことができる。例えば、集積回路が取り付けられた装置をに送ってテクニカルサポートを行う。
【０１５０】
例えば図７の方法に従って、可能なエラー訂正をテストする機能は、ハードウェアまたはファームウェアで実行できる別個のステートマシンを含んでもよい。この機能は、認証機能から「認証サービス」を取得し、これには通常、修正を試みた後の文字認証の検証（例えば、上記の操作ステップ１００６）、強力な認証を使用したメモリ全体の検証（例えば、上記の操作ステップ１００９〜１００１２）、又は両者の組み合わせが含まれる。
【０１５１】
以上のすべてまたは大部分のハードウェアの実行は、通常、最高のパフォーマンスが得られる。これは、フロー全体がハードウェアで実行すると、メモリを使用している間にハードウェアによってオンザフライの検証が実行され、エラーがなければパフォーマンスは低下しないためである。
【０１５２】
ほとんどすべての実行がファームウェアで行われている場合、オンザフライの文字検証を省略でき、代わりに、定期的、時々又は両者の組み合わせでメモリスキャンを実行してエラーをチェックした後に、エラーが見つかった場合、訂正及び検証を実行する（例えば、上記の操作ステップ１００６〜１００１２）。
【０１５３】
すべての実行がファームウェアで行われている場合、既存のＩＣ（レガシーＩＣとも呼ばれる）を使用できる。既存のＩＣは通常、既存のメモリ構造（レガシーメモリ構造とも呼ばれる）を備えており、ソフトウェアで論理的に再配置または管理して、ここで説明するエラー訂正プロセスで計算された文字認証を記憶する。このような場合、エラーの検出と訂正は、通常、上記のようなオンザフライではなく、オフラインで実行される。
【０１５４】
既存の（またはレガシーの）ＩＣがレガシーの認証機能を使用してメモリコンテンツをいくつかの標準コンテンツ（たとえば、最近の認証メモリーの更新直後に計算されたダイジェスト）と比較する場合でも、可能なエラー訂正をテストするためのインタフェースが認証機能または「認証サービス」から取得した認証機能を有することを保証するために、任意の適切な実施方式を採用することができる。実施方式は通常、認証機能が提案されたテスト待ちエラーを標準コンテンツと比較することを保証できる。例えば 次のように、
【０１５５】
（１）ＦＷは、メモリからデータ文字及び文字認証データを読み取ることができる。
【０１５６】
（２）ＦＷは、それ自体でデータ文字の認証データを計算する、又はいくつかの専用のハードウェアを使用してデータ文字の認証を計算することができる。
【０１５７】
（３）ＦＷは、計算の結果をメモリから読み取られた認証データと比較し、データ構造が一致しているかどうか、またはエラーがあるかどうかを確認する。
【０１５８】
（４）ＦＷがエラーを識別した場合、ＦＷは、本明細書に記載されるビットフリッピングプロセス（ｂｉｔ  ｆｌｉｐｐｉｎｇ  ｐｒｏｃｅｓｓ）を実行して、上記の操作（２）のように認証データを計算することができる。
【０１５９】
（５）メモリを介してエラー訂正が完了されると、ＦＷは、それ自体で又はいくつかのハードウェアを使用してメモリコンテンツ全体のダイジェストを計算できる。これらのハードウェアは、システムの設計者が選択した任意のＭＡＣアルゴリズムの実行を加速または容易にすることができる。
【０１６０】
本明細書のいくつかの実施例の利点は、エラー訂正が上記の追加の認証（通常は強力な認証及び文字認証）を必要とするオーバーヘッドを生成しないことである。
【０１６１】
本明細書のいくつかの実施例の別の利点は、本明細書で説明されるようなエラーの推測的な訂正（様々な可能なエラー訂正のテスト）は、ビット数にハードリミットを設定しないことである。逆に、従来のエラー訂正方式は、ある種のエラー訂正コードを実行する。例えば、特定のＸビットのデータサイズに対して、いくつかの事前に決定されたエラー数、バイナリの組み合わせの数、および選択された方法は、エラー訂正コードに必要なビット数を指定する。一度実行すると、事前に決定された数のビットエラーのみを訂正できない。エラーを訂正する実際的な複雑さは、通常、訂正しようとするビット数が増えるにつれて増大する。ただし、必要に応じて、特定のユースケースが妥当であれば、非常に強力な認証を使用して訂正された任意の数のエラーを検証して、任意の数のビットエラーを訂正できる。
【０１６２】
本明細書のいくつかの実施例の別の利点は、認証を利用して検証が行われ、高レベルの信頼性を有する正しいエラー訂正を生成する。例えば、強力な認証を使用して提案された訂正を検証する場合、これは通常、「訂正されたデータ」（つまり、提案された訂正）に対する強力な認証の結果が、予想される強力な認証と一致すること（例えば、等しい）を示すと、暗号レベルの信頼度は、訂正されたデータに対して確かに正しいことを意味する。
【０１６３】
ＥＣＣ（エラー訂正コード）を実行する従来の技術システムと比較して、本明細書のいくつかの実施例の別の利点は、悪意のあるコンテンツの変更を防止することである。ただし、悪意のある攻撃は、データとエラー訂正コードの両方が相互に一致した方法で置き換えて、エラーが訂正されたように見える一方で、実際にはコンテンツまたはコードが不良または悪意のあるものである可能性がある。逆に、ここで説明するエラー訂正に使用される認証の利点によって、ここでの方法は暗号的に強力であるため、攻撃者は、上記のようにデータと認証コードを悪意を持って置き換えることができなくなる。
【０１６４】
オンザフライの認証を使用することは、エラーが含まれていることが判明しない限り、パフォーマンスが損なわれない（認証は並行して行われる）、及び／又は既に読み取られたデータを遅延なくすぐに使用できるため、特に有利である可能性がある。
【０１６５】
コードを実行するメモリや、持続的な又は頻繁に変更されない大きなデータブロブなどのメモリコンテンツへのアクセスが制御されている場合、例えば安全または制御された（ファームウェア）更新によってのみ変更されるメモリコンテンツは、特にメモリが保護されていない又は外部にある場合、図２のフローから利点を得られる。図２のフローから利点を得られるメモリには、ＥＥＰＲＯＭ、ハードディスク、ＮＡＮＤフラッシュ、ＮＯＲフラッシュ、ＳＤＲＡＭ、ＳＲＡＭが含まれるが、これらに限定されない。
【０１６６】
安全な（ファームウェア）更新以外に、メモリへのアクセスを制御するためのさまざまなソリューションが存在する。特に、メモリコンテンツへのアクセスを厳密に制御できるさまざまなテクノロジが知られている。たとえば、コンテンツを実行のみのメモリ、又はコンテンツの読み取りのみが可能で、いくつかのアクセス権限を取得または認証した後、専用ゲートウェイを介して更新しまたは書き込み、または特定のアクセス権限を持っている場合にのみ変更可能なアクセス制御設定を変更した後にのみ書き込み可能なメモリ。
【０１６７】
メモリコンテンツは頻繁に変更されない、例えば、いくつかのメモリコンテンツは、通常、十分に低い頻度で変更されて、ここで説明するシステムと方法により生成されるオーバーヘッドにコスト効率を持たせる。例えば、ソフトウェアの更新が定期的またはときどき発生するため、コードは数か月ごとに一回だけ変更され、または、いくつかのデータが数日または数週間ごとに一回だけ変化され、或いはそれらの間隔で平均的に変化する場合がある。逆に、いくつかのデータはソフトウェアによって操作される可能性があるため、プログラムが実行または動作されるたびに変化する可能性がある。
【０１６８】
多くの変化型が可能である。例えば、いくつかの実施例によれば、エラーがある場合、当該エラーを訂正（修正とも呼ばれる）し、その後、メモリを直ちに修復する。続いて、どんなプロセスが実行されても、実行を続ける。
【０１６９】
追加的または代替的に、装置が実行を継続できるように、実際のメモリコンテンツの修復を後で延期することにより、オーバーレイパッチ（ｏｖｅｒｌａｙ  ｐａｔｃｈ）を提供する。これは、ＮＶＭの処理時間は長くなり、装置がこの操作をオンラインで実行しようとするときに遅延を引き起こす可能性があるため、装置がこの操作をオフラインで完了し、後で実行されると、装置が実行を継続できるようになる点では有益である。専用のオーバーライドパッチでキャッシュ（不揮発性または揮発性）されたコンテンツは通常、同じＩＣにおいて任意のコンピューターメモリに常駐できる。ターゲットメモリが必要な場合に引き出されて修復されるように、ターゲットメモリを使用する任意のプロセッサはそのメモリにアクセスしてもよい。
【０１７０】
可能な変化型の別の例は、強力な認証及び文字認証のレベルを含むが、これに限定されない、可能なエラー訂正を個別的に又は任意の適切な組み合わせでテストするために、任意の適切な認証を使用してもよい。
【０１７１】
フローは、強力な認証によってメモリに存在するエラーのみを識別することを要求する場合、存在するエラーが識別されると、各メモリビットがフリップされた後に、強力な認証がビットフリップ（またはそのペア）を検証できる。しかしながら、強力な認証は重い、つまりかかる時間は長くて、リソースを消費する操作であるが、小型のメモリゾーンにとっては完全に実行できるため、２つのレベルの認証を提供する必要がない場合がある。
【０１７２】
多くの使用例では、２つのレベルを使用することは、このプログラムを保証するのに有効である。本明細書では、２つのレベルとは、文字認証及び強力な認証を意味し、両者はレベルが異なり、つまり、文字認証は、かかる時間がより短い及び／又はより少ないリソースを消費する。強力な認証は、かかる時間がより長い及び／又はより多いリソースを消費する。
【０１７３】
大型のメモリゾーンの場合、文字認証（一般的に）を有すると、通常はより高い効率的なプロセスになる。これは、文字ベース（文字レベル）にエラーが検出され、文字レベルに提案された基本検証（推測的な修正も呼ばれる（ｓｐｅｃｕｌａｔｉｖｅ  ｃｏｒｒｅｃｔｉｏｎｓ））も行われる場合があるためである。したがって、文字レベルの認証は省略される実施例と比較して、認証又は検証の訂正のために強力な認証をあまり頻繁に実行する必要はない。
【０１７４】
例（１）
提案された訂正を推測し、提案された訂正を適用してから、強力な認証で訂正を検証する。これが失敗した場合は、再試行し、別の訂正を推測する。
【０１７５】
例（２）
提案された訂正を推測し、文字認証をチェックする。これが失敗した場合は、成功される文字認証を得るまで、別の提案された訂正を推測し、再び文字認証を使用してチェックする。この後、訂正される最終の検証として強力な認証を使用する。当該強力な認証は、文字認証がなくても使用できる。
【０１７６】
別の可能な変化型は、任意の適切な方法を使用して、メモリコンテンツに対して検証された提案の訂正を実際に行うことができることである。例えば、メモリコンテンツがコードである場合、検証された提案の訂正をコードに適用するために、パワーフェイルセーフのコード回復更新プロセスを使用してコードを修正する。前記コードは、例えば認証に失敗したため、エラーが発見されたコードである。
【０１７７】
変化型は、パフォーマンス、領域、実行時間及び信頼性のあるトレードオフに応じて、設計できる。例えば、以下のように
【０１７８】
Ａ：より大きな「オンザフライのコード文字」は、以下の結果を生成できる。
【０１７９】
（１）より小さいフラッシュ領域とフェッチスループットのオーバーヘッド（ｔｈｒｏｕｇｈｐｕｔ  ｏｖｅｒｈｅａｄ）（特定の「冗長性」幅の場合）。
【０１８０】
（２）より長いビット修正時間（すべてのビットをスキャンするため）。
【０１８１】
（３）より大きなフェッチレイテンシ（ｆｅｔｃｈ  ｌａｔｅｎｃｙ）（実行前にチェックを待機している場合、ＵＳ２０１４００８２７２１の方法を使用できる、この特許文献は（ｈｔｔｐｓ：／／ｐａｔｅｎｔｓ．ｇｏｏｇｌｅ．ｃｏｍ／ｐａｔｅｎｔ／ＵＳ２０１４００８２７２１Ａ１／ｅｎ？ｏｑ＝１３％２ｆ９６５％２ｃ２５６））、前記特許文献を引用して本明細書に組み合わせて、以下のようなコンピューティング装置を説明する。
【０１８２】
プログラムの実行時に使用されるデータ項目のシーケンスを受信するように接続された入力ブリッジと、出力ブリッジと、前記入力ブリッジから前記データ項目のシーケンスを受信し、前記プログラムを実行して、前記出力ブリッジを前記データ項目のシーケンスにおける特定のデータ項目に応答させて信号を出力させるように接続された処理コアと、前記処理コアが前記プログラムを実行している間に前記データ項目のシーケンスを受信して認証し、前記特定のデータ項目が認証されるまで前記出力ブリッジによる信号の出力を禁止するようにする認証ロジックとを、備えるコンピューティング装置。
【０１８３】
Ｂ：より小さい選択に比べて、より大きな「オンザフライの冗長文字」は、以下の結果を生成できる。
【０１８４】
（１）より安全で信頼性の高い、より速い修正。
【０１８５】
（２）より大きなフラッシュ領域とフェッチスループットのオーバーヘッド。
【０１８６】
Ｃ：より小さい選択に比べて、より大きな「強力な認証」サイズ（ビット単位）は、以下の結果を生成できる。
【０１８７】
（１）より安全な、つまり、認証された元のコンテンツ又はメモリの認証されたコンテンツが正しいという信頼度が高まる。
（２）より大きいフラッシュ領域のオーバーヘッド（通常は無視できる）。
（３）ＳＨＡ２５６−５１２  ＨＭＡＣは良い選択のようだ。
【０１８８】
Ｄ：より大きい選択に比べて、より小さいコードセグメンテーション（ｃｏｄｅ  ｓｅｇｍｅｎｔａｔｉｏｎ）（コードをそれぞれに「強力な認証」を有するセグメントに分割する場合）は、以下の結果を生成できる。
（１）より大きい領域のオーバーヘッド。
（２）より速い訂正時間。
（３）ＨＡＳＨが累積的である場合、つまりブート／サイクルランタイムを維持できる。即ち、コード全体に１つのＨＡＳＨを使用する同時に、中間結果を保持して訂正プロセスをスピードアップする。
【０１８９】
１つのアドバイスは、トレードオフパラメータを動的に決定することである。例えば、異なる（大きいまたは小さい）「オンザフライ冗長文字」及び／又は異なる（大きいまたは小さい）「強い認証」サイズ及び／又は異なる（大きいまたは小さい）セグメンテーション（コードを「強力な認証」を有するセグメントに分割する場合）。フラッシュ統計メッセージごとおよび/またはウェアレベル（ｗｅａｒ  ｌｅｖｅｌ）ごとに、例えば、ターゲットメモリーが劣化した場合、上記のトレードオフパラメータをターゲットメモリが劣化していない時よりも速く及び／又はロバストなエラー訂正に変更する。例えば、劣化したフラッシュの動作は、劣化していないフラッシュの動作と比較して、遅くなるためである。
【０１９０】
いくつかの実施例によれば、統計的訂正を伴うオンザフライの「文字認証」が提供される。ターゲットメモリ全体ですべてのシングルビットフリップオプション（可能な訂正）のブルートフォース別名ダムスキャンを実行するのではなく、代わりに、特定の文字でエラーが検出された場合は、「ショートカット」（基本型の実施例に対して）を採用する。
【０１９１】
特定の文字のすべてのシングルビットフリップをスキャンし又は検索して、特定の文字を再び訂正しようとし、ペイロード文字が認証された文字と一致するように訂正できる場合は、メモリコンテンツの完全性に対する最高の検証として、強力な認証を呼び出す。
【０１９２】
従って、本発明の実施例は、特に以下のことを含む。
【０１９３】
実施例（Ａ）
ターゲットメモリコンテンツの少なくとも一部の完全性を検証するために、ターゲットメモリ全体の少なくとも一部のビットフリップオプションのスキャンを含む強力な認証を呼び出すことを含む認証とエラー訂正を組み合わせる方法。
【０１９４】
実施例（Ｂ）
実施例（Ａ）の方法によれば、スキャンは、ターゲットメモリ全体に対して実行される。
【０１９５】
実施例（Ｃ）
統計的訂正の実施例を有するオンザフライ「文字認証」は、実施例（Ａ）の方法によれば、文字認証が使用され、特定の文字に認証エラーが検出された場合、ターゲットメモリ全体ではなく、特定の文字のみスキャンして、特定の文字を訂正しようとする。ペイロード文字が認証文字と一致する場合は、メモリコンテンツの完全性に対する最高の検証として、強力な認証を呼び出す。
【０１９６】
統計的訂正において、メモリコンテンツの訂正が成功する保証はない。
【０１９７】
図１では、「他のプロセッサ機能」は、図示したプロセッサが、ここに記載された特定の機能以外の主要な機能を持ち、タイマー、通信チャネル、コンバータの全部または任意のサブセットなどの周辺機器を使用してもよい。
【０１９８】
図１０の「１ビットをフリップする」のステップは、例えば、普通のロジック設計者及びソフトウェア設計者が知られた任意の適切な置換スキャンプロセスを使用して、ハードウェア、ソフトウェア、およびその組み合わせで実行できる。
【０１９９】
図９及び図１０の少なくとも一方の「計算認証」のステップは、オンラインの文字認証計算を含んでもよい。文字認証は、異なる強度のレベルを持ち、通常、強度及びパフォーマンスの間には、トレードオフがある。強度を極端にすると、文字認証が修正の最終的な判定になる可能性があると想定できる。このような場合、強力な認証はオプション（ｏｐｔｉｏｎａｌ）になる。従って、文字認証を単独で使用し、又は強力な認証を単独で使用し、両者を同時に使用してもよい。この場合、文字認証を簡略化でき（低いレベルの強度で実行できるため、より良いパフォーマンスを生成する）、強力な認証に依存して最終的な判定をする。
【０２００】
ファームウェアは、本明細書のいくつかの実施例を実現するために使用される場合、当該ファームウェアをフラッシュまたはＲＯＭなどの不揮発性メモリに記憶してもよい。
【０２０１】
代替的に、本明細書で説明するいくつかの実施例は、ハードウェアで部分的または排他的に（即ち、ファームウェアなしで）実行でき、その場合、本明細書で説明する変数、パラメータ、逐次演算及び計算の一部またはすべてがハードウェアで実施できる。
【０２０２】
「強制的」、「要求」、「必要」などの用語とは、明確にするために本明細書で説明する特定の実施方式またはアプリケーションのコンテキスト内で行われた実施方式の選択を指し、限定を意図するものではない。代替的な実施方式において、同じ要素が必要ではなくと定義されている場合や、完全に削除されている場合もある。
【０２０３】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
【符号の説明】
【０２０４】
１…プロセッサ
２…メモリアレイ
６…ハードウェア
７…ファームウェア
１０…集積回路
１６…システム
１８…ソフトウェア
【図１】
2020195134.tif 000003
【図２】
2020195134.tif 000004
【図３】
2020195134.tif 000005
【図４】
2020195134.tif 000006
【図５】
2020195134.tif 000007
【図６】
2020195134.tif 000008
【図７】
2020195134.tif 000009
【図８】
2020195134.tif 000010
【図９】
2020195134.tif 000011
【図１０】
2020195134.tif 000012
【図１１】
2020195134.tif 000013
【図１２】
2020195134.tif 000014