Режим сцепления блоков шифра
Сцепление добавляет к блочному шифру механизм обратной связи: результаты шифрования предыдущих блоков влияют на шифрование текущего блока. Другими словами, каждый блок используется для изменения шифрования следующего блока. Каждый блок шифротекста зависит не только от шифруемого блока открытого текста, но и от всех предыдущих блоков открытого текста.
В режиме сцепления блоков шифра (cipher block chaining, CBC) перед шифрованием над открытым текстом и предыдущим блоком шифротекста выполняется операция XOR. На 6-й (а) показано шифрование СВС в действии. ,Когда блок открытого текста зашифрован, полученный шифротекст сохраняется в регистре обратной связи. Прежде чем будет зашифрован следующий блок открытого текста, он подвергается операции XOR вместе
с содержимым регистра обратной связи. Таким образом создаются входные данные для следующего этапа пр о-цедуры шифрования. Полученный шифротекст снова сохраняется в регистре обратной связи, чтобы подвер г-нуться операции XOR вместе со следующим блоком открытого текста, и так до конца сообщения . Шифрование каждого блока зависит от всех предыдущих блоков.
Дешифрирование является обратной операцией (см. Figure 9.3 (б) ). Блок шифротекста расшифровывается как обычно, но сохраняется в регистре обратной связи. Затем следующий блок дешифрируется и подвергается операции XOR вместе с содержимым регистра обратной связи. Теперь следующий блок шифротекста сохраняется в регистре обратной связи, и так далее, до конца сообщения .

Рис. 9-3. Режим сцепления блоков шифра.
Математически это выглядит следующим образом:
Вектор инициализации
В режиме СВС одинаковые блоки открытого текста при шифровании переходят в различные блоки шифротекста только, если отличались какие-то из предшествующих блоков открытого текста. Два идентичных сообщения, однако, будут шифроваться как один и тот же шифротекст . Что еще хуже, два одинаково начинающихся сообщения будут шифроваться одинаково, пока не появится первое различие .
У ряда сообщений может быть одинаковый заголовок - тема письма, строка "From" или еще что-нибудь. Хотя повтор блока будет невозможен, такое одинаковое начало может предоставить криптоаналитику какую-нибудь полезную информацию.
Избежать этого можно, шифруя в качестве первого блока какие-то случайные данные. Этот блок случайных данных называется вектором инициализации (initialization vector, IV), инициализирующей переменной или начальным значением сцепления. IV не имеет никакого смыслового значения, он используется только для того, чтобы сделать каждое сообщение уникальным. Когда получатель расшифровывает этот блок, он использует его только для заполнения регистра обратной связи. Хорошим IV служит метка времени. Или используйте какие-нибудь случайные биты.
С использованием IV сообщения с идентичным открытым текстом при шифровании переходят в сообщения с различным шифротекстом. Следовательно, злоумышленник не сможет предпринять повтор блока, и затруднится создание шифровальной книги. Хотя рекомендуется для каждого сообщения, шифруемого одним и тем же ключом, выбирать уникальный IV, это требование не является обязательным.
IV не должен храниться в секрете, он может передаваться открыто вместе с шифротекстом . Если вы не понимаете почему, рассмотрите следующий довод. Пусть наше сообщение состоит из нескольких блоков: В;, В2, ..., bj. В; шифруется вместе с IV. В2 шифруется с использованием шифротекста В; в роли IV. В} шифруется с использованием шифротекста #2 в роли IV, и так далее. Итак, если количество блоков - п, то п-1 "векторов инициализации" открыты, даже если первоначальный IV хранится в секрете. Поэтому причин хранить в секрете IV нет, IV - это просто блок-заглушка, можно считать его нулевым блоком сцепления bo.
Набивка
Набивка используется также, как и в режиме ЕСВ, но в некоторых приложениях размер шифротекст должен в точности совпадать с размером открытого текста. Может быть, зашифрованный файл должен занять в точности тот же объем памяти, что и файл открытого текста. В этом случае последний короткий блок придется шифровать иначе. Пусть последний блок состоит из / битов. Зашифровав последний полный блок, снова зашифруйте шифротекст, выберите старшие / битов и выполните для них и короткого блока операцию XOR, создавая шифротекст. Эта процедура показана на 5-й.

Рис. 9-4. Шифрование короткого последнего блока в режимеСВС.
Слабость этого способа в том, что хотя Мэллори не сможет раскрыть последний блок шифротекста, он м о-жет систематически изменять его, меняя отдельные биты шифротекста. Если последние несколько битов шифротекста содержат важную информацию, это опасно. Если последние биты просто содержат совет по домоводству, то ничего страшного.
Лучшим способом является похищение щифротекста. Pn_i - последний полный блок открытого текста, Р„ - заключительный, короткий блок открытого текста. С„_; - последний полный блок шифротекста, С„ -заключительный, короткий блок шифротекста .С' - это просто промежуточный результат, не являющийся частью переданного шифротекста. Преимуществом этого метода является то, что все биты открытого текста сообщения проходят через алгоритм шифрования.

Рис. 9-5. Похищение шифротекста в режимеСВС.
Распространение ошибки
Режим СВС характеризуется прямой обратной связью шифротекста при шифровании и инверсной обратной связью шифротекста при дешифрировании. При этом приложения должны уметь бороться с ошибками. Единственная битовая ошибка в блоке открытого текста повлияет на данный блок шифротекста и все последующие блоки шифротекста. Это не важно, потому что дешифрирование инвертирует этот эффект, и восстановленный открытый текст будет содержать ту же единственную ошибку.
Чаще встречаются ошибки шифротекста. Они легко появляются из-за шума линий передачи или сбоев устройств хранения. В режиме СВС ошибка одного бита шифротекста влияет на один блок и один бит восстановленного открытого текста. Блок, соответствующий содержащему ошибку блоку шифротекста, искажается полностью. В следующем блоке искажается единственный бит, находящийся в той же позиции, что и ошибочный бит.
Это свойство превращения малой ошибки шифротекста в большую ошибку открытого текста называется распространением ошибки. Это является главным недостатком. Эта ошибка не влияет на блоки, расположенные через один от испорченного и далее, поэтому режим СВС является самовосстанавливающимся. Ошибка влияет на два блока, но система продолжает работать правильно для всех последующих блоков. СВС представляет собой пример блочного шифра, используемого в самосинхронизирующейся манере, но только на блоковом уровне.
Хотя режим СВС быстро восстанавливается от битового сбоя, он абсолютно не устойчив к ошибкам синхронизации. Если в потоке шифротекста теряется или добавляется бит, то положение всех последующих блоков сдвигаются на один бит, и на выходе дешифрирования будет сплошной мусор . Любая криптосистема, использующая режим СВС должна обеспечивать целостность блочной структуры либо при помощи кадров, либо с сохраняя данные в структуры из нескольких блоков.
Вопросы безопасности
Ряд возможных проблем обуславливаются структурой СВС. Во первых, так как блок шифротекста достаточно просто влияет на следующий блок, Мэллори может тайно добавлять блоки к концу зашифрованного сообщения. Конечно, при дешифрировании они превратятся в чепуху, но в некоторых ситуациях это нежелательно 
При использовании СВС вы должны структурировать ваш открытый текст так, чтобы вы знали, где находятся концы сообщений, и могли обнаружить добавление лишних блоков.
Во вторых, Мэллори может изменить блок шифротекста, изменения определенным образом блоки расшифрованного открытого текста. Например, если Мэллори изменит один бит шифротекста, весь блок будет расшифрован неправильно, а в следующем блоке в соответствующей позиции будет неправильный бит . Возможны ситуации, когда это нежелательно. Открытое сообщения должно обладать некоторой избыточностью или средствами идентификации.
Наконец, хотя структура открытого текста маскируется сцеплением, структура очень длинных сообщений все равно будет заметна. Парадокс дня рождения предсказывает, что после 2т/2 блоков, где т - размер блока, появляются одинаковые блоки. Для 64-битового блока длина такого сообщения примерно равны 32 Гбайтам. Подобная проблема возникает только для сообщений немаленького размера.