1. Diffie-Hellman协议:

  假定g是集合G的生成元,G有n个元素。

  Alice随机选取1-n中的一个数a,并公布ga为公钥

  Bob随机选取1-n中的一个数b,并公布gb为公钥

  那么gab就是Alice与Bob之间的私钥

  从公钥中提取私钥,是一个离散对数问题,难以解决。

  裸的Diffie-Hellman协议有中间人攻击的风险

2. Elgamal系统

  n阶有限循环群G,哈希函数H,对称加密算法Es与Ds

  Alice随机选取G的一个生成元g,从1到n-1间随机选取一个数a

  Alice将a作为私钥,将(g,ga)作为公钥

  现在Bob想要将消息m发送给Alice

  加密:Bob从1到n-1间随机选取一个数b,计算u=gb,计算v=gab

  计算k = H(u,v),再计算c = Es(k,m)

  然后将(u,c)作为密文发送出去

  解密:Alice接收到密文(u,c)

  由于u=gb,Alice可以计算ua=gab=v

  同样的,可以到k = H(u,v),然后就可以得到明文m = Ds(k,c)

3. Elgamal系统是选择密文安全的

4. twin Elgamal

  Alice随机选取G的一个生成元g,从1到n-1间随机选取两个数a1与a2

  Alice将(a1,a2)作为私钥,将(g,ga1,ga2)作为公钥

  加密:Bob从1到n-1间随机选取一个数b

  计算k = H(gb,ga1*b,ga2*b),再计算c = Es(k,m),输出(gb,c)

  解密:Alice计算k = H(gb,ga1*b,ga2*b),得到明文m = Ds(k,c)

5. 单向函数

  有函数f将集合X映射到集合Y,如果计算f是容易的,计算f-1是困难的,那么f就是单向函数

6. 离散对数单向函数

  n阶有限循环群G,其生成元为g,定义函数f(x) = gx ∈ G。那么f是单向的。

  离散对数单向函数有一些有趣的性质:f(x+y) = f(x) * f(y)也就是我们只需要知道f(x)与f(y)的值,不需要知道x与y的具体值,就能计算出f(x+y)

7. RSA单向函数

  随机选择两个质数p,q,计算n = p * q,构造整数e与d,并且e*d = 1 mod φ(n)

  定义函数f(x) = xe mod n,那么f是单向的

  RSA单向函数的特殊性质在于 f(x*y) = f(x) * f(y),

Cryptography I 学习笔记 --- 基于Diffie-Hellman的公钥加密的更多相关文章

  1. Cryptography I 学习笔记 --- 基于陷门置换的公钥加密

    RSA算法的工作流程 1. 生成公钥私钥 生成两个素数p和q,计算n=p*q,计算φ(n)=n-p-q+1,然后生成e与d,使 e * d = 1 mod φ(n). 然后以(n, e)作为公钥,(n ...

  2. Linux学习笔记——基于鸟哥的Linux私房菜

    Linux学习笔记--基于鸟哥的Linux私房菜 ***** ARM与嵌入式linux的入门建议 (1) 学习基本的裸机编程:ARM7或ARM9,理解硬件架构和控制原理 (这一步是绝对的根基) (2) ...

  3. WCF学习笔记(基于REST规则方式)

    一.WCF的定义 WCF是.NET 3.0后开始引入的新技术,意为基于windows平台的通讯服务. 首先在学习WCF之前,我们也知道他其实是加强版的一个面向服务(SOA)的框架技术. 如果熟悉Web ...

  4. deep learning深度学习之学习笔记基于吴恩达coursera课程

    feature study within neural network 在regression问题中,根据房子的size, #bedrooms原始特征可能演算出family size(可住家庭大小), ...

  5. Linux常用命令学习笔记——基于CentOS 7

    前言:最近在linux培训时复习了一下linux系统中一些常用的命令和用法,整理成了笔记,虽然些许零散,但希望对大家有所帮助. 目录 0.帮助指令 1.关机.重启.注销命令 2.文件和目录操作命令 3 ...

  6. Cryptography I 学习笔记 --- 总结

    在b站上大概的看完了Dan Boneh的密码学,对现代密码学总算有了一个粗浅的认识. 总算能在纸上手写RSA公式并且证明之了,蛤蛤. 总体的感触就是,现代密码学是一个非常博大精深的体系,我等程序员最重 ...

  7. Cryptography I 学习笔记 --- 密钥交换

    1. 使用可信第三方(Trusted third parties)进行密钥交换. a. Alice与TTP之间的密钥是K1,Bob与TTP之间的密钥是K2. b. Alice向TTP发起一个与Bob交 ...

  8. Cryptography I 学习笔记 --- 信息完整性

    1. ECBC-MAC,需要一对密钥k与k1,然后将明文分组,用cbc模式对明文分块加密,将最后的密文块再用k1进行加密,即可得到结果 2. NMAC,需要一对密钥k与k1,然后将明文分组,用k加密第 ...

  9. Vue学习笔记-基于CDN引入方式简单前后端分离项目学习(Vue+Element+Axios)

    一  使用环境 开发系统: windows 后端IDE: PyCharm 前端IDE: VSCode 数据库: msyql,navicat 编程语言: python3.7  (Windows x86- ...

随机推荐

  1. 记一次开发过程中,iview遇到的一些坑以及解决办法

    写在开头:本次项目采用的是vue2.0+iview3.0,最近公司没啥事,来总结一下开发过程中遇到的问题. 1.Modal关闭问题 需求背景:modal框里面是个form表单,点击确定之后,先验证fo ...

  2. IOS开发---菜鸟学习之路--(二十一)-利用正则表达式解析URL获取其中的参数

    因为项目需要解析URL当中参数的部分,在网上搜索了一下都没有相关的资料. 然后就自己写了一个 其实我就是通过正则表达式来处理URL 进行解析的 好了直接上代码吧 也是非常的简单,大家拷贝过去就可以使用 ...

  3. 67、activity中调用fragment内部自定义的方法

    fragment: /** * author: Created by zzl on 15/11/19. */ @SuppressLint("validFragment") publ ...

  4. linux环境搭建系列之memcached安装步骤

    1.从官网在线下载最新的安装包 wget http://memcached.org/downloads/memcached-1.4.34.tar.gz 该命令为在线下载 注意:最新的地址会变动,所以最 ...

  5. Python+Selenium基础篇之3-打开和关闭IE/Chrome浏览器

    前面文章介绍了,如何调用webdriver接口方法来打开和关闭Firefox浏览器,本文介绍如何打开IE和Chrome浏览器.web项目,需要做兼容性测试,最重要的是浏览器兼容性测试.如果只考虑win ...

  6. [SDOI2009][bzoj1878] HH的项链 [莫队模板题]

    题面: 传送门 思路: 就是一道莫队的模板题目...... 开一个1000000的数组记录每个数出现的次数,然后每次从1到0或者从0到1更新答案 莫队讲解看这里:莫队 Code: #include&l ...

  7. [atcoder002E] Candy Piles [博弈论]

    题面: 传送门 思路: 每一堆糖排成一列,所有列横着放,形成一个阶梯型 两个决策相当于左边一列去掉和最下面一行去掉 那么这个模型可以转化为同样形状的网格图,向左上方走,走到边界的赢· 然后一波数学推导 ...

  8. Prime Gift(prime)

    Prime Gift(prime) 题目描述 Jyt有nn个质数,分别为p1,p2,p3-,pnp1,p2,p3-,pn. 她认为一个数xx是优秀的,当且仅当xx的所有质因子都在这nn个质数中. 她想 ...

  9. bzoj3105【CQOI2013】新nim游戏

    题意:http://www.lydsy.com/JudgeOnline/problem.php?id=3105 sol  :要想必胜则拿完后异或空间不能包含0,即给对手留下一组线性基 为保证拿走的最小 ...

  10. 【CCF】 Markdown 模拟

    #include<iostream> #include<cstdio> #include<string> #include<cstring> #incl ...