OpenSSL 라이브러리의 DES 사용중에 *ivec 란 무엇인가요?

litdream의 이미지

안녕하세요. OpenSSL lib 은 솔직히 처음사용해보고,
암호/복호에 너무 무지하다보니, 이런 기본적인 질문을 올립니다.

예를들어, <openssl/des.h> 을 보면

void DES_ncbc_encrypt(const unsigned char *input,
          unsigned char *output,
          long length,
          DES_key_schedule *schedule,
          DES_cblock *ivec, 
          int enc);

1. 여기서 *ivec 란 무엇인가요?
2. 이름으로 보아선 벡터인데, 이것이 데이터 스트럭쳐의 vector 라면
여러개의 블록중의 첫번째 포인터일 가능성이 있을텐데, 그렇다면
나중에 모든 블록을 free() 해줘야 하나요?
3. 만약에 그렇다면 블록이 몇개인지는 단순히
strlen(output) / sizeof(DES_cblock) 이라고 할수 있는가요?
4. 사실, 그렇더래도, output 이라는 공간을 만들어서 보내주게 되는데,
굳이 ivec 를 받을 필요는 없지 않을듯 하지만, 그렇게 디자인 했을리는
없고, 분명히 이유가 있을텐데요.. 혹시 제가 놓치고 있는점은?
5. 아니면 아예 제가 지금 길을 잘못 잡고 있나요??

잘 부탁드립니다.
꾸뻑.

IsExist의 이미지

입력 파라메터들중 포인터들은 다 이미 공간이 할당되어 있어야 합니다.

ivec은 암호 모드상 필요한 겁니다. 블럭 암호들이 블럭단위로 암호화를 하는데 입력, 키, ivec을 조합으로 각기 다른 효과를 냅니다.

ivec의 크기는 키 크기, 해당 암호 알고리즘의 블럭크기에 일반적으로 같습니다.

apps/ 디렉토리 밑의 샘플들은 참고해서 사용하시면 되구요. 기본적으로 암호화 개념을 가지고 있어야 사용하는데 무리가 없을겁니다.

---------
간디가 말한 우리를 파괴시키는 7가지 요소

첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스

이익추구를 위해서라면..

다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치