系统管理指南:安全性服务
검색에만이 책은
이 책의 내용보기:
PDF로 이 문서 다운로드 (5216 KB)

第 4 部分 Solaris 加密服务

本部分介绍 Solaris OS 所提供的集中的加密服务。

第 13 章 Solaris 加密框架(概述)

本章介绍 SolarisTM 加密框架。以下是本章中信息的列表:

要管理和使用 Solaris 加密框架,请参见第 14 章,Solaris 加密框架(任务)

Solaris 加密框架的新增功能

Solaris 10 1/06:框架库 libpkcs11.so 包含新组件元插槽。元插槽充当一个虚拟插槽,它具有框架中安装的所有令牌和槽的组合功能。实际上,元插槽使应用程序通过单个插槽与任何可用的加密服务透明地连接。

Solaris 加密框架

Solaris 加密框架提供用于处理加密要求的算法和 PKCS #11 库的公共存储区。PKCS #11 库按照以下标准实现:RSA Security Inc. 推出的 PKCS #11 加密令牌接口 (Cryptographic Token Interface, Cryptoki)。

在内核级别,框架当前处理 Kerberos 和 IPsec 的加密要求。用户级使用者包括 libsasl 和 IKE。

美国出口法要求应限制使用开放式加密接口。Solaris 加密框架通过要求对内核加密提供器和 PKCS #11 加密提供器签名来满足当前法律规定。有关进一步介绍,请参见第三方软件的二进制文件签名

框架使加密服务的提供器可以让 Solaris 操作系统 中的许多使用者使用其服务。提供器的另外一个名称是插件。框架允许使用三种类型的插件:

  • 用户级插件-使用 PKCS #11 库(如 pkcs11_softtoken.so.1)提供服务的共享对象。

  • 内核级插件-提供软件中加密算法(如 AES)的实现的内核模块。

    框架中的许多算法针对 x86(使用 SSE2 指令集)和 SPARC 硬件进行了优化。

  • 硬件插件-设备驱动程序及其关联的硬件加速器。硬件加速器使操作系统不再处理高开销的加密功能。Sun Crypto 加速器 1000 板就是这样一个示例。

框架为用户级提供器实现了标准接口 PKCS #11 v2.11 库。第三方应用程序可以使用该库来访问提供器。第三方也可以向框架中添加签名库、签名内核算法模块和签名设备驱动程序。pkgadd 实用程序安装该第三方软件时将添加这些插件。有关框架的主要组件图,请参见《Solaris 开发者安全性指南》中的第 8  章 “Solaris 加密框架介绍”

Solaris 加密框架术语

以下列出的定义和示例在使用加密框架时非常有用。

  • Algorithms(算法)-加密算法。这些算法是已建立的用于对输入执行加密或散列操作的递归计算过程。加密算法可以是对称算法,也可是非对称算法。对称算法对于加密和解密使用相同的密钥。非对称算法用于公钥加密中,它要求两个密钥。散列函数也是算法。

    算法示例包括:

    • 对称算法,如 AES 和 ARCFOUR

    • 非对称算法,例如 Diffie-Hellman 和 RSA

    • 散列函数,如 MD5

  • Consumers(使用者)-来自提供器的加密服务的用户。使用者可以是应用程序、最终用户或内核操作。

    使用者示例包括:

    • 应用程序,如 IKE

    • 最终用户,如运行 encrypt 命令的普通用户

    • 内核操作,例如 IPsec

  • Mechanism(机制)-针对特定目的算法模式的应用。

    例如,应用于验证的 DES 机制(如 CKM_DES_MAC)与应用于加密的 DES 机制(如 CKM_DES_CBC_PAD)不同。

  • Metaslot(元插槽)-提供框架中装入的其他插槽的功能组合的单个插槽。元插槽简化了处理框架中提供的所有提供器功能的工作。使用元插槽的应用程序请求某操作时,元插槽将确定应执行该操作的实际插槽。元插槽功能可以配置,但不需要配置。缺省情况下,元插槽处于打开状态。要配置元插槽,请参见 cryptoadm(1M) 手册页。

  • Mode(模式)-加密算法的版本。例如,模式 CBC(Cipher Block Chaining,密码块链接)与模式 ECB(Electronic Code Book,电子源码书)不同。AES 算法包含两种模式:CKM_AES_ECB 和 CKM_AES_CBC。

  • Policy(策略)-由管理员做出的、要使哪些机制可用的选择。缺省情况下,所有提供器和所有机制都可用。禁用任何机制即是对策略的应用。启用已禁用的机制也是对策略的应用。

  • Providers(提供器)-使用者使用的加密服务。提供器插入到框架中,因此也称为插件

    提供器示例包括:

    • PKCS #11 库,如 pkcs11_softtoken.so

    • 加密算法模块,如 aesarcfour

    • 设备驱动程序及其关联的硬件加速器,例如 dca/0 加速器

  • Slot(插槽)-一种或多种加密设备的接口。对应于物理读取器或其他设备接口的每个插槽可能包含令牌。令牌提供框架中加密设备的逻辑视图。

  • Token(令牌)-在插槽中,令牌提供框架中加密设备的逻辑视图。

Solaris 加密框架的范围

框架为给出提供器的管理员、用户和开发者提供命令:

  • 管理命令-cryptoadm 命令提供用于列出可用提供器及其功能的 list 子命令。普通用户可以运行 cryptoadm listcryptoadm --help 命令。

    所有其他 cryptoadm 子命令要求您承担包括加密管理权限配置文件的角色或者成为超级用户。子命令(如 disableinstalluninstall)可用于管理框架。有关更多信息,请参见 cryptoadm(1M) 手册页。

    svcadm 命令用于管理 kcfd 守护进程和刷新内核中的加密策略。有关更多信息,请参见 svcadm(1M) 手册页。

  • 用户级命令-digestmac 命令提供文件完整性服务。encryptdecrypt 命令保护文件不被窃听。要使用这些命令,请参见使用 Solaris 加密框架保护文件(任务列表)

  • 第三方提供器的二进制文件签名-elfsign 命令使第三方可以对要在框架中使用的二进制文件签名。可以添加到框架中的二进制文件有 PKCS #11 库、内核算法模块和硬件设备驱动程序。要使用 elfsign 命令,请参见 《Solaris 开发者安全性指南》中的附录 F “打包和签署加密提供者”

Solaris 加密框架中的管理命令

cryptoadm 命令管理正在运行的加密框架。该命令是加密管理权限配置文件的一部分。可以将此配置文件指定给用于安全管理加密框架的角色。cryptoadm 命令管理以下方面:

  • 显示加密提供器的信息

  • 禁用或启用提供器机制

  • Solaris 10 1/06:禁用或启用元插槽

svcadm 命令用于启用、刷新和禁用加密服务守护进程 kcfd。此命令是 Solaris 服务管理工具 smf 的一部分。svc:/system/cryptosvcs 是加密框架的服务实例。有关更多信息,请参见 smf(5)svcadm(1M) 手册页。

Solaris 加密框架中的用户级命令

Solaris 加密框架提供了用于检查文件完整性、加密文件和解密文件的用户级命令。独立命令 elfsign 使提供器可以对要在框架中使用的二进制文件签名。

  • digest 命令-计算用于一个或多个文件或 stdin 的 message digest(消息摘要)。摘要用于验证文件的完整性。摘要功能的示例有 SHA1MD5

  • mac 命令-计算一个或多个文件或 stdin 的 message authentication code, MAC(消息验证代码)。MAC 将数据与经过验证的消息相关联。MAC 使接收者可以验证消息是否来自发送者,以及消息是否被篡改。sha1_macmd5_hmac 机制可以计算 MAC。

  • encrypt 命令-使用对称密码加密文件或 stdin。 encrypt -l 命令列出可用的算法。用户级库中列出的机制可用于 encrypt 命令。框架提供了可进行用户加密的 AES、DES、3DES(Triple-DES,三重 DES)和 ARCFOUR 机制。

  • decrypt 命令-解密使用 encrypt 命令加密的文件或 stdin。decrypt 命令使用的密钥和机制与用于加密原始文件的密钥和机制相同。

第三方软件的二进制文件签名

elfsign 命令提供了对要用于 Solaris 加密框架的提供器签名的方法。通常,此命令由提供器的开发者运行。

elfsign 命令具有请求 Sun 提供的证书和对二进制文件进行签名的子命令。另外一个子命令验证签名。未签名的二进制文件无法被 Solaris 加密框架使用。要对一个或多个提供器进行签名,需要 Sun 提供的证书和用于请求该证书的私钥。有关更多信息,请参见 《Solaris 开发者安全性指南》中的附录 F “打包和签署加密提供者”

Solaris 加密框架插件

第三方可以将其提供器插入到 Solaris 加密框架中。第三方提供器可以是以下对象之一:

  • PKCS #11 共享库

  • 可装入的内核软件模块,如加密算法、MAC 函数或摘要功能

  • 硬件加速器的内核设备驱动程序

必须使用 Sun 提供的证书对提供器对象进行签名。证书请求基于第三方选择的私钥和 Sun 提供的证书。证书请求发送到 Sun,Sun 将注册该第三方并发布证书。第三方然后使用 Sun 提供的证书对其提供器对象进行签名。

可装入的内核软件模块和硬件加速器的内核设备驱动程序也必须在内核中注册。注册通过 Solaris 加密框架 SPI(service provider interface,服务提供器接口)进行。

要安装提供器,第三方应提供用于安装签名的对象和 Sun 提供的证书的软件包。该软件包必须包括证书,并允许管理员将该证书放到安全目录中。有关更多信息,请参见 《Solaris Security for Developers Guide》《Solaris 开发者安全性指南》中的附录 F “打包和签署加密提供者”

加密服务和区域

全局区域和每个非全局的区域都有独立的 /system/cryptosvc 服务。在全局区域中启用或刷新加密服务时,kcfd 守护进程会在该全局区域中启动,全局区域的用户级策略将被设置,系统的内核策略也将被设置。在非全局区域中启用或刷新服务时,kcfd 守护进程将在该区域中启动,用户级策略将在该区域中设置。内核策略由全局区域设置。

有关区域的更多信息,请参见《系统管理指南:Solaris Containers-资源管理和 Solaris Zones》中的第 II 部分, “Zones”。有关用于管理持久性应用程序的服务管理工具的更多信息,请参见《系统管理指南:基本管理》中的第 14  章 “管理服务(概述)”smf(5) 手册页。

第 14 章 Solaris 加密框架(任务)

本章介绍如何使用 Solaris 加密框架。以下是本章中信息的列表。

使用加密框架(任务列表)

以下任务列表指向要使用加密框架的任务。

任务

说明

参考

保护单个文件或文件集

确保文件内容未被篡改。阻止侵入者读取文件。这些过程可以由普通用户完成。

使用 Solaris 加密框架保护文件(任务列表)

管理框架

添加、配置和删除软件提供器。禁用和启用硬件提供器机制。这些过程为管理过程。

管理加密框架(任务列表)

对提供器签名

使提供器添加到 Solaris 加密框架。 这些过程为开发者过程。

《Solaris 开发者安全性指南》中的附录 F “打包和签署加密提供者”

使用 Solaris 加密框架保护文件(任务列表)

Solaris 加密框架可以帮助您保护文件。以下任务列表指向用于列出可用算法和通过加密保护文件的过程。

任务

说明

参考

生成对称密钥

生成用于 encrypt 命令或 mac 命令的随机密钥。

如何生成对称密钥

提供用于确保文件完整性的校验和

验证接收者的文件副本是否与发送的文件相同。

如何计算文件摘要

使用消息验证代码 (message authentication code, MAC) 保护文件

向消息接收者验证您是发送者。

如何计算文件的 MAC

加密文件,然后将此已加密的文件解密

通过加密文件保护文件内容。提供用于解密文件的加密参数。

如何加密和解密文件

使用 Solaris 加密框架保护文件

本节介绍如何生成对称密钥、如何创建文件完整性校验和以及如何避免文件遭到窃听。本节中的命令可以由普通用户运行。开发者可以编写使用这些命令的脚本。

절차 如何生成对称密钥

加密文件以及生成文件的 MAC 需要使用密钥。密钥应派生于随机数池。

如果您的站点具有随机数生成器,请使用该生成器。或者,可以使用以 Solaris /dev/urandom 设备作为输入的 dd 命令。有关更多信息,请参见 dd(1M) 手册页。

  1. 确定算法要求的密钥长度。

    1. 列出可用算法。


      % encrypt -l
      
      Algorithm       Keysize:  Min   Max (bits)
      
      ------------------------------------------
      
      aes                       128   128
      
      arcfour                     8   128
      
      des                        64    64
      
      3des                      192   192
      
      
      
      % mac -l
      
      Algorithm       Keysize:  Min   Max (bits)
      
      ------------------------------------------
      
      des_mac                    64    64
      
      sha1_hmac                   8   512
      
      md5_hmac                    8   512
    2. 确定要传递到 dd 命令的密钥长度(以字节为单位)。

      将最小密钥大小和最大密钥大小除以 8。最小密钥大小和最大密钥大小不同时,可以使用中间密钥大小。例如,可以将值 8、16 或 64 传递到 sha1_hmacmd5_hmac 函数的 dd 命令。

  2. 生成对称密钥。


    % dd if=/dev/urandom of=keyfile bs=n count=n
    
    if=file

    输入文件。对于随机密钥,请使用 /dev/urandom 文件。

    of=keyfile

    存储已生成密钥的输出文件。

    bs=n

    密钥大小(以字节为单位)。要获取字节长度,请将密钥位的比特长度除以 8。

    count=n

    输入块的计数。n 的数值应为 1

  3. 将密钥存储在受保护的目录中。

    密钥文件不应被除用户之外的任何人读取。


    % chmod 400 keyfile
    

示例 14–1 创建用于 AES 算法的密钥

在以下示例中,将创建用于 AES 算法的密钥。也将存储该密钥用于以后的解密。AES 机制使用 128 位的密钥。该密钥在 dd 命令中表示为 16 字节。


% ls -al ~/keyf

drwx------   2 jdoe  staff        512 May 3 11:32 ./

% dd if=/dev/urandom of=$HOME/keyf/05.07.aes16 bs=16  count=1

% chmod 400 ~/keyf/05.07.aes16


示例 14–2 创建用于 DES 算法的密钥

在以下示例中,将创建用于 DES 算法的密钥。也将存储该密钥用于以后的解密。DES 机制使用 64 位的密钥。该密钥在 dd 命令中表示为 8 字节。


% dd if=/dev/urandom of=$HOME/keyf/05.07.des8 bs=8  count=1

% chmod 400 ~/keyf/05.07.des8


示例 14–3 创建用于 3DES 算法的密钥

在以下示例中,将创建用于 3DES 算法的密钥。也将存储该密钥用于以后的解密。3DES 机制使用 192 位的密钥。该密钥在 dd 命令中表示为 24 字节。


% dd if=/dev/urandom of=$HOME/keyf/05.07.3des.24 bs=24 count=1

% chmod 400 ~/keyf/05.07.3des.24


示例 14–4 创建用于 MD5 算法的密钥

在以下示例中,将创建用于 MD5 算法的密钥。也将存储该密钥用于以后的解密。 该密钥在 dd 命令中表示为 64 字节。


% dd if=/dev/urandom of=$HOME/keyf/05.07.mack64 bs=64 count=1

% chmod 400 ~/keyf/05.07.mack64

절차 如何计算文件摘要

计算文件摘要时,可以通过比较摘要输出来查看文件是否被篡改。摘要不会修改原始文件。

  1. 列出可用摘要算法。


    % digest -l
    
    md5
    
    sha1
  2. 计算文件摘要并保存摘要列表。

    digest 命令提供一种算法。


    % digest -v -a algorithm input-file > digest-listing
    
    -v

    显示以下格式的输出:


    algorithm (input-file) = digest
    
    -a algorithm

    用于计算文件摘要的算法。键入与步骤 1 的输出中显示的算法相同的算法。

    input-file

    digest 命令的输入文件。

    digest-listing

    digest 命令的输出文件。


示例 14–5 使用 MD5 机制计算摘要

在以下示例中,digest 命令使用 MD5 机制计算电子邮件附件的摘要。


% digest -v -a md5 email.attach >>  $HOME/digest.emails.05.07

% cat  ~/digest.emails.05.07

md5 (email.attach) = 85c0a53d1a5cc71ea34d9ee7b1b28b01

未使用 -v 选项时,将不会与摘要一起保存以下伴随信息:


% digest -a md5 email.attach >>  $HOME/digest.emails.05.07

% cat  ~/digest.emails.05.07

85c0a53d1a5cc71ea34d9ee7b1b28b01


示例 14–6 使用 SHA1 机制计算摘要

在以下示例中,digest 命令使用 SHA1 机制提供目录列表。结果保存于文件中。


% digest -v -a sha1 docs/* > $HOME/digest.docs.legal.05.07

% more ~/digest.docs.legal.05.07

sha1 (docs/legal1) = 1df50e8ad219e34f0b911e097b7b588e31f9b435

sha1 (docs/legal2) = 68efa5a636291bde8f33e046eb33508c94842c38

sha1 (docs/legal3) = 085d991238d61bd0cfa2946c183be8e32cccf6c9

sha1 (docs/legal4) = f3085eae7e2c8d008816564fdf28027d10e1d983

절차 如何计算文件的 MAC

消息验证代码或 MAC 会计算文件的摘要并使用密钥进一步保护该摘要。MAC 不会修改原始文件。

  1. 列出可用机制。


    % mac -l
    
    Algorithm       Keysize:  Min   Max
    
    -----------------------------------
    
    des_mac                    64    64
    
    sha1_hmac                   8   512
    
    md5_hmac                    8   512
  2. 生成相应长度的对称密钥。

    您有两种选择。可以提供将根据其生成密钥的 passphrase(口令短语)。或者,可以提供密钥。

    • 如果提供口令短语,则必须存储或记住该口令短语。如果您在线存储口令短语,则只有您才可以读取该口令短语文件。

    • 如果提供密钥,则它必须是对应于机制的正确大小。有关过程,请参见如何生成对称密钥

  3. 创建文件的 MAC。

    mac 命令提供密钥并使用对称密钥算法。


    % mac -v -a algorithm [ -k keyfile ] input-file
    
    -v

    显示以下格式的输出:


    algorithm (input-file) = mac
    
    -a algorithm

    用于计算 MAC 的算法。键入与 mac -l 命令的输出中显示的算法相同的算法。

    -k keyfile

    包含算法所指定长度的密钥的文件。

    input-file

    MAC 的输入文件。


示例 14–7 使用 DES_MAC 和口令短语计算 MAC

在以下示例中,将使用 DES_MAC 机制和派生于口令短语的密钥对电子邮件附件进行验证。MAC 列表将保存到文件中。如果口令短语存储在某个文件中,则除了该用户之外,其他任何人都不能读取该文件。


% mac -v -a des_mac email.attach

Enter key: <键入口令短语>

des_mac (email.attach) = dd27870a

% echo "des_mac (email.attach) = dd27870a" >> ~/desmac.daily.05.07


示例 14–8 使用 MD5_HMAC 和密钥文件计算 MAC

在以下示例中,将使用 MD5_HMAC 机制和密钥对电子邮件附件进行验证。MAC 列表将保存到文件中。


% mac -v -a md5_hmac -k $HOME/keyf/05.07.mack64 email.attach

md5_hmac (email.attach) = 02df6eb6c123ff25d78877eb1d55710c

% echo "md5_hmac (email.attach) = 02df6eb6c123ff25d78877eb1d55710c" \

>> ~/mac.daily.05.07


示例 14–9 使用 SHA1_HMAC 和密钥文件计算 MAC

在以下示例中,将使用 SHA1_HMAC 机制和密钥对目录清单进行验证。结果保存于文件中。


% mac -v -a sha1_hmac \

-k $HOME/keyf/05.07.mack64 docs/* > $HOME/mac.docs.legal.05.07

% more ~/mac.docs.legal.05.07

sha1_hmac (docs/legal1) = 9b31536d3b3c0c6b25d653418db8e765e17fe07a

sha1_hmac (docs/legal2) = 865af61a3002f8a457462a428cdb1a88c1b51ff5

sha1_hmac (docs/legal3) = 076c944cb2528536c9aebd3b9fbe367e07b61dc7

sha1_hmac (docs/legal4) = 7aede27602ef6e4454748cbd3821e0152e45beb4

절차 如何加密和解密文件

加密文件时,不会删除或更改原始文件。输出文件将被加密。

有关 encrypt 命令的常见错误的解决方案,请参见示例后面的部分。

  1. 创建适当长度的对称密钥。

    您有两种选择。可以提供将根据其生成密钥的 passphrase(口令短语)。或者,可以提供密钥。

    • 如果提供口令短语,则必须存储或记住该口令短语。如果您在线存储口令短语,则只有您才可以读取该口令短语文件。

    • 如果提供密钥,则它必须是对应于机制的正确大小。有关过程,请参见如何生成对称密钥

  2. 加密文件。

    encrypt 命令提供密钥并使用对称密钥算法。


    % encrypt -a algorithm  [ -k keyfile ] -i input-file -o output-file
    
    -a algorithm

    用于加密文件的算法。 键入与 encrypt -l 命令的输出中显示的算法相同的算法。

    -k keyfile

    包含算法所指定长度的密钥的文件。 每种算法的密钥长度(以位为单位)列在 encrypt -l 命令的输出中。

    -i input-file

    要加密的输入文件。命令不会更改此文件。

    -o output-file

    加密格式的输入文件的输出文件。


示例 14–10 使用 AES 和口令短语进行加密和解密

在以下示例中,将使用 AES 算法加密文件。密钥根据口令短语生成。如果口令短语存储在某个文件中,则除了该用户之外,其他任何人都不能读取该文件。


% encrypt -a aes -i ticket.to.ride -o ~/enc/e.ticket.to.ride

Enter key: <键入口令短语>

输入文件 ticket.to.ride 仍然以其原始格式存在。

要解密输出文件,用户应使用加密该文件的相同口令短语和加密机制。


% decrypt -a aes -i ~/enc/e.ticket.to.ride -o ~/d.ticket.to.ride

Enter key: <键入口令短语>


示例 14–11 使用 AES 和密钥文件进行加密和解密

在以下示例中,将使用 AES 算法加密文件。AES 机制使用 128 位(16 字节)的密钥。


% encrypt -a aes -k ~/keyf/05.07.aes16 \

-i ticket.to.ride -o ~/enc/e.ticket.to.ride 

输入文件 ticket.to.ride 仍然以其原始格式存在。

要解密输出文件,用户应使用加密该文件的相同密钥和加密机制。


% decrypt -a aes -k ~/keyf/05.07.aes16  \

-i ~/enc/e.ticket.to.ride -o ~/d.ticket.to.ride


示例 14–12 使用 ARCFOUR 和密钥文件进行加密和解密

在以下示例中,使用 ARCFOUR 算法加密文件。ARCFOUR 算法接受 8 位(1 字节)、64 位(8 字节)或 128 位(16 字节)的密钥。


% encrypt -a arcfour -i personal.txt \

-k ~/keyf/05.07.rc4.8 -o ~/enc/e.personal.txt

要解密输出文件,用户应使用加密该文件的相同密钥和加密机制。


% decrypt -a arcfour -i ~/enc/e.personal.txt \

-k ~/keyf/05.07.rc4.8 -o ~/personal.txt


示例 14–13 使用 3DES 和密钥文件进行加密和解密

在以下示例中,将使用 3DES 算法加密文件。3DES 算法要求 192 位(24 字节)的密钥。


% encrypt -a 3des -k ~/keyf/05.07.des24 \

-i ~/personal2.txt -o ~/enc/e.personal2.txt

要解密输出文件,用户应使用加密该文件的相同密钥和加密机制。


% decrypt -a 3des -k ~/keyf/05.07.des24 \

-i ~/enc/e.personal2.txt -o ~/personal2.txt

故障排除

以下消息说明,所使用的算法不接受提供给 encrypt 命令的密钥。

  • encrypt: unable to create key for crypto operation: CKR_ATTRIBUTE_VALUE_INVALID

  • encrypt: failed to initialize crypto operation: CKR_KEY_SIZE_RANGE

如果所提供的密钥不满足算法要求,则必须提供正确的密钥。

  • 一种选择是使用口令短语。框架然后提供满足要求的密钥。

  • 第二种选择是提供算法接受的密钥大小。例如,DES 算法要求 64 位的密钥。3DES 算法要求 192 位的密钥。

管理加密框架(任务列表)

以下任务列表指向用于管理 Solaris 加密框架中的软件和硬件提供器的过程。

任务

说明

参考

列出 Solaris 加密框架中的提供器

列出可在 Solaris 加密框架中使用的算法、库和硬件设备。

如何列出可用提供器

添加软件提供器

将 PKCS #11 库或内核模块添加到 Solaris 加密框架中。必须对提供器签名。

如何添加软件提供器

禁止使用用户级机制

删除不使用的软件机制。可以再次启用该机制。

如何禁止使用用户级机制

临时禁用内核模块的机制

临时删除使用的机制。通常用于测试。

如何禁止使用内核软件提供器

卸载提供器

删除使用的内核软件提供器。

示例 14–22

列出可用硬件提供器

显示连接的硬件、硬件提供的机制以及为使用而启用的机制。

如何列出硬件提供器

禁用硬件提供器的机制

请确保未使用所选择的硬件加速器机制。

如何禁用硬件提供器机制和功能

重新启动或刷新加密服务

请确保加密服务可用。

如何刷新或重新启动所有加密服务

管理加密框架

本节介绍如何在 Solaris 加密框架中管理软件提供器和硬件提供器。如果需要,可以删除使用的软件提供器和硬件提供器。例如,可以禁止实施某软件提供器的算法。然后,可以强制系统使用其他软件提供器的算法。

절차 如何列出可用提供器

Solaris 加密框架可为多种类型的使用者提供算法:

  • 用户级提供器为与 libpkcs11 库相链接的应用程序提供 PKCS #11 加密接口

  • 内核软件提供器为 IPsec、Kerberos 和其他 Solaris 内核组件提供算法

  • 内核硬件提供器通过 pkcs11_kernel 库提供内核使用者和应用程序可使用的算法

  1. 以简要格式列出提供器。

    普通用户只能使用用户级机制。


    % cryptoadm list
    
    user-level providers:
    
        /usr/lib/security/$ISA/pkcs11_kernel.so
    
        /usr/lib/security/$ISA/pkcs11_softtoken.so
    
    
    
    kernel software providers:
    
        des
    
        aes
    
        blowfish
    
        arcfour
    
        sha1
    
        md5
    
        rsa
    
    
    
    kernel hardware providers:
    
        dca/0
  2. 列出 Solaris 加密框架中的提供器及其机制。

    以下输出列出了所有的机制。但是,所列出的一些机制可能无法使用。要仅列出管理员已批准使用的机制,请参见示例 14–15

    为了便于显示,已重新设置输出格式。


    % cryptoadm list -m
    
    user-level providers:
    
    =====================
    
    /usr/lib/security/$ISA/pkcs11_kernel.so: CKM_MD5,CKM_MD5_HMAC,
    
    CKM_MD5_HMAC_GENERAL,CKM_SHA_1,CKM_SHA_1_HMAC,CKM_SHA_1_HMAC_GENERAL,
    
    …
    
    /usr/lib/security/$ISA/pkcs11_softtoken.so: 
    
    CKM_DES_CBC,CKM_DES_CBC_PAD,CKM_DES_ECB,CKM_DES_KEY_GEN,
    
    CKM_DES3_CBC,CKM_DES3_CBC_PAD,CKM_DES3_ECB,CKM_DES3_KEY_GEN,
    
    CKM_AES_CBC,CKM_AES_CBC_PAD,CKM_AES_ECB,CKM_AES_KEY_GEN,
    
    …
    
    kernel software providers:
    
    ==========================
    
    des: CKM_DES_ECB,CKM_DES_CBC,CKM_DES3_ECB,CKM_DES3_CBC
    
    aes: CKM_AES_ECB,CKM_AES_CBC
    
    blowfish: CKM_BF_ECB,CKM_BF_CBC
    
    arcfour: CKM_RC4
    
    sha1: CKM_SHA_1,CKM_SHA_1_HMAC,CKM_SHA_1_HMAC_GENERAL
    
    md5: CKM_MD5,CKM_MD5_HMAC,CKM_MD5_HMAC_GENERAL
    
    rsa: CKM_RSA_PKCS,CKM_RSA_X_509,CKM_MD5_RSA_PKCS,CKM_SHA1_RSA_PKCS
    
    swrand: No mechanisms presented.
    
    
    
    kernel hardware providers:
    
    ==========================
    
    dca/0: CKM_MD5,CKM_MD5_HMAC,CKM_MD5_HMAC_GENERAL,…

示例 14–14 查找现有的加密机制

在以下示例中,列出了用户级库 pkcs11_softtoken 提供的所有机制。


% cryptoadm list -m provider=/usr/lib/security/'$ISA'/pkcs11_softtoken.so

/usr/lib/security/$ISA/pkcs11_softtoken.so:

CKM_DES_CBC,CKM_DES_CBC_PAD,CKM_DES_ECB,CKM_DES_KEY_GEN,

CKM_DES3_CBC,CKM_DES3_CBC_PAD,CKM_DES3_ECB,CKM_DES3_KEY_GEN,

…

CKM_SSL3_KEY_AND_MAC_DERIVE,CKM_TLS_KEY_AND_MAC_DERIVE


示例 14–15 查找可用的加密机制

策略确定可使用的机制。管理员设置该策略。管理员可以选择禁用特定提供器的机制。-p 选项显示管理员设置的策略允许的机制列表。


% cryptoadm list -p

user-level providers:

=====================

/usr/lib/security/$ISA/pkcs11_kernel.so: all mechanisms are enabled.

random is enabled.

/usr/lib/security/$ISA/pkcs11_softtoken.so: all mechanisms are enabled.

random is enabled.



kernel software providers:

==========================

des: all mechanisms are enabled.

aes: all mechanisms are enabled.

blowfish: all mechanisms are enabled.

arcfour: all mechanisms are enabled.

sha1: all mechanisms are enabled.

md5: all mechanisms are enabled.

rsa: all mechanisms are enabled.

swrand: random is enabled.



kernel hardware providers:

==========================

dca/0: all mechanisms are enabled. random is enabled.

절차 如何添加软件提供器

  1. 承担主管理员角色,或成为超级用户。

    主管理员角色拥有主管理员配置文件。要创建角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 列出系统可使用的软件提供器。


    # cryptoadm list
    
    user-level providers:
    
            /usr/lib/security/$ISA/pkcs11_kernel.so
    
            /usr/lib/security/$ISA/pkcs11_softtoken.so
    
    
    
    kernel software providers:
    
        des
    
        aes
    
        blowfish
    
        arcfour
    
        sha1
    
        md5
    
        rsa
    
        swrand
    
    
    
    kernel hardware providers:
    
         dca/0
    
  3. 使用 pkgadd 命令添加提供器的软件包


    # pkgadd -d /path/to/package pkginst
    

    该软件包必须包括由 Sun 提供的证书签名的软件。要请求 Sun 提供的证书并对提供器签名,请参见 《Solaris 开发者安全性指南》中的附录 F “打包和签署加密提供者”

    该软件包应包含这样的脚本:通知加密框架具有一组机制的另外一个提供器可用。有关打包要求的信息,请参见 《Solaris 开发者安全性指南》中的附录 F “打包和签署加密提供者”

  4. 刷新提供器。

    如果添加了软件提供器或者添加了硬件并为该硬件添加了指定的策略,则需要刷新提供器。


    # svcadm refresh svc:/system/cryptosvc
    
  5. 查找列表中的新提供器。

    在本例中,安装了新的内核软件提供器。


    # cryptoadm list 
    
    …
    
    kernel software providers:
    
        des
    
        aes
    
        blowfish
    
        arcfour
    
        sha1
    
        md5
    
        rsa
    
        swrand
    
        ecc <-- 增加的提供器

示例 14–16 添加用户级软件提供器

在以下示例中,将安装签名的 PKCS #11 库。


# pkgadd -d /cdrom/cdrom0/SolarisNew

应答提示

# svcadm refresh system/cryptosvc

# cryptoadm list

user-level providers:

==========================

    /usr/lib/security/$ISA/pkcs11_kernel.so

    /usr/lib/security/$ISA/pkcs11_softtoken.so

    /opt/SUNWconn/lib/$ISA/libpkcs11.so.1 <-- 增加的提供器

使用加密框架测试库的开发者可以手动安装该库。


# cryptoadm install provider=/opt/SUNWconn/lib/'$ISA'/libpkcs11.so.1

절차 如何禁止使用用户级机制

如果不能使用库提供器的某些加密机制,则可以删除所选机制。此过程使用 pkcs11_softtoken 库中的 DES 机制为例。

  1. 成为超级用户或承担包括加密管理权限配置文件的角色。

    要创建包括加密管理权限配置文件的角色并将该角色指定给用户,请参见示例 9–7

  2. 列出特定用户级软件提供器提供的机制。


    % cryptoadm list -m provider=/usr/lib/security/'$ISA'/pkcs11_softtoken.so
    
    /usr/lib/security/$ISA/pkcs11_softtoken.so:
    
    CKM_DES_CBC,CKM_DES_CBC_PAD,CKM_DES_ECB,CKM_DES_KEY_GEN,
    
    CKM_DES3_CBC,CKM_DES3_CBC_PAD,CKM_DES3_ECB,CKM_DES3_KEY_GEN,
    
    CKM_AES_CBC,CKM_AES_CBC_PAD,CKM_AES_ECB,CKM_AES_KEY_GEN,
    
    …
  3. 列出可用的机制。


    $ cryptoadm list -p
    
    user-level providers:
    
    =====================
    
    …
    
    /usr/lib/security/$ISA/pkcs11_softtoken.so: all mechanisms are enabled.
    
    random is enabled.
    
    …
  4. 禁用无法使用的机制。


    $ cryptoadm disable provider=/usr/lib/security/'$ISA'/pkcs11_softtoken.so \
    
    > mechanism=CKM_DES_CBC,CKM_DES_CBC_PAD,CKM_DES_ECB
    
  5. 列出可使用的机制。


    $ cryptoadm list -p provider=/usr/lib/security/'$ISA'/pkcs11_softtoken.so
    
    /usr/lib/security/$ISA/pkcs11_softtoken.so: all mechanisms are enabled,
    
    except CKM_DES_ECB,CKM_DES_CBC_PAD,CKM_DES_CBC. random is enabled.

示例 14–17 启用用户级软件提供器机制

在以下示例中,将使禁用的 DES 机制再次可用。


$ cryptoadm list -m provider=/usr/lib/security/'$ISA'/pkcs11_softtoken.so

/usr/lib/security/$ISA/pkcs11_softtoken.so:

CKM_DES_CBC,CKM_DES_CBC_PAD,CKM_DES_ECB,CKM_DES_KEY_GEN,

CKM_DES3_CBC,CKM_DES3_CBC_PAD,CKM_DES3_ECB,CKM_DES3_KEY_GEN,

…

$ cryptoadm list -p provider=/usr/lib/security/'$ISA'/pkcs11_softtoken.so

/usr/lib/security/$ISA/pkcs11_softtoken.so: all mechanisms are enabled,

except CKM_DES_ECB,CKM_DES_CBC_PAD,CKM_DES_CBC. random is enabled.

$ cryptoadm enable provider=/usr/lib/security/'$ISA'/pkcs11_softtoken.so \

> mechanism=CKM_DES_ECB

$ cryptoadm list -p provider=/usr/lib/security/'$ISA'/pkcs11_softtoken.so

/usr/lib/security/$ISA/pkcs11_softtoken.so: all mechanisms are enabled,

except CKM_DES_CBC_PAD,CKM_DES_CBC. random is enabled.


示例 14–18 启用所有用户级软件提供器机制

在以下示例中,将启用用户级库的所有机制。


$ cryptoadm enable provider=/usr/lib/security/'$ISA'/pkcs11_softtoken.so all

$ cryptoadm list -p provider=/usr/lib/security/'$ISA'/pkcs11_softtoken.so

/usr/lib/security/$ISA/pkcs11_softtoken.so: all mechanisms are enabled.

random is enabled.


示例 14–19 永久删除用户级软件提供器可用性

在以下示例中,将删除 libpkcs11.so.1 库。


$ cryptoadm uninstall provider=/opt/SUNWconn/lib/'$ISA'/libpkcs11.so.1

$ cryptoadm list

user-level providers:

    /usr/lib/security/$ISA/pkcs11_kernel.so

    /usr/lib/security/$ISA/pkcs11_softtoken.so



kernel software providers:

…

절차 如何禁止使用内核软件提供器

如果加密框架提供多种模式的提供器(如 AES),则可以删除所使用的速度较慢的机制或损坏的机制。此过程使用 AES 算法为例。

  1. 成为超级用户或承担包括加密管理权限配置文件的角色。

    要创建包括加密管理权限配置文件的角色并将该角色指定给用户,请参见示例 9–7

  2. 列出特定内核软件提供器提供的机制。


    $ cryptoadm list -m provider=aes
    
    aes: CKM_AES_ECB,CKM_AES_CBC
  3. 列出可用的机制。


    $ cryptoadm list -p provider=aes
    
    aes: all mechanisms are enabled.
  4. 禁用无法使用的机制。


    $ cryptoadm disable provider=aes mechanism=CKM_AES_ECB
    
  5. 列出可用的机制。


    $ cryptoadm list -p provider=aes
    
    aes: all mechanisms are enabled, except CKM_AES_ECB.

示例 14–20 启用内核软件提供器机制

在以下示例中,将使禁用的 AES 机制再次可用。


cryptoadm list -m provider=aes

aes: CKM_AES_ECB,CKM_AES_CBC

$ cryptoadm list -p provider=aes

aes: all mechanisms are enabled, except CKM_AES_ECB.

$ cryptoadm enable provider=aes mechanism=CKM_AES_ECB

$ cryptoadm list -p provider=aes

aes: all mechanisms are enabled.


示例 14–21 临时删除内核软件提供器可用性

在以下示例中,将临时删除所使用的 AES 提供器。unload 子命令用于禁止在卸载某提供器时自动装入该提供器。例如,安装影响提供器的修补程序时,将使用 unload 子命令。


$ cryptoadm unload provider=aes

$ cryptoadm list

...

kernel software providers:

         des

         aes (inactive)

         blowfish

         arcfour

         sha1

         md5

         rsa

         swrand

刷新加密框架之前,AES 提供器不可用。


$ svcadm refresh system/cryptosvc

$ cryptoadm list

...

kernel software providers:

         des

         aes

         blowfish

         arcfour

         sha1

         md5

         rsa

         swrand

如果内核使用者正在使用内核软件提供器,则不会卸载该软件。此时将显示错误消息,但可继续使用该提供器。



示例 14–22 永久删除软件提供器可用性

在以下示例中,将删除所使用的 AES 提供器。一旦删除,该 AES 提供器将不会在内核软件提供器的策略列表中显示。


$ cryptoadm uninstall provider=aes

$ cryptoadm list

…

kernel software providers:

         des

         blowfish

         arcfour

         sha1

         md5

         rsa

         swrand

如果内核使用者正在使用内核软件提供器,将显示错误消息,但可继续使用该提供器。



示例 14–23 重新安装已删除的内核软件提供器

在以下示例中,将重新安装 AES 内核软件提供器。


$ cryptoadm install provider=aes mechanism=CKM_AES_ECB,CKM_AES_CBC

$ cryptoadm list

…

kernel software providers:

         des

         aes

         blowfish

         arcfour

         sha1

         md5

         rsa

         swrand

절차 如何列出硬件提供器

硬件提供器将自动定位和装入。有关更多信息,请参见 driver.conf(4) 手册页。

开始之前

添加期望在 Solaris 加密框架中使用的硬件时,该硬件将使用 SPI 在内核中注册。框架将检查是否已对硬件驱动程序签名。具体地说,框架将检查是否已使用 Sun 发布的证书对驱动程序的对象文件签名。

  1. 列出系统中可用的硬件提供器。


    % cryptoadm list
    
    … 
    
    kernel hardware providers:
    
       dca/0
  2. 列出该板提供的机制。


    % cryptoadm list -m provider=dca/0
    
    dca/0: CKM_MD5,CKM_MD5_HMAC,CKM_MD5_HMAC_GENERAL,…
  3. 列出板中可使用的机制。


    % cryptoadm list -p provider=dca/0
    
    dca/0: all mechanisms are enabled. random is enabled.

절차 如何禁用硬件提供器机制和功能

可以有选择地禁用硬件提供器的机制和随机数功能。要再次启用它们,请参见示例 14–24

  1. 列出板中可用的机制和功能。


    % cryptoadm list -p provider=dca/0
    
    dca/0: all mechanisms are enabled. random is enabled.
  2. 成为超级用户或承担包括加密管理权限配置文件的角色。

    要创建包括加密管理权限配置文件的角色并将该角色指定给用户,请参见示例 9–7

  3. 选择要禁用的机制或功能:

    • 禁用选择的机制。


      # cryptoadm list -m provider=dca/0
      
      dca/0: CKM_MD5,CKM_MD5_HMAC,CKM_MD5_HMAC_GENERAL,…
      
      CKM_DES_ECB,CKM_DES3_ECB…
      
      random is enabled.
      
      # cryptoadm disable provider=dca/0 mechanism=CKM_DES_ECB,CKM_DES3_ECB
      
      # cryptoadm list -p provider=dca/0
      
      dca/0: all mechanisms are enabled except CKM_DES_ECB,CKM_DES3_ECB.
      
      random is enabled.
    • 禁用随机数生成器。


      # cryptoadm list -p provider=dca/0
      
      dca/0: all mechanisms are enabled. random is enabled.
      
      # cryptoadm disable provider=dca/0 random
      
      # cryptoadm list -p provider=dca/0
      
      dca/0: all mechanisms are enabled. random is disabled.
    • 禁用所有机制。不禁用随机数生成器。


      # cryptoadm list -p provider=dca/0
      
      dca/0: all mechanisms are enabled. random is enabled.
      
      # cryptoadm disable provider=dca/0 mechanism=all
      
      # cryptoadm list -p provider=dca/0
      
      dca/0: all mechanisms are disabled. random is enabled.
    • 禁用硬件的每种功能和机制。


      # cryptoadm list -p provider=dca/0
      
      dca/0: all mechanisms are enabled. random is enabled.
      
      # cryptoadm disable provider=dca/0 all
      
      # cryptoadm list -p provider=dca/0
      
      dca/0: all mechanisms are disabled. random is disabled.

示例 14–24 启用硬件提供器的机制和功能

在以下示例中,将有选择地启用单个硬件的已禁用机制。


# cryptoadm list -p provider=dca/0

dca/0: all mechanisms are enabled except CKM_DES_ECB,CKM_DES3_ECB.

random is enabled.

# cryptoadm enable provider=dca/0 mechanism=CKM_DES3_ECB

# cryptoadm list -p provider=dca/0

dca/0: all mechanisms are enabled except CKM_DES_ECB. random is enabled.

在以下示例中,将仅启用随机数生成器。


# cryptoadm list -p provider=dca/0

dca/0: all mechanisms are enabled, except CKM_MD5,CKM_MD5_HMAC,…. 

random is disabled.

# cryptoadm enable provider=dca/0 random

# cryptoadm list -p provider=dca/0

dca/0: all mechanisms are enabled, except CKM_MD5,CKM_MD5_HMAC,….

random is enabled.

在以下示例中,将仅启用机制。将继续禁用随机生成器。


# cryptoadm list -p provider=dca/0

dca/0: all mechanisms are enabled, except CKM_MD5,CKM_MD5_HMAC,…. 

random is disabled.

# cryptoadm enable provider=dca/0 mechanism=all

# cryptoadm list -p provider=dca/0

dca/0: all mechanisms are enabled. random is disabled.

在以下示例中,将启用板中的所有功能和机制。


# cryptoadm list -p provider=dca/0

dca/0: all mechanisms are enabled, except CKM_DES_ECB,CKM_DES3_ECB.

random is disabled.

# cryptoadm enable provider=dca/0 all

# cryptoadm list -p provider=dca/0

dca/0: all mechanisms are enabled. random is enabled.

절차 如何刷新或重新启动所有加密服务

缺省情况下,将启用 Solaris 加密框架。当由于任何原因 kcfd 守护进程失败时,可以使用服务管理工具重新启动加密服务。有关更多信息,请参见 smf(5)svcadm(1M) 手册页。有关重新启用加密服务的区域的影响,请参见加密服务和区域

  1. 检查加密服务的状态。


    % svcs \*cryptosvc\*
    
     STATE          STIME    FMRI
    
    offline         Dec_09   svc:/system/cryptosvc:default
  2. 成为超级用户或承担启用加密服务的等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见配置 RBAC(任务列表)


    # svcadm enable svc:/system/cryptosvc
    

示例 14–25 刷新加密服务

在以下示例中,将在全局区域中刷新加密服务。因此,每个非全局区域中的内核级加密策略也将被刷新。


# svcadm refresh system/cryptosvc