999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

用Java Socket實現(xiàn)高校信息化中用戶動態(tài)口令身份認(rèn)證

2010-01-01 00:00:00申永軍董彬峰吳小華
現(xiàn)代教育技術(shù) 2010年1期

【摘要】身份認(rèn)證作為網(wǎng)絡(luò)應(yīng)用系統(tǒng)的第一道防線,是最重要的安全服務(wù)。在高校信息化過程中,如何保障高校信息資源的安全性,已經(jīng)受到越來越多的關(guān)注。文章基于S/Key一次性口令身份認(rèn)證系統(tǒng)以及Java套接字,Applet等技術(shù),詳細(xì)介紹了如何用Java套接字實現(xiàn)高校信息化系統(tǒng)中動態(tài)口令身份認(rèn)證的過程,并相應(yīng)的給出了一些關(guān)鍵代碼。

【關(guān)鍵詞】身份認(rèn)證,S/Key系統(tǒng),一次性口令,高校信息化

【中圖分類號】G40-057 【文獻(xiàn)標(biāo)識碼】B 【論文編號】1009—8097(2010)01—0120—04

一 引言

1 應(yīng)用背景

在目前的高校信息化系統(tǒng)中,統(tǒng)一身份認(rèn)證是很重要的。而如何解決好身份認(rèn)證是高校信息化系統(tǒng)中一個關(guān)鍵的問題。身份認(rèn)證主要用于阻止非授權(quán)用戶對系統(tǒng)的入侵或訪問,是信息安全系統(tǒng)的基礎(chǔ)。根據(jù)所采用手段的不同,可分為基于秘密信息的和基于物理安全性的身份認(rèn)證兩種。基于秘密信息的身份認(rèn)證用的是靜態(tài)口令。每個合法用戶擁有一個用戶名,口令對,用戶登錄系統(tǒng)或使用某項功能時,需輸入自己的用戶名與口令,系統(tǒng)即可確認(rèn)是否為合法。靜態(tài)口令身份認(rèn)證方便,簡潔,但存在諸多缺點(diǎn)。動態(tài)口令身份認(rèn)證是現(xiàn)在研究較多并且技術(shù)相對比較成熟的認(rèn)證方式,它克服了靜態(tài)口令技術(shù)所固有的許多缺點(diǎn),特別是對于分布式身份認(rèn)證來說具有非常高的安全性。

2 靜態(tài)口令認(rèn)證的缺點(diǎn)

(1)每次訪問系統(tǒng)時都要輸入靜態(tài)口令,易被偷窺泄密。

(2)靜態(tài)口令只能進(jìn)行系統(tǒng)對用戶的單向認(rèn)證,攻擊者可偽裝成系統(tǒng)騙取用戶口令。

(3)其安全性基于用戶設(shè)置的口令,很多用戶為了方便,設(shè)定的口令中含個人信息,如姓名、生日等,極易破譯 。且長期使用同一口令.被破解的可能性極大。

(4)在訪問不同安全級別的系統(tǒng)時,都要求用戶提供口令。用戶為方便記憶.往往采用相同的口令,而低安全級別的口令很容易被攻擊者獲得并用來對高安全級別系統(tǒng)進(jìn)行攻擊。

(5)系統(tǒng)中用戶的口令以文件形式存儲在認(rèn)證方,攻擊者可利用系統(tǒng)存在的漏洞獲取口令文件。一旦該文件被攻擊者得到,他們就可使用解密程序來破譯,從而獲取對系統(tǒng)的訪問權(quán)。

(6)口令在傳輸過程中可能被截獲。用戶連接其在遠(yuǎn)程主機(jī)上的帳戶時,由于網(wǎng)上傳輸?shù)目诹顩]有加密,攻擊者可通過各種手段獲取用戶口令。如被截獲的是管理員的口令,那么獲取特權(quán)級訪問就變得很容易,已有許多系統(tǒng)被這種方法侵入。

顯然,作為目前身份認(rèn)證最常用手段的靜態(tài)口令,不能很好的保證其安全性,需要一種經(jīng)常變化、不易推測、一次性使用的動態(tài)口令來實現(xiàn)安全可靠的身份認(rèn)證,阻止未經(jīng)授權(quán)的非法訪問等。

3 動態(tài)口令的提出

在80年代初,美國科學(xué)家Leslie Lamport首次提出了利用散列函數(shù)產(chǎn)生一次性口令的思想,即用戶每次同服務(wù)器進(jìn)行身份認(rèn)證時,在網(wǎng)上傳輸?shù)恼J(rèn)證口令都是加密后的密文形式,并且在每次認(rèn)證時這些密文形式的認(rèn)證口令都是不同的,也就是說密文口令是一次有效的。

這種一次有效的“動態(tài)口令”彼此之間無相關(guān)性,無法預(yù)測,跟蹤,截取,破譯。這樣,無論網(wǎng)上交易,轉(zhuǎn)賬,還是訪問內(nèi)部網(wǎng)絡(luò)等都能對訪問者身份進(jìn)行準(zhǔn)確的認(rèn)證,保證其唯一,合法。

本文首先介紹了一種經(jīng)典的動態(tài)口令身份認(rèn)證系統(tǒng)——S/Key系統(tǒng),然后介紹了Java Socket的一些基本知識,最后重點(diǎn)介紹了如何用Java Socket實現(xiàn)動態(tài)口令身份認(rèn)證,并給出了相應(yīng)的代碼。

為方便描述,約定符號如下:IDc為用戶C的身份標(biāo)識,A表示認(rèn)證服務(wù)器,W為用戶秘密通行短語,N為初始序列號,S表示種子值,Pi表示用戶第i次登錄的一次性口令,H(x)表示單向哈希函數(shù),Hi(x)表示對x連續(xù)進(jìn)行i次哈希運(yùn)算, Ek(m)表示用密鑰k對信息m進(jìn)行加密運(yùn)算,Dk(m)表示用密鑰k對信息Ek(m)進(jìn)行解密運(yùn)算,即m=Dk(Ek(m))。

二 S/Key系統(tǒng)[1,2,3]

S/Key系統(tǒng)是一種一次一密認(rèn)證系統(tǒng),客戶端和服務(wù)器端沒有保留口令及生成口令的全部信息,整個通信過程都是安全的,用戶每一次登錄系統(tǒng)所用的口令都是不同的,攻擊者通過竊聽得到的口令無法用于下一次認(rèn)證,而且用戶秘密通行短語從不在網(wǎng)上進(jìn)行傳輸,保證了在網(wǎng)絡(luò)上傳送的密碼只使用一次,可以有效防止通過竊聽進(jìn)行重放攻擊,具有較高的安全性。

1注冊階段

用戶選擇自己的秘密通行短語W,服務(wù)器為每個用戶生成一個種子值S,用戶設(shè)置一次性口令序列的最大元素個數(shù)N,用戶輸入的S和N通過安全通道提交給認(rèn)證服務(wù)器,認(rèn)證服務(wù)器計算出一次性口令為P0=Hn(W+S)

第i次登錄的一次性口令:Pi=Hn-i(W+S)

數(shù)據(jù)庫中用戶C的注冊數(shù)據(jù)內(nèi)容為:用戶IDc,種子值S,初始序列號N,一次性口令P0

2 認(rèn)證階段

第i次認(rèn)證過程如下:

Step1 C→A:IDc;認(rèn)證請求;

Step2 A→C:N-i,S;發(fā)送挑戰(zhàn);

Step3 C→A:Pi=Hn-i(W+S);計算一次性口令Pi并作為應(yīng)答;

Step4:服務(wù)器對收到的Pi再做一次哈希運(yùn)算H(Pi),并將結(jié)果H(Pi)與保存在認(rèn)證服務(wù)器端的該用戶上次成功登錄的一次性口令Pi-1比較,相同則通過認(rèn)證,將N-i-1和Pi 寫入數(shù)據(jù)庫作為新的序列號和動態(tài)口令。

三 Java Socket,Applet[4]

網(wǎng)絡(luò)應(yīng)用程序的核心由一對程序組成------一個客戶程序和一個服務(wù)器程序,當(dāng)這兩個程序執(zhí)行的時候,創(chuàng)建一個客戶端進(jìn)程和一個服務(wù)器進(jìn)程,并且這兩個進(jìn)程通過對套接字(socket)的讀寫來互相通信。Socket可以看成在兩個程序進(jìn)行通訊連接中的一個端點(diǎn),一個程序?qū)⒁欢涡畔懭隨ocket中,該Socket將這段信息發(fā)送給另外一個Socket中,使這段信息能傳送到其他程序中。

Java提供了一個豐富的、支持網(wǎng)絡(luò)的類庫,這些類使得應(yīng)用程序能方便地訪問網(wǎng)絡(luò)資源。Java提供了兩種通訊工具。它們是:使用用戶報文協(xié)議(UDP)的報文和使用傳輸控制協(xié)議/因特網(wǎng)協(xié)議(TCP/IP)的Sockets(套接字)。

Sockets套接字用TCP來進(jìn)行通訊。套接字模型同其他模型相比,優(yōu)越性在于其不受客戶請求來自何處的影響。只要客戶機(jī)遵循TCP/IP協(xié)議,服務(wù)器就會對它的請求提供服務(wù)。這意味著客戶機(jī)可以是任何類型的計算機(jī)。客戶機(jī)不再局限為UNIX、Windows、DOS或Macintosh平臺,因此,網(wǎng)上所有遵循TCP/IP協(xié)議的計算機(jī)可以通過套接字互相通訊。

Applet可以翻譯為小應(yīng)用程序,可通過因特網(wǎng)下載并在接收計算機(jī)上運(yùn)行的一小段程序,Java Applet就是用Java語言編寫的這樣的一些小應(yīng)用程序,它們可以直接嵌入到網(wǎng)頁中,并能夠產(chǎn)生特殊的效果,可以在B/S架構(gòu)中實現(xiàn)簡單的客戶端運(yùn)算功能。

用Java編寫的應(yīng)用程序簡潔,代碼少,對于新手來說它的可讀性強(qiáng)。Java與平臺無關(guān),為了對出現(xiàn)在I/O和網(wǎng)絡(luò)操作中的一般問題進(jìn)行健全的解決,它提供了例外機(jī)制,并且它的線程工具提供了一種能夠簡單的實現(xiàn)強(qiáng)大服務(wù)器的方法。由于Java有著豐富的支持網(wǎng)絡(luò)的類庫,用Java進(jìn)行客戶服務(wù)器編程變得越來越流行,并且甚至可能變成未來幾年中的規(guī)范。

基于以上原因,本人選擇Java Socket實現(xiàn)動態(tài)口令身份認(rèn)證的雙方數(shù)據(jù)通信,采用流行的B/S架構(gòu),客戶端采用Java Applet實現(xiàn)當(dāng)前動態(tài)口令的計算,服務(wù)器端采用多線程技術(shù)以便支持大量用戶的訪問。

四 具體實現(xiàn)[5][6][7]

由于S/Key系統(tǒng)不能抵抗小數(shù)攻擊,且在step2存在挑戰(zhàn)信息N-i,S 傳輸過程中可能有被非法竊聽而泄漏的危險性,故本人參考眾多動態(tài)口令算法對S/Key系統(tǒng)作了初步的改進(jìn),加入了對服務(wù)器端的雙向認(rèn)證和對挑戰(zhàn)信息的加密。

改進(jìn)后的第i次認(rèn)證過程如下:

Step1 C→A:IDc;認(rèn)證請求;

Step2 A→C:E K (N-i,S,Pi-1);發(fā)送挑戰(zhàn),K=H(W);

Step3 C→A:DK (N-i,S,Pi-1),Pi=Hn-i-1(W+S);客戶端生成K=H(W),解密獲得N-i,S,Pi-1 并計算一次性口令Pi先判斷如果H(Pi)= Pi-1 則對服務(wù)器認(rèn)證通過,將Pi 發(fā)送給服務(wù)器作為應(yīng)答;

Step4:服務(wù)器對收到的Pi再做一次哈希運(yùn)算H(Pi),并將結(jié)果H(Pi )與保存在認(rèn)證服務(wù)器端的該用戶上次成功登錄的一次性口令Pi-1比較,相同則通過認(rèn)證,并更新數(shù)據(jù)庫,將N-i-1和Pi 寫入數(shù)據(jù)庫作為新的序列號和動態(tài)口令。

1數(shù)據(jù)庫設(shè)計

說明:在我們的數(shù)據(jù)庫中,S 是認(rèn)證服務(wù)器隨機(jī)產(chǎn)生的大于1000的種子值,N-i為用戶第i次接受認(rèn)證時的序列號,初始值為用戶注冊時輸入的序列號N,Pi =Hn-i(W+S)為用戶第i次接受認(rèn)證時的認(rèn)證口令,初始值為P0=Hn(W+S)

為了保證step2發(fā)送挑戰(zhàn)N-i,S 傳輸過程中的數(shù)據(jù)安全性,我們在數(shù)據(jù)庫中加入一項秘密通行短語的散列值H(W)作為密碼加密挑戰(zhàn)信息,由于散列函數(shù)的不可逆性,不會引起秘密通行短語的泄漏。加密算法我們選用DES。

2 注冊階段

該階段通過兩個文件來實現(xiàn)

registerform.html:實現(xiàn)注冊信息的表單輸入

關(guān)鍵代碼:

long seed=(long)(Math.random()*1000)+1000;//隨機(jī)函數(shù)生成種子值

String initpasswd =MD5bean.getMD5ofStr(W+S);

for(inti=1;i

initpasswd=MD5bean.getMD5ofStr(initpasswd);

//計算P0= (W+S)表示對單向函數(shù)H(W+S)進(jìn)行n次運(yùn)算

3 認(rèn)證階段[8]

該階段主要由一個applet,一個servlet,兩個java bean 文件組成

(1)客戶端程序

newloginApplet.java是唯一的需要在客戶端執(zhí)行的文件,用于在客戶端向用戶顯示登陸界面,接受客戶的信息輸入,產(chǎn)生動態(tài)口令,發(fā)送給服務(wù)器,接受服務(wù)器對客戶的身份驗證。

該文件有一個繼承Applet類的 newloginApplet類。

NewloginApplet類圖如下:

函數(shù)邏輯處理調(diào)用關(guān)系圖如圖3:

函數(shù)功能說明:

Init()初始化applet顯示登陸界面

handleEvent()處理登陸信息并建立連接

validateName()驗證該用戶是否已經(jīng)注冊

validateDPswd()驗證用戶口令是否正確,該口令為不斷變化的動態(tài)口令DynamicPassword。

(2) 服務(wù)器端程序

服務(wù)器端程序包含三個文件:

loginServlet.java是一個繼承HttpServlet類的servlet文件,用于向客戶端送出applet,并啟動認(rèn)證服務(wù)器監(jiān)聽連接。

MyServer.java被loginServlet啟動后建立一個服務(wù)器端socket監(jiān)聽連接,獲得一個連接后交由serverLogic處理,MyServer重新進(jìn)入監(jiān)聽狀態(tài)。

ServerLogic.java處理獲得的連接請求,即處理客戶端的認(rèn)證請求,如果認(rèn)證成功,則返回登陸成功頁面,否則返回錯誤提示。

采用面向?qū)ο蟮姆治鲈O(shè)計方法對認(rèn)證邏輯進(jìn)行分析設(shè)計,獲得描述業(yè)務(wù)邏輯的類圖如下:

說明:Login函數(shù)用于判斷如果用戶未登陸,則向客戶端送出用于登陸的applet

五 身份認(rèn)證程序?qū)崿F(xiàn)綜述[9]

1服務(wù)器端程序基本功能:

(1)創(chuàng)建一個serverSocket對象,在指定端口監(jiān)聽客戶端發(fā)來的請求

(2)在接收到請求時,accept()方法將返回一個Socket對象

(3)用上述Socket對象創(chuàng)建輸入輸出流對象

(4)通過輸入輸出流與客戶交互

(5)交互完畢,關(guān)閉輸入輸出流與 Socket

(6)服務(wù)器程序運(yùn)行結(jié)束,關(guān)閉ServerSocket

服務(wù)器端類功能說明:

(1)啟動服務(wù)器程序的Serverlet-- LoginServlet.class

Servlet程序---LoginServlet負(fù)責(zé)啟動服務(wù)器程序。在它的init()方法中啟動了一個類型為MyServer的對象實類,該實類作為一個后臺線程在TCP端口4000監(jiān)聽客戶的請求.

(2)服務(wù)器類MySserver.class

MyServer類是一個線程,它首先根據(jù)指定的端口創(chuàng)建一個ServerSocket對象,調(diào)用ServerSocket對象的accept()方法監(jiān)聽是否有客戶發(fā)出連接請求,如果有就創(chuàng)建一個類型為ServerLogic的對象,并將accept()方法返回的Socket對象傳給創(chuàng)建的ServerLogic對象以便將該連接的控制權(quán)交給此ServerLogic對象,然后此MyServer實類重新調(diào)用ServerSocket對象的accept()方法監(jiān)聽是否有客戶發(fā)出新的連接請求

(3)認(rèn)證邏輯類ServerLogic.class

ServerLogic對象以線程的方式進(jìn)行工作,負(fù)責(zé)處理一個Socket連接。他負(fù)責(zé)接受客戶端的請求,進(jìn)行處理,其處理過程為判斷客戶是否已經(jīng)注冊。首先,它從Socket中讀取Applet傳來的用戶名,并進(jìn)行驗證,如果是正確的,則向Socket的輸出流中寫入“true”,然后在輸出流中寫入客戶的種子值,初始序列號,初始口令的加密值,等待客戶端發(fā)送動態(tài)口令進(jìn)行下一步驗證。如果驗證沒有通過,就向輸出流中寫入“1”。

2 使用Socket的客戶端程序

(1)客戶端使用面向連接的通信方式與服務(wù)器通信

(2)創(chuàng)建Socket對象建立與服務(wù)器的連接

(3)用該Socket對象創(chuàng)建輸入輸出流

(4)與服務(wù)器交互:

Applet程序——newLoginApplet首先接收用戶輸入的用戶名,然后調(diào)用validateuser()方法將用戶名數(shù)據(jù)送到服務(wù)器側(cè)進(jìn)行驗證,如果通過,就接收服務(wù)器發(fā)來的種子值,初始序列號,初始口令,對其解密,并計算動態(tài)口令,發(fā)給服務(wù)器接受下一步認(rèn)證。

(5)交互完畢,關(guān)閉輸入,輸出流與Socket

參考文獻(xiàn)

[1] N Haller.The S/KEY One-Time Password System[S].RFC 1760,1995.

[2] N Haller.A One-Time Password System[S].RFC 2289,1998.

[3] 王敏,戴宗坤,方勇.一種新的一次性口令機(jī)制及其應(yīng)用[J]. 計算機(jī)應(yīng)用研究,2005,(1):108-109

[4] 陳劍,周意青,劉振華.JavaApplet的安全性及應(yīng)用[J].計算機(jī)應(yīng)用研究,2001,(11):70.

[5] 敖山,李新中,唐守廉.時間敏感的動態(tài)口令身份認(rèn)證系統(tǒng)研究及設(shè)計[J].計算機(jī)應(yīng)用研究,2004,24(7):151.

[6] 王濤,謝冬青,周洲儀.一種新的雙向認(rèn)證的一次性口令系統(tǒng)TAOTP[J].計算機(jī)應(yīng)用研究,2005,(9):128-130.

[7] 朱建新,楊小虎.基于指紋的網(wǎng)絡(luò)身份認(rèn)證[J].計算機(jī)應(yīng)用研究.2001,(12):14-17.

[8] 汪同慶,魯軍,華晉,倪水平.基于MD5 算法和Schnorr 協(xié)議的雙因素身份認(rèn)證系統(tǒng)[J].計算機(jī)應(yīng)用研究.2004,(12):137-139.

[9] James F.Kurose Keith w.Ross計算機(jī)網(wǎng)絡(luò)---自頂向下方法與Internet特色

主站蜘蛛池模板: 亚洲成人77777| 国产成人8x视频一区二区| 伊人精品成人久久综合| 欧美狠狠干| 青青草一区| 国产一级二级三级毛片| 欧美区一区| 波多野结衣久久高清免费| 国产黄色片在线看| 91精品啪在线观看国产91| 国产原创自拍不卡第一页| 国产在线98福利播放视频免费| 波多野结衣一二三| 亚洲国产欧美国产综合久久| 欧美激情,国产精品| 黄色免费在线网址| 丁香婷婷久久| 深爱婷婷激情网| 日韩在线观看网站| 国产精品污污在线观看网站| 日韩在线第三页| 国产成人乱无码视频| 黑人巨大精品欧美一区二区区| 无码AV日韩一二三区| 乱人伦视频中文字幕在线| av大片在线无码免费| 欧美色综合网站| 国产成人综合在线视频| 91成人在线免费视频| 国产人碰人摸人爱免费视频| 欧美成人日韩| 日韩AV无码一区| 中文成人在线| 亚洲国产精品日韩av专区| 91亚瑟视频| 国产精品免费p区| 久久精品一品道久久精品| 国产手机在线观看| 国产在线自揄拍揄视频网站| 日韩无码黄色网站| 狠狠综合久久| 国产经典三级在线| 久久精品午夜视频| 日本人又色又爽的视频| 久久精品视频一| 亚洲一区波多野结衣二区三区| 欧美午夜小视频| 欧美a在线视频| 日日摸夜夜爽无码| 国产亚洲高清视频| 91无码国产视频| 亚洲精品人成网线在线 | 97视频在线精品国自产拍| 久久精品无码一区二区国产区| 婷婷开心中文字幕| 麻豆国产精品| 亚洲精品视频免费| 欧美笫一页| 亚洲欧美日韩高清综合678| 欧美精品另类| 在线观看国产一区二区三区99| 亚洲婷婷丁香| 午夜精品影院| 老色鬼久久亚洲AV综合| 亚洲午夜福利精品无码| 伊人色在线视频| 久久一色本道亚洲| 狠狠ⅴ日韩v欧美v天堂| 九九九国产| 狠狠做深爱婷婷久久一区| 爆操波多野结衣| 国产97视频在线观看| 毛片a级毛片免费观看免下载| 美臀人妻中出中文字幕在线| 制服丝袜亚洲| 欧美在线国产| 久久久噜噜噜久久中文字幕色伊伊| 2019国产在线| 国产无码高清视频不卡| 国产玖玖玖精品视频| 国产高清无码第一十页在线观看| 美女无遮挡拍拍拍免费视频|