<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    基于密碼芯片的 DDR 加速器的設計與實現

    VSole2022-07-18 14:24:31

    摘 要:

    在安全服務器應用領域,基于對稱算法的密碼芯片需要讀寫訪問大量、離散的密鑰和初始向量(Intial Vector,IV)數據。利用密鑰和 IV 數據的時間局部性和空間局部性,提出了一種預讀與高速緩沖存儲器(cache)相結合的雙倍速率同步動態隨機存取存儲(Double Data Rate Synchronous Dynamic Random Access Memory,DDR)加速器,來解決密鑰和 IV 的存儲容量和訪問效率的問題,并采用 Verilog 硬件描述語言完成 DDR 加速器的實現。最后基于芯動的 DDR 控制器和鎂光的 DDR3 模型,進行有、無加速器的性能對比試驗,試驗表明 DDR 硬件加速器較大地提高了 DDR 對離散數據的訪問性能,解決了密鑰和 IV 存儲中的容量和效率的問題。

    隨著云計算、大數據、5G 以及高清視頻業務等領域網絡信息技術的快速發展,通信設備對密碼處理單元的加解密性能提出了更高的要求。為了滿足網絡匯聚層、核心服務器對海量密碼業務處理能力的需求,需要研究具有高性能的密碼芯片。

    在基于對稱算法的密碼業務中,需要解決密鑰和 IV 的管理(初始化、存儲、訪問、更新與注銷)。密碼服務涉及的密鑰來源有以下兩種:一是一包一密,隨包下發,不需要維護;二是密鑰需要由主機下發到加解密芯片并保存在加解密芯片內部,初始化完成后,由主機和加解密芯片共同完成密鑰的維護。本文主要研究第二種。密碼服務涉及的 IV 來源也有兩種:一是一包一初始向量(Intial Vector,IV),隨包下發,故無須考慮 IV 維護;二是對較大數據進行級聯加解密處理,此時的 IV 生命周期為這個級聯處理數據的整個處理周期,對于上層應用軟件則是維護一個加密隧道的線程周期。本文主要研究第二種。IV 的初始化、更新和銷毀,需要加解密芯片協同主機下發的初始化包(initial package)、更新包(update package)和結束包(final package)共同實現,如圖 1 所示。

    圖 1 級聯加解密過程

    一個級聯加解密過程可分為初始階段、更新階段和結束階段 3 個階段,更新階段可以處理多個數據包。包序號和 IV 一對一綁定,密鑰索引和密鑰一對一綁定,下文將整個級聯加密過程中的數據包統稱為級聯包。

    初始階段:首先主機創建一個加密隧道線程,完成密鑰初始化,實現密鑰和密鑰索引的綁定,將包序號、IV、密鑰索引及數據下發到密碼芯片;其次密碼芯片根據密鑰索引查找密鑰,并將密鑰、IV和數據送入加解密模塊進行運算;最后運算結果返回主機,并將運算結果的最后一個級聯分組寫入 IV存儲空間,完成 IV 的更新。

    更新階段:首先主機下發包序號、密鑰索引和數據;其次密碼芯片根據包序號和密鑰索引從本地緩存獲取 IV 和密鑰,連同數據送入加解密模塊進行運算;最后運算結果包返回主機,并將運算結果的最后一個級聯分組寫入 IV 存儲空間,完成 IV 的更新。

    結束階段:首先主機下發包序號、密鑰索引和數據;其次密碼芯片根據包序號和密鑰索引從本地緩存獲取 IV 和密鑰,連同數據送入加解密模塊進行運算,運算結果包返回主機;最后主機釋放包序號,加密隧道現場注銷。

    可見,在加解密過程中需要解決密鑰和 IV 的存儲和訪問。在安全服務器應用領域,加解密業務通常需要支持百萬級用戶,密鑰和 IV 的存儲需求高達幾百兆字節,片上靜態隨機存取存儲器(StaticRandom Access Memory,SRAM)已不能滿足應用的需求。DDR 較 SRAM 具有容量大、成本低等特點 ,因此 DDR 取代片上 SRAM 成為密鑰和 IV 的存儲器。通常,一個密鑰或一個 IV 只有幾十個字節,當多用戶多線程加解密業務同時進行時,需要維護很多密鑰和 IV,就會對 DDR 產生大量的離散數據讀寫訪問。而芯動的 DDR 控制器和鎂光的 DDR 顆粒、Cadence 的 DDR 控制器和鎂光的 DDR 顆粒的訪問延遲均在幾十個周期,這是由于對于 DDR 的離散數據訪問的延遲較大,因此存在訪問性能低的問題。

    針對 DDR 訪問的延遲較大的問題,本文提出預讀機制,提前發起讀操作,讀回的數據緩存到高速緩沖存儲器(cache)中,當加解密模塊發起讀寫IV 和密鑰操作時,可直接從 cache 中讀寫數據,訪問延遲小。當多包級聯時,IV 和密鑰數據具有時間局部性,而當包序號連續時,IV 數據具有空間局部性,因此在加解密模塊與 DDR 之間引入一級cache,cache 命中率較高,從而減少了 DDR 的訪問次數。

    1、DDR硬件加速器

    在密碼芯片中,高速加解密業務由高速接口、直接存儲器訪問(Direct Memory Access,DMA)、數據整形和加解密模塊共同完成,如圖 2 所示。高速接口是主機和密碼芯片的通信接口;DMA 模塊將下行包從高速接口搬往加解密模塊,將上行包從加解密模塊搬往高速接口;數據整形模塊將下行包數據進行整形并分發到加解密陣列中的各個加解密單元,當完成加解密后,將數據匯聚整理后組成上行包,送入 DMA 模塊。加解密模塊通常由多個加解密單元組成,完成加解密業務。

    圖 2 DDR 硬件加速器在密碼芯片中的位置

    如圖 2 所示,DDR 硬件加速器包含預讀檢測和cache 加速模塊。預讀檢測模塊用于檢測來自主機的高速接口的輸入數據,當檢測到初始包的密鑰索引時,向 DDR 發起讀密鑰請求,cache 加速模塊在收到讀請求后,從 DDR 中讀取密鑰,并將其存儲在 cache 中。當數據流經過 DMA 和數據整形模塊后,到達加解密模塊,加解密模塊根據包序號和密鑰索引向 DDR 發起訪問讀寫密鑰和 IV 請求,此時密鑰和 IV 已經存在 cache 中,可以較快地完成密鑰和 IV 的讀寫操作。

    1.1 預讀檢測模塊設計與實現

    密碼業務通常采用包傳輸模式,密鑰索引字段位于包頭信息中。預讀檢測模塊根據包格式,找出初始包的密鑰索引字段,根據密鑰的索引規則,計算密鑰在 DDR 中的存儲地址,發起一筆長度為 1、首地址為該 DDR 地址的讀操作。cache 加速模塊在收到來自預讀模塊的讀請求后,向 DDR 模塊發起讀請求,并讀回一筆長度為緩存行(cache line)大小的數據包存放到 cache 中,以便后續的加解密模塊可以從 cache 中讀取密鑰。

    1.2 cache 加速模塊設計與實現

    常見的 cache 組織方式包含全關聯、直接映射和路組關聯 [3-5]。為了提高 cache 的命中率,本設計采用全關聯方式。加速器的設計如圖 3 所示,下面分別就各個子功能進行詳細描述。

    AXI_GS 模 塊 將 AXI 總 線 接 口 轉 化 成 內 部 自定義總線接口,并將讀寫命令、地址和數據送往內容可尋址存儲器(Content Addressable Memory,CAM) search。該模塊內設有深度為 8 的輸入緩存和輸出緩存,用于消除瞬時帶寬不匹配對系統性能造成的影響。

    CAM search 模塊用于檢測地址是否命中,它將burst 首地址送給 CAM 模塊,從 CAM 模塊獲取命中信息,同時將讀寫命令、地址和數據送往 Write and read process 模塊。

    Address FIFO 用于存放未完成的且需要從 DDR顆粒讀取數據的讀寫操作的 burst 首地址和 burstID。在 Write and read process 模塊中,對于地址未命中讀操作和地址未命中且需要從 DDR 讀數據回填 cache line 的寫操作,burst 首地址和 burst ID 寫入 Address FIFO;在 Write and read process 模塊中,命中的寫操作需要檢查地址是否與 Address FIFO 中的地址相同,若相同,則當前操作與之前操作可能存在數據相關性 ,需要等到之前操作完成后,才開始當前操作。在 Write and read process 模塊中,地址命中的讀操作,需要檢查當前讀地址是否與Address FIFO 中的地址相同,若相同,則當前操作與之前操作可能存在數據相關性,需要等到之前操作完成后才開始當前讀操作,此外還需要檢查當前讀 ID 是否跟 Address FIFO 的讀 ID 相同。根據 AXI總線相同 ID 順序執行的要求,則應該等到該 ID 的之前操作完成后,才開始當前讀操作。

    Write and read process 模塊根據地址是否命中,對讀寫 burst 進行分別處理。

    為了減少對 DDR 的訪問,讀操作采用 lookthrough 機制 [3,4,6]。對于地址命中的讀 burst,讀命令和地址被送往 Match read process 模塊處理;對于地址未命中的讀 burst,向 AXI_GM_RD 模塊發起 AXI讀請求,將該筆讀響應的參數寫入 PFIFO,同時將首地址寫入 Address FIFO。

    為了盡快向加解密模塊返回寫響應信號,寫操作采用 write-back 機制 [3,4,6]。對于地址命中的寫burst,寫地址、寫數據、寫命令送往 SRAM write interface 模塊處理;對于地址未命中的寫 Burst,寫地址、寫數據、寫命令送往 SRAM write interface 模塊,若 burst 長度小于 cache line 大小,為了保持 cache數據和 DDR 數據一致,則需要從 DDR 讀數據回填當前 cache line,因此會向 AXI_GM_RD 模塊發起AXI 讀請求,將該筆讀響應的參數寫入 PFIFO,同時將首地址寫入 Address FIFO。每次操作,會更新CAM 和 LRU。

    SRAM write interface 用于處理寫 burst,它先將寫數據寫入 SRAM,然后將 response 寫回 AXI_GS響應通道。

    圖 3 cache 加速模塊

    GM read response process 模塊根據 PFIFO 中的參數,處理從 AXI_GM_RD 模塊讀回的 DDR 數據。若是地址未命中寫,則將從 DDR 讀回的數據寫入SRAM 中;若是地址未命中讀,則將從 DDR 讀回的數據寫入 AXI_GS 響應通道,同時將數據寫入SRAM。

    數據回收模塊采用最近最少使用(Least Recently Used,LRU)替換算法實現對 cache line 的更新。為了避免 cache 滿時,沒有可用的 cache 空間,導致流水線被阻塞,本設計在 cache 將滿未滿時,把最久沒有訪問過的 cache line 狀態清零,更新 LRU矩陣和 CAM 狀態,若該 cache line 中的數據比 DDR中的數據新,則讀出 cache line 的數據并寫入 DDR中。當接收到 Flush 命令時,將整個 CAM 的狀態復位,當 cache line 的數據比 DDR 數據新時,則讀出cache line 的數據并寫入 DDR 中 。

    CAM 模塊用于查詢地址是否命中。當地址命中時,命中標志生效并返回當前地址所在的 cache地址;若地址未命中且 cache 不滿時,命中標志無效并返回可用的 cache 地址;若地址未命中且 cache已滿時,命中標志無效并返回沒有可用 cache 地址的標志。

    LRU 用于查找最久未被使用的 cache line。本設計使用 LRU 矩陣算法。

    AXI_GM_RD 用于將內部的讀請求總線轉換成AXI 讀地址、讀數據通道信號。

    AXI_GM_WR 用于將內部的寫請求總線轉換成AXI 寫地址、寫數據以及寫響應通道信號。

    REG_IF 模塊為寄存器模塊,用于 CPU 配置模塊寄存器、讀取模塊狀態和調試信息。

    1.3 cache 加速模塊設計特點

    為了提高性能,采用全流水線設計 。寫操作處理過 程 包 含 4 級 流 水:第 1 級,AXI_GS將 AXI 總線轉化為內部總線;第 2 級,cam search模 塊 檢 查 地 址 是 否 命 中;第 3 級,SRAM write interface 將數據寫到 SRAM 并向 GS response arbiter輸出寫響應;第 4 級,AXI_GS 將內部寫響應轉換成 AXI 寫響應。

    地址命中的讀操作的處理過程包含 4 級流水:第 1 級,AXI_GS 將 AXI 總線轉化為內部總線;第2 級,cam search 模塊檢查地址是否命中;第 3 級,match read process 從 SRAM 讀回數據,并將其送往GS response arbiter;第 4 級,AXI_GS 將內部讀響應轉換成 AXI 讀響應。

    地址未命中的讀操作的處理過程又分為請求過程和響應過程。請求過程包含 4 級流水:第 1 級,AXI_GS 將 AXI 總線轉化為內部總線;第 2 級,cam search 模塊檢查地址是否命中;第 3 級,write readprocess 通過 AXI_GM_RD 模塊向 DDR 控制器發起讀請求;第 4 級,AXI_GM_RD 將內部的讀請求轉換成 AXI 讀地址通道信號,送給 DDR 控制器。響應過程包含 3 級流水:第 1 級,AXI_GM_RD 將來自 DDR 控制器的讀數據通道信號轉換成內部讀響應信號;第 2 級,GM read response process 將來自AXI_GM_RD 模塊的讀數據寫入 SRAM,同時送往GS response arbiter;第 3 級,AXI_GS 將內部讀響應轉換成 AXI 讀響應。

    采用 FIFO 設計,PFIFO 將 DDR 讀請求和讀數據分開,可以支持 Outstanding 操作。Address FIFO用于存放未完成的且需要從 DDR 顆粒讀取數據的 burst 的首地址和 ID,用于解決數據的相關性和AXI 總線要求相同 ID 順序執行的問題。

    為了簡化設計,所有仲裁均采用固定優先級算法。

    數據回收與數據讀寫相互獨立,并行完成。當正在被回收的對象又被重新訪問時,完成回收后,cam 的狀態不被清除。

    2、DDR硬件加速器分析

    如圖 2 所示,預讀檢測利用 DMA 和數據整形模塊的延遲(通常幾十個周期),提早發起對 DDR的讀操作,讀回的數據存放于 cache 中,這樣抵消了 DDR 訪問延遲對加解密模塊的影響。該模塊易于實現且硬件開銷不大。

    當包序號連續時,由于 IV 數據的存儲地址是由包序號索引,相鄰的級聯包的 IV 數據存儲地址連續,因此 IV 數據具有空間局部性。當多包級聯時,由于更新包和結束包與初始包有相同的 IV 地址和密鑰地址,因此密鑰和 IV 數據具有時間局部性。由于數據的時間局部性和空間局部性,cache加速器會有較高的命中率,使得大量密鑰和 IV 的訪問在 cache 中完成,從而有效減少 DDR 的訪問次數。

    本文用芯動的 DDR 控制器、鎂光的 DDR3 仿真模型以及 SYNOPSYS 的 VCS 仿真工具,搭建了仿真環境。本文分別對不同個數的級聯包,以及包序號是否連續進行有、無加速器的對比試驗。IV 長度為 16 字節,4 個級聯包包個數分別為 1,2,3,4,包序號連續時,加解密模塊讀寫 IV 和密鑰所需時間如表 1 所示,單位為時鐘周期;IV 長度為 16字節,4 個級聯包包個數分別為 1,2,3,4,包序號不連續時,加解密模塊讀寫 IV 和密鑰所需時間如表 2 所示,單位為時鐘周期。

    表 1 包序號連續的訪問時間

    通過對比試驗,由表 1、表 2 可知:加速器對密鑰和 IV 的訪問性能有較大提高,當包序號連續時,加速器性能有 80% 以上的提升,當包序號不連續時,有 50% 以上的性能提升。

    3、結語

    本文設計并用 Verilog 硬件描述語言實現了一種預讀與 cache 結合的 DDR 硬件加速器。通過對比試驗說明,加速器較大程度上提高了 DDR 的訪問性能,且適用于安全服務器領域的對稱算法密碼芯片的密鑰和 IV 存儲管理,有效地解決了片上 SRAM存儲容量不夠,片外 DDR 訪問效率低的問題。

    sramddr
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    在安全服務器應用領域,基于對稱算法的密碼芯片需要讀寫訪問大量、離散的密鑰和初始向量(Intial Vector,IV)數據。利用密鑰和 IV 數據的時間局部性和空間局部性,提出了一種預讀與高速緩沖存儲器(cache)相結合的雙倍速率同步動態隨機存取存儲(Double Data Rate Synchronous Dynamic Random Access Memory,DDR)加速器,來解決密鑰和
    具體而言,激光故障注入可用于瞄準和修改指令,導致指令被破壞、跳過等。此外,激光源允許獲得可編程延遲,功率范圍為0到3瓦。故障發生機制根據故障指令的數量以及在禁用和啟用緩存時報告的故障行為,嘗試確定指令在哪個階段出現故障。為了檢測和大致分類誘發故障,首先要了解從閃存到核心管道的指令流。本文的結果說明了激光故障注入的空間和時間準確性,指出了易受攻擊的位置并揭示了設備架構的信息。
    stm32逆向入門
    2022-07-15 17:30:00
    這是一個STM32F103C8T6 MCU密碼鎖 它具有4個按鍵,分別為1, 2, 3, 4. 分別對應GPIO_PA1, GPIO_PA2, GPIO_PA3, GPIO_PA4 flag1格式為SCTF{正確的按鍵密碼} 輸入正確的密碼, 它將通過串口(PA9–TX)發送flag2
    STM32固件逆向
    2022-06-09 17:08:53
    手動設置固件基地址我們的分析將以bin文件為目標。但此時存在很多標紅的地址,這是因為這些地址在IDA中并沒有設置,因此IDA將其解析為非法地址,標紅了,我們現在要做的就是手動添加一些段。我們采用bindiff來恢復符號表。導入之后實際上就能恢復大部分的函數名了
    告訴你如何破解MCU
    人工智能密碼學”為觀察人工智能與密碼系統的互動、影響提供新視角,也為當下后量子密碼技術探索提供新方案,無疑是一個值得探究的新方向。
    JLink固件漏洞
    2022-04-21 16:35:07
    JlinkV10的固件驗證缺陷我年前已發布刷機工具,但缺陷是利用就得刷機一次再刷回。發布前在某移動設備開發群談論時候,群友說v10會檢查固件簽名,你怎么搞。
    所有型號不能內置RDDI,有了直接報錯。這個命令也是非公開的,和AddFeature、ChangeSN一樣的流程,執行后會把現有ota的Features區域全部修改為0,發送更新ots信息請求讓設備去更新。但我測試了一下設備上的固件卻無法成功的把GDBFull或者JFlash字樣給修改為00。通過查閱STM32的flash編程手冊PM0059,明確說可以將非0的bit改為0,不需要擦除再改寫。
    雙電壓毛刺的故障攻擊,側信道史上首次!
    安全性是霧計算部署實施過程中的關鍵問題。系統必須有一個共同的安全基線,確保基本的互操作性和安全保護。開放霧節點安全架構有許多連接各層并提供系統服務的函數,這些函數可以創建由受信任組件組成的安全信任鏈。RTIC僅用于檢查虛擬機。當這個問題有一個更成熟的解決方案時,霧節點應借助RTIC方法保護節點免受危害。應使用從霧節點中安裝的硬件信任根派生的安全憑證實現強認證和不可否認服務。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类