王利濤 李敏 邢宇航

[摘 要] 針對“密碼學”課程教學實踐中存在的編碼理論理解難度大、算法編碼實現入手難、編譯運行過程相對復雜、難以結合算法編碼開展課堂教學等現實問題,首先分析了現有的教學過程和方法,然后分別結合AES和ECC兩種典型的密碼算法,對傳統純理論授課和基于C/C++語言授課中存在的問題進行分析,結合Matlab語言的特點和優勢,提出基于Matlab的密碼編碼教學方式,提出了對教學設計的一些考慮,闡述了教學實踐過程,通過實際教學分析說明了教學的效果,最后給出了進一步教學應用的方向。
[關鍵詞] 密碼編碼;教學實踐;教學研究
[基金項目] 2015年度國家社會科學基金項目“大數據技術在內網輿論掌控與導向中的應用研究”(No.15GJ003-243)
[作者簡介] 王利濤(1983—),男,河南許昌人,博士,火箭軍工程大學作戰保障學院講師,主要從事密碼與信息安全教學與改革研究;李 敏(1971—),女,河南扶溝人,博士,火箭軍工程大學作戰保障學院教授,主要從事信息安全、人工智能與機器學習等研究;邢宇航(1979—),男,河南南陽人,博士,火箭軍工程大學作戰保障學院副教授,主要從事信息安全研究。
[中圖分類號] G642.0? ?[文獻標識碼] A? ?[文章編號] 1674-9324(2021)37-0077-04? ? [收稿日期] 2021-04-06
一、引言
近年來,隨著網絡安全事件頻發及人們對個人隱私保護的關注,全社會對信息安全的重視程度也在不斷提高,各高校在越來越多的專業開設了信息安全類相關課程,而“密碼學”作為信息安全的基礎更是此類課程的首選。然而,由于其對數學理論要求較強,已成為許多工程類專業學生學習起來難度最大的課程之一。
“密碼學”(特別是密碼編碼部分)教學內容涉及的知識跨度廣、課程難度高、理論性和應用性均比較強[1],通常需要諸多數學類課程作為基礎,而學生對這些基礎課程的掌握不同,因此教學內容與授課方式將直接影響學生對知識的掌握和能力的提升。對此,現有研究嘗試用密碼學實驗工具CryptTool開展教學[2],但該工具只展現了算法輸入與輸出結果,難以展現密碼算法的過程和細節。我們在教學過程中,曾嘗試使用編碼教學與密碼算法講解相結合的方式,取得了一定的效果,但由于C/C++語言編程過程相對繁雜,編譯調試耗時較長,占用了較多的課堂時間,也影響到了教學的體驗。通過分析研究其他理論性要求較高課程的優秀教學方法[3-5],并結合科研工程實踐,基于Matlab語言具有易于學習、編碼簡單、運行直接等諸多優點,將Matlab用到“密碼學”的教學中,并在隨后開展了相關的教學實踐。本文以AES和ECC算法為例,對基于Matlab的編碼教學內容與方式進行實踐和分析。
二、Matlab在AES教學中的實踐
AES屬于對稱密碼算法,作為許多軟件應用的加密算法進行數據保護,如在WinRAR、Office文件加密及WIFI安全認證等應用中仍在使用。AES算法設計精妙,體現了很多基本的密碼算法設計思想,個別計算處理環節涉及有限域數學知識和編程技巧,在教學中基于Matlab編碼開展講解展現出了明顯的優勢。
(一)AES一般授課特點分析
AES是迭代型分組密碼算法,分組長度128比特,密鑰長度128、192、256比特可選,分別對應10、12、14個圈子運算。每個圈子運算都包括字節代替變換、行移位變換、列混合變換及圈密鑰加。圈密鑰加運算法的前提是進行圈子密鑰生成。
若不考慮設計理論細節,AES字節代替就是一個S盒查詢變換,行移位是一種線性變換,圈密鑰加則是將行移位的結果與圈子密鑰按比特進行異或運行。最復雜的是列混合變換,其數學基礎是有限域GF(28)上的加法和乘法兩種面向字節的運算,其中加法運算可以看作是兩個字節按比特異或,較容易理解;而乘法運算對應多項式的乘積模上二元域GF(2)上的8次不可約多項式m(x),m(x)=x8+x4+x3+x+1;而進一步推導后發現,乘法運算可通過左移運算和異或運算來實現。
針對AES算法,一般的講授方法是,先對基本的數學基礎進行講解(此為難點知識,個別授課中可能略去不講),然后列出算法結構,再按照各步驟進行分解講授,最后再回到整體來講解算法的過程,該過程按部就班,能夠講出知識點細節,但學生學起來比較抽象,教學效果差。
(二)用Matlab編碼進行AES算法授課思考
針對原教學方法中的問題,為使算法結構更加清楚,密碼算法編碼設計過程更形象地展示出來,設計使用基于Matlab的輔助教學方法。在備課階段,先對AES算法進行Matlab編碼,主程序(如圖1所示)框架簡單明了,與算法結構框圖有明確的對應關系,而且算法執行邏輯也直接體現出來,對于一些測試數據也可以通過斷點調試方法查看數據的變化情況,能夠讓學生更深刻地掌握算法的邏輯結構及數據的處理過程,從而更好地掌握相關知識要點。
AES算法Matlab代碼簡要說明:加密算法中,輸入明文PT是4×4的矩陣(16字節共128比特,是AES算法的要求);密鑰KEY可以是16、24或32字節(byte),即128、192、256三種密鑰長度可選;判斷輸入后,由函數KeyGenEnc計算執行迭代的次數Nrnd,并生成所需的圈子密鑰EncKey。
進行AES加密運算時,首先進行一次圈子密鑰加運算,程序中為SubKeyAdd(CT,EncKey(:, :, 1);然后進行Nrnd次輪運算,包括字節代替AESSBox,行移位ShiftRows,列混合MixColumn(當i~=Nrnd時,即在最后一輪之前都要進行列混合運算)和圈子密鑰加SubKeyAdd運算,運行執行完畢即得到密文CT。從圖1中可以看出,Matlab程序與AES算法框架有關明顯的對應關系,且程序結構簡潔明了,輸入明文分組與密鑰參數后,在Matlab中調試運行可進一步使學生看到運行細節,更好地體驗數據在算法中的變化過程。