一、灵魂五问
1.什么是密码?
答:秘密是指采用特定变换的方法对信息等进行加密保护、安全认证的技术、产品和服务
2.什么是密码学?
答:密码学是研究编制密码和破译密码的技术和科学。
3.什么是面编码学?
答:研究密码变化的客观规律,应用于编制密码以保护通信秘密的,成为密码编码学
4.密码分析学和破译学?
答:应用于破译密码以获取通信情报的,成为密码分析学和破医学
答:密码学主要解决:机密性、完整性、消息源认证、通信实体的认证、不可否仍性
5.密码的基本思想是什么?
答:伪装以隐蔽信息,使得未授权者不能理解它的真实含义。
三、概要介绍
1.密码体质的基本组成
(1)明文空间M:全体明文的集合
(2)密文空间C:全体密文的集合
(3)密钥空间K:全体密钥的集合,k=<Ke,Kd>,Ke加密,Kd解密
(4)加密算法E:一簇由M—>C的加密变换
(5)解密算法D:一簇由C—>M的解密变换
2.密码体制的分类
1.从加密钥与解密钥是否相等划分
(1)传统密码(Ke=kd):DES、AES、SMS4、RC4
(2)公开密钥密码(Ke != Kd)
Ke != kd,且由于Ke不能计算出Kd,于是可以将Ke公开,这样也不会危害Kd
典型密码:RSA、EIGaMAL、ECC
2.从密钥的使用方式划分
(1)序列密码
明文、密文、密钥以位(字符)位单位加密解密
核心密码的主流
典型的密码:RC4,祖冲之密码
(2)分组密码
密文、密文、密钥以组为单位加密解密
商用密码为主流
典型密码:DES、AES、SMS4
3.密码算法是否变化划分
密码在工作过程中算法固定不变,密钥可变
迄今为止的绝大多数密码都是固定算法
典型密码:AES、DES、SMS4、RC4、RSA、EIGAMAL、ECC
3.密码分析的分类
1.基于数学的分析
所谓数学分析是指密码分析者针对加密算法的数学一句通过数学分析的方式来破译密码
统计分析攻击:通过分析密文和明文的统计规律来破译密码
2.基于非数学的分析
所谓基于非数学的分析是指密码分析者获取并分析面芯片的物理参数(如功率、电流、声音、执行时间等)来破译密码。这种攻击又被称作侧信道攻击。
侧信道攻击的原理在于
(1)密码芯片在执行不同的指令时所消耗的功率、电流、时间、发的声音是不同的
(2)密码芯片在处理不同的数据时所消耗的功率、电流、时间、发的声音是不同的
3.根据占有的数据资源分类
(1)攻击者总能获得密文
(2)攻击者总能知道密码算法,但不知道密钥
(3)攻击者有足够的计算资源
4.解决不同问题所用的算法有哪些
伪装以隐蔽信息,使未授权者不能理解它的真实含义。
解决机密性用:对称密钥加密(流密码、分组密码)、公钥及加密
解决完整性:杂凑函数、消息摘要函数
解决认证:数字签名、身份认证协议
解决不可否认性:数字签名
5.对称加密、非对称加密、Hash引入
1.对称密钥加密算法
对称密钥加密算法的特点:加密和解密密钥相同、加解密的速度快
常见的算法:祖冲之算法(ZUC)、DES、AES、SM4等
2.非对称密钥加密算法(公开密钥密码体质)
非对称加密的特点:加密和解密的密钥不同,加解密速度慢
应用:短消息加密、数字签名、身份认证
常见算法:RSA、ECC、SM2
3.Hash算法
特点:①任意长输入映射为定长输出;②当输入发生变化,输出发生不可预测的变化;③输出也无法推导出输入;
应用:完整性校验
常见算法:MD5,SM3
四、密码学发的时间轴
古代密码学:从由人类以来到1800年,以前被当做一门艺术,没有推理证明全凭直觉来来设计和分析。有500B.C(公元500年前)的古斯巴达“天书”密码(置换密码)、205-123BC古希腊人棋密码(代替密码);50BC,古罗马凯撒加密(代替密码);16世纪,维吉尼亚密码(代替密码)
五、古典密码学
5.1置换密码
1.把明文中的字母重新排列,字母本身不变,但其位置发生了改变,这样编排成的密码称为置换密码。
#例如:把明文中的字母颠倒过来,然后截取固定长度的字母组作为密文
#明文:明晨五点行动
MING CHNEG WU DIAN XING DONG
#密文:
GNODG NIXNA IDUWG ENHCG NIM
2.把明文按某一顺序排列成一个矩阵,然后按另一个顺序选出矩阵中的字母形成密文,最后截成固定长度的字母组作为密文。
#例如:明晨五点反攻
#明文:
MING CHENG WU DIAN FAN GONG
#矩阵:
MINGCH
ENWUDI
ANFANG
ONG###
#选出顺序:按列
#密文:
MEAO INNN NWFG GUA# CDN# HIG#
理论上置换密码的加密密钥是置换矩阵P,解密钥是置换举证p逆
置换密码经不起已知明文攻击
5.2 代替密码
首先构造一个或多个密文字母表,然后用秘闻字母表中的字母或者字母组来代替明文字母或字母组,各字母或字母组的相对位置不变,但其本身 改变了。
5.2.1单表替换:主要在英文字母中出现
1.单表代替的概念:使用固定信息,将原文替换成密文。例如: bee ,将b替换成w, e替换p,单词就变成wpp
2.单表代替密码的分类:加法密码、乘法密码、仿射密码
3.经不起穷举攻击
5.2.1.1加法密码
1、凯撒加密:知道解密规则,Caesar加密就是一种加密方法(k=3)
原理:把26个字母进行位移、往左边或者往右边移动,在移动时注意最多只能移动25位
例如:abcd向后移动两位cdef
package com.liping.ascii;
/**
*凯撒加密
*/
public class AsciiDemo {
public static void main(String [] args){
//定义原文
String input = "Hello world";
//字母向后移动位数
int key = 3;
//凯撒加密
String s =encryptKaiser(input,key);
System.out.println("密文是:"+ s);
//解密
String s1=decryptKasier(s,key);
System.out.println("明文是:"+ s1);
}
/**
*解密
* @param s
* @param key
* @return
*/
private static String decryptKasier(String s, int key) {
char [] chars = s.toCharArray();
StringBuilder sb = new StringBuilder();
for (char aChar : chars) {
int b = aChar;
b = b - key;
char newb = (char)b;
sb.append(newb);
}
return sb.toString();
}
/**
* 加密
* @param input
* @return
*/
private static String encryptKaiser(String input,int key) {
//把字符串转换成数组
char [] chars = input.toCharArray();
StringBuilder sb = new StringBuilder();
for(char achar:chars){
int b = achar;
b = b + key;
char newc = (char)b;
sb.append(newc);
}
// System.out.println("密文是:"+sb.toString());
return sb.toString();
}
}
5.2.1.2乘法密码(k有12种选择)
要求k之间是互为素数
5.2.1.3仿射密码(k有12种选择,b有26种选择)
5.2.2多表替换
表示有多张表,原文和密文进行对比,典型密码为维吉尼亚密码(Vigenere)
维吉尼亚的例子
数学语言的阐述:
5.3代数密码
Vernam密码:明文、密文、密钥都表示二进制位
M=m1,m2,m3,m4…mn
K=k1,k2,k3,k4…kn
C=C1,C2,C3,C4…Cn
加密解密都是模2运算
Vernam密码经不起已知明文攻击,如果密钥序列有重复,则Vernam密码是不安全的。
极端情况下是一次一密,但是并不实用
5.3 破解方法:频率分析法,在不知道破解规则的情况下
频率分析法:概率论,在不知道破解规则的情况下,按频率的顺序排序
六、近代密码学
1.恩尼格马密码机
核心也是移位和替换法,被图灵破解
2.祖冲之序列密码算法
含义:ZUC算法是一个基于字设计的同步序列密码算法,种子密钥SK和初始向量IV的长度均为128比特。
ZUC算法结构
第一层:线性反馈移位寄存器层
第二层:比特存储层
第三层:线性函数
2.1祖冲之密码的符号含义
2.2祖冲之密码的算法结构
七、现代密码学
1.散列函数
散列函数也叫做哈希函数
常见的加密方式:MD5、SHA-1、SHA256
MD5 可以将任意长度的原文生成一个128位(16字节)的哈希值
SHA-1可以将任意长度的原文生成一个160位(20字节)的哈希值
2.对称加密
对称加密 在加密和解密方式 使用的是同一把密钥
3.非对称加密
①非对称加密:又称为现代加密算法
②非对称加密算法需要两个秘钥,一个公钥、一个私钥
③公钥和私钥是一对,叫做秘钥对;如果使用公钥加密,必须使用私钥解密;如果使用私钥加密,必须使用公钥解密
(非对称加密,有两把秘钥,使用公钥加密,必须使用私钥解密;或者私钥加密必须使用公钥解密)
常见的非对称加密算法:RSA算法
4.如何设置密码才安全
1.密码不要太常见
2.各个应用软件里面的密码设置不一样,否则可能出现撞库
3.在设置密码的时候加上一些特殊标记,某应用+密码
5.Byte和bit的关系
1.如果使用UTF-8编码格式,一个中文对应3个字节
2.如果使用的是GBK编码格式,一个中文对应的是2个字节
3.如果对应的是英文的格式,则没有编码概念,全部对应的是一个字节
package com.liping.bytebit;
import java.io.UnsupportedEncodingException;
import java.sql.SQLOutput;
public class ByteBitDemo {
/**
* 编码方式是utf-8一个中文对应三个bit'
*
* 如果是jbk一个中文对应两个字节
* @param args
*/
public static void main(String[] args) throws UnsupportedEncodingException {
String a = "李";
//现在默认是utf-8
// byte [] bytes =a.getBytes();
//现在设置为GBK,同时需要抛出异常
byte [] bytes = a.getBytes("GBK");
for (byte aByte : bytes) {
System.out.println(aByte);
String s = Integer.toBinaryString(aByte);
System.out.println(s);
}
}
}
八、现代加密(对称加密)
8.1流加密:一个一个的挨个加密
1.Golomb伪随机公设
三个随机性公设:
(1)在序列的一个周期内,0与1的个数相差之多为1。(说明0与1的出现的概率基本相同)
(2)在序列的一个周期内,长为i的游程占游程总数的1/(2^i),且在等长的游程中0的游程个数和1的游程个数相等。(说明0与1在序列中的每一个位置上出现的概率相同)
(3)异相自相关函数是一个常函数。(通过对序列与平移后的序列作比较,不能给出其他任何信息)
8.2 块加密:分组加密
1.安全性设计原则:混淆原则
混淆原则就是将密文、明文、密钥三者之间的同级关系和代数关系变得竟可能复杂。使得敌手即使获得了密文和明文也无法求出密钥的任何信息;即使获得了米温和明文的统计规律也无法求出明文的新的信息。
2.满足要求
(1)分组长度n要足够大,防止明文穷举攻击法奏效
(2)密钥量要足够大,尽可能消除弱密钥防止密钥穷举攻击奏效
(3)由密钥确定置换的算法要足够复杂
(4)加密和解密运算简单,易于软件和硬件高速实现
(5)差错传播尽可能地小,一个密文的分组尽可能少的影响其他密文分组的解密。
3.SP网络(Shannon提出的)
代换的概述:如果明文和密文的分组长度都为nbit,则明文的每一个分组都有2^n次方种可能。明文每一个分组都产生唯一一个密文分组,这样的变换是可逆的,则称为明文到密文分组的可逆变换为代换。
(1)替代
(2)置换
4.Feistel密码
4.1设计思想
乘积密码指顺序地执行两个或多个基本密码系统,使得最后结果的密码强度高于每个基本密码系统产生的结果
Feistel网络实现的参数
(1)分组大小:分组越大,安全性越高,加密速度越慢
(2)密钥大小:密钥越长,安全性越高,加密速度越慢
(3)轮数:单轮结构不足以保证安全性,多轮结构可以保证安全性,典型的轮数取十六。
(5)子密钥产生算法:该算法的复杂性越大,密码分析的困难性就越大。
(6)轮函数:轮函数的复杂性越大,密码分析的困难性也越大
4.2加密结构
Feistal解密过程:
5.Feistal密码的典型:DES算法(Data Encryptography Standard)
5.1DES发展历史
(1)1937年美国国家标准局向社会公开征集加密算法,用来指定加密算法标准。
(2)1974年第二次征集
(3)1975年选中了IBM的算法,并公布征求意见
(4)1977年1月15日正式颁布
(5)1998年底以后停用该加密
(6)1999年颁布3DES,同时也兼容之前使用的加密方式
5.2DES算法的概述(16轮feistal)
1.主要用途
(1)加密保护政府机构和商业部门的非机密的敏感数据
(2)加密保护静态存储进而传输信道中的数据。
2.DES密码的特点
(1)分组长度为64bit
(2)密文分组长度64bit
(3)密钥长度为64bit,有8bit奇偶校验,有效位数为56bit
(4)对合运算
在数学中对合运算就是指f(f(x))=x。
在DES中指的是加密和解密可以共用同一运算。
(5)主要包括的算法:初始置换IP,16轮迭代的乘积变换、逆初始置换IP的逆以及16个子密钥产生器
5.3DES加密过程
1.64位密钥经过子密钥产生算法产生16个子密钥K1、K2、K3…K16,分别提供一次加密迭代使用
2.64位明文经过初试置换IP,将数据打乱重排并分成左右两半。左边L0,右边R0
3.开始加密迭代
第一次加密迭代:
L1=R0
R1=L0与上f(R0,K1)
第二次到第十五次
右边始终未做任何运算,直接将其赋值给下一次的左边Li=R(i-1)
下一次的右边通过Li=L(i-1)与上f(R i-1,K1)
5.4子密钥产生过程
子密钥产生过程中1置换选择的作用
1.去掉密钥中的8个奇偶校验
2.打乱重排,形成左28位,右28位 (64-8)/2
形成新的矩阵
4.第十六次加密迭代结束后,产生一个64位的数据组,以其左边32位为R16,右边32位作为L16.
5.R16L16合并,在做逆初始置换IP的逆,将数据重新排列,得到64位密文
6.加密函数:DES保密的核心
代替函数组S(S盒)
S盒的一般性质
(1)S盒是DES中位移的非线性变换,是DES安全的关键。
(2)在保密性方面,起混淆作用
(3)共有8个S盒,起并行作用
(4)每个S盒有6个输入,4个输出,是非线性压缩变换
(5)设输入为b1b2b3b4b5b6,则b1b6组成二进制形式得到行号,b2b3b4b4组成二进制数的列号,交点处为输出(二进制)
5.5多重DES算法
双重DES,由Diffie和Hellman
6.AES
1.AES产生的背景
(1)1984年12月里根总统下令由国家安全局(NSA)研制标准,用来取代DES
(2)1991年新密码开始征求意见,不公开算法,只提供芯片
(3)1994年颁布新密码标准EES
(4)1995年5月贝尔实验室的博士生M.Blaze在电脑上用45分钟攻击法律字段获得成功
(5)1995年7月放弃使用EES数据加密
(6)1997年美国政府向社会公开征AES
2.AES的设计要求
(1)安全性:可以抵抗目前所哟已知攻击
(2)实用性:适应各种应用环境,加密解密的速度快
(3)扩展性:分组长度 和密钥长度可以扩展,可以适应社会对保密性不断提高要求
3.AES的设计要求
(1)分组密码:密文和明文长度都是128位,密钥长度是可以发生变化的(128/192/256,现在选用128位)
(2)面向二进制的密码算法:可以加密任何形式的计算机数据
(3)你是对合运算:加密和解密的算法不同
(5)综合运用多种密码技术:置换、代替、代数
(6)整体结构:SP结构,基本轮函数迭代,迭代论述可变
4.AES的数学基础
(1)AES的基础域是有限域GF(2^8)
(2)一个字节的全体256中取值构成一个GF(2^8)
(3)一个GF(2)上的8次既约多项式可以生成一个GF(2^8)
(4)GF(2^8)的全体元素勾心还能加法交换群、线性空间
(5)GF(2^8)的非零元素构成乘法循环群
(6)GF(2^8)中的元素有多种表示
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-26mMzktT-1661609172345)(D:\MD笔记\pictures\GF多种表示.png)]
5.AES的GF(2^8)表示
加法:
乘法
xtime
6.AES的子表示与运算
AES数据处理的单位是字节和字
一个字=4个字节=32比特
一个字可以表示为系数取自GF(2^8)上的次数低于4次的多项式
字加法:两个多项式系数按位模2加
字乘法:设a和c是两个字,a(x)和c(x)是其字多项式,AES定义a和c的成绩b为 b(x)=a(x)c(x)modx^4+1
7.AES的基本变换
1.加密过程
(1)初试变换
(2)九轮循环
1)字节代换
2)行移位
3)列混合
4)轮密钥加
5)轮密钥的扩展
2.S盒变换
(1)S盒变换是AES的唯一的非线性变换,是AES安全的关键
(2)AES使用16个相同的S盒,DES使用8个不相同的S盒
(3)AES的S盒有8位输入8位输出,是一种非线性置换
DES的S盒有6位输入4位输出,是一种非线性压缩
3.行移位变换
(1)行移位变换对状态的进行循环移位
(2)第零行不移位,第一行移动C1字节,第二行移动C2字节,第三行移C3字节
(3)行变换属于置换,属于线性变换,本质在于把数据打乱重排,起扩散作用。
6.3对称加密的特点
1.加密速度快
2.密文不可逆,秘钥不能泄露
3.如果编码表上找不到相应的字符,则会出现乱码
4.一般需要结合Base64使用
九、分组密码
分组密码的工作模式
1.电码本模式(ECB)
直接利用分组密码对敏文的各分组进行加密
电码本方式是分组密码的基本工作模式
缺点:
可能出现短缺,这时候需要特殊处理
密钥K固定,如果Mi=Mj ,则Ci=Cj,从而暴露明文数据模式
2.密文反馈链接模式(CBC)
2.1密文反馈连接方式
CBC模式对于每个待加密的密码块在加密前会先与前一个密码块的密文异或然后再用加密器加密。第一个明文块与一个叫初始化向量的数据块异或
优点:能掩盖明文结构信息,保证相同密文可得不同明文,所以不容易主动攻击,安全性好于ECB,适合
传输长度长的报文,是SSL和lPSec的标准。
缺点:
(1)不利于并行计算;
(2)传递误差――前一个出错则后续全错;
(3)第一个明文块需要与一个初始化向量Ⅳ进行抑或,初始化向量Iv的选取比较复杂
加密:错误传播无界:Mi或者Ci-1错误,将影响Ci及其以后的密文全错
解密:错误传播有界
3.输出反馈模式(OFB)
就是如何实现使用分组密码来实现序列密码
讲一个分组密码转换为一个密钥序列生成器 。从而可以实现用分组密码按流密码的方式进行加解密
采用的是一个位移寄存器,R0是初始内容,称为种子。
如果分组密码是安全的,则产生的密钥序列也是安全的
加密解密都没有错误传播
OFB是先用块加密器生成密钥流(Keystream),然后再将密钥流与明文流异或得到密文流,解密是先用块加密器
生成密钥流,再将密钥流与密文流异或得到明文,由于异或操作的对称性所以加密和解密的流程是完全一样的。
有没有觉得和CFB的加密非常相似?
OFB与CFB一样都非常适合对流数据的加密,OFB由于加密和解密都依赖与前一段数据,所以加密和解密都不能并行
优点:隐藏了明文模式;结合了分组加密和流密码(分组密码转化为流模式)﹔可以及时加密传送小于分组的数据。
缺点:不利于并行计算;需要生成秘钥流;对明文的主动攻击是可能的。
4.密码反馈模式(CFB)
与OFB的不同时,把密文反馈到位移寄存器
加密:加密是若明文错了一位,则影响相应的密文错误,这一错误反馈到位移寄存器后将影响到后续的密钥序列发生错,导致后续的密文都是错的。
解密:解密时,若密文错了一位,不仅影响相应的明文错,而且密文的这一错误反馈发哦位移寄存器后将影响到后续的蜜月序列错,导致后续的明文都是错的
错误传播无界
5.X CBC
是CBC的扩展,推荐为AES的工作模式
XCBC主要解决 的是CBC要求明文数据的长度是密码分组长度的整数倍限制,可以处理任一长度的数据
X CBC 和CBC的区别
CBC要求最后一个数据块是标准块,不是短块
最后一个数据块的加密方式与CBC不同
因为有填充,需要传输填充长度信息
X CBC即允许最后一个数据块是标准块,也允许是短块
X CBC模式的主要优点
可以处理任意长度的数据。
适于计算产生检测数据完整性的消息认证码MAC。
X CBC模式的主要缺点:
有填充,不适合文件和数据库加密。
使用3个密钥,需要传输填充长度,控制复杂。
6、CTR模式
计算器模式不常见,在CTR模式中,有一个自增的算子,这个算子用密钥加密之后的输出和明文异或的结果得
到密文,相当于一次一密。这种加密方式简单快速,安全可靠,而且可以并行加密,但是在计算器不能维持很长
的情况下,密钥只能使用一次。
优点:不泄露明文;仅需实现加密函数;无需填充;可并行计算。缺点:需要瞬时值IV,难以保证lⅣv的唯一性
CTR加密过程
CTR解密过程
CTR的工作模式的优点:
CTR模式的优点是安全、高效、可并行、适合任意长度的数据;
0i的计算可预处理高速进行;
由于采用了摸2加实现加密,是对合运算,解密运算与加密运算相同。
适合随机存储数据的解密。
CTR模式的缺点:
没有错误传播,因此不易确保数据完整性。
短块加密
分组密码一次只能对一个固定长度的明文块进行加密
长度小于分组长度的数据块为短块
必须采用合理的技术解决短块加密问题
短块处理技术:
1.填充技术
使用无用的数据填充短块,使之成为标准块,填充是随机的,填充也可能引起存储器溢出,因此不适合文件和数据库加密
2.密文挪用技术
3.序列加密
3.1序列密码的分类
密钥序列产生算法与明文无关,产生的密钥序列与明文无关。
(1)同步序列密码
没有错误传播,当通信中的某些密文字符产生了错误,只影响相应字符的解密,不影响其他字符
(2)自同步序列密码
设密钥序列产生器具有n位存储,则在加密时一位密文错误将影响后面连续n个密文错误。在此之后恢复正确。
解密时一位密文错误也将影响后面连续n个明文错
加密会造成错误传播,但错误传播有界,在错误过去之后恢复正确
线性位移寄存器
3.2线性移位寄存器
m序列具有良好的随机性
1.游程:称序列中连续的i个1位长度等于i的1游程
游程见扩展知识
2.自相关函数
设{ki}是周期为p的序列,k0, k1,…, kp-1是其中一 个周期子段,则 k0+τ, k1+τ,…, kp-1+τ也是一个周期子。记这两个子段中相同的位数为A,不相同的位数 为D,则自相关函数定义为:
R(j)=( A-D)/ P
自相关函数反映一个周期内平均每位的相同程度
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2x2SBN9O-1661609172347)(D:\MD笔记\pictures\自相关函数)]
十、商用分组密码SM4的概况
1.我国商用密码
(1)坚持密码的公开设计原则
(2)公开设计原
(3)商用密码应当公开算法
2.分组密码
(1)数据分组,明文、密文长度=128位、密钥长度=128位
(2)数据处理单位:字节(8位),字(32位)
3.密码算法特点
对合运算:解密算法和加密算法相同
子密钥生成算法与加密算法结构类似
4.密码结构
不是SP结构、也不是Feisel结构、是一种新的结构:滑动窗口结构
SMS4密码算法结构
5.SMS4密码算法
1.基本运算
模2加:32位比特异或运算
循环移位:<<<i,32位字循环左移i位
2.基本密码部件
(1)非线性字节变换部件S盒:
8位输入,8位输出,本质上是8位的非线性置换
设输入为a,输出为b,S盒运算表示为:b=S_Box(a)
S盒数据表:
S盒的置换规则:以输入的前半字节为行号,后半字节为列号,行列交叉点除的数据即为输出。(例如:输入“ef”,e为行号,f为列号,S盒的输出值为表中地e行第f列的交叉点的值,Sbox(‘ef’)=‘84’)
(2)非线性字变换τ:32位字的非线性变换
4个S盒并行置换
(3)字线性部件L变换:32位输入,32位输出。设输入为B,输出为C,表示为:C=L(B)
(4)字合成变换T:又非线性变换τ和线性变换L附和而成
3.轮函数F
输入数据:(X0,X1,X2,X3),128位,四个32位字
输入轮密钥:rk,32位字
输出数据:32位字
轮函数F:
十一、公钥密码的基本思想
1.公开密钥密码的基本思想
1.将密钥K一分为二:Ke和Kd。Ke专门加密,Kd专门解密,Ke不等于Kd,更方便实现数字签名
2.Ke不能计算出Kd,于是可将Ke公开,使密钥Ke分配简单
2.公开密钥的基本条件
保密条件:E和D互逆D(E(M))=M
安全条件:Ke不等于Kd,Ke不能计算出Kd
实用性:E和D都高效
保真条件:D(E(M))=M
前三个条件用于保密,后三个用于保真,四个条件都满足用于保密和保真
发送方:A先查PKDB,查到B的公开的加密钥Keb。然后使用Keb加密M得到密文C=E(M,Keb),最后将C发给B。
接收方:B接受C,B用自己的Kdb解密,得到明文M=D(C,Kdb)=D (E(M,Keb),Kdb)
3.RSA公钥密码
加密算法
1.随机选择两个不同的大素数p和q,计算n=pq;φ(n)=(p-1)(q-1);
2.选择一个e(1<e<p(n)),且与p(n)互质,即gcd(e,φ(n))=1;
3.计算e与φ(n)的模反元素d,(de) mod φ(n)= 1;
4.公钥:KU=(e,n);
5.私钥KR=(d,n)
模反运算
gcd(e,φ(n))=1,那么一定可以找到一个整数d,使得ed-1被φ(n)整除,或者说ed整除φ(n)所得余数为1
ed-1=kφ(n)
(ed) modφ(n)=1
十二、Hash
1.特点:
(1)不可逆性
(2)抗碰撞性强(不同的数据Hash值是不同的,相同的数据Hash值是相同的)
(3)原始数据有细微的变化,哈希值的变化是非常大的
(4)通过哈希函数对原始数据进行运算,得到的hash值长度是固定的
(5)原始的hash值是一个定长的二进制字符串
2.Hash算法
2.1MD5
散列值:16b
2.2SHA2
2.2.1sha1
散列值:20byte
2.2.2sha224
散列值:28byte
2.2.3sha256
散列值:32byte
2.2.4sha384
散列值:48byte
2.2.5sha512
散列值:64byte
十三、数字签名
不是唯一的东西是不能做数字签名的,因此数字签名采用的是非对称加密
1.数字签名满足的三个条件
1.签名者事后不能抵赖自己的签名
2.任何其他人不能伪造签名
3.如果当事的双方关于签名的真伪发生争执,能够在公证的仲裁者的面前通过验证确认其真伪
2.数字签名的种类
通用签名、仲裁签名、盲签名、群签名、门限签名、代理签名
3.一个数字签名体质包括两方面的处理
1.施加签名
施加签名的算法为SIG,产生签名的密钥为K,被签名的数据为M,产生的签名信息为S
S=SIG(M,k)
2.验证签名
验证签名的算法为VER,用VER对签名进行验证,可鉴别S 的真假
十四、SM1、SM2、SM3、SM4、SM7、SM8、SM9 SMSMSM
1.SM1
SM1为分组密码,分组长度和密钥都是128位
2.SM2
SM2算法是ECC椭圆曲线密码机制
椭圆曲线的性质
(1)椭圆曲线在有限域上做点加运算组合构成一个有限交换群,并且这时的阶与基域规模相似
(2)在椭圆曲线上做多倍点运算构成一个单向函数
1.密文长度=明恩长度+96字节
2.到达安全性是IND-CCA2
3.密钥长度为256bit
3.SM3
SM3杂凑算法
1.输入输出256位二进制数(32字节)
2.消息分组位512bit
3.压缩函数输入一共768bit
4.调用2次压缩函数
5.消息最大长度不超过2^64
4.SM4
1.分组长度为128bit
2.密钥长度为128bit
3.迭代32轮
4.S盒输出8位
5.没有列混合
5.SM7
SM7是一种分组加密算法,分组长度、密钥长度为128
6.SM8
7.SM9
倍点运算
标识密码算法IBC(Identity-Based Cryptography)包含以下模块
数字签名
密钥交换
密钥封装
公钥加密
标识:可唯一确定一个实体身份的信息。标识应有实体无法否认的信息组成。例如身份证号、电话号码等。
SM9的标识就是公钥,不需要公钥证书,公钥证书合法性的环节变成了简单的确认标识
6.Base64
1.base64不是加密算法,是可读性算法,目的不是保护我们的数据而是为了可读数据
2.base64的组成:大写A-Z,小写a-z,数字:0-9,两个特殊符号:+ 和 /
3.base64是三个字节为一组,一个字节8位,一共就是24位;把三个字节转换成4组,每组6位,每一组缺少两位,因为一个字节是8位,在高位用0进行部位
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
import javax.sound.midi.Soundbank;
import java.net.SocketTimeoutException;
public class Base64Test {
public static void main(String[] args) {
System.out.println(Base64.encode("李".getBytes()));
/**
* 1 表示 一个字节,不够3个字节,进行编码的时候用 = 不起
* 12 表示两个字节,就补齐一个=
*/
System.out.println(Base64.encode("1".getBytes()));
System.out.println(Base64.encode("12".getBytes()));
System.out.println(Base64.encode("123".getBytes()));
System.out.println(Base64.encode("a".getBytes()));
}
}
7.Base58是比特币里面的一种编码方式
在base58中没有数字0和没有字母o,也没有大写字母I和小写字母i,也没有+和/
9.加密模式
1.ECB:把一段文本进行拆分加密,使用同一个key,分别进行加密,然后组合到一起。
2.CBC:在进行加密的时候,会取决于前面的向量,把前面的向量进行异或处理,后面的明文进行加密的时候会一直依赖于前面的的加密key。
10.消息摘要(SHA-1、SHA-256)
消息摘要又称为数字摘要。是由一个单项的Hash加密函数对消息进行作用而产生的。数字值是不可以篡改的,为了保证文件或值的安全。
扩充知识点:
1、游程
在一个周期内,0和1出现的次数接近相等。
2将a的一个周期按顺时针一次排列在圆周上,中间都是1或者中间都是0的称为一个1游程或者一个0游程。游程的长度是中间1或者0的个数。
2、强伪素数
采用Miller Rabin素数测试方法是一种概率学上的方法来检测一个数是否为强伪素数
强伪素数的定义
3、对称加密和非对称加密的区别
1.对称加密
对称:加密解密用的是同一把钥匙
优点:速度快,效率高
缺点:秘钥交换比较难,钥匙交换困难,管理的钥匙比较多,数据来源没办法确认
2.非对称加密
非对称:公钥加密私钥解密
优点:可以确认数据来源(来源的确认:用私钥加密,对应的公钥解密就可以实现)
缺点:效率比较低下
3.例如:访问一个网站的过程
1.客户端发送一个请求,我要和你安全通讯
2.web服务器的证书发给客户端(证书的组成:Sca(PuWebSrv+CA+有效期))(web服务器会把自己的公钥传给用户)
3.客户端通常是信任CA,即也就是:客户端获取到web服务器的公钥
4.拿到公钥后在客户端服务器生成一个sessionkey,把sessionkey用刚才服务器的公钥加密,然后传给web服务器
5.web服务器拿自己的私钥解开,就得到sessionkey