转载自:https://blog.csdn.net/Enjoy_endless/article/details/75108349

刚开始接触CPU卡的时候,对于各种文件、应用的定义容易模糊不清,通常不能准确地界定什么是文件?什么是应用?DF和EF的区别真的就像计算机里的目录和文档那样吗?FID、AID、SFI这些概念都在什么时候派上用场?一个EF必须依存于某个DF吗?MF是必须存在的吗?脑海里会有无数个问号奔腾而来。

其实文件的本质就是一组一组的数据而已,对这些数据的操作(选择、读取、写入/更新)是通过特定的文件操作APDU命令来完成的。所以数据才是本真,文件只是表象。某一组数据该作为什么样的文件让外界来访问,是由卡片的COS决定的。

按照规范的约定DF指的是专用文件Dedicated File的缩写,DF的作用可以等同于计算机中的目录文件,EF则是基本信息文件Elementary File,也就是说通常情况下和应用相关的数据都会存放于EF中。

为了对文件进行访问,需要给文件分配一个特定的标识。无论是DF还是EF都会有对应的两个字节长ID标识,也就是所谓的FID。而DF还会有5-16个字节长的名字,也叫做AID。EF还会有一个5位长(范围从1到30)的短文件标识,就是SFI。按照7816规范的定义,以及根据7816派生出来的一些行业应用规范的定义基本上都是这样的。无论是FID还是AID以及SFI,在可以选择的路径范围内(这句话可能稍微有点绕,体会后也就自然明白了),不同的文件(包括DF和EF)的取值都不能相同。

在一张卡片里(这里说的是卡片而不是某个应用)有且仅有一个特殊的DF,称为主文件MF,这个MF的FID默认为3F00,相当于计算机中的根目录,而且在任何时候MF都可以被选择。如果某个DF下没有子DF,只有若干EF,那么这个DF也被称作ADF,反之如果某个DF下除了有EF之外,还有子DF,那么这个父级的DF也被称作DDF。

在卡片的使用过程中,对于DF的操作只有“选择”一种而已,但是对于EF的操作则有:选择、读、写三种形式。

在文件选择操作过程中,对于DF的选择可以通过FID或者AID来实现,而对于EF的选择只有FID的方式。能够被选择的文件(无论是DF还是EF)必须在可见的路径范围内(这句话也有点绕)。

至于对EF文件的读、写可以通过SFI的方式直接进行,也可以先通过FID选择某个EF,然后再进行读写。

要特别强调的一点:以上说的这些都是和某些应用规范细细相关的,也和COS的实现细细相关。换句话说,如果你自己写一个满足某个特定应用的COS,你完全可以按照自己的意愿来。比如把MF的FID定义为8F00,比如EF也可以增加AID,比如卡片在任何时候都可以选择各级DF及其下属的EF,等等。。。。。。

总之,既要熟悉规范,但是又不能把某个行业应用的规范奉为号令天下的圣旨。

规范并不是试图对复杂的公钥基础设施结构的全部实施作出规定,而旨在为各国提供一种实施办法,使其能够在若干领域(如主动认证、防非法浏览和访问控制等)做出选择,从而可逐渐实施更多的功能,而又不会与整个架构不相容。

谁拥有技术,谁就拥有话语权;而话语权就是规范的制定。在别人的基础上开发,不仅仅是遵守,更多的是方便,在全球化大背景之下,规范是必不可少的;当然按部就班肯定是不好的,在学会实用的情况下,勇于探索才是我们应该不懈追求的!

cos中的文件结构(DF/EF/MF/FID/AID/SFI..)的更多相关文章

  1. 深入理解7816(5)-----关于文件DF/EF/MF/FID/AID/SFI

    刚开始接触CPU卡的时候,对于各种文件.应用的定义容易模糊不清,通常不能准确地界定什么是文件?什么是应用?DF和EF的区别真的就像计算机里的目录和文档那样吗?FID.AID.SFI这些概念都在什么时候 ...

  2. 16.翻译系列:EF 6 Code -First中使用存储过程【EF 6 Code-First系列】

    原文链接:https://www.entityframeworktutorial.net/entityframework6/code-first-insert-update-delete-stored ...

  3. Linux中du和df

    Linux运维过程中,常常发现du和df返回值不一样,偶尔会发现区别非常大. 特定情况下,可能df看到磁盘已满,可是du推断磁盘剩余空间非常大. 文件系统分配当中的一些磁盘块用来记录它自身的一些数据. ...

  4. Linux中du、df显示不一致问题

    Linux中du.df显示不一致问题 最近在做关于Q博士的项目的时候,用到了docker进行部署,对于后端服务可能会经常变动,于是将docker容器的jar包与宿主机目录下的jar包进行绑定,之后每次 ...

  5. COS中访问文件的三种方式

    1.通过FID来访问文件(比如EF,DF) 2.通过SFI来访问文件(有些COS命令可以通过SFI来快速访问文件,而不需要事先选中文件) 3.通过文件名来访问文件(只能是DF文件)

  6. linux中的文件结构

    linux下的文件结构,看看每个文件夹都是干吗用的 /bin 二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录的 ...

  7. maven-bundle-plugin 2.4.0以下版本导出META-INF中的内容到MANIFEST.MF中

    今天终于把maven-bundle-plugin不能导出META-INF中的内容到Export-Package中的问题解决了,因为用到的第三方JAR包需要加载META-INF/XX/XX.xml这个内 ...

  8. 单元测试中使用Moq对EF的DbSet进行mock

    刚用上Moq,就用它解决了一个IUnitOfWork的mock问题,在这篇博文中记录一下. 开发场景 Application服务层BlogCategoryService的实现代码如下: public ...

  9. C#中使用EntityFramework(EF)生成实体进行存储过程的调用

    在EF中使用定义对象模型的方式调用一个存储过程,这个存储过程返回的是一组包含两列的值.(ProjectName,Count) 下面是存储过程: CREATE procedure [dbo].[Pro_ ...

随机推荐

  1. 优雅地使用命令行:Tmux 终端复用

    转自:http://harttle.com/2015/11/06/tmux-startup.html 你是否曾经开过一大堆的Terminal?有没有把它们都保存下来的冲动?Tmux 的Session就 ...

  2. linux自动化交互脚本expect详解set timeout 5是 意思是在expect语句中,5s后超时,不再作出选择。

    linux自动化交互脚本expect详解  更新时间:2020年10月21日 10:13:20   作者:lendsomething     这篇文章主要介绍了linux自动化交互脚本expect的相 ...

  3. 利用rsync备份生产应用(一)

    rsync简单介绍 Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件.Rsync使用所谓的"Rsync算法"来 ...

  4. linux下dmidecode命令获取硬件信息

    linux下dmidecode命令获取硬件信息 2 A+ 所属分类:Linux 运维工具 dmidecode在 Linux 系统下获取有关硬件方面的信息.dmidecode 遵循 SMBIOS/DMI ...

  5. LTP--linux稳定性测试 linux性能测试 ltp压力测试 ---IBM 的 linux test project

    LTP--linux稳定性测试 linux性能测试 ltp压力测试 ---IBM 的 linux test project Peter盼 2014-04-23 11:25:49  20302  收藏  ...

  6. C++ short/int/long/long long 等数据类型大小

    表 1 整型数据类型 数据类型 字节大小 数值范围 short int (短整型) 2 字节 -32 768 〜+32 767 unsigned short int(无符号短整型) 2 字节 0 〜+ ...

  7. springboot项目部署docker服务器提供api

    1.先将springboot项目打包,我这里用的是IDEA工具打包,打包完成后的jar包在 项目目录/target 中 2.打包完成后进入服务器器终端,将jar包上传到自己设置的目录中,这个目录需要跟 ...

  8. mysql数据库-备份方式简介与规范

    目录 1 应对场景: 2. 备份方式分类 2.1 按备份数据类型划分 2.2 按侵入程度划分 2.3 按备份方式划分 3 备份注意要点 4 还原要点 4.1 定期还原测试,验证备份可用性 4.2 还原 ...

  9. 在pycharm进行单元测试(unittest python)

    在Edit Configuration中添加Python test 选中相应的脚本或者文件夹 # coding:utf-8 import unittest import requests from c ...

  10. 灵动微电子ARM Cortex M0 MM32F0010 UART1和UART2中断接收数据

    灵动微电子ARM Cortex M0 MM32F0010 UART1和UART2中断接收数据 目录: 1.MM32F0010UART简介 2.MM32F0010UART特性 3.MM32F0010使用 ...