认证
网络攻击方法
-
泄密:将消息透露给没有合法密钥的接收方。这类攻击破坏了信息的保密性。
-
传输分析:
- 分析通信双方的通信模式,确定连接的频率和持续时间。
- 在面向连接或无连接的环境中,确定双方的消息数量和长度。这可能用来推断敏感信息或者作为其他攻击的前期准备。
-
伪装:
- 欺诈源向网络中插入一条消息,攻击者产生一条消息并声称这条消息来自某个合法实体。
- 非消息接收方发送关于收到或者未收到消息的欺诈应答,这可能导致权限的滥用或数据的不正确。
-
内容修改:对消息内容的修改,包括插入、删除、转换和修改。这直接破坏了信息的完整性。
-
顺序修改:对通信双方消息顺序的修改,包括插入、删除或重排。这种攻击可能导致系统逻辑混乱。
-
计时修改:对消息的延时和重放,可能用于绕过安全检查或者制造混淆。
-
发送方否认:发送方否认发送过某条消息。这种否认可以使得非法行为难以追溯。
-
接收方否认:接收方否认接收过某条消息。这同样使得通信的可靠性受到挑战。
消息认证就是验证所收到的消息确实是来自真正的发送方且未被修改的消息
任何消息认证在功能上可以看作两层
-
下层产生认证函数,关注的是如何生成可靠的认证符
-
上层关注的是如何有效地使用这些认证符进行安全通信
- 对比接收到的消息计算出的认证符与传输中接收到的认证符是否一致
三类认证函数
-
消息加密:整个消息的密文作为认证符。
-
消息认证码MAC: MAC是消息和密钥的公开函数,它产生定长的值,该值作为认证符。
-
Hash函数:它是将任意长的消息映射为定长的hash值的公开函数,以该hash值作为认证符。
有的时候Mac就是会被和Hash混为一谈,Mac主要有两种算法,一种是cipher-based(CMAC),基于AES和3DES等加密算法得到;另一种是Hash-Based(HMAC)基于SHA-1,MD5等。不过二者主要区别还是看需不需要额外的Key。
认证函数1:消息加密
-
expamle:对称加密
加密前对每个消息附加一个错误检测码,也称之为帧校验序列FCS或者校验和
-
先加密的危害:
-
-
对称加密
- 提供保密性:仅当双方共享密钥K时才能保证。
- 提供认证:确保消息只能发自A,并且在传输中未被改变,需要依赖某种数据形式或冗余来完成。
- 限制:
- 不能提供数字签名,因此接收方可以伪造信息。(并声称该消息来自于发送方,你说好要给我一千块钱的)
- 发送方可以否认信息,这可能会导致认证问题。(这可不是我说的,密钥又不是只有我一个人知道)
-
公钥加密
- 提供保密性:只有拥有私钥的B能解密由公钥KUb加密的消息。任何人都可以使用公钥对消息进行加密。
- 提供认证和签名:仅拥有私钥KRa的A能加密信息,因此可以提供认证和数字签名。
- 数据组织和冗余:需要某种数据组织形式或冗余来支持加密和签名。
- 广泛的验证能力:任何一方都可以使用公钥来验证签名,提供了更广泛的认证与签名验证。
认证函数2:消息认证码MAC
MAC和消息加密的唯一区别就是MAC不要求可逆性
MAC提供的的是认证和完整性保护,不关注保护消息内容的机密性。
认证函数3:Hash
-
单向的hash函数是消息认证码的一种变形
-
与消息认证码一样, hash函数的输入是大小可变的消息M,输出是固定大小的hash码H(M)
-
与MAC不同的是, hash码并不使用密钥,它仅仅做为输入消息的函数, hash码也称为消息摘要(Message Digest, MD)
-
用对称密码仅对hash加密:对不要求保密性的应用,这种方法会减少处理代价
-
用发送方的私钥对hash码加密,可以提供签名
较为复杂的两种情况:
-
用私钥对Hash加密后,再对整个消息加密。这样提供了签名,认证,新增加了保密性
Hash
-
【抗弱碰撞性】给定m ,要找到m’,m’≠ m 且 H(m)=H(m’)是计算上不可行的
-
【抗强碰撞性】 寻找任何(x,y) , x≠y ,使得H(x) =H(y)是计算上不可行的
-
Hash函数将输入消息分为L个固定长度的分组,每个分组长度为b位,最后一个分组不足b位时,需要填充成b位
-
它的输入是前一步中得出的n位结果(即连接变量)和一个b位分组,输出位一个n位分组
-
连接变量的初始值在算法开始的时候指定,其终值即为hash值。通常b>n,因此称为压缩函数
-
设计安全hash函数可以归纳为设计具有抗碰撞能力的压缩函数问题,并且该压缩函数的输入是定长的
Hash算法:MD5 (Message Digest,消息摘要)
1. 输入和输出
-
输入:任意长度的消息。
-
输出:128比特的消息摘要。
2. 设计目标
-
安全性:计算上不可行找到两个不同的消息具有相同的摘要。
-
速度:在32位机器上有利于快速的软件实现。
-
简单性:算法简洁,易于描述和编程。
3. 算法步骤
-
Step 1:增加填充位:消息首先填充位,使其长度在模512位下等于448。填充始终发生,即使消息的长度已经等于448模512,也至少填充一个位。填充开始于一个1位,后跟若干个0位,直到满足长度条件。
-
Step 2:填充长度:在填充后的消息后面附加一个64位(小端表示)的长度字段,表示原始消息的长度(以位为单位)。如果长度超过了64位能表示的范围,就取其低64位。
-
Step 3:初始化MD缓存:算法使用了四个32位的寄存器(A,B,C,D),它们被初始化为特定的32位整数。(供128位,即hash结构里的n)
寄存器初始值:
-
A= 01234567
-
B= 89ABCDEF
-
C=FEDCBA98
-
D=76543210
-
-
Step 4:以512位分组为单位处理消息:处理每个512位分组,每个分组细分为16个32位的字。算法有四轮主要的运算,每轮都包含了16次操作(查表T的64个元素中的16个),每次操作对四个寄存器之一进行特定的非线性函数处理。
4轮后,输出与初值相加
-
Step 5:输出:经过所有分组处理后,最后得到的寄存器A,B,C,D的内容拼接起来(按顺序)形成128位的MD5摘要。
Hash算法:sha-1
1. 输入和输出
-
输入:长度小于$2^{64})位的消息。
-
输出:160位的消息摘要(hash值)。
2. 算法步骤
Step 1: 增加填充位
-
将原始消息填充至长度与448模512同余。即填充后的消息长度比512的整数倍少64位。填充始终包括一个"1"位,后跟足够数量的"0"位。
Step 2: 填充长度
-
用一个64位的数字表示原始消息的长度(以位为单位),附加在填充后的结果后面。如果消息的长度超过$2{64}位,则取其长度对2{64}$的余数。
Step 3: 初始化MD缓存
-
使用5个32位寄存器(通常称为ABCDE)来保存中间结果和最终的hash值。这些寄存器在算法开始前初始化为特定的值。
Step 4: 以512位分组处理消息
-
消息被分为512位(或16个字)的分组来处理。SHA-1使用一个复杂的迭代结构,称为压缩函数,包含十轮运算。每轮运算包括80步,分成四组,每组20步。每步使用不同的逻辑函数和操作。
Step 5: 输出
-
在处理完所有的分组后,最后一个分组的输出即是最终的160位消息摘要。
3. 特点和应用
-
SHA-1提供较强的安全性,尽管比较于其后继者如SHA-256和SHA-3有已知的弱点。
-
它广泛应用于多种安全应用和协议,包括TLS和SSL、PGP、SSH,以及IPsec等。
SHA-1是在MD4和MD5的基础上开发的,它在设计上旨在提供更强的安全性和更高的抗碰撞性。尽管现在SHA-1被认为对于某些应用来说不够安全,它在历史上作为一种重要的密码学工具被广泛使用,并且仍在某些旧系统和应用中找到它的身影。
数字签名(稍作了解)
消息认证可以保证通信双方不受第三方的攻击,但是它不能处理通信双方自身发生的攻击
数字签名特征:
-
它必须能够验证签名者、签名日期和时间
-
它必须能认证被签的消息内容
-
签名应能由第三方仲裁,以解决争执
分类:
按照有无仲裁方分为直接数字签名和仲裁数字签名
-
直接数字签名的弱点在于方法的有效性依赖于发送方私钥安全性
-
仲裁数字签名解决上述问题
基于DSA的数字签名标准DSS
-
r=($g^k$ mod p) mod q
-
s=[$k^{-1}$(H(M)+xr)]mod q
-
比较的时候不比较hash部分
身份认证
确认用户身份的解决办法
-
what you know:根据你所知道的信息来证明你的身份
静态口令
-
what you have:根据你所拥有的东西来证明你的身份
动态口令
-
who you are:直接根据独一无二的身体特征来证明身份
生物信息
网站身份认证技术
分类
-
basic认证:账号+静态口令
改进:
-
加密:无法躲避重放攻击,攻击方重放登录认证数据包,自己也就登上了。
-
认证:采用挑战/响应(Challenge/Response)机制,需要进行两次HTTP请求
- 确保每次通信都使用唯一的标识,使得重复的消息可以被服务器识别并拒绝。
-
-
基于表单的身份认证:Web的Session机制 (cookies)
一个Session包括特定的客户端、特定的服务器端以及特定的操作时间段
步骤
-
用户提交信息:用户在Web表单上输入用户名和密码,然后提交到服务器。
-
服务器验证:服务器接收到认证信息,与数据库中存储的数据进行比较验证。
-
会话创建:如果验证成功,服务器创建会话并发送会话ID(通常是cookie)给用户。
-
认证失败处理:如果用户名不存在或密码不匹配,用户通常被重定向回登录页面并显示错误消息。
改进
-
采用挑战/响应(Challenge/Response)机制,并用口令加密明文
-
使用传输层SSL协议传输HTTP请求
-
存放内容加上时间戳t,加密Ek[t||U||P] ,服务器每次需要验证时间戳
-
-
动态口令/多因素认证
- 手机短信口令:用户在尝试登录时,系统发送一个一次性的验证码到用户的手机上,用户需要输入这个验证码来完成认证过程,确保登录者拥有该手机。
- 动态口令:通常是指一次性密码(OTP),它是基于时间或计数器动态生成的,用户需要提供这个动态变化的密码才能进行认证,确保了密码的时效性和独特性。
- USB Key:是一种物理设备,用户在登录时需要将这个设备插入计算机,它包含有助于身份验证的数字密钥或证书,为用户提供一个拥有物的认证因素。
- 数字证书:是一种数字文件,用于确认持有人的身份信息和公钥,通常由权威的证书颁发机构签发,用于验证用户身份和建立安全的电子通信。