加密:明文-------密文————————》密文 解密
encryptiondecryption
加密是讓數據從明文變成密文,傳輸過程中是密文,傳送過去之後對方接收到的也是密文。
可以理解爲密文就是亂碼,看不出內在的任何意義,通常也都是逐位對應的。
在接收方接收到密文之後只有把它還原爲原來的樣子纔可以理解對方說的具體是什麼,此過程就叫做解密。
加密解密的特性,加密解密方使用的加密解密機制是不是相對應的?
雙方使用的是同一種機制,只不過把將輸入輸出調換下位置,如下圖
整體的機制是完全對應起來的!
此種加密就是,加密和解密都使用相同的密鑰加密解密稱之爲對稱加密。
思考:對稱加密的缺陷:有什麼實現不了的功能?
要網絡安全有三個關鍵目標:
1、機密性:一定要確保數據是保密的,傳輸過程中不會被那些非授權的用戶獲取到數據,而且還要確保數據的隱私性;
所以機密性主要包含兩個概念;一個是數據的保密性、一個是數據的隱私性。
2、完整性:數據發送過去之後,要確保在接收方接收到的數據一定是沒非法被篡改過的,一定是原原本本原來是的數據,是百分之百完完整整的。
3、可用性:確保系統能夠工作迅速,對授權用戶不能拒絕服務,知道密碼的一方可以快速的還原爲明文。
對稱加密可以保證以上指標中的哪幾項:
對稱加密無法保證完整性。被截獲了,隨破解不出來裏面的密文是什麼,但是,截獲者插入一些字符篡改內容,再發送給接收者;接收者在接收到被篡改的密文以後,解密出來,發現內容似乎沒有什麼意義,此時,怎樣確定此密文就是自己信任的對方發送過來的呢?所以完整性是無法得到保證的。
現代計算機密碼學中對稱加密是通過分組加密來實現的,將要加密的明文數據按固定長度切分成N個組,最後一組數據量不夠的時候,可能會補零,一定是大小相同的N個數據塊,然後對每個數據塊再單獨加密;塊與塊之間異或以後發送結果,做異或計算,(兩個操作數如果相同則爲假,不同則爲真),再做一次同樣的異或即可還原爲原來的數據了。
目前常用的加密技術:
早前NAST研究,美國官方發佈的 DES(Data Encryption Standard)數據加密標準,使用56位長度的密鑰,進行8輪置換,在最早被認爲是最安全的。
2000年左右,被破解
3DES:
後來又發佈了AES(Advanced Encryption Standard)可根據需要分別採用128位,192位,256位等不同長度的加密方式;一般來講AES本身指的是128位,每一位都可能會出現不同的寫法,有可能是2的n次方倍;
Bob和Alice互相通信,bob(使用對稱加密的凡是將要發送的每一個數據先加密以後再發給Alice)發一封郵件給Alice,Alice在收到郵件後必須使用同樣的機制,使用同一個密鑰來解密。
由此,我們通常所指的對稱加密是使用加密算法來實現的,仍然在內部通過置換或者移位來完成的,只不過這個算法可能會非常複雜,但很多情況下,算法是公開的;所以無論你的算法有多複雜還是會被有心的研究者給破解的;萬一一個算法被破解了怎麼辦呢?此前加密的數據就都宣佈失效了!
由此,在加密的相關邏輯理論當中,加密與否,加密的可靠性不能依賴於算法,而要依賴於密鑰。
我某一次的加密被破解了,只需要更換密鑰,而不需要更換算法。
由此,事實上,安全性不依賴於算法,依賴於密鑰。
以DES來說,DES算法都是公開的,任何人都可以得到,但是,只是在同一個算法上,我多加了一串密鑰,你想通過算法,哪怕對算法研究的非常的透徹,你只要不知道密鑰,那麼你就不可能把它還原回來,或者很難把它還原回來!除非通過暴力的***,比如窮舉等,以及字典***等等
所以,bob和Alice爲了實現通信。
Bob可能會選擇一種算法,這種算法可能會大家都知道,因爲算法是公開的嗎,對吧?但是bob還選擇了一個密鑰,此密鑰一定是隻有bob和Alice兩個人才知道,於是bob加密完之後發給Alice,Alice使用同一個密鑰解密就可以了。
那麼,這個愛窺探別人隱私的傢伙eve由於不知道密鑰,也只能乾瞪眼了哦!哈哈!但eve可以破壞,因爲雙反發的信都要經過eve這裏,這裏假設eve是網絡管理員,負責管理所有的核心交換路由、以及各個服務器,也就意味着eve可以捕獲所有他所管轄的這些設備上的任何報文;eve這個傢伙捕獲到報文以後雖然看不到裏面的內容,但是可以修改,於是eve隨便修改了幾個字符串,那裏面的內容是不是已經改變了。
此外,eve還可以把加密後的數據複製一份,複製一份沒事就給Alice發一份,一天發個百八十次,而且還可以冒充bob去發
此乃是第一個缺陷;
假如bob和Alice是商業合作伙伴,經常發送一些機密合同之類的,某一天Alice拿着一個百萬美金的合同訂單,找到bob要求支付現金,bob說此合同訂單不是他發的;Alice說這不是你的訂單嗎?還是用此密碼加密的,那麼 ,bob如何證明此訂單不是bob發送的?
加密算法雙反都有,密鑰又都是同一個
Alice拿着密鑰加密非得說是bob發的,那麼,bob如何證明此合同訂單不是他發的呢?無從證明啊!!!!!!
在網上購物也是一個道理啊,過幾天京東或者淘寶給寄來了一個電視,然後告訴你這是你網上訂購的,請你付款;然後你說你沒有訂購,怎樣證明自己沒訂購呢?
所以,簡單的對稱加密,這些問題都解決不了
這是兩個本身的問題,再考慮兩個外在的問題
假如說bob這個傢伙,交友比較廣泛,他希望每次和別人發郵件時都是加密的,於是有了alice1、Alice2、Alice3等
那麼,bob和Alice1通信的時候使用一個密鑰,對吧?
和Alice2通信的時候使用同一個密鑰嗎?如果使用同一個密鑰的話,那麼,是不是意味着Alice1和Alice2可以彼此知道發信的內容????
想象一下,如果bob要和50個人通信,是不是意味着bob自己要維護50個密碼?
如果Alice1也要和50個人通信呢?是不是又是50個密碼啊?
那麼,如果每個人都是如此,該怎麼辦呢?
在一個小圈子內大家都需要維護自己的密鑰,那麼整體上要維護多少個密鑰呢?
慢慢的會發現,是不是單單記住這些密碼,都已經焦頭爛額了啊?呵呵
怎麼辦?記在記事本上,如果記事本被拿走了呢?
只有一個辦法,把記事本加密只記住記事本的密鑰!前提是記事本要靠譜才行啊!
第二個外在問題,
兩個素不相識的人,是在某個網絡上認識的,怎樣確保兩個人之間的第一次通信是加密的,而且加密的密碼雙方都能知道?但是沒有其他第三方的人知道?
第一次發送內容是不能加密的!一般郵件也是明文的哦!
最傳統意義上的加密方式,通過置換或者移位,雖然在很長一段時間內雖然佔據了主流的數據安全通信,但是對稱加密本身具有很多潛在的問題沒有得到解決,直到非對稱加密的誕生。
非對稱加密:數學函數
首先要知道的是非對稱加密和對稱加密是兩個完全不同的概念。
對稱加密是通過置換或者移位來實現的,而非對稱加密完全是通過數學函數計算得來的結果。
飛馬小定理,歐拉定理:
略。。。。。。
非對稱加密機制:
非對稱加密:通信雙方每一個人都選擇一對密鑰,一組密鑰,稱之爲私鑰和公鑰。
這兩個密鑰裏面一定是有一個是私有的,不能讓任何人知道的。
一個是公開的,可以讓任何人知道的。
那麼,哪一個是公開的?哪一個是私有的呢?
完全可以自己決定的!
一般來說最先生成的那個都叫做私鑰,假設私鑰只能是自己才能知道的。私鑰稱之爲 security key 簡稱爲S
與之配對的叫做公鑰,稱之爲public key簡稱爲 P
對於非對稱加密來講,由於是基於數學函數來設計實現的,公鑰是從私鑰中提取出來的,也就意味着只要有私鑰即可,拿着私鑰就能得到你的公鑰,所以說一般來講私鑰是私有的,讓公鑰保密意義不大。
一般常用的場景是:要麼是私鑰私有,公鑰公開;
要麼是私鑰也私有,公鑰也私有。
在非對稱加密算法裏面有一種特定的機制:使用私鑰加密的數據,私鑰不能解密,只能使用與之配對的公鑰解密;反之,如果是用公鑰加密的數據,只能用與之配對的私鑰解密。
思考:公鑰是公開的,用公鑰加密有什麼用呢?
Bob alice
Bob使用自己的私鑰加密數據,發到互聯網上誰都能解密,因爲誰都能得到bob的公鑰,那麼,這樣還有意義沒有?相當有,使用自己的私鑰加密,雖然人人都能解密是沒錯,但是,解密的前提是隻有拿到只bob的公鑰才能解密;就說明:只要能用bob的公鑰來解密那就一定是bob加密的,對嗎?驗證了這個數據一定是來自於bob的,實現了身份驗證,至少能確保加密方一定是bob.
Bob用Alice的公鑰加密, 用Alice的公鑰加密,加密之後放到互聯網去誰都能得到一份,但是隻有Alice能解密,數據機密性得到保證,確保了數據的機密性。
性能對比:三個數量級,10的3次方,所以非對稱加密很少用來加密大段數據,只是用來加密很小一部分數據的。
比方說加密密碼
非對稱加密的功能:身份驗證、機密性、密鑰交換
非對稱加密一般只用來加密口令之類的
單項加密:只能加密不能解密,僅支持從明文到密文。
單項加密的意義,單項加密的主要功能在於數據完整性,提取數據的特徵碼也叫做指紋信息的,是一種hash計算,也成爲散列計算,無論你的數據有多大,單項加密的輸出是定長的。
特性:
1、定長輸出 MD5 128位,用128除以4看到的就是字符串的長度;128位表示它能表示2的128次方種變化; sha1 160位; sha 256位 ;sha 512位。
2、雪崩效應,輸入數據的微小改變,會引起結果的巨大改變,因此避免了根據輸出來推斷輸入的破解的可能性。也就意味着只要輸入相同,在同一種算法下,輸出一定是相同的。只要輸入相同輸出就相同;所以單項加密主要用來保證數據完整性。
怎麼保證呢?
單項加密保證數據完整性: 發送方,使用單項加密算法,加密一段數據後,提取出來特徵碼,填補在要加密的發送數據的尾部,然後發送過去。
那接收方呢?如何驗證數據有沒有被改動過呢?
接收方在收到數據以後重新使用與發送方同樣的算法計算出特徵碼並比較計算出來的特徵碼和對方發過來的特徵碼是否一致,問題是,特徵碼放在後面別人也可以隨意改變啊,呵呵呵?????
不管怎麼說,單項算法還是能夠保證數據的完整性的。
前提是必須要有可靠的手段將特徵碼發給對方。
對方再重新計算,只要兩個特徵碼一樣,就認爲數據就沒被別人篡改過。
問題是如何保證特徵碼能夠安全送達呢?
如何保證?
特徵碼就特別小了啊,就簡單了啊!加密!需要注意的是特徵碼加密的目的不是讓對方解密不了,而是讓別人改不了!
身份驗證:發送方,使用自己的私鑰加密,保證對方能夠驗證我的身份,只要用bob的身份能解密就說明一定是bob加密的。
身份驗證:發送方使用自己的私鑰加密特徵碼再發送,一方面既保證了特徵碼不會被篡改,一篡改對方就一定知道;另一方面保證了接收方能夠驗證發送方的身份。
數字簽名:發送方使用單項加密取得特徵值並使用自己的私鑰加密整段數據特徵碼的操作就叫數字簽名。
dh
總結:加密方式通常有三種
1、對稱加密是一種:常用算法:DES、3DES、AES
2、加密解密使用同一個密鑰
功能:通常只用來保證機密性
非對稱加密(公鑰加密)數學函數,加密解密採用同一組的密鑰和私鑰。
非對稱加密常用算法:RAS、DSS、ECC橢圓曲線算法(目前還沒得到廣泛的應用)
非對稱加密爲了保證安全性,通常密鑰都非常長,非對稱加密的長度從512位、768位、1024位、2048位、4096位、8192位不等;
RSA爲了提升安全性,不斷提升支持的密鑰長度這種方式來提高安全性;由此也對系統的性能提出了更高的要求,RSA此種加密技術的發展似乎遇到了瓶頸。
隨之而來的出現了ECC,也就是所謂的橢圓曲線算法;理論上比RSA的安全性要高,但目前還未在實際的生產環境中佔領一席之地。有待時間的驗證。
各個算法功能和特性又有所不同:
單項加密:(提取數據特徵碼,只能由明文計算出密文)
功能:保證數據完整性
常見的算法:MD5、SHA1(安全hash算法)、SHA2、SHA256、SHA512、SHA3(目前最新的)
非對稱加密的主要功能:身份驗證、密鑰交換、機密性
數字證書、CA及PKI
IKE:DH(算法)不能防中間人***
素數、原根
數字證書:
1、發送方使用選定的單項加密算法,計算原始數據的特徵碼
2、發送方使用自己的私鑰加密特徵碼,附加於原始數據後面
3、發送方生成一次性對稱密鑰,並使用密鑰加密數據(原始數據+加密後的特徵碼)
4、發送方使用接收方的公鑰加密一次性對稱密鑰,附加於加密數據後面
5、發送
1、接收方使用自己的私鑰解密加密的一次性對稱密鑰
2、使用對稱密鑰解密數據,得到加密的特徵碼和原始數據
3、使用發送方的公鑰解密加密的特徵碼;
4、使用與發送方相同的單項加密算法重新計算數據的特徵碼,並與解密出的特徵做比較
公鑰分發:如何完成公鑰的分發呢?
數字證書:X.509V3通常包含:
1、證書版本號version
2、序列號(證書本身在CA中的唯一標識)
3、簽名算法標誌(CA要對證書籤名)
4、發行者名稱(CA自己的名稱)
5、有效期(關鍵內容,起始日期和終止日期)私鑰丟失了怎麼辦?
6、證書主體名稱:此證書公鑰的所有者,兩類:(組織(主機)個人)服務器證書和個人證書
7、證書主體公鑰信息(最關鍵信息)
8、發行商唯一標誌(簽證機構)
9、證書主體的唯一標誌(ID號)
10、擴展信息
11、簽名(證書頒發機構的簽名)
思考:作爲用戶、作爲組織來講,如何去獲得一個證書,去哪裏獲得證書呢?
發證是CA,CA要接受用戶申請、並驗證用戶身份、
要想完成證書頒發,首先要有證書註冊機構、其次要有證書吊銷機構、還要有證書籤名機構。
證書頒發:簽證、註冊、吊銷三個核心
組合起來是一個強大的機構,證書是一個體系
證書是鏈式結構。
PKI的組成:public Key Infrastructure管理實體
0、端實體(證書使用者)
1、註冊機構(RC)
2、簽證機構(CA)---->簽證機構(CA)完成交叉信任
3、證書撤銷列表(CRL)發佈機構
4、證書存取庫
PKI是一種規範。
證書的應用場景:
網上銀行:web、專用C/S組件,http明文
遠程登錄:telnet,明文
Smtp、pop3、imap4明文
ssl/tls:工作在OSI模型第四層和第五層之間的,對於底層的報文是不能提供加密的。
加密方法的使用:
***:二層***、三層***
遠程登陸SSH協議:
先說SSL:
SSL Secure socket layer 是一種協議,網景公司開發。
http:80/tcp https: 443/tcp
ftp:21/tcp ftps:
Smtp:25/tcp smtps:465/tcp
Pop3:110/tcp pops:995/tcp
Starttls:在同一個端口上根據用戶的請求和用戶的特性來決定是否需要加密通信。
關於版本:V1、V2版本已經被廢棄,現在常用的是V3版
Tls V1
SSL會話的建立:
https:會話的建立
http協議是基於tcp的,也就意味着雙方要想建立通信,必須要先三次握手;握手結束之後由於http使用了ssl,所以真正進行http報文發送之前,雙方必須先建立SSl會話;
首先客戶端發送一個“hello”、服務器端也發送一個類似“hello”信息以確認對方的存在,確認是否能夠通信;確認雙方的公共的通用的加密算法是否一致等等一系列滿足通信的條件。
服務器端發送自己的證書給客戶端(爲了後續的加密通信和密鑰交換);
客戶端驗證服務器端的身份、驗證通過客戶端生成一次性對話密鑰,使用對方的公鑰加密之後發送給服務器;
所以服務器端就有密碼了;
服務器端就可以拿着密碼加密網頁文件併發送給客戶端了。
客戶端拿到網頁文件以後一定是加密過的,是密文的,然後使用之前生成的對稱密鑰去解密網頁文件;只不過對用戶來說這一切都是透明的而已!
那麼,服務器端需要客戶端的證書嗎?
一般是不需要的!