必威电竞|足球世界杯竞猜平台

一次性密碼本
來源:互聯(lián)網(wǎng)

一次性密碼本,是一種用于安全地傳送和存儲數(shù)據(jù)的方法。發(fā)送主機(jī)生成一個隨機(jī)字符序列作為密鑰流,以該密鑰流作為一次性密碼本。將密鑰流與明文按位“異或”產(chǎn)生密文。將密鑰流和密文通過物理上分離的通信路徑路由到接收主機(jī),接收主機(jī)通過使用“異或”運(yùn)算將密鑰流應(yīng)用到密文對其進(jìn)行解密。使用MPLS標(biāo)記或者嚴(yán)格路由選項(xiàng)建立分離的路由路徑。

定義

一次性密碼本(One-time?Pad;OTP)是密碼學(xué)中的一種加密算法。是以隨機(jī)的金鑰(key)組成明文,且只使用一次。

一種通過應(yīng)用一次性密碼本安全地存儲數(shù)據(jù)的方法,所述方法包括以下計(jì)算機(jī)實(shí)施步驟:接收第一數(shù)據(jù)流,所述第一數(shù)據(jù)流包括真正隨機(jī)生成字符的密鑰流;接收包括密文的第二數(shù)據(jù)流,其中在兩個物理上分離的路由通信信道上接收所述第一和第二數(shù)據(jù)流,其中所述密文包括源文本,通過使用異或運(yùn)算將所述密鑰流應(yīng)用到所述源文本,對所述源文本進(jìn)行加密;使用所述密鑰流對所述密文進(jìn)行解密,導(dǎo)致產(chǎn)生和儲存等同于所述源文本的解密數(shù)據(jù)。

歷史記載

一次性密碼本比計(jì)算機(jī)的歷史還要早,可以回溯到1917年。它們是在第二次世界大戰(zhàn)期間偶然用于高安全通信的。“一次性密碼本”中的“密碼本”來源于密碼術(shù)的最初形式:密鑰材料打印在厚厚的本子上,每頁一個字母。

一次性密碼本在今天仍在一些有限的范圍內(nèi)使用。許多政府部門使用短波無線電將加密的消息傳達(dá)給戰(zhàn)場上的間諜。特工人員有一個短波接收器,知道要調(diào)到哪個臺以及何時調(diào)。無線電臺只不過廣播了自動聲音讀出一系列數(shù)字。這些數(shù)字被斷開的方式清楚地表明有多條消息,每條消息都有一個有關(guān)消息的頭信息。這種信息通常包括消息的長度和想要的接收者。間諜收聽第一組數(shù)字,以確定是否有消息在等著他。如果有,他接收到消息的密文,并根據(jù)頭信息來確定從他的那本一次性密碼本的哪里開始。然后將消息譯碼,最后銷毀消息和在一次性密碼本中任何使用過的頁。

在軍事和政府部門應(yīng)用中使用的加密算法與我們在計(jì)算機(jī)上使用的略有不同,但在實(shí)際中都是一樣有效的。我們將給出一個算法示例,假設(shè)一條消息只由從?A?到?Z?中的?26?個可能的字母組成。密碼本應(yīng)該用從?1?到?26?的數(shù)字填充,可能少到每頁一個數(shù)字,但通常一頁有?4?到?5?個數(shù)字。要加密消息的第一個字母,將等價數(shù)(如,"A"?=?1,?"Z"?=?26)與密碼本上顯示的第一個值相加。如果得出的數(shù)字大于?26,從該值中減去?26。結(jié)果被轉(zhuǎn)換回一個字母,然后寫下它。對該頁上的每個數(shù)字執(zhí)行這一操作,然后密碼本的最上一頁被撕下銷毀。隨后為第二組及以后組的字母重復(fù)這一過程。根據(jù)這種組織,密碼本每頁上最少可以包含一個數(shù)字。通常他們在每頁包含?5?個數(shù)字的組。總而言之,使用這種方法編碼消息是種單調(diào)乏味的工作。

解密消息需要的密碼本和用于加密消息所用的密碼本一模一樣。從密碼本的第一頁開始,密文的第一個字母被轉(zhuǎn)換成一個數(shù)字,從密碼本上的數(shù)中減去這個值。如果結(jié)果是零或小于零的數(shù),在結(jié)果上加?26。然后這個數(shù)再被轉(zhuǎn)換回字母。(這種簡單的算法總是能產(chǎn)生和原始純文本第一個字符相同的字母。)本子的最上面一頁就用完了,撕下并銷毀。然后,繼續(xù)對本子第二頁進(jìn)行解密。這又是單調(diào)乏味的工作。

密碼本的生成

生成密碼本是另一個難題。使用?War?and?Peace?這段文本作為密碼本的基礎(chǔ)不是好主意。因?yàn)?a href="/hebeideji/3167648486092343243.html">密鑰不是隨機(jī)的,那么密文就不是隨機(jī)的。已使用的一種技術(shù)與今天的抽獎活動使用的方法相同。編了號的球被放在一個封閉的箱子中,空氣將球吹得到處都是。一個操作員使用這個箱子來創(chuàng)建兩個相同的密碼本。對于密碼本上的第一個字符,操作者看都不看就從箱子中抽取出一個球。在兩個密碼本上記錄下球上的數(shù)字,然后將球放回到箱子中。然后重復(fù)這個過程。乏味的工作。

即使象選球這樣的技術(shù)在現(xiàn)實(shí)世界中也不是很實(shí)用的。事實(shí)上,生成和分發(fā)密碼本的困難正是在第二次世界大戰(zhàn)中選擇幾百個不那么安全的密碼代碼的一個主要原因。

一次性密碼本在戰(zhàn)場中使用時就顯示了非常多的問題。首先,密碼本必須在兩個通信方之間同步。請考慮當(dāng)?世界上最孤獨(dú)的鯨魚?向?Bob?發(fā)送消息,而?Bob?同時又向?Alice?發(fā)送消息的情況。他們兩個人使用了某些密鑰來進(jìn)行加密。如果每一方都精確地遵照算法操作,那么兩個人就都不能有正確的用于解密任何一方消息的密碼本了!

更糟糕的是,使用相同的密鑰加密兩條消息會泄露算法的安全性。如果某個人要猜兩條使用相同本子加密的消息,這個人就可以同時恢復(fù)這兩條原始消息。這種風(fēng)險經(jīng)常會產(chǎn)生。懶惰的士兵偶爾會使用用過的本子,有目的的密碼專家注意到了,就會使通信雙方認(rèn)為非常安全的消息,此時也不怎么安全了。

要解決這個問題,有必要給?Alice?和?Bob?兩個人每人一組兩本一次性密碼本。一組本子特定于從?Alice?到?Bob?的消息,另一組特定于從?Bob?到?Alice?的消息。現(xiàn)在,只要密碼本不被重用,并且只要密碼本在使用后被銷毀,使得沒人能夠泄露用過的密碼本,所有內(nèi)容就都是安全的了。

不幸的是仍然有另一個問題?--?數(shù)據(jù)完整性。讓我們設(shè)想一下?Alice?在早上?10:00?向?Bob?發(fā)送了一條消息,然后在下午?1:00?發(fā)送了一條,最后在晚上?5:00?又發(fā)送了一條消息。如果早上?10:00?的消息由于送信人中彈而永遠(yuǎn)不能到達(dá),Bob?要解密后面兩條消息就非常困難了。不是不可能,但這是主要的不便,因?yàn)?Bob?在嘗試解密下午?1:00?的消息時,必須猜出要從本子中的什么地方開始。一種解決這種問題的辦法是為消息編號,并對每條消息只使用一個本子。另一個解決方案是每天使用一個本子;這樣一次只能擾亂一天的通信。

安全性

在理論上,此種密碼是牢不可破的,而它的安全性已由克勞德·香農(nóng)所證明。

雖然它在理論上的安全性無庸置疑,但在實(shí)際操作上卻有著以下的問題:

用以加密的文本,也就是一次性密碼本,必須確實(shí)是隨機(jī)產(chǎn)生的。

它至少必須和被加密的文件等長。

用以加密的文本只能用一次,且必須對非關(guān)系人小心保密,不再使用時,用以加密的文本應(yīng)當(dāng)要銷毀,以防重復(fù)使用。

加密方法

首先手上要有一本一次性密碼本用以加密文件,接著將一次性密碼本里的字母,與被加密文件的字母給依序按某個事先約定的規(guī)定一一相混,其中一個相混的作法是將字母指定數(shù)字(如在英語中,將A至Z依序指定為0至25)然后將一次性密碼文本上的字母所代表的數(shù)字和被加密文件上相對應(yīng)的數(shù)字給相加,再除以該語言的字母數(shù),假設(shè)是n(如英語為26),若就此得出來的某個數(shù)字小于零,則將該小于零的數(shù)給加上n,如此便完成加密。

舉例說明

舉例一

若要加密訊息“This?is?an?example”,而用以加密的一次性密碼本如下所示:

MASKL?NSFLD?FKJPQ

則利用指定數(shù)字的方法,可分別將兩者給做以下的轉(zhuǎn)換:

This?is?an?Example?→?19?7?8?18?8?18?0?13?4?23?0?12?15?11?4

MASKL?NSFLD?FKJPQ?→?12?0?18?10?11?13?18?5?11?3?5?10?9?15?16

兩者依序相加后得到的訊息如下:

31?7?26?28?19?31?18?18?15?26?5?22?24?26?20

將以上得到的訊息模26后可得:

5?7?0?2?7?5?8?8?11?0?5?22?24?0?20

它也就變成了

FHACHFIILAFWYAU

而若要解密以上信息,反向操作即可。

舉例二

考慮這樣一條消息:"One-time?pads?are?cool."。我們必須把它寫成:?O?N?E?T?I?M?E?P?A?D?S?A?R?E?C?O?O?L

轉(zhuǎn)換成數(shù)字,消息就是:?15?14?05?20?09?13?05?16?01?04?19?01?18?05?03?15?15 12

假設(shè)本子上的前?18?個數(shù)字是:?02?15?18?24?02?14?24?09?20?14?09?10?01?17?19?02?19 13

對于第一個字母,我們將?15?和?2?相加得到?17。"Q"?是字母表中第?17?個字母,因此是密文的第一個字符。對于第二個字母,我們將?14?和?15?相加得到?29。因?yàn)樵摂?shù)大于?26,我們減去?26,得到?3,它轉(zhuǎn)換成字母?"C"。最終我們得到以下密文:?Q?C?W?R?K?A?C?Y?U?R?B?K?S?V?V?Q?H?Y

要解密這條消息,首先將密碼術(shù)文本轉(zhuǎn)換回?cái)?shù)字:?17?03?23?18?11?01?03?25?21?18?02?11?19?22?22?17?08 25

我們所使用的本子和用來加密消息的本子完全一樣。因此,本子上的第一個數(shù)字是?2。從?17?中減去?2,得到?15。將?15?轉(zhuǎn)換回字母?"O"。下一步,從密文中取出第二個數(shù)字?3,從中減去?15,因?yàn)?15?是本子上的第二個數(shù)。結(jié)果是?-12。因?yàn)檫@個結(jié)果小于?1,在這個數(shù)上加?26,得出?14。第?14?個字母是?"N"。以那種方法繼續(xù),最后我們就恢復(fù)了整條消息。

相關(guān)分析

一次性密碼本是否真有一種完美的加密算法?從理論上說,有的。如果使用正確的話,一次性密碼本就是不易破解的。但這種算法在實(shí)踐中用得并不多。在這篇文章中,我們將談?wù)勔淮涡悦艽a本、其優(yōu)缺點(diǎn),以及為什么有其它加密算法存在。

密碼術(shù)有時更是一種藝術(shù)而非科學(xué)。例如,我們無法確切回答一個象“Rijndael?算法有多安全?”這種看似簡單的問題。因?yàn)?Rijndael?使用?128?位(或更大)密鑰,我們甚至可以用到數(shù)字?2?128。但在現(xiàn)實(shí)中,沒人真的知道?Rijndael?有多安全,因?yàn)橐C明有關(guān)算法的安全性保證相當(dāng)困難。要假設(shè)沒有一種攻擊能成功破壞任何給定的算法幾乎是不可能的。有一個困難是每隔一段時間,新的密碼攻擊就會被發(fā)現(xiàn)。但當(dāng)我們考慮到想證明一種密碼術(shù)能經(jīng)受得住?任何未來的攻擊,甚至包括以后幾個世紀(jì)都不會被發(fā)現(xiàn)時,事情就變得更加困難了。

在現(xiàn)實(shí)中,那些確信安全的常用密碼術(shù)實(shí)際上有可能安全,也有可能不安全。我們信任密碼術(shù)是因?yàn)檫€沒有人能破解它,而不是因?yàn)?知道?它是安全的。這就是為什么密碼專家更傾向于推薦那些已被深入審查過的密碼術(shù),而不是更新或?qū)S玫拿艽a算法。工作原理是,如果許多聰明的腦瓜都無法破解一種算法,那么比起沒人仔細(xì)看過的那些算法來,它更有可能是安全的。關(guān)于一個問題思考的人越多,我們越有可能信任一種算法。這意味著我們最終討論的是算法的“最佳情況”安全性特性。使用對稱密鑰密碼術(shù),“最佳情況”時常與密鑰空間的大小相關(guān)?--?除非已經(jīng)知道有比嘗試每個可能的密鑰來公開數(shù)據(jù)(蠻力攻擊)更好的辦法。以上這些方法的結(jié)果可能會引起一些不安:所有對稱密鑰算法都可以被破解,只要有足夠的時間。最終,我們將希望寄托在一種想法上,即沒有人能有足夠的時間來破譯我們的代碼!例如,如果我們使用的是?256?位的加密算法,沒有僅比蠻力攻擊更有效的攻擊來對付它,我們就可以認(rèn)為一個攻擊者在有限時間內(nèi)破解密碼的幾率相當(dāng)小。

從數(shù)學(xué)上證明有關(guān)公鑰算法的問題比對稱算法要來得容易。這是因?yàn)楣€算法往往基于詳細(xì)定義的數(shù)學(xué)問題(例如由質(zhì)數(shù)組成的因式分解組合)。與之相反,對稱算法往往是一組?特別?的替代與排列,要在上下文中分析它們比較困難。因此,假設(shè)有種完美的實(shí)現(xiàn),我們知道破解?RSA?算法的困難與對非常大的數(shù)字進(jìn)行因子分解的困難是緊密聯(lián)系在一起的。數(shù)學(xué)家相信對大的數(shù)字進(jìn)行因式分解在相當(dāng)長的一段時間內(nèi)也不能完成。不幸的是,至今沒有一個人能?證明因式分解確實(shí)那么難。

即使我們知道因式分解是那么的困難(并假設(shè)沒有其它的實(shí)現(xiàn)或設(shè)計(jì)問題),對于?RSA?是可破解的仍然有一些理論限制,與對稱算法的情況一樣。如果在有限時間內(nèi)嘗試出密鑰的同時空等,那么絕對能破譯?RSA?密鑰!

參考資料 >

一次性密碼本.www.ibm.com.2010-09-27

生活家百科家居網(wǎng)