密码学基础

密码概念

密码的本质就是将较长的秘密(消息)变成较短的秘密(密钥)。
密码的两个作用:一个是加密保护功能,保证信息的机密性;第二个是密码的安全认证功能,保证数据的完整性、信息的真实性和行为的不可否认性。
(1)机密性:保证信息不被泄露给非授权的第三方。
(2)完整性:保证信息内容在传输过程中没有遗漏、修改、伪造。
(3)真实性:保证信息来源是真实的不是伪造的。
(4)不可否认性:保证发送信息的无法否认这条信息是他发送的。

比如在边关的狄仁杰给朝廷写了一份报文“打仗,缺钱,缺人”,并在报文下面附了三行小字。
为了保证报文只能被朝廷重臣读懂,他特意使用了一首诗,这首诗每行读第几个字只有他和朝廷重臣知道。
这个“每行第几个字”就是密码。
驿卒甲背上报文在栈道上日行八百里。
骑着骑着,驿卒甲突然被从天而降的掌法打晕,
报文被一帮黑衣人获取。
但是这帮人却无法读懂这首诗真正传递的信息。
【此时密码就是加密保护功能,保证了信息的机密性】
不过这帮人却想着恶心唐朝,既然他们读不懂,洛阳的皇帝也别想读懂,他们故意把这首诗的各个文字打乱了。
驿卒甲醒来了,感觉报文没被动过,就继续骑马,熟不知内容已经被打乱了。
到了洛阳,大臣们拿到报文后并没有急于解密,而是先把整个内容和下面的三行小字对比了一下。
首先验证第一行小字:大臣们在使用了摘要计算后,发现报文内容被伪造篡改了。
【摘要计算就是保证了数据的完整性】
于是乎,驿卒甲卒。
狄仁杰二次发报。
驿卒乙同样被打晕,但是黑衣人这次聪明了,修改内容后也按照摘要算法重新更换了报文下面的第一行小字。
大臣们拿到报文后,第一行小字经过摘要算法通过了,证明这份内容确实没被人修改过。
于是开始验证第二行小字,他们拿出和狄仁杰约定的一组数字,这组数字只有狄仁杰和朝中的大臣们知道。
这组数字和解密后的内容组合在一起,一起求MAC值,发现这个MAC值和
【消息认证码】

密码

密码学(cryptology)作为数学的一个分支,包括密码编码学和密码分析学两部分。
密码学的核心就是加密算法:消息(message)称为明文(plaintext)。用某种方法伪装消息以隐藏它的内容的过程称为加密(encryption),被加密的消息称为密文(ciphertext),而把密文转变为明文的过程称为解密(decryption)。
(1)需要加密的初始消息称为明文,简写M,即Message,但明文的英语是plaintext。
(2)用于加密或解密的钥匙称为密钥,简写K,即Key。
(3)加密算法简写为E,即Encryption。
(4)解密算法简写为D,即Decryption。
(5)加密后形成的消息称为密文,简写为C,即Ciphertext。
在这里插入图片描述
加密:E(M)=C
解密:D©=M
解密:D(E(M))=C
常见的密码算法有对称密码算法、公钥密码算法和密码杂凑算法。

其它

破译
暴力破解
密钥空间
编码

将信息从一种形式或格式转换为另一种形式的过程叫做编码,我们这里编码指的是将计算机内可读的数据转换为比特序列的操作。
注意编码并不是加密,常见的base64就只是编码。
如使用ASCII编码,可以将英文“A”编码为“1100001”

国密算法

国密算法是国家商用密码算法的简称。自2012年以来,国家密码管理局以《中华人民共和国密码行业标准》的方式,陆续公布了SM2/SM3/SM4等密码算法标准及其应用规范。
其中“SM”代表“商密”,即用于商用的、不涉及国家秘密的密码技术。
SM2为基于椭圆曲线密码的公钥密码算法标准,包含数字签名、密钥交换和公钥加密,用于替换RSA/Diffie-Hellman/ECDSA/ECDH等国际算法;
SM3为密码哈希算法,用于替代MD5/SHA-1/SHA-256等国际算法;
SM4为分组密码,用于替代DES/AES等国际算法;
SM9为基于身份的密码算法,可以替代基于数字证书的PKI/CA体系。

古典密码

凯撒密码

简单替换密码

对称密码

对称密码算法是加密、解密过程使用相同或容易相互推导得出的密钥,即加密和解密两方的密钥是对称的。
比如常见的压缩文件加密使用相同的密码去压缩、解压就是对称加密;生活中使用同一把钥匙去锁门、开门。
对称加密算法可以分为流加密算法和分组加密算法,分组加密算法又被称为块加密算法。

流加密算法

使用一个与原文同样长度的密钥,与原文数据按位进行异或操作,得到的结果就是密文。解密过程和加密类似,就是用同样的密钥,对密文在进行按位异或,得到明文。

一次性加密

一次性密码本,则是使用了与明文等长的密文,使得所有字母的使用概率相等,密文完全不揭示任何明文信息,使得任何唯密文攻击无效。而在计算机领域则是bit位异或操作,隐藏ASCII码或者文件信息。

流密码生成器

流密码类似于”一次一密”,不同的是”一次一密”使用的是真正的随机数流,而流密码使用的是伪随机数流。
流加密方法简单,重点就在密钥生成上。
密钥的随机性越强,明文中的统计特征被覆盖得更好,加密的强度也就越高。
流加密安全性来源于密钥的随机性,也就是伪随机序列的随机性。但并不存在真随机数。像RC4算法、WEP协议、DVD使用的数据加密协议,由于设计或其他限制,也都存在密钥随机序列在一定条件下重复出现的概率。这些都会影响流加密的安全效果。

分组密码算法

模式

ECB模式:电子密码本模式
CBC模式:密码分组链接模式
CFB模式:密文反馈模式
OFB模式:输出反馈模式
CTR模式:计数器模式

ECB模式

ECB模式的全称是Electronic CodeBook 模式。在ECB模式中,将明文分组加密之后的结果将直接成为密文分组。
使用 ECB 模式加密时,相同的明文分组会被转换为相同的密文分组。可以将其理解为是一个巨大的“明文分组->密文分组”的对应表,因此 ECB 模式也称为电子密码本模式。当最后一个明文分组的内容小于分组长度时,需要用一些特定的数据进行填充 (padding )。
在这里插入图片描述
优点:
1.简单;
2.有利于并行计算;
3.误差不会被传送;
缺点:
1.不能隐藏明文的模式;
2.可能对明文进行主动攻击;

CBC模式

CBC模式的全称是Cipher Block Chaining模式,因为它的密文分组像链条一样相互连接在一起。
在CBC模式中,首先将明文分组与前一个密文分组进行XOR运算(异或),然后再进行加密。
当加密第一个明文分组时,由于不存在”前一个密文分组“,所以需要事先准备一个长度为一个分组的二进制序列来代替,这个序列称为初始化向量(initialization vector),通常缩写为 IV。一般来说,每次加密时都会随机产生一个不同的二进制序列来作为初始化向量。
在这里插入图片描述
优点:
1.不容易主动攻击,安全性好于ECB,适合传输长度长的报文,是SSL、IPSec的标准。
缺点:
1.不利于并行计算;
2.误差传递;
3.需要初始化向量IV

CFB
OFB
CTR
填充

ZeroPadding,数据长度不对齐时使用0填充,否则不填充。使用0填充有个缺点,当元数据尾部也存在0时,在unpadding时可能会存在问题。
PKCS7Padding,假设数据长度需要填充n(n>0)个字节才对齐,那么填充n个字节,每个字节都是n;如果数据本身就已经对齐了,则填充一块长度为块大小的数据,每个字节都是块大小。
PKCS5Padding,PKCS7Padding的子集,块大小固定为8字节,填充方式和PKCS7Padding一样。
由于使用PKCS7Padding/PKCS5Padding填充时,最后一个字节肯定为填充数据的长度,所以在解密后可以准确删除填充的数据,而使用ZeroPadding填充时,没办法区分真实数据与填充数据,所以只适合以\0结尾的字符串加解密。

DES

不再使用。暴力破解可以在短时间内完成对DES的破译。

3DES

正在被AES逐渐取代。

AES

非对称密码

DH密钥交换算法

参考资料通俗学习秘钥交换算法—DH算法
DH 是 Diffie-Hellman的首字母缩写,是Whitefield与Martin Hellman在1976年提出了一个的密钥交换协议。该算法的唯一目的是使得两个用户能够安全地交换密钥,得到一个共享的安全密钥,算法本身不能用于加解密。

RSA

参考资料https://blog.csdn.net/u012206617/article/details/118695996
RSA是第一个比较完善的公开密钥算法,它既能用于加密,也能用于数字签名。
RSA以它的三个发明者Ron Rivest, Adi Shamir, Leonard Adleman的名字首字母命名,这个算法经受住了多年深入的密码分析,虽然密码分析者既不能证明也不能否定RSA的安全性,但这恰恰说明该算法有一定的可信性,目前它已经成为最流行的公开密钥算法。
RSA的安全基于大数分解的难度。其公钥和私钥是一对大素数(100到200位十进制数或更大)的函数。从一个公钥和密文恢复出明文的难度,等价于分解两个大素数之积(这是公认的数学难题)。

公钥密码并非都可以同时用作加解密和数字签名,一般只能实现其中的一种功能。

ECC

混合密码系统

对称密钥存在密码分配问题,非对称密钥存在计算时间长的问题。
混合密码系统使用对称密码来加密明文,用非对称密码来加密对称密码中所使用的密钥。
使用混合密码系统就能够在通信中将对称密码和非对称密码的优势结合起来。

认证

单向散列函数

用于验证消息完整性,即消息在传递过程中没有被篡改过。
单向散列函数也被称为消息摘要算法、摘要函数、杂凑函数、杂凑算法、哈希函数,是把任意长的输入消息串变化成固定长的输出串的一种函数。
单向散列函数输出的散列值也称为消息摘要(message digest)或者指纹(fingerprint)。
主要算法:
(1)MD4:已破解
(2)MD5:已破解
(3)SM3:国密摘要算法
(4)SHA1:得到160位二进制摘要(40位16进制字符串)(已破解)
(5)SHA256:得到256位二进制摘要(64位16进制字符串),在spring security中有使用
(6)SHA512:

消息认证码

用于认证消息来源真实性,即消息的发送者不是伪装的。
英文Message Authentication Code,简称MAC。
单向散列函数(消息摘要算法)只能辨别消息是否被篡改,但不能实现认证,即无法分辨消息的来源是否真实。
注意,消息摘要只是证明了消息内容的完整性。但是消息发送人无法证明。
在消息摘要的基础上加了密钥,消息验证码一般和对称加密配合使用。
主要流程:发送方和接收方事先共享同一个密钥。
发送方将发送消息和密钥进行MAC运算,得到MAC值,并把MAC值与消息一同发送给接收方。
接收方接收到消息后,将消息部分与事先共享的密钥进行MAC运算,得到MAC值,将MAC值与发送方发送的MAC值进行比较,如果一致,证明消息的真实性和完整性。
因此上面的单项散列函数(杂凑函数)我们可以称为不带密钥的杂凑函数,而消息认证码是带密钥的杂凑函数。
消息认证码不仅能够检测数据的完整性,还能提供身份认证功能。

数字签名

用于消息不可否认,即消息的发送者无法否认这个消息不是他发送的。
由于消息认证码是通信双方共同使用一个密钥,此时消息就有两个人都可能制造出来,无法证明唯一性。
数字签名可以同时实现消息的完整性、认证、不可否认校验。
数字签名基于非对称加密算法。
私钥持有者使用私钥对消息加密的过程称为签名。
公钥持有者使用公钥对签名数据进行解密称为验签。
由于私钥是唯一性,只有私钥持有人才能进行签名,所以具有唯一性,类似于现实生活中的“签字画押”。
注意:为了和加解密区分开,使用私钥对信息进行加密得到签名的过程,最好不要使用“私钥加密”这种说法,而是采用“私钥签名”。
加密和签名目的不同,私钥“加密”不是为了加密信息,而是为了签名。

签名方式

直接使用私钥对数据进行签名速度很慢,我们通常是先对数据进行摘要算法得到散列值,之后对散列值进行私钥加密。

证书

公钥证书

公钥证书,英文Public Key Certificate,简写PKC,里面记录着申请者的姓名、组织、邮箱地址等个人信息,以及属于此人的公钥,并由认证机构(Certification Authority,简写CA)施加数字签名。
根据该公钥证书,我们就可以知道认证机构认定该公钥的确属于此人。
公钥证书也简称为证书(certificate)。

公钥基础设施

组成要素

用户
也称为实体,英文entity。使用PKI的用户,包括人、计算机、企业等。它就是进行证书和密钥相关处理的行为主体。
用户包括两种,一种是申请注册自己的公钥证书的人,一种是希望使用已注册公钥证书的人。
认证机构
英文Certification Authority,英文简写CA。
CA是对证书进行管理的人,核心是颁发证书。
主要功能如下:
(1)生成密钥对,也可以由用户生成。
(2)在注册公钥时对本人身份进行认证
(3)生成并颁发证书
(4)作废证书
与认证机构类似的还有一个“注册机构”,注册机构英文Registration Authority,简称RA。
认证机构中共要注册和身份认证可以由注册机构分担。这样一来认证机构就可以专门处理颁发证书。
仓库
保存证书的数据库,也叫作证书目录。英文repository。

认证机构

证书格式

证书格式部分参考资料:密码学系列之:PEM和PKCS7,PKCS8,PKCS12

PEM

PEM是对DER编码过后的二进制数据使用base64编码,将其转换成为文本文件。
PEM格式的文件通常以.pem结束,但是也可以使用 “.cer” 或者 “.crt” 表示一个证书,使用".key"表示是一个密钥。
在PEM中有固定的文件头和文件结尾符。文件头是以’-----BEGIN’+label+‘-----‘开始,文件结尾是以’-----END’+label+'-----'结束。
其中label表示的是编码的消息类型,通常可以取这些值:CERTIFICATE, CERTIFICATE REQUEST, PRIVATE KEY 和 X509 CRL。
下面是一个PEM的例子,表示其内容是一个证书:

-----BEGIN CERTIFICATE KEY-----

-----END CERTIFICATE KEY-----
PKCS

The Public-Key Cryptography Standards (PKCS)是由美国RSA数据安全公司及其合作伙伴制定的一组公钥密码学标准,其中包括证书申请、证书更新、证书作废表发布、扩展证书内容以及数字签名、数字信封的格式等方面的一系列相关协议。

PKCS已经公布了以下标准:

PKCS#1:定义RSA公开密钥算法加密和签名机制,主要用于组织PKCS#7中所描述的数字签名和数字信封[22]。
PKCS#3:定义Diffie-Hellman密钥交换协议[23]。
PKCS#5:描述一种利用从口令派生出来的安全密钥加密字符串的方法。使用MD2或MD5 从口令中派生密钥,并采用DES-CBC模式加密。主要用于加密从一个计算机传送到另一个计算机的私人密钥,不能用于加密消息[24]。
PKCS#6:描述了公钥证书的标准语法,主要描述X.509证书的扩展格式[25]。
PKCS#7:定义一种通用的消息语法,包括数字签名和加密等用于增强的加密机制,PKCS#7与PEM兼容,所以不需其他密码操作,就可以将加密的消息转换成PEM消息[26]。
PKCS#8:描述私有密钥信息格式,该信息包括公开密钥算法的私有密钥以及可选的属性集等[27]。
PKCS#9:定义一些用于PKCS#6证书扩展、PKCS#7数字签名和PKCS#8私钥加密信息的属性类型[28]。
PKCS#10:描述证书请求语法[29]。
PKCS#11:称为Cyptoki,定义了一套独立于技术的程序设计接口,用于智能卡和PCMCIA卡之类的加密设备[30]。
PKCS#12:描述个人信息交换语法标准。描述了将用户公钥、私钥、证书和其他相关信息打包的语法[31]。
PKCS#13:椭圆曲线密码体制标准[32]。
PKCS#14:伪随机数生成标准。
PKCS#15:密码令牌信息格式标准[33]。

PKCS7
PKCS8

PKCS8也是Public-Key Cryptography Standards系列的一员,它主要用来存储私钥。
私钥首先会使用PKCS #5的标准进行加密,然后将其进行base64编码,转换成为PEM格式进行存储。
所以说PKCS8的格式就是PEM,但是里面存储的内容是经过加密过后的私钥。

PKCS12

PKCS12也是Public-Key Cryptography Standards系列的一员,PKCS12可以看做是PKCS7的扩展,在PKCS12中可以存储证书,私钥或者CRL。和PKCS7相比,PKCS12可以额外存储私钥。
PKCS12的文件是以.p12 或者 .pfx结尾的。在JDK9中,PKCS12是默认的密钥存储格式。

证书内容

(1)申请人的公钥
(2)认证机构给证书签名的算法
(3)认证机构给证书的数字签名
下图中Bob是申请人,Trent是认证机构,这张证书是Bob向Trent申请的公钥证书。
在这里插入图片描述

密钥

密钥管理系统

密钥管理系统简称KMS(Key Management System)

主密钥

密钥加密密钥

一种用来加密密钥的密钥,英文Key Encrypting Key,简写为KEK。

数据加密密钥

数据加密密钥是用于加密数据的密钥。DEK

工作密钥

密钥分发中心

密钥分发中心是作为发起方和接收方共同信任的第三方,它维护者一个存储着该域中所有账户的密钥数据库。
英语Key Distribution Center,简写为KDC。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值