一次性密码本(绝对无法破译)

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 一次性密码本加密解密绝对无法破译缺点


一次性密码本


 一次性密码本即Vernam Cipher,是由Gilbert Vernam在1917年,开发的一种加密算法。是一种通过在文本的二进制级别上进行工作来对纯文本进行加密的密码技术。之所以叫做一次性密码本,是因为加密所用的密钥是一次性的,即密钥只会使用一次,不会出现因为密钥泄露导致之前的加密内容被解密。即使密钥不小心被泄露,也只会影响一次通信过程。


加密


    众所周知,任何信息在计算机内部都是由0,1两个数字保存,在进行传输时需要将传输的信息转化为对应二进制码传输,例如,传输文本消息,就需要利用特定的编码方式编码,比如常用的ASCII,Unicode等。


    一次性密码本的加密方式非常简单,就是将明文(待传信息的编码)和一串随机生成的二进制码进行XOR(异或)运算。


 1、将明文编码,即转换为二进制。

 2、随机生成和明文二进制位数相同的密钥。

 3、将明文和密钥的二进制进行XOR操作,生成密文。




解密


      解密过程依靠的是XOR操作的自反性,先简单介绍一下异或操作,如果异或的两个bit相同结果为0,异或的两个bit不同结果为1。例如:


 0 XOR 0 = 0

 0 XOR 1 = 1

 1 XOR 0 = 1

 1 XOR 1 = 0


      异或还有一个非常重要的性质:自反性,a XOR b = c,c XOR b = a即对同一数进行两次异或结果将回到最初的状态。


      由此,通过明文和密钥异或得到的密文,再通过将密文和密钥再次异或操作得到明文。以此实现一次性密码本的解密过程。





绝对无法破译


     虽然一次性密码本非常简单,但是一次性密码本是绝对无法破解的,这个破解并不是指现有的计算能力不够,而是指即使拥有无穷大的计算能力也无法破解。


     假设我们拿到了密文并进行暴力破解,也就是将所有顺序的密钥尝试一遍,假设密文长度是32bit,那么我们将得到232数量的明文,那么我们怎么判断哪一个明文是正确的呢?显然我们无法判断哪一个是正确的明文,因为在所有的组合排列中可能生成多个有意义的文字。所以这种解密是无意义的,就像是我知道了原文的长度,然后自己构造这个长度的原文。因此一次性密码本是无法破译的。


缺点


既然一次性密码本无法破解,那为什么现实中一次性密码本没有被使用呢?


1、密钥配送问题


     密钥和原文以及密文都是等长的,目标端如果想解密就必须拿到密钥,如果能有一种方法将密钥安全地发送出去,那么岂不是也可以用同样的方法来安全发送明文吗?


2、密钥保存问题


     如果有办法安全保存与明文一样长的密钥,那不是也有办法安全保存明文本身吗?也就是说,从一开始我们根本就不需要密码。


3、密钥的重用


     在一次性密码本中绝对不能重用过去用过的随机比特序列,一次性密码本中的“一次性”也正是由此而来。这是因为作为密钥的比特序列一旦泄密,过去所有的机密通信内容将全部被解密。每个密钥只用一次,这即是缺点也是优点。意味着我们每次都要不停的更换密钥,增加了复杂性。


4、密钥的同步


 当明文很长时,一次性密码本也会跟着变长。如果明文是一个大小为100MB的文件,则密钥的大小也一定是100MB。而且在通信过程中,发送者和接收者的密钥的比特序列不允许任何错位,否则错位的比特后的所有信息将无法解密。


5、密钥的生成


     在一次性密码本中,需要生成大量的随机数。这里的随机数并不是通过计算机程序生成的伪随机数,而必须是无重复性的真正随机数。


      最后,虽然一次性密码本无法在现实中使用,但是它为很多其他的加密算法以启发,由此产生了很多个变种。

————————————————

版权声明:本文为CSDN博主「Acx7」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/Acx77/article/details/116810247

相关文章
|
3月前
|
存储 安全 数据安全/隐私保护
解锁Python安全新姿势!AES加密:让你的数据穿上防弹衣,无惧黑客窥探?
【8月更文挑战第1天】在数字化时代,确保数据安全至关重要。AES(高级加密标准)作为一种强大的对称密钥加密算法,能有效保护数据免遭非法获取。AES支持128/192/256位密钥,通过多轮复杂的加密过程提高安全性。在Python中,利用`pycryptodome`库可轻松实现AES加密:生成密钥、定义IV,使用CBC模式进行加密与解密。需要注意的是,要妥善管理密钥并确保每次加密使用不同的IV。掌握AES加密技术,为数据安全提供坚实保障。
182 2
|
4月前
|
算法 安全 数据安全/隐私保护
支付系统---微信支付09------数字签名,现在Bob想要给Pink写一封信,信件的内容不需要加密,怎样能够保证信息的完整性,使用信息完整性的主要手段是摘要算法,散列函数,哈希函数,H称为数据指纹
支付系统---微信支付09------数字签名,现在Bob想要给Pink写一封信,信件的内容不需要加密,怎样能够保证信息的完整性,使用信息完整性的主要手段是摘要算法,散列函数,哈希函数,H称为数据指纹
|
存储 分布式计算 算法
最安全的加密算法 Bcrypt,再也不用担心数据泄密了~
最安全的加密算法 Bcrypt,再也不用担心数据泄密了~
|
小程序 网络安全 数据安全/隐私保护
现代密码学-传统密码技术(置换、代换密码)
现代密码学-传统密码技术(置换、代换密码)
853 0
现代密码学-传统密码技术(置换、代换密码)
|
安全 数据安全/隐私保护
弱密码检测又没过?教你一键设置高强度随机密码
有时候为了简单,总喜欢设置123456的弱密码,但是这种密码过于简单,不太安全。
174 0
|
数据安全/隐私保护
一次性密码本-绝对不会被破译的密码
一次性密码本-绝对不会被破译的密码
|
安全 Ubuntu 程序员
3 种生成高强度密码的方法
在生活中,我们需要用到大量的密码,这些密码最好不要统一,否则万一泄漏的话,所有账号都暴露在风险之下。而在工作中,我们同样也需要用到大量密码,比如批量添加用户,批量设置服务器密码等。
633 0