CCM和GCM
分组密码链接-消息认证码--CCM Counter with CBC-MAC
组成CCM的关键算法是AES加密算法、CTR工作模式和CMAC认证算法,在加密和MAC算法中共用一个密钥K。
CCM加密过程的输入由三部分构成:
1、将要被加密和认证的数据,即明文消息P数据块
2、将要被认证,但是不需要加密的相关数据A,如协议头等。
3、临时量N,作为负载和相关数据的补充,对每条消息N取值唯一,以防止重放攻击等。
由计数器产生大量的Ctri
Galois/计数器模式--GCM Galois/Counter Mode
GCM基于并行化设计,可以提供高效的吞吐率和低成本、低延迟。其本质是消息在变型的CTR模式下加密,密文结果与密钥以及消息长度信息在GF(2128)域上相乘。该标准还同时制定了仅支持MAC的工作模式即GMAC。
GCM模式使用两个函数:带密钥的Hash函数GHASH,以及计数器每次增1 的CTR模式的GCTR。
1、GHASH
GHASHH(X)函数将Hash密钥H和位串X作为输入,经过转化函数可表示成:
GHASHH(X) = (X1•Hm)⊕(X2•Hm-1)⊕...⊕(Xm-1•H2)⊕(Xm•H)
该式非常适合快速实现,如果使用相同的Hash密钥认证多个消息,那么H2,H3,...能够通过一次预计算来对所有消息进行认证,并且待认证的数据分组(X1,X2,...,Xm)能够并行处理,因为每组计算都相互独立。
2、GCRT
inc32(S)函数对S的最右32位增1并取模232,其余位不变。
最后一次加密生成MSB,根据Xn'的长度截取后再与Xn'异或产生Yn'
3、整个认证函数结构
(1)令 H = E(K , 0128)
(2)定义分组J0如下
如果len(IV) = 96,则令J0 = IV || 031 || 1。
如果len(IV) ≠ 96,则令 s = 128⌈len(IV)/128⌉ - len(IV)
并令J0 = GHASHH(IV || 0s+64 || [len(IV)64]) //[s+64+len(IV)]%64 = 0,说白了就是使输入满足刚好可分整数组的长度
(3)令C = GCRTK(inc32(J0) , P)
(4)令u = 128⌈len(C)/128⌉ - len(C) v = 128⌈len(A)/128⌉ - len(A) //目的也是为了满足分组长度
(5)定义分组S如下
S = GHSASHH(A || 0v || C || ou || [len(A)]64 || [len(C)64])
(6)令 T = MSBt(GCTRK(J0 , S)),这里t是支持的MAC长度
CCM和GCM的更多相关文章
- CCM加密学习
这几天终于搞定了AES硬件加密工具的使用,几种简单的加密模式也都实验通过了,比较麻烦的一种是CCM模式的加密,它是CTR加密模式和CMAC认证算法的混合使用.本文先介绍CCM模式的原理与基本实现,然后 ...
- [翻译练习]密码学1小时入门 (Everything you need to know about cryptography in 1 hour)
原文:http://www.daemonology.net/papers/crypto1hr.pdf [密码学简介] 很多人都误用了密码学 一般可归为三类: 1. 愚蠢 比如Google ...
- https那些事儿
(一)SSL/TLS协议运行机制的概述 一.作用 不使用SSL/TLS的HTTP通信,就是不加密的通信.所有信息明文传播,带来了三大风险. (1) 窃听风险(eavesdropping):第三方可以获 ...
- 分组密码的工作模式--wiki
密码学中,块密码的工作模式允许使用同一个块密码密钥对多于一块的数据进行加密,并保证其安全性.[1][2] 块密码自身只能加密长度等于密码块长度的单块数据,若要加密变长数据,则数据必须先被划分为一些单独 ...
- [crypto] AEAD是啥
AEAD这个缩写根据不同的语境有两个理解角度:认证加密机制,认证加密方式. 认证加密机制是指:一些用来完成认证加密工作的方法,拆分为认证和加密两部分来做,先加密后加密先认证后认证都无所谓,整个过程或者 ...
- tls1.2 rfc5246
注:本文省略了部分开发协议才涉及到的内容,如字段类型的定义以及字段长度的运算,主要聚焦理解tls协议的运作方式,用于问题定位 tls协议包含2层协议:TLS Record 协议和TLS Handsha ...
- .NET Core AES-CCM&AES-GCM加密算法
一. 前言 关于 CCM 以及 GCM 看此文( CCM和GCM )或者直接搜索网上资料. .NET Core 3.0 实现了对AES-GCM和AES-CCM加密的支持.这些算法既是带有关联数据的身份 ...
- Linux操作系统安全-OpenSSL工具常用命令介绍
Linux操作系统安全-OpenSSL工具常用命令介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.OpenSSL开源项目有三个组件 openssl: 多用途的命令行工具,包 ...
- 第二十七个知识点:什么是对称密码加密的AEAD安全定义?
第二十七个知识点:什么是对称密码加密的AEAD安全定义? AEAD 在之前的博客里,Luke描述了一种被广泛使用的操作模式(ECB,CBC和CTR)对块密码.我们也可能会想我们加密方案的完整性,完整性 ...
随机推荐
- MySql 时间操作实例
SELECT NOW(6) AS '当前时间精确到微秒'; SELECT UNIX_TIMESTAMP() AS '当前时间戳',UNIX_TIMESTAMP('2018-1-1') AS '转换成时 ...
- python raise和assert的区别
python中raise和assert的区别 一.使用raise抛出异常 python可以自动触发异常,raise(内置函数)的定义为显示的抛出异常,用户可以使用raise进行判断,显式的引发异常,r ...
- Java多线程volatile和synchronized总结
volatile是轻量级的synchronized,在多处理器(多线程)开发中保证了共享变量的"可见性".可见性表示当一个线程修改了一个共享变量时,另外一个线程能读到这个修改的值. ...
- 实验:利用ASMLib创建ASM磁盘
环境:RHEL 6.5 + Oracle 11.2.0.4 RAC(2 nodes) 目的:在实验环境使用ASMLib配置共享ASM磁盘,虽然我们已经不建议使用ASMLib进行绑盘,但是无奈有客户是这 ...
- js 输入密码框遇到的问题
上次公司项目需要用到密码输入框,如图所示: 首先设计是设置六个div,然后放置六个input. 动态方面然根据键盘onkey事件进行判断,当按键放松时使前一个input失去焦点,下一个input获取焦 ...
- java获取当前系统时间
阿里巴巴推荐 Timestamp d = new Timestamp(System.currentTimeMillis()); 唯一的好处就是除了Timestamp,没有再新建什么了
- Rabbitmq集群
分享到 一键分享 QQ空间 新浪微博 百度云收藏 人人网 腾讯微博 百度相册 开心网 腾讯朋友 百度贴吧 豆瓣网 搜狐微博 百度新首页 QQ好友 和讯微博 更多... 百度分享 Rabbitmq集群高 ...
- ACM Adding Reversed Numbers(summer2017)
The Antique Comedians of Malidinesia prefer comedies to tragedies. Unfortunately, most of the ancien ...
- Zookeeper Api
如何使用 Zookeeper 作为一个分布式的服务框架,主要用来解决分布式集群中应用系统的一致性问题,它能提供基于类似于文件系统的目录节点树方式的数据存储,但是 Zookeeper 并不是用来专门存储 ...
- iOS开源加密相册Agony的实现(一)
简介 虽然目前市面上有一些不错的加密相册App,但不是内置广告,就是对上传的张数有所限制.本文介绍了一个加密相册的制作过程,该加密相册将包括多密码(输入不同的密码即可访问不同的空间,可掩人耳目).Wi ...