本發明涉及密碼芯片集成電路設計的技術領域,具體涉及一種多體并行s盒的電路結構,實現多個s盒并行工作。
背景技術:
s盒是對稱密碼算法中一個重要的組件,它是有限域上一個有n比特輸入、m比特輸出的非線性函數。由于s盒是一個復雜的非線性函數,所以在實用分組密碼中s盒的尺寸一般不能太大,不超過8比特輸入、8比特輸出的形式最為常見。在分組密碼中,通常將多個s盒并聯起來使用。例如,高級加密標準算法aes中使用了16個8-8大小的s盒,中國加密標準算法sm4中使用了4個8-8大小的s盒。通常一個分組密碼算法中使用的s盒是相同的。
在安全性要求高的應用領域中,通常需要使用多種密碼算法。另外,為了滿足快速加解密的性能要求,常采用可重構的密碼處理器或者面向密碼應用的專用處理器等硬件平臺來實現對多種密碼算法的快速處理。由于同一個密碼算法中需要使用多個s盒并行工作,而不同密碼算法中使用的s盒可能并不相同。因此,需要這些硬件平臺能夠支持多種s盒的高效并行工作。
在s盒的硬件電路結構實現方式上,目前主要有兩種方式:一種是根據s盒的數學表達式采用門級邏輯電路來實現,這種方式只適合固定內容的s盒,當有多種s盒時,需要提前將這些s盒都以硬件電路形式實現,因此,無法用于需要支持s盒內容可變情形。另一種是基于查找表的實現方式,這種方式是將s盒的所有輸出值直接存放在存儲器中,如果s盒是一個n比特輸入、m比特輸出的s盒,則存儲器有2n個存儲單元構成,這些存儲單元依次編號為0、1、2、……、2n-1,第i號存儲單元中存放當s盒的輸入值為i時s盒對應的輸出值,且0≤i≤2n-1。
目前面向分組密碼的硬件電路中,為了滿足分組密碼中會使用多個s盒的需求,主要有兩種方法來實現多個s盒替換操作。第一種方法采用多次訪問一個查找表,在這種方式中,使用單塊存儲器構造的一個s盒的查找表。如果一個分組密碼的輪函數中采樣n個s盒并行工作,則一般需要進行n次存儲器訪問才能完成一輪中n個s盒的置換操作。第二種方法是采用多塊存儲器構成的多體并行的查找表,在這種方式中,如果一個分組密碼的輪函數中采用n個s盒并行工作,則需要設置n塊存儲器,每塊存儲器對應著一個s盒的查找表,在每輪運算中并行地訪問這些存儲器。這樣通過一次訪問操作即可以完成n個s盒的替換操作。例如,對于一個輸入為n比特、輸出為m比特的s盒,利用查找表方式實現時,一個s盒需要一個存儲器,而每個存儲器至少需要2n個數據位寬為m比特的存儲單位。
在單查找表方法中存在著處理速度較慢的問題,在由多塊存儲器構造的多體并行查找表方法中存在的問題是:一方面需要使用多個存儲器,成本較高;另一方面在將s盒內容加載到這些存儲器時,每個存儲器都需要加載一次,初始化時間較長。
技術實現要素:
針對現有支持多個s盒并行工作的電路結構中成本高、初始化時間長的問題,本發明提出一種多體并行s盒的電路結構,低成本、高效率的支持多個s盒并行工作,僅使用一塊存儲器既可實現多個s盒的并發訪問,不僅能降低硬件成本,還能節省s盒的加載時間。
為了解決上述技術問題,本發明的技術方案是:一種多體并行s盒的電路結構,包括串聯連接的存儲模塊和多路選擇器模塊,所述的存儲模塊包括數據輸入端data、地址輸入端addr、寫使能輸入端wr和k個數據位寬為m比特的數據輸出端,數據輸出端與多路選擇器模塊相連接;所述的多路選擇器模塊包括有k個數據位寬為m比特的數據輸入通道、t個數據位寬為n比特的通道選擇輸入端、t個數據位寬為m比特的s盒數據輸出端,數據輸入通道分別與存儲模塊的數據輸出端相連接,通道選擇輸入端用于接收t個s盒的輸入值,s盒數據輸出端用于輸出t個s盒的輸出值,m、n、t及k均為正整數,且k≥2n;還包括時鐘信號輸入端口clk,時鐘信號輸入端口clk用于接收外部提供的時鐘信號,為整個電路結構提供時鐘脈沖信號。
所述存儲模塊內設有k個數據位寬為m比特的寄存器和內部控制電路,寄存器的編號依次為:r_0、r_1、……、r_k-1,且r_l號寄存器存放的是當s盒輸入值為l時s盒的輸出值,其中,l為[0,k-1]之間的整數;r_0、r_1、……r_k-1號寄存器的輸出端分別與存儲模塊的k個數據位寬為m比特的數據輸出端相連接。
所述存儲模塊的數據輸入端data的數據位寬為d比特,用于接收外部輸入到存儲模塊的數據;存儲模塊的地址輸入端addr的位寬為a比特,用于接收外部提供的地址信號;存儲模塊的寫使能輸入端wr,用于接收外部提供的寫使能輸入信號,a和d為正整數,a≥log2k*m/d,且d為m的整數倍。
所述存儲模塊的寫使能端wr有效時,存儲模塊的內部控制電路把數據輸入端data上的數據寫入到地址輸入端addr指定編號的r_l號寄存器中,l為[0,k-1]之間的整數。
所述的多路選擇器模塊用于根據多個s盒的輸入值從存儲模塊中并行地選擇出多個s盒的相應輸出值;多路選擇器模塊的k個數據位寬為m比特的數據輸入通道的編號依次為:d0、d1、……、dk-1,第dl號數據輸入通道分別與r_l號寄存器的輸出端相連接;多路選擇器模塊的t個數據位寬為n比特的通道選擇輸入端的編號依次為:x0、x1、……、xt-1;多路選擇器模塊的t個數據位寬為m比特的s盒數據輸出端的編號依次為:y0、y1、……、yt-1;多路選擇器模塊包括t個k選1多路選擇器,k選1多路選擇器的編號依次為:m_0、m_1、……、m_t-1;k選1多路選擇器的k個多路選擇器數據輸入端的編號依次為:i0、i1、……、ik-1;
第m_j號k選1多路選擇器有數據位寬為m比特的s盒數據輸出端yj、數據位寬為n比特的通道選擇輸入端xj和k個數據位寬為m比特的多路選擇器數據輸入端i0、i1、……、ik-1,其中,0≤j≤t-1的整數;每個k選1多路選擇器的第il號的多路選擇器數據輸入端分別與多路選擇器模塊的第dl號數據輸入通道相連接,l為[0,k-1]之間的整數。
本發明可以靈活地開發出支持多個s盒并行工作的電路結構,在實現對t個輸入為n比特、輸出為m比特的s盒并行工作的電路結構時,通過共享2n個數據位寬為m比特的寄存器,實現了多個s盒隨機并行訪問的能力,與采用單個查找表實現的s盒相比能夠一次進行多個s盒替換操作,與采用多個存儲器并行工作的s盒電路結構相比能節省大量的存儲器資源,而且僅需要對存儲器進行一次s盒內容加載即可實現對多個相同s盒查找表的初始化,與采用多個存儲器并行工作的電路結構相比能夠節省存儲器的加載時間。
附圖說明
為了更清楚地說明本發明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發明的一些實施例,對于本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。
圖1為本發明實施例一的結構示意圖。
圖2為本發明實施例二的結構示意圖。
具體實施方式
下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發明一部分實施例,而不是全部的實施例。基于本發明中的實施例,本領域普通技術人員在沒有付出創造性勞動前提下所獲得的所有其他實施例,都屬于本發明保護的范圍。
實施例一
如圖1所示,一種多體并行s盒的電路結構,包括串聯連接的存儲模塊和多路選擇器模塊,所述的存儲模塊包括有k個數據位寬為m比特的數據輸出端、數據輸入端data、地址輸入端addr和寫使能輸入端wr,數據輸出端與多路選擇器模塊相連接。所述的多路選擇器模塊包括有k個數據位寬為m比特的數據輸入通道、t個數據位寬為n比特的通道選擇輸入端、t個數據位寬為m比特的s盒數據輸出端,k個數據輸入通道分別與存儲模塊的k個數據輸出端相連接。通道選擇輸入端用于接收t個s盒的輸入值,s盒數據輸出端用于輸出t個s盒的輸出值,m、n、t及k均為正整數,且k≥2n。還包括時鐘信號輸入端口clk,時鐘信號輸入端口clk用于接收外部提供的時鐘信號,為整個電路結構提供時鐘脈沖信號。
存儲模塊用于存放s盒的所有輸出值,存儲模塊內設有k個數據位寬為m比特的寄存器和內部控制電路,寄存器從上到下的編號依次為:r_0、r_1、……、r_k-1,且r_l號寄存器存放的是當s盒輸入值為l時s盒的輸出值,其中,l為[0,k-1]之間的整數。即第r_0號寄存器存放的是當s盒輸入值為0時s盒對應的輸出值,第r_1號寄存器存放的是當s盒輸入值為1時s盒的輸出值,第r_2、r_3、……、r_k-1號寄存器中存放的內容以此類推。r_0、r_1、……r_k-1號寄存器的輸出端分別與存儲模塊的k個數據位寬為m比特的數據輸出端相連接。存儲模塊的k個數據位寬為m比特的數據輸出端分別與多路選擇器模塊的數據輸入通道相連接。
存儲模塊的數據輸入端data的數據位寬為d比特,用于接收外部輸入到存儲模塊的數據;存儲模塊的地址輸入端addr的位寬為a比特,用于接收外部往存儲模塊寫入數據時提供的地址信號;存儲模塊的寫使能輸入端wr,用于接收外部提供的寫使能輸入信號,a和d為正整數,且d為m的整數倍,a≥log2k*m/d。
存儲模塊的寫使能端wr有效時,存儲模塊的內部控制電路把數據輸入端data上的數據寫入到地址輸入端addr指定編號的r_l號寄存器中,l為[0,k-1]之間的整數。
多路選擇器模塊用于根據多個s盒的輸入值從存儲模塊中并行地選擇出多個s盒的相應輸出值。多路選擇器模塊的k個數據位寬為m比特的數據輸入通道的編號依次為:d0、d1、……、dk-1,第dl號數據輸入通道分別與r_l號寄存器的輸出端相連接。即第r_0號寄存器的數據輸出端連接到多路選擇器模塊的第d0號數據輸入通道;第r_1號寄存器的數據輸出端接到多路選擇器模塊的第d1號數據輸入通道;第r_2、r_3、……、r_k-1號寄存器數據輸出端的連接方式以此類推。
多路選擇器模塊的t個數據位寬為n比特的通道選擇輸入端的編號依次為:x0、x1、……、xt。多路選擇器模塊的t個數據位寬為m比特的s盒數據輸出端的編號依次為:y0、y1、……、yt。多路選擇器模塊包括t個k選1多路選擇器,k選1多路選擇器的編號依次為:m_0、m_1、……、m_t-1;k選1多路選擇器的k個多路選擇器數據輸入端的編號依次為:i0、i1、……、ik-1。第m_j號k選1多路選擇器有數據位寬為m比特的s盒數據輸出端yj、數據位寬為n比特的通道選擇輸入端xj和k個數據位寬為m比特的多路選擇器數據輸入端i0、i1、……、ik-1,其中,0≤j≤t-1的整數。第m_j號k選1多路選擇器的通道選擇輸入端作為多路選擇器模塊的第xj號通道選擇輸入端,用于接收第j號s盒的輸入值,第m_j號k選1多路選擇器的數據輸出端作為多路選擇器的第y_j號s盒數據輸出端,用于輸出s盒的輸出值。
每個k選1多路選擇器的第il號的多路選擇器數據輸入端分別與多路選擇器模塊的第dl號數據輸入通道相連接,l為[0,k-1]之間的整數。即,每個k選1多路選擇器的第i0號數據輸入端分別連接到多路選擇器模塊的第d0號數據輸入通道,每個k選1多路選擇器的第i1號數據輸入端分別連接到多路選擇器模塊的第d0號數據輸入通道,每個k選1多路選擇器的第i2、i3、……、ik-1號數據輸入端的連接方式依此類推。
若有t個輸入為n比特、輸出為m比特的s盒并行工作時,所述的存儲模塊至少包含k個數據位寬為m比特的寄存器,并且多路選擇器模塊中至少包含t個數據位寬為m比特的k選1多路選擇器,其中,k≥2n。由于存儲模塊中的k個寄存器能夠同時向外提供數據并且多路選擇器模塊中t個k選1多路選擇器可以并行工作,所以當有t個s盒的輸入值同時到達此多體并行s盒電路結構時,該電路能夠同時輸出t個對應的s盒輸出值。因此,所述的多體并行s盒可以支持t個s盒并發訪問。
實施例二
一種多體并行s盒的電路結構,實現了一種支持4個8比特輸入、8比特輸出的多體并行s盒電路,其電路結構圖如圖2所示。包括存儲模塊和多路選擇器模塊,其中,所述的存儲模塊有256個數據位寬為8比特的數據輸出端,這些數據輸出端與多路選擇器模塊相連接。所述的存儲模塊有一個數據位寬為8比特的數據輸入端data,用于接收外部輸入到存儲模塊的數據;所述的存儲模塊有一個位寬為8比特的地址輸入端addr,用于接收外部提供的地址信號以選中要寫入的寄存器;所述的存儲模塊有一個寫使能輸入端,用于接收外部提供的寫使能輸入信號。所述的多路選擇器模塊有256個數據位寬為8比特的數據輸入通道,這些數據輸入通道分別與存儲模塊的256個數據輸出端相連。多路選擇器模塊有4個數據位寬為8比特的通道選擇輸入端x0-x3,這些通道選擇輸入端用于接收4個s盒的輸入值.所述的多路選擇器模塊有4個數據位寬為8比特的s盒數據輸出端y0-y3,這些s盒數據輸出端用于輸出4個s盒的輸出值。本發明還包括有一個時鐘信號輸入端口clk,時鐘信號輸入端口clk用于接收外部提供的時鐘信號,并為整個置換電路提供時鐘脈沖信號。
存儲模塊用于存放一個s盒的所有輸出值,由256個數據位寬為8比特的寄存器和內部控制電路構成。寄存器從上到下的編號依次為r_0、r_1、……r_255;第r_0號寄存器存放的是s盒輸入值為0時s盒的輸出值,第r_1號寄存器存放的是s盒輸入值為1時s盒的輸出值,第r_2、r_3、……、r_255號寄存器中存放的內容以此類推。存儲模塊中的256個寄存器的數據輸出端分別作為存儲模塊的256個數據輸出端,第r_0號寄存器的數據輸出端連接到多路選擇器模塊的第d0號數據輸入通道;第r_1號寄存器的數據輸出端連接到多路選擇器模塊的第d1號數據輸入通道;第r_2、r_3、……、r_255號寄存器的數據輸出端的連接方式以此類推。
存儲模塊有三類輸入端,存儲模塊的第一類輸入端為數據位寬為8比特的數據輸入端data,用于接收外部輸入的數據;存儲模塊的第二類輸入端為位寬為8比特的地址輸入端addr,用于接收外部寫數據時的地址信號;存儲模塊的第三類輸入端為寫使能輸入端wr,用于接收外部輸入的寫使能信號;當寫使能端wr有效時,低電平有效,存儲模塊的內部控制電路將把數據輸入端data上的8比特數據寫入地址輸入端addr指定編號的寄存器中。
所述的多路選擇器模塊中包含4個數據位寬為8比特的256選1多路選擇器,這些多路選擇器從上到下的編號依次為m_0、m_1、m2、m_3。多路選擇器模塊有256個數據位寬為8比特的數據輸入通道,這些數據輸入通道從上到下的編號依次為:d0、d1、……、d255。當0≤l≤255時,多路選擇器模塊的第dl號數據輸入通道與存儲模塊中的第r_l號寄存器的數據輸出端相連接。多路選擇器模塊有4個數據位寬為8比特的通道選擇輸入端,這些通道選擇輸入端的編號從上到下依次為x0、x1、x2、x3,當0≤j≤3時,第xj號通道選擇輸入端用于接收第j號s盒的輸入值;所述的多路選擇器模塊有4個數據位寬為8比特的s盒數據輸出端,這些s盒數據輸出端從上到下的編號依次為:y0、y1、y2、y3,當0≤j≤3時,第yj號數據輸出端用于輸出第j號s盒的輸出值;當0≤j≤3時,第xj號通道選擇輸入端和第yj號s盒數據輸出端分別連接到第m_j號256選1多路選擇器的通道選擇端和數據輸出端。
在實際應用中,本發明由外部功能單元控制和使用,以完成相應的s盒內容初始化和s盒替換功能。本發明完成s盒替換功能時會涉及到如下兩種操作:
第一種操作為s盒的內容加載:當首次使用或需要更換s盒的內容時,需要進行s盒內容加載操作。由外部功能單元根據s盒的查找表內容對存儲模塊中的各個寄存器進行初始化。在本實施例中,初始化過程共需要256個周期完成。當0≤l≤255時,外部功能單元在時鐘信號clk的第l個周期內,在地址輸入端addr上給出地址值l,并在數據輸入端data上給出當s盒的輸入值為l時對應的輸出值s(l),同時在寫使能輸入端wr上給出有效信號(低電平),存儲模塊的內部控制電路則會將輸出值s(l)的值寫入到第r_l號寄存器中。當256個寄存器全部加載完成后,即完成s盒內容加載過程。完成s盒內容加載后,外部功能單元應將寫使能輸入端wr的輸入信號置為無效狀態。
第二種操作為s盒的替換操作。本實施例支持4個8比特輸入、8比特輸出s盒的并發操作,當需要進行4個s盒的并行替換操作時,只需將4個s盒的8比特輸入數據分別送入到第x0、x1、x2、x3號通道選擇輸入端,就會分別在第y0、y1、y2、y3號s盒數據輸出端得到對應的4個s盒輸出值。因此,本發明能夠支持多個s盒的并行替換操作。
本實施例中僅使用一個s盒查找表所需的存儲容量就可以支持四個s盒的并行替換操作,與采樣多塊存儲器實現的多個s盒的并發替換操作的電路結構相比,本發明能夠有效地減少所需的存儲容量,節省硬件成本,同時能夠節省存儲器的初始化時間;與采用傳統的單個s盒查找表方式相比,能夠提高數據處理速度。因此,本發明能達到了降低成本、降低加載時間的目的,為后期的實際生產帶來有利的經濟效益。
以上所述僅為本發明的較佳實施例而已,并不用以限制本發明,凡在本發明的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含在本發明的保護范圍之內。