电子元器件应用-使用SHA iButton实现数字认证和交易的应用

更新时间:2023-04-10 17:18:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

1 of 38

绪论

Dallas SHA iButton? (DS1963S) 是一个智能令牌具有很高的安全性并支持多种服务本文简要介绍了使用SHA iButton 实现数字认证和交易的应用并以一个示范服务程序为例来具体说明安装服务数据和处理电子交易的步骤本文还论述了主要API的调用方法介绍了命令注释列表和实现各种API的数据流程

SHA iButton适用于多种应用

批量运输

电子门锁

门镜控制

计算机和网络访问控制

电话付费

停车计费器

预付费表

自动售货机

软件授权

什么是

SHA

SHA安全散列算法经过加密专家多年来的发展和改进已经成为公认的最安全并被广泛使用的散列算法之一在SHA iButton Dallas Semiconductor的型号为DS1963S中实现的SHA 算法是SHA-1它符合联邦信息发行标准180-1即FIPS 180-1杂散函数可以简单的理解为

取一串输入码称为预映射或信息并把它转化为固定的较短长度的输出序列称为散列值

信息摘要或信息认证代码的过程由于SHA是对压缩后的信息摘要进行检查它对检测输入序列中的错误或变化是非常有效的单向散列函数的特征是产生摘要容易但从给定的摘要反求出输入信息非常困难单向散列函数的安全性就在于其产生摘要的操作过程具有较强的单向性在输入序列中嵌入密码任何人在不知道密码的情况下都不能产生正确的摘要从而保证其安全性SHA将输入流按照每块512位64个字节分块并产生20个字节被称为信息认证代码MAC或信息摘要的输出如果输入长度不是512位算法就把它凑成最接近于512的整倍数值下图说明了由多个输入块512位产生最后的MAC的链状图

应用笔记 157

SHA iButton API 概述iButton是Dallas Semiconductor的注册商标

AN157 2 of 38 SHA 计算器把输出 MAC 存入

暂存器 Dallas SHA iButton DS1963S 中的SHA

Dallas SHA iButton

DS1963S 在专门的快速电路中执行SHA-1

计算它可以在1ms 之内完成一次SHA-1计算SHA-1引擎的输入被限制为一块通过设计SHA-1引擎的输入数据块包括存储在读/写数据页32

个字节暂存器中的用户数据15

个字节和服务供应商预装在不可读取的加密页中的密钥8

个字节参见图1计算结果MAC 保存在暂存器中用于后续操

作由于对特定SHA 操作的依赖性该输出MAC 在通过外部访问的暂存器中不一定要隐藏起

SHA iButton 中MAC 生成器 图1

SHA iButton 的特性 SHA iButton 是一个只需最少硬件就能访问大约4k 位读/写数据的载体通过激活集成的512位SHA-1引擎算出基于器件内存储信息的160

位的信息认证代码

MAC 数据依照1-Wire ?协议串行传输该协议只需一根数据连线和一根地线每个SHA iButton 利用其相应的密钥和页计数器能够同时服务于8个独立的应用中SHA iButton

也可以作为协处理器保护系统密钥的安全也可以协助本地交易主机计算用户令牌认证和确认应用数据所需要的MAC SHA iButton 和其它iButton

一样有附加的存储区域

称为暂存器

向存储器写数据时用作缓冲器SHA iButton 的暂存器还用于向SHA-1引擎注入数据段或接收/比较信息认证代码向iButton

写数据的时候

数据首先被写到暂存器中

在这里

数据能被读回并验证是否有通信错误

数据被验证之后

复制暂存器命令把数据传到目标存储器位置这一过程在没有可靠的电接触环境下可以确保数

据的完整性

DS1963S SHA iButton

有如下特殊性能

4096位可读/

写的非易失存储器分成16

页每页256位

16个存储页中的8个有独自的64位密钥和32位只读可回溯写次数计数器 内置512位SHA-1引擎

作为用户令牌器件能同时支持8个独立的服务

可用作协处理器存储系统密钥和计算用户令牌认证确认应用数据所需要的MAC

1-Wire 是Dallas Semiconductor 的注册商标

AN157

3 of 38

SHA iButton 存储器图

通用的读/写访问数据存储器16页每页32个字节 页码

地址范围 (TA1 TA2)

密钥号 计数器值 计数器递增

0 0000H

至 001FH 0 0

无 1 0020H 至 003FH 1 1 无 2 0040H 至 005FH 2 2 无 3 0060H 至 007FH 3 3 无 4 0080H 至 009FH 4 4 无 5 00A0H 至 00BFH 5 5 无

6 00C0H

至 00DFH 6 6 无 7 00E0H 至 00FFH 7 7 无 8 0100H

至 011FH 0 0 写数据时

9 0120H 至 013FH 1 1 写数据时 10 0140H 至 015FH 2 2 写数据时 11 0160H 至 017FH 3 3 写数据时 12 0180H 至 019FH 4 4 写数据时 13 01A0H 至 01BFH 5 5 写数据时 14 01C0H 至 01DFH 6 6 写数据时 15 01E0H 至 01FFH 7

7 写数据时

不可读取不可读取的加密存储器的加密存储器

八个64位密钥

页码

地址范围 (TA1 TA2)

说明

16 0200H 至 0207H 密钥 0

0208H 至 020FH 密钥 1 0210H 至 0217H 密钥 2 0218H 至 021FH 密钥 3 17 0220H 至 0227H 密钥 4 0228H 至 022FH 密钥 5 0230H 至 0237H 密钥 6 0238H 至 023FH

密钥 7

值得注意的是只有向第8到第15页写数据时页计数器才会递增在特定操作中一对匹配数据页共用一个计数器和密钥例如第0页和第8页共用0号计数器和0号密钥向第8页写数据时0号计数器增1而向第0页写数据时对0号计数器没有影响在第0页或第8页执行Read Authenticated Page 读鉴别页命令时都将返回0号计数器的值计算MAC 都将使用密钥0

AN157

4 of 38

只读计数存储器

九个32位计数器

页码

地址范围

(TA1 TA2)

说明

0260H 至 0263H 第8页的写次数计数器 0264H 至 0267H

第9页的写次数计数器

0268H

至 026BH 第

10页的写次数计数器

026CH 至 026FH 第11页的写次数计数器 0270H 至 0273H 第12页的写次数计数器 0274H 至

0277H 第13页的写次数计数器 0278H 至 027BH 第14页的写次数计数器 19

027CH 至 027FH

第15页的写次数计数器 0280H 至 0283H 密钥0的写次数计数器 0284H 至 0287H 密钥1的写次数计数器 0288H 至 028BH 密钥2的写次数计数器 028CH 至 028FH 密钥3的写次数计数器 0290H 至 0293H 密钥4的写次数计数器 0294H 至 0297H 密钥5的写次数计数器 0298H 至 029BH 密钥6的写次数计数器 20

029CH 至 029FH

密钥7的写次数计数器

21 02A0H 至 02A3H

PRNG 计数器 (SHA 引擎实现计数)

在电子付费应用中使用SHA iButton

SHA iButton 既可以用作用户令牌又可以用作协处理器协处理器可以完成交易会话期间的器件认证和验证应用数据所需要的MAC 计算无需执行SHA 计算代码有效缩短了开发周期把SHA iButton 用作协处理器的另一个好处是可以把系统密钥存储在钮扣内而钮扣不能够被检测也就不会泄漏密钥在本文中我们假设SHA iButton 协处理器用于本地主机执行必要的器件认证和服务数据验证本文将用到的一些术语定义如下

本地主本地主机机包含必要组件的硬件单元它能利用用户SHA iButton 或其它ePurse 令牌完成电子交易从功能上讲本地主机包含三个关键部件交易控制单元典型的微处

理器

诸如显示器和令牌接收器的用户接口协处理器

地址编码AN ROM ID 注册号序列号可替代使用代表DS1963S 或其它任何1-Wire 器件内部由工厂激光刻入的全球唯一的64位码

AN157

5 of 38 交易控制单元TCU 在协处理器和用户令牌之间进行通信的组件

典型的微处理器

实现器件认证和服务数据验证

系统认证密钥主认证密钥可替代使用安装在协处理器中的密钥用于鉴别用户器

器件认证密钥安装在用户iButton 中的密钥

本地主机可以验证其是否属于该系统

通过绑定系统认证密钥与用户器件的地址编码保证了每个用户器件认证密钥的唯一性

系统签名密钥主签名密钥可替代使用代表安装在协处理器中用于签名和验证服务

数据的密钥

签名

由服务数据

系统签名密钥和其它服务或器件指定数据计算出的信息认证代码

MAC 签名通常嵌入于服务数据页中

使本地主机能快速地验证服务数据

器件数据用户数据应用数据账户数据交易数据代表诸如访问控制或电子付费

应用的服务数据

用户器件用户令牌

数字认证或电子付费应用中服务数据的数字载体

本文凡是提

到用户器件或用户令牌时都指

DS1963S SHA iButton

协处理器

本文协处理器是一个计算单元

能够完成交易过程中所必要的MAC

计算

服务安装

为了使用器件认证和数据验证的SHA iButton 必须在协处理器和用户iButton 中安装适当的数据和密钥

这个过程通常被称为服务初始化协处理器内装有两个密钥系统认证密钥和系统签名密钥系统认证密钥用来对每个用户器件建立唯一的认证密钥和验证用户器件是否属于该系统系统签名密钥用于产生签名和验证服务数据的有效性用户iButton 内只需安装一个密钥唯一的器件认证密钥值得重视的是用户器件SHA iButton 的认证密钥是唯一的它与

系统认证密钥不同

利用用户的器件地址作为计算器件密钥输入的组成部分

服务数据有两类

静态的和动态的

静态服务数据在交易期间从不发生改变而动态服务数据

在每次交易的过程中总是进行更新比如用于办公室或饭店的访问控制的服务数据含有定时的访问特权信息这些数据需要进行验证但同步处理器本地主机不对它进行修改另一方面自动售货机或停车计费器则需要从账户借记适当的金额并对减少后的余额数进行再次数字签名

使其能够被其它本地主机加以验证如果系统只是要知道一个用户器件是否属于该

系统

经授权的用户

而不必根据服务数据的内容确定是否交易

就不必保护服务数据

AN157

6 of 38 总的说来

电子付费系统包含以下步骤

对于服务安装

1 把系统认证密钥安装到SHA iButton 协处理器

2 把系统签名密钥安装到SHA iButton

协处理器

如果需要数据保护

对于每个用户器件

3 把用户器件认证密钥安装到用户SHA iButton

4 把有签名的服务数据安装到用户SHA iButton

如果需要数据保护

对于处理交易

5 使用SHA iButton 协处理器完成用户器件认证

6 使用SHA iButton 协处理器完成用户数据验证

如果需要数据保护

器件认证

为了认证用户SHA iButton TCU 会请求协处理器计算一个随机质询1并将其送回用户

iButton 请求它利用Read Authenticated Page 命令计算应答MAC 用户iButton 利用质询

服务数据自身的地址编码及其认证密钥计算应答

MAC 然后本地主机读取该应答

MAC 并与它随后的

计算进行比较为了验证应答

MAC TCU 会请求协处理器利用用户器件地址编码和系统认证密钥首先重新计算用户iButton

唯一的器件认证密钥随后TCU 请求协处理器利用重新计算的器件认证密钥和发送给用户iButton 的质询码计算MAC 协处理器计算出的MAC 再和从用户iButton 读取的应答MAC 进行比较以确定用户器件是否合法

这两步处理过程是必要的因为本地主机不能读取用户器件的密钥而且用户器件认证密钥与系统认证密钥不同值得注

意的是器件认证只需要用户器件携带有正确的认证密钥

并不关心服务数据的内容

服务数据保护

服务数据保护可以通过嵌入系统产生的服务数据MAC 签名实现利用系统签名密钥服务数据

服务数据页码页计数值和用户器件地址编码产生签名利用签名可以检测出任何未经授权的变动防止重放服务数据为了验证服务数据TCU 会令协处理器用系统签名密钥和所有运行期间获得的服务用户器件数据重新计算MAC

签名然后MAC 将与嵌入的签名进行比较以确定数据的有效性

对于动态数据服务而言服务数据更新后将计算一个新的签名来

反映数据变更和新的页计数值这个新的签名将嵌入到服务数据

并保存到用户器件中

1该质询从某中意义上讲是动态的是因为它受SHA 引擎计数值的影响每次运行SHA 引擎计数器都会递增而且用户iButton 不可能收到同一质询两次关于产生质询和密钥更详细的资料参见

AN152

AN157

7 of 38 静态数据服务 静态数据服务只需进行器件认证和服务数据验证

以便做出服务的决定器件认证代表验证用户器件是否属于系统的过程

器件认证在特定的访问控制应用中也许是唯一需要的手续实现

器件认证的方法多种多样a 读取器件的地址编码AN 搜索数据库查看其是否属于系统b

执行一次质询和应答过程检测器件是否带有有效密钥c 其它方法SHA iButton 用第二种方法认证器件在这种质询与应答方法中

本地主机请求用户器件根据其隐藏的认证密钥与密钥相链接的存储数据和本地主机提供的质询码计算一个应答MAC 用户器件从不向外泄漏它的密钥这种认证机制使得系统非常安全尤其是在本地主机与用户器件之间的通信链路不

安全的情况下更有益此外

对于用户器件的每次服务请求本地主机都发出不同的质询使每次应答MAC 均不相同

这就使得截取的通信数据位毫无用途

完成静态数据服务的典型步骤如下参见图

2

1 从用户iButton 读取地址编码AN

2 如果不是SHA iButton 则转到其它决定过程

3 通过质询和应答过程认证用户iButton 如果用户iButton 不属于系统则退出

4 需要验证服务数据吗

如果不需要

则提供服务

5 核对服务数据是否有效无效则退出

6 提供服务

静态数据服务判定树 图2

吗 吗

AN157

8 of 38

动态数据服务

除了在执行静态数据服务时的认证和数据验证外利用动态数据的服务还需要额外的步骤来更改服务数据重新建立签名和把重新签名的数据保存到用户iButton

典型步骤概括如下

1 从用户iButton 读取地址编码AN

2 如果不是SHA iButton 则转到其它决定过程

3 通过质询和应答过程认证用户SHA iButton 如果用户SHA iButton 不属于系统则退

4 服务数据是否允许提供被请求的服务不允许则退出

5

执行服务数据验证如果无效则退出

6 更改服务数据并建立新的签名

7 把有签名的新服务数据存储到用户iButton

8

再次执行用户器件认证以确保用户器件中的原始服务数据被更新

9 提供服务

动态数据服务判定树 图3

的服务吗

AN157

9 of 38 寄主多重服务

可以利用1-Wire File Structure OWFS 2来促成一个用户iButton 中共存多重服务 每种服务

数据存储在自身的服务文件中为便于存取

多个文件按照目录表排列本地主机在目录列表中为一次服务读取文件入口地址获取实际页的位置和用于服务的页数实际服务数据取自服务文件

特殊的文件可以存储在协处理器和其它iButton 中把它们当作特殊器件进行验证例如我们在SHA iButton 中建立了一个名为COPR.0的文件并把它当作协处理器进行验证而且把完成一次交易的TCU

所必须的全部数据存于该文件中我们可以在iButton 中建立另一个名为COLL.102的文件把它作为移动数据收集器进行验证移动数据收集器有权从本地主机获得数据随后转储到中央数据库中当交易控制单元TCU 开始工作的时候它从协处理器iButton 读取信息准备处理交易当TCU 检测到有数据集合器与其连接时将执行必要的验证输出被请

求的数据

协处理器文件

向DS1963S SHA iButton 中安装适当的系统密钥和数据可将其配制成协处理器对于没有数据

验证的静态数据服务协处理器中只安装了系统认证密钥而动态数据服务或者需要数据验证的静态数据服务则必须在协处理器中安装系统认证密钥和系统签名密钥协处理器也能执行认证用户iButton 和验证服务数据所必须的全部MAC

计算

在我们的示范中在SHA iButton 中建立了一个充当协处理器的协处理器文件

COPR.0COPR.0包含了交易控制单元为处理交

易所必须的全部数据

协处理器文件数据结构3 表1

协处理器文件COPR.0 的结构

字节数

抽样资料 备注

服务数据文件名 5 DLSM.102 只保存基本名(DLSM)和扩展名而不保存

分隔符.

扩展字节按照十六进制数保存66H=102 d

签名页码 1 8 合法的选择是第0页或第8页第0页用做

文件目录表

认证页码 1 7 从足够高的页码开始为存储文件留出足够

的页

工作空间页码 1 9 在交易过程中是协处理器建立用户器件唯

一的认证密钥所必需的

2 1-Wire File Structure OWFS 为驻留在包括iButton 在内的1-Wire 器件中的数据提供目录结构当它们在其它文件系统允许随机访问命名后的文件按照OWFS 的定义和规则利用容量达16M 字节的器件足以存储嵌套目录中的多重文件这些器件被组织为2…65535页每页32…256个字节关于OWFS 结构和配套支持的详细信息参见Dallas Semiconductor/Maxim 应用笔记114

3在执行服务的示范中所有的数据字节按照最低有效位在前写入

AN157

10 of 38 协处理器文件COPR.0 的结构

版本号 1 1 服务供应商利用版本号跟踪服务配置的变

安装数据代码

4 04 0E 00 63H 安装代码按照M D YY 格式存储YY = 1900年以后的年份比如4/14/1999 = 04 0E 00

63

器件认证密钥绑定数据

39 39FFH

字节 服务供应商用它将认证密钥绑定到用户SHA iButton 该数据块的前32个字节写到数据页剩下的 7个字节在计算器件认证密

钥时写到暂存器中暂存器实际上包括15

个输入到SHA 引擎的字节其余8个字节

是页码1个字节和不带有CRC 校验字节

的器件地址编码

服务签名代码 3 3 00H 字节 该数据是写到暂存器中用来建立服务数据

签名的15个字节的一部分其余的12个字

节是页码1个字节

页计数值4个字节和不带有CRC 校验码的器件地址编码

7个字节

Provider name length (svcNameLen)

1 20 服务供应商名字的长度可调节

Signature length (signLen) 1 20 用户账务页中签名块的长度这个值可以缩

短以便为其它数据辅助数据留出空间

Auxiliary data length (auxDataLen) 1 0 辅助数据块的长度可调长度为零意味着

没有附加数据

服务提供者的名字 20 Dallas Semiconductor 服务供应商的名字或说明它的长度受

Provider name length 限制

签名初始值 20 20 00H 字节 初始数据块的长度必须与上述Signature

length 匹配这些字节被置位替代用户数据

页的签名块以建立数据签名

辅助数据 0

辅助数据的长度必须与上述Auxiliary data length 匹配

加密算法代码 1 0 用来说明为保护文件内容所采用的加密或

者编码机制类型的标志

DS1961S 标志 1 0

一个用于说明为协处理器安装密钥是否作了适当截取以便配合DS1961S 使用的布尔

标记

字节总数 100

AN157

11 of 38 值得注意的是COPR.0

的长度随三个长度参数的不同而不同

这三个参数是Provider Name Length Signature Length 和Auxiliary Data Length 提供这些参数是为了允许提供附加的定制性能这些性能是软件支持的但需要由COPR.0

文件中的数据激活

服务数据文件 在应用的示范中我们在每个用户SHA iButton 中都建立了一个服务文件DLSM.102并把它作为用户iButton

识别文件DLSM.102

包含如下数据

服务文件数据结构 表2

服务文件DLSM.102

的结构

字节数 抽样数据 备注

数据类型码 1 0 该域可用于进一步说明交易数据的类型例如0

表示动态数据1表示静态数据等等

服务数据签名

20 [计算值]

由本地主机计算 乘法器/转换系数 2 8B48H 该数据可以用来把一个数值转换为另一个数

值在本服务示范中我们安装了美元的国际

流通代码和从美分转换为美元的转换系数

0.01特殊格式通常由服务确定

账目余额

3 01 86 A0H 100000分 $1000 交易 ID 2 1234H 交易ID 可以将更多的参考数据与交易链接到

一起

字节总数 28

值得注意的是文件内容有28个字节但实际要以下面的格式存储32个字节更多的信息参见AN114

文件长度 (1字节) 文件内容 (28 字节) 文件延续指针

(1 字节)

CRC-16 (2 字节)

本地主机检测用户SHA iButton 时它从用户SHA iButton 的目录列表中读取文件DLSM.102的页码在我们的服务示范中是13使用与第13页相关的密钥密钥为5进行器件认证

AN157

12 of 38 安装服务数据 在处理任何交易之前必须把适当的服务数据和密钥安装到协处理器和用户iButton 中 也可以看作是器件的初始化过程静态和动态数据服务都需要器件认证如果服务采用动态数据如

电子付费应用需要在每次交易中验证和更新服务数据协处理器将包含两个系统密钥一个用于认证

另一个用于验证服务数据并对服务数据再次签名除非系统签名密钥一定安装到0号密钥中

安装两个系统密钥的步骤是相同的通常使用不同的输入数据

片断

计算在用户器件端通过在服务数据页嵌入一个由服务数据和系统签名密钥计算产生的签名可以保

护服务数据把服务安装到协处理器和用户SHA iButton

中的基本步骤如下所述以下给出了

详细的说明

对不需要数据验证的服务

1 把系统认证密钥安装到协处理器中

2 通过将系统认证密钥绑定到用户iButton 地址编码和服务数据页码在用户iButton

中安装一个唯一的器件认证密钥

3 向用户iButton 写服务数据

如果需要的话

对需要数据验证的服务

1 把系统认证密钥安装到协处理器中

2 把系统签名密钥安装到协处理器中

3 通过将系统认证密钥绑定到用户iButton 地址编码和服务数据页码在用户iButton

中安装一个唯一的器件认证密钥

4

利用系统签名密钥

服务数据

服务数据的页码和写次数计数值以及用户器件地

址编码计算签名

5 在服务数据中嵌入签名并把它写入用户iButton

SHA iButton 中密钥的产生

把密钥安装到SHA iButton 中需要把数据

片断更多的信息参见AN152写到指定页和暂存器用数据计算MAC 把选定的MAC 字节复制到目标密钥内参见图

4不要直接写入密钥通过片内SHA 引擎产生的密钥允许几个用户共同参与密钥的安装过程

称为密钥分摊如果

没有其它用户的参与任何单个用户都不能再生系统密钥这个过程有效地减小了密钥泄漏的风险从N 个片断partials[k]k=0至N-1产生系统密钥的流程参见图5每次迭代计算MAC

时利用两个数据源47个输入数据字节其中32个字节写入数据页15个字节写入暂存器

和密钥的当前内容8

个字节密钥用下次迭代之前刚刚计算出的新的MAC 进行更新循环的初始k=0密钥设置为一个空值因为每一次迭代都为下一次计算产生一个新的密钥

所以

最后的系统密钥是上述所有输入片断的函数

除系统签名密钥必须安装到协处理器的0

号密钥即

cSignSecretNum=0以外上述流程对系统鉴别密钥和系统签名密钥的计算同样适用

执行通用函数installSystemSecret 可以把来自多个片断的系统密钥安装到SHA iButton 中详细内容见第0

AN157

13 of 38

SHA iButton 中产生的密钥 图4

使用密钥共享产生系统密钥 图5

服务示范

我们的服务示范是将账目余额计入借方的一次电子付费服务每次交易都要重新签名值得注意的是器件认证不仅要验证服务数据页而且还包括与用户iButton 中服务数据页有关的器件认证密钥对于服务数据签名系统的一般签名密钥存在协处理器中而不是存在用户iButton

因此

我们可以只用一个数据页和一个密钥来控制电子付费应用服务数据页和与之相匹配的

器件认证密钥

本服务示范中用到的符号和变量概述如下以供参考值得注意的是在多服务寄主器件中每个用户iButton 的服务数据页码即uSignDataPage 和认证密钥号uAuthSecretNum

可以不同

完成后20个置于暂存器中这样命令可以把它复制到密钥页

用到的命令

Compute First Secret, k=0 Compute Next Secret, k>0 下一次迭代开始前利用的放置在暂存器中的局部页

k 从0循环结束

AN157

14 of 38 在用户SHA iButton

中用到的页如下

协处理器SHA iButton 中用到的页如下

变量和数值列表 表3 变量列表 变量

服务示范取值 说明 cAN

协处理器iButton 地址编码 uAN

用户iButton 地址编码 cAuthDataPage

7 系统认证数据页在协处理器中 cAuthSecretNum

7 系统认证密钥号在协处理器中 cSignDataPage

8 系统签名数据页在协处理器中 cSignSecretNum

0 系统签名密钥号在协处理器中 uAuthDataPage

13 用户器件认证数据页 uAuthSecretNum

5 用户器件认证密钥号 uSignDataPage

13 用户iButton 中的服务数据页码 svcName Dallas

Semiconductor 器件供应商的名字需要的时候在右侧填补字节00H

AN157

15 of 38 变量列表

变量

服务示范取值 说明 nAuthPartials

1 计算系统认证密钥的片断的数量 nSignPartials

1 计算系统签名密钥的片断的数量 authPartial[j]

j=0 至 nAuthPartials-1

47FFH 字节 计算系统认证密钥的片断每个矩阵元素中有47个字节其中32个字节写到数据页中另外15个字节写到暂存器中 signPartial[j]

j=0 至 nSignPartials-1

47FFH 字节 计算系统签名密钥的片断每个矩阵元素中有47个字节其中32个字节写到数据页中另15个字节写到暂存器中 authBind

39 00H 字节 器件认证密钥的绑定数据39个字节的数据块用于把系统认证密钥绑定到用户器件前32个字节写入数据页剩下的7个字节写入暂存器以计算器件认证密钥 signCode

3 00H 字节 用于产生服务数据签名的3个字节代码 signInitial

20 00H 字节 计算服务数据签名的初始值 uData

服务数据页内容 TA1, TA2, ES

器件地址和状态寄存器 uSignDataPageWCC

服务数据页的写次数计数在用户iButton 中 (=uAuthDataPageWCC ) cFileName

COPR.0 协处理器文件名存储在协处理器中 uFileName

DLSM.102 服务文件名存储在用户iButton 中 wkDataPage

9 协处理器中工作空间数据页码 wkSecretNum

1 工作空间密钥号在协处理器中

在协处理器中安装系统认证密钥 下面列出了在SHA iButton 中安装系统鉴别密钥的命令时序和数据流执行API 函数

installSystemSecret 的细节问题见附录A

AN157

16 of 38 在协处理器中安装系统鉴别密钥 图6

为了在协处理器中安装系统认证密钥要用到API

s=installSystemSecret(cAN,cAuthDataPage, cAuthSecretNum, nAuthPartials,authPartial)

s=eraseDataPage(cAN,cAuthDataPage)

调用eraseDataPage 具体实现在第0节将删除最后一个写到协处理器中的片断防止其泄漏

请注意为简单起见本文的API 调用列表忽略了所有的误码校验和重复迭代在实际应用中每次调用返回的状态都应进行误码校验并进行适当的重复迭代例如在协处理器中安装具有适当误码校验和重试功能的系统认证密钥的程序类似于以下代码

// iteration count limit

loopLimit = 5

计算密钥MAC [Compute First Secret]如果[Compute Next Secret]如果向暂存器写入空字节准备复制密钥[Write Scratchpad] 协处理器 系统认证密钥被安装到协处理器cAuthSecretNum (=7) 的密钥中 片断被写到cAuthDataPage (=7) 页和暂存器用于计算密钥

AN157

17 of 38 s=1

loop=0

do while (loop0)

// the call returns 0 if no error

s=installSystemSecret(cAN,cAuthDataPage, cAuthSecretNum, nAuthPartials,authPartial) loop=loop+1

end loop

// quit if we still have errors after preset number of tries

if(s<>0) then

exit

end if

s=1

loop=0

do while (loop0)

// the call returns 0 if no error

s=eraseDataPage(cAN,cAuthDataPage)

loop=loop+1

end loop

// quit if we still have errors after preset number of iterations

if(s<>0) then

exit

end if

…continue …

在协处理器中安装系统签名密钥

在SHA iButton

中安装系统签名密钥的命令时序和数据流与安装系统认证密钥的过程一样只

是片断

目标数据页和目标密钥系统签名密钥必须装到密钥0中

不同

为了在协处理器中安装系统签名密钥用到了API

s=installSystemSecret(cAN,cSignDataPage, cSignSecretNum, nSignPartials,signPartial) s=eraseDataPage(cAN,cSignDataPage)

协处理器 系统签名密钥安装到协处理器的cSignSecretNum (=0)

密钥中 片断写到cSignDataPage (=8) 页和暂存器

中用来计算密钥

AN157

18 of 38 值得注意的是系统签名密钥必须安装到密钥

cSignSecretNum=0

中与它相匹配的数据页cSignDataPage 或者是0或者是8在我们的服务示范中第0页用作OWFS 目录所以我们用cSignDataPage

=8

在用户iButton 中安装器件认证密钥

为了安装用户iButton

的器件认证密钥首先要把系统认证密钥安装到用户iButton 中secretAuthSystem 然后由系统绑定数据bindData 系统认证密钥

secretAuthSystem 服务数据页码uSignDataPage 和用户iButton 的地址编码uAN 计算出唯一的器件密钥用户iButton 的地址编码使得器件认证密钥对iButton 来说是唯一的下面列出了这两个步骤第二

步执行了详细内容见第0

节一个API

bindSecretToiButton

绑定器件和服务数据以产生器件认证密钥

用户iButton Auth Secret 步骤1 系统认证密钥(secretAuthSystem ) 安装到用户iButton 的密钥中uAuthSecretNum (=5)片断写到uAuthDataPage (=13) 页 和暂存器用来计算密钥

用户 iButton Auth Secret 步骤2 通过绑定系统认证密钥(secretAuthSystem ) 与服务和用户iButton 特定数据 (uAuthDataPage, uAN )把器件认证密钥(s ecretAuthDevice ) 安装在用户iButton 的密钥 uAuthSecretNum (=5) 中

AN157

19 of 38 截取绑定数据暂存器中的服务和用户器件数据可用来计算唯一的器件认证密钥

pad_bind

偏移位置

0:7 8:11 12:12 13:19 20:22 23:31 字节数

8个字节 4个字节 1个字节 7个字节 3个字节 9个字节 数据 00H bindData[32:35] uAuthDataPage uAN[0:6]

bindData[36:38] 00H

为了安装器件认证密钥使用的API

s=installSystemSecret(uAN,uAuthDataPage,uAuthSecretNum,nAuthPartials,authPartial)

s=bindSecretToiButton(uAN,uAuthDataPage,uAuthSecretNum,bindData,uAuthDataPage,uAN) s=eraseDataPage(uAN,uAuthDataPage)

计算密钥结果如果 k = 0 [Compute First Secret]

如果 k > 0 [Compute Next Secret]

使用目的密钥地址向暂存器写入空字节准备复制密钥uAuthSecretNum [Copy Scratchpad]

将截取后的绑定数据pad_bind 写入暂存器[Write Scratchpad] bindData 鉴别数据页码uAuthDataPage

用户iButton 地址编码uAN 无CRC 校验码的后个字节组成计算密钥[Compute Next Secret] MAC 放置到暂存器中使用目标密钥地址向暂存器写入空字节准备复制密钥

AN157

20 of 38 在协处理器中创建服务数据签名 服务数据签名是根据服务数据和系统签名密钥计算产生的签名可以嵌入4到服务数据页在每

次交易过程中

由本地主机进行验证例如

在我们的服务示范中我们把签名嵌入如下服务数据页OWFS 需要数据块长度后续指针和CRC-16

校验字节

在服务数据页嵌入数据签名

偏移位置

0:0 1:1 2:21 22:23 24:26 27:28 29:29 30:31 字节数

1个字节 1

个字节 20个字节 2个字节

3个字节

2个字节 1

个字节 2个字节

数据 长度值 数据类型

签名 转换系数 账务余额 传输 ID 后续指针 CRC-16

因为签名占据了服务数据页的一部分所以为了计算签名签名数据块必须初始化为一些已知值signInitial 5注意为了防止服务数据建立金额被非法复制和再利用应该用诸如器件地址编码uAN 服务数据页的页码uSignDataPage 和写次数计数值uSignDataPageWCC 等器件的特殊数据作为输入进行签名计算如果禁止复制服务数据把服务数据安装到具有写次数计数器的页中也很重要该计数器在每次写操作时都会递增产生服务数据签名的过程是在API createDataSignature 中实现的详细内容见第0节

// create signature, the passed uData_ini has the signature block initialized to signInitial

sig = createDataSignature(cAN,cSignDataPage,cSignSecretNum,uData_ini,signCode,

uAN,uSignDataPage,uSignDataPageWCC)

被截取的签名数据块pad_signCode

偏移量 0:7 8:11 12:18 19:19 20:22 23:31 字节数

填补8个字节 4个字节 7个字节

1个字节 3个字节 填补9个字节 数据 8个00H 字节 uSignDataPageWCC+16

uAN[0:7] uSignDataPage signCode 9个00H 字节

4注意签名还没有嵌入到服务数据页它可以存储到单独的页中这样可留出32个字节空间存储原始的服务数据

5如果签名没被嵌入到32个字节的服务数据页中就不必进行初始化

sig=createDataSignature(cAN,cSignDataPage,cSignSecretNum,uData,signCode,uAN,uSignDataPage,

uSignDataPageWCC)

6已签名的服务数据写入到服务数据页后WCC+1就成为其新的写次数计数值因为每次向页中写入数据写次数计数器的值都会增1在第8到15页

AN157

21 of 38

[Write Scratchpad]

signCode uSignDataPageWCC

uAN 无校验码 组成[Sign Data Page]计算出的置于暂存器MAC [Read Scratchpad]

协处理器

服务数据签名根据以下数据计算而来 初始化的服务数据(uData_ini ) 系统签名密钥 ( cSignSecretNum =0时) 系统签名代码 (signCode )

用户 iButton 地址编码uAN (无CRC 校验

码)

服务数据页码 (uSignDataPage) 和它的写

次数计数值

(uSignDataPageWCC)

签名数据块

本文来源:https://www.bwwdw.com/article/pa8l.html

Top