图解密码技术 第二部分 认证

二、认证

0x07 单向散列函数—完整性

用于确保数据的完整性

性质:任意长度输入计算固定长度输出(256bit(32byte))、快速计算、弱抗碰撞性(找和该条消息具有相同散列值的另外一条消息是非常困难)、强抗碰撞性(散列值任意,找散列值相同的两条不同信息非常困难)、单向性、

应用:检测软件是否被篡改;基于口令的加密(passsword based encryption,将口令和盐混合后计算其散列值);消息认证码;数字签名;伪随机数生成器;一次性口令;

MD结构:

MD4:Rivest设计,产生128bit的散列值(RFC1186)
MD5:Rivest设计,产生128bit的散列值(RFC1321),强抗碰撞性已被攻破
SHA-1:NIST设计,产生160bit的散列值,强抗碰撞性2005年已被攻破,输入上限为2的64次方-1bit
SHA-2:输入上限为2的128次方-1bit
	SHA-256/384/512:NIST设计,产生256/384/512bit的散列值,
RIPEMD-160:1996年由Hans Dobbertin、Antoon Bosselaers和Bart Preneel设计,产生160bit的散列值,
SHA-3:公开选拔,Keccak算法被选中(采用了与SHA-2完全不同的结构;结构清晰,易于分析;能够适用于各种设备,也适用于嵌入式应用;在硬件上的实现显示出了很高的性能;比其他最终候选算法安全性边际更大);可以生成任意长度的散列值;

Keccak海绵结构:

  • 吸收阶段(absoring phase)
    1. 输入进行每r bit分组,不足填充
    2. 内部状态b(r+c)bit为0,前r bit与输入分组1进行XOR,结果作为函数f输入值,c直接往后一直继承;
    3. 将函数f输入值与输入分组2进行XOR,一直循环;
    4. 处理完所有分组后,结束;r的内容全靠输入,称为比特率bit rate,影响输出,c不受内容分组直接影响,被称为容量capacity,防止泄露
  • 挤出阶段(squeezing phase)
    1. 将函数f的输出值的r bit保存为输出分组1,并将输出值(r+c)再次输入到函数f中;
    2. 将函数f的输出值的r bit保存为输出分组2,并将输出值(r+c)再次输入到函数f中;
    3. 重复执行,直到获得想要的长度;
  • 双工结构:输入与输出一起进行,用于伪随机数生成器、流密码、认证加密、消息认证码
  • 内部状态:三维比特数组

对散列函数的攻击:

  • 暴力破解:已知散列值,找另一个散列值相同的消息,对弱抗碰撞性进行攻击,攻击次数可通过散列值长度计算(原像攻击Pre-Image Attack),已知消息,找另一个散列值相同的消息(第二原像攻击Second Pre-Image Attack)
  • 生日攻击:找散列值相同的任意两条消息,对强抗碰撞性进行攻击

国密|SM3:GM/T 0004-2012 。安全性及效率与SHA-256相当,主要用于数字签名及验证、消息认证码生成及验证、随机数生成等,可满足多种密码应用的安全需求,算法已公开。

SM3对长度为小于264 比特的消息m, SM3杂凑算法经过填充和迭代压缩,生成杂凑值,杂凑值长度为256比特,分组长度512。

  • 消息填充:512*K+448
  • 迭代压缩:消息扩展->压缩函数->杂凑值

无法解决消息是谁发出,即认证问题

0x08 消息认证码—完整性与认证双方

MAC(Message Authentication Code)用于确认完整性并认证的技术,输入任意长度消息和共享密钥,输出固定长度数据MAC值。要计算MAC值必须有共享密钥,没有就无法计算MAC值,通过此完成认证,加上对MAC值进行单向散列函数计算,可以确保完整性。

  1. 发送者Alice与接收者Bob事先共享密钥。
  2. 发送者Alice根据汇款请求消息计算MAC值(使用共享密钥)。
  3. 发送者Alice将汇款请求消息和MAC值两者发送给接收者Bob。
  4. 接收者Bob根据接收到的汇款请求消息计算MAC值(使用共享密钥)。
  5. 接收者Bob将自己计算的MAC值与从Alice处收到的MAC值进行对
  6. 如果两个MAC值一致,则接收者Bob就可以断定汇款请求的确来自Alice(认证成功);如果不一致,则可以断定消息不是来自Alice(认证失败)。

应用:SWIFT(Society for Worldwide Interbank Financial Telecommunication)银行之前通信使用,在公钥密码进行交换前进行消息认证,共享密钥使用人进行配送;IPsec;SSL/TLS;

实现方法:

  1. 单向散列函数SHA-2实现—HMAC;
  2. 分组密码密钥实现AES—CMAC;
  3. 流密码和公钥密码;

认证加密AE:将对称密码和消息认证码相结合,同时满足机密性,完整性,认证三大功能

Encrypt-then-MAC(用对称密码加密明文,再计算密文MAC值);

Encrypt-and-MAC(将明文用对称密码加密,并对明文计算MAC值);

MAC-then-Encrypt(先计算明文的MAC值,然后将明文和MAC值同时用对称密码加密);

GCM :Galois/Counter Mode,认证加密方式,使用AES的CTR模式,并使用一个反复进行加法和乘法运算的散列函数来计算MAC值,专门用于消息认证码的GCM称为GMAC

HMAC:用哈希作为消息认证码,hash(opadkey || hash(ipadkey || message)),密钥填充—填充后密钥与ipadXOR—与消息组合放前面计算散列—填充后密钥与opadXOR—与上面的散列组合放前面计算散列—得到MAC。

ipad为16进制的36不断重复到分组长度的比特序列,opad为16进制的5c不断重复到分组长度的比特序列。

消息认证攻击(防御):重放(序号,时间戳,随机数nonce);密钥推测攻击(不能让MAC值反推出密钥)

防否认问题无法解决,因为密钥是双方共享的。

0x09 数字签名—防止否认

私钥加密生成签名,公钥解密验证签名

通过单向散列函数计算消息的散列值,再对散列值进行私钥加密,发送公钥、签名和消息;接收者计算消息散列值并与公钥验签得到的值对比。

核心:特定的签名者与特定的消息绑定在一起。

应用:安全信息公告(不加密消息,只对消息进行数字签名);软件下载;公钥证书(对公钥签名);SSL/TLS

数字签名算法:ElGamal、DSA(即RSA的公私钥对换的签名版本)、ECDSA、Rabin

电子签章系统:

无法解决公钥是否属于真正发送者问题

0x10 证书—对第三方证明

公钥证书(Public-Key Certificate,PKC),认证机构(Certification Authority、CertifyingAuthority,CA)施加数字签名

  1. Bob生成密钥对
  2. Bob在认证机构Trent注册自己的公钥
  3. 认证机构Trent用自己的私钥对Bob的公钥施加数字签名并生成证书
  4. Alice得到带有认证机构Trent的数字签名的Bob的公钥(证书)
  5. Alice使用认证机构Trent的公钥验证数字签名,确认Bob的公钥的合法性
  6. Alice用Bob的公钥加密消息并发送给Bob
  7. Bob用自己的私钥解密密文得到Alice的消息

公钥基础设施(Public-Key Infrastructure)是为了能够更有效地运用公钥而制定的一系列规范和规格的总称。

  • 用户
    1. 【注册公钥的用户所进行的操作】
      生成密钥对(也可以由认证机构生成)
      在认证机构注册公钥
      向认证机构申请证书
      根据需要申请作废已注册的公钥
      解密接收到的密文
      对消息进行数字签名
    2. 【使用已注册公钥的用户所进行的操作】
      将消息加密后发送给接收者
      验证数字签名
  • 认证机构:生成并颁发证书、查询证书状态、作废证书CRL(Certificate Revocation List)
  • RA:证书注册、录入、审核、下载
  • 仓库Key Management :保存证书目录

证书的层级结构:根CA自签名,然后下级单位用上级的数字签名附带自己的公钥

证书下载协议:LDAP

证书查询状态:OCSP

攻击:公钥注册前进行攻击;注册相似人名;窃取认证机构私钥;伪装成认证机构;钻CRL空子时间差;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值