转载自 f2k5

1. 加密芯片的功能和基本原理.

加密芯片主要用来保护烧进Flash里面的程序即使被盗版者读走, 在非法板上也不能运行, 从而达到保护自己劳动成果的目的.

本文主要内容:

一.    加密芯片的工作原理

二.    DVS项目中配置区的寄存器配置

三.    接口描述

四.    DES和自定义算法.

一.    加密芯片的工作原理.

1.       硬件连接

AT88SC0104C的封装外型和内部结构模块图如下:

AAAAAAAAAAAAAAAAAA

不能拷图~~~~~~

AAAAAAAAAAAAAAAAAA

连接好电源和地后, 将SDA和SCL与主控HOST的GPIO连接好就可以了.

2.       AT88的工作模式和工作机制

AT88SC的工作模式有三种, 标准, 认证和加密三种模式, 标准模式下可以将该芯片视为一个常用的EEPROM来访问. 不过访问时序要按招它自己的Write/Read User Zone命令来读写数据. 认证模式则要复杂的多, 讨论认证模式之前要先研究下这个加密芯片的算法F2.

F2算法的输入是一个系统产生的随机数Q0, 还有从加密芯片0x50,0x60,x070,x080位置读出来的8个字节的密文Ci和一个种子Gc, 芯片内部一共四组用户访问区, 因此对应着四组访问寄存器AR和密码寄存器PR, 以及四组密码寄存器CryptogramCi和四组密文种子Gc.

它的输出是一个八位的新密文Q1, 主机在调用F2时生成Q1, 同时将Q0和Q1用Verify Authentication命令送给AT88, AT88收到认证命令后内部根据保存在密文区的Ci值和种子Gc做同样的运算生成Q2, 同时生成一个密钥Sk, 然后Q2与Q1作对比, 如果结果一直说明认证成功, 它用Q2更换掉密文区的Ci, 同时生成新的密文更新Session Encryption Key配置区.

第三中模式是加密模式, 它是在认证的基础上在利用Sk替代Gc再做一次F2运算, 并将结果用Verify Encryption命令送给AT88,如果这次运算成功, 芯片内部会启动加密机制, 对总线上传输的数据进行加密\解密.

3.       访问用户数据区.

以AT88SC0104为例, 它的数据存储区分成四个分区, 每个数据区有32字节容量. 大小为4*32=128B=1028b

先看用户区相关的几个配置寄存器

AR: 访问寄存器,

PM1

PM0

AM1

AM0

ER

WLM

MDF

PGO

Bit7

Bit0

PM1-PM0: 用来设置用户区的读写是否需要密码.

AM1-AM0:用来设置用户区的访问是否需要认证.

ER,WLM,WDF, PGO请参考NDA文档

PR:

AK1

AK0

POK1

POK0

res

PW2

PW1

PW0

Bit7

Bit0

AK1-AK0:选择四个种子中的一个作为认证的输入.

POK1-POK0:双向认证时使用

PW2-PW0:选择8套密码之一作为验证密码.

设置好AR寄存器后就可以通过下面的命令步骤来对用户区读写.

1.       SetUserZone

2.       如果需要认证加密启动认证命令

3.       读写数据

4.       发送checksum

具体可以参考我的代码.

二.    DVS项目中AT88SC0104的配置.

加密芯片的使用阶段包含三个阶段.

1.开发阶段

这个阶段主要用来调试代码, 这个时候要非常注意不要随便的访问某些寄存器, 因为超过某些次数寄存器如AAC, PAC的计数次数之后, 这个片子会被锁死, 这样unlock配置区会失败. 所以调试时要非常小心..

DVS项目中主要用ATSC88来进行认证, 我把所有的种子都设成一个值, AR0-3 PR0-3也设成一样, 这样就可以用一个种子访问整个128字节空间.

AR PR分别设成认证不需要密码模式, 见下面的代码

data[0]=0xDF;//ARnormal authentication, encrypted required

data[1]=0x23;//PR

cm_WriteConfigZone(0x20, data, 2, 0);

data[1]=0x63;//

cm_WriteConfigZone(0x22, data, 2, 0);

data[1]=0xa3;//

cm_WriteConfigZone(0x24, data, 2, 0);

data[1]=0xe3;//

cm_WriteConfigZone(0x26, data, 2, 0);

NC设成0xff 0xff 0xff 0xff 0x00 0x00 0x00然后每出厂一个NC值加一.

其它比如Ci Sk等寄存器可以用默认值, 因为在芯片工作起来之后它们时动态变化的.

DCR寄存器要用它的默认值0xFF, 对访问出错次数进行限制. 但是在调试阶段可以设成0x0F.

最重要的一个寄存器时种子Gc, 它是根据Nc用自定义的算法和一个密钥运算得出的, 这组寄存器对于整个加密芯片非常关键, 因为熔断后它是不可读的, 只能通过自定义算法算出.

2. 熔断阶段

完成上边的配置后就可以用熔断命令对芯片进行熔断操作. ****这里要非常注意一定要确认自定义算法是否唯一能够算出Gc.*****

3. 出厂阶段.

做好熔断后就可以将加密芯片焊到板上了.

三.    接口描述.

对于应用层, 只能看到下面四个接口:

int SE_Load_Data(int zone, puchar data, uchar len);

int SE_Save_Data(int zone, puchar data, uchar len);

int SE_Auth_Done()

int SE_Auth_Init();

int SE_Auth_Init();

这个函数主要完成硬件GPIO的初始化, 并且对AT88SC的时序和类型进行测试.

int SE_Auth_Done()

这是个认证函数, 每调用一次, 主机会发起一次加密认证操作.

int SE_Load_Data(int zone, puchar data, uchar len);

int SE_Save_Data(int zone, puchar data, uchar len);

这两个函数时用来读写用户区数据, 他采用的时加密认证, 没有密码, 对时序加密.

四.    自定义算法

void des_GcCal(uchar *Ncc, uchar *Key, uchar *dataO);

这是DES算法的变种, 它的输入是Ncc---从芯片内部读出的卡号.

Key---加密密钥, 这组数据用来对Ncc加密, 整个DVS项目采用一个相同的私钥来加密所有Ncc. 这样得到的dataO就是种子Gc.

这个算法可以公开, 但是Key需要保密. 后记: 其实这里面有很多东西我没有弄清楚的, 比如AR寄存器里面有个ER位的用法, 我把它设成0之后就出现问题了,
还有AM1-AM0都为00时的双向认证模式. 调试这颗芯片要特别小心, 不然很容易把它锁死废掉了.

AT88SC0104C加密芯片的工作原理相关推荐

  1. 如何选择加密芯片以及加密芯片的工作原理

    如何选择加密芯片: (1)安全性:不同加密芯片,主要却别在于所选单片机不一样,加密芯片开发人员不一样,加密方式实现的差异:只要加密芯片实现方式上没有很大漏洞,以及加密算法不过于简单,所选加密芯片基本会 ...

  2. AT88S153工作原理与应用

    AT88SC153加密卡的原理和应用 AT88SCxx系列加密存储芯片是Atmel生产的具有多用途的加密存储系列芯片 其中AT88SC153是该系列芯片的典型代表.由于其具有多达2KB的EEPROM, ...

  3. 汽车钥匙芯片工作原理 浅谈汽车钥匙芯片作用及分类

    工程师谭军 发表于 2018-10-08 10:01:00 http://m.elecfans.com/article/791926.html 本文主要是关于汽车钥匙芯片的相关介绍,并着重对汽车钥匙芯 ...

  4. 2021年大数据ELK(十八):Beats 简单介绍和FileBeat工作原理

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 Beats 简单介绍和FileBeat工作原理 一.Beats 二.FileB ...

  5. 深入理解Nginx工作原理

    1 反向代理 1.1 概念 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给intern ...

  6. 高频开关电源原理_程控开关电源的工作原理

    本文介绍了开关电源的工作原理以及它的特点. 程控开关电源要要比线性电源复杂得多. 下图是典型的开关电源工作原理图. 首先对 220 V/50Hz 的 AC 输入,通过桥式整流器进行整流 储能电容对整流 ...

  7. Servlet生命周期与工作原理

    Servlet生命周期分为三个阶段: 1,初始化阶段  调用init()方法 2,响应客户请求阶段 调用service()方法 3,终止阶段 调用destroy()方法 Servlet初始化阶段: 在 ...

  8. java的工作原理你知道吗_每天用Mybatis,但是Mybatis的工作原理你真的知道吗?

    近来想写一个mybatis的分页插件,但是在写插件之前肯定要了解一下mybatis具体的工作原理吧,于是边参考别人的博客,边看源码就开干了. 核心部件:SqlSession Executor Stat ...

  9. linux网络管理原理,Linux__网络管理(物理层 数据链路层 网络层工作原理)

    千锋云计算逆战班11点后打卡 今天学习后,进行复习下,物理层 数据链路层  网络层 的工作原理 物理层关心的两件事情:1.信号 2.介质 先说信号:信号分为模拟信号和数字信号 模拟信号: 模拟信号,不 ...

最新文章

  1. GDI绘制时钟效果,与系统时间保持同步,基于Winform
  2. qmake, makefile, make是什么东东,makefile简介!
  3. 计算机网络通信技术课程的基本知识点内容,河北《计算机网络与通信(2339)》自学考试大纲...
  4. 修改网站首页批处理_几个神奇的批处理,万事不求人!
  5. 前端 相机 自定义取景框_索尼ZV-1数码相机:专业而易用,Vlog和网络主播的进阶良机...
  6. 华信mysql数据恢复_华信Mysql数据库修复工具1.0
  7. 如何在Vue项目中使用websql数据库
  8. Python自动化下载模块
  9. Win10:fastboot驱动问题解决方案
  10. win11用虚拟机win10安装docker
  11. pgpool-II常见错误
  12. 百度网址安全中心拦截解除的办法分享
  13. hbase 0.98.1集群安装
  14. php聊天室发送表情,聊天室之表情发送
  15. 2021年京东最新炸年兽活动用脚本会怎样?JD炸年兽活动参与教程
  16. Google Chrome源码剖析
  17. 《Reading Wikipedia to Answer Open-Domain Questions》浅析
  18. Python练习题——第九题:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n
  19. 这3种直觉思维,会让你越来越“穷”!
  20. 1.Java内存区域与Java对象

热门文章

  1. 2018上海交大计算机考研,2018上海交大学硕考研经验贴
  2. 【JS】把JavaScript脚本作为书签收藏起来并可单击执行
  3. 计算机pm,PM、PMP、PMO分别都是什么 以及三者的关系
  4. 计算机学院十四五工作规划,计算机学院举行教学指导委员会成立暨十四五规划修订会议...
  5. 关于如何清除百度全家桶的一些经验
  6. K近邻思想解决字体反爬
  7. cad批量转换pdf格式
  8. HTML-用户登录界面
  9. 在智能制造背景下,传统工厂何去何从?
  10. python/sympy计算施密特正交化向量