| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 密码学备考知识点复习 -> 正文阅读 |
|
[数据结构与算法]密码学备考知识点复习 |
密码学备考知识点复习前言
MindMapRSA(20分)
背景在了解RSA之前,我们需要知道它的一些背景:这是基于 欧拉定理设 a , m ∈ N + , 且 g c d ( a , m ) = 1 , 则 : a φ ( m ) = 1 ( m o d m ) φ ( m ) , 表 示 小 于 m 的 区 间 中 的 正 整 数 和 m 互 素 的 个 数 , 该 函 数 又 称 为 欧 拉 函 数 。 设a,m \in N^+, 且 gcd(a, m) = 1,\\ 则: a^{\varphi(m)} = 1(modm) \\ \varphi(m), 表示小于m 的区间中的正整数和m互素的个数,该函数又称为欧拉函数。 设a,m∈N+,且gcd(a,m)=1,则:aφ(m)=1(modm)φ(m),表示小于m的区间中的正整数和m互素的个数,该函数又称为欧拉函数。 题型(猜测)依据课堂上的例题和测验题来看,应该就是考察学生对RSA算法流程的掌握程度,所以大概率就是考察RSA的加解密,当然这个过程其实就是RSA 公钥密码体制的流程。 密钥生成分5步:
加密我们设明文M,密文C 解密M = C d m o d n M = C^d modn M=Cdmodn 难点——乘法逆元求解上面的流程的难点就在于逆元的求解,如果到现在还不会乘法逆元的求解,那你急需看下我这个例子。 我们求3 关于 20 的乘法逆元。 辗转相除判断互素先用欧几里得(辗转相除) 接下来求解逆元的过程,有两种思路,利用拓展欧几里得算法,就是逆推相关式子。 拓展欧几里得3 ? 1 ? 2 = 1 3 ? 1 ? ( 20 ? 6 ? 3 ) = 7 ? 3 ? 20 = 1 3 - 1 * 2 = 1 \\ 3 - 1 * (20 - 6 * 3) = 7 * 3 - 20 = 1 3?1?2=13?1?(20?6?3)=7?3?20=1 所以,3关于20的逆元就是7。 欧拉快速演算我们先倒写出在辗转相除时得到的商 1,6 如下表,我们将第一行视为x,第二行视为y,第一行前两先空出来,第二行分别为0,1
从第一行对下来的第二行对应的位置的值为 ECC(15分)椭圆曲线密码体制,简称ECC。它是基于椭圆曲线上的离散对数问题。 椭圆曲线E : y 2 = x 3 + a x + b E : y ^2 = x^3 + ax + b E:y2=x3+ax+b 上面的方程式其实也可以用来表达(x,y)构成的的集合,特别注意: 无穷远点O其实就是在讨论椭圆曲线群时,需要引入的一个参考点。 有限域曲线方程中的所有系数都是在 离散化密码学中不讨论椭圆曲线的连续性,而是关注离散化后的整数点,即点中的 x,y都是整数。 运算规则加法规则
乘法规则
椭圆曲线加法交换群(Abel群)
满足上述性质,加上无穷远点O作为 阶椭圆曲线上的一点P,若存在最小的正整数n,使得nP=O,称n为点P的阶。 题型1 椭圆群的求取需要我们求取椭圆群的点,做法很简单,我们在 0 到 p-1 的范围内枚举x,带入E的方程式,计算y,当y为整数就是要求取的点,这里没什么技巧分享,我们用一个例子展示。 p=11,a=1,b=2,我们以计算x=1,为例 题型2 加解密过程会给出p,a,b,G,k,私钥n。 往往第一步就是计算公钥 加密注意:求取的密文是一个点对, 解密P m = C 2 ? C 1 = P m + k P A ? k P A P_m = C_2 - C_1 = P_m + kP_A - kP_A Pm?=C2??C1?=Pm?+kPA??kPA? 题型3 DH密钥交换即利用ECC 实现 Diffle—Hellman 密钥交换。 我觉得可以分为以下步骤进行:公开参数构造,双方选定私钥,并计算公钥,发送,实现共享密钥。 公开参数构造就是选取p,a,b,G,阶数N。 交换过程
AES(15分)如果对这个算法的实现,可以参考我的这篇blog(5条消息) AES-128算法实现(附C++源码)_物联黄同学的博客-CSDN博客_aes128加密算法源码 流程图密钥拓展参考下述公式进行密钥拓展 行位移没什么知识点,所以不在此阐述。知道从第一行开始,第一行不移位,接下来的每一行比上一行多移动一位。 列混淆其实就是矩阵乘法运算 轮密钥加其实就是将在密钥拓展获取的密钥逐论和与状态(明文,密文)异或。 小技巧 xtime函数
解密解密和加密相反,其实就是将加密的过程反过来,行移位是左移,逆行移位就是右移。逆列混合的变化是 其他的过程参考流程图。 题型(猜测)AES作为考到唯一一个公钥密码体制,其实主要就是考察学生对这个过程的熟悉和了解程度,所以其实就是照着流程来,然后考虑到计算量,应该只会考察其中的一部分过程,按照测试题来看, 数字签名(25分)我超,xdm,25分!和综合设计一个分数,不说了,好吧,必拿下! 背景就是时代发展的产物,针对电子文档的一种签名确认方法,从而实现对 电子签名实现的就是 数字化文档的 教学内容中有四种,分别是: 原理图RSA 数字签名方案m表示消息,e公钥,d私钥。 签名
验证
算法正确性证明s = h ( m ) d m o d n , d ? e = 1 ( m o d φ ( n ) ) ∴ s e m o d n = h ( m ) e d m o d n = h ( m ) k φ ( n ) + 1 m o d n = h ( m ) ? h ( m ) k φ ( n ) m o d n = h ( m ) ? ( h ( m ) φ ( n ) ) k m o d n = h ( m ) s = h(m)^dmodn, \qquad d*e = 1(mod\varphi(n)) \\ \begin{aligned} \therefore s^e mod n &= h(m)^{ed}modn \\ &= h(m)^{k\varphi(n)+1}modn \\ &= h(m) * h(m)^{k\varphi(n)}modn \\ &= h(m)*(h(m)^{\varphi(n)})^k modn \\ &= h(m) \end{aligned} s=h(m)dmodn,d?e=1(modφ(n))∴semodn?=h(m)edmodn=h(m)kφ(n)+1modn=h(m)?h(m)kφ(n)modn=h(m)?(h(m)φ(n))kmodn=h(m)?
Elgamal 签名体制初始化选择一个大素数p,Zp为对应的离散对数域,在这个域中求解离散对数困难,在这个域中选择一个生成元g,随机选择x,计算 公钥y,g,p,私钥x。 签名随 机 数 k ∈ R Z p ? r = ( g k m o d p ) s = ( h ( m ) ? x r ) k ? 1 m o d ( p ? 1 ) 随机数k\in_RZ_{p^*} \\ \begin{aligned} r &= (g^k mod p)\\ s &= (h(m)- xr)k^{-1} mod(p-1) \end{aligned} 随机数k∈R?Zp??rs?=(gkmodp)=(h(m)?xr)k?1mod(p?1)? 数字签名为(s, r)。 验证y r r s = g h ( m ) m o d p y^rr^s = g^{h(m)}modp yrrs=gh(m)modp 正确性证明∵ r = ( g k m o d p ) , s = ( h ( m ) ? x r ) k ? 1 m o d ( p ? 1 ) ∴ k s = h ( m ) ? x r m o d ( p ? 1 ) g k s = g h ( m ) ? x r m o d p g k s g x r = g h ( m ) m o d p y r r s = g h ( m ) m o d p \because r = (g^k mod p), \qquad s = (h(m) - xr)k^{-1} mod(p-1) \\ \begin{aligned} \therefore ks = h(m) - xr mod(p-1)\\ g^{ks} = g^{h(m)-xr}modp \\ g^{ks}g^{xr} = g^{h(m)}mod p \\ y^rr^s = g^{h(m)}modp \end{aligned} ∵r=(gkmodp),s=(h(m)?xr)k?1mod(p?1)∴ks=h(m)?xrmod(p?1)gks=gh(m)?xrmodpgksgxr=gh(m)modpyrrs=gh(m)modp? 安全性考虑(难点,思考题)
Schnorr 签名初始化大素数p,q,生成元g,随机数x 签名选择随机数k 验证r 1 = g s y ? e m o d p H ( r 1 , m ) 验 证 H ( r 1 , m ) = e r_1 = g^sy^{-e}modp \\ H(r_1,m)\\ 验证H(r_1, m) = e r1?=gsy?emodpH(r1?,m)验证H(r1?,m)=e 正确性证明R 1 = s G + H ( m ) P = ( k ? H ( m ) n A ) G + H ( m ) P = k G ? H ( m ) n A G + H ( m ) P = k G = R \begin{aligned} R_1&= sG+H(m)P\\ &= (k-H(m)n_A)G+H(m)P\\ &= kG-H(m)n_AG + H(m)P \\ &= kG \\ &= R \end{aligned} R1??=sG+H(m)P=(k?H(m)nA?)G+H(m)P=kG?H(m)nA?G+H(m)P=kG=R? 和Elgmal性能对比
ECC初始化参考上面的初始化过程以及ECC加密体制。 签名R = k G s = k ? H ( m ) ? n A m o d p R = kG\\ s = k-H(m)*n_A mod p R=kGs=k?H(m)?nA?modp 签名值(R,s) 验证R 1 = s G + H ( m ) P 验 证 等 式 R 1 = R R_1 = sG + H(m)P \\ 验证等式 R_1 = R R1?=sG+H(m)P验证等式R1?=R 正确性证明R 1 = s G + H ( m ) P = ( k ? H ( m ) n A ) G + H ( m ) P = k G ? H ( m ) n A G + H ( m ) P = k G = R \begin{aligned} R_1&= sG+H(m)P\\ &= (k-H(m)n_A)G+H(m)P\\ &= kG-H(m)n_AG + H(m)P \\ &= kG = R \end{aligned} R1??=sG+H(m)P=(k?H(m)nA?)G+H(m)P=kG?H(m)nA?G+H(m)P=kG=R? 综合设计(看命)根据所学的可以参考复习流密码和序列密码,以及密钥交换协议,还有各种签名,比如盲签名、群签名和群、环、域等数论知识点等。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 1:46:37- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |