12-5 原子类型

1. atomic_int 

        12-3 中线程安全问题来源之一为非原子操作,而利用 C11 新增的 atomic_int 类型,其定义的变量的相关操作均为原子操作。修改 12-3 第 1 小节的部分代码,将 int count = 0; 改为 atomic_int count = 0。程序最终结果为 count 等于 2000000,与 12-3 第 1 小节的情况截然不同。

        但目前仅 gcc 编译器支持 <stdatomic.h>,msvc 不支持。

#include <stdio.h>
#include <tinycthread.h>
#include <stdatomic.h>

// int count = 0;
atomic_int count = 0;

int Counter(void *arg){
  for (int i = 0; i < 1000000; ++i) {
    count++;
  }
  return 0;
}

void TestCounterByThread(){
  thrd_t t_1;
  thrd_t t_2;

  // create two threads to run the Counter function
  thrd_create(&t_1, Counter, NULL);
  thrd_create(&t_2, Counter, NULL);

  // free up resources
  thrd_join(t_1, NULL);
  thrd_join(t_2, NULL);

  printf("count: %d", count);  // count: 2000000
}

2. atomic_is_lock_free()

        原子操作的实现分为两种,一是在 CPU 指令层面实现,二是通过加锁的方式实现利用 atomic_is_lock_free() 函数可以查看相关变量的原子操作是哪种实现方式。 atomic_is_lock_free() 函数返回值为 1 时,说明是在 CPU 指令层面实现原子操作;返回值为 0 时,则是通过加锁实现原子操作。

void TestAtomicLock(){
  atomic_int a;
  int result = atomic_is_lock_free(&a);
  printf("result: %d\n", result);
}

3. atomic_flag

        atomic_flag 是通过无锁方式实现的原子操作,是原子操作中的布尔类型。故将其看成标志位使用。注意,atomic_flag 类型的变量初始值为 ATOMIC_FLAG_INITatomic_flag_test_and_set() 函数可以设置标志位和判断当前标志位是否被设置,标志位没有被设置时返回 NULL。atomic_flag_clear() 函数作用是清除当前标志位

        两个注意点:一, struct timespec 的用法。传入的进程睡眠时间 = 当前系统时间的秒数 + 进程需要睡眠的秒数。并非线程需要睡眠 10s,仅传入 10s 这种形式。而是当前时间 + 10s。二,注意子线程函数的返回值通过 thrd_join() 函数获取

#include <stdio.h>
#include <tinycthread.h>
#include <stdatomic.h>
#include <sys/timeb.h>

atomic_flag resume_flag = ATOMIC_FLAG_INIT;  // 定义一个 atomic_flag 类型变量

int TestAtomicFlag(void *arg){

  int current = 0;

  // 对 atomic_flag 标志位判断并赋值
  // 标志位不为空,该该循环每一秒执行一次
  while(atomic_flag_test_and_set(&resume_flag)){
    current++;
    printf("current: %d\n", current);

    struct timeb tb;
    ftime(&tb);
    thrd_sleep(&(struct timespec){.tv_sec=(time_t)tb.time + 1}, NULL);
  }

  return current;
}

int main(){

  atomic_flag_test_and_set(&resume_flag);  // 设定标志位

  thrd_t t;
  thrd_create(&t, TestAtomicFlag, NULL);

  // 主线程睡五秒,此时子线程可执行五次
  struct timeb tb;
  ftime(&tb);
  thrd_sleep(&(struct timespec){.tv_sec=(time_t)tb.time + 5}, NULL);

  atomic_flag_clear(&resume_flag);  // 清除标志位,子线程停止运行

  // 获取线程函数返回值
  int last_number;
  thrd_join(t, &last_number);

  printf("last_number: %d\n", last_number);

  return 0;
}

        试验结果有两种可能,原因是主线程和子线程开始的时间不同。虽然主线程睡眠 5s,子线程睡眠 1s,但睡眠的起始点不同,可能子线程执行了一次后才和主线程一起执行,此时子线程便会执行 6 次。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
openGauss是一款开源的关系型数据库管理系统,它具有多核高性能、全链路安全性、智能运维等企业级特性。 openGauss内核早期源自开源数据库PostgreSQL,融合了华为在数据库领域多年的内核经验,在架构、事务、存储引擎、优化器及ARM架构上进行了适配与优化。作为一个开源数据库,期望与广泛的开发者共同构建一个多元化技术的开源数据库社区。 软件特点: 1、高性能 openGauss突破了多核CPU的瓶颈,实现两路鲲鹏128核150万tpmC,内存优化表(MOT)引擎达350万tpmC。 2、数据分区 内部线程共享的关键数据结构进行数据分区,减少加锁访问冲突。比如CLOG就采用分区优化,解决ClogControlLock锁瓶颈。 3、NUMA化内核数据结构 关键数据结构NUMA化分配,减少跨CPU访问。比如全局PGPROC数组按照NUMA Node的数目分为多份,分别在对应NUMA Node上申请内存。解决ProcArrayLock锁瓶颈。 4、绑核优化 把网络中断绑核和后台业务线程绑核区分开,避免运行线程在核间迁移造成的性能不稳定。 5、ARM指令优化 结合ARM平台的原子操作lse进行优化,实现关键互斥变量原子高效操作。 6、SQL BY PASS 通过SQL BY PASS优化SQL执行流程,简化CPU执行开销。 7、高可靠 正常业务负载情况下,RTO小于10秒,降低节点故障导致的业务不可用时间。 8、并行恢复 主机日志传输到备机时,备机日志落盘的同时,发送给重做恢复分发线程,分发线程根据日志类型和日志操作的数据页发给多个并行恢复线程进行日志重做,保证备机的重做速度跟上主机日志的产生速度。这样备机实时处于ready状态,从而实现瞬间故障切换。 9、MOT引擎(Beta发布) 内存优化表(MOT)存储引擎是一个专为多核大内存优化的存储引擎,具有极高的联机事务处理(OLTP)性能和资源利用率。MOT的数据和索引完全存储在内存中,通过NUMA感知执行,算法消除闩锁争用以及查询JIT本地编译,提供低时延数据访问及高效事务执行。更多请参考MOT引擎文档。 10、安全 openGauss支持账号管理,账号认证,口令复杂度检查,账号锁定,权限管理和校验,传输加密,操作 审计等全方位的数据库安全能力,保护业务满足安全要求。 11、易运维 openGauss将AI算法集成到数据库中,减少数据库维护的负担。 12、SQL预测 openGauss根据收集的历史性能数据进行编码和基于深度学习的训练及预测,支持SQL执行时间预测。 13、SQL诊断器 openGauss支持SQL执行语句的诊断器,提前发现慢查询。 14、参数自动调整 openGauss通过机器学习方法自动调整数据库参数,提高调参效率,降低正确调参成本。
第一章 1 数据管理技术的发展经历了人工管理、文件系统、数据库和高级数据库四个阶段 2 文件系统的三个缺陷:数据冗余、数据不一致、数据联系弱 3 在文件系统阶段,程序设计处于主导地位;在数据库阶段,数据占据了中心位置 4 数据库管理系统(DBMS)的类型:(1) 层次型[1:N] (2) 网状型[M:N] (3) 关系型 (4) 面向对象型 5 数据描述的三个阶段:(1) 概念设计 (2) 逻辑设计 (3) 物理设计 6 数据联系的三种类型:(1) 一对一联系 (2) 一对多联系 (3) 多对多联系 7 根据数据的抽象级别定义的四种模型: (1) 概念模型:表达用户需求观点的模型,抽象级别最高,主要是ER模型 (2) 逻辑模型:表达计算机实现的模型,主要有层次、网状和关系模型三种,其中关系模型 是主流 (3) 外部模型:表达用户使用观点的模型,供程序使用 (4) 内部模型:表达DB物理结构的模型,与软硬件紧密联系,由DBMS自动实现 8 从用户[应用程序]到数据库之间,DB的数据结构描述有三个层次: (1) 外部模式[型]:用户与数据库系统的接口 (2) 逻辑模式[型]:数据库全部数据和整体逻辑结构的描述 (3) 内模式[型]:数据库在物理存储方面的描述 9 三层模式之间存在着两级映像: (1) 外模式/逻辑模式映像:定义外模式和逻辑模式之间的对应性 (2) 逻辑模式/内模式映像:定义逻辑模式和内模式之间的对应性 10 数据独立性是指应用程序和数据库的数据结构之间相互独立,包括: 1) 物理数据独立性 - 对内模式的修改不影响逻辑模式,只修改逻辑模式/内模式映像即可 2) 逻辑数据独立性 - 对逻辑模式的修改不影响外模式,只修改外模式/逻辑模式映像即可 11 DBMS的主要功能 (1) 数据库的定义 - 提供的DDL语句 (2) 数据库的操纵 - 提供的DML语句 (3) 数据库的保护:a) 数据库的恢复 b) 数据库的并发控制 c) 数据的完整性 d) 数据的安全性 (4) 数据库的维护:提供的各种工具 (5) 数据字典:存放三级结构定义 12 DBA的主要职责 1) 定义逻辑模式 2) 定义内模式 3) 定义外模式 4) 定义安全性规则 5) 定义完整性规则 6) 数据库的转储与恢复 第二章 1 数据库系统生存期 1) 从软件的规划、研制、实现、投入运行后的维护,直到它被新的软件所取代的整个期间 2) 数据库系统的生存期分为七个阶段: (1) 规划阶段:系统调查、可行性分析、确定总目标 (2) 需求分析阶段:分析业务流程[业务流程图]、确定系统边界、分析数据处理过程[数 据流图]、生成数据字典 (3) 概念设计阶段:概念模型独立于计算机硬件和软件,主要有三个步骤 a 进行数据抽象,设计局部概念模型 b 将局部概念模型综合成全局模型 c 评审 (4) 逻辑设计阶段:把概念模型转换为DBMS可以处理的逻辑模型,主要有五个步骤 a 将概念模型(ER模型)转换为逻辑模型(关系模型) b 设计外模型 c 设计应用程序与数据库的接口 d 评价模型 e 修正模型 (5) 物理设计阶段:完全依赖于给定的硬件环境和数据库产品 (6) 实现阶段:定义数据库结构;数据装载;编制与调试应用程序;数据库运行 (7) 运行维护阶段:主要由DBA完成 2 ER模型到关系模型的转换 1) 实体类型转换:将实体转换为关系模式,实体属性即为关系模式的属性,实体的标识符 为关系模式的键 2) 二元联系类型转换 (1) 1:1联系:在任意一个关系模式中加入另一个关系模式的键[作为外键]和联系类型的 属性 (2) 1:N联系:在N端的关系模式加入1端的键[作为外键]和联系类型的属性 (3) M:N联系:将联系类型转换为关系模式,其属性为两个实体的键和联系类型的属性 第三章 1 FD推理规则:1) 自反性 2) 增广性 3) 传递性 2分解是解决冗余的主要方法。分解之后,能否表示同样的数据,用"无损分解"特性表示 ;能否保持原来的函数依赖关系,用"保持FD"特性表示 3 关系模式的分解标准 "范式 "特点 "分解特征 " " " "无损分解 "保持FD " "1NF "字段是不可再分的原子值 " " " "2NF "非主键字段完全依赖主键 "是 "是 " "3NF "非主键字段不能相互依赖 "是 "是 " "BCNF "主键之间不能相互依赖 "是 "不一定 " "4NF "消除多值依赖 "是 "不一定 " 第四章 1 基本符号 "操作 "传统 "并( )、交( ) 、差(-)、笛卡尔积(×) " " "扩充 "投影(π)、选择(σ)、连接( )、除(÷) " "运算符 "比较 ">、 、<、 、=、 " " "逻辑 " (与)、 (或)、 (非) " 2 假设数据库
大数据与人工智能-fy 大数据与人工智能-fy 1. 1Hadoop目前最新的版本是 [单选题] A.1.0 B.2.0 C.3.0(正确答案) D.4.0 2. 2以下哪个系统可以为计算机CPU分配资源 [单选题] A.分布式文件存储系统(HDFS) B.分布式计算框架(MapReduce) C.分布式资源调度系统(Yarn)(正确答案) D.数据处理方法(DPW) 3. 以下哪个组成不属于Yarn [单选题] A.ResourceManager B.NodeManager C.ApplicationManager D.Spark(正确答案) 4. Hive针对内部表和外部表的区别是 [单选题] A.创建内部表的同时,会将数据挪到数据仓库指定的位置(正确答案) B.删除内部表时只删除源数据 C.创建内部表时,只记录数据指定的路径 D.删除外部表时删除表中数据和源数据 大数据与人工智能-fy全文共22页,当前为第1页。 大数据与人工智能-fy全文共22页,当前为第1页。 5. 以下属于引入ZooKeeper的理由是 [单选题] A.分布式系统需要统一管理(正确答案) B.MapReduce代码开发效率低下 C.使用SQL进行数据分析效率更高 D.大数据50%为报表类业务,需要仓库类大数据工具 6. 下列关于ZooKeeper集群原理的介绍,不正确的是 [单选题] A.由多个ZooKeeper SEVER组成的集群环境 B.包含一个Leader和多个Follower C.每个sever保存一个数据副本、全局数据一致 D.不采用分布式读写机制(正确答案) 7. 以下关于Hbase的说法正确的是 [单选题] A.Hbase是分布式场景中可以实时读写数据的分布式数据库(正确答案) B.包含一个Leader和多个Follower C.创建内部表时,只记录数据指定的路径 D.比较适合存储视频文件 8. 关于Redis说法不正确的是 [单选题] A.Redis没有字段的概念,所以在数据查询上功能比较弱,支持的特性比较简单。这点是不如MongoDB的 B.Redis单个value的最大容量可达1GB,不支持单个Value比较大的情况 C.内存依赖比较高。由于Redis本质上是一个内存数据库,所以内存硬件的容量大小直接决定了Redis可用的数据库空间 D.比较适合存储视频文件(正确答案) 大数据与人工智能-fy全文共22页,当前为第2页。9. 关于Redis说法不正确的是 [单选题] 大数据与人工智能-fy全文共22页,当前为第2页。 A.使用C语言编写(正确答案) B.比较适用于计数场景 C.所有数据都在内存中,高速读写 D.支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型) 答案解析:使用开源C语言编写 10. 以下哪个不属于Redis三大架构 [单选题] A.主从复制架构 B.Sentinel架构 C.集群架构 D.实时数据计算架构(正确答案) 11. 关于HDFS的说法不正确的是 [单选题] A.是JAVA实现的、分布式的、可横向扩展的文件系统 B.支持数据切块,目的是提升文件的读取效率 C.数据切块后默认大小为256M(正确答案) D.有副本机制 答案解析:为128M 12. Yarn是从Hadoop的哪个版本出现的 [单选题] A.1.0 B.2.0(正确答案) C.3.0 D.4.0 大数据与人工智能-fy全文共22页,当前为第3页。13. 下列哪项不属于引入Hive的原因 [单选题] 大数据与人工智能-fy全文共22页,当前为第3页。 A.MapReduce代码开发效率低下 B.使用SQL进行数据分析效率更高 C.大数据50%为报表类业务,需要仓库类大数据工具 D.Hive更简单(正确答案) 14. 关于Hive和RDBMS说法不正确的是 [单选题] A.Hive使用HQL查询语言 B.Hive使用HDFS进行数据存储 C.RDBS数据规模较大(正确答案) D.Hive硬件配置要求一般,RDBMS要求较高 答案解析:规模较小 15. 关于ZooKeeper的说法不正确是 [单选题] A.采用层次化的数据结构 B.采用类似于LINUX命令进行数据访问 C.具备临时节点和永久节点 D.永久节点会随客户端会话的结束而结束其生命周期(正确答案) 答案解析:临时节点 16. 关于Hbase说法不正确的是 [单选题] A.Table中包含多个region B.region会随着数据的增大而分裂 C.region分裂时,数据不能访问 D.行的一次读写不是原子操作(正确答案) 答案解析:是原子操作 大数据与人工智能-fy全文共22
1. 介绍 2 2. 系统架构 10 3. 卡的架构 11 3.1. 运行时环境 11 3.2. 卡的管理者(Card Manager) 12 3.2.1. GlobalPlatform运行时环境(OPEN) 12 3.2.2. 发行者安全域 12 3.2.3. 卡持有者的校验方法 13 3.3. 安全域(Secure Domains) 13 3.4. GP的API(Open Platform API) 13 3.5. 卡的内容 13 4. 安全架构 15 4.1. 目标 15 4.2. 安全职责 15 4.2.1. 卡发行者(Card Issuer) 15 4.2.2. 应用提供者(Application Provider) 16 4.2.3. 控制授权中心机构(Controlling Authority) 16 4.2.4. 卡上组件的安全要求 16 4.2.4.1. 对运行时环境的安全要求 16 4.2.4.2. 对OPEN的安全要求 17 4.2.4.3. 对发行者安全域的安全要求 17 4.2.4.4. 对CVM处理者的安全要求 17 4.2.4.5. 对安全域的安全要求 17 4.2.4.6. 对应用的安全要求 18 4.2.5. 后台系统的安全要求 18 4.3. 加密支持 18 4.3.1. 卡内容的完整性校验和数据鉴别 18 4.3.1.1. 装载文件数据块HASH 18 4.3.1.2. 装载文件数据块签名 19 4.3.1.3. 委托管理令牌 19 4.3.1.4. 收条 19 4.3.2. 安全通讯 19 5. 生命周期模型 21 5.1. 卡的生命周期 21 5.1.1. 卡生命周期的状态 21 5.1.1.1. OP_READY状态 21 5.1.1.2. INITIALIZED状态 22 5.1.1.3. SECURED状态 22 5.1.1.4. CARD_LOCKED状态 22 5.1.1.5. TERMINATED状态 22 5.1.2. 卡生命周期状态的迁移 23 5.2. 可执行装载文件的生命周期(Excutable Load File Life Cycle) 24 5.2.1. 可执行装载文件的生命周期 25 5.2.1.1. LOADED状态 25 5.2.1.2. 可执行装载文件的删除 25 5.2.2. 可执行模块的生命周期 25 5.3. 卡内应用和安全域的生命周期 25 5.3.1. 卡内应用的生命周期状态 26 5.3.1.1. INSTALLED状态 26 5.3.1.2. SELECTBLE状态 26 5.3.1.3. LOCKED状态 26 5.3.1.4. 应用的删除 27 5.3.1.5. 应用特定生命周期状态 27 5.3.2. 安全域的生命周期状态 28 5.3.2.1. INSTALL状态 28 5.3.2.2. SELECTABLE状态 28 5.3.2.3. PERSONALIZED状态 28 5.3.2.4. LOCKED状态 28 5.3.2.5. 安全域的删除 29 5.4. 卡的生命周期和AP生命周期状态的演示 30 6. 卡的管理者(CM) 32 6.1. 概述 32 6.1.1. OPEN 32 6.1.2. 发行者安全域 33 6.1.3. CVM处理者 34 6.2. CM的服务 34 6.2.1. 应用访问OPEN服务 34 6.2.2. 应用访问CVM服务 34 6.2.3. 应用访问发行者安全域的服务 35 6.2.4. 发行者域访问应用服务 35 6.4. 卡内容的管理 41 6.4.1. 卡内容的装载和安装 41 6.4.1.1. 卡内容的装载 42 6.4.1.2. 卡内容的安装 43 6.4.2. 内容的移除 45 6.4.2.1. 应用的移除 45 6.4.2.2. 可执行装载文件的移除 46 6.4.2.3. 可执行装载文件和相关应用的移除 47 6.4.3. 内容的移交(context Extradition) 48 6.5. 委托管理 48 6.6. GP的注册表 49 6.6.1. 发行者域数据元素的描述 49 6.6.1.1. 发行者安全域的AID 50 6.6.1.2. 卡的生命周期状态 50 6.6.2. 应用/可执行装载文件/可执行模块的数据元素的描述 50 6.6.2.1. 应用/可执行装载文件/可执行模块的AID 50 6.6.2.2. 应用/可执行装载文件/可执行模块的生命周期 50 6.6.2.3. 资源分配 50 6.6.2.4. 应用的权限 51 6.6.2.5. 相关联安全域的AID 52 6.7. 安全管理 52 6.7.1. 应用的锁定 53 6.7.2. 卡的锁定 54 6.7.3. 卡的终止 55 6.7.4. 操作频率的检查 56 6.7.4.1. 卡内容的装载和安装时的频率检查 56 6.7.4.2. 异常操作频率检查 56 6.7.5. 跟踪和事件的记载 57 6.7.6. 安全内容的装载和安装 57 6.7.6.1. 装载文件的数据块HASH值 57 6.7.6.2. 令牌 57 6.7.6.3. 装载文件数据块的签名 57 6.8. 发行者安全域 58 6.8.1. 发行者的标识号 58 6.8.2. 卡的Image号 58 6.8.3. 卡的识别数据 59 6.8.4. 卡上的密钥信息 59 7. 安全域 63 7.1. 概述 63 7.2. 安全域服务 64 7.2.1. 访问安全域服务的应用 64 7.2.2. 访问应用的安全域 65 7.3. 个人化支持 65 7.4. 运行时消息支持 66 7.5. DAP验证 67 7.6. 代理管理 68 7.6.1. 代理下载 68 7.6.2. 代理安装 69 7.6.3. 代理移交 70 7.6.4. 代理删除 71 7.7. 代理管理令牌、收条及DAP验证 72 7.7.1. 下载令牌 72 7.7.2. 下载收条 73 7.7.3. 安装、移交令牌 73 7.7.4. 安装收条 73 7.7.5. 移交收条 74 7.7.6. 删除收条 74 7.7.7. 下载文件数据块hash 75 7.7.8. 下载文件数据块签名 (DAP验证) 75 8. 安全通讯 76 8.1. 安全通道 76 8.2. 显式/隐式的安全通道 76 8.2.1. 显式安全通道初始化 76 8.2.2. 隐式安全通道初始化 77 8.2.3. 安全通道结束 77 8.3. 直接/间接处理安全通道协议 77 8.4. 实体认证 77 8.5. 安全消息传输 77 8.6. 安全通道协议标识 78 9. APDU命令参考 80 9.1. 总的编码规则 81 9.1.1. 生命周期状态的编码 81 9.1.2. 应用的权限编码 82 9.1.3. 一般性的错误情形 83 9.1.4. CLASS字节编码 84 9.1.5. APDU命令和响应数据 84 9.1.6. 密钥类型编码 84 9.1.7. 在委托管理的响应消息中的收条信息(可选) 85 9.2. DELETE命令 86 9.2.1. 定义和范围 86 9.2.2. 命令消息 86 9.2.2.1. 引用控制参数P1 86 9.2.2.2. 引用控制参数P2 86 9.2.2.3. 命令消息中发送的数据字段 86 9.2.3. 响应消息 87 9.2.3.1. 在响应消息中返回的数据字段 87 9.2.3.2. 在响应消息中返回的处理状态 87 9.3. GET DATA命令 88 9.3.1. 定义和范围 88 9.3.2. 命令消息 88 9.3.2.1. CLA字节 88 9.3.2.2. 参数P1和P2 88 9.3.2.3. 在命令消息中发送的数据字段 89 9.3.3. 响应消息 89 9.3.3.1. 在响应消息中返回的数据字段 89 9.3.3.2. 在响应消息中返回的处理状态 90 9.4. GET STATUS命令 90 9.4.1. 定义和范围 90 9.4.2. 命令消息 90 9.4.2.1. 引用控制参数P1 91 9.4.2.2. 引用控制参数P2 91 9.4.2.3. 命令消息中发送的数据字段 92 9.4.3. 响应消息 92 9.4.3.1. 在响应消息中返回的数据字段 92 9.4.3.2. 在响应消息中返回的处理状态 93 9.5. INSTALL命令 94 9.5.1. 定义和范围 94 9.5.2. 命令消息 94 9.5.2.1. 引用控制参数P1 94 9.5.2.2. 引用控制参数P2 95 9.5.2.3. 命令消息中发送的数据字段 95 9.5.3. 响应消息 98 9.5.3.1. 在响应消息中返回的数据字段 98 9.5.3.2. 在响应消息中返回的处理状态 99 9.6. LOAD命令 99 9.6.1. 定义和范围 99 9.6.2. 命令消息 99 9.6.2.1. 引用控制参数P1 100 9.6.2.2. 引用控制参数P2-块号 100 9.6.2.3. 命令消息中发送的数据字段 100 9.6.3. 响应消息 101 9.6.3.1. 在响应消息中返回的数据字段 101 9.6.3.2. 在响应消息中返回的处理状态 101 9.7. MANAGE CHANNEL命令 102 9.7.1. 定义和范围 102 9.7.2. 命令消息 102 9.7.2.1. 引用控制参数P1 102 9.7.2.2. 引用控制参数P2 102 9.7.2.3. 命令消息中发送的数据字段 103 9.7.3. 响应消息 103 9.7.3.1. 在响应消息中返回的数据字段 103 9.7.3.2. 在响应消息中返回的处理状态 103 9.8. PUT KEY命令 103 9.8.1. 定义和范围 103 9.8.2. 命令消息 104 9.8.2.1. 引用控制参数P1 104 9.8.2.2. 引用控制参数P2 104 9.8.2.3. 命令消息中发送的数据字段 105 9.8.3. 响应消息 106 9.8.3.1. 在响应消息中返回的数据字段 106 9.8.3.2. 在响应消息中返回的处理状态 107 9.9. SELECT命令 107 9.9.1. 定义和范围 107 9.9.2. 命令消息 107 9.9.2.1. 引用控制参数P1 108 9.9.2.2. 引用控制参数P2 108 9.9.2.3. 命令消息中发送的数据字段 108 9.9.3. 响应消息 108 9.9.3.1. 在响应消息中返回的数据字段 108 9.9.3.2. 在响应消息中返回的处理状态 109 9.10. SET STATUS命令 109 9.10.1. 定义和范围 109 9.10.2. 命令消息 109 9.10.2.1. 引用控制参数P1-状态类型 110 9.10.2.2. 引用控制参数P2-状态控制 110 9.10.2.3. 命令消息中发送的数据字段 111 9.10.3. 响应消息 111 9.10.3.1. 在响应消息中返回的数据字段 111 9.10.3.2. 在响应消息中返回的处理状态 111 9.11. STORE DATA命令 111 9.11.1. 定义和范围 111 9.11.2. 命令消息 111 9.11.2.1. 引用控制参数P1 112 9.11.2.2. 引用控制参数P2 113 9.11.2.3. 命令消息中发送的数据字段 113 9.11.3. 响应消息 114 9.11.3.1. 在响应消息中返回的数据字段 114 9.11.3.2. 在响应消息中返回的处理状态 114 A. GP的API 116 A.1. 不赞成的Open Platform Java卡API 116 A.2. GP在JAVA卡上 116 A.2.1. GP特定的要求 116 A.2.1.1. GlobalPlatform包的AID 116 A.2.1.2. 安装 116 A.2.1.3. T=0传输协议 117 A.2.1.4. 原子操作 118 A.2.1.5. 逻辑通道 118 A.2.1.6. 加密算法 118 A.2.1.7. 信任级别 118 A.2.1.8. GlobalPlatform方法的调用 118 A.2.2. 类的层次 119 A.2.2.1. 接口org.globalplatform.Application 119 A.2.2.2. 接口org.globalplatform.SecureChannel 120 A.2.2.3. 类org.globalplatform.GPSystem 127 A.2.2.4. 接口org.globalplatform.CVM 131 A.3. GP在windows Powered智能卡 136 B. 算法(加密和HASH) 138 B.1. 数据加密标准(DES) 138 B.1.1. 加密/解密 138 B.1.1.1. CBC模式 138 B.1.1.2. ECB模式 138 B.1.2. MAC 138 B.1.2.1. 完整的TDES MAC 138 B.1.2.2. Single DES加上最终的TDES MAC 138 B.2. HASH算法 139 B.2.1. 安全HASH算法(SHA-1) 139 B.3. 公钥加密方案1(PKCS#1) 139 B.4. DES数据填充 139 C. 安全内容管理 141 C.1. 密钥 141 C.1.1. 发行者安全域密钥 141 C.1.1.1. 令牌密钥 141 C.1.1.2. 收条密钥 141 C.1.2. 安全域密钥 141 C.2. 下载文件数据块Hash 142 C.3. 令牌 142 C.3.1. 下载令牌 142 C.3.2. 安装令牌 143 C.3.3. Extradition Token 145 C.4. 收条 145 C.4.1. 下载收条 146 C.4.2. 安装收条 146 C.4.3. 删除收条 147 C.4.4. 移交收条 148 C.5. DAP验证 148 C.5.1. PKC方案 149 C.5.2. DES方案 149 D. 安全通道协议‘01’ 150 D.1. 安全通讯 150 D.1.1. SCP01安全通道 150 D.1.2. 相互认证 150 D.1.3. 消息的完整性 152 D.1.4. 消息数据的机密性 152 D.1.5. ICV的加密 152 D.1.6. 安全级别 152 D.2. 加密密钥 153 D.3. 加密用法 154 D.3.1. DES会话密钥 154 D.3.2. 鉴别密码(Authenticated Cryptogram) 156 D.3.2.1. 卡的鉴别密码(Card cryptogram) 156 D.3.2.2. 主机端鉴别密码(host cryptogram) 156 D.3.3. MAC生成和MAC校验的APDU指令 156 D.3.4. APDU命令的加密和解密 157 D.3.5. 关键敏感数据的加密和解密 158 D.4. 安全通道的APDU命令 159 D.4.1. INITIALIZE UPDATE命令 159 D.4.1.1. 定义和范围 159 D.4.1.2. 命令消息 160 D.4.1.3. 引用控制参数P1——密钥版本号 160 D.4.1.4. 引用控制参数P2——密钥标识 160 D.4.1.5. 命令消息中要传送的数据段 160 D.4.1.6. 响应消息 160 D.4.1.7. 在响应消息中返回的执行状态 161 D.4.2. EXTERNAL AUTHENTICATION命令 161 D.4.2.1. 定义和范围 161 D.4.2.2. 命令消息 161 D.4.2.3. 引用控制参数P1——安全级别 162 D.4.2.4. 引用控制参数P2 162 D.4.2.5. 命令消息中要传送的数据段 162 D.4.2.6. 响应消息返回的数据段 162 D.4.2.7. 在响应消息中返回的执行状态 162 E. 安全通道协议‘02’ 164 E.1. 安全通迅 164 E.1.1. SPC02安全通道 164 E.1.2. 实体鉴别 165 E.1.2.1. 显式安全通道的初始化 166 E.1.2.2. 隐式安全通道的初始化 167 E.1.3. 消息的完整性 167 E.1.4. 消息数据的机密性 168 E.1.5. 安全级别 168 E.2. 加密密钥 170 E.3. 加密算法 171 E.3.1. CBC 171 E.3.2. 消息的完整性ICV在显式安全通道初始化中的使用 171 E.3.3. 消息的完整性ICV在隐式安全通道初始化中的使用 172 E.3.4. ICV的加密 172 E.4. 加密用法 172 E.4.1. DES会话密钥 172 E.4.2. 在显式安全通道中的鉴别密码 173 E.4.2.1. 卡的鉴别密码(Card cryptogram) 173 E.4.2.2. 主机端的鉴别密码(host cryptogram) 173 E.4.3. 在隐式安全通道中的鉴别密码(Authenticate Cryptogram) 174 E.4.4. APDU命令C-MAC的生成和校验 174 E.4.5. APDU命令响应的R-MAC生成和校验 176 E.4.6. APDU命令数据段的加密和解密 177 E.4.7. 敏感数据的加密和解密 178 E.5. 安全通道的APDU指令 178 E.5.1. INITIALIZE UPDATE命令 179 E.5.1.1. 定义和范围 179 E.5.1.2. 命令消息 179 E.5.1.3. 引用控制参数P1——密钥版本号 180 E.5.1.4. 引用控制参数P2 180 E.5.1.5. 命令消息中要传送的数据段 180 E.5.1.6. 响应消息 180 E.5.1.7. 在响应消息中返回的执行状态 180 E.5.2. EXTERNAL AUTHENTICATION命令 181 E.5.2.1. 定义和范围 181 E.5.2.2. 命令消息 181 E.5.2.3. 引用控制参数P1——安全级别 181 E.5.2.4. 引用控制参数P2 182 E.5.2.5. 命令消息中要传送的数据段 182 E.5.2.6. 响应消息返回的数据段 182 E.5.2.7. 在响应消息中返回的执行状态 182 E.5.3. BEGIN R-MAC SESSION命令 182 E.5.3.1. 定义和范围 182 E.5.3.2. 命令消息 183 E.5.3.3. 引用控制参数P1 183 E.5.3.4. 引用控制参数P2 183 E.5.3.5. 命令消息中要传送的数据段 183 E.5.3.6. 响应消息返回的数据段 184 E.5.3.7. 在响应消息中返回的执行状态 184 E.5.4. END R-MAC SESSION命令 184 E.5.4.1. 定义和范围 184 E.5.4.2. 命令消息 184 E.5.4.3. 引用控制参数P1 185 E.5.4.4. 引用控制参数P2 185 E.5.4.5. 命令消息中要传送的数据段 185 E.5.4.6. 响应消息返回的数据段 185 E.5.4.7. 在响应消息中返回的执行状态 185 F. GP的数据及卡的识别数据 187 F.1. 数据值 187 F.2. 卡识别数据的结构 187 F.3. 安全域管理数据 188

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值