自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

加密的最高境界:一百年無法破解的密碼

安全 數(shù)據(jù)安全
經過數(shù)學證明,有一種加密密碼,只要使用正確就不會被破解,但是這種密碼現(xiàn)在使用的機會不多了。這就是作者給我們介紹的一次性密鑰(one-time pad)。

從我們的經驗來看,某種加密方式,不論它在剛出現(xiàn)時宣稱有多么牢不可破,隨著時間的遷移,它總會暴露出弱點,從一個強大的加密方式變成一個較弱的加密方式。而如今人們在使用目前流行的加密方式時,也有這樣的憂慮,擔心某一天會有一種捷徑出現(xiàn),使得目前所使用的看似無懈可擊的加密手段在可控的時間內就被暴力破解。

就算目前所使用的那些還沒有被破解的加密方式,在不斷升級的CPU時鐘頻率前提下,暴力破解所需的時間也越來越短了。比如幾個月前需要耗時一年才能破解的密碼,以現(xiàn)在的計算速度來看,可能只需要七八個月就可以完成了。正因為計算速度越來越快,使得我們通過暴力手段破解密碼的時間大大縮短了。

就算是以難以通過暴力方式破解為目的構建的更復雜更聰明的加密算法,在未來某天,也不可避免的會步那些已經被證明不夠安全的加密算法的后塵。這就好像是冷戰(zhàn)時期的軍備競賽,一方想竭力保護隱私,另一方卻竭力窺探隱私。

在加密算法的發(fā)展過程中,有很多算法都已經被破解或被證明不夠安全,唯有一種加密算法一直存在了93年。這種算法叫做一次性密鑰(one-time pad)。在1917年, Gilbert Vernam開發(fā)了一種叫做Vernam Cipher 的加密方法,使用電傳技術,通過打有密鑰的紙帶進行數(shù)據(jù)加密和解密。結果便出現(xiàn)了當時最強的對稱加密技術。

美國陸軍上尉Joseph Mauborgne注意到,這是真正隨機產生的密鑰,不會有任何重復的可能,因此Vernam cipher可以做到更強大的效果。于是,基于紙帶密鑰的方法,在一沓紙上印有隨即字母或數(shù)字,作為密鑰的加密算法出現(xiàn)了。相同的一沓紙可以給兩個人用,每個頁面上的每個字符只能用一次(每張紙上的字符或數(shù)字用完,則銷毀該密碼紙),這種方式可以避免敵人通過枚舉法暴力破解信息。由于這種分法密鑰流數(shù)據(jù)的技術是基于可銷毀的紙張的,因此也被認為是一次性密鑰。

信息理論之父Claude Shannon曾經通過數(shù)學方法,證明這種一次性密鑰如果使用得當,是無法被破解的,而所謂的使用得當,是指及時銷毀所使用的密鑰頁,即使對方拿到了密碼本的其余部分,也無法進行解密。同樣的理念也可以用于數(shù)字系統(tǒng),但是要確保計算機具有足夠的安全措施以及全面的考慮,防止黑客入侵一次性密鑰系統(tǒng)。比如,一些昂貴的數(shù)據(jù)恢復系統(tǒng)會將已刪除的文件恢復,其中就有可能恢復那些一次性的密鑰文件。因此如果使用數(shù)字化的一次性密鑰系統(tǒng),就要確保所刪除的密鑰文件是被徹底刪除,無法恢復的。

一次性密鑰加密方式有時候非常不方便,因此現(xiàn)在很少有人在用這種加密方式。而正是由于這種不便性,我們實際需要的是一些理論上有些弱的加密方式,比如AES/Rijndael 以及Twofish 。一次密鑰的不方便性在于:

由于一次性密鑰是一種對稱加密方式,進行加密通信的雙方需要擁有完全一樣的密鑰數(shù)據(jù)。而在某些環(huán)境下,這種條件是無法實現(xiàn)的,因為要想讓雙方都擁有這個密鑰,就意味著必須有一種足夠安全的方式讓雙方共享或傳遞密鑰數(shù)據(jù),而如果有了這樣的安全環(huán)境,也就不需要再使用一次性密鑰了。而一般來說通過物理方式傳遞密鑰(比如親手交給對方)才能實現(xiàn)一次性密鑰的優(yōu)勢。

一次性密鑰必須和所加密內如一樣長。這意味著,如果你要對一個3GB的文件進行加密,就需要有一個3GB的一次性密鑰。

相同的一次性密鑰只能在兩人間保存,如果超過兩人知曉這個密鑰,就不再安全了。比如,如果在多個人之間傳送不同的信息,并且不能讓接受者獲知其它人所接受的信息內容,只用一個相同的密鑰是完全達不到加密效果的。相反,如果采用非對稱的加密方式,我們就只需提供一個唯一的公鑰給人們,每個人都通過自己的私鑰對數(shù)據(jù)進行加密解密,他們彼此之間是無法獲知對方所加密的信息內容的,除非私鑰被盜取或者通過日益強大的計算機系統(tǒng)經過暴力破解出來。這是因為當信息被公鑰加密后,只有相關的私鑰才可以將其解密。

重復使用一次性密鑰存在潛在的安全風險,因為它面臨著已知明文漏洞。Kerckhoffs的理論是,保證一次性密鑰系統(tǒng)安全的前提是保證密鑰安全,但是在米加密信息和明文信息共存的時候,可以倒推出這個一次性密鑰。當然,如果每一段密鑰都僅使用一次,那么安全性仍然沒有問題,因為即使“敵人”同時獲取了秘文和明文,并破解出了密鑰,那這段密鑰也是已經被遺棄的密鑰,對于其它信息的破譯毫無用處。而如果密鑰被重復利用,那么以獲取的明文信息就可以成為破解新加密信息的一個重要工具。這就是為什么這種加密系統(tǒng)被稱為“一次性”密鑰系統(tǒng)。

當使用過一次性密鑰后,不能再使用這個密鑰對其它要發(fā)送的數(shù)據(jù)進行加密。如果通信的雙方分別位于地球的兩端,那么這種通信方式會讓人抓狂。

另外還有其它一些因素也使得一次性密鑰系統(tǒng)在某些環(huán)境下變得毫無實用性。但是這也給了我們一個理論知識,讓我們能明白那些理論上較弱的密鑰系統(tǒng)為什么還那么重要。

一次性密鑰系統(tǒng)的工作方式很簡單。它只是簡單的對兩組數(shù)據(jù)進行運算,比如兩個字母或兩個數(shù)字,并通過運算得出新的加密數(shù)據(jù)。而這個運算是針對待加密數(shù)據(jù)中的每一位數(shù)據(jù)的。運算過程很簡單,一次一位數(shù)據(jù)。比如 XOR運算就可以用來進行這樣的加密。我們舉個最簡單的例子,使用XOR運算對二進制數(shù)列進行加密:

首先,你需要一段信息。假設我們把“short”這個詞作為信息,它確實不長。

接下來把這段信息轉換成二進制形式。我們可以使用ASCII編碼來轉換 “short”這個詞,轉換后會得到下面這一串二進制信息:

 0111001101101000011011110111001001110100

接下來你需要一個和上面二進制串長度完全一致的密鑰。在這個例子中,我們可以使用下面這串二進制字符作為密鑰:

5. 0110010101101010001110010010011101100100

最后,我們將這兩組字符串進行XOR 運算,基本上就是一個簡單的減法。也就是說,信息中第一個字符是0,密鑰的第一個字符也是0,那么0 - 0 = 0。同樣,信息中第二個字符是1,密鑰的第二個字符也是1, 1 - 1 = 0。接下來都是這樣計算,計算中除了0外,還可能出現(xiàn)1 或 -1。此時對結果取絕對值,即不論1還是-1,均作為1。其運算過程和結果如下:

7. 0111001101101000011011110111001001110100

8. 0110010101101010001110010010011101100100

----------------------------------------

10. 0001011000000010010101100101010100010000

當然,由于我們對結果的二進制串沒有進行ASCII轉換,因此很難看出它到底被加密成了什么樣子。在電腦上進行ASCII編碼很容易,手動編碼則很麻煩,而對于數(shù)字編碼,通過手動編碼還是比較容易的。

一次性密鑰系統(tǒng)的核心算法顯然是相當簡單的。只要圍繞這個核心算法,設計加密軟件的其余部分,并找到合適的密鑰使用方法,那么這個新的加密軟件就是真正安全的。換句話說,如果要找一個絕對安全有效不可能被破解的加密方式,那么只有使用一次性密鑰系統(tǒng)了,前提是正確的使用它,即密鑰只使用一次。

 

【編輯推薦】

  1. 端到端加密聯(lián)袂令牌化4個最佳做法的描述
  2. 簡介Check Point加密方案取得EAL4+認證
  3. OpenWorld案例分享:Oracle透明數(shù)據(jù)加密技術
  4. 對無線加密之常用的無線網絡加密協(xié)議的介紹
責任編輯:佟健 來源: ZDNet安全頻道
相關推薦

2020-12-13 17:57:16

加密密碼Python

2020-12-21 16:00:07

Pythonzip文件密碼

2012-05-04 09:16:32

2022-07-27 16:40:25

C語言

2017-09-09 15:13:10

2021-06-17 14:05:26

馬克思主義建黨中國

2011-11-25 09:36:53

2010-12-03 11:43:51

2011-03-08 13:05:40

編程語言Java

2009-03-20 21:11:23

多核服務器電腦

2009-06-15 08:46:31

虛擬化

2017-06-23 14:36:46

2021-06-10 10:53:32

Python代碼zip

2009-12-10 10:49:21

PHP eval加密

2020-12-09 08:04:27

Centos8root密碼

2010-07-06 10:35:59

2015-08-05 10:35:46

2010-06-13 13:10:09

MySQLROOT密碼

2012-05-11 10:16:17

2013-08-12 12:36:10

點贊
收藏

51CTO技術棧公眾號