密码学:流密码.(对称密码)

news2025/1/16 21:12:03

密码学:流密码.

流密码(Stream Cipher)属于对称密码算法中的一种,其基本特征是加解密双方使用一串与明文长度相同的密钥流与明文流组合来进行加解密密钥流通常是由某一确定状态的伪随机数发生器所产生的比特流,双方将伪随机数生成器的种子 (seed) 作为密钥,而组合函数通常为按位异或 (xor)运算。流密码的基本结构: 

由于伪随机数发生器的初始化为一个一次性过程,生成密钥流是一个很小的开销,故流密码在处理较长的明文时存在速度优势。相对应的,流密码的安全性几乎完全依赖于伪随机数发生器所产生数据的随机性。

对于一个安全的发生器,一般要求有以下特性:

所产生随机数的周期足够大

种子的长度足够长,以抵抗暴力枚举攻击

种子中1位的改变会引起序列的极大改变(雪崩效应)

产生的密钥流能抵抗统计学分析,如频率分析等

在获得少量已知的密钥流时,无法还原整个发生器的状态

目录:

密码学:流密码.

线性同余生成器(LCG)

(1.1)由已知序列破译LCG

(1.2)攻破Linux Glibc的rand0函数-1

(2)线性反馈移位寄存器(LFSR)序列。

(2.1)由已知序列破译LFSR

(2.2)攻破Linux glibc的rand0函数-2

(3)RC4


线性同余生成器(LCG)

线性同余生成器(Linear Congruential Generator,LCG)是一种由线性函数生成随机数序列的算法,是一种简单且易于实现的算法。标准的LCG的生成序列满足下列递推式:

Xn+1=(AXn+1 + B) mod M

其中,A、B,M内设定的常数,同时需要初始值X0作为种子.

从以上公式中不难看出,LCG的周期最大为M。

(1.1)由已知序列破译LCG

在已知 M 的情况下,由于 LCG 的生成式为一个简单的线性关系式,若能获取连续的2个Xi,便可建立个关于 A 和 B 的方程,获取多个Xi;,则可获得方程组

Xi+1=(AXi + B) mod M

Xj+1=(AXj + B) mod M

求解此方程组,即可解出参数 A 和 B。

若 M 未知,则需要较多已知的输出序列。由于通过线性同余方法得到的数值一定小于M,且对于满足周期为 M 的序列是在 0~ M-1 范围内均匀分布,通过观察所有的输出可以得到 M 的最小值,枚举大于这个数值的 M。选取几个连续的解上述方程,对于有解的情况,再将其他  x 代入进行验证,直到所有的输出通过验证。因为均匀分布,枚举量不会太大.

VolgaCTF Quals 2015,题目提供了一个加密脚本和一个被加密的PNG文件。加密脚本如下:

可以看到,脚本中对于flag.png进行了流密码加密,由

可知,对于密钥流的使用是每次产生的数字以小端序打包为2字节整数,再与明文进行异或后加密使用的密钥流由 LCG 产生,其中模数 M 已经给出,为 65521,而系数 A 和常数 B 并没有给出,需要通 i 攻击来获取。

由于末知量有A B,可以选取3个连续的密钥数值进行计算。选取=40464,X2=44749,x3=59984,代入生成式,得到

44749 =(A*40464+B)mod 65521

59984 =(A*44749+B)mod 65521

式(7-4)-式(7-3),得

15235 =(A*4285)mod 65521

对式(7-5)求解同余方程,得

A=44882mod65521

 代入式(7-3),解得

B=50579mod65521

 将A和B代入首个生成式

40464=(44882*x0+50579) mod 65521

解得

x0=37388 mod 65521

化为 2 字节小端序数,得到 6 字节的 key 为:

52 AF 93 C5 0C 92

将密钥替换进源程序,由于加密采用异或操作,故只需再进行一次异或即可解密:

 解密获得如图所示的flag图片,即解密成功

一般情况下,式(7-5)的方程不一定有解。本例中的模数M=65521为一个素数,即对于任意正整数1~65520,均存在对M的逆元。若遇到逆元不存在的情况,我们需要重新选取已知明文进行攻击


(1.2)攻破Linux Glibc的rand0函数-1

Linux GNU C library中的rand0函数的实现如下:

可以看到,当使用rand type 0时,采用的是标准的LCG算法,生成公式为:

Si=(1103515245*S1+12345) mod 2147483648

显然,当捕获到一个其产生的随机数时,便可通过递推式预测出后产生的所有随机数。因为与1103515245 与 2147483648 互素,可求得逆元1857678181,有

Si-1=(Si-12345)*1857678181 mod 2147483648

从而实现随机数序列的向前恢复

由于此方法的安全性过低,目前Glibc中提供的初始化函数srand0已经弃用TYPE_0,而默认使用 TYPE_3。TYPE_3攻破的方法将在7.4.2节中介绍。


(2)线性反馈移位寄存器(LFSR)

移位寄存器 (Shift Register) 是数字电路中常见的一种器件,可以并行输入若干位进行初始化,并可进行移入、移出等操作,常被用于产生序列信号。当产生的序列信号随机性足够强时,即可满足流密码中产生密钥流的需求。密码学中常用的是线性反馈移位寄存器 (LFSR),它由一个移位寄存器个反馈函数组成,反馈函数为一个线性函数。进行密钥流生成时,每次从移位寄存器中移出一位作为当前的结果,而移入的位由反馈函数对寄存器中的某些位进行计算来确定。

即移入位由寄存器中第32、7、5、3、2、1位异或而成。这种周期最大的序列被称为m序列。


(2.1)由已知序列破译LFSR

设LFSR长度为n位,当已知其长度为2n的输出时,若方程组有解,即可通过解线性方程组来完全获得LFSR的反馈函数,从而破译LFSR。例如,考虑4位某未知LFSR,获取输出序列10001010,由于或等价于模2加法,即可列出下列线性方程组:

解方程组,可得

那么,即可求得反馈函数为

即可完全预测此LFSR的序列.


(2.2)攻破Linux glibc的rand0函数-2

这种产生下一个随机数的方法是由状态数组中的 fptr 和 rptr 指向的数字相加,再除以2来实现的,非常类似线性反馈的生成方法。在 TYPE_3 的情况下,这个状态数组的长度为 344,而 fptr 和 rptr 分别为当前下标减 31 和当前下标减 3,那么产生下一个随机数的函数实际上是如下线性反馈式:

 

注意,移入状态数组中的数并不是产生的随机数,而是在右移1位前的数,末位存在 0和 1两种情况这样我们获取32组随机数后,向下预测的下一个数会以 25 % 的概率存在1的误差,且误差会随着预测数的增多而增大。不过,大部分情况下并不需要预测太多,1 的误差已经足够使用,而且如果能够继续获取随机数,那么可以一边预测一边修正,减少误差。

以下为一个一边预测一边修正随机数的简单 Demo:


(3)RC4 算法

RC4是一种特殊的流加密算法,1987年由Ronald ivest提出。RC4是有线等效加密 (WEP)中采用的加密算法,曾经是 TLS 可采用算法之一,RC4 使用 0-255 位的密钥来生成流密码,然后将流密钥异或来产生密文。生产密文的极高的算法效率和较强的高强度,RC4 算法得到了非常广泛的应用。

RC4算法在线加密和解密:在线加密/解密,对称加密/非对称加密

RC4算法的伪代码(来自维基百科)如下。首先,根据输入的密钥初始化S盒。

然后每输入1字节,就做一次S盒替换操作,并输出1字节流密钥与明文异或:

显然,RC4算法作为一种流密码算法,也易受到已知明文攻击的影响。如果使用某一密钥加密了n字节的数据,并知道明文,即可恢复n字节的流密钥;如果同一密钥被重复使用,那么截获密文即可解得相应的明文。实际攻击的过程中,经常通过一些可预测的内容来尝试已知明文攻击,如HTTP报文的头部等。

特别地,当输入的key为[0,0,255,254,253,....,2]时,由模的运算性质可以发现S盒替换过程相当于没有替换,那么输出的流密钥即确定的S[ (2*i) %256],重复周期非常短。另外,有些密钥属于弱密钥,也会在很短的长度内产生重复的密钥流,所以在实际使用RC4算法时,需要事先对密钥进行测试。

       

         

         

学习书籍:从0到1:CTFer成长之路... 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/501142.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构-二叉树遍历线索二叉树

目录 一、二叉树的定义 *几种特殊的二叉树 *二、二叉树的性质 三、二叉树的存储结构 *四、二叉树的遍历 *4.1先序遍历 * 4.2中序遍历 * 4.3后序遍历 非递归算法遍历 *4.4层序遍历 *五、遍历序列构造二叉树 六、线索二叉树 6.1逻辑结构: * 6.2构造线索二叉树 一、二…

Mybatis Plus | 快速入门

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! Mybatis Plus MyBatis-Plus(简称 MP)是一个基于 MyBatis 的增强工具,它对 Mybatis 的基础功能进行了增强,但未做任何改…

Qt 多语言界面设计概述

1、多语言界面设计概述 有些软件需要开发多语言界面版本,如中文版和英文版,并且在软件里可以方便地切换界面语言。Qt 为多语言界面提供了很好的支持,使用 Qt 的一些规则和工具,可以很方便地为应用程序开发提供多语言界面支持。 …

Shell脚本函数简介及运用(喜欢,适合,能在一起,是三码事)

一、函数的作用 语句块定义成函数约等于别名,定义函数,再引用函数 封装的可重复利用的具有特定功能的代码 二、定义函数 定义函数就是只将一段实现某个任务的命令序列封装进一个函数,便于使用和后期维护。 function 函数名() { 命令序列 }…

快速原型设计工具(Axure)的安装、汉化

〇、一些名词解释: 1. 草图 一般主要用于产品整理思路,寻找灵感,或者在产品团队内部互相讨论碰撞火花时使用。画 给自己看的,想怎么画就怎么画。 2. 低保真 打个比喻来说就像,用于“生产的图纸”,要简单易读…

Postgres:Win/Linux环境安装及一键部署脚本

1.Win安装Postgres (1)下载安装包 (2)开始安装 修改安装目录 选择要安装的组件 data也就是库表及数据的.dba文件存放目录 密码设置 端口设置 next next 开始安装 安装完成,Stack Builder 根据需要选择是否安装。仅仅是…

03-Docker容器命令

新建启动容器 docker run [OPTIONS] IMAGE [COMMAND] [ARG...]常用的参数: --namenew_name:为容器指定一个名称-d:后台运行容器并返回容器ID,即启动守护式容器-i:以交互模式(interactive)运行…

【三十天精通Vue 3】第二十九天 Vue 3中的Mock数据模拟详解

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: 三十天精通 Vue 3 文章目录 引言一、Mock数据模拟的概述1.1 为什么需要Mock数据模拟?1.2 Mock数据模拟的优点和缺点二、安装和配置Mock.js库2.1 使用NPM安…

TIA博途Wincc通过区域指针中的作业信箱功能实现自动写入配方数据的具体方法

TIA博途Wincc通过区域指针中的作业信箱功能实现自动写入配方数据的具体方法 前面和大家分享了博途Wincc中配方功能的具体使用方法,具体内容可参考以下链接中的内容: TIA博途Wincc中自定义配方画面的具体方法示例 上面的例子中,向PLC写入数据时是通过点击屏幕上的按钮来实现…

scrapy爬虫标准流程

Scrapy爬虫的标准流程一般包括以下几个步骤: 1、明确需求和目标网站的结构,确定需要爬取的数据以及爬取规则。 2、创建一个Scrapy项目,使用命令行工具创建一个新的Scrapy项目。 3、定义数据模型和item,即确定要爬取的数据结构。…

基于SpringBoot开发的仓库管理系统

系统概要 仓库管理系统总共分为两个大的模块,分别是系统模块和业务模块。其中系统模块和业务模块底下又有其子模块。 功能模块 一、业务模块 1、客户管理 客户列表 客户分页和模糊查询 客户添加、修改、删除、批量删除 2、供应商管理 供应商列表 供应商分…

sql注入合集

1.Access注入 http://110.40.154.212:8002/Production/PRODUCT_DETAIL.asp?id1513 and exists(select count(*) from admin) #存在admin表,继续爆,还存在job,email,product等http://110.40.154.212:8002/Production/PRODUCT_DETAIL.asp?id1513 and e…

软考A计划-重点考点-专题二(程序语言)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&am…

GP04丨网格框架初版

量化策略开发,高质量社群,交易思路分享等相关内容 正文 大家好,今天我们分享股票社群第4期量化策略——网格策略。 在上一期中,我们分享了ETF轮动策略Plus版本(基于资金管理的ETF增强策略),本…

Linux-Day02

Linux-Day02 课程内容 软件安装 项目部署 1. 软件安装 1.1 软件安装方式 在Linux系统中,安装软件的方式主要有四种,这四种安装方式的特点如下: 安装方式特点二进制发布包安装软件已经针对具体平台编译打包发布,只要解压&am…

哪种蓝牙耳机音质最好佩戴舒服?佩戴舒适音质好的蓝牙耳机

蓝牙无线耳机基本成为了大家的标配,大多数 对于外观与舒适性十分看重,如今的蓝牙耳机市场已经很成熟了,基本能满足大多数人,下面就来分享几款佩戴并且音质表现也不错的蓝牙耳机。 一、南卡小音舱Lite2蓝牙耳机 参考价格&#xf…

【机器人仿真Webots教程】-控制器编程指南

Webots controller编程指南 文章目录 Webots controller编程指南1. controller程序设计流程1.1 controller与场景树节点1.2 进程角度分析1.3 仿真时间步长与控制器程序更新延时步长 2. 例解控制器编程2.1 Hello world 实例2.2 传感器读取实例2.3 执行器的使用2.4 传感器与执行器…

距离保护整定计算中分支系数公式理解

在一般的距离保护II段和III段的整定计算中,分支系数的计算是必须要的,本文选自电力系统继电保护(第二版)(张保会老师主编)P94-P97页的例题,分析其中分支系数的计算公式。 我们在前面的章节中知道…

springboot+jsp影院管理系统9ufid电影票预订管理系统

项目介绍开发语言:Java 框架:springboot 技术:JSP JDK版本:JDK1.8 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9 浏览器:谷歌浏览器 功能介绍 主要对…

HTB靶机08-Nineveh-WP

008-nineveh 靶机IP: 10.10.10.43 scan Nmap 扫描 ┌──(xavier㉿kali)-[~] └─$ sudo nmap -sSV -T4 10.10.10.43 -p- Starting Nmap 7.93 ( https://nmap.org ) at 2023-04-07 17:40 CST Nmap scan report for nineveh.htb (10.10.10.43) Host is up (0.34s …