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는 암호화나 복호화를 할 데이터를 담는다. 세 번째 인자 datalendata의 바이트 단위 길이인데 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

des(1), crypt(3), xcrypt(3)


2021-03-22