Rijndael 알고리즘 질문 입니다.
글쓴이: yun8085 / 작성시간: 수, 2012/02/01 - 9:23오전
http://www.codeproject.com/Articles/1380/A-C-Implementation-of-the-Rijndael-Encryption-Decr
위의 링크에서 Rijndael 알고리즘을 참고하였는데요
AES 알고리즘은 IV 값이 있는 것으로 아는데 해당 소스 내에는
해당 값이 없네요???
무슨 차이인가요?? IV값이 무슨 역할을 하는건가요????
void main() { try { char szHex[33]; //One block testing CRijndael oRijndael; oRijndael.MakeKey("abcdefghabcdefgh", "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 16, 16); char szDataIn[] = "aaaaaaaabbbbbbbb"; char szDataOut[17] = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; oRijndael.EncryptBlock(szDataIn, szDataOut); CharStr2HexStr((unsigned char*)szDataIn, szHex, 16); cout << szHex << endl; cout << szDataIn << endl; CharStr2HexStr((unsigned char*)szDataOut, szHex, 16); cout << szHex << endl; cout << szDataOut << endl; memset(szDataIn, 0, 16); oRijndael.DecryptBlock(szDataOut, szDataIn); CharStr2HexStr((unsigned char*)szDataIn, szHex, 16); cout << szHex << endl; } catch(exception& roException) { cout << roException.what() << endl; } }
Forums:
IV(initial vector)를 알고 계시다면
IV(initial vector)를 알고 계시다면 ECB, CBC 같은 용어들도 알고 계실 수 있겠네요.
보여주신 코드처럼 IV 따위 없이 정해진 키로 그냥 암호화 하는 게 ECB(electronic codebook) 방식입니다. 간단한 건 좋은데, 동일한 평문 블럭이 항상 동일한 암호문 블럭으로 바뀌므로 데이터의 반복 패턴이 쉽게 드러난다는 단점이 있습니다. (http://en.wikipedia.org/wiki/Initialization_vector 의 그림 참고) 게다가 공격자가 어떤 평문-암호문 조합을 이미 알고 있는 경우 그 평문을 ECB로 암호화 하면...
그래서 블럭을 암호화 할 때 이전 블럭 처리 과정에서 나온 값을 사용하는 여러 방법들이 고안됐습니다. 그런데 그렇게 하자니 첫 번째 블럭을 암호화 할 때 사용할 값이 마땅치 않습니다. 그게 난수로 만든 초기(initial) 값(vector) IV입니다.
http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation 요기의 그림에 IV가 구체적으로 어떻게 쓰이는지 나옵니다.
$PWD `date`
저도 iv의 정확한 용도가 궁금합니다
취미로 c++ 공부하다가 openssl을 이용해서 aes 암호화/복호화 과정을 실습해본적은 있는데..
저는 이렇게 사용했었습니다.
클라이언트와 서버에는 고정된 Key="aaaaaaaaaaa" 값이 이미 지정되어 있고
(클라이언트 --> 서버)
통신할때마다 매번 새롭게 랜덤으로생성된iv 값과 Key="aaaaaaaaaaa" 으로 DATA를 암호화한후
["암호화된DATA" + "랜덤으로생성된iv값"] 의 형태로 전송을 하고
서버에서 이를 이용해서 복호화를 하도록 사용했었습니다.
영어가 안돼서 위의 링크를 가봐도 이해가 안됩니다.
다만 이런저런 샘플소스와 글들을 보고 대충 끼어 맞추듯이 이해하고 사용했었는데...
"랜덤으로생성된iv값"을 노출된 상태로 전송하는게 올바른 방법인가요?
(소스코드를 첨부하고 싶은데... 전에 실습했던 소스코드를 찾을 수가 없네요 ㅠㅠ)
댓글 달기