CAN304 W4
CAN304 W4
The public-key revolution
对称加密 (symmetric cryptograph) 带来了一系列安全问题:
如何安全地共享密钥?(The key-distribution problem)
多个人如何共享密钥 (每两人一个?)(The key-management problem)?
假设两个没有先前关系的用户想要安全地通信,他们什么时候会共享密钥?(Lack of support for "open systems")
非对称加密 (asymmetric cryptography):一方生成一对密钥 - 公钥pk 和私钥 sk,公钥被广泛传播,私钥是保密的。
Key ideas:
Some problems exhibit asymmetry‒ Easy to compute, but hard to invert
Use this asymmetry to enable two parties to agree on a sharedsecret key using public discussion
一些问题表现出非对称性 - 易于计算,但难以反转 (invert)
利用这种不对称性,双方可以通过公开讨论就共享密钥达成一致
Factoring problem:计算两个数字的乘积很容易;但根据乘积分解数字很难
Discrete-logarithm problem: 离散对数问题
Fix cyclic group of order , and generator
Dlog problem in :
Given and an element ℎ in , find such that x= ℎ
Dlog assumption in :
Solving the discrete log problem in is hardDiffie-Hellman problems:
Fix group with generatorComputational Diffie-Hellman (CDH) problem:
Given , x, y, compute xy
Decisional Diffie-Hellman (DDH) problem:
Given , x, y, distinguish the correct xy from a uniform element of
Public-key encryption
Public-key encryption (PKE)
public-key encryption scheme 由三种算法组成:
- Gen:key-generation algorithm,生成公钥 pk 和私钥 sk
- Enc:根据输入 pk 和 message m,输出密文 c 的加密算法
- Dec:根据输入 sk 和密文 c,输出 message m 或 ⊥ (error) 的解密算法
Hybrid encryption
使用对称加密对 m 进行加密,然后用非对称加密对密钥 k 进行加密。解密时先用私钥解密 k,再用 k 解密密文。(由于 m 会很长,直接用非对称加密计算量会很大)
Dlog-based PKE: ElGamal encryption
Dlog problem:给定 和 group 中的一个元素 ℎ,找到 x 使得 x = h。
- Gen
- 初始化 group 参数 G,q,g;选择 uniform \(x \in Z_q\) (Zq = {1, 2, ..., q-1}),计算 h = x
- Public key is ℎ, private key is
- Encpk(m), where \(m \in G\)
- 选择 uniform \(y \in Z_q\)
- The ciphertext is $ (_1, \ _2) = (^y, \ ℎ^y ⋅ )$
- Decsk(c1, c2)
- 解密输出 \(\frac{c_2} {c_1^x} =\frac{h^y*m} {g^{xy}} = \frac{g^{xy}*m} {g^{xy}} = m\)
RSA encryption
Factoring problem
Chosen-plaintext attack (CPA) 选择明文攻击
攻击类型:Ciphertext-only attack -> Known-plaintext attack -> Chosen-plaintext attack -> Chosen-ciphertext attack,强度依次增加。
假如攻击者知道一些 plaintext-ciphertext pairs,例如 (m1, c1) 和 (m2, c2)。现在有一个密文 c3,如果 \(c_1 \sdot c_2 = c_3\),那么 \(m_1 \sdot m_2 = m_3\)。
注意:我们不是向普通RSA展示真正的CPA攻击;我们只是说明普通RSA没有CPA安全性!
因此,Plain RSA is not CPA-secure,不过这个问题可以通过 PKCS 解决。
PKCS: Public-Key Cryptography Standard (PKCS) 公钥加密标准(PKCS)
- idea:add random padding
- 要加密 ,随机选择一个 ,把 r 添加到 m 里
- \(c = [(r|m)^e mod N]\)
- Issues:
- No proof of CPA-security (unless is very short)
- Chosen-plaintext attacks known if is too short
- Chosen-ciphertext attacks known
Digital signature
Digital signature 和 MACs 的区别:
- Public verifiability
- “任何人”都可以验证 signature,而只有密钥持有者才能验证 MAC 的 tag
- Transferability
- 可以将 signature 转发给其他人
- Non-repudiation
- 签名者不能(轻易地)否认签发的签名 (可以使用 pk 的公共副本验证签名)
- 而 MAC 无法提供此功能 (无法访问密钥,无法验证 tag),而且无法确定是谁发出的签名 (有密钥的都可以发)
Signature schemes
签名方案由三种 PPT 算法(Gen、Sign、Vrfy)定义:
Gen:输入 1n (指定密钥长度),输出 pk 和 sk
Sign:将私钥 sk 和 message \(m \in \{0, 1\}^*\),输出 signature \(\sigma\)
\[\sigma \leftarrow Sign_{sk} (m)
\]Vrfy:输入公钥 pk,message m 和 signature \(\sigma\),输出 0 或 1 (拒绝和接受)
Hash-and-sign paradigm
给定:
- 一个 signature scheme Π=(Gen, Sign, Vrfy) 来签名长度为 n 的短 message
- Hash function \(H: \{0,1\}^* \rightarrow \{0,1\}^n\)
构建一个可以适用于任意长度 message 的 signature scheme Π‘ =(Gen’, Sign‘, Vrfy’):
- \(Sign_{sk}' (m) = Sign_{sk}(H(m))\)
- \(Vrfy_{pk}' (m, \sigma) = Vrfy_{pk}(H(m), \sigma)\)
RSA-based signatures (基于大数因子分解)
Attacks
- sign specific messages
- 假如给定 m=1,可以得到 \(\sigma=1\),因为 \(\sigma = [1^d mod N] = 1\) ,即 当m=1时,不管d为何值,签名的值都为1。
- sign “random” messages
- 选择随机的 \(\sigma\),设置 \(m = [\sigma ^e mod N]\) ,意思是即使我不能控制m的值,但是我得到了m的合法签名\(\sigma\)。在大量数据的情况下,我总能得到一部分有用的m的签名。
- combine two signatures to obtain a third
- 签名 \(\sigma_1,\ \sigma_2\) 是合法的签名,它们分别对应于 \(m_1, \ m_2\)
- 那么 \(\sigma' = \sigma_1 \sigma_2 \ mod \ N\) 是合法的签名,它对应于 \(m' = m_1 m_2 \ mod \ N\)。因为 \((\sigma_1 \sigma_2)^e = \sigma_1^e \sigma_2^e = m_1 m_2 \ mod \ N\)
RSA-FDH
RSA-FDH: RSA full-domain hash,也是一个 Hash-and-sign paradigm。
Signatures from the discrete-logarithm problem
- ElGamal签名方案、Schnorr签名方案、DSS签名方案(DSA and ECDSA)都是基于离散对数的签名方案。
Diffie-Hellman key agreement
Decisional Diffie-Hellman (DDH) problem:给定 \(g^x\) 和 \(g^y\),要从 \(g^{xy}\) 中找到它们很困难。
G:cyclic group;: prime, order of ;: generator of 。
两人分别从 Zq 中生成 x 和 y,然后计算出 h1 和 h2 并交换,最后生成 k1 和 k2,k1 和 k2 是相等的 (因为 \((g^x)^y = (g^y)^x\))。
k是协商出的密钥
Elliptic curve Diffie-Hellman key agreement
ECDDH problem:给定 yP 和 xP,要从 xyP 中区分它们很困难。
: elliptic curve group;: prime, order of ;: generator of 。
k1 和 k2 也是相等的 (因为 \(xyP = yxP\))。
k是协商出的密钥
Man-in-the-middle to EC(DH)
攻击者可以替换双方的密钥,然后 k1 和 k3 相等,k2 和 k4 相等。
可以通过在协议中引入身份验证 (authentication) 来解决。
CAN304 W4的更多相关文章
- OpenCV人脸识别LBPH算法源码分析
1 背景及理论基础 人脸识别是指将一个需要识别的人脸和人脸库中的某个人脸对应起来(类似于指纹识别),目的是完成识别功能,该术语需要和人脸检测进行区分,人脸检测是在一张图片中把人脸定位出来,完成的是搜寻 ...
- Android Studio开发RecyclerView遇到的各种问题以及解决(一)
以前一直在用ListView,,,最近才看RecyclerView发现好强大.RecyclerView前提是Android版本在5.0以上,本人以前用的是eclipse只支持到4.4.索性就安装一个A ...
- 搭建一套自己实用的.net架构(3)续 【ORM Dapper+DapperExtensions+Lambda】
前言 继之前发的帖子[ORM-Dapper+DapperExtensions],对Dapper的扩展代码也进行了改进,同时加入Dapper 对Lambda表达式的支持. 由于之前缺乏对Lambda的知 ...
- 学习WCF入门的第一个实例
一.概述 WCF说白了就是一个基于终结点的通信手段!就是Service端提供一定的功能实现,然后暴露出一个或多个终结点,Client端调用Service端的功能(可以理解为调用一个函数),那么Clie ...
- 使用MATLAB对图像处理的几种方法(上)
实验一图像的滤波处理 一.实验目的 使用MATLAB处理图像,掌握均值滤波器和加权均值滤波器的使用,对比两种滤波器对图像处理结果及系统自带函数和自定义函数性能的比较,体会不同大小的掩模对图像细节的影响 ...
- iOS-多线程介绍
一.前言部分 最近在面试,重新温习了一遍多线程,希望加深一遍对于多线程的理解. 1.什么是进程? 1).要了解线程我们必须先了解进程,通俗来讲进程就是在系统中运行的一个应用程序. 2).每个线程之间是 ...
- 明显调用的表达式前的括号必须具有(指针)函数类型 编译器错误 C2064
看到“明显调用的表达式前的括号必须具有(指针)函数类型”这句时我才发现我的语文水平有多烂,怎么看都看不懂,折腾了半天才知道是哪里出了问题. 举个简单的例子 class CTest { void (CT ...
- java web学习总结(二十八) -------------------JSP中的JavaBean
一.什么是JavaBean JavaBean是一个遵循特定写法的Java类,它通常具有如下特点: 这个Java类必须具有一个无参的构造函数 属性必须私有化. 私有化的属性必须通过public类型的方法 ...
- java web学习总结(二十六) -------------------JSP属性范围
所谓的属性范围就是一个属性设置之后,可以经过多少个其他页面后仍然可以访问的保存范围. 一.JSP属性范围 JSP中提供了四种属性范围,四种属性范围分别指以下四种: 当前页:一个属性只能在一个页面中取得 ...
- autofac 组件的实例范围
实例范围决定如何在请求之间共享服务. 原文地址:http://docs.autofac.org/en/latest/lifetime/instance-scope.html 每个依赖一个实例 使用这个 ...
随机推荐
- Go语言修改字符串
Go 语言的字符串无法直接修改每一个字符元素,只能通过重新构造新的字符串并赋值给原来的字符串变量实现.请参考下面的代码: angel := "Heros never die" an ...
- Django实战项目-学习任务系统-文章汇总
学习任务系统1.0版本已经基本完成了.现在按顺序整理下文章和链接,按照开发时间顺序列举,方便想要完整学习的人. 理论上说,按照文章代码可以搭建该系统的70%主体功能,剩下一些小的功能自己参考现有代码学 ...
- 查看docker容器占用内存
ps -ef|grep 容器Id 1 2 3 [root@wentao-2 order]# ps -ef|grep 3a61cb3fd4f6 root 7358 12956 0 09:14 ...
- 【调研】Vision Language Model Safety
Adversarial Attacks White-box Attacks Task-specific Attacks 的目标是针对某个具体的任务(如图像描述生成.指代表达理解等),通过精心设计的对抗 ...
- zk源码—3.单机和集群通信原理
大纲 1.单机版的zk服务端的启动过程 (1)预启动阶段 (2)初始化阶段 2.集群版的zk服务端的启动过程 (1)预启动阶段 (2)初始化阶段 (3)Leader选举阶段 (4)Leader和Fol ...
- 附043.KubeEdge边缘云部署实施方案
目录 KubeEdge介绍 KubeEdge概述 KubeEdge优势 KubeEdge架构 KubeEdge部署 部署依赖 部署规划 主机名配置 变量准备 互信配置 环境预配置 安装keadm 设置 ...
- iOS自动化测试环境搭建总结
1.关于iOS真机和模拟器自动化环境搭建 参考博文: Appium+Python3+iOS真机环境搭建 iOS自动化测试:mac下iOS10 appium测试环境的搭建 IOS + Appium自动化 ...
- AOP流程及原理
目录 一.AOP结构介绍 @Pointcut 通知 原理 连接点 拦截器 二.Bean介入点 EnableAspectJAutoProxy AspectJAutoProxyRegistrar Anno ...
- 多线程,Join()
一.定义:就是该线程是指的主线程等待子线程的终止.也就是在子线程调用了join()方法,后面的代码,只有等到子线程结束了才能执行 二.不加join: class Thread1 extends Thr ...
- cglib 代理类自己equals自己 返回false问题
问题: 通过debug发现result.removeAll的时候 删不了 public boolean equals(Object obj) { return obj instanceof OspSp ...