李菲
烏海市職業技術學校,內蒙古烏海,016000
Feistel結構是一種分組密碼結構,由美國密碼學家Horst Feistel于1970年提出,應用于DES、IDEA、Blowfish等對稱加密算法中[1]。Feistel結構將明文分為兩個等長的分組,進行多輪的迭代運算,每輪運算包括輪函數和輪密鑰兩個部分[2]。Feistel結構的優點是簡單、靈活、高效,可以適應不同的分組長度、輪數、輪函數和密鑰調度算法,實現不同的安全性和性能要求[3]。單片機是一種微型計算機,集成了CPU、RAM、ROM、I/O接口等功能模塊于一塊芯片上,具有體積小、成本低、功耗低、可靠性高的特點,廣泛應用于各領域[4]。然而,由于單片機的資源有限,如何在單片機平臺上實現高效、安全的加密算法,是一個具有挑戰性的問題[5]。目前,已有一些研究者對單片機上的Feistel結構進行了優化,主要集中在輪函數的設計和密鑰調度算法的設計兩個方面。
本文在綜合考慮單片機的資源限制和加密算法的安全性和效率的基礎上,對Feistel結構進行了優化設計,提出了一種基于查找表的輪函數實現方法,以及一種基于動態密鑰生成的密鑰調度算法。本文的主要貢獻和創新點有:提出了一種基于查找表的輪函數實現方法,利用單片機的ROM存儲空間,預先計算并存儲輪函數的輸出值,然后在加密過程中,直接從ROM中讀取相應的值,從而避免了復雜的運算,提高了加密速度,降低了資源消耗。本文提出了一種基于動態密鑰生成的密鑰調度算法,利用單片機的RAM存儲空間,動態地生成并存儲輪密鑰,然后在加密過程中,直接從RAM中讀取相應的值,從而避免了固定的密鑰,增強了安全性,同時也提高了加密速度,降低了資源消耗。通過仿真實驗,驗證了所提方法的可行性和有效性,結果表明,相比于傳統的Feistel結構,本文的優化方案可以提高加密速度,降低資源消耗,增強安全性。
Feistel結構是一種分組密碼結構,它將明文分為兩個等長的分組,然后進行多輪的迭代運算,每輪運算包括輪函數和輪密鑰兩個部分,輪函數是一種非線性的變換,輪密鑰是從主密鑰派生出的子密鑰[6]。Feistel結構的基本原理如圖1所示。

圖1 Feistel 結構的基本原理
Feistel結構的每輪運算可以表示為:
加密和解密過程對稱,只需改變輪密鑰的順序,無需額外的逆輪函數。輪函數和密鑰調度算法的設計靈活,可以根據不同的安全性和效率要求進行選擇和組合。分組長度和輪數的設計靈活,可以根據不同的應用場景進行選擇和調整[7]。然而,Feistel結構也有缺點:需要多輪的迭代運算,導致加密速度較慢,資源消耗較大。輪函數和密鑰調度算法的設計復雜,需要考慮多種因素,以抵抗各種密碼分析攻擊。因此,如何在保證安全性的前提下,對Feistel結構進行優化設計,提高加密速度,降低資源消耗,是一個值得研究的問題。
本文提出了一種基于查找表的輪函數實現方法,該方法利用單片機的ROM存儲空間,預先計算并存儲輪函數的輸出值,然后在加密過程中,直接從ROM中讀取相應的值。這種方法避免了復雜的運算,提高了加密速度,降低了資源消耗。
具體來說,本文采用了如圖2所示的輪函數結構,它由四個部分組成。

圖2 基于查找表的輪函數結構
其中,查找表變換采用了S盒的思想,S盒是一種非線性的變換,它將一個固定長度的輸入映射為一個固定長度的輸出,通常用一個二維數組表示。如圖3所示。

圖3 S 盒的示例
本文的查找表變換的優點有:提高了加密速度,降低了資源消耗,增強了安全性。缺點有:需要預先計算并存儲查找表的值,增加了預處理的時間和空間開銷。需要保護查找表的安全,防止對手獲取查找表的值,從而破解加密算法。為了解決這些缺點,本文采用了以下措施:利用單片機的ROM存儲空間,將查找表的值作為常量數據存儲在程序中,從而減少了預處理的時間和空間開銷,同時也提高了查找表的讀取速度。利用單片機的特性,將程序和數據存儲在不可修改、不可讀取的內部存儲器中,從而保護了查找表的安全,防止了對手的物理攻擊和邏輯攻擊。
本文提出了一種基于動態密鑰生成的密鑰調度算法,該算法利用單片機的RAM存儲空間,動態地生成并存儲輪密鑰,然后在加密過程中,直接從RAM中讀取相應的值。這種方法避免了固定的密鑰,增強了安全性,同時也提高了加密速度,降低了資源消耗。具體來說,基于動態密鑰生成的密鑰調度算法結構可以用公式(5)表示:
本文的動態密鑰生成器的優點有:提高了加密速度,降低了資源消耗,增強了安全性。缺點有:需要動態地生成并存儲輪密鑰,增加了運行時的時間和空間開銷;需要保護動態密鑰生成器的安全,防止對手獲取動態密鑰生成器的參數,從而破解加密算法。為了解決這些缺點,本文采用了以下措施:利用單片機的RAM存儲空間,將輪密鑰動態地存儲在內部存儲器中,從而減少了運行時的時間和空間開銷,同時也提高了輪密鑰的讀取速度。利用單片機的特性,將程序和數據存儲在不可修改、不可讀取的內部存儲器中,從而保護了動態密鑰生成器的安全,防止了對手的物理攻擊和邏輯攻擊。
本文的仿真實驗環境參數如表1所示。其中,單片機的型號為ATmega328P,這是一種基于AVR架構的8位微控制器,是Arduino Uno開發板的核心芯片。本文的仿真實驗的程序使用C語言編寫,使用AVR-GCC編譯器編譯,使用AVRDUDE工具下載,使用Arduino IDE作為開發環境。

表1 仿真實驗環境參數
仿真實驗的數據參數如表2所示。其中,分組長度為64位,輪數為16輪,主密鑰長度為64位,輪密鑰長度為32位,輪函數的輸入擴展和輸出壓縮采用簡單的復制操作,查找表變換采用DES算法中的S盒,動態密鑰生成器采用一個16位的LFSR,初始狀態為0xACE1,反饋系數為0xB400,輸出位為最高位。本文的仿真實驗的數據為隨機生成的64位二進制序列,每次加密或解密一個分組,重復1000次,計算平均值。

表2 仿真實驗的數據參數
本文的仿真實驗結果如表3所示。其中,傳統的Feistel結構采用了DES算法中的輪函數和密鑰調度算法,而本文的優化方案采用了基于查找表的輪函數實現方法和基于動態密鑰生成的密鑰調度算法。

表3 仿真實驗的結果
從表3中可以看出,本文的優化方案在加密速度、資源消耗和安全性方面都有明顯的改進。綜上所述,本文的優化設計方案在單片機平臺上實現了高效、安全的Feistel結構,驗證了本文的優化設計方案的可行性和有效性。
本文的工作雖然取得了一定的成果,但仍有一些不足之處和改進空間,例如,查找表變換和動態密鑰生成器的設計可能存在一些潛在的安全隱患,需要進一步的分析和測試,以提高其抗攻擊能力。此外,本文的仿真實驗的環境和參數還不夠豐富,需要在更多的單片機平臺和更多的數據集上進行測試,以驗證其通用性和穩定性。因此,本文未來的研究方向包括對查找表變換和動態密鑰生成器的設計進行更深入的理論分析和實驗驗證,對仿真實驗的環境和參數進行更廣泛的擴展和調整,以及對優化設計方案進行更多的結合和比較??偟膩碚f,本文的工作僅是對單片機上的Feistel結構的優化設計的一個初步嘗試,希望能為單片機上的加密算法的研究和應用提供一些參考和啟發。