一種雙層磨損均衡方法及系統的制作方法
【專利摘要】本發明公開了一種雙層磨損均衡方法及系統,適用于相變存儲器內存。該方法具體為:外層負責整個內存存儲區域邏輯地址到中間地址的映射,通過增加密鑰的復雜度,可以在惡意程序探測出完整的密鑰前變換密鑰;內層負責在每個子區域內使用獨立的代數磨損均衡方法,在低開銷的情況下達到區域內的磨損均衡,解決由于相變存儲器存在復位和置位操作的延時差別而泄露磨損均衡算法的密鑰,降低內存系統安全性的問題。
【專利說明】
一種雙層磨損均衡方法及系統
技術領域
[0001]本發明屬于固態存儲領域,具體涉及一種雙層磨損均衡方法及系統,適用于相變存儲器內存。
【背景技術】
[0002]隨著多核技術的發展,計算機系統對內存的需求越來越高。而傳統的動態隨機存取存儲器(DRAM)內存由于受到可擴展性和漏電功耗的約束,無法滿足新環境的應用需求,其發展受到了限制。相變存儲器(Phase Change Memory,PCM)具有可擴展性高、容量大、功耗低和性能高的優點,是替代DRAM作為下一代內存最有競爭力的候選者。
[0003]然而,PCM面臨的最大挑戰是耐久性限制,即每個存儲單元最多只可以承受17-1O8次寫。在寫請求均勻分布的情況下,PCM可以達到5年以上的使用壽命。但是真實應用中存在大量的不均衡分布的寫請求,一些被頻繁寫的存儲單元會在短期內(例如幾周?幾個月)失效,從而導致相變存儲內存無法正常工作。除此之外,PCM還存在嚴重的安全問題,例如惡意的攻擊程序持續地寫入特定的行,會導致PCM在幾十秒鐘內失效。為了解決不均勻的寫請求和惡意攻擊的問題,磨損均衡技術把上層應用的不均衡的寫請求均勻地重映射到各個存儲單元,盡量使每個存儲單元承受的寫操作數量一致。已有的磨損均衡方法可以分為兩類一一基于表格的磨損均衡算法(TBWL)和基于代數的磨損均衡算法(AWL)t3(I)基于表格的磨損均衡算法:該類算法記錄了每個邏輯塊和物理塊的映射關系,同時也統計了每個物理塊的寫次數。通過周期性的交換寫次數最高和最低的行來平衡塊之間的寫差距。為了達到高的壽命,映射和交換塊的粒度要求足夠小,但是這會導致非常高的空間開銷。除此之外,大部分的基于表格的磨損算法采用確定的交換策略,使得惡意的程序可以猜測出待交換區域的新位置,從而持續攻擊某個特定區域,導致這個區域的所有行在短時間內都被磨穿。(2)基于代數的磨損均衡算法:典型的算法有Start-Gap和Security Refresh等。基于代數的磨損均衡算法通過代數映射,周期性的移動物理行,通過大量的行交換從概率上使得“熱”的邏輯行可以移動到各個物理行上,其物理地址可以通過給定的邏輯地址和代數函數計算獲得。基于代數的磨損均衡算法具有低開銷,高安全性的優點。
[0004]然而,近期研究者提出了一種新型的攻擊算法。其核心思想是:根據相變存儲器的復位和置位操作的延時存在明顯的差別,即每個單元寫入“O”和“I”具有顯著的差別,惡意的攻擊程序可以通過探測邏輯地址到物理地址映射的變化,精心安排攻擊的邏輯地址序列,使寫請求命中到小部分物理位置上,令PCM內存快速失效。PCM的差別寫延時特征導致了代數磨損均衡算法的密鑰可能泄露,內存安全性降低的問題。因此動態變換邏輯地址到物理地址的映射,并保證映射關系不為攻擊者所知,是保證PCM安全的必要條件。然而,現有的磨損均衡算法不能有效抵御新型的惡意攻擊程序。
【發明內容】
[0005]針對現有技術的缺陷,本發明提供了一種雙層磨損均衡方法及系統,其目的在于,通過外層實現邏輯地址到中間地址的映射,通過增加密鑰的復雜度,可以在惡意程序探測出完整的密鑰前變換密鑰,從而避免密鑰泄露,抵抗惡意攻擊;內層負責在每個區域內使用獨立的代數磨損均衡方法,在低開銷的情況下達到區域內的磨損均衡,解決由于相變存儲器存在復位(寫“I”)和置位(寫“O”)操作的延時差別而泄露磨損均衡算法的密鑰,降低內存系統安全性的問題。
[0006]為了實現本發明技術目的,本發明采用如下技術方案:
[0007]—種雙層磨損均衡方法,相變存儲器內存存儲區域被分為多個大小相同的子存儲區域,每個子存儲區域被分為多個大小相同的物理行,每一物理行對應一個邏輯地址和一個物理地址,所述邏輯地址和物理地址具有唯一映射的關系;所述方法包括以下步驟:
[0008]對每個子存儲區域,在其每執行P個寫請求之后,使用代數磨損均衡算法移動該子存儲區域中物理行的數據,從而實現子存儲區域內部的磨損均衡;
[0009]對整個內存存儲區域,在其每執行T個寫請求之后,按照如下步驟實現整個內存存儲區域的磨損均衡:
[0010](SI)整個內存存儲區域包含的物理行依序為第O行、第I行、……、第N行;判斷當前空白行GAP是否是第N物理行,若是,跳轉步驟(S2);否則,選擇一個行進行重映射,跳轉
(S3);
[0011](S2)判定所有物理行的重映射標志是否都為true,若是,則說明所有物理行已完成本輪重映射,跳轉步驟(S4),否則,跳轉步驟(S5);
[0012](S3)利用本輪密鑰計算當前空白行GAP所指向的邏輯地址DECkc(GAP),再利用上一輪密鑰計算出該邏輯地址在上一輪映射中的物理行地址ENCkp ( DECkc (GAP)),判斷上一輪的物理行地址ENCkp (DECK。( GAP))是否等于需轉移數據的物理行START,如果是,跳轉步驟
(S6),否則,跳轉步驟(S7);
[0013](S4)令需轉移數據的物理行START和當前空白行GAP同時為第O行;將第START物理行的數據移動到第N物理行,并為下一輪重映射生成密鑰,結束;
[0014](S5)令需轉移數據的物理行START為一個未重映射的行,將物理行START的數據移動到第N物理行,更新當前空白行GAP為物理行START,結束;
[0015](S6)將第N行的數據轉移到當前空白行GAP,更新當前空白行GAP為第N行,將邏輯地址DECifc(GAP)所指物理行的重映射標志置為true,結束;
[0016](S7)將第ENCkp(DECkc(GAP))行的數據轉移到當前空白行GAP,更新當前空白行GAP為第ENCkp ( DECkc (GAP))行,將第ENCkp ( DECkc (GAP))行的重映射標志置為true,結束。
[0017]—種基于雙層磨損均衡的內存訪問方法,包括以下步驟:
[0018](Tl)查找待訪問邏輯地址LA所對應的重映射標志,判斷其是否為true.若是,說明該邏輯行在此輪已經被重映射,跳轉到(T2);否則,該邏輯行還未被重映射,跳轉到(T3);
[0019](T2)使用本輪密鑰Kc翻譯邏輯地址LA得到中間地址IA,即中間地址IA等于ENCkc(1^),跳轉到06);
[0020](T3)使用上一輪密鑰Kp翻譯邏輯地址得到中間地址IA,即中間地址IA等于ENCkp(LA),判斷ENCkp(LA)是否為需轉移數據的物理行START,若是,則跳轉到(T4);否則跳轉到(T5);
[0021](T4)判斷當前空白行GAP是否為需轉移數據的物理行START行,若是,說明需轉移數據的物理行START的數據已被移動到第N物理行,則令中間地址IA等于N;否則,中間地址IA等于START,跳轉到(T6);
[0022 ] (T5)令中間地址IA等于ENCkp (LA),跳轉到(T6);
[0023](T6)通過中間地址IA除以子區域數量獲知IA所對應的物理行存儲于哪個子區域中;依據中間地址IA,結合該子區域的地址映射算法,計算得到對應的物理地址PA,返回物理地址PA以作訪問。
[0024]—種雙層磨損均衡系統,包括相變存儲內存控制器和相變存儲內存;
[0025]所述相變存儲內存包括:多個代數磨損均衡模塊,以及與其一一對應和多個子存儲區域,代數磨損均衡模塊用于使用代數磨損均衡算法移動子存儲區域中物理行的數據;
[0026]所述相變存儲內存控制器包括:
[0027]第一組寄存器Kc,用于存儲本輪密鑰;
[0028]第二組寄存器Kp,用于存儲上一輪密鑰;
[0029]隨機數產生器,用于產生密鑰;
[0030]GAP寄存器,用于記錄當前空白行的位置;
[0031]START寄存器,用于記錄需轉移數據在轉移前的物理行地址;
[0032]Crt寄存器,用于記錄內存累計寫入次數;
[0033]重映射標志存儲器SRAM,用于標記物理行在本輪重映射是否已經被重映射;
[0034]加解密電路,用于利用密鑰進行物理地址與邏輯地址之間的映射轉換;
[0035]數據交換模塊,用于負責重映射數據交換;
[0036]控制電路,用于控制實現整個內存存儲區域的磨損均衡;
[0037]所述控制電路包括:
[0038]第SI模塊,用于整個內存存儲區域包含的物理行依序為第O行、第I行、……、第N行;判斷GAP寄存器記錄的當前空白行GAP是否是第N物理行,若是,跳轉第S2模塊;否則,選擇一個行進行重映射,跳轉第S3模塊;
[0039]第S2模塊,用于判定重映射標志存儲器SRAM記錄的所有物理行的重映射標志是否都為true,若是,則說明所有物理行已完成本輪重映射,跳轉步驟第S4模塊,否則,跳轉第S5豐旲塊;
[0040]第S3模塊,用于調用加解密電路利用本輪密鑰計算當前空白行GAP所指向的邏輯地址DECkc(GAP),再利用上一輪密鑰計算出該邏輯地址在上一輪映射中的物理行地址ENCkp(DECkc(GAP)),判斷上一輪的物理行地址ENCkp(DECkc(GAP))是否等于需轉移數據的物理行START,如果是,跳轉第S6模塊,否則,跳轉第S7模塊;
[0041 ]第S4模塊,用于令START寄存器存儲的需轉移數據的物理行START和GAP寄存器存儲的當前空白行GAP同時為第O行;調用數據交換模塊將第START物理行的數據移動到第N物理行,并調用隨機數產生器為下一輪重映射生成密鑰,結束;
[0042]第S5模塊,用于令START寄存器存儲的需轉移數據的物理行START為一個未重映射的行,調用數據交換模塊將物理行START的數據移動到第N物理行,更新當前空白行GAP為物理行START,結束;
[0043]第S6模塊,用于調用數據交換模塊將第N行的數據轉移到當前空白行GAP,更新當前空白行GAP為第N行,將邏輯地址DECifc(GAP)所指物理行的重映射標志置為true,結束;
[0044]第S7模塊,用于調用數據交換模塊將第ENCKp(DECKc;(GAP))行的數據轉移到當前空白行GAP,更新當前空白行GAP為第ENCkp ( DECk。(GAP))行,將第ENCkp ( DECk。(GAP))行的重映射標志置為true,結束。
[0045]—種基于雙層磨損均衡的內存系統,包括相變存儲內存控制器和相變存儲內存;
[0046]所述相變存儲內存包括:多個代數磨損均衡模塊,以及與其一一對應和多個子存儲區域;代數磨損均衡模塊用于使用代數磨損均衡算法移動子存儲區域中物理行的數據;
[0047]所述相變存儲內存控制器包括:
[0048]第一組寄存器Kc,用于存儲本輪密鑰;
[0049]第二組寄存器Kp,用于存儲上一輪密鑰;
[0050]隨機數產生器,用于產生密鑰;
[0051]GAP寄存器,用于記錄當前空白行的位置;
[0052]START寄存器,用于記錄需轉移數據在轉移前的物理行地址;
[0053]Crt寄存器,用于記錄內存累計寫入次數;
[0054]重映射標志存儲器SRAM,用于標記物理行在本輪重映射是否已經被重映射;
[0055]加解密電路,用于利用密鑰進行物理地址與邏輯地址之間的映射轉換;
[0056]數據交換模塊,用于負責重映射數據交換;
[0057]地址映射模塊,用于將邏輯地址翻譯成中間地址;
[0058]控制電路,用于控制實現整個內存存儲區域的磨損均衡;
[0059]所述控制電路包括:
[0060]第Tl模塊,用于令整個內存存儲區域包含的物理行依序為第O行、第I行、……、第N行;判斷GAP寄存器記錄的當前空白行GAP是否是第N物理行,若是,跳轉第T2模塊;否則,選擇一個行進行重映射,跳轉第T3模塊;
[0061]第T2模塊,用于判定重映射標志存儲器SRAM記錄的所有物理行的重映射標志是否都為true,若是,則說明所有物理行已完成本輪重映射,跳轉第四模塊,否則,跳轉第五模塊;
[0062]第T3模塊,用于調用加解密電路利用本輪密鑰計算當前空白行GAP所指向的邏輯地址DECkc(GAP),再利用上一輪密鑰計算出該邏輯地址在上一輪映射中的物理行地址ENCkp(DECkc(GAP)),判斷上一輪的物理行地址ENCkp(DECkc(GAP))是否等于需轉移數據的物理行START,如果是,跳轉第六模塊,否則,跳轉步驟第七模塊;
[0063]第T4模塊,用于令START寄存器存儲的需轉移數據的物理行START和GAP寄存器存儲的當前空白行GAP同時為第O行;調用數據交換模塊將第START物理行的數據移動到第N物理行,并調用隨機數產生器為下一輪重映射生成密鑰,結束;
[0064]第T5模塊,用于令START寄存器存儲的需轉移數據的物理行START為一個未重映射的行,調用數據交換模塊將物理行START的數據移動到第N物理行,更新當前空白行GAP為物理行START,結束;
[0065]第T6模塊,用于調用數據交換模塊將第N行的數據轉移到當前空白行GAP,更新當前空白行GAP為第N行,將邏輯地址DECifc(GAP)所指物理行的重映射標志置為true,結束;
[0066]第T7模塊,用于調用數據交換模塊將第ENCKp(DECKc(GAP))行的數據轉移到當前空白行GAP,更新當前空白行GAP為第ENCkp ( DECk。(GAP))行,將第ENCkp ( DECk。(GAP))行的重映射標志置為true,結束。
[0067]進一步地,所述地址映射模塊包括:
[0068]第Tll模塊,用于查找待訪問邏輯地址LA所對應的重映射標志,判斷其是否等于true.若等于,說明該邏輯行在此輪已經被重映射,跳轉到第T12模塊;否則,該邏輯行還未被重映射,跳轉第Tl 3模塊;
[0069]第T12模塊,用于使用本輪密鑰Kc翻譯邏輯地址LA得到中間地址IA,S卩中間地址IA等于ENCifc(LA),跳轉到第T16模塊;
[0070]第T13模塊,用于使用上一輪密鑰Kp翻譯邏輯地址得到中間地址IA,S卩中間地址IA等于ENCkp(LA),判斷ENCkp(LA)是否為需轉移數據的物理行START,若等于,則跳轉到第T14模塊;否則跳轉到第T15模塊;
[0071]第T14模塊,用于判斷當前空白行GAP是否等于需轉移數據的物理行START,若是,說明需轉移數據的物理行START的數據已被移動到第N物理行,則令中間地址IA等于N;否則,中間地址IA等于START,跳轉到子區域地址映射子模塊;
[0072]第T15模塊,用于令中間地址IA等于ENCkp(LA),跳轉到子區域地址映射子模塊;
[0073]所述代數磨損均衡模塊包括子區域地址映射子模塊,用于通過中間地址IA除以子區域數量獲知IA所對應的物理行存儲于哪個子區域中;依據中間地址IA,結合該子區域的地址映射算法,計算得到對應的物理地址PA,返回物理地址PA以作訪問。
[0074]總體而言,通過本發明所構思的以上技術方案與現有技術相比,具有以下有益效果:
[0075]1、外層實現邏輯地址到中間地址的映射,通過增加密鑰的復雜度,可以在惡意程序探測出完整的密鑰前變換密鑰,從而避免密鑰泄露,抵抗惡意攻擊,保證PCM內存設備的安全。
[0076]2、內層負責在每個區域內使用獨立的代數磨損均衡方法(如Start-Gap,SecurityRefresh),在低開銷的情況下達到區域內的磨損均衡。
[0077]整個方案使用兩層的磨損均衡策略,既可以對抗惡意攻擊,又可以保證PCM內存設備在普通負載下的低開銷與高壽命。
【附圖說明】
[0078]圖1是本發明基于雙層磨損均衡的內存訪問系統結構圖;
[0079]圖2是本發明外層磨損均衡方法流程圖;
[0080]圖3是本發明外層磨損均衡方法的數據移動示例圖;
[0081 ]圖4是本發明Feistel網絡的加解密原理示意圖;
[0082]圖5是本發明基于雙層磨損均衡的內存訪問方法流程圖。
【具體實施方式】
[0083]為了便于理解本發明,首先對本發明中出現的以下名詞進行解釋:
[0084]物理行:內存系統最基本的訪問單元。在不同的系統中,行大小可以不同。通常一個行大小可以為64字節,128字節,256字節;
[0085]區域(reg1n):內存空間中的一片存儲區間,由若干個物理行組成。通常一個區域可以由2048,4096和8192個行組成;
[0086]邏輯行地址:上層應用程序請求的地址,是一個虛擬地址,記為LA
[0087]中間行地址:邏輯地址經上層映射后對應的地址,是一個虛擬地址,記為IA。
[0088]物理行地址:物理設備所對應的地址,它是一個真實地址,記為PA;
[0089]重映射:根據新的密鑰改變邏輯行地址到物理行地址的對應關系。
[0090]一輪重映射:磨損均衡方法對其管理范圍內的所有行都進行了一次重映射;
[0091]ENCKey(.):密鑰為Key的Feistel網絡加密結果.
[0092]DECKey(.):密鑰為Key的Feistel網絡解密結果。
[0093]圖1是本發明提高安全性的雙層磨損均衡方法的原理示意圖。針對新型攻擊方法導致的安全問題,本發明外層實現邏輯地址到中間地址的映射,通過增加密鑰的負責度,使得惡意程序無法在密鑰動態變換前探測出完整的密鑰,保證了 PCM內存設備的安全。外層的磨損均衡算法由PCM內存控制器實現,PCM內存控制器包括存儲單元和硬件控制單元。
[0094]存儲單元包括:兩組寄存器組Kc(記錄當前輪密鑰)和Kp(記錄上一輪密鑰),每組含有S個寄存器,分別記錄了當前輪和上一輪重映射的Feistel網絡密鑰。S為Feistel網絡的循環次數,可以根據不同安全需求進行調節,但一旦確定就無法更改;GAP寄存器,記錄當前空白行的位置;START寄存器,記錄被移動到空白行的數據的原位置;Crt寄存器,記錄內存累積寫入次數,用于觸發磨損均衡算法的數據移動;行映射標志(SRAM),每個邏輯行一個位,用于標記邏輯行在當前重映射輪是否已經被重映射。
[0095]硬件控制單元包括:加解密電路、隨機數產生器、負責重映射數據交換的數據交換模塊、負責把邏輯地址翻譯成中間地址的地址映射模塊、實現整個內存存儲區域的磨損均衡的控制電路。
[0096]為了平衡一個區域內部各個行之間不均衡的寫分布,本發明在內層使用譬如Start-Gap的磨損均衡算法獨立地管理各個區域,使得寫次數多的行可以快速的與這個區域內的其他行進行交換,避免一個行被過早的磨穿。Start-Gap磨損均衡算法預留一個空白行,周期性的把空白行鄰居行的數據移動到空白行,原鄰居行成為新的空白行。Start-Gap需要3個寄存器,分別存儲最小邏輯地址對應的物理地址、空白行指針和寫計數器。Start-Gap以非常低的計算和存儲開銷平衡達到區域內磨損均衡的效果。
[0097]內層的代數磨損均衡模塊集成在PCMbank中,每個代數磨損均衡模塊獨立管理一個區域。每個磨損均衡模塊使用純硬件實現,具有低開銷和低延時的優勢。在本發明實例中,每個區域都獨立進行Start-Gap磨損均衡策略,以使得寫次數更多的區域可以進行更多有效的移動。
[0098]本發明將PCM內存系統的存儲區域平均劃分為多個子存儲區域,每個子存儲區域由若干個物理行組成,每個子存儲區域包含的物理行行數相等。
[0099]本發明提高安全性的雙層磨損均衡數據交換方法包括如下步驟:
[0100](I)內層磨損均衡數據交換
[0101]對每個子存儲區域,在其每執行P個寫請求之后,使用譬如Start-Gap的代數磨損均衡算法移動該子存儲區域的物理行中的數據,從而實現子存儲區域內部的磨損均衡。
[0102]其中,P為代數磨損均衡算法的交換周期,為預定值,綜合考慮本發明的磨損均衡方法的壽命和性能選取P的值。優選地,Pe (8,128),此時,本發明的磨損均衡方法的壽命適中,同時其性能降級維持在0.78 %和12.5 %之間。
[0103](2)外層磨損均衡數據交換
[0104]對整個內存存儲區域,在其每執行T個寫請求之后,控制電路按照如下步驟實現整個內存存儲區域的磨損均衡:
[0105]初始狀態下,除了GAP寄存器的值為N,其他所有寄存器值均為0,所有行映射標志均為true。在PCM系統的存儲區域每執行T個寫請求之后,觸發外層磨損均衡方法進行數據交換,具體實現過程為:
[0106](SI)整個內存存儲區域包含的物理行依序為第O行、第I行、……、第N行;判斷當前空白行GAP是否是第N物理行,若是,跳轉步驟(S2);否則,選擇一個行進行重映射,跳轉
(S3);
[0107](S2)判定所有物理行的重映射標志是否都為true,若是,則說明所有物理行已完成本輪重映射,跳轉步驟(S4),否則,跳轉步驟(S5);
[0108](S3)利用本輪密鑰計算當前空白行GAP所指向的邏輯地址DEClfc(GAP),再利用上一輪密鑰計算出該邏輯地址在上一輪映射中的物理行地址ENCkp ( DECkc (GAP)),判斷上一輪的物理行地址ENCkp (DECK。( GAP))是否等于需轉移數據的物理行START,如果是,跳轉步驟
(S6),否則,跳轉步驟(S7);
[0109](S4)令需轉移數據的物理行START和當前空白行GAP同時為第O行;將第START物理行的數據移動到第N物理行,并為下一輪重映射生成密鑰,結束;
[0110](S5)令需轉移數據的物理行START為一個未重映射的行,將物理行START的數據移動到第N物理行,更新當前空白行GAP為物理行START,結束;
[0111](S6)將第N行的數據轉移到當前空白行GAP,更新當前空白行GAP為第N行,將邏輯地址DECifc(GAP)所指物理行的重映射標志置為true,結束;
[0112](S7)將第ENCkp(DECkc(GAP))行的數據轉移到當前空白行GAP,更新當前空白行GAP為第ENCkp ( DECkc (GAP))行,將第ENCkp ( DECkc (GAP))行的重映射標志置為true,結束。
[0113]其中,T為預定值,優選地,Te(16,256)。
[0114]通過執行上述步驟(I)和(2),分別在不同層次完成子存儲區域內部和子存儲區域之間的寫次數平衡,從而實現磨損均衡。
[0115]圖3是基于外層磨損均衡算法的數據移動原理示例圖,該示例中存儲區域物理行的數目N為4,第4行為預留的空白行。初始狀態下,START等于0,GAP等于N J次寫后,進行第一次重映射。因為GAP等于N且所有行的重映射標志都是true,因此將第O物理行的數據移動到第N物理行,令START和GAP都等于O,并為下一輪重映射生成密鑰。再T次寫,觸發第二次重映射,此時GAP(0)不等于N且ENCkp(DECKc(0))等于3,所以把第3行的數據移動到第O行,令GAP等于3,把第3行對應重映射標志置為true。再T次寫,觸發第三次重映射,此時GAP(3)不等于N且ENCkp (DECkc(3))等于START (O),所以把第N行的數據移動到GAP (3)行,令GAP = N,把第O行對應重映射標志置為true。再T次寫,觸發第四次重映射,此時GAP = N,且第1、2行還未進行重映射,所以令START和GAP都等于I,把第I行的數據移動到第N行,把第I行對應重映射標志置為true。再T次寫,觸發五次重映射,此時GAP(I)不等于N且ENCKp(DECKc;(l))等于2,所以把第2行的數據移動到第I行,令GAP等于2,把第2行對應重映射標志置為true。再T次寫,觸發第六次重映射,此時GAP (2)不等于N且ENCkp ( DECkc (2))等于START (I),所以把第N行的數據移動到GAP(2)行,令GAP等于N,把第I行所對應重映射標志置為true,至此,存儲空間內所有行都已進行了一次重映射,當前重映射輪結束。
[0116]外層磨損均衡算法中,代數映射方法可采用Feistel網絡、隨機可逆矩陣等一一對應的映射方法。作為優選,本發明外層采用基于動態Feistel網絡的磨損均衡方法,利用Fe i s t e I網絡作為磨損均衡算法的代數方法,通過增加Fe i s t e I網絡的輪數,就可以增加密鑰的復雜度,使探測完整密鑰所需的時間變長。而通過動態變換密鑰,就可以在惡意程序探測出完整密鑰前變換Feistel網絡的密鑰,使惡意攻擊失效,保證了PCM內存設備的安全性。內層采用低復雜度低,性能和低硬件開銷的代數磨損均衡算法Start-Gap,保證了 PCM內存在普通負載下的使用壽命。
[0117]Feistel網絡是一種廣泛應用與安全領域的對稱加密方法,其工作流程如圖1所示。輸入被分割為兩個部分(L和R),對于加密過程的每一輪i(i = l,2,...,S),新的左半部分和右半部分分別依如下規則計算生成:Li = R1-^Ri = Li XOR F(R1-^Ki) A為預先自定義的輪函數,IK^K2,...,Ks}為密鑰。解密過程與加密相似,只需要改變密鑰輸入的次序,即解密密鑰相應地為{Ks,Ks-b...,?}。
[0118]本發明還提供了一種基于上述雙層磨損均衡方法的內存訪問方法。每個請求到達內存需要執行地址映射算法,把邏輯地址轉化為實際可訪問的物理地址。本發明基于上述雙層磨損均衡方法的內存訪問方法包括如下步驟:
[0119](Tl)查找待訪問邏輯地址LA所對應的重映射標志,判斷其是否為true.若是,說明該邏輯行在此輪已經被重映射,跳轉到(T2);否則,該邏輯行還未被重映射,跳轉到(T3);
[0120](T2)使用本輪密鑰Kc翻譯邏輯地址LA得到中間地址IA,即中間地址IA等于ENCk。(1^),跳轉到06);
[0121 ] (T3)使用上一輪密鑰Kp翻譯邏輯地址得到中間地址IA,即中間地址IA等于ENCkp(LA),判斷ENCkp(LA)是否為需轉移數據的物理行START,若是,則跳轉到(T4);否則跳轉到(T5);
[0122](T4)判斷當前空白行GAP是否為需轉移數據的物理行START,若是,說明需轉移數據的物理行START的數據已被移動到第N物理行,則令中間地址IA等于N;否則,中間地址IA等于START,跳轉到(T6);
[0123](T5)令中間地址IA等于ENCkp (LA),跳轉到(T6);
[0124](T6)通過中間地址IA除以子區域數量獲知IA所對應的物理行存儲于哪個子區域中;依據中間地址IA,結合該子區域的地址映射算法,計算得到對應的物理地址PA,返回物理地址PA以作訪問。
[0125]下面從安全性、存儲開銷、硬件開銷和性能影響等方面對本發明的高安全性雙層的磨損均衡方法進行評估。
[0126]設總存儲容量是C,每個行大小為MByte,總行數為N,被分成R個子區域,Feistel網絡的輪數為S,外層的數據交換周期為T,內層的數據交換周期為P。推薦配置為IGB總容量,行大小為256Byte,512個子區域,外層數據交換周期為128,內存數據交換周期為64。
[0127]假設惡意攻擊每N/R次寫可以探測出密鑰的一個位,而密鑰變換的周期為N*T,則密鑰的長度必須大于T*R。每一輪密鑰的長度為1g2(N),為了保證安全性,使惡意攻擊在探測出密鑰前就已變換新密鑰,Feistel網絡的輪數必須大于T*R/log2(N),在推薦配置下,輪數必須大于6。
[0128]首先分析存儲開銷。Kc和Kp所需的存儲空間為S*log2(N)位。GAP,START和Crt寄存器分別需要1g2(N) ,1g2(N)和1g2(T)位,即需要的寄存器存儲開銷為(S+2)*log2(N)+log2(T)位。內層以start-gap方法為例,每個子區域需要2Xlog2(N/R)位寄存器用以存儲START和GAP的位置,1g2(P)為寄存器用以計算寫次數。因此內外層總共需要(S+2) X 1g2(N) +l0g-2(T)+RX(2Xl0g2(N/R)+l0g2(P))位寄存器。每個磨損均衡都需要一個額外行輔助數據移動,因此額外的PCM存儲空間為(R+l) XM Byte.每個行需要一個位來記錄是否已經被重映射,因此行映射標志的SRAM開銷為N位。
[0129]優選地,使用立方函數作為輪函數,每個立方函數需要大概(3/8)XB2個邏輯門,因此S輪Fe i ste I網絡的邏輯門開銷大概為S* (3/8) X B2。
[0130]每一輪Feistel網絡大約帶來I個時鐘周期的延遲,而訪問SRAM的延遲大概為3-5個時鐘周期。所以因地址轉換對讀寫訪問造成的延遲大概為10個時鐘周期。
[0131]本領域的技術人員容易理解,以上所述僅為本發明的較佳實施例而已,并不用以限制本發明,凡在本發明的精神和原則之內所作的任何修改、等同替換和改進等,均應包含在本發明的保護范圍之內。
【主權項】
1.一種雙層磨損均衡方法,其特征在于,相變存儲器內存存儲區域被分為多個大小相同的子存儲區域,每個子存儲區域被分為多個大小相同的物理行,每一物理行對應一個邏輯地址和一個物理地址,所述邏輯地址和物理地址具有唯一映射的關系;所述方法包括以下步驟: 對每個子存儲區域,在其每執行P個寫請求之后,使用代數磨損均衡算法移動該子存儲區域中物理行的數據,從而實現子存儲區域內部的磨損均衡; 對整個內存存儲區域,在其每執行T個寫請求之后,按照如下步驟實現整個內存存儲區域的磨損均衡: (51)整個內存存儲區域包含的物理行依序為第O行、第I行、……、第N行;判斷當前空白行GAP是否是第N物理行,若是,跳轉步驟(S2);否則,選擇一個行進行重映射,跳轉(S3); (52)判定所有物理行的重映射標志是否都為true,若是,則說明所有物理行已完成本輪重映射,跳轉步驟(S4),否則,跳轉步驟(S5); (53)利用本輪密鑰計算當前空白行GAP所指向的邏輯地址DECkc(GAP),再利用上一輪密鑰計算出該邏輯地址在上一輪映射中的物理行地址ENCKp(DECKc(GAP)),判斷上一輪的物理行地址ENCKP(DECK。(GAP))是否等于需轉移數據的物理行START,如果是,跳轉步驟(S6),否貝1J,跳轉步驟(S7); (54)令需轉移數據的物理行START和當前空白行GAP同時為第O行;將第START物理行的數據移動到第N物理行,并為下一輪重映射生成密鑰,結束; (55)令需轉移數據的物理行START為一個未重映射的行,將物理行START的數據移動到第N物理行,更新當前空白行GAP為物理行START,結束; (56)將第N行的數據轉移到當前空白行GAP,更新當前空白行GAP為第N行,將邏輯地址DECifc(GAP)所指物理行的重映射標志置為true,結束; (57)將第ENCkp(DECkc(GAP))行的數據轉移到當前空白行GAP,更新當前空白行GAP為第ENCkp ( DECkc (GAP))行,將第ENCkp ( DECkc (GAP))行的重映射標志置為true,結束。2.—種基于雙層磨損均衡的內存訪問方法,其特征在于,包括以下步驟: (Tl)查找待訪問邏輯地址LA所對應的重映射標志,判斷其是否為true.若是,說明該邏輯行在此輪已經被重映射,跳轉到(T2);否則,該邏輯行還未被重映射,跳轉到(T3); (T2)使用本輪密鑰Kc翻譯邏輯地址LA得到中間地址IA,即中間地址IA等于ENCifc(LA),跳轉到(T6); (T3)使用上一輪密鑰Kp翻譯邏輯地址得到中間地址IA,即中間地址IA等于ENCkp(LA),判斷ENCkp(LA)是否為需轉移數據的物理行START,若是,則跳轉到(T4);否則跳轉到(T5); (T4)判斷當前空白行GAP是否為需轉移數據的物理行START行,若是,說明需轉移數據的物理行START的數據已被移動到第N物理行,則令中間地址IA等于N;否則,中間地址IA等于START,跳轉到(T6); (T5)令中間地址IA等于ENCkp (LA),跳轉到(T6); (T6)通過中間地址IA除以子區域數量獲知IA所對應的物理行存儲于哪個子區域中;依據中間地址IA,結合該子區域的地址映射算法,計算得到對應的物理地址PA,返回物理地址PA以作訪問。3.一種雙層磨損均衡系統,其特征在于,包括相變存儲內存控制器和相變存儲內存; 所述相變存儲內存包括:多個代數磨損均衡模塊,以及與其一一對應和多個子存儲區域,代數磨損均衡模塊用于使用代數磨損均衡算法移動子存儲區域中物理行的數據;所述相變存儲內存控制器包括: 第一組寄存器Kc,用于存儲本輪密鑰; 第二組寄存器Kp,用于存儲上一輪密鑰; 隨機數產生器,用于產生密鑰; GAP寄存器,用于記錄當前空白行的位置; START寄存器,用于記錄需轉移數據在轉移前的物理行地址; Crt寄存器,用于記錄內存累計寫入次數; 重映射標志存儲器SRAM,用于標記物理行在本輪重映射是否已經被重映射; 加解密電路,用于利用密鑰進行物理地址與邏輯地址之間的映射轉換; 數據交換模塊,用于負責重映射數據交換; 控制電路,用于控制實現整個內存存儲區域的磨損均衡; 所述控制電路包括: 第SI模塊,用于整個內存存儲區域包含的物理行依序為第O行、第I行、……、第N行;判斷GAP寄存器記錄的當前空白行GAP是否是第N物理行,若是,跳轉第S2模塊;否則,選擇一個行進行重映射,跳轉第S3模塊; 第S2模塊,用于判定重映射標志存儲器SRAM記錄的所有物理行的重映射標志是否都為true,若是,則說明所有物理行已完成本輪重映射,跳轉步驟第S4模塊,否則,跳轉第S5模塊; 第S3模塊,用于調用加解密電路利用本輪密鑰計算當前空白行GAP所指向的邏輯地址DECkc (GAP ),再利用上一輪密鑰計算出該邏輯地址在上一輪映射中的物理行地址ENCkp(DECkc(GAP)),判斷上一輪的物理行地址ENCkp(DECkc(GAP))是否等于需轉移數據的物理行START,如果是,跳轉第S6模塊,否則,跳轉第S7模塊; 第S4模塊,用于令START寄存器存儲的需轉移數據的物理行START和GAP寄存器存儲的當前空白行GAP同時為第O行;調用數據交換模塊將第START物理行的數據移動到第N物理行,并調用隨機數產生器為下一輪重映射生成密鑰,結束; 第S5模塊,用于令START寄存器存儲的需轉移數據的物理行START為一個未重映射的行,調用數據交換模塊將物理行START的數據移動到第N物理行,更新當前空白行GAP為物理行START,結束; 第S6模塊,用于調用數據交換模塊將第N行的數據轉移到當前空白行GAP,更新當前空白行GAP為第N行,將邏輯地址DECifc(GAP)所指物理行的重映射標志置為true,結束; 第S7模塊,用于調用數據交換模塊將第ENCKp(DECKc(GAP))行的數據轉移到當前空白行GAP,更新當前空白行GAP為第ENCkp ( DECkc (GAP))行,將第ENCkp ( DECkc (GAP))行的重映射標志置為true,結束。4.一種基于雙層磨損均衡的內存系統,其特征在于,包括相變存儲內存控制器和相變存儲內存; 所述相變存儲內存包括:多個代數磨損均衡模塊,以及與其一一對應和多個子存儲區域;代數磨損均衡模塊用于使用代數磨損均衡算法移動子存儲區域中物理行的數據; 所述相變存儲內存控制器包括: 第一組寄存器Kc,用于存儲本輪密鑰; 第二組寄存器Kp,用于存儲上一輪密鑰; 隨機數產生器,用于產生密鑰; GAP寄存器,用于記錄當前空白行的位置; START寄存器,用于記錄需轉移數據在轉移前的物理行地址; Crt寄存器,用于記錄內存累計寫入次數; 重映射標志存儲器SRAM,用于標記物理行在本輪重映射是否已經被重映射; 加解密電路,用于利用密鑰進行物理地址與邏輯地址之間的映射轉換; 數據交換模塊,用于負責重映射數據交換; 地址映射模塊,用于將邏輯地址翻譯成中間地址; 控制電路,用于控制實現整個內存存儲區域的磨損均衡; 所述控制電路包括: 第Tl模塊,用于令整個內存存儲區域包含的物理行依序為第O行、第I行、……、第N行;判斷GAP寄存器記錄的當前空白行GAP是否是第N物理行,若是,跳轉第T2模塊;否則,選擇一個行進行重映射,跳轉第T3模塊; 第T2模塊,用于判定重映射標志存儲器SRAM記錄的所有物理行的重映射標志是否都為true,若是,則說明所有物理行已完成本輪重映射,跳轉第四模塊,否則,跳轉第五模塊; 第T3模塊,用于調用加解密電路利用本輪密鑰計算當前空白行GAP所指向的邏輯地址DECkc (GAP ),再利用上一輪密鑰計算出該邏輯地址在上一輪映射中的物理行地址ENCkp(DECkc(GAP)),判斷上一輪的物理行地址ENCkp(DECkc(GAP))是否等于需轉移數據的物理行START,如果是,跳轉第六模塊,否則,跳轉步驟第七模塊; 第T4模塊,用于令START寄存器存儲的需轉移數據的物理行START和GAP寄存器存儲的當前空白行GAP同時為第O行;調用數據交換模塊將第START物理行的數據移動到第N物理行,并調用隨機數產生器為下一輪重映射生成密鑰,結束; 第T5模塊,用于令START寄存器存儲的需轉移數據的物理行START為一個未重映射的行,調用數據交換模塊將物理行START的數據移動到第N物理行,更新當前空白行GAP為物理行START,結束; 第T6模塊,用于調用數據交換模塊將第N行的數據轉移到當前空白行GAP,更新當前空白行GAP為第N行,將邏輯地址DECifc(GAP)所指物理行的重映射標志置為true,結束; 第T7模塊,用于調用數據交換模塊將第ENCKp(DECKc(GAP))行的數據轉移到當前空白行GAP,更新當前空白行GAP為第ENCkp ( DECkc (GAP))行,將第ENCkp ( DECkc (GAP))行的重映射標志置為true,結束。5.根據權利要求4所述的基于雙層磨損均衡的內存系統,其特征在于, 所述地址映射模塊包括: 第Tll模塊,用于查找待訪問邏輯地址LA所對應的重映射標志,判斷其是否等于true.若等于,說明該邏輯行在此輪已經被重映射,跳轉到第T12模塊;否則,該邏輯行還未被重映射,跳轉第Tl 3模塊; 第T12模塊,用于使用本輪密鑰Kc翻譯邏輯地址LA得到中間地址IA,S卩中間地址IA等于ENCifc(LA),跳轉到第T16模塊; 第T13模塊,用于使用上一輪密鑰Kp翻譯邏輯地址得到中間地址IA,S卩中間地址IA等于ENCkp (LA),判斷ENCkp (LA)是否為需轉移數據的物理行START,若等于,則跳轉到第T14模塊;否則跳轉到第Tl 5模塊; 第T14模塊,用于判斷當前空白行GAP是否等于需轉移數據的物理行START,若是,說明需轉移數據的物理行START的數據已被移動到第N物理行,則令中間地址IA等于N;否則,中間地址IA等于START,跳轉到子區域地址映射子模塊; 第T15模塊,用于令中間地址IA等于ENCkp(LA),跳轉到子區域地址映射子模塊; 所述代數磨損均衡模塊包括子區域地址映射子模塊,用于通過中間地址IA除以子區域數量獲知IA所對應的物理行存儲于哪個子區域中;依據中間地址IA,結合該子區域的地址映射算法,計算得到對應的物理地址PA,返回物理地址PA以作訪問。
【文檔編號】G06F21/79GK105955891SQ201610259384
【公開日】2016年9月21日
【申請日】2016年4月25日
【發明人】馮丹, 黃方亭, 夏文, 周文, 鄢磊, 張宇成, 付忞, 周玉坤
【申請人】華中科技大學