■ 安全库的设计
|
| 注意: |
1.由于安全库的设计涉及公司的核心知识产权,这里仅能提供非常少的部分内容供读者参考
2.由于信息安全产品的特殊性,即使是公布的这部分内容也已经作了必要的修改,望读者谅解 |
|
安全库是信息安全产品的核心,天存公司的安全库称为TCSS(Tercel Security Services),它提供:
- 实现SSLv2/v3和TLSv1安全通信协议;
- 实现两种外置密码算法模块的接口;
- 实现各种对称算法、非对称算法、散列算法(部分为参考实现);
- 基于X509、PKCS#7、PKCS#12的证书/私钥管理。
TCSS的层
每个TCSS API的模块都在它们各自的层中存在。每一层的API中的函数只会去调用下层的API,而不会去调用它们上层的API。另一方面,下层的一些API对更高的层来说也是不透明的,它们只能通过它们直接的上层来访问。如下图:

图中灰色的部分的模块只能通过PKCS#11接口输出,而PKCS#11只能通过密码包装(Crypto Wrapper)输出。
设计规范
- 头文件命名规则
- 函数和数据类型命名规则
- 不透明的结构类型
- 用arena分配内存
TCSS较少使用传统的内存分配函数而是使用改进后的Arenas和ArenaPools机制,它是一个快速、轻量级和线程安全的实现。...。安全代码总是希望内存被释放时,其中的内容应该被清零,我们在实现中加入了这一点。...。当从一团ASN.1数据中创建一个内存对象时,极不常用到的成分可以不被创建和传递,直到它们实际被用到时。...。
- 错误处理
TCSS引入了错误堆栈的概念,当错误发生时,程序沿着调用栈逐层返回,每个例程返回一个错误指示。...。错误号是整数,使用外部常量而不是宏定义,这是为了加入一个错误而不引发整个树重新编译。...。错误堆栈是线程私有的。...。
- 线程安全
TCSS应该具有线程安全的特性。
首先要检查对象创建和删除。对象创建一般没有问题,因为在创建过程中分配的内存不会被其他线程存取(除非它是一个全局对象)。另一方面,删除可能出现问题,线程可能会引用某个对象,而此时这个对象要被另一个线程删除。这依赖于应用是怎样使用这个对象,以及在何时用怎样的方法去销毁它。...。
- 函数设计
...。在安全库里,清除一个数据对象有三种表达:释放(Free)、删除(Delete)和销毁(Destroy)。其含义为:1)减引用计数,当它为零时清除它;2)无条件地立即清除它;3)取消所有与这个数据对象相关联的持久对象。
...。
欢迎通过电子邮件与我们交流安全软件设计技术:tech@tcxa.com.cn
|