des_crypt, ecb_crypt, cbc_crypt, des_setparity, DES_FAILED -
高速な DES 暗号化
#include <rpc/des_crypt.h>
int ecb_crypt(char *key, char *data, unsigned datalen,
unsigned mode);
int cbc_crypt(char *key, char *data, unsigned datalen,
unsigned mode, char *ivec);
void des_setparity(char *key);
int DES_FAILED(int status);
ecb_crypt() と
cbc_crypt() は NBS DES (Data Encryption
Standard, データ暗号化規格)
を実装している。
これらのルーチンは
crypt(3)
よりも高速でより一般的な目的に使用できる。
利用可能であれば、これらのルーチンは
DES
ハードウェアを使用することもできる。
ecb_crypt() は ECB (Electronic Code Book)
モードで暗号化する。
このモードでは
(個々の)
データのブロックを独立して暗号化する
cbc_crypt() は CBC (Cipher Block Chaining)
モードで暗号化する。
このモードでは連続するブロックを互いに連鎖させて暗号化する。
CBC
はブロックの挿入・削除・置き換えから保護する。
また平文の規則性が暗号文に現れない。
これらのルーチンの使用法を示す。
第 1 引数
key
はパリティ付きの 8
バイトの暗号化鍵である。
鍵のパリティを設定するには
des_setparity() を使うこと。 DES
の場合、鍵のパリティは各バイトの最下位ビットである。
第 2 引数
data
は暗号化または復号化されるデータを含む。
第 3 引数
datalen は
data
のバイト長であり、8
の倍数でなければならない。
第 4 引数
mode
はいくつかの値を OR
することで作成する。
暗号化の方向 (訳註:
暗号化なのか復号化なのか)
を指定するため、
DES_ENCRYPT または
DES_DECRYPT を OR
する。
暗号化をソフトウェアで行うかハードウェアで行うかを指定するため、
DES_HW または
DES_SW を OR
する。
DES_HW
が指定されていて、かつハードウェアがない場合、
暗号化はソフトウェアで実行されて、ルーチンは
DESERR_NOHWDEVICE を返す。
cbc_crypt()
において、引数
ivec
はデータブロックを連鎖させる際の
8
バイトの初期化ベクトルである。
この引数はルーチンから戻るときに次の初期化ベクトルに更新される。
- DESERR_NONE
- エラーなし。
- DESERR_NOHWDEVICE
- 暗号化は成功したが、要求されたハードウェアの代わりにソフトウェアで実行された。
- DESERR_HWERROR
- ハードウェアまたはドライバでエラーが発生した。
- DESERR_BADPARAM
- ルーチンへの引数が不正である。
結果の状態
stat
を与えたとき、マクロ
DES_FAILED(stat) が false
になるのは、最初の 2
つだけである。
これらの関数は glibc
のバージョン 2.1
で追加された。
Because they employ the DES block cipher, which is no longer considered secure,
ecb_crypt(),
ecb_crypt(),
crypt_r(), and
des_setparity() were removed in glibc 2.28. Applications should switch
to a modern cryptography library, such as
libgcrypt.
この節で使用されている用語の説明については、
attributes(7) を参照。
インターフェース |
属性 |
値 |
ecb_crypt(), cbc_crypt(), des_setparity() |
Thread safety |
MT-Safe |
4.3BSD. POSIX.1 にはない。
des(1),
crypt(3),
xcrypt(3)
この man ページは Linux
man-pages
プロジェクトのリリース
5.10
の一部である。プロジェクトの説明とバグ報告に関する情報は
https://www.kernel.org/doc/man-pages/
に書かれている。