◆王鳳英 周玫 仇樂 賈立鵬 姜倩玉
基于任務驅動的網絡安全身份認證案例教學研究與實施
◆王鳳英1周玫2仇樂3賈立鵬1姜倩玉1
(1. 山東理工大學 山東 255000;2.淄博高新區實驗中學 山東 255088;3.淄博職業學院 山東 255314)
網絡安全課程對理論和應用都有很高的要求,在有限的時間內完成教學目標要求,對教和學都提出了挑戰。這門課的許多任務復雜度高,學生獨立完成難度很大。針對這類問題,基于任務驅動,教師在案例進行的每一個環節進行適度提示,起到引領的作用。教師從案例分析、方案設計,到實施,既給學生一定的啟示,又留有獨立思考的空間。教師在每個環節提示程度的把握,要綜合考量學生的學業水平,以提升學生分析問題、解決問題的能力為目標。本文以Web系統基于用戶知道什么的身份認證為例,兼顧可實現性、可使用性、安全性等特點,實現抗重放攻擊、字典攻擊等安全身份認證。
安全身份認證;抗重放攻擊;抗字典攻擊;任務驅動;教學案例
高校的網絡安全課程課時少、任務重,對理論和實踐應用都有很高的要求。每個關鍵知識點,在現實中都能找到具體應用,與現實應用密切結合。在有限的時間內完成教學目標要求,對教和學都提出了挑戰,采用傳統的授課方式很難解決實際的教學條件和教學目標之間的矛盾[1]。
2020年上半年,在新冠病毒肆虐下,線上教學大行其道,任務驅動式案例教學大有用武之地?;谌蝿镇寗拥陌咐虒W,就是先有任務目標,在任務目標驅動下,以案例的形式,完成知識傳授的過程[2-3]。
由于網絡安全課的許多任務復雜度高,學生獨立完成難度很大;或者有些任務,看起來復雜度不高,但學生真正實施起來,會出現考慮問題不周全、安全強度不夠、無從下手等問題。針對這些問題,在任務驅動下,教師在案例進行的每一個環節進行適度提示,起到引導和引領的作用[4]。一步步從分析問題、設計方案,到實施方案,既給學生一定的啟示,又留有獨立思考的空間。案例教學中,教師既不能取而代之,也不能讓學生難以企及。教師在案例教學的每個環節,都要綜合考量學生的學業水平,以提升學生分析問題、解決問題的能力為導向,把握提示程度的深淺。本文以Web系統的身份認證為任務驅動,兼顧可實現性、可使用性、安全性等特點,以基于用戶知道什么為前提條件,結合HASH函數、驗證碼、salt鹽值等,實現抗重放攻擊、字典攻擊等安全身份認證的案例教學。
在有安全需求的Web信息系統中,身份認證是系統的基本要求,也是Web系統的第一道安全防線,是防范入侵的門戶。身份認證有多種方式,其安全強度也不盡相同,具體可歸結為4類:(1)用戶知道什么(預先知道),(2)用戶擁有什么(擁有物件),(3)用戶是什么(用戶本身的特征)、(4)用戶的數字證書。這四種身份認證方式各具特色、各有千秋。(1)用戶知道什么,可以是預先設置的口令等;(2)用戶擁有什么,可以是USB key等硬件;(3)用戶是什么,是一種基于生物特征的身份認證,像指紋、虹膜、人臉等;(4)數字證書則由一個可信的第三方簽發[5]。
考慮安全性、易實現等需求,對四種身份認證的方式分析如下:第(1)種方式,簡單易實現、安全級別較低,是使用最多的身份認證方法之一;第(2)種方式,安全級別較高,但需要物理硬件,實現難度較大;第(3)種方式,安全級別高,但要結合一些儀器設備實現,實現難度更大;第(4)種方式實現通過數字證書實現身份認證,安全級別高,但需要的軟硬件資源很多,實現難度很大。
在教學任務的驅動下,通過案例教學的構建與應用,能提升學生理論結合實踐的水平[6-7]。
在學習完身份認證基礎知識點后,老師布置教學任務如下。軟件公司要開發一個Web信息系統的身份認證模塊,要求抗重放攻擊和抗字典攻擊。任務硬件環境:除了計算機外,沒有額外的硬件。請您完成下列任務:(1)實現用戶注冊模塊;(2)實現用戶登錄模塊;(3)實現安全的身份認證。
在初步了解案例教學任務的前提下,教師引領學生解讀案例要求,并進一步細化,完成案例描述如下。
您作為一個公司的軟件開發人員,要完成這樣一項任務,就這個任務作為案例進行實施。案例描述:(1)實現用戶注冊模塊:分別考慮客戶端和服務器端);(2)實現用戶登錄模塊(分別考慮客戶端和服務器端);(3)實現安全的身份認證(具有抗重放攻擊和抗字典攻擊的能力)。
教師從案例分析階段開始提示并引導學生,在每個環節提示程度的把握上顯得尤為重要,既考驗老師的教學水平,也是老師自我提升的過程。提示中,既給學生一定的啟示,又留有足夠的獨立思考的空間。
依據案例描述,教師針對實現的身份認證模塊要解決的幾個問題,進行引導提示:(1)四種基本身份認證方式中哪種適合;(2)怎樣設計才能具有抗重放攻擊的能力;(3)怎樣設計才能具有抗字典攻擊的能力。
學生根據教師的3個提示,針對案例分別進行一一分析如下。
(1)身份認證方式的選擇。由于除了計算機外,沒有額外的硬件。在這種情況下,第2節描述的四種身份認證方式中,只有第(1)種滿足條件,因為其他三種都需要額外的硬件,顯然不滿足條件。
(2)解決抗重放攻擊。所謂重放攻擊,就是攻擊者通過網絡獲取用戶網絡傳輸的關鍵數據后,重復利用,以達到攻擊系統的目的。若傳輸口令明文不做其他處理,攻擊者就能在通信線路上竊聽,顯然不能抵御重放攻擊。若傳輸口令的散列值不做其他處理,黑客雖然不知道口令的原文,但是他可以截獲口令的散列值,直接把散列值發送給驗證服務器,也能驗證通過,這種方法也不能抵御重放攻擊。
為了抵御重放攻擊采用如下方法:服務器首先生成一個隨機數并發給用戶,用戶把口令散列值與該隨機數連接或異或后再用單向散列函數處理一遍,把最后的散列值發給服務器。如圖1所示,服務器對存儲的口令散列值同樣處理,然后與用戶傳過來的散列值比較,若相同就認為有效,若不同就認為無效。由于每次生成的散列值各不相同,就避免了重放攻擊。隨機數也可以用時間來代替。

圖1 傳輸口令和隨機數的散列值
對于使用用戶名和口令進行身份認證的方式,人本身的記憶力決定了口令的長度和隨機性都不是太好,目前情況下,這種簡單的身份認證方式只能用于對安全性要求不高的場合。
(3)抗字典攻擊。在服務器端對口令通過散列運算后保存,這是相當安全的方法。但是,黑客可能通過非法途徑繞過一些安全檢測,獲取了含有口令的文件,黑客就有可能利用字典攻擊分析口令。在開發系統時確定一個鹽值salt,讓口令的散列值和一個salt進行運算, 能實現抗字典攻擊。
要實現基于用戶知道什么的身份認證,教師要引導學生細化模塊,應包括兩個模塊: 注冊模塊和登錄模塊。下面教師要引領學生將案例分析中的3個疑問,結合注冊模塊和登錄模塊,分別給出解決方案流程。
教師進一步給學生引導提示:注冊模塊實施方案流程中包括的元素;客戶端和服務器端分別完成的操作;流程的順序。在把這幾個問題搞明白之后,學生根據案例分析,畫出注冊模塊實施流程如圖2所示。

圖2 注冊模塊流程圖
注冊時,在服務器端,采用HASH函數SHA-1對口令password進行運算,然后將計算結果與鹽值salt進行異或運算,進行的計算如式(1)。
Hs=H(password)?salt (1)
然后將式(1)的結果保存到數據庫。選擇鹽值salt時,盡量選160bit的,如果salt的位數小于160,則在后面補多個0,以使位數恰好是160bit;如果salt的位數大于160,則從左向右截取160bit即可。
教師進一步給學生引導提示:登錄模塊實施方案流程中包括的元素;客戶端和服務器端分別完成的操作;流程的順序。在把這幾個問題搞明白之后,學生根據案例分析,畫出登錄模塊實施流程如圖3所示。
(1)登錄時客戶端進行的運算
客戶端收到服務器端發來的隨機數/驗證碼R ,用戶輸入用戶名和口令P,進行計算如式(2)。
HH'= H(H(P)?R ) (2)
(2)登錄時服務器端進行的運算
根據客戶端發來的用戶名,與數據庫中保存的用戶名比對,若相同,首先從數據庫中取出對應的Hs,然后進行計算如式(3)。
HH =H(Hs?salt?R) (3)
將客戶端發來的HH'與HH進行比較,若HH'==HH,則判斷為合法用戶,否則為非法用戶(不合規用戶)。

圖3 登錄模塊流程圖
案例實施中,教師需要引導學生注意控件的校驗,進而提示:“用戶名”、“口令”等控件是否需要校驗;不考慮校驗會帶來什么樣的嚴重后果。
針對教師的提示,學生就會豁然開朗:只有對控件校驗才能限定一些無效輸入,同時避免出現溢出的嚴重錯誤。
學生根據案例實施方案進行編碼,注冊模塊實現后,用戶注冊界面如圖4所示。

圖4 用戶注冊界面
學生根據案例實施實施方案進行編碼,登錄模塊實現后,用戶登錄界面如圖5所示。

圖5 用戶登錄界面
實施過程中的主要代碼如下。
(1)SHA-1加密算法核心代碼段:
public static String SHA (String plainText) { byte[] secretBytes = null;
try {secretBytes = MessageDigest.getInstance("SHA ").digest(plainText.getBytes());}
catch (NoSuchAlgorithmException e) {throw new RuntimeException("No SHA Algorithm!");}
String SHAcode = new BigInteger(1, secretBytes).toString(16);
for (int i = 0; i < 32 - SHAcode.length(); i++) {SHAcode = "0" + SHAcode;}
return SHAcode;}
(2)SHA-1加密算法核心代碼段:
public static String shaEncode(String inStr) throws Exception { MessageDigest sha = null;
try { sha=MessageDigest.getInstance("SHA");
} catch (Exception e) { System.out.println(e.toString());
e.printStackTrace();
return ""; }
byte[] byteArray = inStr.getBytes("UTF-8");
byte[] SHABytes = sha.digest(byteArray);
StringBuffer hexValue = new StringBuffer();
for (int i = 0; i < SHABytes.length; i++)
{ int val = ((int) SHABytes[i]) & 0xff;
if (val < 16) {hexValue.append("0"); } hexValue.append(Integer.toHexString(val));}
return hexValue.toString();}
由于硬件條件的限制,只能選擇安全性較低的基于用戶知道什么的身份認證方式。身份認證中,服務器產生的隨機數R,只用一次,因此能抵御重放攻擊;在服務器端采用HASH函數SHA-1對口令password和鹽值salt進行運算,由此抵御字典攻擊。由于增加了抗重放攻擊字典攻擊,使本案例實施的認證方式更安全。
本文的教學案例作為一項個案研究,旨在超越個案的局限,觸類旁通。在網絡安全課程教學實踐中,已經大面積開展教師引領下的案例教學,形成了有一定推廣價值的研究結果。
教師在案例進行的每一個環節進行提示,起到引導和引領的作用,一步步分析問題、設計方案、到實施方案。這樣一來,能使學生少犯錯誤、少走彎路。適當的提示、提醒,能起到醍醐灌頂的效果。但提示性的信息要適度,要留有足夠的想象空間讓學生獨立思考,以培養學生創新性、研究性思維。這種適度合節的“放手”與“搭橋”,體現了教師在具體情境下的實踐性知識,而對師生關系和角色定位的感知促成了教師實踐性知識的生成[8]。
學生通過案例學習,將身份認證的理論學習轉化為動手實施,鍛煉開發Web軟件的能力。這樣的案例教學方式,能使學生在任務驅動下,從案例描述中,分析案例要解決的問題,思考設計方案,進而實施方案。選出的案例,就發生在日常應用中,身臨其境,更有現實意義。
[1]蔡曉萱.高中語文教學目標的70年探索[J].當代教育實踐與教學研究,2020(09):71-72.
[2]徐新.基于案例驅動的數據結構課程教學方法研究[J].計算機教育,2019(03):44-47.
[3]敖謙, 劉華,賈善德.混合學習下“案例任務”驅動教學模式研究[J].現代教育技術,2013,23(03):122-126.
[4]許立新.美國“引領教育者”教師領導力框架探析[J].教師發展研究,2019,3(03):117-124.
[5]王鳳英, 程震,李彩虹.電子商務安全與信用評價[M]. 吉林:吉林大學出版社,2017,10
[6]劉紅梅.任務驅動式案例教學法的構建與應用[J].江蘇高教,2016(04):71-73.
[7]李敏.任務驅動式案例教學在《筆譯》課程教學改革中的探索與實踐[J].高教學刊,2019(03):130-132.
[8]魏戈.課堂教學情境下教師實踐性知識生成機制研究[J].教師發展研究,2018,2(03):66-73.
教育部產學合作協同育人項目(201702048084);淄博市校城融合發展計劃項目(2018ZBXC295);山東理工大學研究生教育教學改革研究項目