Реализую
AES 128 CTR шифрование. Реализовал, работает, блоки совпадают. Но все-таки есть некоторые сомнения на счет надежности моей реализации, поэтому, прошу знающих людей помочь.
Берется оригинальный файл и берется ключ. Файл разбивается на блоки по
16 байт (
128 бит). Файл не всегда разбивается нацело, поэтому, если длина файла в байтах не кратна
16, то в конец последнего блока пишется байт
0x01, а оставшееся место в блоке (при наличии) забивается байтами
0x00. Если же длина файла в байтах кратна
16, то создается еще один блок в начале которого стоит байт
0x01, а все остальные байты -
0x00. Далее все эти блоки шифруются при помощи
AES 128 CTR.
CTR режим использует для шифрования счетчик и без него расшифровать файл нельзя. Счетчик, который занимает
16 байт пишется сразу после зашифрованных блоков, причем счетчик не шифруется. Далее, после счетчика, записывается блок с
KCV ключа (первые
6 байтов блока -
KCV, остальные десять -
0x00).
KCV тоже не шифруется.
Итого, зашифрованный файл выглядит примерно так. Можно ли считать эту схему криптостойкой и если нет, то что можно сделать, чтобы обеспечить криптостойкость?
P.S. KCV считаю согласно определению из
Википедии. Беру блок состоящий исключительно из байтов
0x01, шифрую его при помощи ключа и первые
6 байт блока беру как
KCV ключа. Подобная операция нужна для проверки правильности ключа при дешифровании.