导图社区 密码学
密码学的基本概念,对称密码,公钥密码,Hash算法,数字认证算法,数字签名
编辑于2020-04-21 21:20:18密码学
基本概念
密码学:密码编码学(设计密码体制的科学,以下说的都是密码编码学)+密码分析学(破解密码的科学)
历史: 1949年之前,古典密码(一种技巧,不是科学),代表:凯撒密码 1949~1976,近代密码 代表:二战德军的Enigma密码机 1976之后,现代密码 代表:RSA【DH两个人设计了公钥思想,RSA三个人实现了】
定义:密码体制的5个要素 M:明文空间,表示所有可能的明文组成的有限集合 C:密文空间,表示所有可能的密文组成的有限集合 K:秘钥空间,表示所有可能的密钥组成的有限集合 E:加密算法集合 D:解密算法结合
基本属性也就是目的:(保证信息安全的基本要素) C 保密性 Confidentiality I 完整性 Integrity A 可用性 Avaliaility 不可否认性 Non-repudiation 可控性 Controllability
分类
1. 根据加密解密过程密钥不同分为:对称密码算法和非对称密码算法(公钥密码算法)
对称密码算法
分组密码
序列密码
公钥密码算法
基础
1. 1976年DH(Diffie和Hellman)论文 New Cryptography System提出了公钥密码的思想;1977年RSA(Ron Rivest、Adi Shamir、Leonard Adleman)实现了公钥算法,命名RSA公钥算法;
2. 公钥密码体制不是建立在置换和替换基础,而是基于尚未解决的数学问题基础上; RSA基于大整数难以分解的问题,SM2和SM9基于椭圆曲线问题;
3. 秘钥:公钥和私钥,公钥公开,私钥自己保留
RSA算法
理论:把一个大整数分解成两个素数的乘积,是一个NP难问题
算法核心
E(加密算法):(E,N)公钥
D(解密算法):(D,N)私钥
K(秘钥空间)(E,D,N)生成过程
1. 求N: 准备两个质数p,q。这两个数不能太小,太小则会容易破解,将p乘以q就是N
2. 求L(L表示N的欧拉函数):
3. 求E:E满足以下两个条件
4. 求D:
5. 说明,前4个步骤已经生成了(E,D,N),p和q已经不需要了,但是一定要注意,不能泄露
hash函数
I(完整性)
基础
Hash函数(也称杂凑函数、散列函数)是一个将任意长度的消息序列映射为较短的、固定长度的一个值的函数
密码学Hash函数是为了保证消息的完整性,通常称为消息的“指纹”
经典的Hash算法
MD5
MD5接收任意长度的消息作为输入,并生成128位消息摘要作为输出。MD5以512位的分组长度来处理消息,每一个分组又划分为16个32位的子分组。算法的输出由4个32位的分组组成,他们串联成一个128位的消息摘要。
SHA1
消息最长为2的64次方,消息按照512长度分组,输出为160位消息摘要。
SHA256
消息最长为2的64次方,输出为256位的消息摘要。
SM3(国密)
消息鉴别码
消息来源真实性和消息完整性
基础
消息鉴别码(MAC:Message Authentication Codes)是实现消息鉴别的理论基础,MAC具有单向Hash函数的特性,而且还包含一个密钥key。
3个特性:容易计算;压缩;强抗碰撞性
HMAC
工业标准
1996年提出的一种基于Hash函数和秘钥进行消息认证的方法。
ipad=00110110和opad=01011100作为额外参数
数字签名
基础
数字签名是对数字形式存储的消息进行某种处理,产生一种类似于传统手书签名功效的信息处理过程。
数字签名体制(M,S,K,SIG,VER)M消息空间,S签名空间,K秘钥空间,SIG签名算法,VER验证算法
经典签名算法
RSA:私钥进行签名,公钥验证签名
SM2(国密)
SM9(国密)
x509数字证书
证书内容
证书版本号
证书序列号
签名算法标识
证书签发机构
证书有效期
证书对应的主体
证书主体的公钥算法
证书签发机构唯一标识符
扩展项
常见证书格式
cer/crt是用于存放证书,它是2进制形式存放的,不含私钥。
pem跟crt/cer的区别是它以Ascii来表示,可以用于存放证书或私钥。
pfx/p12用于存放个人证书/私钥,他通常包含保护密码,2进制方式。
p10是证书请求。
p7r是CA对证书请求的回复,只用于导入
p7b以树状展示证书链(certificate chain),同时也支持单个证书,不含私钥。
PKCS标准
基础
PKCS 全称是 Public-Key Cryptography Standards ,是由 RSA 实验室与其它安全系统开发商为促进公钥密码的发展而制订的一系列标准。
标准
(1)PKCS#1:RSA加密标准。PKCS#1定义了RSA公钥函数的基本格式标准,特别是数字签名。它定义了数字签名如何计算,包括待签名数据和签名本身的格式;它也定义了PSA公/私钥的语法。
(2)PKCS#2:涉及了RSA的消息摘要加密,这已被并入PKCS#1中。
(3)PKCS#3:Diffie-Hellman密钥协议标准。PKCS#3描述了一种实现Diffie- Hellman密钥协议的方法。
(4)PKCS#4:最初是规定RSA密钥语法的,现已经被包含进PKCS#1中。
(5)PKCS#5:基于口令的加密标准。PKCS#5描述了使用由口令生成的密钥来加密8位位组串并产生一个加密的8位位组串的方法。PKCS#5可以用于加密私钥,以便于密钥的安全传输(这在PKCS#8中描述)。
(6)PKCS#6:扩展证书语法标准。PKCS#6定义了提供附加实体信息的X.509证书属性扩展的语法(当PKCS#6第一次发布时,X.509还不支持扩展。这些扩展因此被包括在X.509中)。
(7)PKCS#7:密码消息语法标准。PKCS#7为使用密码算法的数据规定了通用语法,比如数字签名和数字信封。PKCS#7提供了许多格式选项,包括未加密或签名的格式化消息、已封装(加密)消息、已签名消息和既经过签名又经过加密的消息。
(8)PKCS#8:私钥信息语法标准。PKCS#8定义了私钥信息语法和加密私钥语法,其中私钥加密使用了PKCS#5标准。
(9)PKCS#9:可选属性类型。PKCS#9定义了PKCS#6扩展证书、PKCS#7数字签名消息、PKCS#8私钥信息和PKCS#10证书签名请求中要用到的可选属性类型。已定义的证书属性包括E-mail地址、无格式姓名、内容类型、消息摘要、签名时间、签名副本(counter signature)、质询口令字和扩展证书属性。
(10)PKCS#10:证书请求语法标准。PKCS#10定义了证书请求的语法。证书请求包含了一个唯一识别名、公钥和可选的一组属性,它们一起被请求证书的实体签名(证书管理协议中的PKIX证书请求消息就是一个PKCS#10)。
(11)PKCS#11:密码令牌接口标准。PKCS#11或“Cryptoki”为拥有密码信息(如加密密钥和证书)和执行密码学函数的单用户设备定义了一个应用程序接口(API)。智能卡就是实现Cryptoki的典型设备。注意:Cryptoki定义了密码函数接口,但并未指明设备具体如何实现这些函数。而且Cryptoki只说明了密码接口,并未定义对设备来说可能有用的其他接口,如访问设备的文件系统接口。
(12)PKCS#12:个人信息交换语法标准。PKCS#12定义了个人身份信息(包括私钥、证书、各种秘密和扩展字段)的格式。PKCS#12有助于传输证书及对应的私钥,于是用户可以在不同设备间移动他们的个人身份信息。
(13)PDCS#13:椭圆曲线密码标准。PKCS#13标准当前正在完善之中。它包括椭圆曲线参数的生成和验证、密钥生成和验证、数字签名和公钥加密,还有密钥协定,以及参数、密钥和方案标识的ASN.1语法。
(14)PKCS#14:伪随机数产生标准。PKCS#14标准当前正在完善之中。为什么随机数生成也需要建立自己的标准呢?PKI中用到的许多基本的密码学函数,如密钥生成和Diffie-Hellman共享密钥协商,都需要使用随机数。然而,如果“随机数”不是随机的,而是取自一个可预测的取值集合,那么密码学函数就不再是绝对安全了,因为它的取值被限于一个缩小了的值域中。因此,安全伪随机数的生成对于PKI的安全极为关键。
(15)PKCS#15:密码令牌信息语法标准。PKCS#15通过定义令牌上存储的密码对象的通用格式来增进密码令牌的互操作性。在实现PKCS#15的设备上存储的数据对于使用该设备的所有应用程序来说都是一样的,尽管实际上在内部实现时可能所用的格式不同。PKCS#15的实现扮演了翻译家的角色,它在卡的内部格式与应用程序支持的数据格式间进行转换