第四章 公钥密码
时间:2022-05-26
本文章向大家介绍第四章 公钥密码,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
第四章 公钥密码
公钥密码体制也被称为: 非对称密码体制
公钥密码的基本思想
• RSA算法原理及相关安全性分析
• ElGamal算法原理及相关安全性分析
• SM2算法原理
• 选择密文攻击
对称密码算法的缺陷
- 密钥分配问题:通信双方加密通信前要通过秘密的安全信道协商加密密钥,这种安全信道可能很难实现,对于这个信道的实现要求甚至比消息的安全性要求还要高
- 密钥管理问题:在多用户网络中,任何两个用户之间都需要有共享的秘密钥,n个用户需要Cn2=n(n-1)/2个密钥,n=5000时,Cn2=12,497,500,系统开销非常大
- 没有签名功能:当主体A收到主体B的电子文挡时,无法向第三方证明此电子文档确实来源于B,传统单钥加密算法无法实现抗抵赖的需求
公钥密码的主要作用
- 基于公钥的密钥分配(如DH密钥交换协议实现密钥分配)
- 公钥加密
- 数字签名
公钥密码的理论基础: 陷门单向函数
单向函数:就是一个方向走很轻松,比如hash
陷门单向函数,就是在hash的过程中需要加入一个t,t叫做陷门。有t就可以反求,没有就不行。
研究公钥密码算法就是要找出合适的陷门单向函数
困难问题
-
大整数分解问题
- 若已知两个大素数p和q,求n = pq是容易的。
- 而由n,求p和q则是困难的,这就是大整数分解问题。
-
离散对数问题
- 给定一个大素数p,p-1含另一大素数因子q,则可构造一个乘法群,它是一个p-1阶循环群。设g是的一个生成元,1<g<p-1。
- 已知x,求y=g^x modp是容易的
- 而已知y、g、p,求x使得y=g^x modp成立则是困难的,这就是离散对数问题。
RSA
RSA算法 - Dinesaw - 博客园 (cnblogs.com)
ElGamal密码体制
加密过程中选择的随机整数k也需要保密且为一次性
- K泄露,则敌手可计算出y^k从而可以计算出M
- 使用同一k加密不同的明文M,M',如果敌手知道M就可由C2/C2' =M/M'求出M'
特点:
- 安全性基于有限域上的离散对数的难解性
- 加密算法是概率算法
- 不能抵御选择密文攻击
- 存在密文扩张
ElGamal的选择密文攻击
椭圆曲线密码体制
为保证RSA算法的安全性,它的密钥长度需一再增大,使得运算负担越来越大。相比之下,椭圆曲线密码的密钥长度是其1/5乃至1/10
(53条消息) 【密码学竞赛】椭圆曲线上的计算(多倍点问题)
椭圆曲线上的密码
有两点,一个点P,Q,并且Q=kP。P的阶是满足nP=O的最小正整数n。
(1)已知k和P易求Q;
(2)已知P、Q求k则是困难的
这就是椭圆曲线上的离散对数问题,可应用于构造公钥密码体制。
SM2
参数
通常选择特征p为160bit,加密的SEED不少于192bit的比特串
原文地址:https://www.cnblogs.com/tupo/p/16315188.html
- QT5 动态链接库的创建和使用
- Struts2 动态结果和带参数的跳转
- struts2 Result Type四个常用转跳类型
- Struts2 默认Action和模块包含
- struts2 访问Web元素的4种方法
- struts2 DMI
- 翻译qmake文档(四) Building Common Project Types
- 翻译qmake文档(三) Creating Project Files
- 翻译qmake文档(二) Getting Started
- QTableView 添加按钮
- QTableView 添加进度条
- c# 调用win32模拟点击的两种方法
- [原创翻译]Protocol Buffer Basics: C#
- 详解 Android Activity 生命周期
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 我对torch中的gather函数的一点理解
- 冒泡排序的实现思路和优化方案
- Java Map转对象
- 59.Vue 使用webpack构建vue项目
- Android初学设置文字跑马灯效果
- 使用Zolom内存解析运行python脚本(不落地)
- 要点3:输入函数对比与自定义输入方式
- 性能测试必备命令(3)- lscpu
- 性能测试必备命令(2)- uptime
- Lua/luajit 点与冒号的区别
- vim的几种模式mode和按键映射map
- PHP parent 的注意点
- 不停服务调试(debug)线上Rsyslog
- 使用ulimit 命令、/etc/security/limits.conf、proc 调整系统参数
- 解决jupyter notebook matplotlib绘图中文乱码问题