IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ クリプトグラフィ リサーチ, インコーポレイテッドの特許一覧

<>
  • 特表-ランダムアクセシング 図1
  • 特表-ランダムアクセシング 図2
  • 特表-ランダムアクセシング 図3A
  • 特表-ランダムアクセシング 図3B
  • 特表-ランダムアクセシング 図4
  • 特表-ランダムアクセシング 図5
  • 特表-ランダムアクセシング 図6
  • 特表-ランダムアクセシング 図7
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2022-11-01
(54)【発明の名称】ランダムアクセシング
(51)【国際特許分類】
   G06F 21/75 20130101AFI20221025BHJP
   G11C 8/20 20060101ALI20221025BHJP
   G06F 12/06 20060101ALI20221025BHJP
【FI】
G06F21/75
G11C8/20
G06F12/06 515
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2022502950
(86)(22)【出願日】2020-08-14
(85)【翻訳文提出日】2022-01-17
(86)【国際出願番号】 US2020046356
(87)【国際公開番号】W WO2021041054
(87)【国際公開日】2021-03-04
(31)【優先権主張番号】62/894,716
(32)【優先日】2019-08-31
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.VERILOG
(71)【出願人】
【識別番号】509285746
【氏名又は名称】クリプトグラフィ リサーチ, インコーポレイテッド
(74)【代理人】
【識別番号】100079108
【弁理士】
【氏名又は名称】稲葉 良幸
(74)【代理人】
【識別番号】100109346
【弁理士】
【氏名又は名称】大貫 敏史
(74)【代理人】
【識別番号】100117189
【弁理士】
【氏名又は名称】江口 昭彦
(74)【代理人】
【識別番号】100134120
【弁理士】
【氏名又は名称】内藤 和彦
(74)【代理人】
【識別番号】100126480
【弁理士】
【氏名又は名称】佐藤 睦
(72)【発明者】
【氏名】ベスト,スコット,シー.
(72)【発明者】
【氏名】マーソン,マーク,エヴァン
(72)【発明者】
【氏名】ウィットナー,ジョエル
【テーマコード(参考)】
5B160
【Fターム(参考)】
5B160AA13
(57)【要約】
乱数ジェネレータはアドレスを選択し、一方、レジスタ(またはビット)の「スコアボード」バンクは、(例えば、データの一部を格納または検索するために)どのアドレスがすでに出力されているかを追跡する。アドレスがすでに出力されていることをスコアボードが検出すると、ランダムに選択されたものではなく、まだ使用されていない第2のアドレスが出力される。第2のアドレスは、まだ出力されていない近くのアドレスから選択され得る。
【選択図】図1
【特許請求の範囲】
【請求項1】
アドレス生成回路であって、
アドレスのセットから候補アドレスをランダムに選択するための候補アドレスジェネレータと、
前記アドレスのセットからの前記アドレスのすべてが出力される前に、候補アドレスが少なくとも一度はすでに出力されているかどうかを決定するためのリピートアドレス検出器と、
前記候補アドレスがまだ少なくとも一度も出力されていない場合、前記候補アドレスを出力し、前記候補アドレスがすでに少なくとも一度出力されている場合、前記アドレスのセットから選択して、まだ少なくとも一度も出力されていない異なるアドレスを出力する出力セレクタと、を含む、アドレス生成回路。
【請求項2】
前記アドレスのセットのそれぞれに対応するインジケータのセットであって、前記アドレスのセットのそれぞれがすでに少なくとも一度出力されているかどうかに対応するインジケータのセットをさらに含む、請求項1に記載のアドレス生成回路。
【請求項3】
アドレスが出力されたとき、前記インジケータのセットの対応する1つの値を変更するインジケータアップデータをさらに含む、請求項2に記載のアドレス生成回路。
【請求項4】
前記異なるアドレスは、前記インジケータのセットに少なくとも部分的に基づいて選択される、請求項2に記載のアドレス生成回路。
【請求項5】
前記候補アドレスは、乱数ジェネレータからの値に基づいて選択される、請求項1に記載のアドレス生成回路。
【請求項6】
前記異なるアドレスは、前記乱数ジェネレータからの値に少なくとも部分的に基づいて選択される、請求項5に記載のアドレス生成回路。
【請求項7】
前記候補アドレスは、不揮発性メモリをアドレス指定するために使用される、請求項1に記載のアドレス生成回路。
【請求項8】
アクセスアドレスのセットを出力する方法であって、
ランダムに生成された数に少なくとも部分的に基づいて、前記アクセスアドレスのセットから第1のアドレスを選択することと、
前記アクセスアドレスのセット内の他のアドレスのすべてが出力される前に、前記第1のアドレスが出力されたかどうかを決定することと、
前記アクセスアドレスのセット内の前記他のアドレスのすべてが出力される前に、前記第1のアドレスがまだ出力されていない場合、前記第1のアドレスを出力することと、
前記アクセスアドレスのセット内の前記他のアドレスのすべてが出力される前に、前記第1のアドレスがすでに出力されている場合、前記アクセスアドレスのセット内の前記他のアドレスのすべてが出力される前に、まだ出力されていない第2のアドレスを選択し、前記第2のアドレスを出力することと、を含む、方法。
【請求項9】
前記アクセスアドレスのセットのそれぞれに各々対応するインジケータのセットを維持することであり、前記インジケータのセットは、前記アクセスアドレスのセット内の前記他のアドレスのすべてが出力される前に、前記アクセスアドレスのセットの前記それぞれが出力されたかどうかに関連付けられている、維持することをさらに含む、請求項8に記載の方法。
【請求項10】
前記インジケータのセットのうちの1つに対応するアドレスが出力されたとき、前記インジケータのセットのうちの前記1つの値を変更することをさらに含む、請求項8に記載の方法。
【請求項11】
前記第2のアドレスは、前記インジケータのセットに少なくとも部分的に基づいて選択される、請求項8に記載の方法。
【請求項12】
前記第1のアドレスは、乱数ジェネレータからの少なくとも1つの値に基づいて選択される、請求項8に記載の方法。
【請求項13】
前記異なるアドレスは、前記乱数ジェネレータからの値に少なくとも部分的に基づいて選択される、請求項12に記載の方法。
【請求項14】
前記第2のアドレスは、不揮発性メモリをアドレス指定するために使用される、請求項8に記載の方法。
【請求項15】
N個のアクセスアドレスのセットによってアドレス指定された機密データを格納するためのメモリであって、Nは、4より大きい、メモリと、
前記N個のアクセスアドレスのすべてが前記メモリのアドレス指定に使用されるまで、前記N個のアクセスアドレスのセットのうちの1つをランダムかつ非反復的に選択するためのアドレスジェネレータと、を含むメモリシステム。
【請求項16】
前記アドレスジェネレータは、前記N個のアクセスアドレスのセットから第1のアドレスをランダムに選択するためのものである、請求項15に記載のメモリシステム。
【請求項17】
前記アドレスジェネレータは、前記第1のアドレスが前記メモリをアドレス指定するために使用されたかどうかを決定するためのものである、請求項16に記載のメモリシステム。
【請求項18】
前記メモリシステムは、前記第1のアドレスが前記メモリをアドレス指定するために使用されていない場合、前記第1のアドレスに少なくとも部分的に基づいて前記メモリをアドレス指定するためのものである、請求項17に記載のメモリシステム。
【請求項19】
前記メモリシステムは、前記第1のアドレスが前記メモリをアドレス指定するために使用された場合、第2のアドレスに少なくとも部分的に基づいて前記メモリをアドレス指定するためのものである、請求項18に記載のメモリシステム。
【請求項20】
前記メモリシステムは、前記メモリをアドレス指定するために使用されていない前記N個のアクセスアドレスのセットのサブセットから前記第2のアドレスを選択するためのものである、請求項18に記載のメモリシステム。
【発明の詳細な説明】
【図面の簡単な説明】
【0001】
図1】アドレス生成論理を示すブロック図である。
図2】固定時間アドレス生成ブロックを示すブロック図である。
図3A-3B】例示的な固定時間アドレス生成論理を示す。
図4】ランダム化された順序でデータにアクセスするシステムを示す。
図5】アドレスを生成する方法を示すフローチャートである。
図6】アドレスを選択する方法を示すフローチャートである。
図7】処理システムのブロック図である。
【発明を実施するための形態】
【0002】
特定の秘密または機密データ(例えば、暗号化キー、または暗号化キーの一部)が、そのチップの不揮発性メモリ(「NVM」)内のチップに格納される場合がある。通常、このデータは線形順序で格納され、秘密データの第1の部分(例えば、ワード、バイト、ニブルなど)が第1のメモリ位置に格納され、第2の部分が第2のメモリ位置に格納され、以下同様である。また、データにアクセスすると、通常、線形順序でもアクセスされる(すなわち、第1のメモリ位置が読み取られ、次に第2のメモリ位置が読み取られるなど)。この従来の線形アクセスアプローチにより、データを要求するセキュリティコアとNVM回路の間のデータ信号を侵襲的に監視することで、攻撃者は、秘密データを回復することができる。このような攻撃では、攻撃者は、アドレスラインを監視する必要はなく、代わりに、回復したデータに対応するアドレスを推測できる。データラインの数がアドレスラインの数よりも大幅に少ないことが多いため(例えば、NVM回路は16本のアドレスラインを使用するが、出力バスは4ビットだけである)、攻撃者がデータラインを監視するだけで秘密データを回復できるようにすることで、侵入攻撃中の攻撃者の作業が大幅に簡素化される。
【0003】
一実施形態では、アドレスのアクセスパターンの生成中に乱数ジェネレータが使用され、一方、レジスタ(またはビット)の「スコアボード」バンクは、(例えば、データの一部を格納または検索するために)どのアドレスがすでに使用されているかを追跡する。アドレスがすでに使用されていることをスコアボードが検出すると、ランダムに選択されたものではなく、まだ使用されていない第2のアドレスが使用される。第2のアドレスは、まだ出力されていない近くのアドレスから選択され得る。このように、セキュリティコアが秘密データのブロックにアクセスしている間にデータラインを監視している攻撃者は、部分がランダムな順序でアクセスされているため、秘密データ全体を正しくつなぎ合わせることができない。同時に、スコアボードアプローチにより、セキュリティコアが必要最小限の時間で秘密データのブロックを取得できることが保証される。
【0004】
図1は、アドレス生成論理を示すブロック図である。図1では、アドレス生成システム100は、候補アドレスジェネレータ110、リピートアドレス検出器120、および出力アドレスセレクタ130を含む。候補アドレスジェネレータ110は、出力アドレスセレクタ130およびリピートアドレス検出器120に動作可能に結合されている。リピートアドレス検出器120は、出力アドレスセレクタ130に動作可能に結合されている。出力アドレスセレクタ130は、アドレス生成システム100によって出力されるアドレスを提供する。
【0005】
一実施形態では、候補アドレスジェネレータ110は、リピートアドレス検出器120および出力アドレスセレクタ130に候補アドレスを提供する。リピートアドレス検出器120は、所与の候補アドレスがアドレス生成システム100によってすでに提供されているかどうかを決定する(例えば、NVM回路からのデータの読み取りを担当するアービタ回路に提供される)。リピートアドレス検出器120は、アドレスのセット全体(または範囲)が出力されるまで、リピートアドレスが出力されるのを防ぐために、アドレスのセット全体(または範囲)が出力される前に、所与の候補アドレスがアドレス生成システム100によってすでに出力されているかどうかを決定してもよい。このようにして、アドレスのセット全体(または範囲)が、既知の(すなわち、固定された)数のトランザクション/サイクルなどで出力される。
【0006】
例えば、64バイト(またはワード、またはニブルなど)からなるデータのバーストを検索/格納するために、アドレス生成システム100は、0~63の範囲のアドレスを出力するように構成され得る。この範囲からのリピートアドレスは、範囲全体(すなわち、バースト/ブロック)が出力されるまで出力されないので、アドレス生成システム100は、リピートアドレスが出力されることを可能にする前に、64個のアドレスを出力する。言い換えれば、アドレス生成システム100は、所与の64バイトのデータブロックの検索/格納中、64個のアドレスの各々を正確に一度出力する。
【0007】
一実施形態では、候補アドレスジェネレータ110は、ランダムまたは疑似ランダムに生成された数(以下、まとめてランダムの、ランダム化された、またはランダムに選択された数と呼ぶ)に基づいて候補アドレスを出力する。リピートアドレス検出器120は、アドレスのセットまたは範囲からランダムに選択されたそれぞれの候補アドレスが、現在のブロックの検索/格納中にすでに出力されているかどうかを決定する。所与の候補アドレスが現在のバースト中にまだ出力されていないと決定された場合、出力アドレスセレクタ130は、アドレス生成システム100によって出力されるように、候補アドレスジェネレータ110によって提供される候補アドレスを選択する。所与の候補アドレスが現在のバースト中にすでに出力されていると決定された場合、出力アドレスセレクタ130は、リピートアドレス検出器120からの情報に基づいて、現在のバースト中にまだ出力されていないアドレスを選択する。
【0008】
一実施形態では、所与の候補アドレスが現在のバースト中にすでに出力されていると決定された場合、出力アドレスセレクタ130は、現在のバースト中にまだ出力されていない次に低い値(候補と比較した場合)のアドレスを選択し得る。まだ出力されていない低い値のアドレスがない場合、出力アドレスセレクタ130は、現在のバースト中にまだ出力されていない次に高い値(候補と比較した場合)のアドレスを選択し得る。同様に、別の実施形態では、所与の候補アドレスが現在のバースト中にすでに出力されていると決定された場合、出力アドレスセレクタ130は、現在のバースト中にまだ出力されていない次に高い値(候補と比較した場合)のアドレスを選択し得る。まだ出力されていない高い値のアドレスがない場合、出力アドレスセレクタ130は、現在のバースト中にまだ出力されていない次に低い値(候補と比較した場合)のアドレスを選択し得る。
【0009】
別の実施形態では、所与の候補アドレスが現在のバースト出力中にすでに出力されていると決定された場合、出力アドレスセレクタ130は、乱数に基づいて、現在のバースト中にまだ出力されていない次に低い値または高い値のアドレスを選択するかどうかを選択し得る。乱数に基づいて次に高い値のアドレスが選択され、まだ出力されていない高い値のアドレスがない場合、出力アドレスセレクタ130は、現在のバースト中にまだ出力されていない次に低い値のアドレス(候補と比較した場合)を選択してもよい。同様に、乱数に基づいて次に低い値のアドレスが選択され、まだ出力されていない低い値のアドレスがない場合、出力アドレスセレクタ130は、現在のバースト中にまだ出力されていない次に高い値のアドレス(候補と比較した場合)を選択してもよい。
【0010】
図2は、固定時間アドレス生成ブロックを示すブロック図である。図2において、アドレス生成システム200は、乱数ジェネレータ211、アドレスセレクタ231、および使用されたアドレス追跡221を含む。乱数ジェネレータ211は、アドレスセレクタ231に動作可能に結合されている。乱数ジェネレータ211は、アドレスセレクタ231に動作可能に結合されて、セレクタ231がアドレス生成システム200によって出力される少なくとも1つのアドレスを選択するために少なくとも部分的に使用する、少なくとも乱数を提供する。
【0011】
アドレス追跡221は、セレクタ231に動作可能に結合されている。アドレス追跡221は、セレクタ231に動作可能に結合されて、アドレスのセット(または範囲)からどのアドレスが出力されたか、または出力されなかったかに関する情報をセレクタ231に提供する。所与の出力サイクルにおいて、セレクタ231は、少なくとも、乱数ジェネレータ211によって提供される乱数、およびアドレス追跡221からの情報に基づいて、アドレス生成システム200によって出力されるアドレスを提供する。アドレス生成システム200によって出力されたアドレスは、使用されたことが示されるように、アドレス追跡221にフィードバックされる。
【0012】
一実施形態では、乱数ジェネレータ211は、セレクタ231に乱数を提供する。この乱数は、候補アドレスを含み得る。この乱数は、候補アドレスへのインデックス(例えば、まだ使用されていないアドレスのテーブルへのインデックス)を含み得る。セレクタ231は、追跡221からの情報に少なくとも部分的に基づいて、候補アドレスがアドレス生成システム200によってすでに出力されているかどうかを決定する。セレクタ231は、アドレスのセット全体(または範囲)が出力されるまで、リピートアドレスが出力されるのを防ぐために、所与の候補アドレスがすでに出力されているかどうかを決定してもよい。このようにして、アドレスのセット全体(または範囲)が、既知の(すなわち、固定された)数のトランザクション/サイクルなどで出力される。
【0013】
例えば、64バイト(またはワード、またはニブルなど)からなるデータのバーストを検索/格納するために、乱数ジェネレータ211は、0~63の範囲の候補アドレスを出力するように構成され得る。乱数ジェネレータ211は、候補アドレスの実質的に(または事実上)ランダムなシーケンスを出力するので、乱数ジェネレータ211は、範囲内のすべての数が出力される前に、範囲から1つ以上のリピートアドレスを出力することが可能である。リピート候補アドレスが発生すると、セレクタ231は、アドレス追跡221からの情報を使用して、この発生を検出する。次に、セレクタ231は、この再度発生するアドレスが出力されるのを防ぎ、(追跡221からの情報にも基づいて)まだ出力されていない新しいアドレスを出力するように選択する。このようにして、アドレス生成システム200は、所与の64バイトのデータブロックの検索/格納中、64個のアドレスの各々を正確に一度出力する。
【0014】
一実施形態では、乱数ジェネレータ211は、ランダムまたは疑似ランダムに生成された数のシーケンスを出力する。シーケンス内の各数は候補アドレスを含んでいてもよい(例えば、乱数ジェネレータ211によって出力されたビットのサブセットが候補アドレスとして使用され、残りはセレクタ231によって他の目的に使用されてもよい)。セレクタ231は、追跡221からの情報について、現在のブロックの検索/格納中に、それぞれのランダムに生成された候補アドレスがすでに出力されているかどうかを決定する。所与の候補アドレスが現在のバースト中にまだ出力されていないと決定された場合、セレクタ231は、アドレス生成システム200によって出力されるように、乱数ジェネレータ211によって提供される候補アドレスを選択する。所与の候補アドレスが現在のバースト中にすでに出力されていると決定された場合、セレクタ231は、少なくとも追跡221からの情報に基づいて、現在のバースト中にまだ出力されていないアドレスを選択する。
【0015】
一実施形態では、所与の候補アドレスが現在のバースト中にすでに出力されていると決定された場合、セレクタ231は、追跡221からの情報に基づいて、現在のバースト中にまだ出力されていない次に低い値(候補と比較した場合)のアドレスを選択し得る。まだ出力されていない低い値のアドレスがない場合、セレクタ231は、追跡221からの情報に基づいて、現在のバースト中にまだ出力されていない次に高い値(候補と比較した場合)のアドレスを選択し得る。逆に、別の実施形態では、所与の候補アドレスが現在のバースト出力中にすでに出力されていると決定された場合、セレクタ231は、追跡221からの情報に基づいて、現在のバースト中にまだ出力されていない次に高い値(候補と比較した場合)のアドレスを選択し得る。まだ出力されていない高い値のアドレスがない場合、セレクタ231は、追跡221からの情報に基づいて、現在のバースト中にまだ出力されていない次に低い値(候補と比較した場合)のアドレスを選択し得る。
【0016】
別の実施形態では、所与の候補アドレスが現在のバースト中にすでに出力されていると決定された場合、セレクタ231は、追跡221からの情報、および乱数(例えば、乱数ジェネレータ211から受信された乱数のうち、候補アドレスとして使用されなかった1つ以上のビット)に基づいて、現在のバースト中にまだ出力されていない次に低い値または高い値のアドレスを選択するかどうかを選択し得る。乱数に基づいて次に高い値のアドレスが選択され、まだ出力されていない高い値のアドレスがないとき、セレクタ231は、追跡221からの情報に基づいて、現在のバースト中にまだ出力されていない次に低い値のアドレス(候補と比較した場合)を選択してもよい。同様に、乱数に基づいて次に低い値のアドレスが選択され、まだ出力されていない低い値のアドレスがないとき、セレクタ231は、追跡221からの情報に基づいて、現在のバースト中にまだ出力されていない次に高い値のアドレス(候補と比較した場合)を選択してもよい。
【0017】
図3Aおよび3Bは、例示的な固定時間アドレス生成論理を示す。図3Aは、次のアドレスを生成するための例示的な回路を示す。図3Aでは、次のアドレスジェネレータ301は、乱数ジェネレータ(RNG)311、64ビットアドレス追跡レジスタ321(別名、「ATR」または「スコアボード」)、アドレス追跡制御322、64:1マルチプレクサ(MUX)331、12:6 MUX 332、12:6 MUX 333、6ビットラストアドレスレジスタ351、2入力ORゲート352、2入力ANDゲート353、およびINVゲート354を含む。この実施形態では、ATR321は、アドレス0で始まり、アドレス63で終わる「線形」レジスタとして示されていることに留意されたい。他の実施形態では、ATRは、63より上の増分アドレスがアドレス0であり、0より下の増分アドレスが63であるように、「循環」方式で編成することができる。
【0018】
一実施形態では、アドレスジェネレータ301は、出力される次のアドレスを選択する。例えば、RNG311は、7ビット値RN[6:0]を出力する。下位6ビットのRN[5:0]は、MUX331によって「候補アドレス」として事実上テストされる。候補アドレスに関連付けられたアクセス追跡レジスタ321のビットが空の場合(例えば、6ビットRN[5:0]値に対応する位置で値が「0」である)、その候補アドレスRN[5:0]は、次のアドレスとして出力されるように、MUX332によって選択される。RN[5:0]が出力として提供された後、ATR制御322は、ATR321内の対応する位置を更新する(例えば、0から1に)。加えて、ラストアドレスレジスタ351の値も更新される。この値は、図3Bを参照して本明細書で説明されるリピートアドレスリゾルバ302によって使用される。ATR制御322は、検索/格納トランザクションの開始時に、最初にATR321の内容をリセットする(例えば、すべての位置にすべての「0」を含むように)ことに留意されたい。
【0019】
RN[5:0]に対応するアクセス追跡レジスタ321のビットが、論理値が「1」であることを示すとき(RN[5:0]の値がすでに使用/出力されていることを意味する)、MUX332は、異なるアドレスを選択する。RN[7]に少なくとも部分的に基づいて、MUX333は、「次の上の」アドレスNA[5:0](すなわち、最後に使用されたレジスタ値LAD[5:0]よりも大きいアドレス値を持つ次の空のアドレス位置)、または「次の下の」アドレスNB[5:0](すなわち、最後に使用されたレジスタ値よりも小さいアドレス値を持つ次の空のアドレス位置)のいずれかを選択する。
【0020】
ATR321が、上(すなわち、「上に何も残っていない」信号NLAが論理「1」)または下(すなわち、「下に何も残っていない」信号NLBが論理「1」)に未使用の値がないことを示すとき、ORゲート352、ANDゲート353、およびインバータ354によって形成される論理関数は、それぞれ、下の次の値または上の次の値を選択する。言い換えれば、「次の上」のアドレスNA[5:0]が使用されるべきであることをランダムビットRN[7]が示しているが、未使用のままの「次の上」のアドレスがないとき、アドレスジェネレータ301は、「次の下」のアドレスNB[5:0]を出力する。「次の下」のアドレスNB[5:0]が使用されるべきであることをランダムビットRN[7]が示しているが、未使用のままの「次の下」のアドレスがないとき、アドレスジェネレータ301は、「次の上」のアドレスNB[5:0]を出力する。
【0021】
図3Bは、乱数が示すときに少なくとも1つの未使用のアドレス、およびすでに出力されているアドレスを提供する例示的な回路を示す。図3Bでは、リピートアドレスリゾルバ302は、アドレス追跡レジスタ321(図3Aと同じ要素)、ラストアドレスレジスタ351(図3Aと同じ要素)、6ビット-64ビット温度計デコーダ361、64 2入力NORゲート362、64 2入力NORゲート363、64入力ANDゲート364、64入力NORゲート365、64入力NORゲート366、最下位ビット(LSB)-最上位ビット(MSB)ローテータ371、64ビット-6ビットプライオリティエンコーダ372、減算器373、および64ビット-6ビットプライオリティエンコーダ372を含む。
【0022】
最後に使用されたアドレス値LAD[5:0]は、デコーダ361によって64ビット温度計コード値に再コード化される。例えば、LAD[5:0]値が「13」である場合、得られた64ビット出力は、51個の先行のゼロ(MSBからビット14まで)とそれに続く13個の1(ビット13からLSBまで)を有することになる。この64ビットベクトル(およびその逆)がATR321のビット内に含まれる64ビット値とNORされると、得られたベクトルを使用して「次の上」のNA[5:0]および「次の下」のNB[5:0]値を決定することができる。
【0023】
デコーダ361によって出力された64ビットの温度計コード化値は、NORゲート362によって、アクセス追跡レジスタ321からの対応するビット値とNORされる。NORゲート362の出力の順序は、LSB-to-MSB回転371によって順序的に逆にした。LSB-to-MSB回転371の出力は、プライオリティエンコーダ372に入力される。プライオリティエンコーダ372の出力は、「次の上」のアドレスが63からのアドレスステップ数(すなわち、可能な最大アドレス値NA[5:0]=111111b)を示す。プライオリティエンコーダ372の出力は、減算器373によって63から減算されて、次の上のアドレスNA[5:0]が生成される。すべてのNORゲート362の出力がゼロである場合、それは、最後に使用された値LAD[5:0]の上に未使用のアドレスがないことを示す。これを検出するために、64入力NORゲート365は、NORゲート362の出力を受信して、「上に何も残っていない」(NLA)信号を決定する。いくつかの実施形態では、NORゲート365は、例えば、NORゲート、ORゲートなど、ゲートのいくつかのステージとして実装され得る。
【0024】
デコーダ361によって出力された反転された温度計値は、NORゲート363によって、アクセス追跡レジスタ321からの対応するビット値とNORされる。NORゲート363の出力は、「次の下」のアドレスNB[5:0]を決定するためにプライオリティエンコーダ372に入力される。すべてのNORゲート363の出力がゼロである場合、それは、最後に使用された値LAD[5:0]の下に未使用のアドレスがないことを示す。これを検出するために、64入力NORゲート366は、NORゲート363の出力を受信して、「下に何も残っていない」(NLB)信号を決定する。図3Aに示されるように、「次の上」のNA[5:0]、「次の下」のNB[5:0]、「上に何も残っていない」NLA、および「下に何も残っていない」値/信号が、アドレスジェネレータ301に提供される。最後に、完了を検出するために(すなわち、範囲内のすべてのアドレス値が出力されたこと)、ANDゲート354は、すべてのATR値が論理「1」であるときを検出し、結果として「完了」信号をアサートする。
【0025】
図4は、ランダム化された順序でデータにアクセスするシステムを示す。図4では、データアクセスシステム400は、アドレスジェネレータ435、不揮発性メモリアービタ/コントローラ480、不揮発性メモリ486、およびデータリクエスタ482を含む。アドレスジェネレータ435は、アドレス追跡レジスタ421、乱数ジェネレータ411、およびアドレスセレクタ431を含む。アドレスジェネレータは、不揮発性メモリアービタ480に動作可能に結合されている。データリクエスタは、不揮発性メモリアービタ480に動作可能に結合されている。不揮発性メモリアービタ480は、少なくともアドレスバス492および読み取りデータバス491を介して不揮発性メモリ486に動作可能に結合されている。アドレスジェネレータ435は、アドレス生成システム100、アドレス生成システム200、および/またはアドレス生成システム301、302であり得るか、またはそれらを含み得る。
【0026】
例示的な動作では、データリクエスタ482(例えば、セキュリティプロセッサおよび/またはセキュリティコアなど)は、不揮発性メモリアービタ480に要求を発行して、不揮発性メモリ486内に格納された秘密データ値のブロックを配信する。この例では、秘密データは、64のアドレス位置に分散されている(例えば、256ビットの秘密キー値は4ビットデータの64ニブルとして格納される)。NVMアービタ480回路は、アドレスジェネレータ435を使用して、ランダムに生成された順序で64個の一意のアドレスを提供する。NVMアービタ480は、秘密データを読み取るために、アドレスバス492を介してランダムに生成された順序で一意のアドレスをアドレスNVMメモリ486に送信する。データは、読み取りデータバス491を介して、NVMメモリ486とNVMアービタ480との間で転送される。したがって、一意のアドレスはランダムに生成された順序で送信されるため、秘密データを学習しようとする攻撃者は、データバス491の監視に加えて、アドレスバス492を監視する必要がある。
【0027】
本明細書で説明するように、アドレスジェネレータ435は、乱数ジェネレータ411と「スコアボード」アドレス追跡レジスタ421の両方を使用する。この例では、ATR421は、すでに使用されている/まだ使用されていないアドレスに対応する64個の1ビット値を保持する。
【0028】
図5は、アドレスを生成する方法を示すフローチャートである。図5に示されるステップは、アドレス生成システム100、アドレス生成システム200、および/またはアドレス生成システム301、302、システム400、および/またはそれらの構成要素のうちの1つ以上によって実行され得る。ランダムに生成された数に少なくとも部分的に基づいて、第1の候補アドレスが、アクセスアドレスのセットから選択される(502)。例えば、64バイト(またはワード、またはニブルなど)からなるデータのブロックを検索/格納するために、乱数ジェネレータ211は、0~63の範囲の候補アドレスを出力するように構成され得る。
【0029】
現在のブロックを検索/格納するために必要なアクセスの一部として、第1の候補アドレスがすでに出力されているかどうかが決定される(504)。例えば、アドレス追跡221から受信された情報に基づいて、セレクタ231は、ランダムに生成された候補アドレスが、現在のブロックの検索/格納の一部としてすでに出力されているかどうかを決定する。現在のブロックの検索/格納の一部として第1のアドレスが以前に出力されていない場合、第1のアドレスが出力される(506)。例えば、現在のブロックの検索/格納中に候補アドレスがまだ出力されていないと決定された場合、セレクタ231は、乱数ジェネレータ211によって提供される候補アドレスを選択して出力する。
【0030】
現在のブロックの検索/格納に必要なアクセスの一部として第1のアドレスがすでに出力されている場合、現在のブロックの検索/格納中に以前に使用されていない第2のアドレスが選択され、第2のアドレスが出力される(508)。例えば、現在のブロックの検索/格納中に候補アドレスがすでに出力されていると決定された場合、セレクタ231は、少なくとも追跡221からの情報に基づいて、現在のブロックの検索/格納中にまだ出力されていないアドレスを選択する。
【0031】
例えば、現在のブロックの検索/格納中に候補アドレスがすでに出力されていると決定されたとき、セレクタ231は、追跡221からの情報に基づいて、現在のブロックの検索/格納中にすでに出力されている次に低い値(候補と比較した場合)のアドレスを選択し得る。まだ出力されていない低い値のアドレスがない場合、セレクタ231は、追跡221からの情報に基づいて、現在のブロックの検索/格納中にまだ出力されていない次に高い値(候補と比較した場合)のアドレスを選択し得る。
【0032】
別の例では、現在のブロックの検索/格納中に候補アドレスがすでに出力されていると決定されたとき、セレクタ231は、追跡221からの情報に基づいて、現在のブロックの検索/格納中にまだ出力されていない次に高い値(候補と比較した場合)のアドレスを選択し得る。まだ出力されていない高い値のアドレスがない場合、セレクタ231は、追跡221からの情報に基づいて、現在のブロックの検索/格納中にまだ出力されていない次に低い値(候補と比較した場合)のアドレスを選択し得る。
【0033】
別の例では、現在のブロックの検索/格納中に候補アドレスがすでに出力されていると決定されると、セレクタ231は、追跡221からの情報、および乱数(例えば、乱数ジェネレータ211から受信された乱数のうちの1つ以上の非候補アドレスビット)に基づいて、現在のブロックの検索/格納中にまだ出力されていない、次に低いまたは次に高い値のアドレスを選択するかを選択し得る。乱数に基づいて次に高い値のアドレスが選択され、まだ出力されていない高い値のアドレスがないとき、セレクタ231は、追跡221からの情報に基づいて、現在のブロックの検索/格納中にまだ出力されていない次に低い値のアドレス(候補と比較した場合)を選択してもよい。同様に、乱数に基づいて次に低い値のアドレスが選択され、まだ出力されていない低い値のアドレスがないとき、セレクタ231は、追跡221からの情報に基づいて、現在のブロックの検索/格納中にまだ出力されていない次に高い値のアドレス(候補と比較した場合)を選択してもよい。
【0034】
図6は、アドレスを選択する方法を示すフローチャートである。図6に示されるステップは、アドレス生成システム100、アドレス生成システム200、および/またはアドレス生成システム301、302、システム400、および/またはそれらの構成要素のうちの1つ以上によって実行され得る。インジケータのセットは、アクセスアドレスのセットのそれぞれに対応して維持される(602)。例えば、アドレス追跡221は、データのブロックの検索/格納中に対応するアドレスがすでに出力されているかどうかをその出力が示すレジスタ(または複数のレジスタ)を維持し得る。
【0035】
インジケータのセットのそれぞれに対応するアドレスが出力されたとき、インジケータのセットのうちの1つが変更される(604)。例えば、アドレス追跡221は、対応するアドレスがすでに出力されているかどうかをその出力が示すレジスタ(または複数のレジスタ)の出力を変更しながら、対応するアドレスが出力されると、データのブロックの検索/格納が変更され得る。
【0036】
アドレスは、インジケータのセットに少なくとも部分的に基づいて選択される(606)。例えば、リピートアドレスが発生すると、セレクタ231は、アドレス追跡221からの情報を使用して、この発生を検出し得る。次に、セレクタ231は、この再度発生するアドレスが出力されるのを防ぎ、(追跡221からの情報にも基づいて)まだ出力されていない出力される新しいアドレスを選択し得る。このように、データのブロックへのアクセスパターンは、データにアクセスするたびに異なるが、ブロック全体にアクセスするために必要な時間は一定である。
【0037】
上記の方法、システム、およびデバイスは、コンピュータシステムに実装することも、コンピュータシステムによって格納することもできる。上記の方法は、非一時的コンピュータ可読媒体に格納されてもよい。本明細書に記載のデバイス、回路、およびシステムは、当技術分野で利用可能なコンピュータ支援設計ツールを使用して実装され、このような回路のソフトウェア記述を含むコンピュータ可読ファイルによって具体化され得る。これには、アドレス生成システム100、アドレス生成システム200、および/またはアドレス生成システム301、302、システム400、およびそれらの構成要素のうちの1つ以上の要素が含まれるが、これらに限定されない。これらのソフトウェアの記述は、挙動、レジスタ転送、論理構成要素、トランジスタ、およびレイアウトジオメトリレベルの記述であり得る。さらに、ソフトウェアの記述は、記憶媒体に格納されるか、または搬送波によって通信され得る。
【0038】
このような記述が実装され得るデータ形式には、Cなどの挙動言語をサポートする形式、VerilogおよびVHDLなどのレジスタ転送レベル(RTL)言語をサポートする形式、ジオメトリ記述言語をサポートする形式(GDSII、GDSIII、GDSIV、CIF、およびMEBESなど)、ならびに他の適切な形式および言語が含まれるが、これらに限定されない。さらに、機械可読媒体上のこのようなファイルのデータ転送は、インターネット上の多様な媒体を介して、または、例えば、電子メールを介して電子的に行われ得る。物理ファイルは、4mm磁気テープ、8mm磁気テープ、3-1/2インチフロッピー媒体、CD、DVDなどの機械可読媒体に実装され得ることに留意されたい。
【0039】
図7は、回路構成要素720の表現を含む、処理する、または生成するための処理システム700の一実施形態を示すブロック図である。処理システム700は、1つ以上のプロセッサ702、メモリ704、および1つ以上の通信デバイス706を含む。プロセッサ702、メモリ704、および通信デバイス706は、有線および/または無線接続708の任意の適切なタイプ、数、および/または構成を使用して通信する。
【0040】
プロセッサ702は、メモリ704に格納された1つ以上のプロセス712の命令を実行して、ユーザ入力714およびパラメータ716に応答して回路構成要素720を処理および/または生成する。プロセス712は、電子回路を設計、シミュレート、分析、および/または検証するため、および/または電子回路用のフォトマスクを生成するために使用される任意の適切な電子設計自動化(EDA)ツールまたはその一部であり得る。表現720は、図に示されるように、アドレス生成システム100、アドレス生成システム200、および/またはアドレス生成システム301、302、システム400およびそれらの構成要素の全部または一部を記述するデータを含む。
【0041】
表現720は、挙動、レジスタ転送、論理構成要素、トランジスタ、およびレイアウトジオメトリレベルの記述のうちの1つ以上を含み得る。さらに、表現720は、記憶媒体に格納されるか、または搬送波によって通信され得る。
【0042】
表現720が実装され得るデータ形式には、Cなどの挙動言語をサポートする形式、VerilogおよびVHDLなどのレジスタ転送レベル(RTL)言語をサポートする形式、ジオメトリ記述言語をサポートする形式(GDSII、GDSIII、GDSIV、CIF、およびMEBESなど)、ならびに他の適切な形式および言語が含まれるが、これらに限定されない。さらに、機械可読媒体上のこのようなファイルのデータ転送は、インターネット上の多様な媒体を介して、または、例えば、電子メールを介して電子的に行われ得る。
【0043】
ユーザ入力714は、キーボード、マウス、音声認識インターフェース、マイクロフォンおよびスピーカー、グラフィックディスプレイ、タッチスクリーン、または他のタイプのユーザインターフェースデバイスからの入力パラメータを含み得る。このユーザインターフェイスは、複数のインターフェイスデバイスに分散されてもよい。パラメータ716は、表現720を定義するのを助けるために入力される仕様および/または特性を含み得る。例えば、パラメータ716は、デバイスタイプ(例えば、NFET、PFETなど)、トポロジー(例えば、ブロック図、回路記述、概略図など)、および/またはデバイス記述(例えば、デバイス特性、デバイスの寸法、電源電圧、シミュレーション温度、シミュレーションモデルなど)を定義する情報を含み得る。
【0044】
メモリ704は、プロセス712、ユーザ入力714、パラメータ716、および回路構成要素720を格納する非一時的コンピュータ可読記憶媒体の任意の適切なタイプ、数、および/または構成を含む。
【0045】
通信デバイス706は、処理システム700から別の処理または記憶システム(図示せず)に情報を送信し、および/または別の処理または記憶システム(図示せず)から情報を受信する、任意の適切なタイプ、数、および/または構成の有線および/または無線デバイスを含む。例えば、通信デバイス706は、回路構成要素720を別のシステムに送信し得る。通信デバイス706は、プロセス712、ユーザ入力714、パラメータ716、および/または回路構成要素720を受信し、プロセス712、ユーザ入力714、パラメータ716、および/または回路構成要素720をメモリ704に格納させることができる。
【0046】
本明細書で論じられる実装には、以下の例が含まれるが、これらに限定されない。
【0047】
例1:アドレス生成回路であって、アドレスのセットから候補アドレスをランダムに選択するための候補アドレスジェネレータと、アドレスのセットからのアドレスのすべてが出力される前に、候補アドレスが少なくとも一度はすでに出力されているかどうかを決定するためのリピートアドレス検出器と、候補アドレスがまだ少なくとも一度も出力されていない場合、候補アドレスを出力し、候補アドレスがすでに少なくとも一度出力されている場合、アドレスのセットから選択して、まだ少なくとも一度も出力されていない異なるアドレスを出力する出力セレクタと、を含む、アドレス生成回路。
【0048】
例2アドレスのセットのそれぞれに対応するインジケータのセットであって、アドレスのセットのそれぞれがすでに少なくとも一度出力されているかどうかに対応するインジケータのセットをさらに含む、例1のアドレス生成回路。
【0049】
例3:アドレスが出力されたとき、インジケータのセットの対応する1つの値を変更するインジケータアップデータをさらに含む、例2のアドレス生成回路。
【0050】
例4:異なるアドレスは、インジケータのセットに少なくとも部分的に基づいて選択される、例2のアドレス生成回路。
【0051】
例5:候補アドレスは、乱数ジェネレータからの値に基づいて選択される、例1のアドレス生成回路。
【0052】
例6:異なるアドレスは、乱数ジェネレータからの値に少なくとも部分的に基づいて選択される、例5のアドレス生成回路。
【0053】
例7候補アドレスは、不揮発性メモリをアドレス指定するために使用される、例1のアドレス生成回路。
【0054】
例8:アクセスアドレスのセットを出力する方法であって、ランダムに生成された数に少なくとも部分的に基づいて、アクセスアドレスのセットから第1のアドレスを選択することと、アクセスアドレスのセット内の他のアドレスのすべてが出力される前に、第1のアドレスが出力されたかどうかを決定することと、アクセスアドレスのセット内の他のアドレスのすべてが出力される前に、第1のアドレスがまだ出力されていない場合、第1のアドレスを出力することと、アクセスアドレスのセット内の他のアドレスのすべてが出力される前に、第1のアドレスがすでに出力されている場合、アクセスアドレスのセット内の他のアドレスのすべてが出力される前に、まだ出力されていない第2のアドレスを選択し、第2のアドレスを出力することと、を含む、方法。
【0055】
例9:アクセスアドレスのセットのそれぞれに各々対応するインジケータのセットを維持することであり、インジケータのセットは、アクセスアドレスのセット内の他のアドレスのすべてが出力される前に、アクセスアドレスのセットのそれぞれが出力されたかどうかに関連付けられている、維持することをさらに含む、例8の方法。
【0056】
例1:インジケータのセットのうちの1つに対応するアドレスが出力されたとき、インジケータのセットのうちの1つの値を変更することをさらに含む、例8の方法。
【0057】
例11:第2のアドレスは、インジケータのセットに少なくとも部分的に基づいて選択される、例8の方法。
【0058】
例12:第1のアドレスは、乱数ジェネレータからの少なくとも1つの値に基づいて選択される、例8の方法。
【0059】
例13:異なるアドレスは、乱数ジェネレータからの値に少なくとも部分的に基づいて選択される、例12の方法。
【0060】
例14:第2のアドレスは、不揮発性メモリをアドレス指定するために使用される、例8の方法。
【0061】
例15:N個のアクセスアドレスのセットによってアドレス指定された機密データを格納するためのメモリであって、Nは、4より大きい、メモリと、N個のアクセスアドレスのすべてがメモリのアドレス指定に使用されるまで、N個のアクセスアドレスのセットのうちの1つをランダムかつ非反復的に選択するためのアドレスジェネレータと、を含むメモリシステム。
【0062】
例16:アドレスジェネレータは、N個のアクセスアドレスのセットから第1のアドレスをランダムに選択するためのものである、例15のメモリシステム。
【0063】
例17:アドレスジェネレータは、第1のアドレスがメモリをアドレス指定するために使用されたかどうかを決定するためのものである、例16のメモリシステム。
【0064】
例18:メモリシステムは、第1のアドレスがメモリをアドレス指定するために使用されていない場合、第1のアドレスに少なくとも部分的に基づいてメモリをアドレス指定するためのものである、例17のメモリシステム。
【0065】
例19:メモリシステムは、第1のアドレスがメモリをアドレス指定するために使用された場合、第2のアドレスに少なくとも部分的に基づいてメモリをアドレス指定するためのものである、例18のメモリシステム。
【0066】
例20:メモリシステムは、メモリをアドレス指定するために使用されていないN個のアクセスアドレスのセットのサブセットから第2のアドレスを選択するためのものである、例18のメモリシステム。
【0067】
本発明の上記の説明は、例示および説明の目的で提示された。網羅的であること、または本発明を開示された正確な形態に限定することを意図するものではなく、上記の教示に照らして他の修正および変形が可能であり得る。実装形態は、本発明の原理およびその実際の用途を最もよく説明するために選択され、および記載されており、それにより、当業者は、企図される特定の使用に適した様々な実施形態および修正で本発明を最大限に利用することができる。添付の特許請求の範囲は、先行技術によって制限される場合を除いて、本発明の他の代替の実施形態を含むと解釈されることが意図されている。
図1
図2
図3A
図3B
図4
図5
図6
図7
【国際調査報告】