流加密,一次性密码本的原理,简介,事例以及攻击方式
流加密(Stream cipher)
又称串流加密,资料流加密,是一种对称加密,也是古时所使用的替换法在电子信息时代的另一种升华。
以前一直使用的是明文随着密钥的值位移,而这里位(bit)进行异或(下文将一直使用:⊕作为异或符号)操作。
而其中最具有代表性的,理论上是完美安全(prefect security)的就是一次性密码本(One Time Pad)。
一次性密码本(One Time Pad)
一次性密码本是古典密码学替换式加密方法的终极形态。在我上篇密码学史中所提到的凯撒密码,替换密码,Vigener Cipher等,他们共通的弱点都是语言中字母频率的不等,导致密钥加密后密文中字母出现概率依旧不等,从而发现突破口。
而一次性密码本,则是使用了与明文等长的密文,使得所有字母的使用概率相等,密文完全不揭示任何明文信息,使得任何唯密文攻击无效。而在计算机领域则是bit位异或操作,隐藏ASCII码或者文件信息,具体加密方式及解密方式证明如下:
C:密文 E:加密操作 D:解密操作 m:明文 k:密钥
C = E( k, m) = k ⊕ m
D = ( k, c) = k ⊕ c
Indeed: D( k, E( k, m)) = D( k, k ⊕ m)
= k ⊕ (k ⊕m) = ( k⊕k) ⊕ m
= 0 ⊕ m
= m
实际应用中难点:
虽然这种加密方式理论上绝对安全,但是在计算机的实际应用上还是有几点问题的。
1.首先要共享一个和明文一样长度的Key,如果我们有方法绝对安全的共享这个Key,那我们为什么不直接绝对安全的共享明文呢。
2.抛开第一条不说,一次性密码本也是有相应的攻击方式的,但有个先决条件,就是一次性密码本2次或者多次使用。
证明:
C1 <- m1 ⊕ kC2 <- m2 ⊕kC1 ⊕ C2 -> m1 ⊕ m2 -> m1,m2 由此推断出ASCII码或者相应的字母
真实案例:
1.1941-1946,苏联使用一次性密码本加密消息,密码本的生成由人工丢骰子生成。本该天衣无缝的加密项目,但是因为苏联觉得丢骰子太浪费人力了,就多次使用同一密码本以便节约成本。最后被美国破解,在美国称为Venona计划。(省什么都不能省这个啊、、、)
2.Windows NT采用PPTP协议作为服务器与用户交互方式。具体加密方式如下:
用户端:(m1+m2+m3...) ⊕ k
服务端(m1+m2+m3...) ⊕ k
多个消息结合起来后采用密钥加密,看似没问题,但是最大的问题是,用户端与服务端使用的是相同的k加密,因此这就达成了一次性密码本多次使用的漏洞。
3.802.11b 协议,wifi协议。
m:明文 CRC:校验码 PRG:伪随机密钥流
明文消息由m和CRC组成,由PRG作为密码本加密,密文ciphetext前会放上IV(24位字符)。
每帧使用不同的密钥,具体方式是,将IV放在密文前面,每个数据包IV不同,于是每一个数据包后IV+1,然后服务器可以通过IV和Key推断出PRG。
问题:24位的IV约为1600万,意思就是,每1600帧后密码本会有一次循环。这还不是最大的问题,最大的问题是每次重启后IV会回归0,并且每次IV+1的策略也使得新密码本变化不大。
4.RC4,1987年,采用128位作为seed,密钥2048位,每个byte一循环,曾经的google的https也在使用。
弱点:
伪随机设计的有问题。第二字节出现0的概率是平均值的两倍,第三,四位的概率也不均匀。解决方法:丢掉前256位,从257位字节开始,使用第二个循环。
另外,跑掉几个G的数据量后,出现(00)双字节的概率偏大。
最后,每个key之间有一定的联系。
5.DVD加密,CSS
偏面向硬件,这里就简单讲述下破解方法吧。
seed = 5 bytes = 40 bits,因为出口法规定,所以只能使用这个过短的密钥。
另外,抛开上面一点,只需要2的17次方尝试就能解开。因为DVD文件均是.MPEG文件,前缀已知。
番外:完整性攻击
一次性密码本,只要使用得当,就是理论中的完美加密。但是其本身只关注与攻击者无法得到明文内容,却无法保证攻击者是否有修改密文内容,从而达到混淆明文的结果。
证明:
密文: m ⊕ k攻击者: (m ⊕ k) ⊕ k2接收者(解密): m ⊕ k2
由此可见,接收者无法还原真正的明文,也无从知晓密文是否遭受攻击。
例子:
如果有Bob发送一份邮件,邮件格式的前缀都为“From Bob”,完全使用一次性加密本加密后发送出去,中途有攻击者假设知道Bob这个人,并且不想让接受方知道是Bob发送的邮件,他便可以将发送方改为Eve。
Bob ASCII:42 6F 62
Eve ASCII:45 76 65
两者⊕,得到07 19 07,因此攻击者所要做的就是将07 19 07于原文中Bob的位置进行⊕处理,接收方解密后便是发送方就是 From Eve。
流加密,一次性密码本的原理,简介,事例以及攻击方式相关推荐
- 基于MATLAB负载换流逆变器毕业设计,分享:基于电流内环的单相并网逆变器原理简介及仿真验证...
本帖最后由 邮件人 于 2014-5-15 20:31 编辑 1.并网逆变器概述 并网逆变器是一种将直流电转换为与电网同频同相的交流电的电力电子装置,在工频范围内可分为风电并网逆变器与光伏并网逆变器. ...
- java利用TOTP算法动态生成一次性密码
一.HOTP HOTP 算法,全称是"An HMAC-Based One-Time Password Algorithm",是一种基于事件计数的一次性密码生成算法,详细的算法介 ...
- Linux安全原理简介
Linux安全原理简介 介绍 在设置Linux计算机的所有阶段,安全性应是首要考虑之一.要在计算机上实施良好的安全策略,需要对Linux的基础知识以及所使用的某些应用程序和协议有充分的了解. Linu ...
- 使用一次性密码解决方案更安全地验证身份
转自: http://msdn.microsoft.com/zh-cn/magazine/cc507635.aspx 安全性 使用一次性密码解决方案更安全地验证身份 Dan Griffin 代码下载位 ...
- 11 种加密 哈希算法的原理及其 Java 实现
11 种加密 & 哈希算法的原理及其 Java 实现 一.目的 二.运行环境 三.基本原理及步骤 (I)各种加密算法的原理: ① DES 数据加密标准(Data Encryption Stan ...
- 关于Google身份验证器、基于时间的一次性密码 (TOTP)算法的初步了解
一.Google Authenticator 1.概述 Google Authenticator是基于双因素身份验证 ( 2FA ) 的应用程序,有助于识别用户身份并确认用户声称自己是谁以及他是否真的 ...
- [信息安全] 4.一次性密码 amp;amp;amp;amp; 身份认证三要素
在信息安全领域,一般把Cryptography称为密码,而把Password称为口令.日常用户的认知中,以及我们开发人员沟通过程中,绝大多数被称作密码的东西其实都是Password(口令),而不是真正 ...
- 三种Cache写入方式原理简介
三种Cache写入方式原理简介 在386以上档次的微机中,为了提高系统效率,普遍采用Cache(高速缓冲存储器),现在的系统甚至可以拥有多级Cache.Cache实际上是位于CPU与DRAM主存储器之 ...
- Flink部署、使用、原理简介
通过安装包方式部署 下载地址 https://archive.apache.org/dist/flink/flink-1.7.2/flink-1.7.2-bin-hadoop27-scala_2.11 ...
- 轻量级日志系统Loki原理简介和使用
前言 这篇文章应朋友的要求,让写一篇loki日志系统,咱定义不容辞 一定要好好写 开干! 现实中的需求 公司的容器云运行的应用或某一个节点出现了问题,解决的思路 问题首先被prometheus监控 1 ...
最新文章
- pytorch中如何处理RNN输入变长序列padding
- 人为何会发烧,超过42°C会怎样?
- js实现网页页面回到顶部
- 【webrtc】webrtc的rtp重传代码分析
- ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your
- 潜力的监控mysql_Grafana 数据库监控平台
- 群晖 root_最新群晖DSM7.0降级教程
- 小米4刷CM13系统
- SpringBoot中使用异步方法优化Service逻辑,提高接口响应速度
- iOS开发多线程篇---线程间的通信
- 线性代数知识荟萃(2)——矩阵运算理论
- 阿里云 ubuntu 安装 curl
- Android之编写测试用例
- 2021-09-08173. 二叉搜索树迭代器 栈
- 304.二维区域和检索-矩阵不可变
- 里恩eLearning在线培训考核系统介绍
- 常用和不常用端口一览表
- Cassandra中Gossip具体实现方式
- Systemback更改默认存储目录/home,并在Ubuntu18创建大于4G的Linux镜像教程
- Spring boot的特性与四大核心