发布时间:2008-11-18阅读:1634
首先,我们要对编程风格和SmallˉOS的编程做一些注释。伪代码是从BASIC推导而来的,原则上它表现为智能卡操作系统Small-OS的半形式化描述。根据ITSEC,类似的操作系统描述经常用于软件 评估。它们被用做评估和检查源代码的基础。于是,本节中所呈现的伪代码,就表现为一个良好的范例说明 智能卡操作系统中的进程是如何形式化描述的,伪代码在此以列表形式给出并附以详细的注释。类似形式的 表述可在EN 1546系列标准中找到,例如,其中智能卡电子钱包的内部进程就是半形式化描述的。
伪代码中所用各个术语均已在本书开始处叙述过了。程序代码是面向标准的BASIC语言的,具有面向对象 的扩充。只采用了一般可以理解的结构。所有标记,常数和基准都是英文的。用ISO记号,通常按十六进制 给出数值,例如′42′。然而,十或二进制的形式在为了辅助理解而需要时也会使用,使用从ISO记号推导 出的记号。例如9所有可数值,像长度规定,都用十进制表示。
没有人会以这种形式的汇编或C语言来编写一个智能卡的操作系统,因为这太复杂了,设计Small-OS的目 的是以最易于理解和良好注释的方式建立一个简单然而强有力的智能卡操作系统。故意地,不试图去缩短程 序执行时间、程序代码、BAM的使用和堆栈深度,因为这样做将严重地削弱代码的可读性。在真正的智能卡 操作系统的编程中,例如,在某些共同的实践中是用JUMP指令来代替一条CALL指令的,以调用很少使用的子 程序,因为这样可以节省二字节的宝贵的堆栈空间。一个标记被设置在用JUMP指令调用的子程序之前,用来 确定当子程序处理完成时的返回地址。这类优化在Small-OS中是找不到的,其理由已如前述。仅仅对那些 与可读性和可理解性有关的伪代码才使之优化。每当出现了和真正的智能卡操作系统的偏离时,在正文中或 在伪代码的注释中予以标识。
智能卡操作系统由于智能卡微控制器众所周知的存储器缺乏,其主要部分都位于ROM之中。因此,在芯片 被制成后是不能修改的。软件不可能以绝对没有差错(除了微不足道的小程序)的状况来生产,只可能使差 错尽可能地少些。ROM中程序代码的一个差错将带来严重的后果。为了有可能用补丁来修补这些差错,提供 了从ROM中的关键位置向EEPROM的跳转。这是软件工程中很古老的技术而且不是智能卡专用的。例如,相似 的机制已用于MacOS和0S/9中。用于这方面的EEPROM中的存储单元由程序代码调用,称之为句柄(handle) 。一个句柄通常仅含有一条RETURN指令,它导致立即返回到调用代码。如果需要对ROM代码中的程序差错修 补时,校正代码可插入到EEPROM的某旬柄的存储单元中。在这种情况下,对句柄的调用不会产生立即返回。 为了简单和易于理解起见,这一机制没有包含在Small-0S中。
对智能卡操作系统比较详细地叙述提供了跟踪几种典型的直接指向伪代码的攻击类型的令人感兴趣的机会 。在适当的位置,对操作系统层次上可能的攻击和防御方法详细地进行了讨论。例如,在伪代码的所有细节 上比较处理时间有可能检验对PIN的攻击,这在目前已经是攻击的经典形式了。