目录

  • AATECC508A芯片开发笔记(八):ECDH算法配置方法、过程原理及示例代码
  • 1、ECDH介绍及原理
  • 2、ECDH执行过程
  • 3、508A某一slot执行Ecdh需要配置的参数
  • 4、示例代码
  • 博主热门文章推荐:

AATECC508A芯片开发笔记(八):ECDH算法配置方法、过程原理及示例代码

  • 1、ECDH介绍及原理
  • 2、ECDH执行过程
  • 3、508A某一slot执行Ecdh需要配置的参数
  • 4、示例代码

508A芯片硬件可以实现ECDH算法,大大提高了算法执行效率,实际使用中,需要配置好508A使其能够执行ECDH,之后才可以调用库函数的API正确执行该算法。


1、ECDH介绍及原理

ECC Diffie-Hellman (ECDH) 是实现密钥协商的一种算法,或者说一种协议。关于详细原理,具体可以参考:http://blog.csdn.net/mrpre/article/details/72850644
或 https://msdn.microsoft.com/zh-cn/library/cc488016(v=vs.90).aspx

个人理解,Ecdh算法是通过ECC(椭圆曲线)非对称加密算法的数学关系和 Diffie-Hellman协议,生成一个共同的Session key。

例如有两个节点A和B,他们都有公私钥对:PrivateKeyA和PublicKeyA,PrivateKeyB和PublicKeyB,(简称PriB PubB)
如果利用对方的公钥和自己的私钥,进行ECDH数学运算,由于其存在的数学关系(椭圆曲线),一定会算出一个共同的数值,既密钥。(纯数学关系角度,虽然不好理解,但是合理的)。

因此PriA 与PubB,及PriB与PubA总会生成一个唯一共同的密钥


2、ECDH执行过程

ECDH开始时,会有一个发起方,假定为A,则发起方A会产生一个Random,并混合发起方A的PublickeyA发送给接收方B,然后B向A发送B的公钥PublickeyB,最终B通过A的PublicKeyA+Random,A通过自己产生的Random和PublickeyB生成该次密钥协商的唯一SessionKey。
该过程结果都是数学运算的结果,因为ECC算法的公私钥之间存在着一定的数学关系。


3、508A某一slot执行Ecdh需要配置的参数

3.1、将该Slot配置成可以执行ecdh,既如图中所示,Bit2 配置为1,其中可以通过Bit3灵活的配置ECDH算法结果的输出形式(明文返回或者输出到指定Slot中存储),方便开发。

3.2、将该Slot配置成可以二次产生密钥(可以执行Genkey命令))如下图,既Bit13配置为1;这是因为ECDH过程中需要使用GenKey命令。


4、示例代码

如下示例代码,是使用一个508模仿两个节点进行ecdh密钥协商。
其中前提是使用的两个slot都需要有公私钥(由508A生成),因此代码首先调用atcab_genkey( int slot, uint8_t *pubkey )得到公钥数据,然后分别将bob和alice的公钥 使用ecdh算法,既调用API atcab_ecdh(uint16_t key_id, const uint8_t pubkey, uint8_t ret_ecdh),产生的pms**就是两者相同的ecdh结果密钥。

ATCA_STATUS Atecc508_Ecdh_Test()
{ATCA_STATUS status;uint8_t pub_alice[ATCA_PUB_KEY_SIZE] = {0}, pub_bob[ATCA_PUB_KEY_SIZE]= {0};uint8_t pms_alice[ECDH_KEY_SIZE]= {0}, pms_bob[ECDH_KEY_SIZE]= {0};uint8_t key_id_alice = 0, key_id_bob = 4;status = atcab_genkey( key_id_alice, pub_alice );status = atcab_genkey( key_id_bob, pub_bob );// slot 0 is a non-clear response - "Write Slot N+1" is in slot config for W25 config// generate premaster secret from alice's key and bob's pubkeystatus = atcab_ecdh( key_id_alice, pub_bob, pms_alice );status = atcab_ecdh( key_id_bob, pub_alice, pms_bob );// memcmp it to bob's premaster secret - they should be identicalstatus = memcmp(pms_bob, pms_alice, sizeof(pms_alice));if(status != 0){printf("ecdh failed!");}else{printf("ecdh Success!");}return status;
}

欢迎转载,Howie原创作品,本文地址:
http://blog.csdn.net/howiexue/article/details/78649559
谢谢


博主热门文章推荐:

一篇读懂系列:

  • 一篇读懂无线充电技术(附方案选型及原理分析)
  • 一篇读懂:Android/iOS手机如何通过音频接口(耳机孔)与外设通信
  • 一篇读懂:Android手机如何通过USB接口与外设通信(附原理分析及方案选型)

LoRa Mesh系列:

  • LoRa学习:LoRa关键参数(扩频因子,编码率,带宽)的设定及解释
  • LoRa学习:信道占用检测原理(CAD)
  • LoRa/FSK 无线频谱波形分析(频谱分析仪测试LoRa/FSK带宽、功率、频率误差等)

网络安全系列:

  • ATECC508A芯片开发笔记(一):初识加密芯片
  • SHA/HMAC/AES-CBC/CTR 算法执行效率及RAM消耗 测试结果
  • 常见加密/签名/哈希算法性能比较 (多平台 AES/DES, DH, ECDSA, RSA等)
  • AES加解密效率测试(纯软件AES128/256)–以嵌入式Cortex-M0与M3 平台为例

嵌入式开发系列:

  • 嵌入式学习中较好的练手项目和课题整理(附代码资料、学习视频和嵌入式学习规划)
  • IAR调试使用技巧汇总:数据断点、CallStack、设置堆栈、查看栈使用和栈深度、Memory、Set Next Statement等
  • Linux内核编译配置(Menuconfig)、制作文件系统 详细步骤
  • Android底层调用C代码(JNI实现)
  • 树莓派到手第一步:上电启动、安装中文字体、虚拟键盘、开启SSH等
  • Android/Linux设备有线&无线 双网共存(同时上内、外网)

AI / 机器学习系列:

  • AI: 机器学习必须懂的几个术语:Lable、Feature、Model…
  • AI:卷积神经网络CNN 解决过拟合的方法 (Overcome Overfitting)
  • AI: 什么是机器学习的数据清洗(Data Cleaning)
  • AI: 机器学习的模型是如何训练的?(在试错中学习)
  • 数据可视化:TensorboardX安装及使用(安装测试+实例演示)

ATECC508A芯片开发笔记(八):ECDH算法配置方法、执行过程及实现原理相关推荐

  1. ATECC508A芯片开发笔记(一):初识加密芯片

    更多技术干货,欢迎扫码关注博主微信公众号:HowieXue,一起学习探讨软硬件技术知识经验,关注就有海量学习资料免费领哦: ---------- 目录 一.ATECC508A概述: 二.ATECC50 ...

  2. ATECC508A芯片开发笔记(二):开发准备之 CryptoAuthLib 库简介与移植

    目录 ATECC508A芯片开发笔记(二):开发准备之 CryptoAuthLib 库简介与移植 Atmel两个官方lib介绍 一.CryptoAuthLib简介 Lib中最主要的三种对象类型: 二. ...

  3. ATECC508A芯片开发笔记(九):加密读写508芯片数据的流程及相应设置

    目录 ATECC508A芯片开发笔记(九):加密读写508芯片数据的流程及相应设置 1.Encrypted Read 1.1 Standard Encrypted Read Flow 1.2 Simp ...

  4. ATECC508A芯片开发笔记(十一):NXP 平台移植ATECCx08 CryptoAuthLib库(I2C)

    目录 ATECC508A芯片开发笔记(十一):NXP 平台移植x08库(I2C) 一.CryptoAuthLib 二.Nxp RT10xx平台上移植CryptoAuthLib 2.1.在官网下载最新的 ...

  5. ATECC508A芯片开发笔记(六):产生CSR以及申请证书(X.509)流程及其内容分析

    目录 ATECC508A芯片开发笔记(六):产生CSR以及申请证书(X.509)流程及其内容分析 一.508A产生CSR文件流程 实例图1:申请证书流程: 实例图2:设备认证流程(使用证书): 二.C ...

  6. ATECC508A芯片开发笔记(七):实现数字签名(Sign)并校验(Verify)证书签名

    目录 ATECC508A芯片开发笔记(七):实现对数据数字签名(Sign)并验证(Verify)证书签名 一.数据签名.验证基本流程 二.利用508对数据签名并验证 代码实现: Sign(数字签名)实 ...

  7. 【嵌入式硬件芯片开发笔记】4-20mA DAC芯片AD5421配置流程

    [嵌入式硬件芯片开发笔记]4-20mA DAC芯片AD5421配置流程 16位.串行输入.环路供电.4 mA至20 mA DAC 可用于HART协议相关电路 同AD5700配合使用 AD5421的SP ...

  8. 【嵌入式硬件芯片开发笔记】HART调制解调器AD5700芯片配置流程

    [嵌入式硬件芯片开发笔记]HART调制解调器AD5700芯片配置流程 低功耗HART调制解调器 适用于AD5700/AD5700-1 我的是XTAL_EN接地,CLK_CFG的两个引脚由同一个GPIO ...

  9. 【嵌入式硬件芯片开发笔记】HART协议调制解调芯片AD5700配置流程

    [嵌入式硬件芯片开发笔记]HART协议调制解调芯片AD5700配置流程 XTAL_EN接地,CLK_CFG的两个引脚由同一个GPIO控制 初始时HART_CLK_CFG输出低电平 由RTS引脚控制调制 ...

最新文章

  1. python反转单链表
  2. hdu2036(多边形面积)
  3. Java 洛谷 P1321 单词覆盖还原
  4. 全球及中国液化天然气(LNG)行业建设规模现状及十四五产业规划报告2021年版
  5. Uploadify 3.2 参数属性、事件、方法函数详解以及配置
  6. centos7安装Nginx 配置及反向代理
  7. google服务框架 闪退_没 Google 服务闪退?教你解决手游谷歌服务问题
  8. Word批量调整插入图片大小
  9. 如何申请注册Tom企业邮箱,教程详解来袭
  10. PAT A1154 Vertex Coloring ——多少楼台烟雨中
  11. 计算机硬盘有磁性材料吗,电脑硬盘里有磁铁吗
  12. 第一财经专访李旭阳:反诈骗、管控金融风险,腾讯安全发力联邦学习技术
  13. webbug靶场-渗透基础
  14. matlab 三角函数 积化和差,三角函数积化和差与和差化积公式
  15. FOne HCI超融合系统
  16. 虚幻引擎(3)-第三人称视角
  17. python爬虫公众号_python爬虫_微信公众号推送信息爬取的实例
  18. 计算机画分段函数,《几何画板》:绘制分段函数的图像 -电脑资料
  19. 门店定位怎么在地图上显示_门店位置如何显示在地图上?
  20. class AdamWeightDecayOptimizer(tf.train.Optimizer): AttributeError: module ‘tensorflow._api.v2.tra

热门文章

  1. k8s滚动更新(六)--技术流ken
  2. oracle启用amm,【内存管理】Oracle AMM自动内存管理详解
  3. 台式计算机用u盘给电脑安装系统,台式电脑怎么用U盘重装Win7系统
  4. 《神经科学:探索脑》学习笔记(第19章 脑的节律)
  5. linux中单引号、双引号
  6. 保研边缘人的夏令营之旅~
  7. Linux下c++/c使用getsockopt()的记录
  8. 八年级计算机知识点总结,人教版|八年级上册各单元必考知识点汇总,收藏!...
  9. 可由低通滤波器推导变换为高通、带通、带阻滤波器
  10. Html5弹幕视频播放器插件Danmu介绍