用计算困难问题的视角看密码学算法

从计算困难问题的视角看密码学算法

在这里插入图片描述


计算困难问题是理论计算机和密码学的交叉论题,密码学的加密算法都基于计算困难问题(一般来说是NP-Complete和NP-Hard问题),在这篇文章里我们将讨论计算困难问题和各种加密算法的关系,从而引出我们的观点:密码学算法其实就是利用验证容易但是求解困难的计算问题来设计的,从而使得破解者的计算代价接近密钥空间的穷搜;

计算困难问题的形式化

对于一个计算困难问题 F F F,若设他的解为 x ∗ x^{*} x,那么我们称 x ∗ x^{*} x满足 F F F; F F F的所有可能的解组成的空间称作解空间 X \mathcal{X} X;计算困难问题 F F F的求解过程即在解空间 X \mathcal{X} X里面搜索 x ∗ x^{*} x满足 F F F,这一过程中要尽可能利用问题的特性来加速搜索;下面列举几个例子:

  • 对于旅行商问题(TSP),解空间 X \mathcal{X} X即为所有可行的路径组成的轨迹空间;

  • 对于可满足性问题(SAT),解空间 X \mathcal{X} X即为所有变元(假设数量为 n n n)的真值空间 ( T , F ) n (T,F)^{n} (T,F)n;

  • 对于布尔方程组求解问题,解空间 X \mathcal{X} X即为所有变元(假设数量为 n n n)的布尔值空间 ( 0 , 1 ) n (0,1)^{n} (0,1)n;

在这里插入图片描述

计算困难问题有个特点,验证某个可能的解 x ∈ X x \in \mathcal{X} xX是否是计算困难问题 F F F的解是容易的(验证是多项式级别的复杂度 O ( n c ) \mathcal{O}(n^c) O(nc),其中 c c c是常数),但是找到计算困难问题 F F F的解 x ∗ ∈ X x^{*} \in \mathcal{X} xX是困难的(求解是超多项式级别的复杂度,比如指数复杂度 O ( c n ) \mathcal{O}(c^n) O(cn),其中 c c c是常数);验证容易,可以用来设计加密解密算法,即加密算法的有效性和高效性,求解困难,则保证了安全性;

计算困难问题和密码学算法

密码学中的一个核心概念:将安全性基于计算困难问题,许多密码学算法和协议的安全性是建立在特定计算问题的难度上的;以下是一些经典的计算困难问题及其在密码学中的应用示例,注意和我们刚才说的形式化对应:

  • 大整数分解(RSA算法):计算困难问题是给定一个大的合数 N N N,找到其素因数分解.解是 N N N的素因数 p p p q q q.密码协议应用是RSA公钥加密和数字签名.公钥包含大合数 N N N,而私钥基于 N N N的素因数 p p p q q q.

  • 离散对数问题(Diffie-Hellman密钥交换和ElGamal加密):计算困难问题是给定一个质数 p p p,及其原根 g g g,和 g x m o d p g^x \mod p gxmodp的值,求解 x x x.对应的解x是指数 x x x,使得满足 g x m o d p g^x \mod p gxmodp.密码协议应用是Diffie-Hellman密钥交换,利用离散对数问题的难解性来安全地在不安全的信道上协商一个共享密钥.ElGamal加密也基于此问题,提供公钥加密功能.

  • 椭圆曲线离散对数问题(ECC,椭圆曲线密码学):计算困难问题是给定椭圆曲线上的点 P P P Q = k P Q = kP Q=kP(即点 P P P k k k倍),求解 k k k;其解是系数 k k k,使得 Q = k P Q = kP Q=kP.而密码协议的应用,ECC提供了与RSA等系统相同安全级别的加密和数字签名,但使用更短的密钥长度.椭圆曲线版本的Diffie-Hellman和ElGamal算法也基于椭圆曲线离散对数问题.

  • 哈希函数的抗碰撞性(比特币的工作量证明):计算困难问题是给定一个哈希函数 H H H和输出值的一部分(比如前 n n n位为0的哈希值),找到一个输入 x x x,使得 H ( x ) H(x) H(x)满足给定的条件.解是满足条件的输入 x x x.密码协议应用如比特币的工作量证明(Proof of Work)机制.矿工需要找到一个使得区块的哈希值满足网络当前难度条件的nonce值.这是一个计算上非常困难的问题,但一旦找到解,验证是非常快速的.

这些例子都展示了密码协议设计中一个基本原则:即通过选择特定的、已知难以解决的计算问题,来确保攻击者在没有密钥的情况下不能轻易破解加密算法或协议(但是加密解密过程是高效的).这样的设计不仅为数据传输提供了安全性保障,也为数字签名、身份认证等多种应用提供了可靠的基础.

在这里插入图片描述

扩域带来的非线性混淆作用

刚刚我们讨论的大都属于公钥密码学的范畴,现在我们来看看AES和DES方法除了计算困难问题之外还利用了什么技巧;首先AES加密和DES加密的破解可以看作布尔可满足性问题(SAT)的求解,实际上,把AES加密和DES加密的破解转换成SAT问题是密码分析中的一种先进技术(称之为代数攻击,建立为代数方程的形式求解也属于这个范畴),这种方法不仅仅依赖于穷举搜索,而是利用现代SAT求解器的强大能力来寻找满足特定逻辑条件的解,这些逻辑条件反映了加密算法的约束.总之,SAT求解器在很多场景的效果是不错的(比如用来求解一些交通规划问题),那么为什么AES加密能很好地对抗这种破解方法呢,这在于"非线性"带来的安全性;

在讨论加密算法是否容易受到代数攻击的影响时,算法的“非线性”特性是一个关键因素.非线性性质强的算法通常更难以用代数方法攻击,因为它们能够更好地抵抗通过代数方程简化分析过程的尝试.高度非线性的加密算法示例:

  • AES(高级加密标准):AES使用了复杂的替代-置换网络SPN结构,其S盒(Substitution boxes)设计确保了高度的非线性,因此不容易用简单的代数攻击手段破解;

  • Serpent:作为AES候选之一的Serpent提供了很高的非线性特性和多层安全保证,它通过多轮的数据变换来确保攻击的复杂度;

  • Twofish:另一个AES候选,Twofish利用了复杂的密钥依赖S盒和PHT(Pseudo-Hadamard Transform),提供高度的非线性和复杂的结构来抵抗代数攻击;

较低非线性的加密算法可能容易受到代数攻击:

  • DES(数据加密标准):DES的非线性主要来源于其S盒,但由于其较短的密钥长度56位和设计时对当时计算能力的估计不足,DES现在被认为是不够安全的,对一些形式的代数攻击较为脆弱.

  • RSA:作为一种基于大数分解难题的公钥加密算法,理论上RSA的安全性高于简单的代数攻击.然而,若RSA参数(比如密钥长度)选择不当,或者实现上存在缺陷,RSA可能会受到基于数学策略的代数攻击,如常见的分解攻击.

  • 线性密码:理论性地存在一些设计上更偏向线性的密码学算法,这些算法可能直接采用了简单的线性变换.这类算法在现实中较少使用,且容易受到代数攻击.

AES高级加密标准使用了不同的设计理念,包括更大的密钥(128、192或256位)和复杂的数据块处理过程。AES的加密过程在 G F ( 2 8 ) GF(2^8) GF(28)的扩域上进行,主要通过以下几个步骤:字节替代(SubBytes)、行移位(ShiftRows)、列混淆(MixColumns)和轮密钥加(AddRoundKey).其中,字节替代使用非线性的S盒,基于 G F ( 2 8 ) GF(2^8) GF(28)上的逆元运算与仿射变换,确保了高度的非线性;列混淆步骤通过特定的多项式在 G F ( 2 8 ) GF(2^8) GF(28)上进行乘法运算,进一步增加了操作的复杂度和非线性.

在这里插入图片描述

将AES的操作与DES比较,确实可以看出AES在设计上引入了更高维度的数学结构(如 G F ( 2 8 ) GF(2^8) GF(28)),这不仅使得加密过程更为复杂,而且确实提高了算法的非线性程度.在有限域 G F ( 2 8 ) GF(2^8) GF(28)上的变换,相对于 G F ( 2 ) GF(2) GF(2)的操作,可以提供更强的非线性特性,这对于抵抗线性和差分密码分析攻击非常关键,为了更好地阐释这种非线性的效果,我们举个更好理解的例子.

C \mathbb{C} C上的线性变换 y = a x + b y = ax+b y=ax+b,其中 a , b ∈ C a,b \in \mathbb{C} a,bC, a = a 0 + a 1 i , b = b 0 + b 1 i a=a_{0}+a_{1}i,b=b_{0}+b_{{}1}i a=a0+a1i,b=b0+b1i; 那么再搞一个 C → R \mathbb{C} \rightarrow \mathbb{R} CR的变换 y = y 0 + y 1 i → y ′ = y 0 2 + y 1 2 y = y_{0}+y_{1}i \rightarrow y'=y_{0}^2+y_{1}^2 y=y0+y1iy=y02+y12(相当于加密);那么由 y ′ y' y还原恢复 x x x是可行的,因为 a 0 , a 1 , b 0 , b 1 a_{0},a_{1},b_{0},b_{1} a0,a1,b0,b1已知的情况下(相当于密钥),此时还原恢复 x x x就是解一个 R \mathbb{R} R上的一元二次方程(相当于解密);此时回头看,你会发现这个toy级别的加密算法里, C \mathbb{C} C上的线性变换 y = a x + b y = ax+b y=ax+b相当于 R \mathbb{R} R上的非线性变换,这种非线性增加了破解的复杂度;如果放大密钥长度,这个复杂度就会很可观,AES加密算法的技巧和这个例子类似.

补注:这里 y = a x + b = a 0 x + b 0 + ( a 1 x + b 1 ) i y = ax+b = a_{0}x+b_{0}+(a_{1}x+b_{1})i y=ax+b=a0x+b0+(a1x+b1)i;而 y ′ = y 0 2 + y 1 2 = ( a 0 x + b 0 ) 2 + ( a 1 x + b 1 ) 2 y'= y_{0}^2+y_{1}^2 = (a_{0}x+b_{0})^2 + (a_{1}x+b_{1})^2 y=y02+y12=(a0x+b0)2+(a1x+b1)2;那么已知密文 y ′ y' y和密钥 a 0 , a 1 , b 0 , b 1 a_{0},a_{1},b_{0},b_{1} a0,a1,b0,b1时恢复明文 x x x 就是解一个一元二次方程;

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

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

相关文章

Hippo4j线程池实现技术

文章目录 🔊博主介绍🥤本文内容部署运行模式集成线程池监控配置参数默认配置 📢文章总结📥博主目标 🔊博主介绍 🌟我是廖志伟,一名Java开发工程师、Java领域优质创作者、CSDN博客专家、51CTO专家…

力扣热题100_链表_142_环形链表 II

文章目录 题目链接解题思路解题代码 题目链接 142. 环形链表 II 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中…

【Spring】之AOP详解

AOP 什么是AOP? AOP:Aspect Oriented Programming,面向切面编程。 切面指的是某一类特定问题,因此面向切面编程也可以理解为面向特定方法编程。例如,在任何一个系统中,总有一些页面不是用户可以随便访问…

Matlab|配电网三相不平衡潮流计算【隐式Zbus高斯法】【可设定变压器数量、位置、绕组方式】

目录 主要内容 部分代码 结果一览 1.以33节点为例 2.以12节点系统为例 下载链接 主要内容 该模型基于隐式Zbus高斯法实现对配电网的三相不平衡潮流计算,通过选项可实现【不含变压器】和【含变压器】两种方式下的潮流计算,并且通过参数设置…

游戏引擎中的声音系统

一、声音基础 1.1 音量 声音振幅的大小 压强p:由声音引起的与环境大气压的局部偏差 1.2 音调 1.3 音色 1.4 降噪 1.5 人的听觉范围 1.6 电子音乐 将自然界中连续的音乐转换成离散的信号记录到内存中 采样 - 量化 - 编码 香农定理:采样频率是信…

如何查询网站是否被搜索引擎收录

怎么看网站有没有被百度收录 对于网站所有者来说,了解自己的网站是否被百度搜索引擎收录是非常重要的。只有被收录,网站才能在百度搜索结果中展现,从而获取流量和曝光。下面介绍几种方法,让您快速了解自己的网站是否被百度收录。…

SpringBoot+uniApp宠物领养小程序系统 附带详细运行指导视频

文章目录 一、项目演示二、项目介绍三、运行截图四、主要代码1.保存宠物信息代码2.提交订单信息代码3.查询评论信息代码 一、项目演示 项目演示地址: 视频地址 二、项目介绍 项目描述:这是一个基于SpringBootuniApp框架开发的宠物领养微信小程序系统。…

Elasticsearch的倒排索引是什么?

文章目录 什么是ES?什么是倒排索引?为什么叫做倒排索引?分词器的使用 什么是ES? Elasticsearch是基于 Apache Lucene【lusen】的搜索引擎,支持Restful API风格【可以使用常见的HTTP请求来访问】,并且搜索速…

在js中本地存储的数组如何转成对象

一、此方法仅适用一维数组; 二、效果图 使用后 三、js代码。 function gong(s){console.log(s);let data;let kk1;// 检查ask_id是否不为空 if (s.ask_id null ) { kk1}else{kk2let dd;dds.data;sessionStorage.setItem(wenda,JSON.stringify(dd[0]))window.l…

1、jvm基础知(一)

什么是JVM? 1、定义:JVM 指的是Java虚拟机( Java Virtual Machine )。JVM 本质上是一个运行在计算机上的程序, 他的职责是运行Java字节码文件,Java虚拟机上可以运行Java、Kotlin、Scala、Groovy等语言 任…

如何使用极狐GitLab Maven 仓库?

本文作者:徐晓伟 GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 本文主要讲述了如何使用极狐GitLa…

VSCode - 离线安装扩展python插件教程

1,下载插件 (1)首先使用浏览器打开 VSCode 插件市场link (2)进入插件主页,点击右侧的 Download Extension 链接,将离线安装包下载下来(文件后缀为 .vsix) 2,…

学透Spring Boot 003 —— Spring 和 Spring Boot 常用注解(附面试题和思维导图)

这是 学透 Spring Boot 专栏 的第三篇,欢迎关注我,与我一起学习和探讨 Spring Boot 相关知识,学透 Spring Boot。 从面试题说起 今天我们通过一道和Spring Boot有关的常见面试题入手。 面试题:说说 Spring Boot 中有哪些常用注解…

13.Python图形用户界面

我们之前的程序运行结果都被输出到命令提示符(终端)窗口,界 面比较简陋。本章讲解如何将其输出到图形界面。 1 Python中的图形用户界面开发库 注Qt是一个跨平台的C应用程序开发框架,被广泛用于开发GUI 程序,也可用于开…

OSPF协议详解

静态缺点 1、中大型复杂网络----配置量大 2、不能实时收敛 动态-----可以实时收敛 IGP----内部网关路由协议 RIP OSPF EIGRP ISIS EGP----外部网关路由协议 BGP IGP (选路佳 占用资源 收敛快)----一个协议好需满足这三个 距离矢量 DV RIP…

node.js的模块化 与 CommonJS规范

一、node.js的模块化 (1)什么是模块化? 将一个复杂的程序文件依据一定的规则拆分成为多个文件的过程就是模块化 在node.js中,模块化是指把一个大文件拆分成独立并且相互依赖的多个小模块,将每个js文件被认为单独的一个模块;模块…

HDLbits 刷题 -- Alwaysblock2

学习: For hardware synthesis, there are two types of always blocks that are relevant: Combinational: always (*)Clocked: always (posedge clk) Clocked always blocks create a blob of combinational logic just like combinational always blocks, but…

基于ArgoCD和Testkube打造GitOps驱动的Kubernetes测试环境

本文介绍了一项新工具,可以基于Gitops手动或者自动实现Kubernetes集群应用测试,确保集群的健康状态与Git仓库定义的一致。原文: GitOps-Powered Kubernetes Testing Machine: ArgoCD Testkube 简介:GitOps 云原生测试面临的挑战 现代云原生应…

[蓝桥杯 2014 省 A] 波动数列

容我菜菲说一句,全网前排题解都是rubbish,当然洛谷某些也是litter 不好意思,最近背单词背了很多垃圾的英文,正题开始 [蓝桥杯 2014 省 A] 波动数列 题目描述 输入格式 输入的第一行包含四个整数 n , s , a , b n,s,a,b n,s,a…

iPhone设备中定位应用程序崩溃问题的日志分析技巧

​ 目录 如何在iPhone设备中查看崩溃日志 摘要 引言 导致iPhone设备崩溃的主要原因是什么? 使用克魔助手查看iPhone设备中的崩溃日志 奔溃日志分析 总结 摘要 本文介绍了如何在iPhone设备中查看崩溃日志,以便调查崩溃的原因。我们将展示三种不同的…