创建词条

一次性密码本

编辑词条分享

本词条由雨雪冰柔 创建,已被浏览次,共有2位协作者编辑了1个版本。最新协作者:雨雪冰柔 never137

一次性密码本,是一种用于安全地传送和存储数据的方法。发送主机生成一个随机字符序列作为密钥流,以该密钥流作为一次性密码本。将密钥流与明文按位“异或”产生密文。将密钥流和密文通过物理上分离的通信路径路由到接收主机,接收主机通过使用“异或”运算将密钥流应用到密文对其进行解密。使用MPLS标记或者严格路由选项建立分离的路由路径。

纠错 编辑摘要
目录

一次性密码本 - 定义

一次性密码本(One-time Pad;OTP)是密码学中的一种加密算法。是以随机的金钥(key)组成明文,且只使用一次。

一种通过应用一次性密码本安全地存储数据的方法,所述方法包括以下计算机实施步骤:接收第一数据流,所述第一数据流包括真正随机生成字符的密钥流;接收包括密文的第二数据流,其中在两个物理上分离的路由通信信道上接收所述第一和第二数据流,其中所述密文包括源文本,通过使用异或运算将所述密钥流应用到所述源文本,对所述源文本进行加密;使用所述密钥流对所述密文进行解密,导致产生和储存等同于所述源文本的解密数据。[1] 

一次性密码本 - 历史记载

 一次性密码本比计算机的历史还要早,可以回溯到1917年。它们是在第二次世界大战期间偶然用于高安全通信的。“一次性密码本”中的“密码本”来源于密码术的最初形式:密钥材料打印在厚厚的本子上,每页一个字母。

一次性密码本在今天仍在一些有限的范围内使用。许多政府部门使用短波无线电将加密的消息传达给战场上的间谍。特工人员有一个短波接收器,知道要调到哪个台以及何时调。无线电台只不过广播了自动声音读出一系列数字。这些数字被断开的方式清楚地表明有多条消息,每条消息都有一个有关消息的头信息。这种信息通常包括消息的长度和想要的接收者。间谍收听第一组数字,以确定是否有消息在等着他。如果有,他接收到消息的密文,并根据头信息来确定从他的那本一次性密码本的哪里开始。然后将消息译码,最后销毁消息和在一次性密码本中任何使用过的页。

在军事和政府部门应用中使用的加密算法与我们在计算机上使用的略有不同,但在实际中都是一样有效的。我们将给出一个算法示例,假设一条消息只由从 A 到 Z 中的 26 个可能的字母组成。密码本应该用从 1 到 26 的数字填充,可能少到每页一个数字,但通常一页有 4 到 5 个数字。要加密消息的第一个字母,将等价数(如,"A" = 1, "Z" = 26)与密码本上显示的第一个值相加。如果得出的数字大于 26,从该值中减去 26。结果被转换回一个字母,然后写下它。对该页上的每个数字执行这一操作,然后密码本的最上一页被撕下销毁。随后为第二组及以后组的字母重复这一过程。根据这种组织,密码本每页上最少可以包含一个数字。通常他们在每页包含 5 个数字的组。总而言之,使用这种方法编码消息是种单调乏味的工作。

解密消息需要的密码本和用于加密消息所用的密码本一模一样。从密码本的第一页开始,密文的第一个字母被转换成一个数字,从密码本上的数中减去这个值。如果结果是零或小于零的数,在结果上加 26。然后这个数再被转换回字母。(这种简单的算法总是能产生和原始纯文本第一个字符相同的字母。)本子的最上面一页就用完了,撕下并销毁。然后,继续对本子第二页进行解密。这又是单调乏味的工作。

一次性密码本 - 密码本的生成

 生成密码本是另一个难题。使用 War and Peace 这段文本作为密码本的基础不是好主意。因为密钥不是随机的,那么密文就不是随机的。已使用的一种技术与今天的抽奖活动使用的方法相同。编了号的球被放在一个封闭的箱子中,空气将球吹得到处都是。一个操作员使用这个箱子来创建两个相同的密码本。对于密码本上的第一个字符,操作者看都不看就从箱子中抽取出一个球。在两个密码本上记录下球上的数字,然后将球放回到箱子中。然后重复这个过程。乏味的工作。 

即使象选球这样的技术在现实世界中也不是很实用的。事实上,生成和分发密码本的困难正是在第二次世界大战中选择几百个不那么安全的密码代码的一个主要原因。

一次性密码本在战场中使用时就显示了非常多的问题。首先,密码本必须在两个通信方之间同步。请考虑当 Alice 向 Bob 发送消息,而 Bob 同时又向 Alice 发送消息的情况。他们两个人使用了某些密钥来进行加密。如果每一方都精确地遵照算法操作,那么两个人就都不能有正确的用于解密任何一方消息的密码本了!

更糟糕的是,使用相同的密钥加密两条消息会泄露算法的安全性。如果某个人要猜两条使用相同本子加密的消息,这个人就可以同时恢复这两条原始消息。这种风险经常会产生。懒惰的士兵偶尔会使用用过的本子,有目的的密码专家注意到了,就会使通信双方认为非常安全的消息,此时也不怎么安全了。

要解决这个问题,有必要给 Alice 和 Bob 两个人每人一组两本一次性密码本。一组本子特定于从 Alice 到 Bob 的消息,另一组特定于从 Bob 到 Alice 的消息。现在,只要密码本不被重用,并且只要密码本在使用后被销毁,使得没人能够泄露用过的密码本,所有内容就都是安全的了。

不幸的是仍然有另一个问题 -- 数据完整性。让我们设想一下 Alice 在早上 10:00 向 Bob 发送了一条消息,然后在下午 1:00 发送了一条,最后在晚上 5:00 又发送了一条消息。如果早上 10:00 的消息由于送信人中弹而永远不能到达,Bob 要解密后面两条消息就非常困难了。不是不可能,但这是主要的不便,因为 Bob 在尝试解密下午 1:00 的消息时,必须猜出要从本子中的什么地方开始。一种解决这种问题的办法是为消息编号,并对每条消息只使用一个本子。另一个解决方案是每天使用一个本子;这样一次只能扰乱一天的通信。  

一次性密码本 - 安全性

 在理论上,此种密码是牢不可破的,而它的安全性已由克劳德·艾尔伍德·香农所证明。   

虽然它在理论上的安全性无庸置疑,但在实际操作上却有着以下的问题:   

用以加密的文本,也就是一次性密码本,必须确实是随机产生的。   

它至少必须和被加密的文件等长。   

用以加密的文本只能用一次,且必须对非关系人小心保密,不再使用时,用以加密的文本应当要销毁,以防重复使用。

一次性密码本 - 加密方法

 首先手上要有一本一次性密码本用以加密文件,接着将一次性密码本里的字母,与被加密文件的字母给依序按某个事先约定的规定一一相混,其中一个相混的作法是将字母指定数字(如在英语中,将A至Z依序指定为0至25)然后将一次性密码文本上的字母所代表的数字和被加密文件上相对应的数字给相加,再除以该语言的字母数,假设是n(如英语为26),若就此得出来的某个数字小于零,则将该小于零的数给加上n,如此便完成加密。

一次性密码本 - 举例说明

举例一

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

MASKL NSFLD FKJPQ   

则利用指定数字的方法,可分别将两者给做以下的转换:   

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 

转换成数字,消息就是: 15 14 05 20 09 13 05 16 01 04 19 01 18 05 03 15 15 12 

假设本子上的前 18 个数字是: 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。因为该数大于 26,我们减去 26,得到 3,它转换成字母 "C"。最终我们得到以下密文: Q C W R K A C Y U R B K S V V Q H Y 

要解密这条消息,首先将密码术文本转换回数字: 17 03 23 18 11 01 03 25 21 18 02 11 19 22 22 17 08 25 

我们所使用的本子和用来加密消息的本子完全一样。因此,本子上的第一个数字是 2。从 17 中减去 2,得到 15。将 15 转换回字母 "O"。下一步,从密文中取出第二个数字 3,从中减去 15,因为 15 是本子上的第二个数。结果是 -12。因为这个结果小于 1,在这个数上加 26,得出 14。第 14 个字母是 "N"。以那种方法继续,最后我们就恢复了整条消息。 

一次性密码本 - 相关分析

一次性密码本是否真有一种完美的加密算法?从理论上说,有的。如果使用正确的话,一次性密码本就是不易破解的。但这种算法在实践中用得并不多。在这篇文章中,我们将谈谈一次性密码本、其优缺点,以及为什么有其它加密算法存在。

密码术有时更是一种艺术而非科学。例如,我们无法确切回答一个象“Rijndael 算法有多安全?”这种看似简单的问题。因为 Rijndael 使用 128 位(或更大)密钥,我们甚至可以用到数字 2 128。但在现实中,没人真的知道 Rijndael 有多安全,因为要证明有关算法的安全性保证相当困难。要假设没有一种攻击能成功破坏任何给定的算法几乎是不可能的。有一个困难是每隔一段时间,新的密码攻击就会被发现。但当我们考虑到想证明一种密码术能经受得住 任何未来的攻击,甚至包括以后几个世纪都不会被发现时,事情就变得更加困难了。 

在现实中,那些确信安全的常用密码术实际上有可能安全,也有可能不安全。我们信任密码术是因为还没有人能破解它,而不是因为 知道 它是安全的。这就是为什么密码专家更倾向于推荐那些已被深入审查过的密码术,而不是更新或专用的密码算法。工作原理是,如果许多聪明的脑瓜都无法破解一种算法,那么比起没人仔细看过的那些算法来,它更有可能是安全的。关于一个问题思考的人越多,我们越有可能信任一种算法。这意味着我们最终讨论的是算法的“最佳情况”安全性特性。使用对称密钥密码术,“最佳情况”时常与密钥空间的大小相关 -- 除非已经知道有比尝试每个可能的密钥来公开数据(蛮力攻击)更好的办法。以上这些方法的结果可能会引起一些不安: 所有对称密钥算法都可以被破解,只要有足够的时间。 最终,我们将希望寄托在一种想法上,即没有人能有足够的时间来破译我们的代码!例如,如果我们使用的是 256 位的加密算法,没有仅比蛮力攻击更有效的攻击来对付它,我们就可以认为一个攻击者在有限时间内破解密码的几率相当小。 

从数学上证明有关公钥算法的问题比对称算法要来得容易。这是因为公钥算法往往基于详细定义的数学问题(例如由质数组成的因式分解组合)。与之相反,对称算法往往是一组 特别 的替代与排列,要在上下文中分析它们比较困难。因此,假设有种完美的实现,我们知道破解 RSA 算法的困难与对非常大的数字进行因子分解的困难是紧密联系在一起的。数学家相信对大的数字进行因式分解在相当长的一段时间内也不能完成。不幸的是,至今没有一个人能 证明因式分解确实那么难。 

即使我们知道因式分解是那么的困难(并假设没有其它的实现或设计问题),对于 RSA 是可破解的仍然有一些理论限制,与对称算法的情况一样。如果在有限时间内尝试出密钥的同时空等,那么绝对能破译 RSA 密钥![2] 

附图

 上传图片
注释与参考:
[1]^应用一次性密码本安全地储存和传送数据的方法和系统 
[2]^一次性密码本
被引用:本词条已被如下媒体引用 我来补充
开放分类:我来补充
功能
密码学
技术
科学技术

分享到: 编辑词条

互动百科的词条(含所附图片)系由网友上传,如果涉嫌侵权,请与客服联系,我们将按照法律之相关规定及时进行处理。如需转载,请注明来源于www.hudong.com。

此词条还可添加  信息模块

相关任务

任务名 发起人
盘点密码学相关知识 冯三石

相关词条

编辑
2010广州车展