畢業(yè)設計Usbkey方式系統(tǒng)登錄身份認證_第1頁
畢業(yè)設計Usbkey方式系統(tǒng)登錄身份認證_第2頁
畢業(yè)設計Usbkey方式系統(tǒng)登錄身份認證_第3頁
畢業(yè)設計Usbkey方式系統(tǒng)登錄身份認證_第4頁
畢業(yè)設計Usbkey方式系統(tǒng)登錄身份認證_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、密 級 公 開 本科生畢業(yè)設計報告usbkey方式系統(tǒng)登錄身份認證陶建飛 吳 芳(2007081205) (2007081124)指導教師姓名:劉 彥職 稱:副教授單 位:計算機科學系專 業(yè) 名 稱:計算機科學與技術設計提交日期:2011年4月25日設計答辯日期:2011年4月27日學位授予單位:黔南民族師范學院答辯委員會主席:設 計 評 閱 人:2011 年 4 月 28 日摘要:在今天這樣一個互聯(lián)網(wǎng)驅動的社會中,網(wǎng)上銀行也稱在線銀行,已經成為金融機構整體發(fā)展策略中不可或缺的一部分。近年來使用網(wǎng)上銀行的用戶數(shù)量巨大增長,并且每年保持了穩(wěn)定的發(fā)展勢頭。網(wǎng)上銀行在給它的用戶帶來諸多便捷服務、給銀

2、行節(jié)省費用支出和帶來更多利潤增長點的同時,也承受著很多安全風險。很多銀行意識到了這一點,紛紛采取行動,包括不斷教育用戶提高自身安全意識,安裝殺毒軟件,防木馬軟件;采用硬件usb key或者動態(tài)口令牌方式進行身份認證等。usb key是一種usb接口的硬件設備。它內置單片機或智能卡芯片,有一定的存儲空間,可以存儲用戶的私鑰以及數(shù)字證書,利用usb key內置的公鑰算法實現(xiàn)對用戶身份的認證。由于用戶私鑰保存在密碼鎖中,理論上使用任何方式都無法讀取,因此保證了用戶認證的安全性。usb key產品最早是由加密鎖廠商提出來的,原先的usb加密鎖主要用于防止軟件破解和復制,保護軟件不被盜版,而usb ke

3、y的目的不同,usb key主要用于網(wǎng)絡認證,鎖內主要保存數(shù)字證書和用戶私鑰。目前工行的usb key產品為“u盾”,招行的usb key產品為“友key”,兩者的主要供應商都是usb key的專業(yè)廠商捷德公司。在今天企業(yè)信息化的發(fā)展形勢下,簡單的用戶密碼驗證方式已經暴露出很多問題,給管理和安全上帶來很大隱患。所以需要一種安全性更高的而且人為影響因素小的用戶認證方式來替代原有方式。為此本課題將從硬件數(shù)字加密方向開發(fā)出類似于網(wǎng)銀登錄的ukey登錄的身份認證系統(tǒng)。目 錄第一章 前言 41.1 設計目的 41.2 背景 41.3 課題 5第二章 環(huán)境的配置 52.1 設計環(huán)境 52.2 設計涉及到的

4、相關軟件 52.3 設計開發(fā)語言 5第三章 系統(tǒng)的結構分析與設計53.1 儲備知識 63.2設計要點分析 63.1.1 調查 63.1.2 可行性分析 63.3 模塊分析設計 6第四章 系統(tǒng)實現(xiàn)與系統(tǒng)測試 84.1 加密鎖內部結構 94.2 usbkey身份認證驗證原理模塊 104.3 部分設計成果展示圖片 114.4 設計相關代碼 164.1.1 前臺相關代碼 164.1.2 后臺相關代碼 16第五章 小結 165.1 系統(tǒng)開發(fā)中遇到的問題 165.2 小組分工與協(xié)作 17參考文獻 17致謝 18第一章 前言1.1 設計目的本次畢業(yè)設計我們選擇了usbkey身份認證作為畢業(yè)設計課題。1.2

5、背景而今是一個網(wǎng)絡信息時代在線交易(購物,付款),收發(fā)電子郵件,在線聊天交友及表單簽名,文件數(shù)字簽名等操作的用戶越來越多、對自身身份認證的要求也越來越高,如果使用一般的軟件進行身份認證將會造成;1、軟件加密容易被破解2、 文件在傳輸過程中易被截獲、纂改3、加密軟件損壞,文件無法恢復。4、 用戶名密碼太長容易忘記 5、存儲在計算機上容易被盜 6、 輸入用戶名和密碼時容易被盜或多個信息系統(tǒng)的密碼混淆等 。usbkey認證系統(tǒng)安全登錄解決方案:usbkey是一種通過usb (通用串行總線接口)直接與計算機相連、具有密碼于是usb接口設備,usbkey通過usb端口提供的電源來工作,不需要額外的電源、

6、具有密碼驗證功能、可靠高速的小型存儲設備。usbkey 是對現(xiàn)行的網(wǎng)絡安全體系的一個極為有力的補充,通過中國信息安全測評認證中心認證的網(wǎng)絡安全產品?;诳尚庞嬎慊爸悄芸夹g把易用性,便攜性和最高級別的安全性帶給了使用microsoft ie或netscape navigator進行web訪問,在線交易(購物,付款),收發(fā)電子郵件,在線聊天交友及表單簽名,文件數(shù)字簽名等操作的用戶,保證用戶在usbkey下的操作不可篡改、抵賴。usbkey最大的特點就是安全性高,技術規(guī)范一致性強,操作系統(tǒng)兼容性好,攜帶使用靈活。usbkey作為網(wǎng)絡身份認證令牌,它是web站點用戶密碼的安全便攜存儲器。usbke

7、y代表用戶身份,通過使用usbkey, 可以控制同一時間只能有一個用戶登陸網(wǎng)頁。由于usbkey使用usb接口,因此具有體積小,速度快,兼容性好的特點而且usbkey自身所具備的存貯器可以用來存儲一些個人信息或證書,usbkey的內部密碼算法可以為數(shù)據(jù)傳輸提供安全的管道,usbkey是適用于單機或網(wǎng)絡應用的身份認證安全防護產品。 1.3 課題硬件加密。本課題以usbkey硬件為設計對象,設計的內容包括。第二章 設計環(huán)境2.1運行環(huán)境操作系統(tǒng):windows xp 內存:1gcpu主頻:2.01ghz2.2開發(fā)工具visualstudio 20052.3開發(fā)語言c#面向對象程序設計語言第三章 系

8、統(tǒng)的結構分析與設計3.1 儲備知識 完成課題的條件:本課題的研究設計難度較大,需要掌握的知識較多,也需要花費大量時間,由于學習單片機設計的時間有限,對這方面知識的認識和掌握并不是很透徹,并且沒有相關方面的實踐經驗,應用起來就顯得相對很難。設計還沒有投入到真真切切的環(huán)境中去,不過我一直在致力于這方面知識的收集和整理。若要順利完成該usbkey身份認證的設計,要認真做好需求分析,加強自學,進一步提高usbkey的使用方法,同時要積極與指導教師溝通,認真聽取指導教師的指導意見和要求。盡管自身條件在做該課題設計并不是很有實力,但是通過指導教師的幫助,小組人員共同努力,認真做好每一個內容,該課題設計一定

9、會順利完成。綜合該usbkey設計的內容和要求,若要很好地完成該課題需要以下條件:1認真進行課題研究,做好自己的本職工作,全身心投入到設計過程中;2需要指導教師耐心指導,多給學生提供意見和方法,以及經驗幫助;3同組人員通力合作,共同討論,相互幫助;4大量查閱相關書籍和資料;5向有相關系統(tǒng)開發(fā)經驗的前輩請教;3.1.1 調查 調查的具體內容:1對使用工行“u盾”進行過網(wǎng)購的部分學生進行調查分析。2.了解硬件的構造,以及相關固化函數(shù)。3.向專業(yè)人士請教,指點設計的關鍵之處。3.1.2 可行性分析可行性分析:通過可行性分析對所開發(fā)的usbkey從適用性、經濟效益以及開發(fā)成本進行研究。通過調查和usb

10、key設計目標分析,對要開發(fā)的硬件、軟件從技術、經濟、資源和管理進行可行性的分析。以保證資源合理使用、避免失誤和浪費。l 技術可行性:本課題采用c#語言進行編程,使用查找鎖函數(shù),獲取鎖基本信息,固化算法函數(shù),讀寫存儲器函數(shù)以及增強算法函數(shù)來實現(xiàn)身份認證。l 經濟可行性: 本課題使用的單片機, 具有極高的性能價格比,受到人們的重視和關注。它體積小、重量輕、抗干擾能力強、環(huán)境要求不高、價格低廉、可靠性高、靈活性好、開發(fā)較為容易,而且操作的時間非常短,因此使用起來非常方便。l 操作可行性:要進行身份驗證,必須要在客戶端安裝鎖的驅動程序,它其實不是真正的驅動程序,而是安裝必要的客戶端控件。然后安裝us

11、bkey開發(fā)工具,對讀寫鎖進行設置,生成加密代碼和模板工程等其他相關配置,將基本實現(xiàn)用戶身份認證功能。 3.2 模塊分析設計 (1)、設計流程設計可行性分析階段酒店usbkey硬件購買認證函數(shù)庫的學習酒店室內設計階段軟硬件結合并測試編寫程序控制代碼(2)、設計的具體步驟安排:前期(設計準備階段):此階段根據(jù)選題的具體內容和指導老師進行細致的溝通,聽取老師的意見和向老師表達自己的設計理念。 對設計進行可行性分析和對相關資料的收集整理,購買usbkey硬件。 中期(設計的具體實施階段):該階段按部就班地進行設計,并根據(jù)實際情況修改設計細節(jié),同時在設計上遇到問題及時向老師求助。定期向老師匯報設計進度

12、和呈現(xiàn)設計成果。詳細分析usbkey硬件內部結構、以及起固化函數(shù)庫。理清設計思路,并根據(jù)設計安排查閱相應書籍和搞懂實現(xiàn)的關鍵操作。編寫程序代碼。后期(設計的整合編制階段): 該階段主要是對設計成果進行相應整合,制作成設計作品,同時應反復和老師交流,更正設計中的不足,完善設計作品。 主要工作是對編寫的代碼進行調試,以及軟硬件結合并測試。 3.2設計要點分析 該設計我們使用visualstudio2005軟件進行代碼編寫,安裝驅動,在加密鎖中寫入用戶名,密碼。通過頁面來進行身份認證的測試。第四章 系統(tǒng)實現(xiàn)與系統(tǒng)測試4.1加密鎖內部結構圖:keyid固化硬件加密算法512字節(jié)數(shù)據(jù)儲存區(qū)-可讀可寫密碼

13、區(qū)(儲存讀寫密碼)硬件增強算法儲存增強算法密碼320到430的儲存空間用于儲存網(wǎng)站及相關的信息 加密鎖內部結構4.2 usbkey身份認證驗證原理模塊:服務器端產生隨機數(shù)服務器端使用相應的算法對隨機數(shù)時行加密,生成服務端驗證碼服務器端將隨機數(shù)發(fā)給客戶端服務器端將服務器端驗證碼與從客戶端返回的客戶端驗證碼相比較,如果相同,則為合法用戶,否則為非法用戶客戶端使用加密鎖對隨機數(shù)進行加密后,生成客戶端驗證碼并返回給服務器端usbkey身份認證驗證原理模塊圖4.3部分設計成果圖片展示 圖一、沒有插入usbkey 圖二、沒有插入usbkey 點擊提交后的效果 圖三、插入usbkey,并且已經寫入用戶名和密

14、碼 圖四、插入usbkey后,返回后的效果圖示 圖五、插入usbkey 返回后修改隨機數(shù)所得到的效果4.4 相關設計代碼 4.4.1 前臺代碼 0; ) i -= 4; var digit = ( n i ) & 0xf; if (!start | digit != 0) start = false; result += digitarraydigit; return ( result = ? 0 : result );function button1_click() var devicepath,ret,n,mylen;try/建立操作我們的鎖的控件對象,用于操作我們的鎖 var aobje

15、ct = new activexobject(syunew3a.s_simnew3); /查找是否存在鎖,這里使用了findport函數(shù)devicepath = aobject.findport(0);if( aobject.lasterror!= 0 )window.alert ( 沒有發(fā)現(xiàn)加密鎖,請插入加密鎖!);return ; /讀取鎖的唯一id form1.keyid.value=tohex(aobject.getid_1(devicepath)+tohex(aobject.getid_2(devicepath);/getid_1()返回指定加密鎖的id號的前4個字節(jié);加密鎖的id號

16、由8個字節(jié)組成,getid_2()功能:返回指定設備路徑的加密鎖的id號的后4個字節(jié); if( aobject.lasterror!= 0 )/返回結果如果lasterror的值為0,則表示方法執(zhí)行成功,則返回結果為該加密鎖的id號的前4個字節(jié)。如果lasterror值為其它值,則表示方法失敗,錯誤原因可以參見錯誤代碼含義 window.alert( err to getid,errcode is:+aobject.lasterror.tostring(); return ;/獲取設置在鎖中的用戶名,使用默認的讀密碼ffffffff,ffffffffret=aobject.yreadex(0,

17、1,ffffffff,ffffffff,devicepath);/yreadex ()功能:從加密鎖的指定儲存空間地址讀出數(shù)據(jù),該函數(shù)用于讀取一批數(shù)據(jù)mylen =aobject.getbuf(0);/在調用yreadex方法后,應立即調用getbuf方法從數(shù)據(jù)緩沖區(qū)中取回數(shù)據(jù),如果返回結果為0,則表示方法執(zhí)行成功,調用getbuf方法從數(shù)據(jù)緩沖區(qū)中取回數(shù)據(jù)。如果為其它值,則表示方法失敗form1.username.value=aobject.yreadstring(1,mylen, ffffffff, ffffffff, devicepath);/yreadstring ( )功能:從加密鎖

18、的指定起始位置讀取字符串,返回結果如果lasterror的值為0,則表示方法執(zhí)行成功,則返回結果為加密鎖address的儲存空間中儲存的字符串。if( aobject.lasterror!= 0 )window.alert( err to getusername,errcode is:+aobject.lasterror.tostring();return ;/獲到設置在鎖中的用戶密碼,使用默認的讀密碼ffffffff,ffffffffret=aobject.yreadex(20,1,ffffffff,ffffffff,devicepath);/mylen =aobject.getbuf(0)

19、;form1.password.value=aobject.yreadstring(21,mylen,ffffffff, ffffffff, devicepath);/21表示讀出的字符串儲存在加密鎖的起始位置是21if( aobject.lasterror!= 0 )window.alert( err to getpwd,errcode is:+aobject.lasterror.tostring();return ;/這里返回對隨機數(shù)的hash結果form1.return_encdata.value=aobject.encstring(form1.rnd.value,devicepath)

20、;/encstring()功能:使用增強算法對字符串進行加密,form1.rnd.value是要加密的字符串if( aobject.lasterror!= 0 )window.alert( err to strenc,errcode is:+aobject.lasterror.tostring();return ; form1.submit();catch (e) alert( + : + e.message);-                 身份認證的原理概述a、第一種方法只是簡單地從客戶端讀取鎖

21、的唯一id或從鎖中讀取用戶的用戶名及密碼,這樣就容易被一些黑客編寫一些程序對這些進行模仿,從而繞過從客戶端讀取加密鎖。b、方法二則是先從服務器端生產一個隨機數(shù),然后將該隨機數(shù)發(fā)給客戶端,同時服務器端使用與鎖對應的增強算法對該隨機數(shù)進行加密,生成一服務器端驗證碼;c、而在客戶端,在獲得服務器商發(fā)過來的隨機數(shù)后,客戶端使用對應的算法同樣對該隨機數(shù)進行加密,生成一客戶端驗證碼,返回給服務器端,d、如果相同,則為合法用戶,如果不相同,則為非法用戶。e、只有在服務器的加密密鑰與設置在鎖中的加密密鑰一致時,兩邊加密的結果才能相符,才能被合法驗證。 4.4.2 后臺代碼 using system;using

22、 system.data;using system.configuration;using system.web;using system.web.security;using system.web.ui;using system.web.ui.webcontrols;using system.web.ui.webcontrols.webparts;using system.web.ui.htmlcontrols;namespace testkey public partial class _default : system.web.ui.page protected void page_lo

23、ad(object sender, eventargs e) this.title = usbkey客戶服務端身份認證; if (keyid.text = ) system.random random = new system.random();/system.random類生成隨機數(shù).next()返回一個02147483647之間的整數(shù) sessionrnd = rnd.text = random.next().tostring(); protected void button1_click(object sender, eventargs e) /獲取客戶端返回的唯一id response

24、.write(); response.write(keyid是:); response.write(keyid.text); response.write(); /獲取客戶端返回設置在key中的用戶名 response.write(); response.write(用戶名是:); response.write(username.text); response.write(); /獲取客戶端返回設置在key中的用戶登錄密碼 response.write(); response.write(用戶登錄密碼是:); response.write(password.text); response.wr

25、ite(); /輸出當前隨機數(shù) response.write(); response.write(隨機數(shù)是:); response.write(sessionrnd); response.write(); / 返回用戶鎖對隨機數(shù)的hash結果 response.write(); response.write(用戶返回的hash結果是:); response.write(return_encdata.text); response.write(); /這里在服務器端對隨機數(shù)進行同樣的加密運算 string strdata, m_strenc, key; /key:即加密密鑰,這個要與設置在加密鎖

26、中的密鑰一致 key = 1234567890abcdef1234567890abcdef; /strdata:要進行加密的數(shù)據(jù) strdata = sessionrnd.tostring(); /在服務器端對數(shù)據(jù)進行加密運算 m_strenc = global.m_softkey.strenc(strdata, key);/strdata是要加密的數(shù)據(jù)。key是密鑰 response.write(); response.write(服務器要運算的隨機數(shù)是:); response.write(strdata); response.write(); response.write(); respo

27、nse.write(服務器hash的結果是:); response.write(m_strenc); response.write(); /比較客戶端加密鎖返回的加密結果與服務端的加密結果是否相符,如果相符就認為是合法用戶,由于使用了隨機數(shù),從而實現(xiàn)了一次一密的高安全性,可以用于高安全性的身份驗證 if (m_strenc = return_encdata.text) response.write(該用戶是合法用戶); / response.redirect(); else response.write(該用戶不是合法用戶); response.write(); protected void

28、keyid_textchanged(object sender, eventargs e) protected void username_textchanged(object sender, eventargs e) protected void password_textchanged(object sender, eventargs e) protected void rnd_textchanged(object sender, eventargs e) protected void return_encdata_textchanged(object sender, eventargs

29、e) 增強加密算法 public string strenc(string instring, string key)/使用增強算法strenc(),加密字符串,instring是要加密的字符串,key是加密密鑰,提示:要加密字符串以8個字節(jié)為一個分組;要加密的字符串少于8個字節(jié)時,不足的字節(jié)補數(shù)據(jù)0;要加密的字符串大于8個字節(jié),但不是8的倍數(shù)時,多余的數(shù)據(jù)不作加密處理 byte b, outb; byte temp = new byte8, outtemp = new byte8;/字符串的加密過程,是先將字符串轉化為字節(jié)數(shù)組,然后調用cal函數(shù)對數(shù)據(jù)進行加密,加密后的數(shù)據(jù)將會以16進制字符

30、串的形式返回,所以加密后的字符串的長度是原來要加密字符串的長度(含結束字符)的兩倍,且至少不少于16個字符串, int n, i, nlen, outlen; string outstring; nlen = lstrlena(instring) + 1; if (nlen 8) outlen = 8; else outlen = nlen; b = new byteoutlen; outb = new byteoutlen; copystringtobyte(b, instring, nlen); b.copyto(outb, 0); for (n = 0; n = outlen - 8;

31、n = n + 8) for (i = 0; i 8; i+) tempi = bi + n; encode(temp, outtemp, key); for (i = 0; i 8; i+) outbi = outtempi + n; outstring = ; for (n = 0; n = outlen - 1; n+) outstring = outstring + outbn.tostring(x2); return outstring; 第五章 小結5.1、usbkey計中遇到的問題在本次在系統(tǒng)的開發(fā)中,我們遇到了不少的問題,其中遇到的主要問題是開發(fā)出類似于網(wǎng)銀登錄的基于b/s的使用ukey登錄的身份認證系統(tǒng),以實現(xiàn)不同

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論