導航:首頁 > 源碼編譯 > 密碼技術和加密演算法分析

密碼技術和加密演算法分析

發布時間:2024-12-30 19:24:53

㈠ 密碼技術

密碼演算法的特性
1、是否需要事先配送私鑰:對稱密碼需要考慮
2、是否會遭到中間人攻擊:非對稱密碼分發公鑰時需要考慮
3、不可抵賴(可被雙方 和 第三方 用原理證明):非對稱密碼分發公鑰時需要考慮
4、能否保證消息的機密性:即不可破譯
5、能否保證消息的完整性(一致性):即不可篡改
6、不可冒充(偽造)

總結:對稱密碼(解決456)--非對稱密碼之單向通信--> 混合密碼(解決1) --非對稱密碼之數字簽名--> 公鑰證書(解決23)

概念
密碼演算法:加密演算法 + 密鑰 + 解密演算法,簡稱密碼
密鑰空間:密鑰的所有取值
隱蔽式安全性:以密碼演算法不為人所知,來保證機密性
分組密碼:對明文進行分組加密,而非以全文作為輸入
流密碼:不分組,整體加密

破解密文的方法
1、竊聽 + 破譯
2、社會工程學
破解密鑰的方法
1、暴力破解(密鑰窮舉),例如破譯凱撒密碼
2、頻率分析,例如破譯簡單替換密碼
3、選擇明文攻擊(對分組進行明文窮舉)

加密系統的可選技術
隱寫術:將消息藏在更大的數據中,例如藏頭詩
偽隨機數生成器
散列值(摘要,哈希值,指紋):原文經過散列函數(摘要函數,哈希函數,雜湊函數,單向加密)計算出來的值
對稱密碼(共享密鑰密碼):加密和解密用同一個私鑰
非對稱密碼(公鑰密碼):公鑰加密,私鑰解密
消息認證碼
數字簽名
公鑰證書

碰撞:兩個消息的散列值相同
弱抗碰撞性:給定一條消息,很難找到另一條消息與其散列值相同。防止以下情形,Bob持有一個消息A,計算其摘要;Alice找到與A散列值相同的另一條消息B,用B將A調包;由於摘要不變,不被Bob發覺
強抗碰撞性:很難找到兩條散列值相同的消息。防止以下情形,Alice拿兩個摘要相同的消息A和B,將A發給Bob;Bob計算其摘要;Alice再用B將A調包;由於摘要不變,不被Bob發覺
MD5(Message Digest 5)
歷史:1991年Ronald Rivest 設計出MD5
現狀:2004年王小雲提出了MD5碰撞攻擊演算法
SHA
歷史:1993年NIST發布SHA,1995年發布SHA-1,2002年發布SHA-2
現狀:2004年王小雲提出了SHA-0的碰撞攻擊演算法;2005年王小雲提出了SHA-1的碰撞攻擊演算法
SHA-3
歷史:2007年NIST發起選拔SHA-3,2012年Joan Daemen等人設計的Keccak演算法被選定為SHA-3

弱偽隨機數:隨機性
強偽隨機數:不可預測性
真隨機數:不可重現性

隨機數生成器:硬體可以通過熱雜訊實現真隨機數
偽隨機數生成器:軟體只能生成偽隨機數,需要一種子seed來初始化

偽隨機數演算法:線性同餘法、散列法、密碼法等

好的對稱密碼解決:不可破譯
缺點:需要事先配送密鑰
凱撒密碼
加密演算法:字母平移
密鑰:平移位數
解密演算法:逆向平移
破解密鑰:窮舉可能的密鑰
簡單替換密碼
加密演算法:一個字母替換成另一個字母
密鑰:替換表
解密演算法:逆向替換
破解密鑰:對密文的字母 和 字母組合進行頻率分析,與通用頻率表對比;用破譯出來的明文字母,代入密文,循環分析
Enigma密碼
發明者:德國人Arthur Sherbius
加密演算法:雙重加密,每日密鑰作為密鑰1,想一個密鑰2;用密鑰1加密密鑰2,得到密鑰2密文;用密鑰2加密消息;將密鑰2密文和消息密文一起發出
密鑰:密鑰冊子記錄的每天不同的密鑰
解密演算法:用每日密鑰解密密鑰2密文,得到密鑰2;用密鑰2解密消息密文
破譯者:Alan Turing 圖靈

DES密碼(Data Encryption Standard)
歷史:1974年IBM公司的Horst Feistel開發出了Lucifer密碼,1977年被美國國家標准學會(American National Standards Institute,ANSI)確定為DES標准
加密演算法:以64比特為一組,進行16輪運算。在一輪中,把一組分為左側和右側,並從密鑰中提取子密鑰;輪函數用一側和子密鑰生成一個比特序列,用這個比特序列對另一側進行異或運算(XOR)
密鑰:長度56位
破譯:可在現實時間內被暴力破解

三重DES密碼(triple-DES,TDEA,3DES)
加密演算法:將DES重復三次
密鑰:長度 56 * 3

AES密碼(Advanced Encryption Standard)
歷史:1997年,美國國家標准與技術研究院(National Institute of Standards and Technology,NIST)公開募集AES,2000年比利時密碼學家Joan Daemen 和 Vincent Rijmen提交的Rijndael方案,被選為標准
加密演算法:以128比特為一組,進行多輪的替換、平移、矩陣運算
密鑰:有128,192,256三種長度

分組密碼的迭代模式
ECB模式:Electronic CodeBook mode,電子密碼本模式;明文分組 和 密文分組 順序對應。主動攻擊者可以改變密文分組的順序,復制 或 刪除密文分組,使得接受者解密後得到錯誤的明文
CBC模式:Cipher Block Chaining mode,密碼分組鏈接模式;將本組明文 和 上組密文 進行異或運算後,在進行加密;如果被篡改,則不能正常解密
CFB模式:Cipher Feedback mode,密文反饋模式;將本組明文 和 上組密文 進行異或運算後,就得到本組的密文
OFB模式:Output Feedback mode,輸出反饋模式;用隨機比特序列作為初始化組(初始化向量);用初始化組的密文和 明文分組 異或運算,得到密文分組;再次對初始化組密文進行加密運算,得到新的初始化組密文,跟下組明文進行異或運算,以此類推
CTR模式:CounTeR mode,計數器模式;用隨機比特序列作為計數器的初始值,加密後與明文分組進行異或操作,得到密文分組;計數器加一,對下組明文進行加密

對稱密碼中,發送方發送密文時,帶上消息的MAC值A;接收方用相同方法計算出MAC值B;對比A和B,確保消息不被篡改
Encrypt-then-MAC:MAC值為消息密文的散列值
Encrypt-and-MAC:MAC值為消息明文的散列值
MAC-then-Encrypt:MAC值為明文散列值的密文

重放攻擊:攻擊者竊聽到Alice給Bob發送的消息後,重復給Bob發送,Bob以為都是Alice發的
預防重放攻擊:消息里帶有一個id

比對稱密碼:不可篡改、不可偽造
缺點:需要實現配送私鑰

基於口令的密碼:Password Based Encryption,PBE
解決:密鑰(會話密鑰)保存問題
CEK:會話密鑰
KEK:用來加密CEK的密鑰
方案
1、隨機數作為鹽salt,口令 + 鹽 的散列值作為KEK
2、用KEK加密CEK,得到CEK密文
3、只保存鹽和CEK密文,人腦記住口令,丟棄KEK

字典攻擊:如果沒有鹽參與生成KEK,那麼口令決定了KEK,常用的口令對應一個常用KEK字典,攻擊者直接拿常用KEK去解密CEK密文
鹽的作用:KEK由鹽參與形成,不可能有KEK字典包含這樣的KEK

非對稱密碼單向通信,不能單獨用於通信,只用在混合密碼中
方案:Alice 給 Bob 分發加密密鑰(公鑰);Bob用公鑰加密消息,發送給Alice;Alice用解密密鑰(私鑰)解密
總結:消息接收者是密鑰對主人,即私鑰持有人;公鑰用於加密,私鑰用於解密

RSA密碼
歷史:1978年,Ron Rivest、Adi Shamir、Reonard Adleman共同發表了RSA
加密演算法:密文 = 明文 E mode N
公鑰:E 和 N的組合
解密演算法:明文 = 密文 D mode N
私鑰:D 和 N的組合

生成密鑰對
生成質數:用偽隨機數生成隨機數,通過Miller-Rabin測試法測試它是不是質數,直到得到質數
求最大公約數:歐幾里得的輾轉相除法
1、求N
生成兩個512位的質數p和q,N = p * q
2、求L
L是p-1 和 q-1 的最小公倍數
3、求E
用偽隨機數生成(1,L)范圍內的隨機數,直到滿足E和L的最大公約數為1
4、求D
用偽隨機數生成(1,L)范圍內的隨機數,直到滿足(E * D) mod L = 1

破解:對N進行質因數分解,得到p和q,從而求出D。但是對大數的質因數分解,未有快速有效的方法

首次通信為混合密碼,後續通信為對稱密碼
比消息認證碼:無需事先配送私鑰
總體思路:Bob 用會話密鑰加密消息,用Alice的公鑰加密會話密鑰,一起發給Alice;Alice用私鑰解密會話密鑰,用會話密鑰解密消息
會話密鑰:用來加密消息的 對稱密碼的密鑰
1、Alice 給 Bob 發送公鑰
2、Bob隨機生成會話密鑰,用會話密鑰加密消息,得到消息密文
3、Bob用公鑰加密會話密鑰,得到會話密鑰密文
4、Bob將會話密鑰密文和消息密文一起發給Alice
5、Alice用私鑰解密會話密鑰,再用會話密鑰解密消息
6、雙方都有了會話密鑰,從此以後,可以用對稱密碼通信了,帶上消息認證碼

缺點:分發公鑰時,可能遭受中間人攻擊;Alice可能對給Bob發送公鑰這件事進行抵賴
中間人攻擊:中間人從一開始Alice向Bob發放公鑰時,就攔截了消息,得到Alice的公鑰;然後偽裝成Alice,向Bob發送自己的公鑰;從而Bob打算發給Alice的消息,能被中間人解密

不能單獨用於通信,只用在公鑰證書中
明文簽名:Alice用簽名密鑰(私鑰)加密消息的摘要,把摘要密文和消息明文一起發給Bob;Bob解密摘要密文,得到摘要A;算出明文摘要B,對比A和B
總結:私鑰用於加密,公鑰用於解密,與 非對稱加密之單向通信,剛好反過來

公鑰證書:Public-Key Certificate,PKC,簡稱證書
認證機構:Certification Authority,CA
證書標准:國際電信聯盟ITU 和 國際標准化組織ISO指定的X.509標准
流程:
1、Alice在CA登記
2、CA生成Alice的證書明文,包含Alice登記的信息、Alice的公鑰、CA信息
3、CA用自己的私鑰加密證書明文部分,得到數字簽名
4、證書明文部分 和 數字簽名 組成PKC,頒發給Alice
5、Bob向Alice獲取這個PKC,拿本地已有的CA公鑰去驗證證書,就得到了可信的Alice的公鑰
6、從此Alice 和 Bob之間可以進行混合密碼通信

首次通信為從CA獲取PKC,後續通信為混合密碼
比混合密碼:防止了中間人攻擊;CA不能抵賴自己的證書

歷史:1994年網景公司設計出SSL,2014年SSL 3.0被發現安全漏洞,1999年IEIF發布TLS
TLS(Transport Layer Security)是SSL(Secure Socket Layer)的後續版本,在tcp和http之間加一層TLS,就是https
OpenSSL:OpenSSL是實現SSL/TLS協議的工具包
以https為例
0、瀏覽器安裝時,存有幾個CA公鑰;伺服器在CA登記,拿到證書
1、瀏覽器訪問一個https地址,伺服器返回自己的證書
2、瀏覽器根據證書上的CA信息,拿對應的CA公鑰驗證證書,得到可信的伺服器公鑰
3、瀏覽器生成對稱密碼的密鑰(會話密鑰),用伺服器公鑰加密後發給伺服器
4、伺服器解密後得到會話密鑰,從此用對稱密碼通信,帶上消息認證碼

1、生成JKS證書:keytool -genkeypair -alias "別名" -keyalg "RSA" -keystore "D:app.jks"
2、將JKS轉換成PKCS12:keytool -importkeystore -srckeystore D:app.jks -destkeystore D:app.p12 -deststoretype pkcs12
3、將PKCS12轉成pem:openssl pkcs12 -in ./app.p12 -out app.pem
4、提取加密後的私鑰:將pem中 「—–BEGIN ENCRYPTED PRIVATE KEY—–」 至 「—–END ENCRYPTED PRIVATE KEY—–」 的內容拷貝出來,保存為ciphertext.key
5、將密文私鑰轉成明文私鑰:openssl rsa -in ciphertext.key -out plaintext.key

.jks(Java Key Storage):二進制格式,包含證書和私鑰,有密碼保護
.pfx 或 .p12(Predecessor of PKCS#12):二進制格式,包含證書和私鑰,有密碼保護
.pem(Privacy Enhanced Mail):文本格式,包含證書,可包含私鑰,私鑰有密碼保護
.der 或 .cer:二進制格式,只包含證書
.crt(Certificate):可以是der格式,也可以是pem格式,只包含證書

SSL證書:SSL證書必須綁定域名,不能綁定IP
加密服務、密鑰管理服務

㈡ 信息加密技術的加密技術分析

加密就是通過密碼算術對數據進行轉化,使之成為沒有正確密鑰任何人都無法讀懂的報文。而這些以無法讀懂的形式出現的數據一般被稱為密文。為了讀懂報文,密文必須重新轉變為它的最初形式--明文。而含有用來以數學方式轉換報文的雙重密碼就是密鑰。在這種情況下即使一則信息被截獲並閱讀,這則信息也是毫無利用價值的。而實現這種轉化的演算法標准,據不完全統計,到現在為止已經有近200多種。在這里,主要介紹幾種重要的標准。按照國際上通行的慣例,將這近200種方法按照雙方收發的密鑰是否相同的標准劃分為兩大類:一種是常規演算法(也叫私鑰加密演算法或對稱加密演算法),其特徵是收信方和發信方使用相同的密鑰,即加密密鑰和解密密鑰是相同或等價的。比較著名的常規密碼演算法有:美國的DES及其各種變形,比如3DES、GDES、New DES和DES的前身Lucifer; 歐洲的IDEA;日本的FEAL N、LOKI?91、Skipjack、RC4、RC5以及以代換密碼和轉輪密碼為代表的古典密碼等。在眾多的常規密碼中影響最大的是DES密碼,而最近美國NIST(國家標准與技術研究所)推出的AES將有取代DES的趨勢,後文將作出詳細的分析。常規密碼的優點是有很強的保密強度,且經受住時間的檢驗和攻擊,但其密鑰必須通過安全的途徑傳送。因此,其密鑰管理成為系統安全的重要因素。另外一種是公鑰加密演算法(也叫非對稱加密演算法)。其特徵是收信方和發信方使用的密鑰互不相同,而且幾乎不可能從加密密鑰推導解密密鑰。比較著名的公鑰密碼演算法有:RSA、背包密碼、McEliece密碼、Diffe Hellman、Rabin、Ong Fiat Shamir、零知識證明的演算法、橢圓曲線、EIGamal演算法等等⑷。最有影響的公鑰密碼演算法是RSA,它能抵抗到目前為止已知的所有密碼攻擊,而最近勢頭正勁的ECC演算法正有取代RSA的趨勢。公鑰密碼的優點是可以適應網路的開放性要求,且密鑰管理問題也較為簡單,尤其可方便的實現數字簽名和驗證。但其演算法復雜,加密數據的速率較低。盡管如此,隨著現代電子技術和密碼技術的發展,公鑰密碼演算法將是一種很有前途的網路安全加密體制。這兩種演算法各有其短處和長處,在下面將作出詳細的分析。 在私鑰加密演算法中,信息的接受者和發送者都使用相同的密鑰,所以雙方的密鑰都處於保密的狀態,因為私鑰的保密性必須基於密鑰的保密性,而非演算法上。這在硬體上增加了私鑰加密演算法的安全性。但同時我們也看到這也增加了一個挑戰:收發雙方都必須為自己的密鑰負責,這種情況在兩者在地理上分離顯得尤為重要。私鑰演算法還面臨這一個更大的困難,那就是對私鑰的管理和分發十分的困難和復雜,而且所需的費用十分的龐大。比如說,一個n個用戶的網路就需要派發n(n-1)/2個私鑰,特別是對於一些大型的並且廣域的網路來說,其管理是一個十分困難的過程,正因為這些因素從而決定了私鑰演算法的使用范圍。而且,私鑰加密演算法不支持數字簽名,這對遠距離的傳輸來說也是一個障礙。另一個影響私鑰的保密性的因素是演算法的復雜性。現今為止,國際上比較通行的是DES、3DES以及最近推廣的AES。
數據加密標准(Data Encryption Standard)是IBM公司1977年為美國政府研製的一種演算法。DES是以56 位密鑰為基礎的密碼塊加密技術。它的加密過程一般如下:
① 一次性把64位明文塊打亂置換。
② 把64位明文塊拆成兩個32位塊;
③ 用機密DES密鑰把每個32位塊打亂位置16次;
④ 使用初始置換的逆置換。
但在實際應用中,DES的保密性受到了很大的挑戰,1999年1月,EFF和分散網路用不到一天的時間,破譯了56位的DES加密信息。DES的統治地位受到了嚴重的影響,為此,美國推出DES的改進版本-- 三重加密(triple Data Encryption Standard)即在使用過程中,收發雙方都用三把密鑰進行加解密,無疑這種3*56式的加密方法大大提升了密碼的安全性,按現在的計算機的運算速度,這種破解幾乎是不可能的。但是我們在為數據提供強有力的安全保護的同時,也要化更多的時間來對信息進行三次加密和對每個密層進行解密。同時在這種前提下,使用這種密鑰的雙發都必須擁有3個密鑰,如果丟失了其中任何一把,其餘兩把都成了無用的密鑰。這樣私鑰的數量一下又提升了3倍,這顯然不是我們想看到的。於是美國國家標准與技術研究所推出了一個新的保密措施來保護金融交易。高級加密標准(Advanced Encryption Standard)美國國家技術標准委員會(NIST)在2000年10月選定了比利時的研究成果Rijndael作為AES的基礎。Rijndael是經過三年漫長的過程,最終從進入候選的五種方案中挑選出來的。
AES內部有更簡潔精確的數學演算法,而加密數據只需一次通過。AES被設計成高速,堅固的安全性能,而且能夠支持各種小型設備。AES與3DES相比,不僅是安全性能有重大差別,使用性能和資源有效利用上也有很大差別。雖然到現在為止,我還不了解AES的具體演算法但是從下表可以看出其與3DES的巨大優越性。
還有一些其他的一些演算法,如美國國家安全局使用的飛魚(Skipjack)演算法,不過它的演算法細節始終都是保密的,所以外人都無從得知其細節類容;一些私人組織開發的取代DES的方案:RC2、RC4、RC5等。 面對在執行過程中如何使用和分享密鑰及保持其機密性等問題,1975年Whitefield Diffe和Marti Hellman提出了公開的密鑰密碼技術的概念,被稱為Diffie-Hellman技術。從此公鑰加密演算法便產生了。
由於採取了公共密鑰,密鑰的管理和分發就變得簡單多了,對於一個n個用戶的網路來說,只需要2n個密鑰便可達到密度。同時使得公鑰加密法的保密性全部集中在及其復雜的數學問題上,它的安全性因而也得到了保證。但是在實際運用中,公共密鑰加密演算法並沒有完全的取代私鑰加密演算法。其重要的原因是它的實現速度遠遠趕不上私鑰加密演算法。又因為它的安全性,所以常常用來加密一些重要的文件。自公鑰加密問世以來,學者們提出了許多種公鑰加密方法,它們的安全性都是基於復雜的數學難題。根據所基於的數學難題來分類,有以下三類系統目前被認為是安全和有效的:大整數因子分解系統(代表性的有RSA)、橢圓曲線離散對數系統(ECC)和離散對數系統 (代表性的有DSA),下面就作出較為詳細的敘述。
RSA演算法是由羅納多·瑞維斯特(Rivet)、艾迪·夏彌爾(Shamir)和里奧納多·艾德拉曼(Adelman)聯合推出的,RAS演算法由此而得名。它的安全性是基於大整數素因子分解的困難性,而大整數因子分解問題是數學上的著名難題,至今沒有有效的方法予以解決,因此可以確保RSA演算法的安全性。RSA系統是公鑰系統的最具有典型意義的方法,大多數使用公鑰密碼進行加密和數字簽名的產品和標准使用的都是RSA演算法。它得具體演算法如下:
① 找兩個非常大的質數,越大越安全。把這兩個質數叫做P和Q。
② 找一個能滿足下列條件得數字E:
A. 是一個奇數。
B. 小於P×Q。
C. 與(P-1)×(Q-1)互質,只是指E和該方程的計算結果沒有相同的質數因子。
③ 計算出數值D,滿足下面性質:((D×E)-1)能被(P-1)×(Q-1)整除。
公開密鑰對是(P×Q,E)。
私人密鑰是D。
公開密鑰是E。
解密函數是:
假設T是明文,C是密文。
加密函數用公開密鑰E和模P×Q;
加密信息=(TE)模P×Q。
解密函數用私人密鑰D和模P×Q;
解密信息=(CD)模P×Q。
橢圓曲線加密技術(ECC)是建立在單向函數(橢圓曲線離散對數)得基礎上,由於它比RAS使用得離散對數要復雜得多。而且該單向函數比RSA得要難,所以與RSA相比,它有如下幾個優點:
安全性能更高 加密演算法的安全性能一般通過該演算法的抗攻擊強度來反映。ECC和其他幾種公鑰系統相比,其抗攻擊性具有絕對的優勢。如160位 ECC與1024位 RSA有相同的安全強度。而210位 ECC則與2048bit RSA具有相同的安全強度。
計算量小,處理速度快 雖然在RSA中可以通過選取較小的公鑰(可以小到3)的方法提高公鑰處理速度,即提高加密和簽名驗證的速度,使其在加密和簽名驗證速度上與ECC有可比性,但在私鑰的處理速度上(解密和簽名),ECC遠比RSA、DSA快得多。因此ECC總的速度比RSA、DSA要快得多。
存儲空間佔用小 ECC的密鑰尺寸和系統參數與RSA、DSA相比要小得多,意味著它所佔的存貯空間要小得多。這對於加密演算法在IC卡上的應用具有特別重要的意義。
帶寬要求低 當對長消息進行加解密時,三類密碼系統有相同的帶寬要求,但應用於短消息時ECC帶寬要求卻低得多。而公鑰加密系統多用於短消息,例如用於數字簽名和用於對對稱系統的會話密鑰傳遞。帶寬要求低使ECC在無線網路領域具有廣泛的應用前景。
ECC的這些特點使它必將取代RSA,成為通用的公鑰加密演算法。比如SET協議的制定者已把它作為下一代SET協議中預設的公鑰密碼演算法。

閱讀全文

與密碼技術和加密演算法分析相關的資料

熱點內容
蘋果新手機激活無法連接伺服器地址 瀏覽:324
dvd遙控編程器 瀏覽:926
阿里雲的雲伺服器在哪裡下載 瀏覽:442
linuxphpcpu 瀏覽:532
單片機交通信號燈課程設計 瀏覽:384
linuxusb識別u盤 瀏覽:391
找對象app名稱是什麼 瀏覽:162
為什麼選擇童程童美學習編程 瀏覽:742
db2runstats命令 瀏覽:849
matlab怎麼用遺傳演算法 瀏覽:809
程序員喜歡黑色背景 瀏覽:590
音頻信號需要什麼樣的單片機 瀏覽:676
剪力牆牆柱箍筋是否需要加密 瀏覽:165
如何查看伺服器上埠是否打開 瀏覽:298
目前流行編程語言 瀏覽:458
騰訊雲伺服器免流嗎 瀏覽:850
c命令行解析 瀏覽:788
解壓轉移注意力最好的辦法 瀏覽:916
多人協作php 瀏覽:920
linux版notepad 瀏覽:169