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)对块密码.我们也可能会想我们加密方案的完整性,完整性 ...
随机推荐
- Windows10下配置python的环境变量
从官网下载Windows下的python版本,一路按照默认进行安装. 安装之后配置环境变量的步骤如下: 1,点"我的电脑",右键选"属性". 2,选择" ...
- Linux编程之内存池的设计与实现(C++98)
假设服务器的硬件资源"充裕",那么提高服务器性能的一个很直接的方法就是空间换时间,即"浪费"服务器的硬件资源,以换取其运行效率.提升服务器性能的一个重要方法就是 ...
- SpringBoot中跨域问题
项目中经常会遇到浏览器跨域的问题,解决方式在启动类中配置 @Bean public FilterRegistrationBean corsFilter() { UrlBasedCorsConfigur ...
- Cisco 的基本配置实例之四----vlan的规划及配置(接入交换机)
4.2 接入交换机的相关配置 ## 在此例中,我们联入的是一台接入交换机,此交换机的gi0/1口上联至核心交换机.也就意味着我们需要配置gi0/1为trunk口.具体的配置如下: D-2960-3(c ...
- Log4j使用详解
1 Log4j配置说明 1.1 配置文件Log4j可以通过java程序动态设置,该方式明显缺点是:如果需要修改日志输出级别等信息,则必须修改java文件,然后重新编译,很是麻烦: log4j也可以通过 ...
- JAX-RPC 与 JAX-WS 的比较
引言 Web 服务已经出现很久了.首先是 SOAP,但 SOAP 仅描述消息的情况,然后是 WSDL,WSDL 并不会告诉您如何使用 Java™ 编写 Web 服务.在这种情况下,JAX-RPC 1. ...
- java 反射机制 观点
反射,当时经常听他们说,自己也看过一些资料,也可能在设计模式中使用过,但是感觉对它没有一个较深入的了解,这次重新学习了一下,感觉还行吧! 一,先看一下反射的概念: 主要是指程序可以访问,检测和修改它本 ...
- javascrpt_数组学习
1.构造函数 var arr = new Array(); Array 构造函数有一个很大的缺陷,就是不同的参数,会导致行为不一致. 因此,不建议使用它生成新数组,直接使用字面量是最好的做法. 2.静 ...
- windows下cmd中命令操作
windows下cmd中命令: cls清空 上下箭头进行命令历史命令切换 ------------------------------------------------------------- ...
- jsp&servlet初体验——用户登录功能实现
数据库准备-创建db_login数据库 t_user表 1.创建web工程 2.创建用户model user.java package com.gxy.model; public class U ...