一種單調計數器的實現方法
2023-08-01 09:46:01
專利名稱:一種單調計數器的實現方法
技術領域:
本發明涉及一種集成電路的設計技術,具體涉及的是一種在信息交互中利用安全晶片保證用戶數據安全性的單調計數器實現方法,該實現方法能夠有效延長晶片計數器的壽命。
背景技術:
在現有技術的進行集成電路設計中,尤其是涉及安全性的集成電路設計時,經常需要提供單調計數器的功能,即計數器的計數值不會減少,只會增加。而提供單調計數器的目的是為了在遠程信息交互時,如網上銀行,用戶發送的數據中加入永不重複的部分,從而防止攻擊者從通訊線路中竊取用戶的合法數據後,重新發送以冒充用戶的身份,即防止重放攻擊。由於在用戶發送的數據中,在用戶端記錄為單調增加的數值,因此,伺服器端在接收到用戶的數據時首先對單調計數器的計數進行判斷,如果等於或小於上次數值,則說明本數據並非真實有效的用戶數據,可能是非法用戶通過通訊線路竊取了用戶的合法數據後,進行重放攻擊。由此,單調計數器可以用於安全性認證方面。
對於單調計數器,通常的實現方案是首先提供硬體計數單元,使其能夠以固定的時間間隔連續計數,之後提供非易失性存儲器如「快閃記憶體(flash)」等,將計數單元每次的計數值存儲在非易失性存儲器的某一個位置中。這樣,在每次單調計數器重新啟動時,計數單元就可以從非易失性存儲器中讀出上一次的計數值,並從該值開始繼續計數,從而達到不會減少、只會增加的「單調」計數功能。
但這種單調計數器實現方法的缺陷在於非易失性存儲器如「快閃記憶體(flash)」等的擦寫壽命相對較短,如10萬次,若計數次數達到或超過此值,將會由於非易失性存儲器的故障導致單調計數器不能正常工作。
如圖1所示為現有的利用非易失性存儲器進行計數的方式,該方式利用非易失性存儲器的某一個「塊」存儲計數值。其中一個「塊」是指不同的非易失性存儲器根據各自的電氣特性定義的一段連續的存儲空間,本例子中的「塊」長度為128位元組。
在現有的計數器方式中,每當需要計數時,要先對整個存儲計數值的「塊」進行擦除操作,之後將新的計數值寫入該「塊」,這樣就完成了一次完整的擦寫過程。其中擦除操作必須對整個「塊」進行,這是由目前非易失性存儲器的硬體特性決定的。
如此,當計數達到10萬次時,對非易失性存儲器中該「塊」的擦寫過程就也進行了10萬次,此時非易失性存儲器中該「塊」將不能繼續正常工作,若需要繼續計數,就必須利用非易失性存儲器中的另一個「塊」存儲計數值。
這樣非易失性存儲器的存儲壽命就很有限,容易造成硬體設備的消耗和浪費。
發明內容
針對現有的單調計數器實現方法的缺陷,本發明的目的是提供一種單調計數器的實現方法,使單調計數器在計數過程中,可以通過充分利用非易失性存儲器的存儲空間,達到延長非易失性存儲器的擦寫壽命,從而延長單調計數器計數次數的效果。
為達到以上目的,本發明採用的技術方案是一種單調計數器的實現方法,其用於一硬體計數單元以及一非易失性存儲器中,並包括以下步驟設置固件程序,對硬體計數單元和非易失性存儲器進行如下操作
a)在包含本硬體計數單元的硬體第一次啟動時,將非易失性存儲器中負責存儲計數值的存儲單元的數值賦為全1;b)將非易失性存儲器進行分塊,在負責存儲計數值的塊的相應位置寫入一個0,直至該塊計滿0;c)對該塊進行擦除操作,寫數值為全1,並記錄總的擦除次數,循環所述步驟b);d)所述計數值通過總的擦除次數×塊字節長度×8+當前塊中0的個數計算出。
所述的方法,其中,所述總的擦除次數記錄在所述塊字節中。
所述的方法,其中,所述非易失性存儲器為FLASH存儲器。
本發明的效果在於通過應用本發明所述的單調計數器實現方法,在存儲計數值時,若計數間隔次數不大,則利用非易失性存儲器的不同比特位存儲計數值,從而既記錄了計數值,又沒有耗費非易失性存儲器的擦寫壽命,這樣就能夠大大提高單調計數器的計數次數,從而提高了整個集成電路系統的應用靈活性和穩定性。
圖1所示為現有的利用非易失性存儲器進行計數的方式示意圖;圖2所示為本發明的利用非易失性存儲器進行計數的方式示意圖。
具體實施例方式
為使本發明的目的、技術方案和效果更加清楚,以下結合附圖及實施例對本發明再做進一步詳細的說明。
本發明的一種單調計數器的實現方法,其包括以下步驟提供硬體計數單元;提供非易失性存儲器;通過固件內的程序,對硬體計數單元和非易失性存儲器進行如下控制
在包含本計數器的硬體設備第一次啟動時,將非易失性存儲器中負責存儲計數值的存儲單元的數值賦為全1;將非易失性存儲器中負責存儲計數值的存儲單元分為兩個部分低位區和高位區。其中低位區的長度以比特為單位,其值是2的整數次冪,如8、16、32,依次類推;而高位區的長度以字節為單位,並與硬體計數單元可以表示的最大數據的字節長度相同。
當需要存儲硬體計數單元的計數值時,首先將當前計數值作為二進位數也分為低位區和高位區兩個部分。其中,低位區的比特長度根據非易失性存儲器中負責存儲計數值的存儲單元的低位區來確定,即存儲單元低位區長度是2的多少次冪,計數值低位區就取多少比特。而高位區就是整個計數值除去低位區的部分。
在將計數值分區後,比較計數值高位區和存儲單元的高位區,若高位區數值相同,計數值低位區所表示的數值是幾,就把存儲單元的低位區的第幾比特清0;若高位區數值不同,則首先重新將非易失性存儲器中負責存儲計數值的存儲單元的數值賦為全1,再按照前述方法將計數值低位區寫入存儲單元,並將新的計數值高位區寫入存儲單元。
在包含本計數器的硬體在一次啟動時,首先讀取非易失性存儲器中負責存儲計數值的存儲單元,根據讀出的計數值初始化硬體計數單元,使其從讀出的計數值+1的數值開始計數,以保證計數值不會減少,只會增加。
如圖2所示是本發明的利用非易失性存儲器進行計數的方式,該方式同樣利用非易失性存儲器的某一個「塊」來存儲計數值,並不額外需要存儲空間。
在本發明的計數方式中,每當需要計數時,並不將計數值本身寫入非易失性存儲器,而是在負責存儲計數值的「塊」的相應位置寫入一個『0』,每計一次數就寫入一個『0』,注意此時只是進行了寫操作,而沒有進行擦除操作,所以並沒有完成完整的擦寫過程,沒有消耗非易失性存儲器的壽命。
當本例子中一個長128位元組的「塊」中的所有位置都寫為『0』,即已經計數1024次時,需要進行一次擦除操作,使該「塊」又可以按照寫『0』的方式繼續計數。而此時在非易失性存儲器的其他位置記錄下總的擦除次數。
通過公式擦除次數×塊字節長度×8+當前塊中『0』的個數,可以隨時方便的計算出當前的計數值。
由於每計數1024次才需要進行一次擦除操作,所以當負責存儲計數值的「塊」達到10萬次的擦寫壽命時,實際可以進行1024×10萬=1億零24萬次計數。即,使計數次數達到了目前普通計數方式的1024倍,而若非易失性存儲器的「塊」長度為256位元組,則本發明的計數次數就可以達到目前普通計數方式的2048倍,依此類推。
若為了減少對非易失性存儲器的空間佔用,還可以將總的擦除次數也存儲在用於計數的「塊」中,而若總的擦除次數需要4個字節的存儲空間,則用於計數的空間會相應的減少為124個字節,這樣仍然可以使計數次數達到目前普通計數方式的992倍,或者在非易失性存儲器的「塊」長度為256位元組的情況下,達到目前普通計數方式的2016倍。
本發明的效果在於通過應用本發明所述的單調計數器實現方法,在存儲計數值時,若計數間隔次數不大,則利用非易失性存儲器的不同比特位存儲計數值,從而既記錄了計數值,又沒有耗費非易失性存儲器的擦寫壽命,因為非易失性存儲器要完成一次從1到0、再從0到1的過程才真正完成了一次擦寫過程。這樣就能夠大大提高了單調計數器的計數次數,從而提高了整個集成電路系統的應用靈活性和穩定性。
權利要求
1.一種單調計數器的實現方法,其用於一硬體計數單元以及一非易失性存儲器中,並包括以下步驟設置固件程序,對硬體計數單元和非易失性存儲器進行如下操作a)在包含本硬體計數單元的硬體第一次啟動時,將非易失性存儲器中負責存儲計數值的存儲單元的數值賦為全1;b)將非易失性存儲器進行分塊,在負責存儲計數值的塊的相應位置寫入一個0,直至該塊計滿0;c)對該塊進行擦除操作,寫數值為全1,並記錄總的擦除次數,循環所述步驟b);d)所述計數值通過總的擦除次數×塊字節長度×8+當前塊中0的個數計算出。
2.根據權利要求1所述的方法,其特徵在於,所述總的擦除次數記錄在所述塊字節中。
3.根據權利要求1所述的方法,其特徵在於,所述非易失性存儲器為FLASH存儲器。
全文摘要
本發明的一種單調計數器的實現方法,其用於一硬體計數單元以及一非易失性存儲器中,並包括以下步驟設置固件程序,對硬體計數單元和非易失性存儲器進行如下操作在包含本硬體計數單元的硬體第一次啟動時,將非易失性存儲器中負責存儲計數值的存儲單元的數值賦為全1;將非易失性存儲器進行分塊,在負責存儲計數值的塊的相應位置寫入一個0,直至該塊計滿0;對該塊進行擦除操作,寫數值為全1,並記錄總的擦除次數,循環所述步驟b);所述計數值通過總的擦除次數×塊字節長度×8+當前塊中0的個數計算出。本發明方法能夠大大提高單調計數器的計數次數,從而提高了整個集成電路系統的應用靈活性和穩定性。
文檔編號H04L9/36GK1700642SQ20051003470
公開日2005年11月23日 申請日期2005年5月25日 優先權日2005年5月25日
發明者張璐, 張瑋, 陳強, 朱廣志 申請人:北京兆日科技有限責任公司