在 Oracle® Solaris 11.2 中管理加密和证书

退出打印视图

更新时间: 2014 年 9 月
 
 

如何加密和解密文件

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

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


注 -  加密和解密文件时,请尽可能尝试使用具有认可的密钥长度的 FIPS 认可算法。请参见Using a FIPS 140 Enabled System in Oracle Solaris 11.2 中的FIPS 140 Algorithms in the Cryptographic Framework中的列表。运行 encrypt -l 命令查看可用算法及其密钥长度。
  1. 创建长度适当的对称密钥。

    可以提供据以生成密钥的 passphrase(口令短语),也可以提供一个密钥。

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

    • 如果提供密钥,则其大小必须是适用于相应机制的正确大小。您可以使用 pktool 命令。有关该过程和一些示例,请参见如何使用 pktool 命令生成对称密钥

  2. 对文件加密。

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

    % encrypt -a algorithm [-v] \
    [-k keyfile | -K key-label [-T token]] [-i input-file] [-o output-file]
    –a algorithm

    用于对文件加密的算法。键入 encrypt -l 命令输出中显示的算法。请尽可能按照Using a FIPS 140 Enabled System in Oracle Solaris 11.2 中的FIPS 140 Algorithms in the Cryptographic Framework中的列表选择 FIPS 认可的算法。

    –k keyfile

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

    –K key-label

    PKCS #11 密钥库中的密钥标签。

    –T token

    令牌名称。缺省情况下,令牌是 Sun Software PKCS#11 softtoken。仅在使用 –K key-label 选项时才使用。

    –i input-file

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

    –o output-file

    输出文件,是输入文件的加密形式。

示例 3-8  创建 AES 密钥以加密文件

在以下示例中,用户创建 AES 密钥并将其存储在现有 PKCS #11 密钥库中以用于加密和解密。用户可以验证密钥是否存在,也可以使用密钥,但是无法查看密钥本身。

% pktool genkey label=MyAESkeynumber1 keytype=aes keylen=256
Enter PIN for Sun Software PKCS#11 softtoken  :Type password

% pktool list objtype=key
Enter PIN for Sun Software PKCS#11 softtoken  :Type password
No.      Key Type      Key Len.      Key Label
----------------------------------------------------
Symmetric keys:
1        AES           256           MyAESkeynumber1

要使用密钥来加密文件,用户应通过密钥标签检索密钥。

% encrypt -a aes -K MyAESkeynumber1 -i encryptthisfile -o encryptedthisfile

要解密 encryptedthisfile 文件,用户应通过密钥标签检索密钥。

% decrypt -a aes -K MyAESkeynumber1 -i encryptedthisfile -o sameasencryptthisfile
示例 3-9  使用 AES 和口令短语进行加密和解密

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

% encrypt -a aes -i ticket.to.ride -o ~/enc/e.ticket.to.ride
Enter passphrase:    Type passphrase
Re-enter passphrase: Type passphrase again

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

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

% decrypt -a aes -i ~/enc/e.ticket.to.ride -o ~/d.ticket.to.ride
Enter passphrase: Type passphrase
示例 3-10  使用 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

故障排除

以下消息表明,所使用的算法不接受您提供给 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 位的密钥。