密码学概述
该图片由Michael Treu在Pixabay上发布
概述
密码发展进程:
- 古典密码算法 利用代替技术,置换技术
- 对称加密算法 包括流密码和分组密码 如: RC4、DES和AES
- 非对称加密算法 包括RSA、背包密码、椭圆曲线等
目前在数据通信中使用最普遍的算法有DES算法、AES算法、RSA算法和ECC算法等。
密码学是研究密码系统或通信安全的一门科学,它包含两个分支
- 密码编码学
- 机密性
- 认证
- 密码分析学
- 破译加密消息
- 伪造消息
密码学的目标:
- 机密性
- 数据完整性
- 认证和不可否认性
按所用秘钥数分类:
- 单秘钥密码(对称、秘密钥、私钥、传统密码)
- 优点:运行速度快,具有可靠的保密强度
- 不足:不便秘钥交换和管理
- 双钥密码(非对称、公钥密码)
- 优点:便于秘钥交换和管理,还可用于消息认证(数字签名)
- 不足:运行速度缓慢,其安全性所依赖的数学难题的复杂性一般都未能证明
- 无密码密码(如单向,散列,随机化)
柯克霍夫准则: 系统的保密性不依赖于对加密体制或算法的保密,而依赖于对秘钥的保密。
对称加密
传统密码、常规密码、私钥密码、单钥密码; 发送方和接收方共享同一个共同的秘钥。
基本成分:
- 明文(
plaintext
):信息的原始形式,一般是信息的基本单元(字符,数字,符号等)的有限排列 - 密文(
ciphertext
):明文经过加密以后的结果形式 - 加密变换(
encryption
):从明文到密文的变换过程 - 解密变换(
decryption
):从密文还原成明文的过程 - 秘钥(
key
):用于加解密变换的关键信息,视其用于加解密而分别称为加密秘钥和解密秘钥
对称密码保证安全的两个必备条件:
- 机密算法必须是足够强的
- 只有发送者和接收者知道秘钥
DES
数据加密标准(DES, Data Encryption Standard)
曾被美国国家标准局(NBS
)确定为联邦信息处理标准(FIPS PUB 46
),得到最广泛的应用,特别是在金融领域,曾是对称密码体制的世界标准。
AES
由于DES
作为数据加密标准自1977年颁布以来,已超期服役了很长时间,1997年美国国家标准技术研究所NIST向密码学界征寻一个用于新的数据加密标准,名为高级加密标准AES候选算法的提议。
NIST规定候选算法必须满足下面的要求:
- 密码必须是没有密级的,决不能像商业秘密那样来保护它
- 算法的全部描述必须公开披露
- 密码必须可以在世界范围内免费试用
- 密码系统支持至少218bit长的分组
- 密码支持的密钥长度至少为128bit、192bit和256bit
- 安全性不低于3DES
对称密码体制缺陷
- 加密密钥和解密密钥相同 由加密密钥容易推导得到与之对应的解密密钥
- 密钥传输 消息的发送方和接收方必须在密文传输之前通过安全信道进行密码传输
- 密钥分配 加密者指定一个密钥后,必须得想方设法把密钥发出去给解密者,同时还得小心翼翼确保密钥不被泄漏
- 密钥管理问题 在有多个用户的网络中,任何两个用户之间都需要有共享的加密密钥,当网络中的用户n很大时,需要管理的密钥数目非常大。
- 没有签名功能 当主体A收到主体B的数据时,无法向第三方证明此数据确实来源于B
非对称加密
公钥密码的基本思想是将传统密码的密钥一分为二, 分为加密密钥和解密密钥;
将两个密钥分别称为公钥、私钥。
特点:
- 公钥是公开的,任何人都可获得
- 私钥保密,需要妥善保管
- 与对称密码密码体制相比,公钥体制的密钥在处理和发送上更为方便而且安全。
- 加密和解密能力分开
- 多个用户加密的消息只能由一个用户解读(用于公共网络中的实现保密通信)
- 只能由一个用户加密消息而使多个用户可以解读(可用于认证系统中对消息进行数字签名)
- 无需事先分配密钥
功能:
- 通信加密:公钥加密,私钥解密
- 认证: 私钥加密,公钥解密
加密过程:
加密体制:
认证过程:
认证体制:
公钥保密和认证体制:
RSA
RSA
算法是第一个比较完善、应用最广泛的公钥密码算法。
该算法的数学基础是初等数论中的欧拉定力,并建立在大整数因子分解的困难性之上,目前还不存在一般性的有效解决算法。
优点:
是第一个能同时用于加密和数字签名的算法,也易于理解和操作,也是被研究得最广泛的公钥算法,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。该算法的加密密钥和加密算法分开,使得密钥分配更为方便。
缺点:
产生密钥很麻烦,受到素数产生的技术的限制,因而难以做到一次一密;
分组长度太大,为保证安全性,n
至少也要600位以上,使运算代价很高,尤其是速度较慢。
Hash
数据安全:
- 机密性
- 完整性
- 认证性
密码技术主要保证数据的机密性;
Hash
函数能保证数据的完整性和认证性;
Hash
函数也叫散列函数、哈希函数、杂凑函数。
散列函数是以公开函数,通常记为H
,用于将任意长的消息M
映射为较短的、固定长度的一个值作为认证符,记为H(M)
,经常称函数值H(M)
为散列值、哈希值、杂凑值、杂凑码、消息摘要等等。
从密码角度看,散列函数也可以看作是一种单向密码体制,即它从一个明文到密文是不可逆映射,只有加密过程,不能解密。
散列值是消息中所有比特的函数值,因此提供了一种错误检测能力,即改变消息中任何一个比特或几个比特都会使散列值发生改变。
在密码学和数据安全技术中,散列函数是实现有效、安全可靠数字签名和认证的重要工具,是安全认证协议中的重要模块。
- 原像:对于
Hash
函数h=H(x)
,称x
为H
原像。 - 碰撞:因为
H
是多对一映射,所以对于任意给定的Hash
值h
,对应有多个原像。如果满足x≠y
且H(x)=H(y)
,则称出现碰撞。
应用:
-
消息认证
消息认证是用来验证消息完整性的一种机制或服务。 确保收到的数据确实和发送时的一样(即没有修改、插入、删除或重放)且发送方声称的身份真实有效。
一般通过使用消息认证码(MAC
)实现,即带密钥的Hash
函数。当哈希函数用于提供消息认证功能时,Hash函数值通常称为消息摘要。 -
数字签名
在进行数字签名过程中使用用户的私钥加密消息的Hash
值,其它任何知道该用户公钥的人都能够通过数字签名验证消息的完整性。攻击者要想篡改消息,则需要知道用户私钥。使用
Hash
的优点:-
提高签名的速度 先计算消息摘要
z=H(M)
,再计算签名y=Sig(z)
-
可以不泄露签名所对应的消息 签名
y
应当公开,消息摘要z
可以公开以便验证签名,消息m
则可以保密 -
可以将对消息的签名和加密分开处理 可以在不同层次提供消息的完整性和机密性
-
MD5
MD5(MD:message digest
,消息摘要)
MD5特性
- 直接构造法:不依赖任何密码系统和假设条件
- 算法简洁
- 计算速度快
- 特别适合32位计算机软件实现
- 倾向于使用低端结构
MD5算法的输入可以是任意长度的消息x
,对输入消息按512位
的分组为单位进行处理,输出128位
的散列值MD(x)
。
SHA(安全杂凑算法)
安全Hash算法SHA
(secure hash algorithm
)由美国标准与技术研究所(NIST
)设计并于1993年作为联邦信息处理标准(FIPS 180
)发布
修改版于1995年发布(FIPS 180-1
),通常称之为SHA-1
。该标准称为安全Hash函数。
SHA-1
算法的输入是长度小于264的任意消息x
,输出160位
的散列值。
SHA系列
SHA | 分组大小(bit) | 输出摘要(bit) |
---|---|---|
SHA1 | 512 | 160 |
SHA256 | 512 | 256 |
SHA384 | 1024 | 284 |
SHA512 | 1024 | 512 |
算法比较
算法特性 | MD4 | MD5 | SHA-1 |
---|---|---|---|
输入长度 | 128bits | 128bits | 160bits |
输出长度 | 任意长度 | 任意长度 | <= 264 |
分组大小 | 512bits | 512bits | 512bits |
迭代次数 | 48(3次) | 64(4次) | 80(4次) |
消息认证
网络通信环境中,存在的攻击可能有:
- 泄密
- 传输分析
- 伪装
- 内容修改
- 顺序修改
- 计时修改
- 发送方否认
- 接收方否认
1
、2
可以通过加解密解决
3
、4
、5
、6
可以通过消息认证解决
7
、8
可以通过数字签名解决
消息认证是用来验证消息完整性的一种机制或服务。验证所受到的消息确实是真实的,且是未被修改的消息,他也可验证消息的顺序和及时性。
数字签名是一种认证技术,其中的一些方法可用来抵抗发送方的否正攻击。(接收方可验证但不能伪造)
密码学Hash函数可用于实现消息认证和数字签名
消息认证或数字签名机制在功能上分为两层:
- 下层:函数 -> 产生一个用来认证消息的值(认证符)
- 上层:协议 -> 将该函数作为原语使接收方可以验证消息的真实性
消息认证函数类型
- 消息加密: 消息的密文作为认证符
- Hash函数:将任意长消息映射为定长的
hash
值作为认证符 - 消息认证码(MAC:
message authentication code
):消息和密钥的公开函数,产生定长的值作为认证符
消息认证码(MAC)是一种认证技术,它利用密钥来生成一个固定长度的短数据块,并将该数据块附加在消息之后。
MAC的特性:
- MAC码是一个密码校验和(
cryptographic checksum
) MAC=Ck(M) - 消息
M
的长度是可变的 - 密钥k是要保密的
- 产生固定长度的认证码
MAC函数和加密类似,但MAC算法不要求可逆性,而加密算法必须是可逆的。
数字签名
类似于手书签名
数字签名满足的要求
- 收方能够确认或证实发方的签名,但不能伪造
- 发方发出签名的消息给收方后,就不能再否认他所签发的消息
- 必须能够认证签名时刻的内容
- 第三者可以确认收发双方之间的消息传送,但不能伪造这一过程
数字签名和公钥加密的区别
公钥加密:
A
采用B
的公开密钥对信息加密,A
将密文发给B
;B
用自己的私钥对收到的密文解密,恢复出明文。
数字签名:
A
采用自己的私钥对消息m
签名,A
将m
和签名发给B
;B
收到A
的签名后,采用A
的公钥来验证签名的有效性和真实性。
数字签名和消息认证的区别
消息认证:
当收发者之间没有利害冲突时,这对于第三者的破坏已经足够了
- 收方能够验证消息发送者身份是否被篡改
- 收方能够验证所发消息内容是否被篡改
数字签名:
当收发双方存在利害冲突时,单纯用消息认证技术无法解决他们之间的纠纷。必须采用数字签名技术。
- 数字签名能够确定消息来源的真实性
- 数字签名能够保证实体身份的真实性
- 数字签名是不可否认的