私钥密码学中的假设

news/2025/1/7 18:06:06/文章来源:https://www.cnblogs.com/qixingzhi/p/18654239

伪随机生成器(Pseudorandom Generators, PRG)

私钥密码学的一个基本假设是存在伪随机生成器(PRG)。我们无法证明现在人们在密码学实践中的任何一个伪随机生成器的实现方案是安全的。尽管如此,我们也无法证明一些伪随机生成器是不安全的。我们介绍一些流行的PRG的构造方案。

流密码(Stream Ciphers)

以下几类PRG的构造的一个共同特征是采用了“流密码”的结构。这一结构描述为一个二元组\((\text{Init},\text{Next})\)\(\text{Init}\)接受一个\(n\)-bit的种子\(k\),计算得到一个初始状态\(st_0\in \{0,1\}^n\)\(\text{Next}\)接受\(st_i\),输出一个\(st_{i+1}\in \{0,1\}^n\)以及一个bit \(y_{i+1}\)。当我们要基于长度为\(n\)的种子\(k\)生成一个长度为\(\ell\)的随机数时,只需运行\(\text{Init}(k)\),将得到的\(st_0\)输入\(\text{Next}\),把输出的状态再次作为\(\text{Next}\)的输入,重复\(\ell\)轮就得到了\(\ell\)个bit,把这\(\ell\)个bit作为随机数的输出。

这样,PRG的问题就转化为了如何设计\(\text{Next}\)(以及\(\text{Init}\))的问题了。

线性反馈移位寄存器(Linear Feedback Shift Registers, LFSR)

LFSR设计如下:输入种子\(k\)时,把\(k\)的每一位存入一个寄存器。共有\(n\)个寄存器\(s_0,\cdots,s_{n-1}\)。选定\(n\)个布尔常量\(c_0,\cdots,c_{n-1}\)。令\(\text{Init}\)直接输出\(k\)作为\(st_0\)。某一时刻的状态\(st_i\)就是当前\(n\)个寄存器中存储的内容拼成的二进制数。当我们要进行一步\(\text{Next}\)时,把\(s_0\)存储的值作为\(y_i\)输出,并令\(s_i\leftarrow s_{i+1},s_{n-1}\leftarrow\bigoplus\limits_{i=0}^{n-1}c_is_i\)

该设计每次会踢出\(s_0\)作为随机bit,把寄存器中储存的值平移一格,把所有寄存器中储存值的一个子集(由\(c_i\)的值确定)异或起来补到另一端。每一次移位的复杂度是线性的,所以称为线性反馈移位寄存器。

注意到,寄存器总共只会有\(2^n\)个不同的状态,因此在输出了不超过\(2^n\)位随机bit以后,一定会出现重复状态,这以后的bit也会重复。在实践中,我们通常需要通过选取初始状态和\(c_i\)来使循环节尽量长。

LFSR在统计意义上有良好的性质(输出里0的个数和1的个数几乎各占一半),但不是密码学意义上安全的。换言之用LSFR构造的流密码不是一个PRG,而被证明是可以被PPT攻破的。首先我们注意到,根据Kerckhoff's Principle,\(c_i\)应当是公开的。所以敌手只需要用最初输出的\(n\)个bit就得到了初始状态,而后可以模拟出所有后续状态。即便我们用某种方式对\(c_i\)做了加密,依然是不安全的。敌手依然可以用前\(n\)个bit得到初始状态,而后它只需要再观察\(n\)个bit,利用关系\(s_{n-1}\leftarrow\bigoplus\limits_{i=0}^{n-1}c_is_i\)解一个线性方程组(比如高斯消元),就能求出所有系数了。

非线性反馈移位寄存器(Non-Linear Feedback Shift Registers, FSR)

我们可以改善LFSR,只需将\(s_{n-1}\leftarrow\bigoplus\limits_{i=0}^{n-1}c_is_i\)这一步替换为\(s_{n-1}\leftarrow g(s_0,\cdots,s_{n-1})\),其中\(g\)是某个精心设计的非线性函数,满足它在值域分布上接近一半是0一半是1。这样的设计称为非线性反馈移位寄存器。

还有更多的FSR的设计,例如在线性FSR的基础上把中间的某一位作为输出而不是固定的输出第0位。还可以同时运行多个LFSR,输出由每个LFSR的bit组成的一个函数(要精心设计这个函数使得输出分布一半0一半1)。

伪随机排列(Pseudorandom Permutations, PRP)

私钥密码学的另一个基本假设是存在伪随机函数(PRF)。在这里我们考虑伪随机排列(PRP) \(F:\{0,1\}^n\times \{0,1\}^\ell\to \{0,1\}^\ell\),一类特殊的伪随机函数。给定一个key \(k\)\(F_k\)构成长度位\(\ell\)的二进制串的一个permutation,我们希望这个permutation尽量是随机的。

一个看上去随机的permutation可以被描述如下:对于每个固定的key,尽管输入只在较少的几位上变动,输出应当在较多位上产生变动。这称为The Avalanche Effect。换言之,如果输入的微小变动只引起输出的微小变动,那么很显然这并不能算一个随机的permutation。

Shannon提出了一个构造PRP的范式,称为Confusion-Diffusion Paradigm。其基本思想是对于一个输入串,先将它分成小块,每个小块用一个小的PRP打乱,随后再对整个串做一次random shuffle。例如,假设我们要对长为\(64\)的输入构造PRP。我们先构造一个长为8的PRP,称为\(f\)。接下来把输入\(x\in \{0,1\}^{64}\)分成8段\(x_1,\cdots,x_8\),每段用\(f\)打乱,得到\(f(x_1),\cdots,f(x_8)\)。这个步骤称为Confusion。接下来再取一个\(64\)位的permutation \(g\)\(f(x_1),\cdots,f(x_8)\)打乱,这个步骤称为Diffusion。以上Confusion-Diffusion可以重复做多轮,以增加打乱的效果。

Substitution Permutation Network(SPN)

依照Confusion-Diffusion Paradigm,该方案这样设计:对于输入\(x\),我们有一个和\(x\)长度相同的key \(k\)\(x\)做异或,这称为一次Key Mixing步骤。我们固定(公开)一个小块的函数(称为box)\(S\)以及一个与块长度相同的key \(k_0\)。Confusion步骤,对于每个\(x_i\),将其变为\(S(k_0\oplus x_i)\)。Diffusion步骤,依照某个permutation做一次打乱。这就称为一轮SPN。

SPN可以做多轮,但注意每一轮要用不同的\(k\)。所以对于一个三轮的SPN,key应当是\(k_1\|k_2\|k_3\)

对于只有一轮的SPN,以上方案是不安全的。因为Confusion步骤的\(S\)-box和Diffusion步骤的permutation都是公开的,敌手只需根据结果倒推就可以推出\(x\oplus k\),再与\(x\)异或一下就得到了\(k\),就攻破了整个方案。因此,我们一般需要在Diffusion步骤之后再加一次Key Mixing步骤(选用不同的key)。

为了攻击首尾都有key mixing的一轮的SPN方案,平凡的攻击方法是枚举第一次key mixing的key或最后一次key mixing的key。一个更高明的攻击方式是,按块枚举该块对应位置的key的bits,本来需要枚举\(2^{64}\)次,现在只需要枚举\(8\times 2^8\)次。

对于多轮的SPN,枚举的复杂性指数级增长。

Feistel Network

另一种构造方式如下:把输入\(x\)划分成左右两半\(L_0\|R_0\)。每一轮假设有\(L_i\|R_i\),选取一个keyed function \(f_i\),做\(L_{i+1}=R_i,R_{i+1}=L_i\oplus f_i(R_i)\)。其中,\(f_i\)中一般包含substitution box以及mixing permutations。

如果只做一轮,显然不安全。因为输出\(L_1\|R_1\)\(L_1=R_0\),只需判断左半边是否等于输入的右半边即可分辨。

如果做两轮,也不安全。因为\(L_2=R_1=L_0\oplus f_0(R_0)\),可见对于输入\(L_0\|R_0\),只反转第一位,那么\(L_2\)也只会反转第一位。因此很容易分辨。(这不符合The Avalanche Effect!)

因此,实践中Feistel Network至少做三轮。

Data Encryption Standard(DES)

DES的基本设计是一个16轮的Feistel Network。每一轮的具体细节如下:我们有一个56位的master key。输入一个32位长度的串,把左半边16位接到右边,变成48位,然后基于master key生成一个48位的key(方法是把56位的master key左右分成两半,从左边随机取24位,右边随机取24位,拼成这个key)与之做异或。接着把它分成大小为6的块共8个, 每个块经过一个substitution box把6位的串映射到4位。最后,对于32位的串,做一个mixing permutation。

如果以上方案只进行小于10轮,人们已经能找到攻破它的方法。现实中,我们常使用60~80轮的方案。其安全性还尚未得到证明。现在DES已经不常用了,现在流行使用的方案是Advanced Encryption Standard(AES),但其基本构造思想是与DES相同的。

哈希函数(Hash Functions)

关于哈希函数,人们提出了一系列标准方案,称为Secure Hash Algorithms,简称SHA。SHA-1是最早的一代算法,哈希码长度为\(160\)。可见birthday attack只需\(2^{80}\)次计算就能找到冲突,已于2017被攻破。SHA-2,SHA-3都有256位或512位的算法,是今天广泛使用的哈希标准算法。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

技术架构典型技术选型

技术架构由多种技术组成,过程中可能涉及非常多的具体技术【图】技术架构核心技术 下面我们就技术架构中核心的流量调度、服务治理、监控体系、消息列队、微服务技术框架等进一步展开介绍。 一、流量调度 流量调度是技术架构中的核心技术,包括负载均衡、API网关、配置中心,以…

什么是单向认证与双向认证

什么是SSL双向认证,与单向认证证书有什么区别 SSL/TLS 证书是用于用户浏览器和网站服务器之间的数据传输加密,实现互联网传输安全保护,大多数情况下指的是服务器证书。服务器证书是用于向浏览器客户端验证服务器,这种是属于单向认证的SSL证书。但是,如果服务器需要对客户端…

「杂文」日常 11

基于手机相册的 2024 年度总结好像一年的开头是考试周来着非常卓越的年轻就是好啊,骑车跨越半个城区去吃包子当时还是狂热粥批 给春节活动攒了大量抽嫖同学的桌游寒假打了不少生稀盐酸看起来还挺有精神的()被 jbbai 带着入坑铲了 当时那个段位乱 D 凑大羁绊就爽吃了因为看到…

块存储、文件存储、对象存储的比较分析

【摘要】本文从从应用角度比较块存储、文件存储、对象存储,对三者的层次关系进行了清晰的解读,并比较了分布式存储在块存储、文件存储、对象存储的应用成效。 一、块存储、文件存储、对象存储三者的本质差别 1.1 块存储 典型设备:磁盘阵列,硬盘 块存储主要是将裸磁盘空间整…

分析基于ASP.NET Core Kernel的gRPC服务在不同.NET版本的不同部署方式的不同线程池下的性能表现

分析基于ASP.NET Core Kernel的gRPC服务在不同.NET版本的不同部署方式的不同线程池下的性能表现 使用默认的 gRPC 项目模板创建,垃圾回收器类型为 ServerGC(Server garbage collection)。 使用 ghz 工具在不同的请求总数、连接数、并发数的参数下,进行压力测试,接口为 /gree…

Python学习(七)——配套《PyTorch深度学习实战》

1. 介绍一下下面这张图推荐系统自己还差点就去研究了这张图片概述了几种数据分析和机器学习的应用场景,包括推荐系统、网页搜索、舆情分析、关联规则、社交网络分析以及天气预测。下面是对每个部分的详细解释: 推荐系统用户u, 商品i:推荐系统旨在为特定用户(u)推荐商品(i…

golang1.23版本之前 Timer Reset方法无法正确使用

在 Go 1.23 之前,正确使用 Timer.Reset 是一个挑战,因为 Stop 和抽取操作之间的状态可能不一致,导致定时器异常触发。最好的做法是避免复用定时器,每次都创建一个新的定时器,这样代码更简洁、健壮,也更容易维护。golang1.23版本之前 Timer Reset方法无法正确使用 golang1…

【kafka】携程基于Kafka的数据校验代理在FinOps领域的应用

一、现状与问题1.1 现状1.2 问题描述1.3 解决方案二、设计与核心实现2.1 Kafka的相关背景知识2.2 Kafka Gatekeeper的设计和实现三、总结以下文章来源于携程技术 ,作者懿涵作者简介 懿涵,携程HybridCloud团队云原生研发工程师,关注云原生、IaC领域。为了有效管理云成本,基于…

苹果(iPhone)越狱,iPhone绕ID越狱,苹果手机越狱方法

CheckRa1n 越狱支持设备:iPhone 5S - iPhone X,兼容系统:iOS 12.3 ~ iOS 14.8,所以一些iPhone 5S以前的老设备(可以通过往期教程老设备越狱)以及iPhone X 以后的新设备都是无法通过heckRa1n 越狱,更别说绕ID的,其中iPhone X以后的新设备目前无法破解ID,某宝、某多的破…

【SQLite数据库】一个伪装成数据库的语言

SQLite是一个嵌入式的数据库,具有体积小、运行快、跨平台等优点,更关键的是,SQLite只有13万行左右。而传统的大型关系型数据库如Mysql、Oracle,代码行数超100多万行。 SQLite从2000年第一个版本发布到现在,已经运行在数亿设备上了,从本地应用、小型桌面应用,到移动设备应…

arcSDE回顾

1、arcSDE作用 (1)、提供了一个结构化的空间数据类型——ST_GEOMETRY (2)、提供了一系列的空间类型操作的函数和方法 好处:相对于存储BLOB二进制内容,SDE通过SQL查询空间数据即可了解数据内容,通过SQL即可非常便捷地对数据进行各种操作(例如更新)。 2、arcSDE安装 arc…

Awesome-Text2GQL:图查询微调语料的自动生成框架

Awesome-Text2GQL开源项目基于语法制导的图查询语料生成策略,通过自动化方式合成Text2GQL微调数据集,解决了图查询语言训练语料匮乏的问题,提升了图数据库与大语言模型交互的准确性和效率。 过去一年,GraphRAG技术发展如火如荼,尤其是基于关键词、向量驱动的知识检索方法…