摘要:在简要介绍了SHA算法(一种数据加密算法)的基础上,通过介绍1-Wire 器件DS1963S的特性及工作原理,给出了DS1963S在SHA中的应用方法。
1 SHA简介
SHA(Secure Hash Algorithm,安全散列算法)是一种数据加密算法,该算法经过加密多年来的发展和改进已日益完善,现在已成为公认的安全的散列算法之一,并被广泛使用。该算法的思想是接收一段明文,然后以一种不可逆的方式将它转换成一段(通常更小)密文,也可以简单的理解为取一串输入码(称为预映射或信息),并把它们转化为长度较短、位数固定的输出序列即散列值(也称为信息摘要或信息代码)的过程。从理论上讲,所有可能的明文将散列成一个的密文,但实际上并不是这样。大多数时候,几乎有无穷多个不同的字符串可以产生完全相同的散列值,因此一个好的散列函数,在实际中应该很难有两个可理解的字符串散列成相同的值。在DS1963S中实现的SHA算法是SHA-1,它符合联邦信息发行标准180-1。由于SHA是对压缩后的散列值进行检测,所以它对检测输入序列中发生的错误或变化非常有效。单向散列函数的特征是容易产生散列值,但由于它的输出不以任何可辨认的方式反映输入,所以从给定的散列值反求出输入信息非常困难。
单向散列函数的安全性在于其产生散列值的操作过程具有较强的单向性。如果在输入序列中嵌入密码,那么任何人在不知道密码的情况下都不能产生正确的散列值,从而保证了其安全性。SHA将输入流按照每块512位(64个字节)进行分块,并产生20个字节的被称为信息代码(Message Authenti-cation Code,MAC)或信息摘要的输出。如果输入长度不是512的整数倍,那么算法就把它凑成接近于512的整数倍的值.
2 DS1963S的主要特性
DS1963S是Dallas Semiconductor公司生产的1-Wire器件,它利用1-Wire协议进行通信。DS1963S 是一个智能令牌,一种iButton(information Button,信息钮扣),具有很高的安全性,能够支持多种器件。
1-Wire器件DS1963S芯片具有如下特点:
●带有4096位可读/写的非易失存储器,可分成16页,每页256位。
●16个存储页中的8个有其独自的64位密钥和32位只读、可回溯写次数计数器。
●内置512位SHA-1引擎。
●作为用户令牌可同时支持8个独立的服务。
●可作为协处理器存储系统密钥和计算用户令牌以及确认应用数据所需要的MAC。
●高速模式下,通信速度可以达到125kbps。
●工作温度范围为-20~+85℃。
●数据可保持10年以上。
3 DS1963S的工作原理
DS1963S的结构。可以看出DS1963S的主控制器和存储区之间的关系。
DS1963S需要严格的协议来保证数据的完整性。其协议由线上的四类信号组成:复位在线脉冲、写0、写1和读数据脉冲。通过总线主控可初始化在线脉冲以外的所有信号。初始化DS1963S的时序图见图3所示。首先由总线主控将数据线上的电平拉低以产生复位脉冲,复位脉冲的低电平持续时间tRSTL必须足够长,以使慢的从器件也能识别出它的到来(在标准速率下为480μs,高速状态下为48μs),总线主控释放数据线即可进入接收数据模式(RX),这时,1-Wire总线可通过上拉电阻或DS2480B驱动器将数据线上的电平拉为VPUP 。复位脉冲后的在线脉冲表明DS1963S已经准备好接收数据。在经过门限电平VTH后,DS1963S再等待tPDH的时间,然后通过将数据线上的电平拉低tPDL的时间来传送一个在线脉冲。实际上,DS1963S准备好进行数据通信的时间为tRSTH。
DS1963S能以两种不同的速率进行通信:标准速率和高速。所有数据的读、写都是从有效位开始的。写数据是指数据从总线主控传向从器件,读数据是指数据从从器件传向总线主控。所有的通信都以总线主控拉低数据线上的电平开始。采样点处数据线上的电压值可用于决定DS1963S 到底是将时隙解码为0还是1。为确保通信可靠,整个采样窗口中的电压值应该等于或低于电压值VILMAX或者高于电压值VTH。
4 DS1963S在SHA中的应用
在SHA应用中,协处理器和用户令牌(user to-ken)是两个主要组成部分。协处理器是一个初始化后的DS1963S,用于验证用户令牌是否为系统成员并确认用户的证书,它可以完成交易会话期间的器件和验证应用数据所需要的MAC计算,由于它无需执行SHA计算代码,从而有效缩短了开发周期。把DS1963S用作协处理器的另一个好处是可以把系统密钥存储在钮扣内,而钮扣不能够被检测,也就不会泄漏密钥。用户令牌是一个装载有货币证书、并可识别系统用户的DS1963S 或类似的1-Wire器件。DS1963S可在专门的快速电路中执行SHA-1计算,并可在1ms之内完成SHA-1计算。在实际的SHA应用中,协处理器和用户令牌必须经过初始化才能实现交易。
4.1 初始化协处理器
初始化协处理器有两个重要步骤:安装系统鉴别密钥和安装系统签名密钥。其中系统鉴别密钥用来对每个用户器件建立的密钥和验证用户器件是否属于该系统;系统签名密钥用于产生签名和验证服务数据的有效性。签名是由服务数据、系统签名密钥、其它服务或器件指定的数据计算出的MAC。第三步是可选的,就是把所有的系统配置数据以文件的形式写入DS1963S。这些配置数据并非必须要保存在协处理器DS1963S上,但这样做可以方便地使系统参数像协处理器一样具有便携性。还有一种可供选择的方法是把文件保存在磁盘驱动器中或者把参数硬编码到应用程序中。
4.2 初始化用户令牌
初始化用户令牌分为两步。步是安装主鉴别密钥并将其绑定到DS1963S上,以产生的令牌密钥。第二步是向DS1963S中写入证书文件。实际操作要比初听起来复杂一些。DS1963S的存储器有十六页,相应的有八个密钥(每两页共用一个密钥)。证书文件必须写到具有写次数计数器的页中,这样就将其限制在器件内存区的八页中。同时,写证书文件页的密钥应该就是安装的主鉴别密钥。但是,1-Wire文件API中并不允许存储关于文件页码的说明。解决这一问题的办法就是给文件一个用于确保进行特殊处理的保留扩展名。例如,扩展名101和102就是为文件所保留的,如果器件有扩展名为101和102的文件,那么这些文件必须被写到具有写次数计数器的页中,因此有一种解决方案就是利用1-Wire文件API创建一个空的根目录以用来写证书,同时为证书建立一个适当的目录路径以使其能够被动态定位,然后,用来自目录路径的页码指明主鉴别密钥应当安装在哪一页并绑定到用户令牌。当证书被写入器件时,它实际上是直接写入页的,而不是利用文件API,这就使得在实际记录令牌时可以快速更新(这在应答式借方应用中是非常重要的)。在完成以上两步用户令牌初始化后,就可以把账目证书写入存储文件的数据页了。
4.3 实现交易
协处理器和用户令牌初始化后即可进行交易。每个交易过程包括鉴别用户令牌、验证交易数据、根据动态信息更新交易数据三个主要步骤。
(1) 鉴别用户令牌
验证用户令牌涉及到一个简单的质询应答方案。首先,利用协处理器来产生3个字节的伪随机激励质询码,然后将这个请求写入用户令牌的暂存器内,并发出Read Authenticated Page(读鉴别页)命令。此时将返回存储页的全部内容,随后是页的写次数计数器的值和记录密钥位置的写次数计数器的值。DS1963S用户令牌的暂存器含有20个字节的SHA结果,其中包括用户的鉴别密钥、所读数据的页码、用户令牌的序列号和随机质询。随后,协处理器将再生成该SHA结果以确保用户令牌是系统的有效成员。
(2)验证用户证书
通过用户令牌验证证书看起来很像前面的数据初始化。虽然这一步对数据签名而言非常相似,但协处理器产生的签名只是与现有的签名进行匹配,而不是被读入证书。同时,因为整个证书都保存在用户令牌的一个文件上,所以验证证书的过程对所有令牌来说都是一样的。使用无签名的证书时,这一步只是校验用户的账目余额,以确保它在系统中是有意义的(如它不能是负数)。可以利用下面一段程序来验证帐目余额信息:
byte[] acctData=// . . . already known from verifying the user
int wcc=// . . . already known from verifying the user
/* verify the user's account balance is 'legal' */
int balance =(acctData26&0x0ff);
balance=(balance<<8)|(acctData[25]&0x0ff);
balance=(balance<<8)|(acctData[24]&0x0ff);
/* MAX BALANCE MIN BALANCE and DEBIT AMOUNT are constant integers */
if( balance>MAX BALANCE )
System.out.println(“Too Much Money!”);
else if ((balance DEBIT AMOUNT<MIN BALANCE)
System.out.println(“Not enough money to perform transaction!”);
(3) 更新用户证书
只有在使用动态数据的时候才有必要进行用户证书的更新。例如,如果存贮在证书中的只是简单的识别号,那么就没有必要进行更新。验证用户令牌能够保证该令牌不是另一个的副本,而验证证书则能够保证它没有被窜改。正如上述账目余额的例子,使用动态数据的时候,更新证书信息、恢复初始签名、清除CRC16校验码和重签数据都是必要的。SHATransaction类提供了一种更新的(如果需要重新签名)交易数据的方法。
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。