MOD8ID 加密芯片的 AES-GCM 模式使用

news2024/11/19 14:34:17

一:么是 AES-GCM 加密?

AES-GCM是一种高级加密标准(AES)的加密模式,同时使用加密和身份验证(AEAD)功能。它使用加密算法AES和Galois Counter Mode(GCM)计数器模式,以实现高效的加密和身份验证,同时提供保密性、完整性和认证性。AES-GCM的加密和身份验证是同时进行的。它采用一种称为“GHASH”的Galois域上的乘法操作来计算消息的身份验证标记(MAC),并使用一个称为“CTR”的计数器模式来加密消息。下面是AES-GCM的详细流程:

  1. 分离密钥和初始向量:AES-GCM使用128位的AES加密算法,因此密钥长度为128位、192位或256位。另外,它需要一个唯一的初始向量(IV)来确保每次加密都是不同的。IV的长度可以是96位或更大,基本上96位足够
  2. 初始化计数器:计数器是一个值,用于在加密和身份验证期间迭代生成密钥流,以加密和解密消息。在AES-GCM中,计数器使用CTR模式初始化。CTR模式是一种流式加密模式,它将计数器的值作为输入,并使用AES算法来生成密钥流。在AES-GCM中,计数器被初始化为IV的值。
  3. 生成密钥流:使用AES算法生成密钥流。对于每个64位的密钥流块,计数器值将递增,以产生不同的密钥流块。
  4. 加密明文:使用异或操作将明文和生成的密钥流块混合在一起,以生成密文。加密的过程是逐个字节进行的。
  5. 计算身份验证标记(MAC):使用一个称为GHASH的算法来计算MAC。GHASH是一种基于Galois域的算法,用于计算消息的身份验证标记。它将消息划分为64位块,并使用乘法和异或操作将它们混合在一起,最终生成一个128位的MAC。
  6. 生成完整的密文:将密文和MAC组合在一起,以生成完整的密文。
  7. 解密:使用相同的密钥、IV和MAC密钥流,使用异或操作对密文进行解密。
  8. 验证MAC:使用相同的密钥、IV和明文,重新计算MAC,并将计算出的MAC与原始MAC进行比较。如果MAC匹配,则说明密文未被篡改。

二:AES-GCM 加密流程:

加密流程图

 

三 :MOD8ID加密芯片的  AES-GCM  加密使用示例

  MOD8ID是模微半导体推出的一款基于硬件安全引擎的加密芯片。它提供了一个安全的存储和运行环境,以及许多加密和认证功能,也包括AES-GCM加密和认证。MOD8ID确保了AES-GCM加密的密钥安全和算法安全。

AES-GCM是一种广泛使用的加密模式,它提供了高强度的数据加密和完整性保护。MOD8ID提供了硬件加速的AES-GCM实现,可以在芯片上执行快速且安全的加密和认证操作,从而提供更高的安全性和性能。基于MOD8ID可以实现许多安全应用程序,例如物联网设备、智能家居、医疗保健等等。这些应用程序通常需要处理敏感数据,例如个人身份信息、医疗记录等等。使用MOD8ID,这些数据可以被安全地加密和认证,从而保护用户的隐私和安全。

以下是基于MOD8ID的AES-GCM示例,

示例演示实现了基于MOD8ID芯片的加密和解密操作,并验证了解密数据的完整性和身份验证标记。

函数流程如下:

  1. 生成128字节的随机明文数据,并打印输出。
  2. 使用随机生成的IV和密钥对明文进行加密,得到密文和身份验证标记,并打印输出。
  3. 使用相同的密钥和IV对密文进行解密,得到解密后的明文和身份验证标记,并打印输出。
  4. 验证解密的身份验证标记是否与加密时计算的身份验证标记匹配。
  5. 比较原始明文数据和解密后的明文数据是否匹配,如果匹配则返回真,否则返回假。

其中,mod8_generate_random函数用于生成演示用随机明文数据,mod8_encrypt_data和mod8_decrypt_data函数分别用于加密和解密数据

// MODSEMI  MOD8ID for AES-GCM test function
bool mod8_test_enc_dec()
{

    //Generate random 128 byte plain text for encryption  
    for (int idx = 0; idx < 4; idx++)
    {
        if (!mod8_generate_random(_gDevice,plaintext + (idx * 32)))
        {
            printf( "Random data generation fail\r\n");
            return false;
        }
    }
    printf( "Plain text : ");
    for (int i = 0; i < 128; i++)
    {
        printf( "%02X", plaintext[i]);
    }
    printf( "\r\n");

    // Encrypt data by MOD8ID
    if (!mod8_encrypt_data(MSE_TEMPKEY_KEYID, plaintext, 128, cipherText, authTag, NULL, iv))
    {
        printf( "Encryption failed\r\n");
        return false;
    }

    printf( "IV : ");
    for (int i = 0; i < (AES_IV_LENGTH); i++)
    {
        printf( "%02X", iv[i]);
    }
    printf( "\n Cipher text : \n");
    for (int i = 0; i < 128; i++)
    {
        printf( "%02X", cipherText[i]);
    }
    printf( "\n Auth tag : \n");
    for (int i = 0; i < AES_AUTH_TAG_SIZE; i++)
    {
        printf( "%02X", authTag[i]);
    }

    // Decrypt data by MOD8ID
    if (!mod8_decrypt_data(MSE_TEMPKEY_KEYID, cipherText, 128, iv, authTag, decryptedText, &isVerified))
    {
        printf( "\n Decryption failed \r");
        return false;
    }

    printf( "\n Decrypted data : ");
    for (int i = 0; i < 128; i++)
    {
        printf( "%02X", decryptedText[i]);
    }

    if (isVerified == false)
    {
        printf( "\nDecryption authentication failed \r\n");
    }
    else
    {
        printf( "Decrypted data authenticated\r\n");
    }

    //Check if the plain text and decrypted texts match
    if (memcmp(plaintext, decryptedText, 128) == 0)
    {
        printf( "Decrypted text matches plain text\r\n");
        return true;
    }
    return false;
}

流程图如下:

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/444707.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5行Python代码采集3000+上市公司信息,很爽

嗨害大家好鸭&#xff01;我是爱摸鱼的芝士❤ 毕业季也到了找工作的季节了&#xff0c; 很多小伙伴都会一家一家的公司去看&#xff0c; 这得多浪费时间啊。 今天用Python教大家怎么采集公司的信息&#xff0c; 相信大家会很喜欢这个教程的&#xff0c;nice&#xff01; pyth…

中介者设计模式(Mediator Design Pattern)[论点:概念、组成角色、相关图示、示例代码、适用场景]

文章目录 概念组成角色相关图示示例代码适用场景 概念 中介者设计模式是一种行为型设计模式&#xff0c;它通过引入一个中介对象来封装一组对象之间的交互&#xff0c;使得对象之间不需要显式地相互引用&#xff0c;从而降低它们之间的耦合。通过将对象间的通信封装到中介者对象…

Ubuntu20.4利用httpd(Apache2)源码搭建web服务器

Apache取自“a patchy server”的读音&#xff0c;源于NCSAhttpd服务器&#xff0c;经过多次修改&#xff0c;成为世界上最流行的Web服务器软件之一&#xff0c;Apache的特点是简单、速度快、性能稳定&#xff0c;并可做代理服务器来使用。 本来它只用于小型或试验Internet网络…

TinyOS 配置教程

文章目录 前言1. 安装1.1. 实验环境1.2. TinyOS基础工作1.3. TinyOS 的配置1.4. 安装 java1.5. 安装编译器 2. 测试仿真程序总结 前言 本文主要用于记录在 WSN 课程中&#xff0c;配置大作业所需使用的 TinyOS 仿真环境 1. 安装 1.1. 实验环境 本实验以如下版本为例&#xf…

Python面向对象详解(非常详细)

非常详细的讲解&#xff08;爆肝1w字&#xff09;&#x1f44f;&#x1f3fb;&#x1f44f;&#x1f3fb;&#x1f44f;&#x1f3fb; 零基础一样学得会&#x1f44c;&#x1f3fb; 干货满满不看后悔&#x1f44d;&#x1f44d;&#x1f44d; &#x1f4dd;个人主页→数据…

函数重载注意事项

C为什么支持函数重载&#xff0c;C语言不支持函数重载&#xff1f; C代码产生函数符号时&#xff0c; 是函数名参数列表类型组成的&#xff01;如_Z3sumii C代码产生函数符号时&#xff0c;只由函数名决定 什么是函数重载&#xff1f; 一组函数&#xff0c;其中函数名相同&…

读书笔记-《ON JAVA 中文版》-摘要14[第十四章 流式编程]

文章目录 第十四章 流式编程1. 流支持2. 流创建2.1 流创建2.2 随机数流2.3 int 类型的范围2.4 generate()2.5 iterate()2.6 流的建造者模式2.7 Arrays2.8 正则表达式 3. 中间操作3.1 跟踪和调试3.2 流元素排序3.3 移除元素3.4 应用函数到元素3.5 在 map() 中组合流 4. Optional…

电脑文件恢复怎么做?3个方法快速恢复文件!

案例&#xff1a;电脑文件恢复怎么操作&#xff1f; 【我的电脑已经好久没用了&#xff0c;最近因为需要查看一些相关的文件才用到电脑&#xff0c;但是我打开后发现里面很多重要的文件都不见了&#xff0c;请问电脑文件应该怎么恢复呢&#xff1f;感谢回答&#xff01;】 电…

AIGC从入门到精通

一键起飞 # 提前安装好python 3.10.9 ​git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui cd stable-diffusion-webui ./webui.sh -f --api --listen --enable-insecure-extension-access 非常详细&#xff01;6000字详解AI绘画文生图干货、技巧&#xf…

【多线程】线程的状态

1. 等待一个线程 join 有一天张三与小美在家里吃饭&#xff0c;张三早早的把饭吃完了&#xff0c;对小美说&#xff0c;等你把饭吃完了&#xff0c;我就去洗碗了&#xff01; 此时张三就要等待小美吃完饭才能去洗碗&#xff0c;就好比线程 A 要等待线程 B 执行完&#xff0c;线…

Ansys Lumerical | 光子集成电路之PN 耗尽型移相器仿真工作流

01 说明 本文旨在介绍Ansys Lumerical针对有源光子集成电路中PN耗尽型移相器的仿真分析方法。通过FDE和CHARGE求解器模拟并计算移相器的性能指标&#xff08;如电容、有效折射率扰动和损耗等&#xff09;&#xff0c;并创建用于INTERCONNECT的紧凑模型&#xff0c;然后将其表征…

vue_03

文章目录 导航菜单功能的实现在Admin.vue中添加下列代码布局选择点击跳转事件 vuex的安装及配置安装配置新建store和index.js在index.js下写如下代码在main.js中引入store 封装菜单请求工具类新建menus.js编写menus.js文件 解决F5刷新数据丢失问题 导航菜单功能的实现 在Admin…

多项开发任务,如何做好任务分配和管理?

1、确定任务清单 任务精细化分解 需要将任务进行精细化分解&#xff0c;每个子任务时间最好不超过一周&#xff0c;明确子任务的目标、时间点和交付物。 多项开发任务&#xff0c;如何做好任务分配和管理&#xff1f; 2、优先级排序 需要将精细化好的任务&#xff0c;进行优先级…

TFTP+Filezilla文件双向传输(2)-ubuntu(VMware)-win10(host)

TFTP&#xff08;Trivial File Transfer Protocol,简单文件传输协议&#xff09;是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议&#xff0c;提供不复杂、开销不大的文件传输服务。端口号为69。 ftpd-hpa是tftp服务器 tftp-hpa是tftp客服端 inetd的全称…

设计尝试用Microsoft Visual Studio 在网络上架构一个电影院网络订票系统

设计尝试用Microsoft Visual Studio 在网络上架构一个电影院网络订票系统的设计&#xff0c;以使每一位客户不用出门就能看到最新的电影信息和预定电影票。本文从理论和实践两个角度出发&#xff0c;对一个具有数据挖掘功能电影院网络订票系统的设计进行设计与实现分析。随着电…

windows下运行dpdk下的helloworld

打开“本地安全策略”管理单元&#xff0c;在搜索框输入secpol。 打开本地策略->用户权限分配->锁定内存页->添加用户或组->高级->立即查找 输入电脑用户名&#xff0c;选择并添加。点击确定后&#xff0c;重启电脑。 安装内核驱动&#xff0c;下载地址https:…

srm 采购管理系统是如何赋能企业降本的?

近年来&#xff0c;随着全球经济的不断发展&#xff0c;企业的竞争也日趋激烈&#xff0c;企业为适应市场需求&#xff0c;加强产品创新和技术升级&#xff0c;加大产品研发和生产投入&#xff0c;然而在新冠肺炎疫情的影响下&#xff0c;许多企业经营出现困境。在这种情况下&a…

基于时间戳和序列号的mac地址生成策略

基于时间戳 基于时间戳生成MAC地址的具体操作步骤如下&#xff1a; 获取设备的出厂日期和时间。一般情况下&#xff0c;这个信息可以在设备的测试报告或者出厂记录中找到。 将设备的出厂日期和时间转换成时间戳格式。时间戳指的是一个从1970年1月1日00:00:00 UTC开始的秒数。…

自动化数据驱动?最全接口自动化测试yaml数据驱动实战,看这一篇就够了

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 我们在做自动化测…

ROS学习第十九节——TF静态坐标变换

1.坐标msg消息 订阅发布模型中数据载体 msg 是一个重要实现&#xff0c;首先需要了解一下&#xff0c;在坐标转换实现中常用的 msg:geometry_msgs/TransformStamped和geometry_msgs/PointStamped 前者用于传输坐标系相关位置信息&#xff0c;后者用于传输某个坐标系内坐标点的…