SMEC98SP加密芯片方案实例

加密芯片SMEC98SP 典型设计案例,保护你的方案不被解密抄袭 刚买来的加密芯片是不能直接用的,需要下载自己编好SMEC98SP的程序下载到加密芯片内。 列举了几种常见的安全设计机制,由于 SMEC98SP 加密芯片为可编程芯片,开发 者可以自行组合这几种安全机制,也可另行开发出适合自己需求的安全机制。 1 基于 PIN 认证的安全设计 PIN 认证,也叫口令认证或密码认证。是用一组特定长度的数据,来确定使用者的合法 身份。实际过 阅读详情

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

STM32F103C8T6读取加密芯片SMEC98SP(SE98)的UID号 加密芯片SMEC98SP(SE98)自带全球唯一UID号,一共12字节。STM32操作加密芯片一般先读UID号,首先可以确认STM32与加密芯片SMEC98SP的硬件连接和软件接口是OK的,其次是UID可以参与到后面的一些加密算法中去,让每一个加密芯片的数据流都不一样。 首先:在加密芯片SMEC98SP中实现以下程序: //----------------------------- //取芯 阅读详情

相关推荐

加密芯片SMEC98SP(SE98)使用之一

本文开始介绍加密芯片SMEC98SP(SE98)的功能使用。 1、读取ID号 读取ID号在加密过程中不一定有用,当然可以当作 一个唯一系列号加入到加密过程中。但是读取ID号可以测试主控芯片与加密芯片之间的IIC通讯联系是否正确。 首先,在加密芯片端加入如下程序。在SMEC98SP_Demo V21文件夹中打开工程目录,SMEC98SP_I2C_Test.uvproj用keil U

中巨智能的博客 1万+

【LINUX】i.MX6学习笔记(4) IIC驱动 smec98sp

1. 引言 2. IIC简介 3. 驱动 3.1 IIC代码 主要文件是i2c-core.c,i2c-imx.c 我们使用 ret = i2c_transfer(client->adapter, &msg, 1); 其中client是在probe时候传入的,即调用i2c_imx_probe函数,进而拿到了client->adapter,确定了IIC的适配器,初始化了IIC的控制器, 在驱动中,我们调用i2c_transfer来完成IIC数据的发送,其实就是调用__i2c_transfe

YoYo的桃子树 1307

STM32操作加密芯片源代码

STM32操作SMEC98SP加密芯片的事例代码,如果需要完整代码(包括加密芯片代码),请到中巨伟业服务与支持下载 #include “stm32f10x.h” #include “stdio.h” #include “config.h” #include “util.h” #include &amp;amp;amp;lt;string.h&amp;amp;amp;gt; #include &amp;amp;amp;lt;stdlib.h&amp;amp;amp;

SinormousTech的博客 5448

I2C接口硬件加密芯片SMEC98SP在STM32F103C8T6系统上的应用

STM32F103自带的加密性能不够强,市场上的破解公司都可以破,利用ID号做的软加密也被破了,市场有可复制ID号的业务。要确保芯片不被解密,只要加一个硬件的加密芯片。硬件的加密芯片有很多种,以产品类型分逻辑加密芯片和可编程的加密芯片,从接口上分有I2C接口,SPI接口,智能卡ISO7816接口。智能卡ISO7816接口最麻烦,需要一个外部时钟才能驱动,7816协议也是非智能卡行业的人所熟悉,建议

中巨智能的博客 8015

stc单片机id加密c语言,STC单片机使用加密芯片SMEC98SP的加密实例源码

STC单片机使用加密芯片SMEC98SP的加密实例源码//2010-7-22 15:41//--------------------------------------------------------------------------------//新一代 1T 8051系列 单片机内核特殊功能寄存器 C51 Core SFRs// 7 6 5 4 3 2 1 0 Reset Value#i...

weixin_28327051的博客 1644

DSP TMS320操作加密芯片源代码

DSP TMS320操作SMEC98SP加密芯片的事例代码,如果需要完整代码(包括加密芯片代码),请到中巨伟业服务与支持下载 //########################################################################### // // FILE: SMEC98SPforTMS320 // // TITLE: SMEC98SP加密芯...

SinormousTech的博客 1933

防破解嵌入式安全加密芯片SMEC98SP快速上手指南

随着加密芯片SMEC98SP的大量客户使用,SMEC98SP的安全性能、易用性、性价比都得到客户的认可。今天写的这个文档是针对单片机入门或对加密入门的客户实现快速上手的资料。希望帮到有需要的人。

中巨智能的博客 6487

数控机床核心算法防抄板:凌科芯安SMEC98SP加密芯片实战解析

在装备制造与工业控制领域,核心算法、工艺参数与逻辑控制程序是设备价值的真正载体,但硬件易仿、算法难护的困境长期存在。传统软件授权与加密狗方案在物理暴露的工业现场中,往往因运行环境不可控而面临被逆向、扒固件与抄板的风险。硬件级安全芯片通过将密钥存储与算法校验从主控CPU中剥离,建立独立的安全信任根,为工业软件与嵌入式系统提供高强度的防抄板与防固件克隆能力。本文从安全芯片的技术原理出发,解析算法授权绑定、密钥管理、数据加密链路以及工业环境下的可靠通信设计,并结合数控机床插补、伺服控制等实时性要求高的应用场景,探

weixin_29324877的博客 252

STM32F103C8T6读取加密芯片SMEC98SP(SE98)随机数范例程序源码

加密方案不可避免要用到随机数,一般的加密都需要随机数参与运算。先在加密芯片SMEC98SP中实现以下程序;//----------------------------- //取随机数 CMD = 84 00 00 P3 //----------------------------- case 0x84: if(I2C_P1 || I2C_P2) { I2C_Buf[0] = ...

中巨智能的博客 3601

数控机床算法防抄板方案:凌科芯安SMEC98SP加密芯片实战

在工业自动化与智能制造领域,数控机床的核心竞争力不仅在于机械结构,更在于其控制软件中的插补算法、刀具补偿逻辑等关键知识产权。然而,随着设备联网与维护接口的普及,固件被拷贝、电路板被抄板、核心算法被逆向的风险日益突出。传统纯软件加密因密钥暴露在物理可接触环境中,难以抵御专业破解。硬件加密芯片通过独立的安全计算环境,为设备身份认证、密钥存储与算法绑定提供了硬件级信任根。本文从工业设备防抄板的实际需求出发,介绍凌科芯安SMEC98SP加密芯片在数控系统中的应用,涵盖选型逻辑、电路设计、密钥管理、软件绑定策略及量产

weixin_42524171的博客 188

加密芯片SMEC98SP使用手册

详细介绍了加密芯片SMEC98SP的使用说明

加密芯片SMEC98SP介绍

SMEC98SP 采用增强型 8051 智能卡内核,用户可以把 MCU 中程序一部分关键算法下载到 SMEC98SP 中运行。用户采用标准 C 语言编写程序代码,采用 KEIL C编译器,编译并下载到加密芯片中。在实际运行过程中,通过 I2C 通信,获取加密芯片中算法运行结果,并以此结果,作为 MCU 程序运行的输入数据。因此SMEC98SP 成了产品的一部分,而算法在 SMEC98SP

中巨智能的博客 4999

加密芯片SMEC98SP实现数据加密的方法

介绍了中巨伟业推出的加密芯片SMEC98SP(SE98)实现术后局加密和防破解的方法

智能卡 加密芯片 SMEC90ST

深圳市中巨伟业信息科技有限公司 最新推出一款单价低,安全性高的智能卡安全芯片,产品型号为:SMEC90ST,采用32-bit ARM SC100 SecureCore Processor 安全内核处理器。 具有接口简单(VCC, GND, IO),安全度高(EAL4+),软件灵活(可编程),上手快等特点。我们提供了各种MCU的范例程序,如:STM32, 8051, DSP芯片TMS320,Arduino Mega 2560,Microchip dsPIC33等等。欢迎到中巨伟业网站 http://www

SinormousTech的博客 2037

防破解加密芯片SMEC98SP快速上手指南

防破解加密芯片SMEC98SP快速学习编程使用指南

加密芯片SMEC98SP主控单片机的驱动程序

STC 51单片机的sMEC98SP的驱动程序代码,可直接使用

Arduino Mega 2560操作加密芯片源代码

Arduino Mega 2560操作SMEC98SP加密芯片的事例代码,如果需要完整代码(包括加密芯片代码),请到中巨伟业服务与支持下载 #include “smec98sp.h” #include “iic_smec98sp.h” void PrintHex(unsigned char *str,unsigned int len) { unsigned int i; for(i=0;i&amp;amp;amp;lt;...

SinormousTech的博客 2534

TSMaster实战:如何用LIN总线唤醒你的汽车电子系统(附波形分析)

本文通过TSMaster工具实战解析LIN总线唤醒机制。详细介绍了LIN网络唤醒的协议要求、时序参数计算,并演示了如何在TSMaster中配置唤醒信号、捕获分析波形,以及验证休眠流程。文章结合常见问题排查,为汽车电子工程师提供了从理论到实践的完整调试指南。

weixin_28308325的博客 460
上一篇: 8051操作加密芯片源代码
下一篇: 加密芯片的选择
中巨伟业
博客等级 码龄8年 69粉丝 14原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值