天天看點

軟體安全技術

在高度保證企業應用程式安全的過程中我們不免會考慮到如下的安全需求,然後我們針對這些安全需求提出各種安全技術:

1、    完整性驗證(integrity verification)。也就是以防止我們需要的内容不被篡改,仍然不吃其真實性。

2、    機密性保持(confidentiality preservation)。通俗的說就是防止内容被别人讀懂。

3、    認證和通路授權(authenticity permission)。通俗的說就是對來訪者提供的資訊進行分析和判斷,進而确定來訪者身份。然後根據身份決定該來訪者具有什麼權限。

4、    不可抵賴的證據(nonrepudiation evidence)。舉個很簡單的例子,如果在網上進行相應的支付操作。如果我已經給他們錢了,但他們仍然說我沒給他們怎麼辦?好了,這裡你隻要明白我們後面的介紹的技術會解決這個問題的。

5、    審計證據(auditing evidence)。對一些安全性十分重要的資料操作進行紀錄和觀察。

加密技術是其它安全服務技術的基礎,他們的穿插使用相當廣泛。是以在學習軟體安全技術之前了解各種加密技術是相當重要的。

加密技術的分類

 消息摘要主要用于保持資料的完整性,我們經常聽到的校驗和就是消息摘要的一個特例。它的算法是一個單項函數。也就是直接将輸入的資料進行消息摘要提取,但絕不能從消息摘要生成原資料。消息摘要的算法分為如下幾類(最常用的是md5和sha-1):

md2:是一個速度很慢但相當安全的算法,它産生128位的摘要值。

md4:速度很快,但安全性下降。同樣産生128位的摘要值。

md5:是md4的一個更安全的版本,同時速度更快。也産生128位的摘要值。

sha:安全雜湊演算法,産生一個160位的摘要值。

sha-1:在克服sha的一些缺陷基礎上形成的雜湊演算法。

sha-256、sha-383 和 sha-512 提供更長的指紋,大小分别是 256 位、383 位和 512 位。

mac:消息認證碼,使用秘密密鑰和消息摘要算法來建立消息摘要。我們可能經常會疑問,我們有了消息摘要為什麼還要認證碼呢?聽我給你舉個例子,前面的提到的消息摘要,隻要有明文和算法,誰都可以生成同樣的消息摘要,但有時為了特殊的目的我們需要隻有特定的人才能生成這個摘要。好了,那怎麼辦?通過在生成消息摘要的過程中加入相應的密鑰,進而使生成的消息摘要在沒有密鑰的情況下難以生成。

  對稱密鑰應該是相當強壯的資訊加密算法。這和我們生活中的鑰匙極為相像。例如你家的門鎖可以有好幾把鑰匙,并且這些鑰匙都相同。在現實生活中,你可以将做好的鑰匙收遞手交給你的親人,但在網絡中就變了,你要通過網絡來傳遞這把鑰匙。是以對鑰匙的保護又需要相應的加密技術。好了,通過這個通俗的例子,你應該知道對稱密鑰幹什麼?它的弱點在哪裡?等問題的答案了吧。下面是一些最普通的對稱密鑰算法:

des:des(資料加密标準)是由 ibm 于上世紀 70 年代發明的,美國政府将其采納為标準,使用56位的密鑰。

3-des(tripledes):該算法被用來解決使用 des 技術的 56 位時密鑰日益減弱的強度,其方法是:使用兩個密鑰對明文運作 des 算法三次,進而得到 112 位有效密鑰強度。tripledes 有時稱為 desede(表示加密、解密和加密這三個階段)。

rc2和rc4:可以使用2048位的密鑰并且提供了一個十分安全的算法。他們都來自于領先的加密安全性公司 rsa security。

rc5:使用了一種可配置的密鑰大小。也來自領先的加密安全性公司 rsa security。

aes:aes(進階加密标準)取代 des 成為美國标準。它是由 joan daemen 和 vincent rijmen 發明的,也被稱為 rinjdael 算法。它是 128 位分組密碼,密鑰長度為 128 位、192 位或 256 位。

blowfish:這種算法是由 bruce schneier 開發的,它是一種具有從 32 位到 448 位(都是 8 的整數倍)可變密鑰長度的分組密碼,被設計用于在軟體中有效實作微處理器。

pbe。pbe(基于密碼的加密)可以與多種消息摘要和私鑰算法結合使用。

我們在介紹對稱密鑰的時候舉了一個例子,提到了密鑰傳輸的安全問題。并且在網絡中的傳輸雙方并不是我們現實中的“親人”關系。那麼公鑰正好解決了這個問題。我這裡舉個通俗的例子,例如你有個信箱(實體信箱),開着一個縫隙(公鑰),大家都能往裡塞東西,但是一旦賽進取,那可不是大家都能取到的,隻有擁有信箱鑰匙(私鑰)才能得到。哈哈!就這樣。公鑰就這樣,不要擔心它多難了解。當然當我們反過來了解的時候就有些和信箱不同的地方。也就是用私鑰加密的東西隻有對應的公鑰才能進行解密,這種算法經常被應用在數字簽名上。其實在現實中你可以将公鑰技術和私鑰技術結合起來完成資訊保密,因為公鑰的計算速度相當慢,比私鑰慢大約100-1000倍。下面是一些非對稱密鑰算法清單:

rsa:這個算法是最流行的公鑰密碼算法,使用長度可以變化的密鑰。

diffie-hellman:技術上将這種算法稱為密鑰協定算法。它不能用于加密,但可以用來允許雙方通過在公用通道上共享資訊來派生出秘鑰。然後這個密鑰可以用于私鑰加密。

需要注意的是私鑰和密鑰是成對的,并且不能用一個生成另外一個,特别是不能用公鑰生成私鑰,否則就麻煩了。

我們經常在論壇中中見到管理者、斑竹等身份辨別,并且我們更明白擁有不同的身份它們的權限也同樣有差别。但我們很想擁有管理者的權限,我們的突破口應該在哪裡呢?當然是獲得一個管理者的賬号,這樣就可以被系統的認證系統識别。通俗的說就是要讓系統的認證識别器确認你是管理者身份就可以了。呵呵,沒那麼容易,因為各個系統都具有嚴密的認證體系,不象一些小朋友做的認證邏輯處在sql語句邏輯上那麼簡單。

認證的實作方法多種多樣,真的,我以前做網站的時候總是想當然地進行使用者認證。但其基礎技術有如下清單:

基于密碼的身份認證

基于令牌的實體辨別和認證

基于生物測定學的認證

基于證書的認證

下面就分别将這些認證做一介紹:

太熟悉了,不是嗎?這裡隻很想告訴密碼暴露的過程以及保護的過程。我們通常見到的密碼認證方式是在傳輸過程中密碼完全暴露,并且在伺服器端的密碼存儲上也完全是明文的形式,造成的後果是密碼完全被暴露,很容易被監聽。那麼如何保護這些過程中的密碼呢?暫時的思路是:建立在安全傳輸層的基礎上,内部密碼不以明文形式出現。

功能我們不用說,當然是非常強大,但代價昂貴。你見過這樣的認證嗎?呵呵,很少的話,就了解一下就行了。

想想就知道了,你的指紋、眼睛視網膜等可真是獨一無二啊。呵呵,其複雜性也是很大的。我都不知道^^

近年來相當流行的認證技術應該是基于證書的認證。證書的概念和我們現實中的畢業證書、學位證書等沒有多大差别。上面可以記載一些事實資訊(特别是某一實體),那當然差别主要展現在數字技術的特殊需要上。其實證書就是一個資料塊,主要包括公開密鑰、主體相關的資訊、證書有效的日期、證書發行者的資訊和證書發行者生成的簽名。

不是“親人”那我們就得搞清楚對方是什麼?不然的話,我們怎麼能把“她”的東西拿來用呢?或者怎麼能把咱們的東西給“她”呢?“她”得拿出個什麼憑據吧?呵呵,那當然。這無可非議,可能現在你更急切的就是想知道這個證書的簽發和應用過程吧?好了。我們繼續。

我們前面已經談過将公鑰技術反過來可以應用于數字簽名。但這種前面誰都可以簽的,數字簽名僅僅能解決消息來源真是你擁有公鑰的主人,但并不能說明該主人就是一個多麼“可愛”的家夥。哎!完了,沒法确定她是否“可愛”了。但我倒有個主意,我們去找一個特别了解此人的人(當然要權威了)問問看此人是否信得過。哈哈,就是這樣,我們經常說的ca機構就是幹這事情的。爽!那麼整個過程如何呢?

其實整個過程很簡單,我就認為是二次數字簽名就是了。第一次首先需要證書的實體将自己的資訊和公鑰送出給ca,ca确認該組織的可信賴之後,就用自己的密鑰對該實體的資訊和公鑰進行簽名。最後被簽名的資訊會就叫證書。站在使用者的角度,使用者首先接到一個證書,當然會根據ca(可信)提供的公鑰進行解密,如果能解密,當然就可以獲得可信賴的資訊和實體公鑰。然後由實體公鑰再進行前面我們介紹的數字簽名解密步驟。呵呵,就這樣,由介紹完了。

安全套接字層(ssl)和取代它的傳輸層安全性(tls)是用于在客戶機和伺服器之間建構安全的通信通道的協定。它也用來為客戶機認證伺服器,以及(不太常用的)為伺服器認證客戶機。該協定在浏覽器應用程式中比較常見,浏覽器視窗底部的鎖表明 ssl/tls 有效。

tls 1.0 和 ssl 3.1 一樣。

ssl/tls 使用本教程中已經讨論過的三種密碼術構件的混合體,但這一切都是對使用者透明的。以下是該協定的簡化版本:

・    當使用 ssl/tls(通常使用 https:// url)向站點進行請求時,從伺服器向客戶機發送一個證書。客戶機使用已安裝的公共 ca 證書通過這個證書驗證伺服器的身份,然後檢查 ip 名稱(機器名)與客戶機連接配接的機器是否比對。

・    客戶機生成一些可以用來生成對話的私鑰(稱為會話密鑰)的随機資訊,然後用伺服器的公鑰對它加密并将它發送到伺服器。伺服器用自己的私鑰解密消息,然後用該随機資訊派生出和客戶機一樣的私有會話密鑰。通常在這個階段使用 rsa 公鑰算法。

・    然後,客戶機和伺服器使用私有會話密鑰和私鑰算法(通常是 rc4)進行通信。使用另一個密鑰的消息認證碼來確定消息的完整性。

繼續閱讀