密码学原理技术-第二章-Stream Ciphers

文章目录

  • 流密码加密解密流程
  • [Stream Cipher vs. Block Cipher](#Stream Cipher vs. Block Cipher)
  • [Synchronous vs. Asynchronous Stream Cipher](#Synchronous vs. Asynchronous Stream Cipher)
  • [Random number generators (RNGs)](#Random number generators (RNGs))
    • [True rng](#True rng)
    • [Pseudorandom Number Generator (PRNG)](#Pseudorandom Number Generator (PRNG))
    • [Cryptographically Secure Pseudorandom Number Generator (CSPRNG)](#Cryptographically Secure Pseudorandom Number Generator (CSPRNG))
  • [One-Time Pad (OTP)](#One-Time Pad (OTP))
  • 走向实用流密码
  • [Linear feedback shift registers (LFSRs)](#Linear feedback shift registers (LFSRs))
  • LFSRs的安全性
  • [Practical Stream Cipher -- eSTREAM project](#Practical Stream Cipher – eSTREAM project)
    • Salsa20
    • [Salsa20 算法完整流程](#Salsa20 算法完整流程)
  • [A practical stream cipher: Trivium](#A practical stream cipher: Trivium)

流密码属于同步加密中的

流密码在如互联网安全等大多数领域中不如分组密码流行。但也存在例外,例如流行的流密码 RC4。

流密码有时在实现时所需的资源比分组密码少,比如代码大小或芯片面积,并且它们适合用于资源受限的环境,如手机。

流密码加密解密流程

每个比特位进行加密

Stream Cipher vs. Block Cipher

流密码通常比分组密码更快,因为它们逐个比特地处理数据,而不是等待整个块准备好。

这种快速处理能力对于实时通信非常重要,尤其是在移动设备和无线通信中。

Synchronous vs. Asynchronous Stream Cipher

reproducible :发送方和接收方都能生成相同的密钥流

Random number generators (RNGs)

True rng

Pseudorandom Number Generator (PRNG)


Cryptographically Secure Pseudorandom Number Generator (CSPRNG)

One-Time Pad (OTP)

一次性密码本(One-Time Pad, OTP)的无条件安全性依赖于一个关键条件:每个密钥流位只能使用一次。这是确保 OTP 无条件安全性的核心原则

为什么OTP是无条件安全


走向实用流密码

定义
  • 计算上安全:一个密码系统是计算上安全的,如果破解它的已知最佳算法至少需要 t 次运算。这意味着对于今天的计算机来说,执行 t 次运算是计算上不可行的。
  • 或者说计算上安全:密码系统的安全性基于当前技术无法在合理时间内完成所需的大量运算
问题

这个定义存在几个问题:

  1. 最佳算法的问题

    • 对于给定的攻击,什么是最佳算法?换句话说,我们如何确定哪种攻击方法是最有效的?
  2. 复杂度下限的问题

    • 即使知道一种攻击的复杂度下限,是否有可能更强大的攻击?也就是说,即使我们知道某种攻击需要 ( t ) 次运算,是否还存在其他未知的攻击方法,其复杂度更低?
对称加密方案
  • 对于对称加密方案,希望没有比穷举密钥搜索复杂度更低的攻击方法。这意味着最坏情况下,攻击者只能通过尝试所有可能的密钥来破解加密。

由于大多数伪随机数生成器的线性特性而导致的不良加密属性。

Linear feedback shift registers (LFSRs)


实例

最大长度是因为各个比特位只有7种情况,所以七种情况过后一定会有重复的,那么后面的就会是一样的

LFSRS多项式

能生成足够长的密钥序列的多项式是原子的

原子多项式是不可拆分多项式的特例

如何判断是否是原子多项式

原子多项式很容易被得到,所以最大长度的 LFSR也很容易找到

实例

LFSRs的安全性

为什么需要2m位输出才能确定LFSR的反馈系数

例子:

假设我们有一个3阶(m=3)的LFSR,其特征多项式为:

x³ + p₁x² + p₂x + p₃

步骤分析:

  1. 设初始状态为(s₀,s₁,s₂),我们需要求解未知的反馈系数p₁,p₂,p₃

  2. LFSR的递推关系为:

    sₙ₊₃ = p₁sₙ₊₂ + p₂sₙ₊₁ + p₃sₙ

  3. 写出前几个方程:

    s₃ = p₁s₂ + p₂s₁ + p₃s₀ (方程1)

    s₄ = p₁s₃ + p₂s₂ + p₃s₁ (方程2)

    s₅ = p₁s₄ + p₂s₃ + p₃s₂ (方程3)

  4. 为什么需要2m(=6)位输出:

  • 我们有3个未知数(p₁,p₂,p₃)需要求解
  • 每个方程都需要知道4个连续的输出位
  • 为了建立3个独立方程,需要知道从s₀到s₅共6个输出位
  1. 用矩阵形式表示:

    [s₂ s₁ s₀] [p₁] [s₃]

    [s₃ s₂ s₁] [p₂] = [s₄]

    [s₄ s₃ s₂] [p₃] [s₅]

  2. 只有当我们知道s₀到s₅这6个输出位(2m=6),才能:

  • 构建完整的系数矩阵
  • 确保方程组有唯一解
  • 求解出p₁,p₂,p₃的值

总结:

  • 需要2m位是因为要建立m个独立的线性方程
  • 每个方程需要m+1个连续输出位
  • 总共需要m+(m-1)=2m位输出来构建完整的方程组

这就解释了为什么需要2m位输出来确定m阶LFSR的反馈系数。

Practical Stream Cipher -- eSTREAM project

Salsa20



QR

四分之一轮函数:四个输入,四个输出


Salsa20 算法完整流程




在最后一步中,将混合数组逐字添加到原始数组中,以获得其64字节的键流块。这一点很重要,因为混合轮本身是可逆的。


A practical stream cipher: Trivium


纠正下,A是IV ,B是key

相关推荐
reddingtons6 分钟前
在 Ubuntu 下通过 Docker 部署 Mastodon 服务器
服务器·ubuntu·docker
予安灵4 小时前
《白帽子讲 Web 安全:点击劫持》
前端·网络·安全·web安全·网络攻击模型·安全威胁分析·点击劫持
屁股割了还要学4 小时前
【计算机网络入门】初学计算机网络(七)
网络·学习·计算机网络·考研·青少年编程
cdprinter5 小时前
信刻光盘安全隔离与信息交换系统让“数据摆渡”安全高效
网络·安全·自动化
萧瑟其中~6 小时前
计算机网络:Socket网络编程 Udp与Tcp协议 第一弹
服务器·网络·计算机网络
winkel_wang6 小时前
Centos7服务器防火墙设置教程
linux·运维·服务器
镜中人★7 小时前
中科大计算机网络笔记第一章1.8 互联网历史笔记
网络
非 白7 小时前
【服务器】Nginx
运维·服务器·nginx
这货不是陈进坚7 小时前
vmware虚拟机与宿主机共享文件夹
linux·运维·服务器
levitgu8 小时前
西电应用密码学与网络安全实验通关指南
c++·经验分享·安全·ai·密码学·rsa·实验