SMEC98SP加密芯片事例程序说明

本事例程序提供了两部分的代码:

  1. SMEC98SP加密芯片的代码;
  2. 外部MCU的代码。

事例提供了MCU借助于加密芯片来保护方案不被外界破解的典型例子。开发者可以根据自己的需求,定义出适合自己的加密方案。

目录

功能说明... 2

1.      获取SMEC98SP的UID号... 2

2.      产生MCU及加密芯片的随机数... 2

3.      验证PIN.. 3

4.      内部认证... 3

5.      外部认证... 4

6.      SHA1哈希算法认证... 4

7.      关键算法放在加密芯片内... 5

8.      构造算法... 6

9.      密文读数据... 7

10.        读数据... 8

11.        写数据... 8

名词解释:... 8

DES算法... 8

3DES算法... 9

过程密钥... 10

密钥分散... 10

附件1 – 例程密钥值... 10

附件2 – SMEC98SP样例指令... 11

功能说明

1.获取SMEC98SP的UID号

事例程序提供了通过I2C通讯获取SMEC98SP加密芯片的12字节硬件ID号的方法。

利用此ID号,可以拓展一些应用,如:一卡一密等,即每个芯片可以设计成不一样的密钥,而只需一套主密钥。

一卡一密的设计,可借用金融PBOC卡的密钥分散概念来设计,即:利用主密钥,对芯片ID做3DES运算,并将运算结果作为该卡的密钥。

示意图:

2.产生MCU及加密芯片的随机数

SMEC98SP加密芯片具有硬件随机数发生器,本例程提供了获取SMEC98SP随机数的方法。

一般的单片机很少有硬件随机数发生器,所以我们针对不同类型的MCU设计了不同的随机数产生方式:

  • 具有A/D数模转换的MCU随机数的产生:

利用ADC悬空引脚(通过读取悬空模拟针脚值)产生随机数种子,再将该随机数种子,与MCU的UID和加密芯片的UID作运算(异或运算), 使得即使相同情况下,使用不同的MCU或加密芯片,其随机数种子也不相同。

3.验证PIN

PIN码原理:MCU和加密芯片分别存放着相同的PIN码,MCU运行时,可以通过I2C发送PIN码给加密芯片进行验证,如果PIN码相同,且返回结果与预期一致,则认为加密芯片合法,否则认为加密芯片非法,而停止工作。

您可以利用SMEC98SP的UID,将PIN码验证优化一下,如:可以将每个加密芯片的PIN码设计成跟UID相关,MCU先获取SMEC98SP的UID,然后计算出对应的PIN码值,再进行验证,再判断与预期是否一致。

优点:PIN码验证实现简单,不需要添加额外的算法代码。

缺点:PIN码会在I2C线路上传输,容易被攻击者监听并破解。也可被攻击者跳过“真值点”攻击。

安全程度:★★

示意图:

4.内部认证

内部认证原理:MCU向SMEC98SP发送8字节随机数, SMEC98SP用内部认证密钥将随机数进行3DES加密后回送给MCU, 由MCU判断回送数据的合法性。

优点:密钥不会在线路上传输,不怕攻击者监听I2C通讯数据。

缺点:密钥值会存放在MCU中,如果攻击者将MCU解密,并仿真调试,有可能找出该密钥。也可被攻击者跳过“真值点”攻击。

安全程度:★★★★

示意图:

5.外部认证

外部认证原理:MCU先获取SMEC98SP的8字节随机数, 然后MCU用外部认证密钥对随机数做3DES加密,再将密文送给SMEC98SP,然后由SMEC98SP判断该密文的合法性。

优点:密钥不会在线路上传输,不怕攻击者监听I2C通讯数据。

缺点:密钥值会存放在MCU中,如果攻击者将MCU解密,并仿真调试,有可能找出该密钥。也可被攻击者跳过“真值点”攻击。

安全程度:★★★★

示意图:

6.SHA1哈希算法认证

SHA1哈希算法认证原理:SHA1为一种摘要算法,就是把任意长度的输入,通过散列算法,变换成固定长度(32字节)的输出,该输出就是摘要值。

哈希算法具有单向性,即通过一组输入数据,可以得到一组固定长度的输出(摘要),但通过输出,是不可以还原输入值。

SHA1利用这种特性,可以将输入数据前面的一部分作为密钥值,分别存放于MCU及加密芯片中。MCU在做SHA1算法认证时,只需将部分数据传给加密芯片,由SMEC98SP内部再将“密钥值”+ “输入数据”一起做SHA1运算,并回送“摘要值”,MCU再判断跟预期的值是否一致,实现SHA1算法认证。

优点:密钥不会在线路上传输,不怕攻击者监听I2C通讯数据。密钥长度及每次输入数据长度可以变化

缺点:密钥值会存放在MCU中,如果攻击者将MCU解密,并仿真调试,有可能找出该密钥。也可被攻击者跳过“真值点”攻击。

安全程度:★★★★

示意图:

7.关键算法放在加密芯片内

将 MCU 中的一部分关键代码,放入加密芯片中运行,当需要用到SMEC98SP中的算法时,由MCU 向SMEC98SP 发送指令,SMEC98SP 根据指令,在内部运行,返回结果给MCU。数据在I2C线路上传输,可以使用过程密钥加密的方式传输。

我们例程中写了一个算圆周长的简单示例,具体实现如下:

1. 加密芯片中存储算圆周长关键算法(周长C = 2 *π* R)

2. 由 MCU 发送算圆周长指令:72 00 00 01 03 (R = 03)

3. 加密芯片根据 R 值,利用周长公式,算出周长0x12,返回给MCU。

优点:关键算法在加密芯片中,即使MCU 被破解,并被理解反汇编代码,也无济于事。

缺点:暂无

安全程度:★★★★★

示意图:

8.构造算法

针对很多控制类需求,没有"关键算法"可以存放在加密芯片中,例程中构造了一个算法:取PA端口数据2字节,用过程密钥加密后,送给SMEC98SP,再由SMEC98SP解密后取反,再由过程密钥加密回送给MCU。这样就“构造”出一个算法。

如PA = 0x0000, 用过程密钥加密送给SMEC98SP, SMEC98SP解密后得到0x0000, 取反后为0xFFFF, 再用过程密钥加密给MCU,主控MCU解密后得到0xFFFF。这样, 判断IO口数据方式,只要跟之前相反就可以. 比如说PA0 高电平才做的动作, 调用了这个函数后,则判断PA0为低电平去做。

由于每次上电,过程密钥是临时产生的, 并且是变化的,这样即使PA口数据相同,在线路上通讯的数据也是不同的,而MCU程序又是基于"运算结果"而工作的,从而增加了破解难度,可以防止"真值点"攻击。

优点:数据被过程密钥加密传出,即使相同数据,每次在线路上传输的内容也不一样。

缺点:毕竟是“构造”出来的算法,算法复杂度不高。攻击者拿到MCU的汇编代码后,仿真调试,还是有可能将构造算法逆推。

安全程度:★★★★☆

示意图:

9.密文读数据

SMEC98SP内部有24K字节程序区及8K字节数据区域。其中8K字节的数据区域可以设计成自由度写,也可以设计成需要一定权限(如验证PIN,内部认证等)才能读写,还可以设计成密文方式读写。

样例中,设计了利用过程密钥密文读取数据方法。由于过程密钥每次是变化的,这样即使是相同的数据,每次读出来,在线路上传输的内容也是不一样的。

优点:数据被过程密钥加密传出,即使相同数据,每次在线路上传输的内容也不一样。

缺点:密钥值会存放在MCU中,如果攻击者将MCU解密,并仿真调试,有可能找出该密钥。

安全程度:★★★★

示意图:

10.读数据

事例程序提供了明文读取SMEC98SP中8K数据区域的方法,样例中数据的起始地址是以字节为单位。开发者可以根据自己的情况,决定是否允许读取数据或者读取数据的相关权限。

11.写数据

事例程序提供了明文写SMEC98SP数据区域的方法,样例中数据的起始地址是以字节为单位。开发者可以根据自己的情况,决定是否允许写入数据或者写入数据的相关权限。

名词解释:

DES算法

DES算法是一种比较传统的加密方式,其加密运算、解密运算使用的是同样的密钥,信息的发送者和信息的接收者在进行信息的传输与处理时,必须共同持有该密码(称为对称密码),是一种对称加密算法。DES是安全性比较高的一种算法,除了穷举外,没有其他方法可破解。DES—密钥长度为8字节,数据为8字节。

3DES算法

3DES是针对DES算法密钥过短、而改进的一个措施,被称为“3DES”。其实是通过执行3次DES来达到增加密钥长度和安全。3DES—密钥长度为16字节,数据为8字节。

过程密钥

过程密钥是一种会话密钥(session key),是在使用过程中,基于主密钥而临时生成的加解密密钥,会话结束后,过程密钥失效。

密钥分散

密钥分散算法简称Diversify,是指将一个双长度的密钥MK,对分散数据(也叫分散因子,如:卡号等)进行处理,推导出一个双长度的密钥DK。

推到DK左半部分的方法是:

1、将分散因子的最右8个字节作为输入数据;

2、将MK作为加密密钥;

3、用MK对输入数据进行3DES运算;

推到DK右半部分的方法是:

1、将分散因子的最右8个字节求反,作为输入数据;

2、将MK作为加密密钥;

3、用MK对输入数据进行3DES运算;

这样MK根据分散因子,可以得到分散密钥DK。但根据DK,却无法得到MK。

附件1 – 例程密钥值

事例程序中,MCU及SMEC98SP加密芯片的各密钥值如下:

内部认证密钥:00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

外部认证密钥:10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F

SHA1哈希算法认证密钥:20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F

产生过程密钥的主控密钥:30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F

PIN码:55 66 77 88 99 AA BB CC

声明:本事例程序,只是提供了如何利用SMEC98SP保护方案不被破解的样例,开发者可以根据自己的需求,参照本例程,设计自己的加密保护方案。千万不要使用我们例程同样的密钥值!另外在MCU中,我们建议每组密钥值请打散后分开存放于不同地方,这样即使在攻击者把MCU解密后,也很难拼凑出完整的密钥值。

附件2 – SMEC98SP样例指令

;Pin认证

--> 70 00 00 08 55 66 77 88 99 aa bb cc

<-- 9000

;哈希算法认证

--> 71 00 00 10 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

<-- 9000 3BD683BFC40F33254DE1BD6D0C2650BA1D07A56A

;实现一个简单算法,计算圆周长,外部输入的是半径,计算出周长。C = 2*3.14*R

--> 72 00 00 01 02

<-- 9000 0C

;外部认证,先取随机数,再做认证

--> 84 00 00 08

<-- 9000 D309685B156B398B      ;随机数每次不同

--> 82 00 00 08 7fa49dbf221a8751  ;根据随机数,外部认证密钥计算

<-- 9000

;取芯片唯一序列号

--> 83 00 00 0C

<-- 9000 33D60D08844C905016707726  ;每个加密芯片不同ID号

;取随机数

--> 84 00 00 08

<-- 9000 27F5EEDC149FE9FB

;内部认证

--> 88 00 00 08 11 22 33 44 55 66 77 88  ;假设主控芯片随机数1122334455667788

<-- 9000 56BE32F01E736D0D

;产生过程密钥 先取SMEC98SP的随机数, 再送入随机数, 计算出过程密钥

--> A0 00 00 08 11 22 33 44 55 66 77 88  ;假设主控芯片随机数1122334455667788

<-- 9000 2E2AB595F5186905                ;SMEC98SP随机数每次不同

;过程密钥为:fede17ed454baa2e (303132333435363738393A3B3C3D3E3F =>(1122334455667788 ^ 2E2AB595F5186905)3DES加密结果)

;端口数据运算

--> A2 00 00 08 df51daa6c1fdb929             ;假设端口数据为:0000, 过程密钥:fede17ed454baa2e,(传入数据:df51daa6c1fdb929 为过程密钥fede17ed454baa2e 对 0000000000000000(端口数据0000+6字节00填充)做DES加密 )

<-- 9000 C0E7FECFABB13417          ;输出数据C0E7FECFABB13417,用过程密钥解密后为ffffffffffffffff, 即为0000000000000000的取反"算法", 该"算法"可以根据需要修改

;读取FLASH

--> B0 00 00 10

<-- 9000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

;密文读取FLASH

--> B1 00 00 10

<-- 9000 C0E7FECFABB13417C0E7FECFABB13417    ;用过程密钥fede17ed454baa2e解密后为FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

;写FLASH

--> D6 00 00 10 0102030405060708090A0B0C0D0E0F10

<-- 9000

SMEC98SP加密芯片方案实例相关推荐

  1. PHP项目提成,php实现的递归提成方案实例

    摘要:本文实例讲述了php实现的递归提成方案.分享给大家供大家参考,具体如下:最近CRM项目中用到了递归提成的方案,分析如下:SQL语句如下:CREATE TABLE `crm_proxy_bonux ...

  2. 配电终端加密芯片方案

    配电终端加密芯片方案      随着电网智能化建设的深入进行,配网安全也逐渐的被各大电网及电力公司所重视.相关部门也于2009年陆续出台了一系列的有关安全的指导性方案与规定.万协通依据电监会<电 ...

  3. 加密U盘专业加密芯片方案

    加密U盘方案 背景介绍:    随着信息化的发展,人们对计算机的依赖性越来越高,移动存储也随之蓬勃发展.据有关资料表明,在现有的计算机用户当中至少80%以上拥有一个U盘或硬盘,30%以上的用户拥有移动 ...

  4. MySQL数据库之常用分库分表方案实例分析

    一.数据库瓶颈 不管是IO瓶颈,还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载活跃连接数的阈值.在业务Service来看就是,可用数据库连接少甚至无连接可用.接下来就 ...

  5. 移动互联网长连接方案实例

    1.笔者本人现在在一家创业公司担当整个平台架构的角色,而这家公司是做一移动互联网相关的一些应用产品,由其现在正在和中国最大的互联网公司之一进行合作,负责该互联网公司的手机终端的长连接推送服务,所以有一 ...

  6. 安全芯片介绍-身份认证加密芯片方案

    MOD8ID是一款具有金融级安全等级的芯片,芯片带有大量传感器,一旦检测到非法探测,芯片将停止工作.MOD8ID结合安全认证.关键参数存储.部分功能执行等方式,使软硬件系统脱离安全芯片后无法独立运行, ...

  7. 云客网:企业网站SEO优化方案实例

    早先曾经受邀帮助某企业网站进行了一次SEO优化分析,解决这个网站存在的种种不规范的SEO问题,最终提高了该网站整体的页面排名和权重,这里杭州SEO博客就和大家分享一下这个案例,云客网希望能和大家一起探 ...

  8. 企业级MySQL数据库备份方案:增量备份、全量备份、逻辑备份

    一份好的备份方案无非包括以下几点: 为什么需要备份? 备份的方式有哪些? 某几种备份方式的区别在哪? 备份实战操作概述 恢复实战操作概述 其它备注信息 那么,此文将从以上几个角度,结合一些实际的实战经 ...

  9. 基于 EG6831 的无感 BLDC 控制方案

    屹晶微电子有限公司 版本号:V1.11 电机控制解决 方案 Motor Control Solution ---------基于 EG6831 的无感 BLDC 控制方案屹晶微电子有限公司 基于 EG ...

最新文章

  1. 哈尔滨学院 计算机等级考试证书,2018年9月黑龙江哈尔滨学院计算机等级考试证书领取通知...
  2. C语言volatile关键字的作用
  3. 今日代码(200924)--缺失值处理
  4. [转载] Java之嵌套接口
  5. 【图像去噪】基于matlab中值+均值+高斯+Laplacian+Sobel+Prewitt图像去噪【含Matlab源码 025期】
  6. 均线突破matlab编程,通达信均线粘合突破选股指标公式
  7. 【IDE-Visual Studio】无法启动程序“xxx.exe”。由于应用程序配置不正确,未能启动此应用程序。
  8. 输入等值线参数绘制等值线图python_专题复习:等值线(上)
  9. 微信小程序英文版:实现一键切换中英双语版(已组件化)
  10. 查看计算机内存条型号,查看本机内存条型号_查看电脑内存条型号
  11. Sportisimo EDI项目需求及包装标准
  12. 使用 craco 对 cra 项目进行构建优化
  13. android wifi分享文件下载,WiFi文件共享
  14. 十八、疑案系列之——永远的无头公案
  15. 一个出轨带来的家庭悲剧
  16. django异常日志_django uwsgi 错误日志分析例子
  17. Python爬取梨视频并下载【ajax抓包】
  18. 安全防御之入侵检测篇
  19. IDEA设置背景图片
  20. DBLINK使用的思考

热门文章

  1. C专家编程 第8章 为什么程序员无法分清万圣节和圣诞节 8.2 根据位模式构筑图形
  2. DataTable常用数据筛选方法
  3. CentOS 7.6 部署frps
  4. 梅西凑齐七个金球成功召唤神龙
  5. 服务器主板2个芯片供电端短路了,笔记本主供电短路维修思路
  6. html视频标签video旋转播放方向,video视频文件有方向怎么处理?
  7. sem推广如何优化关键词排名?
  8. Android 高级面试
  9. 云适配签约中远海运特运 构建移动BPM平台
  10. 用sympy库解常微分方程