앞 그림은 이전 블록의 암호화된 결과물을 다음 블록의 원문과 더하는(XOR 연산) 모습을 보여 줍니다. 따라서 내용이 같은 원문 블록이 있더라도 실제로 암호화 재료가 되는 값은 다릅니다. 즉, 원문이 같아도 동일한 암호문이 나오지 않습니다. 또 보통 암호화 결과물은 복잡한 난수이기 때문에 ‘원문 블록에 이전 블록의 암호화 결과물을 더한 값(암호화할 값)’도 역시 매우 복잡한 난수입니다. 이를 다시 암호화한 것이 각 블록의 암호화 결과물이므로 동일한 결과물이 나올 확률은 매우 낮습니다. 설령 암호화 결과물이 동일하다고 해도 그에 대응하는 원문도 같다고 판단할 수 없습니다. 이런 점에서 CBC는 ECB보다 안전한 운영 모드라고 할 수 있어 많이들 사용하는 것입니다.
다만 첫 번째 원문 블록은 이전 블록의 암호화 값이 없으므로 운영자가 특정한 값을 넣어야 합니다. 이 값을 초기화 벡터(Initial Vector, IV)라고 합니다. 초기화 벡터는 운영자가 ‘원문 데이터 블록과 크기가 같은 임의의 값’을 선택하는 것입니다(원문에 없던 초기화 벡터를 추가하여 암호화를 수행하기 때문에 CBC 모드로 암호문을 해독하려면 암호문과 함께 초기화 벡터가 필요합니다). 초기화 벡터의 종류에는 고정 IV, 카운터(counter) IV, 난수 IV, 넌스(Nonce) IV가 있습니다. 초기화 벡터가 난수의 성질을 갖거나 복잡할수록 더 안전합니다. 초기화 벡터의 영향을 받는, 첫 번째 암호화한 결과 블록이 난수 성질이 높아지면 그만큼 원본 데이터에 대한 정보를 얻기 어려워지기 때문입니다. ‘확산’을 더욱 잘 달성하게 되는 겁니다. 초기화 벡터를 사용하는 다른 운영 모드와 공통사항이기는 합니다만, 복호화를 할 때도 초기화 벡터가 필요하므로 정확한 초기화 벡터를 얻을 수 있도록 복호화하는 쪽에 잘 전달하거나 관리하는 것은 매우 중요합니다.
CBC 모드는 안전하다는 장점이 있지만, 단점도 있습니다. ECB는 암호문의 일부를 복호화하고 싶을 때 특정 블록만 선택해서 복호화할 수 있습니다. 하지만 이전 블록의 암호화 값이 다음 블록과 연결된 CBC에서는 ‘특정 부분만 선택해서 복호화’할 수 없습니다. 전체를 복호화한 후 특정 부분의 값을 찾아야 합니다. 따라서 임의의 위치에 있는 암호문을 복호화할 때는 ECB보다 연산 시간이 더 걸립니다.