數(shù)字電視用戶遠(yuǎn)程繳費(fèi)加密系統(tǒng)設(shè)計(jì)
目前,計(jì)算機(jī)大批量數(shù)據(jù)存儲(chǔ)的安全問(wèn)題、敏感數(shù)據(jù)的防竊取和防篡改問(wèn)題越來(lái)越引起人們的重視。數(shù)據(jù)庫(kù)系統(tǒng)作為計(jì)算機(jī)信息系統(tǒng)的核心部件,數(shù)據(jù)庫(kù)文件作為信息的聚集體,其安全性將
是信息產(chǎn)業(yè)的重中之重。
與傳統(tǒng)的通信加密技術(shù)相比,數(shù)據(jù)庫(kù)存儲(chǔ)加密有其自身的特點(diǎn)和要求。數(shù)據(jù)庫(kù)存儲(chǔ)加密的主要目的是按照用戶的要求將敏感數(shù)據(jù)加密存儲(chǔ),防止非法用戶采用其它手段獲取數(shù)據(jù),同時(shí)保證合法用戶通過(guò)數(shù)據(jù)庫(kù)加密系統(tǒng)仍能正常訪問(wèn)數(shù)據(jù)。因此,數(shù)據(jù)庫(kù)存儲(chǔ)加密系統(tǒng)的開(kāi)發(fā)原則是:強(qiáng)調(diào)安全,保證效率,保持?jǐn)?shù)據(jù)庫(kù)特點(diǎn)。
一、整體概述
本系統(tǒng)是把數(shù)據(jù)庫(kù)加密與一個(gè)基于Web平臺(tái)的應(yīng)用系統(tǒng)相結(jié)合,完成對(duì)數(shù)字電視用管系統(tǒng)的數(shù)據(jù)庫(kù)加密實(shí)現(xiàn),使系統(tǒng)的安全性得到提高。
本系統(tǒng)使用JSP技術(shù)編寫業(yè)務(wù)邏輯。JSP技術(shù)的本質(zhì)是JAVA語(yǔ)言,通過(guò)這種技術(shù)可以利用JAVA語(yǔ)言的特性實(shí)現(xiàn)動(dòng)態(tài)網(wǎng)頁(yè)的功能,從而實(shí)現(xiàn)復(fù)雜的業(yè)務(wù)邏輯。應(yīng)用服務(wù)器采用Tomcatl解釋和執(zhí)行JSP程序,并傳送給Web服務(wù)器,使得應(yīng)用邏輯能夠在網(wǎng)頁(yè)中體現(xiàn)出來(lái)。后端使用MySQL作為數(shù)據(jù)庫(kù)服務(wù)器。JSP和MySQL之間使用JDBC連接。JDBC是JAVA語(yǔ)言和數(shù)據(jù)庫(kù)服務(wù)器之間的標(biāo)準(zhǔn)接口,通過(guò)它,JAVA得以操作數(shù)據(jù)庫(kù)資源。
本系統(tǒng)的整體功能為:
(1)操作者的權(quán)限層次要有明確的分類,進(jìn)入系統(tǒng)時(shí)要進(jìn)行身份認(rèn)證;
(2)出于對(duì)數(shù)字電視用戶個(gè)人隱私的負(fù)責(zé),數(shù)字電視用戶詳細(xì)信息只能由數(shù)字電視高級(jí)管理人員調(diào)閱,其它任何人包括普通操作人員都無(wú)權(quán)查閱。
本系統(tǒng)的系統(tǒng)框架如圖1所示。

這個(gè)系統(tǒng)是根據(jù)Web應(yīng)用的三層服務(wù)結(jié)構(gòu)構(gòu)建起來(lái)的,即系統(tǒng)邏輯結(jié)構(gòu)分為表示層、業(yè)務(wù)邏輯層和數(shù)據(jù)服務(wù)層。
表示層收集用戶數(shù)據(jù),通過(guò)控件提交自己的數(shù)據(jù),并把用戶想要查詢的數(shù)據(jù)進(jìn)行展示。主要完成數(shù)據(jù)查詢的轉(zhuǎn)換、加密與解密等任務(wù)。
業(yè)務(wù)邏輯層用Java Servlet實(shí)現(xiàn),主要完成包括數(shù)據(jù)庫(kù)的連接、對(duì)數(shù)據(jù)的操作,接受客戶端的請(qǐng)求、執(zhí)行密文查詢、把結(jié)果返回給用戶端等,該層還屏蔽了數(shù)據(jù)庫(kù)的訪問(wèn)方式及路徑,在一定程度上阻止了對(duì)數(shù)據(jù)庫(kù)的攻擊。
數(shù)據(jù)服務(wù)層是數(shù)據(jù)庫(kù)服務(wù)器,主要由一個(gè)數(shù)據(jù)庫(kù)管理系統(tǒng)來(lái)實(shí)現(xiàn),采用MySQL數(shù)據(jù)庫(kù),它通過(guò)中間層來(lái)連接用戶操作。
用戶通過(guò)瀏覽器向服務(wù)器發(fā)送請(qǐng)求,Web服務(wù)器對(duì)需要訪問(wèn)數(shù)據(jù)庫(kù)的請(qǐng)求交中間件處理,對(duì)需要加密的數(shù)據(jù)由加,解密模塊處理。
用戶查詢加密數(shù)據(jù)庫(kù),系統(tǒng)的處理流程過(guò)程如下:
(1)瀏覽器的用戶程序發(fā)出連接數(shù)據(jù)庫(kù)請(qǐng)求,即用戶登錄數(shù)據(jù)庫(kù)。
(2)系統(tǒng)根據(jù)身份認(rèn)證機(jī)制判斷用戶身份。
(3)用戶通過(guò)用戶界面向數(shù)據(jù)庫(kù)加密后的系統(tǒng)提供用戶密鑰及訪問(wèn)請(qǐng)求。
(4)系統(tǒng)根據(jù)訪問(wèn)權(quán)限判斷是否響應(yīng)用戶的請(qǐng)求。
(5)查詢加密配置文件,判斷加密類型、加密粒度、采用的加密算法和加密密鑰。
(6)數(shù)據(jù)庫(kù)加密,解密引擎把用戶請(qǐng)求轉(zhuǎn)化為原數(shù)據(jù)庫(kù)系統(tǒng)可以操作的請(qǐng)求向原數(shù)據(jù)庫(kù)提交查詢請(qǐng)求。
(7)原數(shù)據(jù)庫(kù)系統(tǒng)返回與用戶安全等級(jí)相對(duì)應(yīng)的密文數(shù)據(jù)給密文管理系統(tǒng)。
(8)密文管理系統(tǒng)查詢加密字典、對(duì)比安全等級(jí)標(biāo)志,在授權(quán)訪問(wèn)的情況下,獲得密鑰,將密文數(shù)據(jù)解密為明文數(shù)據(jù)返回給用戶。
(9)用戶程序完成數(shù)據(jù)庫(kù)訪問(wèn),請(qǐng)求斷開(kāi)連接。
(10)服務(wù)器接到請(qǐng)求,兩通信模塊斷開(kāi)連接。
二、用戶管理模塊的設(shè)計(jì)與實(shí)現(xiàn)
1、用戶管理模塊的設(shè)計(jì)
表示層包含一個(gè)對(duì)允許使用應(yīng)用系統(tǒng)的用戶及其可以執(zhí)行的功能進(jìn)行控制的管理功能模塊,簡(jiǎn)稱為用戶管理模塊,負(fù)責(zé)檢查每一個(gè)請(qǐng)求服務(wù)的用戶的身份。對(duì)于那些非法的或被拒絕提供服務(wù)的用戶請(qǐng)求,用戶管理模塊將他們阻擋在網(wǎng)絡(luò)應(yīng)用系統(tǒng)之外;對(duì)于那些合法的用戶請(qǐng)求,用戶管理模塊能夠根據(jù)用戶請(qǐng)求的類型和用戶合法身份的級(jí)別,限制和管理這些合法用戶在網(wǎng)絡(luò)應(yīng)用系統(tǒng)中使用的功能和能得到的服務(wù)種類。用戶管理模塊需要實(shí)現(xiàn)下述的兩個(gè)功能。
(1)實(shí)現(xiàn)用戶的身份校驗(yàn)功能
身份,是指包括認(rèn)證和用戶授權(quán)的安全體系結(jié)構(gòu)要素。認(rèn)證適用于那些使用特定的憑證來(lái)標(biāo)識(shí)自己的用戶,例如用戶名和口令。授權(quán)是指對(duì)順利地被標(biāo)識(shí)了身份的個(gè)人的繼續(xù)訪問(wèn)權(quán)利的特 征,通過(guò)授權(quán)工作,可以控制用戶的操作,設(shè)定用戶可以做和不可以做的一些事情。用戶身份校驗(yàn)是驗(yàn)證用戶合法性的重要功能。只有被確認(rèn)是合法用戶之后,應(yīng)用系統(tǒng)使用者才有可能執(zhí)行其要求的功能,得到其要求的服務(wù)。
(2)實(shí)現(xiàn)用戶的級(jí)別管理
在所有可以使用應(yīng)用系統(tǒng)功能的用戶中,不同級(jí)別的用戶可以使用的功能是不同的。
2、用戶管理模塊的實(shí)現(xiàn)
用戶管理模塊中的身份認(rèn)證模塊是整個(gè)系統(tǒng)的人口模塊,其功能是確認(rèn)操作用戶的身份及權(quán)限,身份認(rèn)證模塊的流程設(shè)計(jì)如圖2所示。

用戶管理模塊中的身份認(rèn)證及權(quán)限認(rèn)證是基于數(shù)據(jù)庫(kù)加密模型中的角色管理:首先定義用戶角色,然后由系統(tǒng)管理員創(chuàng)建及刪除用戶角色,對(duì)用戶角色授權(quán),并進(jìn)行安全級(jí)別與安全范圍的標(biāo)記;其次創(chuàng)建數(shù)據(jù)庫(kù)用戶,由系統(tǒng)管理員通過(guò)操作前端系統(tǒng)界面,由程序調(diào)用DBMS的命令把用戶角色授予數(shù)據(jù)庫(kù)用戶,并將數(shù)據(jù)庫(kù)用戶實(shí)際連接到數(shù)據(jù)庫(kù)上設(shè)置的登錄用戶。系統(tǒng)登錄用戶要由系統(tǒng)安全管理員進(jìn)行安全級(jí)別與安全范圍的櫪記,登錄用戶與角色之間的授權(quán)必須滿足強(qiáng)制訪問(wèn)控制的要求;最后創(chuàng)建操作用戶,這部分的功能主要是建立操作用戶同數(shù)據(jù)庫(kù)用戶的映射,系統(tǒng)根據(jù)數(shù)據(jù)庫(kù)用戶來(lái)確定操作用戶的訪問(wèn)權(quán)限。這樣可以確保操作用戶不能用自己的帳號(hào)和密碼繞過(guò)系統(tǒng)直接訪問(wèn)數(shù)據(jù)庫(kù)系統(tǒng),增強(qiáng)了系統(tǒng)安全性,同時(shí)用消息摘要保存口令。
(1)口令驗(yàn)證
系統(tǒng)經(jīng)常需要驗(yàn)證用戶輸入的口令是否正確,如果將正確的用戶口令直接保存在數(shù)據(jù)庫(kù)中,則很容易被黑客竊取到,因此只可以保存口令的消息摘要。
系統(tǒng)登陸后,根據(jù)用戶輸入口令計(jì)算消息摘要,根據(jù)用戶輸入的帳號(hào)在數(shù)據(jù)庫(kù)中找到預(yù)先保存的正確的口令摘要,比較兩個(gè)消息摘要是否相等,若不相等則說(shuō)明輸入的口令不正確口令不正確。
(2)角色劃分
角色劃分的制度是基于角色的安全管理系統(tǒng)實(shí)施安全策略的一個(gè)關(guān)鍵問(wèn)題。粒度過(guò)大,將會(huì)影響數(shù)據(jù)和數(shù)據(jù)庫(kù)系統(tǒng)的安全性,不易實(shí)測(cè)最小特權(quán)原則;粒度過(guò)小,角色數(shù)量的增加,提高了角色管理的復(fù)雜性。本系統(tǒng)根據(jù)每個(gè)崗位定義一個(gè)角色,角色關(guān)系在數(shù)據(jù)庫(kù)中的存儲(chǔ)如表1的設(shè)計(jì),系統(tǒng)涉及的角色有以下4種。

①匿名角色
級(jí)別最低,不存在身份驗(yàn)證,只能用于瀏覽,不能進(jìn)行任何操作。
②用戶角色
級(jí)別低,不能獲取級(jí)別高或同級(jí)別的信息??陕?lián)機(jī)注冊(cè)成為用戶,設(shè)定自己的登陸名及密碼;可按用戶姓名、地址自定義查詢;可基于查詢結(jié)果進(jìn)行繳費(fèi),若查詢電視卡仍有余額,則不用繳費(fèi),若無(wú)余額則可以繳費(fèi),繳費(fèi)結(jié)果返回給用戶;可對(duì)已經(jīng)進(jìn)行的繳費(fèi)情況查看或撤銷;繳費(fèi)成功后可查詢開(kāi)通的電視節(jié)目信息和電視卡余額。
③操作員角色
權(quán)限級(jí)別由管理員設(shè)定,可查詢比其級(jí)別低的信息??刹榭从脩舻睦U費(fèi)情況、可查詢用戶基本信息、可創(chuàng)建新用戶、可對(duì)用戶基本信息進(jìn)行修改。
④管理員角色
級(jí)別最高,負(fù)責(zé)對(duì)系統(tǒng)和數(shù)據(jù)的訪問(wèn),存取的權(quán)限,分別賦予操作員和用戶不同的權(quán)限級(jí)別,并可隨時(shí)根據(jù)系統(tǒng)的要求或變化對(duì)角色的存取權(quán)限進(jìn)行管理,包括對(duì)可傳遞性的限制。只有授權(quán)的用戶能夠?qū)ο到y(tǒng)進(jìn)行訪問(wèn),防止沒(méi)有權(quán)限的人員或進(jìn)程登錄進(jìn)入系統(tǒng)。
根據(jù)角色分配相應(yīng)的訪問(wèn)權(quán)限,最后將角色授予用戶,建立用戶和角色的映射關(guān)系,系統(tǒng)用戶關(guān)系表設(shè)計(jì)如表2所示。

主鍵約束:pk_hosID
唯一索引:hosName(登錄時(shí)用戶名)
此表在關(guān)系到不同角色時(shí)會(huì)有不同,這里不再一一敘述。
這樣設(shè)計(jì)不僅保證了數(shù)據(jù)庫(kù)的安全性,簡(jiǎn)化了授權(quán)操作,還降低了權(quán)限管理的負(fù)擔(dān),減少系統(tǒng)的安全漏洞。同時(shí)根據(jù)RBAC存取的安全原則,對(duì)角色制定了約束規(guī)則。
規(guī)則1:在一次會(huì)話過(guò)程中,用戶能且須激活所擁有的角色集中的某一種角色。
規(guī)則2:任何一個(gè)用戶不能同時(shí)擁有同一個(gè)機(jī)構(gòu)中的兩個(gè)角色。
在系統(tǒng)設(shè)計(jì)中,通過(guò)引入角色約束規(guī)則,在為用戶分配角色時(shí),以及用戶激活角色集開(kāi)始一次會(huì)話時(shí)。系統(tǒng)根據(jù)角色的各種約束原則實(shí)施角色約束規(guī)則,實(shí)現(xiàn)本系統(tǒng)的安全訪問(wèn)。在本模塊
中,確認(rèn)用戶身份中實(shí)現(xiàn)規(guī)則1,確認(rèn)用戶權(quán)限中實(shí)現(xiàn)了規(guī)則2和規(guī)則3。
3、數(shù)據(jù)服務(wù)層的設(shè)計(jì)與實(shí)現(xiàn)
這里的數(shù)據(jù)服務(wù)層所采用的數(shù)據(jù)庫(kù)是MySQL,該數(shù)據(jù)庫(kù)不但存儲(chǔ)有敏感數(shù)據(jù)的密文和供查詢的關(guān)鍵字的索引,而且還有恢復(fù)密文的相關(guān)信息,包括采用的解密算法和密鑰信息等。使用數(shù)據(jù)庫(kù)之前首先需要建立數(shù)據(jù)庫(kù),所有的密文信息存儲(chǔ)在數(shù)據(jù)庫(kù)hospital中。
(1)敏感數(shù)據(jù)加密保護(hù)
數(shù)字電視用管系統(tǒng)不同于其他數(shù)據(jù)庫(kù)系統(tǒng)數(shù)據(jù)的保密性非常重要,盡管已經(jīng)在系統(tǒng)功能上為不同的用戶規(guī)定了不同的訪問(wèn)權(quán)限,但是對(duì)于最高權(quán)限擁有者如數(shù)據(jù)庫(kù)管理員(DBA)。訪問(wèn)控制策略不能阻擋其對(duì)數(shù)據(jù)的知曉權(quán)。但就是DBA也不應(yīng)該知道用戶的銀行賬戶信息,這就需要有進(jìn)一步的安全措施一數(shù)據(jù)庫(kù)加密技術(shù);由于系統(tǒng)在Web上運(yùn)行,免不了遠(yuǎn)程的數(shù)據(jù)交換,為防止傳輸過(guò)程中數(shù)據(jù)被截取,也應(yīng)該采取數(shù)據(jù)加密技術(shù)。綜上所述,在數(shù)字電視用管系統(tǒng)中對(duì)一些敏感數(shù)據(jù)采用一定的加密手段是非常必要的。
在設(shè)計(jì)系統(tǒng)加密實(shí)現(xiàn)時(shí),首先要確定哪些數(shù)據(jù)需要加密以及哪些數(shù)據(jù)應(yīng)該采用明文,采用風(fēng)險(xiǎn)分析步驟來(lái)進(jìn)行決策。在風(fēng)險(xiǎn)分析中,需要根據(jù)不同的敏感程度來(lái)對(duì)數(shù)據(jù)進(jìn)行分類。在考慮到數(shù)據(jù)加密的特殊性、數(shù)據(jù)加密與解密是比較費(fèi)時(shí)的操作、數(shù)據(jù)加密與解密程序會(huì)占用大量的系統(tǒng)資源的情況下,本文采用的是對(duì)風(fēng)險(xiǎn)最大的數(shù)據(jù)進(jìn)行加密:所有關(guān)于用戶id和password的信息必須加密,所有關(guān)于用戶賬號(hào)相關(guān)的信息必須加密。
(2)密鑰存儲(chǔ)模塊
服務(wù)器端加密算法的密鑰存儲(chǔ)是很重要的,特別在Web平臺(tái),給密鑰的存儲(chǔ)帶來(lái)了更大的隱患。
本設(shè)計(jì)對(duì)密鑰庫(kù)使用了兩套口令:一是密鑰庫(kù)口令,二是用戶口令。
首先,使用密鑰庫(kù)口令對(duì)整個(gè)密鑰庫(kù)文件進(jìn)行加密。訪問(wèn)密鑰庫(kù)之前,必須使用密鑰庫(kù)口令來(lái)打開(kāi)密鑰庫(kù)。它對(duì)密鑰庫(kù)中的密鑰實(shí)施了外部保護(hù),保證非系統(tǒng)用戶不能訪問(wèn)密鑰庫(kù)中的任何信息。
其次,每個(gè)用戶都設(shè)置一個(gè)口令,使用該口令加密對(duì)應(yīng)密鑰項(xiàng)。用戶口令對(duì)密鑰實(shí)施了內(nèi)部保護(hù)。它確保了只有擁有用戶口令的用戶才可以訪問(wèn)和管理該密鑰項(xiàng)。用戶在密鑰庫(kù)中只能管理自己的密鑰,無(wú)權(quán)操縱其他實(shí)體的密鑰。并且用戶口令提高了對(duì)密鑰的保密強(qiáng)度,即使密鑰庫(kù)口令被破解或泄漏,也不會(huì)殃及其中的密鑰項(xiàng)。表3是對(duì)在數(shù)據(jù)庫(kù)中存儲(chǔ)的密鑰關(guān)系表的設(shè)計(jì)。
4、業(yè)務(wù)邏輯層的設(shè)計(jì)與實(shí)現(xiàn)
作為表示層和數(shù)據(jù)服務(wù)層橋梁的業(yè)務(wù)服務(wù)層可有多個(gè)SeMet實(shí)現(xiàn)。java SeN-let接受客戶端的請(qǐng)求、按照用戶的請(qǐng)求執(zhí)行密文查詢,然后把結(jié)果返回給用戶。
(1)數(shù)據(jù)庫(kù)連接模塊
此模塊主要任務(wù)是和數(shù)據(jù)庫(kù)進(jìn)行連接,并讀取和存入數(shù)據(jù),系統(tǒng)程序采用JDBC-ODBC與數(shù)據(jù)庫(kù)建立連接,將用戶數(shù)據(jù)請(qǐng)求轉(zhuǎn)換為相應(yīng)的SQL語(yǔ)句,對(duì)數(shù)據(jù)庫(kù)進(jìn)行查詢、添加、刪除和修改等操作。
①請(qǐng)求連接
由于Connection是一個(gè)非常耗資源的對(duì)象,因此在這里使用了單例模式(Sin-gleton Design Patton)來(lái)設(shè)計(jì)DBConnec-tion類,保證了整個(gè)生命周期內(nèi)只存在一個(gè)ConnecOon對(duì)象,該對(duì)象可以被其他類重復(fù)利用,這樣可以大大節(jié)省系統(tǒng)資源。
②向數(shù)據(jù)庫(kù)發(fā)送SQL語(yǔ)句
連接上數(shù)據(jù)庫(kù)后,下一步就是對(duì)數(shù)據(jù)庫(kù)進(jìn)行具體操作,如查詢、修改、刪除等。在這一過(guò)程中主要使用了Statement類。Statement是通過(guò)活動(dòng)鏈接發(fā)送SQL語(yǔ)句到數(shù)據(jù)庫(kù)并返回結(jié)果的對(duì)象。
③處理由SQL操作返回的結(jié)果集
經(jīng)過(guò)DBMS處理,SQL操作返回的結(jié)果將以特定的形式顯示給用戶,ResultSet用來(lái)管理輸出的格式,使用ResultSet的next()方法“周游”它的行;在當(dāng)前行中,調(diào)用getXXX()方法就可以獲取單個(gè)列的值,這里的×××代表要返回的java數(shù)據(jù)類型。
(2)密鑰加密模塊
密鑰加密模塊主要實(shí)現(xiàn)對(duì)IDEA密鑰的加密,以保證傳輸過(guò)程的安全。如上所述,本文采用的是基于大質(zhì)數(shù)分解的公鑰體制。其主要處理流程為:首先產(chǎn)生兩個(gè)大素?cái)?shù)構(gòu)造出一對(duì)公鑰和私鑰;然后利用公鑰,對(duì)IDEA算法的密鑰進(jìn)行加密。
5、數(shù)據(jù)加密模塊流程
用戶對(duì)數(shù)據(jù)進(jìn)行增、刪、改等操作時(shí),涉及到明文數(shù)據(jù)到密文數(shù)據(jù)的轉(zhuǎn)換,需要數(shù)據(jù)加密模塊。數(shù)據(jù)加密模塊通過(guò)在數(shù)據(jù)操作過(guò)程中隱藏的數(shù)據(jù)窗口來(lái)實(shí)現(xiàn),用戶對(duì)明文數(shù)據(jù)窗口的操作同步映射到隱藏的密文數(shù)據(jù)窗口中,對(duì)明文數(shù)據(jù)的保存操作同步映射密文數(shù)據(jù)窗口的保存操作。
數(shù)據(jù)加密模塊的流程如下:
輸入:明文信息。
輸出:加密數(shù)據(jù)庫(kù)中的密文信息。
(1)在用戶將明文信息調(diào)入數(shù)據(jù)窗口后,利用主鍵將相應(yīng)的密文數(shù)據(jù)的相應(yīng)字段調(diào)入隱藏的密文數(shù)據(jù)窗口;
(2) lf用戶執(zhí)行增加操作Then;
(3)相應(yīng)在隱藏的密文數(shù)據(jù)窗口中增加;
(4)對(duì)用戶錄入的新增加的數(shù)據(jù)用加密函數(shù)加密后寫入密文數(shù)據(jù)窗口;
(5) Else;
(6)將用戶對(duì)明文數(shù)據(jù)窗口中的某一行、某一列數(shù)據(jù)修改后的數(shù)據(jù)加密后寫入密文數(shù)據(jù)窗口;
(7) End if;
(8)在明文數(shù)據(jù)窗口Update后,密文數(shù)據(jù)窗口同時(shí)執(zhí)行Update操作。
其中使用算法加密數(shù)據(jù)的步驟為:
(1)生成一個(gè)包含要加密數(shù)據(jù)的字節(jié)數(shù)組;
(2)調(diào)用Cipher.getlnstance建立一個(gè)Cipher實(shí)例;
(3)通過(guò)調(diào)用init方法并傳遞密鑰,在加密模式下初始化這個(gè)Cipher;
(4)調(diào)用doFinal方法,傳遞表示要加密數(shù)據(jù)的字節(jié)數(shù)組。
由于存儲(chǔ)在數(shù)據(jù)庫(kù)中的數(shù)據(jù)經(jīng)過(guò)加密,在向數(shù)據(jù)庫(kù)提交時(shí)采用的是字符串形式,在加密數(shù)據(jù)中出現(xiàn)的字符串隨機(jī),所以出現(xiàn)了一些預(yù)料不到的問(wèn)題。例如:如果在密文字串中如果出現(xiàn)了‘/0’、 ‘/,’、或者‘)’,那么系統(tǒng)認(rèn)為此字符串已經(jīng)結(jié)束導(dǎo)致數(shù)據(jù)處理出錯(cuò),甚至可能認(rèn)為此語(yǔ)句結(jié)束而報(bào)錯(cuò)。
針對(duì)這點(diǎn),提出解決方法:將密文數(shù)據(jù)重新進(jìn)行編碼,使之杜絕以上三種符號(hào)的出現(xiàn)。在解密時(shí)再進(jìn)行反編碼恢復(fù)出數(shù)據(jù)的本來(lái)面目6我們采用的是Base64編碼過(guò)程,該過(guò)程將一個(gè)3個(gè)8位字符映射到4個(gè)6位字符中?;旧希鼘⒚苛挥成錇橐粋€(gè)八位的ASClI字符(稱它為Base64.是因?yàn)?個(gè)位能表示從0到63的數(shù),為64個(gè)可能的值),這樣就可以將二進(jìn)制數(shù)以合適的方式寫入到數(shù)據(jù)庫(kù)中。同時(shí),由于Base64編碼中出現(xiàn)了‘/0’,因此在我們的系統(tǒng)中采用的Base64編碼進(jìn)行了改造,改為用Oxff代替。同時(shí),由于在Javascript中所有字符都采用16位編碼(UTF-16)。因此本文將3個(gè)16位字符映射到8個(gè)16位字符中o這樣,問(wèn)題得到了很好的解決。
6、軟件測(cè)試問(wèn)題
軟件測(cè)試是保證軟件質(zhì)量的關(guān)鍵,是對(duì)需求分析、設(shè)計(jì)和軟件編碼的最后復(fù)審。針對(duì)本系統(tǒng)是否正確的保護(hù)了敏感數(shù)據(jù),我們進(jìn)行了一系列的端到端測(cè)試。
本系統(tǒng)采用先注冊(cè),后登陸的方式。因此采用端到端測(cè)試來(lái)測(cè)試登錄過(guò)程本身。必須測(cè)試有效和無(wú)效的用戶名和密碼,要注意到是否大小寫敏感,可以試多少次的限制,是否可以不登陸而
直接瀏覽某個(gè)頁(yè)面等。
采用用戶名和密碼聯(lián)合認(rèn)證機(jī)制控制用戶的訪問(wèn)權(quán)限,從而保證系統(tǒng)敏感數(shù)據(jù)的安全性。由于系統(tǒng)處于安全防護(hù)的中心位置,一旦用戶的口令被非法獲得,則攻擊者就獲得了該用戶的全部權(quán)
限,如果泄露密碼的是高權(quán)限用戶,那么主機(jī)和網(wǎng)絡(luò)就失去了安全性。
用戶口令的測(cè)試中,口令應(yīng)該為混合數(shù)字、大寫字母、以及小寫字母或標(biāo)點(diǎn),避免共享管理員口令,使用用戶組或其他方式代替。需檢測(cè)口令是否用加密方式保存,加密強(qiáng)度應(yīng)該足夠使一個(gè)
強(qiáng)大的工作站運(yùn)算一周才能破解。本系統(tǒng)采用用戶第一次登陸時(shí),強(qiáng)迫用戶該變口令,口令生存周期規(guī)定為最長(zhǎng)6個(gè)月,最短1個(gè)月。同時(shí)在口令歷史中最近使用過(guò)的5個(gè)口令不應(yīng)該再被使用。
一個(gè)用戶想在沒(méi)有登陸的條件下訪問(wèn)網(wǎng)頁(yè),應(yīng)用程序?qū)⑵仁刮覀兇_認(rèn)他們的身份,getRemoteUser方法返回經(jīng)過(guò)客戶端驗(yàn)證的用戶名。同時(shí)在應(yīng)用的Web部署描述文件中配置安全性。否則會(huì)返回"Authorization Failed"。
用戶登錄測(cè)試:
假如一個(gè)帳戶在短時(shí)間內(nèi)出現(xiàn)連續(xù)多次的登陸失敗記錄(例如在一個(gè)小時(shí)內(nèi)20次登陸失敗),立刻阻塞該帳戶,并通知用戶,但對(duì)于系統(tǒng)管理員帳戶不能做同樣處理,否則將可能被攻擊者利
用造成一次拒絕服務(wù)攻擊;
測(cè)試系統(tǒng)是否有超時(shí)的限制,用戶登陸后在一定時(shí)間內(nèi)(例如15分鐘)沒(méi)有點(diǎn)擊任何頁(yè)面.是否需要重新登陸才能正常使用;
當(dāng)一個(gè)用戶被解聘,他的帳戶應(yīng)該立刻被注銷。
在確定頁(yè)面要求請(qǐng)求為登陸用戶后,我們就需要限制那些扮演管理角色的用戶的訪問(wèn)權(quán)限。lsUserlnRole向container的安全機(jī)制訪問(wèn)一個(gè)特定的用戶是否在—個(gè)給定的安全角色中,如果角色超出權(quán)限部分,則返回"forbidden”。如果getRemo-teUser返回null值(這意味著沒(méi)有用戶被驗(yàn)證),那么lsUserlnRole就總會(huì)返回talse,getUserPrinciple總會(huì)返回一個(gè)null。這就意味著我們需要重新進(jìn)入登陸頁(yè)面。
7、安全性總結(jié)
本系統(tǒng)的設(shè)計(jì)目標(biāo)為:在目前的計(jì)算能力下,破譯所要花費(fèi)的如時(shí)間和工作量等成本非常昂貴,已經(jīng)遠(yuǎn)遠(yuǎn)超過(guò)秘密本身的價(jià)值;或者依據(jù)現(xiàn)實(shí)的技術(shù)條件,還沒(méi)有找到破譯的方法,滿足安全性要求。
(1)數(shù)據(jù)庫(kù)的安全
數(shù)據(jù)庫(kù)的安全要求是:一,不同的數(shù)據(jù)庫(kù)必須由具有相應(yīng)權(quán)限的人進(jìn)行相應(yīng)的操作;二,數(shù)據(jù)庫(kù)不會(huì)擴(kuò)散;三,數(shù)據(jù)庫(kù)不會(huì)被破壞。
對(duì)于第一點(diǎn),本系統(tǒng)會(huì)采用具有安全保障功能的數(shù)據(jù)庫(kù),并且對(duì)必要的字段進(jìn)行變換后的存儲(chǔ)處理;對(duì)第二點(diǎn),主要由環(huán)境安全性來(lái)保障;對(duì)第三點(diǎn),主要對(duì)數(shù)據(jù)庫(kù)進(jìn)行冗余等保護(hù)處理。
(2)算法的安全性
系統(tǒng)采用當(dāng)前成熟的IDEA、RSA和SHA-256散列算法作為核心算法,具有很高的加密強(qiáng)度。保證在用戶不知道密鑰的情況下,使用本系統(tǒng)保護(hù)的內(nèi)容短期內(nèi)是不可能被破解的。由于密鑰是在服務(wù)器端隨機(jī)產(chǎn)生并存放在數(shù)據(jù)庫(kù)中的,并由用戶口令保護(hù)。只要保證服務(wù)器端內(nèi)部的環(huán)境安全性,就可以同時(shí)保障密鑰的安全性,保證在本系統(tǒng)中不會(huì)造成密鑰的泄露。
(3)體系的安全性
密鑰在任何情況下不作明文存儲(chǔ)(包括在數(shù)據(jù)庫(kù)內(nèi))、密鑰在任何情況下不作明文傳輸(主要指在網(wǎng)絡(luò)上)、對(duì)密鑰進(jìn)行變換的算法具有最高級(jí)的加密強(qiáng)度并永不公布、在密鑰意外泄露時(shí)可以通過(guò)更改密鑰及更改用戶登錄權(quán)限等簡(jiǎn)單手段迅速處理,并且不會(huì)影響其它密鑰的安全性。
(4)環(huán)境的安全性
主要由服務(wù)器端內(nèi)部保障。包括內(nèi)部人員的安全、內(nèi)部設(shè)備的安全、內(nèi)部運(yùn)行機(jī)制的安全等。
小知識(shí)之Statement
Statement是 Java 執(zhí)行數(shù)據(jù)庫(kù)操作的一個(gè)重要方法,用于在已經(jīng)建立數(shù)據(jù)庫(kù)連接的基礎(chǔ)上,向數(shù)據(jù)庫(kù)發(fā)送要執(zhí)行的SQL語(yǔ)句。Statement對(duì)象,用于執(zhí)行不帶參數(shù)的簡(jiǎn)單SQL語(yǔ)句。









