NAME
des_crypt, ecb_crypt, cbc_crypt, des_setparity, DES_FAILED - 빠른 DES 암호화
SYNOPSIS
#include <rpc/des_crypt.h>
int ecb_crypt(char *key, char *data, unsigned int datalen,
unsigned int mode);
int cbc_crypt(char *key, char *data, unsigned int datalen,
unsigned int mode, char *ivec);
void des_setparity(char *key);
int DES_FAILED(int status);
DESCRIPTION
ecb_crypt()와 cbc_crypt()는 NBS DES(데이터 암호화 표준)을 구현한다. 이 루틴들은 crypt(3)보다 빠르고 범용적이다. 또한 DES 하드웨어가 있으면 활용할 수 있다. ecb_crypt()는 ECB(전자 코드북) 모드로 암호화를 하는데, 각 데이터 블록을 독립적으로 암호화하는 방식이다. cbc_crypt()는 CBC(암호 블록 체인) 모드로 암호화를 하는데, 연속한 블록들을 연결하는 방식이다. CBC 모드는 블록 삽입, 삭제, 바꿔치기를 방어할 수 있다. 또한 평문 내의 규칙성이 암호문에는 등장하지 않게 된다.
이 루틴들을 사용하는 방법은 이렇다. 첫 번째 인자 key는 패리티 있는 8바이트 암호화 키다. 키의 패리티는 DES에서는 각 바이트의 최하위 비트이며 des_setparity()로 설정한다. 두 번째 인자 data는 암호화나 복호화를 할 데이터를 담는다. 세 번째 인자 datalen은 data의 바이트 단위 길이인데 8의 배수여야 한다. 네 번째 인자 mode는 뭔가를 OR 해서 만든다. 암호화 방향이면 DES_ENCRYPT 아니면 DES_DECRYPT를 OR 한다. 그리고 소프트웨어 암호화 대 하드웨어 암호화로 DES_HW 아니면 DES_SW를 OR 한다. DES_HW를 지정했는데 하드웨어가 없으면 소프트웨어에서 암호화를 수행하며 루틴에서 DESERR_NOHWDEVICE를 반환한다. cbc_crypt()에서 ivec 인자는 체인 처리를 위한 8바이트 초기화 벡터다. 반환 시에 다음 초기화 벡터로 갱신돼 있다.
RETURN VALUE
DESERR_NONE- 오류 없음.
DESERR_NOHWDEVICE- 암호화가 성공하긴 했지만 요청한 하드웨어가 아니라 소프트웨어에서 이뤄졌다.
DESERR_HWERROR- 하드웨어나 드라이버에서 오류가 발생했다.
DESERR_BADPARAM- 루틴 인자가 잘못되었다.
결과 상태 stat이 있을 때 처음 두 가지 상태에 대해서만 매크로 DES_FAILED(stat)가 거짓이다.
VERSIONS
glibc 버전 2.1에서 이 함수들이 추가되었다.
더이상 안전하지 않다고 보는 DES 블록 암호를 쓰기 때문에 glibc 2.28에서 ecb_crypt(), cbc_crypt(), crypt_r(), des_setparity()가 제거되었다. 응용에선 libgcrypt 같은 현대적인 암호 라이브러리로 전환해야 한다.
ATTRIBUTES
이 절에서 사용하는 용어들에 대한 설명은 attributes(7)를 보라.
| 인터페이스 | 속성 | 값 |
|---|---|---|
ecb_crypt(), cbc_crypt(), des_setparity() |
스레드 안전성 | MT-Safe |
CONFORMING TO
4.3BSD. POSIX.1에는 없음.
SEE ALSO
2021-03-22