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 hard

  • Diffie-Hellman problems:

    Fix group with generator

    • Computational 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的更多相关文章

  1. OpenCV人脸识别LBPH算法源码分析

    1 背景及理论基础 人脸识别是指将一个需要识别的人脸和人脸库中的某个人脸对应起来(类似于指纹识别),目的是完成识别功能,该术语需要和人脸检测进行区分,人脸检测是在一张图片中把人脸定位出来,完成的是搜寻 ...

  2. Android Studio开发RecyclerView遇到的各种问题以及解决(一)

    以前一直在用ListView,,,最近才看RecyclerView发现好强大.RecyclerView前提是Android版本在5.0以上,本人以前用的是eclipse只支持到4.4.索性就安装一个A ...

  3. 搭建一套自己实用的.net架构(3)续 【ORM Dapper+DapperExtensions+Lambda】

    前言 继之前发的帖子[ORM-Dapper+DapperExtensions],对Dapper的扩展代码也进行了改进,同时加入Dapper 对Lambda表达式的支持. 由于之前缺乏对Lambda的知 ...

  4. 学习WCF入门的第一个实例

    一.概述 WCF说白了就是一个基于终结点的通信手段!就是Service端提供一定的功能实现,然后暴露出一个或多个终结点,Client端调用Service端的功能(可以理解为调用一个函数),那么Clie ...

  5. 使用MATLAB对图像处理的几种方法(上)

    实验一图像的滤波处理 一.实验目的 使用MATLAB处理图像,掌握均值滤波器和加权均值滤波器的使用,对比两种滤波器对图像处理结果及系统自带函数和自定义函数性能的比较,体会不同大小的掩模对图像细节的影响 ...

  6. iOS-多线程介绍

    一.前言部分 最近在面试,重新温习了一遍多线程,希望加深一遍对于多线程的理解. 1.什么是进程? 1).要了解线程我们必须先了解进程,通俗来讲进程就是在系统中运行的一个应用程序. 2).每个线程之间是 ...

  7. 明显调用的表达式前的括号必须具有(指针)函数类型 编译器错误 C2064

    看到“明显调用的表达式前的括号必须具有(指针)函数类型”这句时我才发现我的语文水平有多烂,怎么看都看不懂,折腾了半天才知道是哪里出了问题. 举个简单的例子 class CTest { void (CT ...

  8. java web学习总结(二十八) -------------------JSP中的JavaBean

    一.什么是JavaBean JavaBean是一个遵循特定写法的Java类,它通常具有如下特点: 这个Java类必须具有一个无参的构造函数 属性必须私有化. 私有化的属性必须通过public类型的方法 ...

  9. java web学习总结(二十六) -------------------JSP属性范围

    所谓的属性范围就是一个属性设置之后,可以经过多少个其他页面后仍然可以访问的保存范围. 一.JSP属性范围 JSP中提供了四种属性范围,四种属性范围分别指以下四种: 当前页:一个属性只能在一个页面中取得 ...

  10. autofac 组件的实例范围

    实例范围决定如何在请求之间共享服务. 原文地址:http://docs.autofac.org/en/latest/lifetime/instance-scope.html 每个依赖一个实例 使用这个 ...

随机推荐

  1. 本地如何访问vue2 生成的dist代码

    前言 当你使用 Vue CLI 或其他构建工具构建 Vue 2 项目时,它会生成一个 dist 文件夹,这个文件夹包含了你项目的生产环境版本的静态资源文件(HTML.JavaScript 和 CSS) ...

  2. Golang入门:Linux上的go语言安装与配置

    Tips:本文以本文撰写时的 Go 语言最新版本,也就是 go.1.19.2 版本为例. Linux 发行版本使用 Ubuntu 22.04.1 LTS 为例来做演示. 安装 C 工具 Go 的工具链 ...

  3. centos7 docker卸载老版本并升级到最新稳定版本

    一.前言 docker的版本分为社区版docker-ce和企业版dokcer-ee社,区版是免费提供给个人开发者和小型团体使用的,企业版会提供额外的收费服务,比如经过官方测试认证过的基础设施.容器.插 ...

  4. PLSQL中查询数据的时候查询结果显示中文乱码

    要需要很努力才能看起来毫不费力.....1.在PLSQL中查询数据的时候查询结果显示中文乱码这里写图片描述2.需要在环境变量中新建两个环境变量:第一个:设置 NLS_LANG=SIMPLIFIED C ...

  5. C# 多文件打包

    public HttpResponseMessage GetZip() { var response = Request.CreateResponse(HttpStatusCode.OK); try ...

  6. [每日算法 - 阿里机试] leetcode739. 每日温度

    入口 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer.https://le ...

  7. UML中的各种关系

    各种关系 UML中的各种关系一览表 名称 英文名称 符号 描述 实现方法 耦合强度 举例 关键词 备注 依赖 dependency 1.当类与类之间有使用关系时就属于依赖关系:2.依赖不具有" ...

  8. 【JDBC第8章】数据库连接池

    第8章:数据库连接池 8.1 JDBC数据库连接池的必要性 在使用开发基于数据库的web程序时,传统的模式基本是按以下步骤: 在主程序(如servlet.beans)中建立数据库连接 进行sql操作 ...

  9. 剖析 Docker Swarm 操作对容器端口影响

    剖析 Docker Swarm 操作对容器端口影响 一.背景阐述 在使用 Docker Swarm 构建集群环境过程中,于 ts3 节点出现了原有的容器端口全部失效,手动重启后才恢复的情况.期间涉及 ...

  10. Java中的常见排查问题命令

    一.线上服务排查,从三个方面负载.cpu.内存 这三个方面着手 1:top 命令是比较常见的,也是最常用的,因为他显示的信息也是最全的 2:针对负载的问题,我们怎么能确定负载当前是高还是低? 一般来说 ...