駱建軍 沈一凡 周 迪 馮春陽(yáng) 鄧江峽*
①(杭州電子科技大學(xué)微電子研究中心 杭州 310018)
②(浙江宇視科技有限公司 杭州 310051)
隨著越來(lái)越多的硬件設(shè)備連接到互聯(lián)網(wǎng)中,物聯(lián)網(wǎng)安全面臨在擴(kuò)展連接環(huán)境下安全威脅引發(fā)的復(fù)雜挑戰(zhàn)[1]。執(zhí)行具有最小延時(shí)的高計(jì)算力的安全認(rèn)證是網(wǎng)絡(luò)安全的保障[2,3]。為了增強(qiáng)服務(wù)器性能,可以使用更為強(qiáng)大的CPU/GPU[4]。然而,即使執(zhí)行少量的安全負(fù)載,CPU的容量和效率也會(huì)因此而降低[5]。
本文介紹了一種替代解決方案,即一種具有高速、高吞吐量的可插拔式硬件加密卡,來(lái)應(yīng)對(duì)安全需求,并將CPU從執(zhí)行加解密算法(如RSA[6]、ECC[7]、AES[8]等)的任務(wù)中釋放掉。這種類型的密碼模塊(設(shè)備)會(huì)幫助服務(wù)器在不降低CPU性能的情況下處理大量驗(yàn)證請(qǐng)求。同時(shí),這個(gè)模塊和CPU之間通過(guò)高速接口來(lái)交換數(shù)據(jù)。以PCIe接口[9]為例,目前流行的是具有16個(gè)Lane的PCIe Gen4的CPU/GPU,其傳輸速率可達(dá)到32 GB/s,假定物聯(lián)網(wǎng)系統(tǒng)認(rèn)證按4 kB大小的數(shù)據(jù)包進(jìn)行處理,那么該模塊可執(zhí)行8×106次認(rèn)證操作。
要設(shè)計(jì)一種安全算法計(jì)算能力與8×106IOPS總線能力相匹配的PCIe卡其實(shí)是一個(gè)棘手的工程問(wèn)題。雖然已有一些用FPGA實(shí)現(xiàn)的密碼卡產(chǎn)品[10-12],但這樣的產(chǎn)品里面每個(gè)引擎都需要進(jìn)行數(shù)學(xué)運(yùn)算,而這些運(yùn)算受到硬件資源和物理邏輯門(mén)參數(shù)限制。要提供充足的邏輯門(mén)就需要用到多個(gè)FPGA芯片,即使這樣其性能仍然低于期望值。
本文提出了一種新的加密引擎陣列架構(gòu),其多個(gè)加密引擎可以并行計(jì)算。這一架構(gòu)用更少的引腳或連接來(lái)定義加密引擎接口,以降低封裝成本。同時(shí),考慮到eMMC總線與SPI總線類似,采用eMMC總線構(gòu)建加密引擎陣列,使其在兩個(gè)維度上都可以提供更高性能。此外,本文以PCIe接口為原型,還描述了一種高性能加密ASIC設(shè)計(jì)來(lái)驗(yàn)證該方法,并分享工程經(jīng)驗(yàn)。
圖1是經(jīng)過(guò)實(shí)踐檢驗(yàn)達(dá)到預(yù)期性能的加密模塊架構(gòu),由一個(gè)高速接口、一個(gè)中央管理監(jiān)控模塊(Central Manage & Monitor Module, CMMM)和一組多通道驅(qū)動(dòng)的加密引擎構(gòu)成。

圖1 加密模塊架構(gòu)
高速接口被連接到使用PCIe, SAS, SATA的主機(jī)總線上。片上算法IP陣列會(huì)運(yùn)行多個(gè)算法引擎,而每個(gè)引擎都有一個(gè)數(shù)據(jù)包接口,該接口可用于機(jī)械硬盤(pán)、固態(tài)硬盤(pán)、SD卡、eMMC卡[13]、SPI接口[14]或SATA接口[15]。外加的數(shù)據(jù)緩沖區(qū)用于接收從主機(jī)來(lái)的命令和數(shù)據(jù)包,或返回給主機(jī)已處理過(guò)的數(shù)據(jù)包和相應(yīng)的狀態(tài)信息,以提高模塊的性能和穩(wěn)定性。
加密引擎陣列有N個(gè)并行的加密通道(CCi,0≤i 加密引擎由通道接口、數(shù)據(jù)緩沖區(qū)和具有安全密鑰寄存器的特定算法組成,如圖3所示。 圖2與圖3的緩沖區(qū)非常重要,因?yàn)樗鼘?shí)際上是一個(gè)由CMMM管理的隊(duì)列。這就使得模塊能連續(xù)地接收含有命令和數(shù)據(jù)包的任務(wù)而不管之前的任務(wù)是否完成。所有的任務(wù)都臨時(shí)被壓入隊(duì)列,而CMMM將把任務(wù)分配給任何空閑著的加密引擎。根據(jù)應(yīng)用程序要求,CMMM也可以按不同的優(yōu)先級(jí)來(lái)分配這些任務(wù)。圖4是CMMM管理任務(wù)流程示例,主機(jī)依次發(fā)送任務(wù)1、任務(wù)2、任務(wù)3,CMMM對(duì)這些任務(wù)動(dòng)態(tài)進(jìn)行調(diào)整,并分配給加密引擎。最終,主機(jī)先后收到任務(wù)2、任務(wù)3、任務(wù)1完成后的數(shù)據(jù)和狀態(tài)信息。顯然,緩沖越大,隊(duì)列越長(zhǎng),模塊可達(dá)到的性能也就越高。 圖2 使用MMC接口的加密塊 圖3 加密引擎結(jié)構(gòu) 圖4 加密任務(wù)流程 由于所有高速接口(如SATA, PCIe)的物理層使用差分信號(hào)進(jìn)行傳輸,不能級(jí)聯(lián)到陣列中,這也就意味著M只能為1,限制了該架構(gòu)靈活地?cái)U(kuò)展到更大規(guī)模。因此,可以采用SPI總線或MMC/eMMC總線進(jìn)行數(shù)據(jù)傳輸。 SPI總線可以通過(guò)添加片選信號(hào)(CS)實(shí)現(xiàn)級(jí)聯(lián)來(lái)構(gòu)建一個(gè)2維加密陣列,但是通常的SPI總線的最大數(shù)據(jù)傳輸速率為1.2 MB/s,假設(shè)用4 kB大小的IO測(cè)試,其遠(yuǎn)小于300 IOPS,不能為認(rèn)證過(guò)程提供足夠的吞吐量。 MMC/eMMC具有與SPI總線類似的總線結(jié)構(gòu),其總線寬度還可以擴(kuò)展到4位,甚至8位,其定義的一種機(jī)制可以通過(guò)某個(gè)部件號(hào)來(lái)選擇或激活模塊(卡),并且基本的MMC/eMMC模塊可提供至少為25 MB/s的數(shù)據(jù)傳輸速率,最新的eMMC5.1可提供高達(dá)400 MB/s的數(shù)據(jù)傳輸速率,接近SATA III和USB3.0的性能。 鑒于以上分析,本文采用MMC/eMMC總線進(jìn)行數(shù)據(jù)傳輸。MMC/eMMC設(shè)備通過(guò)可以配置數(shù)量的數(shù)據(jù)信號(hào)總線來(lái)傳輸數(shù)據(jù)。這些通信信號(hào)描述如下: CLK:從主機(jī)輸出的時(shí)鐘信號(hào),每個(gè)信號(hào)周期下命令總線上傳輸1 bit,所有數(shù)據(jù)總線上傳輸1 bit或2 bit。時(shí)鐘頻率可以在零到最大時(shí)鐘頻率之間變化。 CMD:雙向命令通道,用于設(shè)備初始化和命令傳輸。 DAT0-DAT7:雙向數(shù)據(jù)傳輸信號(hào),在推挽模式下工作,同一時(shí)刻進(jìn)行單向傳輸(主機(jī)或設(shè)備驅(qū)動(dòng)該信號(hào))。在上電或復(fù)位后,默認(rèn)只有DAT0用于傳輸數(shù)據(jù)。 MMC/eMMC總線的一個(gè)特性是在CMD線上采用“線與”機(jī)制時(shí),可使某個(gè)設(shè)備在總線仲裁程序設(shè)置的環(huán)境中作為一個(gè)多終端設(shè)備運(yùn)行。主機(jī)在開(kāi)漏模式下開(kāi)始設(shè)備識(shí)別過(guò)程,CMD線上的開(kāi)漏驅(qū)動(dòng)級(jí)允許在設(shè)備識(shí)別過(guò)程中進(jìn)行并行的設(shè)備操作。驅(qū)動(dòng)多臺(tái)設(shè)備的MMC/eMMC架構(gòu)如圖5和圖6所示。 圖5 一個(gè)MMC主機(jī)驅(qū)動(dòng)多個(gè)MMC設(shè)備 總線被激活后,主機(jī)將給設(shè)備發(fā)送有效運(yùn)行條件 (CMD1),對(duì)于CMD1的響應(yīng)就是“已連線”和對(duì)系統(tǒng)中所有設(shè)備進(jìn)行環(huán)境限制操作。將不兼容的設(shè)備設(shè)置成“Inactive State”。然后主機(jī)發(fā)送廣播命令A(yù)LL_SEND_CID(CMD2),要求所有設(shè)備發(fā)送其唯一的設(shè)備標(biāo)識(shí)碼(Device Identification Number, CID)。所有處于“Ready State”的設(shè)備在CMD線上同時(shí)相繼發(fā)送其CID,只要這些設(shè)備發(fā)出CID的位與在任何一個(gè)“位”周期內(nèi)相應(yīng)的位有不匹配時(shí),這些設(shè)備將不會(huì)被選上,還會(huì)立即停止發(fā)送其CID,保持“Ready State”,等待下一次識(shí)別周期。因?yàn)槊總€(gè)設(shè)備都有唯一的CID,所以最終只有一個(gè)設(shè)備給主機(jī)成功發(fā)送其完整的CID,這個(gè)設(shè)備之后進(jìn)入“Identification State”狀態(tài)。然后,主機(jī)發(fā)送SET_RELATIVE_ADDR(CMD3),為這個(gè)設(shè)備分配一個(gè)關(guān)聯(lián)設(shè)備地址(Relative Device Address, RCA),用于數(shù)據(jù)傳輸。一旦RCA被接收,Device進(jìn)入“Stand-by State”,由開(kāi)漏模式變?yōu)橥仆炷J剑辉賹?duì)之后的身份識(shí)別周期做出反應(yīng)。主機(jī)會(huì)重復(fù)設(shè)備識(shí)別過(guò)程(CMD2,CMD3循環(huán)),直到所有設(shè)備被識(shí)別,不再有設(shè)備響應(yīng)。識(shí)別過(guò)程超時(shí)的條件是發(fā)送CMD2后超過(guò)一段時(shí)間(eMMC規(guī)范中定義的NID時(shí)鐘周期)沒(méi)有收到響應(yīng)。之后,主機(jī)可以使用CID激活任意設(shè)備,并強(qiáng)制其他設(shè)備在總線上保持安靜。 如果一個(gè)加密模塊共有M×N×K個(gè)加密引擎,那么它能同時(shí)處理M×N×K個(gè)認(rèn)證請(qǐng)求。比如每個(gè)加密引擎每秒可以運(yùn)行R次AES或SHA算法,那么這個(gè)模塊可以每秒執(zhí)行M×N×K×R次AES算法,也就是說(shuō)它的最大計(jì)算能力CAmax可以表示成: 但這不是最終測(cè)試到的性能,因?yàn)榧用苣K與主機(jī)間的接口吞吐量很可能是性能瓶頸。SATA接口的最大數(shù)據(jù)傳輸率TSmax=750 MB/s,PCIe Gen3×4的TSmax=4 GB/s。模塊的最終性能由{CAmax,TSmax}的最小值決定。 為了分析模塊性能和時(shí)延,定義以下幾個(gè)變量: Tc:加密引擎處理一個(gè)命令數(shù)據(jù)包的時(shí)間。 Tt:處理器的本地緩沖區(qū)和模塊中央緩沖區(qū)之間的數(shù)據(jù)傳輸時(shí)間。 Ti:通過(guò)通信接口接收數(shù)據(jù)的時(shí)間。 Tw:數(shù)據(jù)包在IO隊(duì)列緩沖的時(shí)間。 模塊中的加密引擎越多,電路可以提供的性能越高。假設(shè)原始數(shù)據(jù)被分割為P個(gè)小數(shù)據(jù)包,每個(gè)數(shù)據(jù)包的大小為4 kB。加密或解密一個(gè)數(shù)據(jù)包需要Tc,共有N個(gè)并行運(yùn)行的加密通道,每個(gè)通道可運(yùn)行M個(gè)加密塊。那么電路每秒可以執(zhí)行N ·M/(Tc+Tt)次加密/解密操作,在此忽略了給模塊分配任務(wù)的時(shí)間。那么,IOPS可表示成 加密/解密處理器的延遲由多個(gè)參數(shù)決定。比如,如果有一個(gè)或多個(gè)空閑的加密引擎,此時(shí)數(shù)據(jù)包以最小的延遲通過(guò)中央緩沖區(qū)被加密引擎處理[18],Tw可以取最小值并忽略不計(jì)。如果所有的加密引擎繁忙且IO隊(duì)列已滿,接收到的數(shù)據(jù)包在中央緩沖區(qū)處于等待狀態(tài),直到有一個(gè)加密引擎被釋放到空閑狀態(tài),Tw具有最大值。Tw的計(jì)算公式為 假設(shè)緩沖區(qū)的最大容量Cmax=4 0 0 0,Ti=1 ms,Tc=5 ms,Tt=1 ms,當(dāng)N=1, 2, 4, 8,M=1,8時(shí),理論計(jì)算得到的最大總時(shí)延TL如表1所示。 表1 不同情況下的最大總時(shí)延(ms) 緩沖區(qū)的容量,即IO隊(duì)列的最大深度,必須滿足隊(duì)列請(qǐng)求的數(shù)量大于加密引擎的數(shù)量,否則一些加密引擎將會(huì)被閑置,模塊整體性能無(wú)法達(dá)到最高。另外,如果IO隊(duì)列深度配置得過(guò)大,響應(yīng)的時(shí)延就會(huì)增加。因此,IO隊(duì)列的深度應(yīng)該有一個(gè)極值。一般來(lái)說(shuō),隊(duì)列深度可以等于密碼引擎數(shù)量,并且每個(gè)隊(duì)列請(qǐng)求在緩沖區(qū)可占用1~4 kB空間。也就是說(shuō)在時(shí)延可以接受的情況下,隊(duì)列深度越大越好。 為驗(yàn)證該架構(gòu),本文完成了一個(gè)PCIe Gen2×4接口的ASIC加密模塊。使用55 nm制程工藝,最終制備出尺寸為4.8 mm×4.7 mm的芯片,時(shí)鐘頻率高達(dá)500 MHz。 該模塊共有8個(gè)通道(N=8),每個(gè)通道驅(qū)動(dòng)8個(gè)eMMC模塊(M=8),每個(gè)模塊有16個(gè)加密引擎(K=16),單個(gè)加密引擎每秒可以執(zhí)行133次SHA-256加密操作(R=133),并且 IO大小為4 kB。測(cè)試結(jié)果見(jiàn)表2,表明其平均吞吐率等于419.23 MB/s。 表2 性能測(cè)試 目前已報(bào)道了具有高性能密碼設(shè)計(jì)的FPGA解決方案。比如文獻(xiàn)[19]中由3塊Xilinx Virtex FPGA芯片實(shí)現(xiàn)的模塊,其SHA-256吞吐率為47.75 MB/s。而本文ASIC架構(gòu)其吞吐量是它的8~9倍。 PCIe Gen4的速度比Gen2的快4倍,如果使用PCIe Gen4×8接口,理論上,該模塊的IOPS可達(dá)到容量為100k×4×2=800k,每個(gè)加密通道可提供100k的IOPS吞吐量,每個(gè)eMMC加密塊的IOPS應(yīng)大于12.5k。實(shí)際上,eMMC總線頻率高達(dá)200 MHz,這可以支持運(yùn)行最大為25k的IOPS。這意味著模塊可以在1 s內(nèi)用SHA-256算法處理800k次認(rèn)證請(qǐng)求。即使面向更高性能需求,(M,N) = (8, 8) 甚至 (M,N) = (8, 4)的配置仍然能滿足這一需求。 本文實(shí)現(xiàn)的ASIC加密模塊中,IO隊(duì)列深度被設(shè)置為128,由于IO隊(duì)列深度提供了足夠的等待緩沖區(qū),所以所有加密引擎都有足夠的時(shí)間運(yùn)行相應(yīng)的算法。如果IO隊(duì)列深度過(guò)小,IOPS將會(huì)下降到1.3k左右。PCIe Gen3×4的數(shù)據(jù)傳輸速率高達(dá)4 GB/s。其發(fā)送和接收數(shù)據(jù)的時(shí)延Ti=4 kB/(4 GB/s)=1 μs。 考慮到大多數(shù)情況下數(shù)據(jù)傳輸率較為穩(wěn)定,在相同硬件配置的情況下,Ti不會(huì)有太大不同。因此,時(shí)延主要由在IO隊(duì)列中的等待時(shí)間決定。測(cè)試結(jié)果如表3所示。 表3 隨機(jī)讀寫(xiě)的時(shí)延(μs) 本文描述了一種高性能的支持并行運(yùn)算加密引擎陣列的PCIe接口加密卡,其平均吞吐率高達(dá)419.23 MB/s。此外,模塊集成的加密引擎越多,模塊的性能就越好。下一步的工作目標(biāo)是采用最新的PCIe接口、更多的PCIe物理通道以及更強(qiáng)大的加密算法引擎,為物聯(lián)網(wǎng)安全系統(tǒng)提供更高性能的加密卡。


2.2 總線分析

3 性能分析




4 測(cè)試結(jié)果


5 結(jié)論