2010-08-20 5 views
1

현재 Voip 프로젝트를 진행 중이고 AES-CBC 모드 구현에 대한 질문이 있습니다. 나는 문자 메시지 통신을 기반으로하는 인스턴트 메시징의 경우 모든 메시지에 대해 IV를 생성하여 첫 번째 블록이 통신 중에 중복되는 경우 첫 번째 블록을 추측하지 못하도록하는 것이 중요합니다. 오디오 데이터에서도 동일한 작업을 수행하는 것이 좋습니다. 오디오 데이터가 일반 텍스트보다 훨씬 복잡하기 때문에 각 오디오 청크에 대해 IV를 생성하는 것이 현명한 것인지 궁금합니다 (초당 많은 IV를 의미하며 40 이상). 아무것도 안하고? 또는 대화의 시작 부분에서 생성 된 하나의 IV만으로 충분합니까? 사전에오디오, AES CBC 및 IV

감사합니다,

Nolhian 당신은 새로운 IV를 매번 생성 할 필요가 없습니다

답변

1

. 예를 들어, SSH 및 TLS에서는 전체 데이터 세션에 대해 하나의 IV 만 사용되며 일부 키 데이터 이후에만 키 재구성이 필요합니다.

+0

감사합니다. 당신의 예제도 나에게 뭔가를 배웠다;) – Nolhian

1

CBC는 각각 메시지에 대해 새 IV가 필요합니다. 그러나 아무도 당신이 한 번에 메시지를 보내야한다고 말했다.

SSL/TLS를 고려하십시오. 연결은 대칭 암호화 키, MAC 키 및 IV가 파생 된 공유 "마스터 키"를 생성하는 복잡한 절차 ("핸드 셰이크")로 시작됩니다. 이 시점부터 연결 종료 (또는 새로운 핸드 쉐이크)까지 클라이언트가 서버에 보낸 전체 데이터는 CBC와 관련하여 매우 논리적으로 고유 한 IV를 사용하는 고유 한 큰 메시지입니다.

자세한 내용은 CBC에서 각 블록 (AES가있는 16 바이트)이 먼저 이전의 암호화 된 블록과 XOR 된 다음 자체적으로 암호화됩니다. IV는 그 시점에서 이전 블록이 없으므로 최초 블록에만 필요합니다. 그것을 보는 한 가지 방법은 각각의 암호화 된 블록이 다음의 암호화를위한 IV라는 것입니다. SSL/TLS 대화 상자의 일부로 클라이언트가 SSL (Secure Socket Layer)에서 "레코드"라는 일부 데이터를 전송하면 해당 레코드의 마지막 암호화 된 블록을 기억하여 다음 레코드의 IV로 사용합니다.

귀하의 경우에는 암호화 할 오디오 스트림이 있다고 가정합니다. SSL/TLS가 처리하는 것처럼 블록간에 CBC 스트림을 잘라내기만하면됩니다. 그러나 약간의 복잡성이 있습니다. 일반적으로 VoIP 프로토콜에서는 일부 패킷이 손실 될 수 있습니다. CBC 암호화 데이터가 있고 이전 청크가없는 경우 해당 청크에 대한 IV (즉, 이전 청크의 마지막으로 암호화 된 블록)를 알 수 없습니다. 그런 다음 수신 한 청크의 첫 번째 블록 (16 바이트)을 올바르게 해독 할 수 없습니다. 이러한 상황에서의 복구가 쉬운지 여부는 암호화하는 데이터 (특히 오디오와 함께 사용하는 압축 알고리즘의 종류)에 따라 다릅니다. 그 잠재적 인 손실이 문제라면, 해결 방법은 각 청크에 IV를 포함시키는 것입니다. CBC- 말하자면, (패킷의) 마지막 청크 블록은 다음 청크의 첫 번째 암호화 된 블록으로 반복됩니다 (다음 패킷).

간단히 말해서 : 청크 당 IV가 필요하지만 모든 IV (처음부터 제외)가 방금 암호화 한 블록이기 때문에 CBC는이 IV를 "자연스럽게"생성합니다.

관련 문제