趙石磊, 劉 玲, 黃 海, 徐 江, 劉志偉, 于 斌
哈爾濱理工大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院, 哈爾濱 150080
網(wǎng)絡(luò)的發(fā)展帶來(lái)海量的機(jī)密信息傳輸, 密碼學(xué)在日常生活中發(fā)揮著越來(lái)越重要的作用, 現(xiàn)代密碼學(xué)發(fā)展的核心是保護(hù)數(shù)據(jù)信息的機(jī)密性、完整性、認(rèn)證性和不可否認(rèn)性等[1]. 現(xiàn)代密碼體制一般分為對(duì)稱密碼體制和非對(duì)稱密碼體制兩大類, 其中對(duì)稱密碼又分為分組密碼和流密碼. 流密碼因其具有良好保密性、輕量化和加密速度快等特點(diǎn)得到了廣泛的應(yīng)用.
流密碼通常用于安全網(wǎng)絡(luò)通信中保護(hù)通信數(shù)據(jù), 尤其在軍事、政府部門等領(lǐng)域. 應(yīng)用比較廣泛的流密碼算法有: GSM 系統(tǒng)的A5/1 算法[2], 3GPP 標(biāo)準(zhǔn)中用于移動(dòng)通信的SNOW 3G[3]和ZUC 算法[4],IEEE 802.11 中規(guī)定的安全機(jī)制WEP、SSL/TLS 等標(biāo)準(zhǔn)協(xié)議采用的RC4 算法[5], 用于藍(lán)牙加密系統(tǒng)的E0 算法[6], 還有目前應(yīng)用極為廣泛的ChaCha20 算法[7]等. 谷歌選擇ChaCha20 算法和Bernstein 的Poly1305 消息驗(yàn)證碼來(lái)代替TLS 中的RC4, ChaCha20-Poly1305 AEAD 密碼套件已經(jīng)在TLS 1.3 中標(biāo)準(zhǔn)化[8], ChaCha20 還被用于FreeBSD、OpenBSD、NetBSD、Linux 內(nèi)核等各種操作系統(tǒng)[9]. 近年來(lái),隨著通信和網(wǎng)絡(luò)飛速發(fā)展, 流密碼算法的應(yīng)用越來(lái)越廣泛. 為了滿足現(xiàn)代應(yīng)用的需求, 具有加密功能和消息驗(yàn)證功能的認(rèn)證加密算法和適用于資源受限環(huán)境(如射頻識(shí)別(radio frequency identification, RFID)標(biāo)簽、傳感器網(wǎng)絡(luò)等) 的輕量級(jí)加密算法得到了人們的關(guān)注, 基于流密碼設(shè)計(jì)的認(rèn)證加密算法和輕量級(jí)流密碼算法也成為流密碼研究的重點(diǎn)對(duì)象, 一系列此類流密碼算法被提出, 如ACORN、Grain-128AEAD、Fruit-80、WAGE 等.
本文對(duì)傳統(tǒng)流密碼算法和近年來(lái)提出的基于流密碼算法的認(rèn)證加密算法和輕量級(jí)加密算法進(jìn)行了分析, 對(duì)部分流密碼算法的計(jì)算算子進(jìn)行歸納, 設(shè)計(jì)一個(gè)面向流密碼算法的通用的可重構(gòu)計(jì)算密碼處理架構(gòu).本文組織結(jié)構(gòu)如下: 第2 節(jié)對(duì)流密碼進(jìn)行梳理, 包括對(duì)流密碼相關(guān)項(xiàng)目及標(biāo)準(zhǔn)的總結(jié)、流密碼設(shè)計(jì)構(gòu)建塊的分析、流密碼設(shè)計(jì)的分類及典型流密碼算法的結(jié)構(gòu)分析等; 第3 節(jié)分析流密碼算法的實(shí)現(xiàn)思想及其可重構(gòu)特性, 總結(jié)基本運(yùn)算操作的使用情況, 設(shè)計(jì)面向流密碼算法的可重構(gòu)計(jì)算密碼處理架構(gòu); 第4 節(jié)嘗試從不同角度展望流密碼的發(fā)展趨勢(shì).
1917 年, Vernam 密碼體制被提出, 后來(lái)Mauborgne 基于該體制提出了改進(jìn)方案, 也就是“一次一密” 密碼體制, 這可以看作流密碼的最早起源[10]. 1949 年, Shannon 證明“一次一密” 密碼體制是理論安全加密體制[11], 但是, 其密鑰流必須完全隨機(jī)生成, 長(zhǎng)度至少與明文相同, 不能多次使用, 這在實(shí)際應(yīng)用中存在很大困難, 而且, 密鑰的生成、分配和管理是一個(gè)不容忽視的問(wèn)題. 因此, 人們?cè)O(shè)計(jì)了各種流密碼算法來(lái)代替“一次一密” 體制[12].
自現(xiàn)代密碼發(fā)展開始, 為了保護(hù)信息安全, 各個(gè)國(guó)家對(duì)密碼理論與技術(shù)的研究都十分重視, 許多國(guó)家和地區(qū)發(fā)起了很多大大小小的密碼相關(guān)的項(xiàng)目、競(jìng)賽等, 其中相當(dāng)一部分涉及流密碼算法, 如圖1 所示.
圖1 流密碼相關(guān)項(xiàng)目Figure 1 Projects related to stream ciphers
2000 年, 歐盟啟動(dòng)了NESSIE 項(xiàng)目[13], 該項(xiàng)目為期3 年, 旨在促進(jìn)美國(guó)NIST 組織的分組密碼AES標(biāo)準(zhǔn)化的最后階段, 同時(shí)發(fā)起了一項(xiàng)獨(dú)立的公開呼吁, 通過(guò)評(píng)估所提交的加密原語(yǔ), 提出一個(gè)各種類型的強(qiáng)大的密碼原語(yǔ)組合. NESSIE 共評(píng)估了6 個(gè)流密碼算法, 分別是BMGL、Leviathan、LILI-128、SNOW 1.0、SOBER-t16 和SOBER-t32, 但這6 個(gè)算法在安全性方面存在一些問(wèn)題, 最終均未入選[13].
2004 年,由歐盟資助的ECRYPT 宣布了eSTREAM 項(xiàng)目[14],其發(fā)起建立在2000 年提交給NESSIE的6 個(gè)流密碼算法都失敗的基礎(chǔ)上, 目的是促進(jìn)設(shè)計(jì)更適合廣泛應(yīng)用的高效、緊湊的流密碼. eSTREAM持續(xù)到2008 年, 共征集到34 個(gè)算法, 經(jīng)過(guò)多次安全和性能評(píng)估, 最終選擇了其中7 種. 具體來(lái)講, 征集的流密碼算法分為更適合于具有高吞吐量要求的軟件應(yīng)用的流密碼算法和適用于如有限的存儲(chǔ)、門數(shù)、功耗等資源受限的硬件應(yīng)用的流密碼算法, 最終面向軟件的勝選算法為Salsa20/12、SOSEMANUK、Rabbit、HC-128, 面向硬件的勝選算法為Grain v1、Trivium、MICKEY v2.
2000 年, 日本政府提出了CRYPTREC 項(xiàng)目[15], 其目的是評(píng)估和推薦一些密碼算法用于日本電子政務(wù)系統(tǒng). CRYPTREC 密碼表包括三部分: 電子政府推薦密碼表、候選推薦密碼表、監(jiān)控密碼表, 評(píng)估推薦的流密碼算法有KCipher-2、MUGI、Enocoro、MULTI-S01 等. 2013 年, CRYPTREC 成立了輕量級(jí)密碼學(xué)工作組, 旨在為日本電子政務(wù)系統(tǒng)和某些應(yīng)用程序評(píng)估輕量級(jí)密碼解決方案. 2015 年, 工作組發(fā)布了輕量級(jí)密碼學(xué)及應(yīng)用現(xiàn)狀的評(píng)估報(bào)告, 報(bào)告中評(píng)估的輕量級(jí)密碼算法多數(shù)為分組密碼.
2013 年, 由NIST 資助, Bernstein 等人發(fā)起了CAESAR 競(jìng)賽[16], 該競(jìng)賽主要征集優(yōu)于AESGCM 且適合廣泛應(yīng)用的認(rèn)證加密算法,認(rèn)證加密算法可以同時(shí)實(shí)現(xiàn)數(shù)據(jù)機(jī)密性、完整性、數(shù)據(jù)源認(rèn)證[17].CAESAR 競(jìng)賽持續(xù)到2019 年, 最終有6 個(gè)算法勝出, 分別是針對(duì)輕量級(jí)硬件應(yīng)用的Ascon 和ACORN、針對(duì)高性能軟件應(yīng)用的AEGIS-128 和OCB 以及面向縱深防御體系、健壯性良好的Deoxys-II 和COLM.其中AEGIS-128 整體采用了流密碼的框架, ACORN 是基于流密碼設(shè)計(jì)的認(rèn)證加密算法[17].
2013 年, NIST 發(fā)起了一項(xiàng)輕量級(jí)密碼(lightweight cryptography, LWC) 標(biāo)準(zhǔn)化的項(xiàng)目, 以征集、評(píng)估和標(biāo)準(zhǔn)化適用于當(dāng)前NIST 密碼標(biāo)準(zhǔn)性能不可接受的受限環(huán)境的輕量級(jí)密碼算法, 從而確保受限環(huán)境中的機(jī)密性、真實(shí)性和完整性[18]. 2015 年, NIST 舉辦了首屆輕量級(jí)密碼學(xué)研討會(huì). 2018 年, NIST 宣布了輕量級(jí)密碼標(biāo)準(zhǔn)化的最終提交要求和評(píng)估標(biāo)準(zhǔn), 并呼吁提供相關(guān)數(shù)據(jù)認(rèn)證加密和可選散列功能的密碼算法. 2019 年, LWC 標(biāo)準(zhǔn)化項(xiàng)目共征集到57 種算法, 第一輪共評(píng)估了56 種算法, 但是只有32 種被選中繼續(xù)進(jìn)行第二輪. 2021 年3 月, NIST 宣布ASCON、Elephant、GIFT-COFB、Grain128-AEAD、ISAP、Photon-Beetle、Romulus、Sparkle、TinyJambu、Xoodyak 等10 個(gè)輕量級(jí)密碼算法入圍決賽, 預(yù)計(jì)最后一輪持續(xù)大約12 個(gè)月. 其中入圍決賽的Grain-128 AEAD 是基于流密碼設(shè)計(jì)的輕量級(jí)認(rèn)證加密算法.
在國(guó)內(nèi), 2011 年, 我國(guó)自主研發(fā)的流密碼算法ZUC 正式被3GPP SA 全會(huì)通過(guò), 成為3GPP LTE機(jī)密性和完整性算法第三套加密標(biāo)準(zhǔn)核心算法, 被采納為國(guó)際加密標(biāo)準(zhǔn), 即第四代移動(dòng)通信加密標(biāo)準(zhǔn)[4].2018 年, ZUC 算法研制組提出了與ZUC-128 高度兼容的ZUC-256 流密碼算法, 提供5G 應(yīng)用環(huán)境下256 bit 密鑰的安全性[19].
表1 列出了上述幾個(gè)項(xiàng)目及涉及到流密碼算法的ISO/IEC 標(biāo)準(zhǔn)的相關(guān)信息.
表1 流密碼相關(guān)項(xiàng)目及標(biāo)準(zhǔn)化Table 1 Projects and standardization related to stream ciphers
一般認(rèn)為, 一個(gè)安全的流密碼所生成的密鑰流序列具備長(zhǎng)周期、高線性復(fù)雜度、良好統(tǒng)計(jì)特性等特點(diǎn)[1], 在設(shè)計(jì)流密碼時(shí)也是以這些特點(diǎn)作為基礎(chǔ)的, 核心部件的安全程度對(duì)算法整體安全性產(chǎn)生重要影響.下面介紹流密碼設(shè)計(jì)中的一些構(gòu)建塊.
2.2.1 流密碼構(gòu)建塊
從NESSIE 等標(biāo)準(zhǔn)化項(xiàng)目征集到的流密碼以及公開的各種流密碼來(lái)看, 流密碼設(shè)計(jì)中的構(gòu)建塊大致包括反饋移位寄存器(feedback shift register,FSR)、布爾函數(shù)、狀態(tài)表、ARX 結(jié)構(gòu)、細(xì)胞自動(dòng)機(jī)(cellular automata, CA)、混沌映射、T 函數(shù)、PANAMA 結(jié)構(gòu)、置換濾波生成器、海綿結(jié)構(gòu)、非線性濾波函數(shù)、非線性組合函數(shù)、鐘控、S 盒、有限狀態(tài)機(jī)(finite state machine, FSM) 等. 流密碼的構(gòu)建塊有的用來(lái)產(chǎn)生狀態(tài)序列, 有的用作非線性部分. 圖2 給出了常見的流密碼構(gòu)建塊.
圖2 流密碼構(gòu)建塊Figure 2 Building blocks of stream ciphers
FSR. FSR 是流密碼設(shè)計(jì)中非常常用的構(gòu)建塊, 可以生成具有良好特性的狀態(tài)序列, 根據(jù)反饋函數(shù)的不同可以分為線性反饋移位寄存器(linear feedback shift register, LFSR)、非線性反饋移位寄存器(nonlinear feedback shift register,NFSR)、帶進(jìn)位的反饋移位寄存器(feedback with carry shift register,FCSR). LFSR 有兩種表示形式: Fibonacci LFSR 和Galois LFSR, LFSR 生成的序列是線性的, 不能直接作為密鑰流序列輸出, 需要其他構(gòu)建塊提高其線性復(fù)雜度; NFSR 生成的序列是非線性的, 所以NFSR本身也可作為設(shè)計(jì)流密碼的非線性構(gòu)建塊; FCSR 有三種表示形式: Fibonacci FCSR、Galois FCSR 和Ring FCSR[24], FCSR 類似于LFSR, 可以生成具有良好偽隨機(jī)性的狀態(tài)序列, 另外, FCSR 的狀態(tài)轉(zhuǎn)移函數(shù)是非線性的, 生成的狀態(tài)序列的線性復(fù)雜度較高, 但是FCSR 生成的序列具有可預(yù)測(cè)性, 所以也不能直接作為密鑰流使用. FSR 的硬件結(jié)構(gòu)簡(jiǎn)單, 可以很容易地使用基本邏輯門來(lái)構(gòu)造, 很適合于硬件實(shí)現(xiàn).
布爾函數(shù). 布爾函數(shù)是流密碼中非常重要的構(gòu)建塊, 1917 年, Vernam 密碼中就出現(xiàn)了布爾邏輯結(jié)構(gòu),布爾函數(shù)在LFSR 中的應(yīng)用是其在流密碼中真正作為研究對(duì)象的始源[25]. Berlekamp-Massey 算法的提出使人們意識(shí)到LFSR 產(chǎn)生的狀態(tài)序列的線性性質(zhì)對(duì)密碼分析沒(méi)有任何免疫力, 需要提高LFSR 狀態(tài)序列的線性復(fù)雜度才能滿足流密碼的安全性. 布爾函數(shù)的性質(zhì)使其在流密碼的設(shè)計(jì)與分析中起著關(guān)鍵作用,其主要性質(zhì)歸納起來(lái)有平衡性、對(duì)稱性、高代數(shù)次數(shù)、高非線性、相關(guān)免疫性、彈性階、自相關(guān)性、擴(kuò)散性等[26]. 布爾函數(shù)包括單輸出布爾函數(shù)和多輸出布爾函數(shù), 流密碼中用于提高LFSR 狀態(tài)序列線性復(fù)雜度的非線性濾波函數(shù)和非線性組合函數(shù), 對(duì)其研究可以歸結(jié)為對(duì)布爾函數(shù)的研究; 另外, 在流密碼中對(duì)用于提高非線性的S 盒的研究可歸結(jié)為對(duì)多輸出布爾函數(shù)的研究[27]. 不同密鑰流生成器中布爾函數(shù)應(yīng)該滿足不同的性質(zhì)才能保證生成的密鑰流具有更高的安全性, 在進(jìn)行流密碼設(shè)計(jì)時(shí), 可以選擇目前公認(rèn)的各方面性質(zhì)較為平衡的布爾函數(shù)作為構(gòu)建塊[28]. 對(duì)NFSR 中非線性反饋函數(shù)的研究是布爾函數(shù)的一個(gè)很重要的研究方向[25].
狀態(tài)表. 將流密碼的狀態(tài)序列存儲(chǔ)到狀態(tài)表中, 由非線性函數(shù)更新狀態(tài)表中的狀態(tài)序列. 狀態(tài)表作為設(shè)計(jì)流密碼的構(gòu)建塊, 其軟件實(shí)現(xiàn)速度快、硬件存儲(chǔ)消耗較高.
ARX 結(jié)構(gòu). ARX 是指模加(modular add)、循環(huán)移位(rotation) 和邏輯異或(xor) 三種運(yùn)算, 三種運(yùn)算的實(shí)現(xiàn)速度較快, 可以將ARX 三種混合運(yùn)算應(yīng)用到流密碼的設(shè)計(jì)中.
CA.1985 年,Wolfram 將CA 應(yīng)用在密碼學(xué)領(lǐng)域[29],自此CA 在密碼學(xué)方面的研究逐漸開展[30–32].CA 是自動(dòng)機(jī)理論中研究的一種離散計(jì)算模型, 由規(guī)則的細(xì)胞網(wǎng)格組成, 每個(gè)細(xì)胞都處于有限數(shù)量的狀態(tài)之一, 通過(guò)某種固定規(guī)則, 根據(jù)細(xì)胞的當(dāng)前狀態(tài)和其鄰域中的細(xì)胞的狀態(tài)來(lái)確定每個(gè)細(xì)胞的新狀態(tài), 二維細(xì)胞自動(dòng)機(jī)可以用來(lái)構(gòu)造偽隨機(jī)數(shù)發(fā)生器[33].
混沌映射. 1982 年, OISHI 等將混沌系統(tǒng)應(yīng)用到流密碼中[34], 混沌映射具有明顯的偽隨機(jī)性和不規(guī)則狀態(tài), 可以使用混沌映射的控制參數(shù)和初始條件作為流密碼的密鑰, 從更廣泛的角度來(lái)看, 混沌映射與密碼系統(tǒng)之間的相似性是設(shè)計(jì)基于混沌映射的流密碼算法的主要?jiǎng)訖C(jī), 混沌理論可以很好地對(duì)對(duì)稱密碼中的擴(kuò)散和混淆進(jìn)行建模[35].
T 函數(shù). T 函數(shù)是Klimov 和Shamir[36]提出的一種能夠在任意長(zhǎng)的字上混合布爾運(yùn)算和算術(shù)運(yùn)算的密碼構(gòu)建塊, 屬于一類可逆映射, T 函數(shù)因其雙射特性可以用于流密碼中產(chǎn)生狀態(tài)序列[37], 可以在軟件上快速實(shí)現(xiàn), 利用T 函數(shù)生成的狀態(tài)序列具有長(zhǎng)周期、良好的非線性和非代數(shù)性, Klimov 和Shamir 指出T 函數(shù)可以作為L(zhǎng)FSR 的替代, 作為基于軟件的密鑰流生成器的構(gòu)建塊[36].
PANAMA 結(jié)構(gòu). 1998 年, Daemen 提出了流密碼算法PANAMA[38], PANAMA 采用了一種新的設(shè)計(jì)結(jié)構(gòu), PANAMA 結(jié)構(gòu)的內(nèi)部狀態(tài)機(jī)由內(nèi)部狀態(tài)S(狀態(tài)a和緩沖區(qū)b) 及其更新函數(shù)F(狀態(tài)a和緩沖區(qū)b的更新函數(shù)分別為ρ和λ) 組成[38]. 由(a,b)、(ρ,λ) 和從S提取輸出序列的輸出濾波器f組成的密鑰流生成器如果滿足以下條件, 則稱為PANAMA 式密鑰流生成器:ρ包括SPN 變換, 類似于分組密碼的輪函數(shù), 并使用緩沖區(qū)b的一部分作為參數(shù)a(t+1)=ρ(a(t),b(t));λ是線性變換, 并使用狀態(tài)a的一部分作為參數(shù)b(t+1)=λ(b(t),a(t));f每輪提取輸出狀態(tài)a的一部分(通常不超過(guò)1/2)[39].
置換濾波生成器. 置換濾波生成器是在Eurocrypt 2016 上提出的一種新的流密碼結(jié)構(gòu), 它由三部分組成: 用于存儲(chǔ)密鑰的寄存器、由偽隨機(jī)數(shù)生成器(由公共向量初始化) 參數(shù)化的置換生成器, 生成密鑰流的濾波函數(shù). 與濾波生成器相比, 置換濾波生成器中LFSR 被密鑰寄存器替換, 換句話說(shuō), 寄存器不再通過(guò)LFSR 更新, 而是使用偽隨機(jī)位置換進(jìn)行更新, 也就是在每個(gè)周期, 即每次濾波函數(shù)輸出一位時(shí), 偽隨機(jī)置換被應(yīng)用于寄存器, 并且非線性濾波函數(shù)作用于被置換的密鑰寄存器的輸出. 這種結(jié)構(gòu)的優(yōu)點(diǎn)是始終將非線性濾波函數(shù)直接作用于密鑰位, 使得輸出噪聲始終是一個(gè)常數(shù), 并且具有很強(qiáng)的同態(tài)能力[40]. 從目前的分析來(lái)看, 這類結(jié)構(gòu)對(duì)濾波函數(shù)的選擇要求很高, 否則很容易被分析而導(dǎo)致大量密鑰信息泄漏[41].
海綿結(jié)構(gòu). 海綿結(jié)構(gòu)是Bertoni 和Daemen 在ECRYPT 2007 上提出的一種模型[42], 是一種基于定長(zhǎng)置換和填充規(guī)則的操作模式, 海綿結(jié)構(gòu)構(gòu)建將可變長(zhǎng)度的輸入映射到可變長(zhǎng)度輸出的函數(shù), 這樣的函數(shù)稱為海綿函數(shù). 海綿函數(shù)是具有固定輸出長(zhǎng)度的散列函數(shù)和具有固定輸入長(zhǎng)度的流密碼的泛化, 它通過(guò)迭代地應(yīng)用內(nèi)部置換來(lái)對(duì)有限狀態(tài)進(jìn)行操作, 該內(nèi)部置換與輸入數(shù)據(jù)或輸出數(shù)據(jù)進(jìn)行交錯(cuò)[43]. 海綿函數(shù)使用隨機(jī)置換, 接受可變長(zhǎng)度的輸入和輸出, 這一點(diǎn)使其適合作為設(shè)計(jì)流密碼的構(gòu)建塊[44]. 用作流密碼構(gòu)建塊時(shí), 輸入是初始密鑰和初始向量, 然后在壓縮階段輸出得到密鑰流. 海綿結(jié)構(gòu)的優(yōu)點(diǎn)是設(shè)計(jì)相對(duì)簡(jiǎn)單, 靈活性較高[43].
非線性濾波函數(shù)、非線性組合函數(shù)、鐘控、S 盒、FSM 一般用作流密碼非線性部分的構(gòu)建塊, 非線性部分主要用來(lái)引入或提高狀態(tài)序列的非線性. 非線性濾波函數(shù)、非線性組合函數(shù)、鐘控、FSM 主要是針對(duì)基于LFSR 設(shè)計(jì)的流密碼而引入的, 目的是為了降低LFSR 序列線性的弱點(diǎn), 引入非線性. 非線性濾波函數(shù)和非線性組合函數(shù)主要通過(guò)作用于LFSR 序列來(lái)破壞其線性特性; 鐘控是通過(guò)對(duì)LFSR 進(jìn)行不規(guī)則的時(shí)鐘控制來(lái)提高其非線性; FSM 是計(jì)算的數(shù)學(xué)模型, 在任何給定時(shí)刻都可以處于有限狀態(tài)之一, FSM由其狀態(tài)列表、初始狀態(tài)和觸發(fā)每次轉(zhuǎn)換的輸入來(lái)定義, 可以根據(jù)某些輸入從一種狀態(tài)轉(zhuǎn)換為另外一種狀態(tài)[45]; 對(duì)稱密碼算法中最常見的混淆方式就是利用S 盒, 因?yàn)镾 盒輸入的微小變化就會(huì)導(dǎo)致輸出的復(fù)雜變化, 許多流密碼也使用S 盒來(lái)引入非線性.
2.2.2 流密碼設(shè)計(jì)分類
流密碼由狀態(tài)更新函數(shù)和輸出函數(shù)組成, 流密碼的狀態(tài)序列在加密期間不斷更新, 使得被加密消息在不同位置的比特以不同的狀態(tài)加密, 輸出函數(shù)根據(jù)狀態(tài)序列生成密鑰流序列, 并執(zhí)行加密和解密[27]. 狀態(tài)更新的基本要求是應(yīng)以足夠大的周期生成狀態(tài), 利用流密碼的構(gòu)建塊可以設(shè)計(jì)狀態(tài)更新函數(shù)生成狀態(tài)序列, 然后利用非線性構(gòu)建塊提高狀態(tài)序列的線性復(fù)雜度, 以生成高安全級(jí)別的密鑰流序列[46]. 目前流密碼主流的設(shè)計(jì)結(jié)構(gòu)有基于LFSR 的設(shè)計(jì)、基于NFSR 的設(shè)計(jì)、基于狀態(tài)表驅(qū)動(dòng)的設(shè)計(jì)、基于分組密碼的設(shè)計(jì)幾類. 圖3 給出了流密碼的設(shè)計(jì)分類.
圖3 流密碼的設(shè)計(jì)分類Figure 3 Design classification of stream ciphers
基于LFSR 的設(shè)計(jì). 20 世紀(jì)40 年代電子計(jì)算機(jī)被發(fā)明, 計(jì)算技術(shù)的進(jìn)步使密碼學(xué)家可以使用比計(jì)數(shù)器更安全的操作來(lái)設(shè)計(jì)流密碼, 基于LFSR 設(shè)計(jì)的流密碼就出現(xiàn)在此時(shí)期[46]. Rueppel[27]將密鑰流生成器分為驅(qū)動(dòng)部分和非線性部分, 驅(qū)動(dòng)部分主要用來(lái)將初始密鑰擴(kuò)散成具有良好周期性和統(tǒng)計(jì)特性的狀態(tài)序列, 非線性部分對(duì)驅(qū)動(dòng)部分的輸出序列進(jìn)行非線性運(yùn)算, 提高其線性復(fù)雜度和不可預(yù)測(cè)性, 從而生成最終密鑰流. 驅(qū)動(dòng)部分一般利用LFSR 產(chǎn)生狀態(tài)序列, LFSR 序列為線性, 則非線性部分采用各種非線性構(gòu)建塊(如非線性濾波函數(shù)、非線性組合函數(shù)等布爾函數(shù)或時(shí)鐘控制等) 來(lái)掩蓋其線性, 以生成高度非線性的密鑰流. 根據(jù)所采用的非線性構(gòu)建塊的不同, 出現(xiàn)了非線性濾波生成器、非線性組合生成器、鐘控生成器等各種密鑰流生成器[47]. 如何利用非線性布爾函數(shù)掩蓋LFSR 序列的線性是保證這類流密碼安全性的首要目標(biāo), 這類流密碼的結(jié)構(gòu)代表了傳統(tǒng)流密碼的設(shè)計(jì)思想, 對(duì)其理論分析也比較成熟. 圖4 所示為常見的基于LFSR 的流密碼算法.
圖4 基于LFSR 的流密碼算法Figure 4 Stream cipher algorithms based on LFSR
基于NFSR 的設(shè)計(jì). 自eSTREAM 項(xiàng)目以來(lái), 出現(xiàn)了很多流密碼的設(shè)計(jì)理念與方法, 其中比較典型的一類是基于NFSR 設(shè)計(jì)的流密碼. 這類設(shè)計(jì)是把NFSR 的非線性反饋與非線性輸出相結(jié)合來(lái)提供良好的序列特性和安全性[12]. 在硬件上, NFSR 比LFSR 稍復(fù)雜, NFSR 對(duì)密碼分析的抵抗能力較強(qiáng), 基于NFSR 設(shè)計(jì)的流密碼的安全級(jí)別取決于分析設(shè)計(jì)本身的難度, 由于目前還沒(méi)有簡(jiǎn)單且精確的準(zhǔn)則來(lái)構(gòu)建強(qiáng)大的非線性布爾函數(shù), 所以較難設(shè)計(jì)出性能良好的NFSR[46]. 目前關(guān)于NFSR 的理論研究還比較少, 還沒(méi)有統(tǒng)一的模式對(duì)這類流密碼算法進(jìn)行安全性分析[25]. 對(duì)NFSR 的非線性反饋函數(shù)的研究是一個(gè)值得深入的研究方向. 圖5 所示為常見的基于NFSR 的流密碼算法.
基于狀態(tài)表驅(qū)動(dòng)的設(shè)計(jì). 基于狀態(tài)表驅(qū)動(dòng)設(shè)計(jì)流密碼的思想來(lái)源于1987 年Rivest 設(shè)計(jì)的RC4 流密碼算法, 該類設(shè)計(jì)是利用狀態(tài)表的轉(zhuǎn)換和選擇來(lái)構(gòu)造流密碼, 換句話說(shuō), 就是將很多操作進(jìn)行預(yù)計(jì)算, 產(chǎn)生隨機(jī)排列, 存儲(chǔ)在狀態(tài)表中, 便于在計(jì)算中使用. 基于狀態(tài)表驅(qū)動(dòng)設(shè)計(jì)的流密碼算法包含較大的狀態(tài)表且狀態(tài)隨時(shí)間持續(xù)變化, 所以硬件實(shí)現(xiàn)代價(jià)較高, 但是軟件實(shí)現(xiàn)速度較快. 圖6 所示為常見的基于狀態(tài)表驅(qū)動(dòng)的流密碼算法.
基于分組密碼的設(shè)計(jì). 基于分組密碼的設(shè)計(jì)可以利用成熟的分組密碼部件、結(jié)構(gòu), 或者利用已有的成熟的分組密碼理論來(lái)構(gòu)造流密碼[12]. 可以利用分組密碼的某些操作模式生成密鑰流序列, 比如當(dāng)分組密碼以輸出反饋模式、密文反饋模式、計(jì)數(shù)器模式運(yùn)行時(shí)可以用作流密碼使用; 可以利用分組密碼的設(shè)計(jì)結(jié)構(gòu), 比如采用分組密碼的Feistel 結(jié)構(gòu)、SPN 結(jié)構(gòu)等; 可以利用分組密碼的非線性部件S 盒; 可以利用分組密碼中行移位、列混淆的設(shè)計(jì)思想; 可以直接輸出分組密碼的某些中間狀態(tài), 通過(guò)簡(jiǎn)單運(yùn)算作為密鑰流輸出[27,41]. 基于分組密碼設(shè)計(jì)的流密碼算法軟件實(shí)現(xiàn)速度很快, 這類流密碼算法的內(nèi)部狀態(tài)較大, 而且不存在移位寄存器, 很難用傳統(tǒng)的分析方法對(duì)其進(jìn)行評(píng)估[12]. 圖7 所示為常見的基于分組密碼設(shè)計(jì)的流密碼算法.
圖5 基于NFSR 的流密碼算法Figure 5 Stream cipher algorithms based on NFSR
圖6 基于狀態(tài)表驅(qū)動(dòng)的流密碼算法Figure 6 Stream cipher algorithms based on state table driver
圖7 基于分組密碼設(shè)計(jì)的流密碼算法Figure 7 Stream cipher algorithms based on block cipher
流密碼的設(shè)計(jì)方法靈活多變, 設(shè)計(jì)結(jié)構(gòu)也趨于多樣化, 除了上述主流設(shè)計(jì)結(jié)構(gòu)外, 還有一些基于其他結(jié)構(gòu)設(shè)計(jì)的流密碼. 如基于FCSR 的流密碼、基于CA 的流密碼、基于混沌映射的流密碼、基于T 函數(shù)的流密碼、基于PANAMA 結(jié)構(gòu)的流密碼、基于置換濾波生成器的流密碼、基于海綿結(jié)構(gòu)的流密碼等.
按時(shí)間順序?qū)谏鲜霾煌O(shè)計(jì)結(jié)構(gòu)的典型流密碼算法進(jìn)行舉例, 包括算法的結(jié)構(gòu)、初始密鑰Key及初始向量IV 的長(zhǎng)度等. 如表2–6 所示.
流密碼通過(guò)不斷變化的內(nèi)部狀態(tài)進(jìn)行采樣來(lái)生成密鑰流, 該狀態(tài)通常是在初始密鑰Key 和IV 的作用下進(jìn)行初始化. 大多數(shù)流密碼算法的初始密鑰長(zhǎng)度集中在80 bit、128 bit、256 bit. 傳統(tǒng)加密主要用于高端設(shè)備領(lǐng)域, 如服務(wù)器、臺(tái)式計(jì)算機(jī)、平板電腦、智能手機(jī)等[48], 傳統(tǒng)流密碼算法的初始密鑰長(zhǎng)度一般為128 bit 或256 bit. 現(xiàn)在, 隨著物聯(lián)網(wǎng)的發(fā)展, 像RFID 標(biāo)簽、嵌入式系統(tǒng)、工業(yè)控制器、無(wú)線傳感器網(wǎng)絡(luò)、智能卡等小型計(jì)算設(shè)備變得越來(lái)越普遍, 傳統(tǒng)加密很難在這類資源受限的設(shè)備中實(shí)現(xiàn), 所以對(duì)輕量級(jí)加密的需求明顯增加, 輕量級(jí)加密是專門為資源受限的設(shè)備量身定制的解決方案, 由于許多受限設(shè)備的性質(zhì), 比如有限的存儲(chǔ)、門數(shù)等, 在輕量級(jí)應(yīng)用中, 功耗和能耗是相關(guān)的性能指標(biāo), 而且高吞吐量可能不是主要的設(shè)計(jì)目標(biāo), 大多數(shù)應(yīng)用程序需要中等吞吐量. 輕量級(jí)流密碼算法的初始密鑰長(zhǎng)度相對(duì)較短, 通常為80 bit. eSTREAM 項(xiàng)目中面向硬件的勝選算法Grain v1、Trivium、MICKEY 2.0 可以看作是出現(xiàn)較早的適用于受限硬件設(shè)備的輕量級(jí)流密碼算法.
表2 基于LFSR 的流密碼算法Table 2 Stream cipher algorithms based on LFSR
表3 基于NFSR 的流密碼算法Table 3 Stream cipher algorithms based on NFSR
表4 基于狀態(tài)表驅(qū)動(dòng)的流密碼算法Table 4 Stream cipher algorithms based on state table driver
表5 基于分組密碼設(shè)計(jì)的流密碼算法Table 5 Stream cipher algorithms based on block cipher
表6 基于其他結(jié)構(gòu)設(shè)計(jì)的流密碼算法Table 6 Stream cipher algorithms based on other structures
密碼處理器作為密碼算法的實(shí)現(xiàn)載體, 為信息安全提供基礎(chǔ)設(shè)施服務(wù)[87]. 流密碼算法的實(shí)現(xiàn)包括硬件實(shí)現(xiàn)和軟件實(shí)現(xiàn). 對(duì)于嵌入到系統(tǒng)軟件的加密程序而言, 軟件實(shí)現(xiàn)效率更高; 對(duì)于高速網(wǎng)絡(luò)中數(shù)據(jù)流的傳輸而言, 硬件實(shí)現(xiàn)效率更高. 流密碼算法的實(shí)現(xiàn)主要利用實(shí)現(xiàn)密碼應(yīng)用的各類集成電路載體實(shí)現(xiàn), 包括通用處理器(general purpose processor, GPP)、專用集成電路(application specific integrated circuit,ASIC)、可編程邏輯門陣列(field programmable gate array, FPGA)、可重構(gòu)計(jì)算密碼處理器幾種形式.利用GPP 可以實(shí)現(xiàn)多種流密碼算法, 靈活性較高, 但GPP 基于指令流驅(qū)動(dòng), 實(shí)現(xiàn)速度比較慢. ASIC 主要針對(duì)特定目標(biāo)流密碼算法設(shè)計(jì)專用的硬件電路來(lái)實(shí)現(xiàn), 速度快、功耗低、面積小, 但一旦流片, 將無(wú)法改變電路的功能, 靈活性較差, 安全性低. 利用FPGA 可以實(shí)現(xiàn)各種流密碼算法, 靈活性很高, 速度比較折中, 介于GPP 和ASIC 之間, 但FPGA 的配置信息比較繁瑣, 不能實(shí)時(shí)改變, 而且資源有限, 資源豐富的FPGA 成本又比較高. 隨著網(wǎng)絡(luò)信息技術(shù)的發(fā)展, 一個(gè)常用的信息安全解決方案可能會(huì)用到很多種密碼算法, 為了支持應(yīng)用或協(xié)議中盡量多的流密碼算法, 需要密碼處理器有足夠的靈活性, 此外, 芯片設(shè)計(jì)的兩個(gè)核心指標(biāo)是性能和功耗, 性能功耗比, 也就是能量效率, 自然成為比純粹的性能更為合理嚴(yán)格的指標(biāo), 安全性也是密碼處理器中一項(xiàng)很重要的指標(biāo). 可重構(gòu)計(jì)算密碼處理器是一種性能、功耗、速度、靈活性合理折中的密碼算法實(shí)現(xiàn)方式, 主要面向領(lǐng)域, 面積有時(shí)會(huì)冗余, 但現(xiàn)代工藝允許不關(guān)心面積冗余這一弊端[88].所以從應(yīng)用和協(xié)議的角度來(lái)看, 在保證一定處理速度的情況下又能夠滿足一個(gè)信息安全解決方案對(duì)多種流密碼算法的需求, 可重構(gòu)計(jì)算密碼處理器是一種很好的選擇. 表7 總結(jié)了上述流密碼實(shí)現(xiàn)方式的優(yōu)缺點(diǎn).
表7 GPP、ASIC、FPGA、可重構(gòu)計(jì)算密碼處理器比較Table 7 Comparison of GPP, ASIC, FPGA, and reconfigurable computing cryptographic processor
雖然根據(jù)設(shè)計(jì)方法和結(jié)構(gòu)可以將流密碼細(xì)分為很多類, 但很多流密碼算法有相似的密碼處理結(jié)構(gòu)和操作類型, 所以不同的流密碼算法存在大量的共性邏輯. 如前所述, 主要的設(shè)計(jì)結(jié)構(gòu)有基于LFSR 的流密碼算法、基于NFSR 的流密碼算法、基于狀態(tài)表驅(qū)動(dòng)的流密碼算法和基于分組密碼設(shè)計(jì)的流密碼算法, 對(duì)主流的四類設(shè)計(jì)中典型的流密碼算法如A5/1、E0、Grain、Trivium、ZUC、SNOW、RC4、ChaCha20等進(jìn)行研究, 分析算法狀態(tài)更新和密鑰生成所采用的構(gòu)建塊, 從利用可重構(gòu)計(jì)算思想實(shí)現(xiàn)流密碼算法的角度出發(fā), 對(duì)算法的結(jié)構(gòu)特征、操作特征和計(jì)算算子進(jìn)行總結(jié)歸納, 發(fā)現(xiàn)它們有多種類型的共性邏輯, 包括LFSR、NFSR、邏輯運(yùn)算(包括異或、與、或、非)、算術(shù)運(yùn)算(包括加法、模加、模乘)、移位(包括邏輯左移、邏輯右移、循環(huán)左移、循環(huán)右移)、S 盒、有限域GF(2n) (n=8,16,32,64) 乘法運(yùn)算等. 對(duì)有限域GF(2n) 乘法運(yùn)算進(jìn)一步分解, 可以得到更簡(jiǎn)單、重用程度更高的基本操作, 如S 盒、異或、加法、乘法、移位等[87]. 如表8 所示對(duì)典型流密碼算法特征進(jìn)行了分析總結(jié), 其中操作位寬和輸出位寬以bit 為單位;nXOR 表示n-bit 按位邏輯異或;nAND 表示n-bit 按位邏輯與;nOR 表示n-bit 按位邏輯或;nNAND表示n-bit 按位與非;表示循環(huán)右移;表示循環(huán)左移;?表示邏輯右移, S 盒一列中n×m表示n-bit 輸入,m-bit 輸出的查找表運(yùn)算.
通過(guò)分析典型流密碼算法, 對(duì)其狀態(tài)更新部分和密鑰生成部分的結(jié)構(gòu)進(jìn)行分解, 可以分為有限域GF(2) 和GF(2n) 兩種情況進(jìn)行分析: GF(2) 上流密碼算法的數(shù)據(jù)操作位寬一般為1 bit, 一次產(chǎn)生1 bit 密鑰, 主要計(jì)算算子為邏輯運(yùn)算, 包括邏輯異或、邏輯與等. GF(2n) 上流密碼算法的數(shù)據(jù)操作位寬一般為字節(jié)或字節(jié)的整數(shù)倍, 這些流密碼算法的非線性部分一般由多種非線性變換相互結(jié)合, 涉及到的計(jì)算算子較復(fù)雜, 包括邏輯運(yùn)算、算術(shù)運(yùn)算、移位、S 盒等. 整體來(lái)看, 基于LFSR 和基于NFSR 的流密碼算法用到了FSR 構(gòu)建塊, 不同流密碼算法FSR 的個(gè)數(shù)和級(jí)數(shù)不同, FSR 個(gè)數(shù)大多不超過(guò)4, 級(jí)數(shù)大多不超過(guò)160 bit, FSR 總?cè)萘坎怀^(guò)1024 bit; 流密碼算法中的邏輯運(yùn)算和算術(shù)運(yùn)算的操作粒度大多為單比特、字節(jié)或字節(jié)的整數(shù)倍, 一般為1~32 bit; 很多流密碼算法使用了邏輯移位和循環(huán)移位, 移位的位數(shù)一般不超過(guò)32 bit; 不同流密碼算法中的S 盒的輸入輸出位寬不同, 輸入位寬以8 bit 居多, 輸出位寬差別較大,主要包括4 bit、8 bit、16 bit、32 bit 四種.
根據(jù)對(duì)不同流密碼算法的結(jié)構(gòu)特征、操作特征和計(jì)算算子的統(tǒng)計(jì), 分析數(shù)據(jù)存儲(chǔ)、重構(gòu)粒度、運(yùn)算單元(process element, PE)、互連網(wǎng)絡(luò)、運(yùn)算單元陣列、配置信息等關(guān)鍵技術(shù), 設(shè)計(jì)一種通用的面向四類主流設(shè)計(jì)結(jié)構(gòu)的流密碼算法的可重構(gòu)計(jì)算密碼處理架構(gòu), 包括可重構(gòu)數(shù)據(jù)通路和可重構(gòu)控制器兩部分. 可重構(gòu)數(shù)據(jù)通路負(fù)責(zé)流密碼數(shù)據(jù)流的處理, 可重構(gòu)控制器負(fù)責(zé)可重構(gòu)數(shù)據(jù)通路的配置切換和調(diào)度[87]. 所設(shè)計(jì)的可重構(gòu)計(jì)算流密碼處理架構(gòu)結(jié)構(gòu)框圖如圖8 所示.
可重構(gòu)數(shù)據(jù)通路包括可重構(gòu)反饋移位寄存器陣列、抽頭抽取結(jié)構(gòu)、可重構(gòu)運(yùn)算單元陣列、配置接口、反饋數(shù)據(jù)選擇、密鑰流數(shù)據(jù)選擇、輸入數(shù)據(jù)存儲(chǔ)器、密鑰流存儲(chǔ)器幾個(gè)主要模塊. 各模塊設(shè)計(jì)及功能具體描述如下:
可重構(gòu)反饋移位寄存器陣列主要用來(lái)存儲(chǔ)流密碼的狀態(tài)向量, 共包含32 個(gè)32 bit 的移位寄存器單元陣列, 可以根據(jù)配置信息實(shí)現(xiàn)寄存器單元之間不同方式的級(jí)聯(lián)以及不同方向、不同粒度的移位, 支持1 bit、8 bit、16 bit、32 bit 一共4 種操作粒度. 可重構(gòu)反饋移位寄存器陣列的反饋輸入為可重構(gòu)運(yùn)算單元陣列的輸出數(shù)據(jù).
表8 流密碼算法特征分析Table 8 Analysis of algorithm characteristics of stream ciphers
圖8 可重構(gòu)計(jì)算流密碼處理架構(gòu)結(jié)構(gòu)框圖Figure 8 Block diagram of reconfigurable computing stream cipher processing architecture
抽頭抽取結(jié)構(gòu)負(fù)責(zé)從可重構(gòu)反饋移位寄存器陣列中抽取數(shù)據(jù)并送入可重構(gòu)運(yùn)算單元陣列進(jìn)行運(yùn)算, 共32 個(gè). 可重構(gòu)反饋移位寄存器陣列中每個(gè)32 bit 的移位寄存器單元陣列為一組, 共32 組, 每個(gè)抽頭抽取結(jié)構(gòu)先從32 組32 bit 數(shù)據(jù)中抽取出一組, 然后根據(jù)具體流密碼算法的操作粒度, 對(duì)抽取出的32 bit 數(shù)據(jù)進(jìn)行再一次抽取選擇, 比如操作粒度為1 bit 時(shí), 用一個(gè)32 選1 的多路選擇器抽取出任意1 bit, 高位補(bǔ)0拼為32 bit. 通過(guò)這種結(jié)構(gòu)實(shí)現(xiàn)任意不同位置抽頭的抽取.
可重構(gòu)運(yùn)算單元陣列是可重構(gòu)計(jì)算流密碼處理架構(gòu)中的核心模塊, 主要負(fù)責(zé)流密碼中的數(shù)據(jù)運(yùn)算. 其結(jié)構(gòu)框圖如圖9 所示.
圖9 可重構(gòu)運(yùn)算單元陣列結(jié)構(gòu)框圖Figure 9 Structure diagram of reconfigurable operation unit array
由12 行4 列PE 和PE 行之間的互連網(wǎng)絡(luò)組成, 根據(jù)對(duì)流密碼計(jì)算粒度的統(tǒng)計(jì)分析將PE 的重構(gòu)粒度設(shè)計(jì)為32 bit, 以更好的滿足不同操作位寬的流密碼. 運(yùn)算單元的設(shè)計(jì)包括邏輯運(yùn)算單元(logical operation unit, LOU)、算術(shù)運(yùn)算單元(arithmetic operation unit, AU)、移位單元(shift unit, SU)、查找表單元(lookup table unit, LTU)4 種不同的功能單元. 每個(gè)PE 都包含LOU、AU、SU, 因?yàn)樵诹髅艽a中S 盒使用頻率較低而且面積較大, 所以每4 行PE 作為一個(gè)PE 組共享一個(gè)LTU. LOU 有四個(gè)輸入, 可以實(shí)現(xiàn)四輸入中任意兩個(gè)輸入操作數(shù)最多三級(jí)的任意基本邏輯操作, 包括異或(XOR)、與(AND)、或(OR) 等; AU 有四個(gè)輸入, 由一個(gè)32 位的加法器組成, 可以實(shí)現(xiàn)模28、模216、模232、模231-1幾種基數(shù)的加法運(yùn)算; SU 有三個(gè)輸入, 由兩個(gè)32 位的桶形移位器組成, 可以實(shí)現(xiàn)最多64 bit 輸入操作數(shù)的32 bit 以內(nèi)任意位數(shù)的邏輯左移、邏輯右移、循環(huán)左移、循環(huán)右移; LTU 有三個(gè)輸入, 由4 個(gè)8 bit 進(jìn)8 bit 出的S 盒運(yùn)算單元組成, S 盒運(yùn)算單元用SRAM 實(shí)現(xiàn), 支持最大8 bit 輸入, 32 bit 輸出的查找表運(yùn)算. 因?yàn)楫惢蜻壿嬙诹髅艽a中使用非常頻繁, 所以為了加快計(jì)算效率, 在AU、SU、LTU 的輸入和輸出添加了異或操作, 從而在進(jìn)行算術(shù)運(yùn)算、移位或查找表運(yùn)算之前或之后可以與另一個(gè)輸入操作數(shù)進(jìn)行異或操作. 每個(gè)PE 有4 個(gè)32 bit 的輸入, 1 個(gè)32 bit 的輸出, PE 的輸入可以來(lái)自于抽頭抽取結(jié)構(gòu)的輸出數(shù)據(jù)、與之相鄰上一行4 個(gè)PE 的輸出數(shù)據(jù)、LTU 的輸出數(shù)據(jù). 另外為了在PE 之間可以實(shí)現(xiàn)流水操作, 在每個(gè)PE 的輸出端設(shè)置一個(gè)32 bit 的寄存器用于緩存每個(gè)PE 的計(jì)算結(jié)果, 如果需要流水處理, 就寄存一級(jí), 如果不需要就對(duì)寄存器進(jìn)行旁路. PE 行之間的互連網(wǎng)絡(luò)采用CrossBar 方式進(jìn)行互連, 實(shí)現(xiàn)相鄰行與行之間的全互連.
該可重構(gòu)數(shù)據(jù)通路的緩存結(jié)構(gòu)包括輸入數(shù)據(jù)存儲(chǔ)器和密鑰流存儲(chǔ)器, 均連接外部數(shù)據(jù)接口, 負(fù)責(zé)與外部數(shù)據(jù)的交互. 輸入數(shù)據(jù)存儲(chǔ)器用來(lái)存儲(chǔ)從外部數(shù)據(jù)接口讀取到的要參與運(yùn)算的數(shù)據(jù), 可重構(gòu)運(yùn)算單元陣列完成運(yùn)算后, 如果在流密碼的狀態(tài)更新階段, 反饋數(shù)據(jù)選擇模塊從PE 輸出端選擇要反饋數(shù)據(jù), 反饋回可重構(gòu)反饋移位寄存器繼續(xù)參與狀態(tài)的更新; 如果在流密碼的密鑰流生成階段, 密鑰流數(shù)據(jù)選擇模塊從PE 輸出端選擇密鑰流數(shù)據(jù)存儲(chǔ)到密鑰流存儲(chǔ)器并將其輸出到外部接口. 可重構(gòu)運(yùn)算單元陣列在進(jìn)行流密碼算法的數(shù)據(jù)流運(yùn)算操作時(shí)產(chǎn)生的中間結(jié)果數(shù)據(jù)也可以反饋回可重構(gòu)運(yùn)算單元陣列進(jìn)行緩存, 需要時(shí)再通過(guò)抽頭抽取結(jié)構(gòu)抽出.
可重構(gòu)控制器中配置管理單元接收并解析外部配置信息, 生成內(nèi)部配置信息和頂層控制信號(hào). 配置存儲(chǔ)器用于保存內(nèi)部配置信息. 配置接口訪問(wèn)配置存儲(chǔ)器并將內(nèi)部配置信息輸出到可重構(gòu)數(shù)據(jù)通路[87], 完成對(duì)可重構(gòu)反饋移位寄存器陣列、抽頭抽取結(jié)構(gòu)、可重構(gòu)運(yùn)算單元陣列的具體配置. 同時(shí), 配置接口輸出可重構(gòu)數(shù)據(jù)通路的狀態(tài)信號(hào), 根據(jù)狀態(tài)信號(hào)產(chǎn)生控制碼, 控制可重構(gòu)運(yùn)算單元陣列的資源調(diào)度.
對(duì)于流密碼的數(shù)據(jù)相關(guān)性而言, 從整個(gè)算法加解密的層次來(lái)看, 流密碼算法是串行執(zhí)行的, 因此不能將任務(wù)分解成多個(gè)子任務(wù)并行執(zhí)行; 從算法的內(nèi)部結(jié)構(gòu)來(lái)看, 流密碼算法各個(gè)構(gòu)建塊之間存在讀后寫相關(guān),比如兩個(gè)反饋移位寄存器級(jí)聯(lián)時(shí), 下一級(jí)寄存器要先讀取到上一級(jí)寄存器的值, 并更新本身狀態(tài)后, 上一級(jí)寄存器才能更新自己的狀態(tài). 對(duì)于流密碼的并行性而言, 流密碼算法各個(gè)構(gòu)建塊之間存在并行性, 像基于LFSR 的流密碼算法的反饋移位寄存器和非線性部分之間是并發(fā)執(zhí)行的, 各個(gè)構(gòu)建塊都需要同時(shí)執(zhí)行,并更新本身的狀態(tài), 因此在利用可重構(gòu)計(jì)算密碼處理器實(shí)現(xiàn)流密碼時(shí)可以開發(fā)其并行性[87].
從算法設(shè)計(jì)的角度來(lái)看, 傳統(tǒng)面向比特的流密碼已經(jīng)很難滿足當(dāng)今通信應(yīng)用的需求, 特別是在軟件實(shí)現(xiàn)方面, 為了提高處理器軟件中密鑰流的生成速度, 流密碼算法逐漸傾向于面向字設(shè)計(jì). 設(shè)計(jì)結(jié)構(gòu)也逐漸多樣化, 越來(lái)越多的流密碼算法不僅基于某一種結(jié)構(gòu), 而是將不同結(jié)構(gòu)結(jié)合起來(lái)進(jìn)行設(shè)計(jì), 以便提高安全性, 比如基于LFSR 的流密碼, 也會(huì)在非線性部分利用一些分組密碼的組件, 像S 盒等. 流密碼算法設(shè)計(jì)的關(guān)注點(diǎn)主要集中在所采用的密碼構(gòu)建塊和基本操作上, 本質(zhì)上遵循Shannon 的混淆和擴(kuò)散范式, 在設(shè)計(jì)流密碼時(shí)既要保證能夠?qū)ΜF(xiàn)有攻擊具有免疫性, 又要保證易于評(píng)估其他密碼屬性, 還要使設(shè)計(jì)在安全性、性能和資源需求之間達(dá)到良好的平衡[48].
從算法實(shí)現(xiàn)的角度來(lái)看, 在實(shí)現(xiàn)流密碼算法時(shí), 要在所需的性能和資源之間進(jìn)行權(quán)衡, 性能主要指功耗、能耗、延遲、吞吐量等方面; 硬件實(shí)現(xiàn)所需的資源通常指面積、等效門或邏輯塊, 軟件實(shí)現(xiàn)所需的資源通常體現(xiàn)在寄存器的數(shù)量、RAM 和ROM 的規(guī)模上, 資源需求即成本, 因?yàn)樵黾痈嗟拈T或者內(nèi)存會(huì)增加設(shè)備的生產(chǎn)成本. 從流密碼算法加解密的角度來(lái)看, 算法是串行的, 從其內(nèi)部結(jié)構(gòu)來(lái)看, 算法的各個(gè)組件之間存在并行性, 利用可重構(gòu)計(jì)算密碼處理器實(shí)現(xiàn)時(shí)可以開發(fā)流密碼算法的并行性.
從算法發(fā)展的角度來(lái)看, 基于流密碼算法的輕量級(jí)認(rèn)證加密算法的設(shè)計(jì)、分析與實(shí)現(xiàn)是一個(gè)熱點(diǎn). 近年來(lái)對(duì)稱密碼界將注意力集中在更有效地提供消息加密和認(rèn)證的專用認(rèn)證加密方案上[17]. 另外, 如何在資源受限的設(shè)備上使用安全有效的密碼算法是一個(gè)具有挑戰(zhàn)性的問(wèn)題, 目前關(guān)于輕量級(jí)密碼算法還沒(méi)有嚴(yán)格的標(biāo)準(zhǔn), 但輕量級(jí)密碼算法的常見表現(xiàn)是對(duì)目標(biāo)設(shè)備的資源要求很低[48]. 所以, 為了滿足物聯(lián)網(wǎng)時(shí)代廣泛應(yīng)用的資源受限設(shè)備, 輕量級(jí)密碼算法的設(shè)計(jì)和分析也是一個(gè)研究熱點(diǎn). 由NIST 發(fā)起并正在進(jìn)行的輕量級(jí)密碼標(biāo)準(zhǔn)化項(xiàng)目征集的目標(biāo)是帶有認(rèn)證功能的輕量級(jí)認(rèn)證加密算法, 一定程度上反映出, 設(shè)計(jì)和分析基于流密碼的輕量級(jí)認(rèn)證加密算法也是目前及未來(lái)非常重要的研究方向.