
Обзор
CFB (сокращение от cipher feedback ) — это AES Advanced Encryption Standard режим блочного шифрования, аналогичный режиму CBC в том смысле, что для шифрования блока B i , требуется шифр предыдущего блока, C i-1 . CFB также использует вектор инициализации вход фиксированного размера, используемый для введения рандомизации , например CBC. Основное отличие состоит в том, что в CFB сначала зашифровывается блок зашифрованного текста предыдущего блока, а затем выполняется операция XOR с блоком в фокусе.
Чтобы лучше понять это, давайте визуализируем CFB в виде формула:
C i = E K (C i-1 ) ⊕ B i где E K обозначает алгоритм блочного шифрования с использованием ключа K и C i-1 — это шифр, соответствующий B i-1 .
Примечание. В приведенной выше формуле мы предполагаем, что C 0 является вектором инициализации.
Аналогично, расшифровка с использованием CFB может быть изображается как:
B i = E K (C i-1 )⊕(Ci)
Важно отметить, что алгоритм дешифрования здесь не используется .
Преимущества и недостатки использования режима CFB
Основным преимуществом режима CFB является то, что, поскольку он Не использует алгоритм дешифрования, он обычно быстрее, чем режим CBC. Шифрование CFB также недетерминировано, что означает, что оно не выявляет никаких шаблонов, которые может иметь открытый текст.
Недостатки CFB идентичны недостаткам режима CBC. Шифрование не допускает потери блоков, а также невозможно параллельное шифрование нескольких блоков. Однако дешифрование устойчиво к потерям и может быть распараллелено.
Шифрование CFB с использованием OpenSSL
Набор инструментов OpenSSL предоставляет набор простых команд для шифрования с использованием режимов AES. Команда шаблона для шифрования 128-битного AES в режиме CFB:
openssl enc -aes-128-cfb -e -in inputfile.txt -out cipher.bin - K00112233445566778889aabbccddeeff -iv 0102030405060708
В приведенной выше команде мы введем имя файла, который хотим зашифровать после флага -in
, и имя и формат выходного файла после флага -out
. Шестнадцатеричное значение ключа шифрования должно быть указано после флага -K
, а шестнадцатеричное значение вектора инициализации должно быть указано после флага -iv
. .