學習筆記:計算機的加密和解密技術知識普及

  計算機系統開發安全是永遠都不能迴避的問題,這裏我想寫一篇關於計算機安全的筆記,便於我之後相關問題和知識的查找,今天的文章不講如何去寫加密解密程序,而是宏觀的介紹加密加密的相關知識,從總體把控加密解密所涉獵的方方面面,我後面博客會講解java裏實現這些算法的方式,本文做爲其鋪墊。java

  安全技術的目標:面試

  安全技術的目標包括九個方面,它們分別是:算法

1)         保密性:確保數據僅能被合法的用戶訪問,數據不能被沒有被受權的用戶訪問。安全

2)         完整性:指數據只能由受權方或以受權的方式進行修改,即數據在傳輸的過程當中不能被未受權的用戶修改。網絡

3)         可用性:確保全部的數據僅在適當的時候能夠由受權方訪問。架構

4)         可靠性:主要是確保系統能在規定的條件下、規定的時間內、完成規定的功能時具備穩定的機率。函數

5)         抗否定性:也稱抗抵賴性,主要確保發送方與接收方在執行各自操做後,對所作的操做不能否認。大數據

6)         可控性:主要是對信息及信息系統實施安全監控。網站

7)         可審查性:主要是經過審計、監控、抗否定性等安全機制,確保數據訪問者(包括合法用戶、攻擊者、破壞者、抵賴者)的行爲有證可查,當網絡出現安全問題時候,提供調查的依據和手段編碼

8)         認證(鑑別):主要是確保數據訪問者和信息服務者的身份真實有效。

9)         訪問控制:主要是確保數據不被非受權方或以未受權方式使用。

  計算機系統安全服務和安全機制:

  計算機系統安全服務和安全機制都是根據OSI安全體系架構裏總結出來的,安全服務有5大類,安全機制有8個,安全機制是實現安全服務的手段。

      系統安全服務有五大類,它們分別是:

1)         認證(鑑別)服務:在網絡交互過程當中,對收發雙方的身份及數據來源進行驗證。

2)         訪問控制服務:防止未受權的用戶非法訪問資源,包括用戶身份認證和用戶權限確認。

3)         數據保密性服務:防止數據在傳輸中 被破解、泄露。

4)         數據完整性服務:防止數據在傳輸中被篡改。

5)         抗否定性服務:也稱爲抗抵賴服務或確認服務。防止發送方與接收方在執行各自操做後,否定各自的操做。

  安全機制包括八類,他們分別是:

1)         加密機制:加密機制就是對數據進行加密,經過對數據加密,能夠提供數據的保密性,可以防止數據在傳輸過程當中被竊取。經常使用的加密算法有:對稱加密算法,例如des算法和非對稱加密算法例如rsa算法。

2)         數字簽名機制:認證(鑑別)服務的一種實現機制,數字簽名能夠實施用戶身份認證和消息認證,它具備解決雙方糾紛的能力,在數字簽名技術的基礎上,爲了鑑別軟件的有效性又產生了代碼簽名技術,經常使用    的簽名算法有rsa算法和dsa算法。

3)         訪問控制機制:訪問控制機制對應訪問控制服務,它是經過預先設定好的規則對用戶所訪問的數據進行限制。一般是經過用戶的用戶名和密碼進行驗證,其次是經過用戶的角色和用戶組等規則進行驗證,驗證經過後,用戶才能訪問相應的限制資源。

4)         數據完整性機制:數據完整性機制對應數據完整性服務,它的做用是爲了不數據在傳輸過程當中受到干擾,同時防止數據在傳輸過程當中被篡改,以提升數據傳輸完整性,一般使用單向的加密算法對數據加密,生成惟一驗證碼,用以校驗數據的完整性,經常使用的算法有md5算法和sha算法。

5)         認證機制:認證機制是對應認證(鑑別)服務,它的目的是驗證接收方所接收到的數據是否來源於所指望的發送方,一般可使用數字簽名來進行認證,經常使用的算法有rsa算法和dsa算法。

6)         業務流填充機制:也被稱爲流填充機制,它對應於數據保密服務,業務流填充機制經過在數據傳輸過程當中傳輸隨機數的方式,混淆真實的數據,加大數據破解的難度,提升數據的保密性。

7)         路由控制機制:路由控制機制對應訪問控制服務,它爲數據發送方選擇安全網絡通訊路徑,避免發送方使用不安全路徑發送數據,提升數據的安全性。

8)         公證機制:它對應抗否定服務,它的做用在於解決收發方的糾紛問題,確保雙方利益不受損壞,這就比如現實中籤合同,請第三方機構公證的做用。

  安全機制對安全服務作了詳盡的補充,針對各類服務選擇相應的安全機制能夠有效的提升應用的安全性。

         下面介紹下密碼學的一些術語:

1)         明文:待加密的信息。

2)         密文:通過加密後的明文。

3)         加密:將明文轉化爲密文的過程。

4)         加密算法:指明文轉化爲密文的算法。

5)         加密密鑰:指明文變爲密文的轉換算法。

6)         解密、解密算法和解密密鑰是加密、加密算法和加密密鑰的逆向算法。

7)         柯克霍夫原則:數據的安全性是基於密鑰而不是算法自己的保密,也就是說密碼學的加密性都是基於對密鑰的保密,算法不用保密,這個原則是如今密碼學的基本原則。

  下面我來介紹下當前流行的幾種密碼體制,它們分別是:

1)         古典密碼:古典密碼是以語言學爲基礎,對文字進行字符轉化,最核心的有兩種加密技巧:移位和替代,移位和替代也是對稱加密算法裏經常使用的算法。移位算法也叫錯位算法,就是講數字從新排序,例如123456變成341265。替代算法也叫置換算法,將明文中的一組字符替代成其餘的字符,造成密文,例如:Hello Word變成IFMMP XPSE,每一個字母用下一個字母代替。前面兩種基本算法又被演變爲不少分支,這些分支加入更加複雜的算法,讓加密更加可靠,下面我將一一介紹這些分支,第一個是單表替代密碼,它會將明文的一個字符用相應密文字符替代,加密過程當中從明文字母表到明文字母表一一映射,主要包括移位密碼、乘數密碼、仿射密碼、多項式密碼、密鑰短語密碼,第二種是同音替代密碼,它與單表替代密碼類似,不一樣的是單個字符明文能夠映射密文的幾個字符中的一個,例如a字母能夠對應2,5,11,吧、字母對應7,23,67.因此同音替代的密文並不惟一。多表替代密碼,它是指明文中的字符映射到密文空間的字符還依賴於它在上下文中的位置,由多個簡單的代替密碼所構成,例如可能有5個被使用的不一樣簡單替代密碼,單獨的一個字符用來改變明文的每一個字符的位置,弗吉尼亞密碼、博福特密碼、滾動密鑰密碼、弗拉姆密碼、轉子機密碼均爲多表替代密碼,二次大戰中的德軍用的恩尼格瑪密碼機正是多表替代密碼應用的典範。多字母替代密碼:明文中字符被成組加密,例如「ABA」可能對應於「RTQ」,ABB可能對應於SLL等,希爾密碼,Playfair密碼均爲多字母替代密碼,在一戰中英國人採用了這種密碼。

2)         對稱加密體制是古典密碼學的延續,它使用的技巧任然是替代和移位,對稱加密體制要求加密和解密使用同一個共享的密鑰,解密和加密時互逆運算,通訊的雙方共享一個密鑰,這就要求雙方通訊前必須商定好密鑰,而且要妥善保存密鑰。對稱加密體制分爲兩種:一種是對明文的單個位或字節進行運算,稱爲流密碼,也叫序列密碼;另外一種將明文信息劃分爲不一樣的組或塊結構,分別對組或塊進行加密和解密。

具體想了解對稱加密算法,參見百度百科:

http://baike.baidu.com/link?url=pRyh8Xhdg70XSvkxxdq6ZwkXSC60HPRq0un2i2QqsEcRdl6S0wRcwNmnErqmxmiR

3)         非對稱加密體制:非對稱加密算法起源於1976年,它和對稱加密算法區別是非對稱加密體制的加密密鑰和解密密鑰是不一樣的,它分爲兩個密鑰:一個叫公鑰能夠公開的,一個叫密鑰它是保密的,非對稱加密體制使得發送者和接收者無密鑰傳輸的保密通訊成爲可能,彌補的對稱加密體制的不足。非對稱加密若是使用公鑰加密,那麼就必須用私鑰解密,一樣的若是信息用私鑰加密,那麼就得用公鑰解密,非對稱加密能夠用於支持數字簽名和驗證。非對稱加密算法的安全性依賴於計算複雜度的難題,一般來自於數論,例如當前流行的非對稱加密算法源自於整數因子分解問題,DSA算法源自於離散對數問題。

詳情能夠參見百度百科的解釋:

http://baike.baidu.com/link?url=QRniASLqgfp6tA4ODVESIWSnGE8OiDSr_eqXtTbDK9j-LEGrFLo70h0qsmiOsTLOetAf5don41ilTsn3dvhIHa

4)         哈希函數體制,哈希函數體制也叫離散函數體制或信息摘要體制或者叫單向函數或者叫雜湊函數,它的做用是用於驗證數據的完整性的問題,哈希函數能夠給數據建立數字指紋,數字指紋也叫哈希值,哈希值一般是一個短的隨機字母和數字組成的字符串,哈希函數體制的特色是,無論多長的信息均可以進行哈希,不一樣信息算出的哈希值是不一樣的,兩個不一樣的哈希值,那麼哈希值的原始數據也不相同,哈希算法不可逆也就是哈希值推不出原始信息,經常使用的哈希算法有MD信息摘要算法,sha安全散列算法以及mac消息認證碼算法。使用過java語言的人都知道Object類是全部類的基類,它裏面有個hashCode方法,這就是每一個對象的身份證了,它就使用了哈希算法,還有map鍵值對,如何標記每一個對象的惟一性也是使用hash算法完成的,這些都是面試愛問的問題,瞭解了哈希函數就知道答案了。

哈希函數詳情能夠參見百度百科:

http://baike.baidu.com/view/549615.htm?fromId=131153

5)         數字簽名技術:像一些安全性要求較高的網站經常會使用數字簽名技術,數字簽名包含對數據完整性、認證性和不能否認性三個特徵。數字簽名針對數字形式存儲的信息進行處理,產生一種帶有操做者身份信息的編碼,執行數字簽名的實體叫作簽名者,簽名過程當中使用的算法叫簽名算法,簽名過程當中生成的編碼稱爲簽名者對該信息的數字簽名。發送者經過網絡將信息連同驗證簽名一塊兒發送給接收者,接收者收到信息和數字簽名後,能夠經過一個算法驗證簽名的真僞以及識別對應的簽名者,這個過程叫驗證過程,其過程使用的算法叫驗證算法。數字簽名離不開非對稱加密體制,簽名算法受私鑰控制,並由簽名者保密,驗證者算法受公鑰控制,對外公開。

數字簽名的詳情能夠參見百度百科:

http://baike.baidu.com/view/7626.htm?fromId=297231

  加密和解密算法滲透到計算機系統的方方面面,咱們都知道它很重要,可是不少人作了多年開發,也不能完整理解整個加密和解密到底要解決那些問題,本文作一下這方面知識的普及。之後我會講解java裏實現上面這些算法的方式,有興趣的童鞋能夠跟蹤個人博客哦。

相關文章
相關標籤/搜索