第二十七个知识点:什么是对称密码加密的AEAD安全定义?

AEAD

在之前的博客里,Luke描述了一种被广泛使用的操作模式(ECB,CBC和CTR)对块密码。我们也可能会想我们加密方案的完整性,完整性意味着接收到的消息就是发送的消息,在信道中没有意外修改或者恶意修改,真实性意味着接收者确实是收到了发送者的消息。为了使用这些特性,我们通常使用消息认证码(MAC),那些基于hash的消息认证码叫做HMAC。把这两个密码原语放在一起不是平凡的:为了获得IND-CCA安全方案,我们需要遵循加密然后MAC的范式,使用安全的加密方案和一个强不可伪造的MAC,这意味着在密文上进行MAC。(这里这里给出了更多的信息关于“加密和MAC”,“MAC后加密”,关注为了我们要避免它们。“AD”指的是可变长度的相关数据(Associated Data),如包头,我们通常期望真实性和完整性,但不希望这个可选组件具有保密性。更多的阅读和例子,看Adam Langley's 博客关于这个话题的。

实际上传统的EtM,MtE,MaE都是有一些问题的,设计时要用真正的AEAD算法。

  • AES-128-GCM
  • AES-192-GCM
  • AES-256-GCM
  • ChaCha20-IETF-Poly1305
  • XChaCha20-IETF-Poly1305

在具备 AES 加速的 CPU(桌面,服务器)上,建议使用 AES-XXX-GCM 系列,移动设备建议使用 ChaCha20-IETF-Poly1305 系列。

IND-CCA

下周的博客将会深入研究IND-CCA2安全在一个公钥加密的上下文。在真随机数下的IND-CCA2(和IND-CCA1)安全定义是给攻击者一个加密oracle的权利,加密oracle的密钥是固定的。输入消息m,返回一个加密过的\(E_k(m)\)或者返回一个\(E_k(\$^{|x|})\),同时也给一个解密oracle给出密文\(c\),然后返回\(D_k(c)\)。然后攻击者进行区分。在2004年,Shrimpton展示了一种新的被称为IND-CCA3的概念,解密oracle对一个无法解密的oracle会返回一个不合法的符号,与之前考虑过的AE概念相同,其中隐私和真实性/完整性的概念分别进行研究。这一观察结果被纳入罗格威和希姆普顿的论文中,研究密钥包装问题和确定性认证加密。有关关联数据影响的更多信息,请参见此处此处

CCM和GCM

实际上,大量组织使用CCM模式和GCM模式。CCM模式是一种计数模式和CBC-MAC使用MAC-then-Encrypt方法构造的。GCM是块密码的计数模式和基于多项式的哈希函数GHASH使用Encrypt-then-MAC构造的。CCM相对没有效率,每次需要两个块密码的调用,同时CCM也不是在线的(每次在处理消息之前需要知道消息的长度)。GCM在这篇文章里也有一些缺点:http://eprint.iacr.org/2011/202

CAESAR competition

凯撒密码竞赛目前正在进行中,目的是在经过彻底的学术公众审查的基础上,选择一组经过认证的密码进行推荐。主要目标之一是让更多的研究人员思考这样一个重要的主题,而第一轮提交的大量论文(性质各异)表明,这一目标已经实现。第二轮的候选名单预计将于下周公布,提交的名单可以在AE Zoo(https://aezoo.compute.dtu.dk/doku.php)找到,由DTU的一些研究人员管理。

竞赛已经结束。(2020年)

最新文章

  1. ubuntu下安装mcrypt
  2. JS this,call和apply以及回调函数
  3. [Android UI] ProgressBar自定义
  4. 你猜……你再猜
  5. Installing MySQL Connector/Python using pip v1.5
  6. Git起步--git安装与初次运行git前配置
  7. [CSS3] Using CSS Combinators to Identify Siblings and Descendants in CSS
  8. Cracking the coding interview--Q1.5
  9. mul16
  10. 29.编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight。小车类Car是Vehicle的子类,其中包含的属性有载人数 loader。卡车类Truck是Car类的子类,其中包含的属性有载重量payload。每个 类都有构造方法和输出相关数据的方法。最后,写一个测试类来测试这些类的功 能。
  11. 快速排序的C语言实现
  12. Java线程监控及中断
  13. LOJ#2668 书法家
  14. 记一次Dynamic Batching不生效的爬坑实例分析[Unity]
  15. Sql server 经典常用函数
  16. Alpha 冲刺 (1/10)
  17. elasticsearch-head的安装和使用
  18. NC 6系后台调用接口保存单据
  19. 使用MyEclipse开发Java EE应用:EJB项目开发初探(下)
  20. nodejs实现请求代理

热门文章

  1. 多线程高级篇1 — JUC — 只弄到处理高并发集合问题
  2. 日常Java 2021/10/5
  3. 零基础学习java------day4------流程控制结构
  4. Angular 组件通信的三种方式
  5. nodeJs,Express中间件是什么与常见中间件
  6. C语言time函数获取当前时间
  7. 【swift】长按事件绑定,平移滑动事件+坐标获取
  8. 【Linux】【Services】【SaaS】Docker+kubernetes(3. 用ansible管理机器和软件)
  9. 二叉搜索树、平衡二叉树、红黑树、B树、B+树
  10. PowerDotNet平台化软件架构设计与实现系列(06):定时任务调度平台