LINUX.ORG.RU

RC5 - Блочный алгоритм. Как им правильно шифровать данные произвольной длинны?


0

1

Хелло алл.


Нужно мне в свою C++ программу вставить шифрование файла с помощью RC5. Алгоритм открытый, примеров с реализацией шифрования _одного_ блока много.

Описание на руском: http://ru.wikipedia.org/wiki/RC5
Теория на английском: http://theory.lcs.mit.edu/~rivest/Rivest-rc5rev.pdf
Исходник с примером: http://paste.org.ru/?f8go6z

Данный исходник подходит для шифрования двух 32-х битных слов (двух WORD).


Вопрос. А как шифровать байтовый поток данных произвольной длинны?

Например, имеем 20 байт.
1. Выделяем первые 8 байт, шифруем ключем.
2. Выделяем следующие 8 байт, шифруем тем же ключем.
3. Выделяем следующие 4 байта, дополняем нулями, шифруем тем же ключем.

Так чтоли? То есть получается, что одинаковый набор символов, кратный 8 байтам и выровненный на 8 байт, будет в зашифрованном виде представляться одной и той же зашифрованной последовательностью?


Пример на пальцах. Имеем поток ASCII-кодов следующих символов (условно разбит на строки):

ABCDEFGH
djkfhdfk
ABCDEFGH
pouwerbe

Зашифрованный поток будет иметь, к примеру, такой HEX-вид:

65C178B284D197CC
2F42B3B70369FC92
65C178B284D197CC
F7C013AC5B2B8916

То есть, первая и третья зашифрованные строки будут одинаковы. Так и должно быть? Или я неправильно понял, как надо использовать этот алгоритм?

Не надо самому писать реализации алгоритмов шифрования. Тут очень легко ошибится и написаться что-то, снижающее криптоскойкость алгоритма. Можно использовать реализацию в openssl.

anonymous
()
Ответ на: комментарий от anonymous

s/криптоскойкость алгоритма/криптоскойкость системы

anonymous
()
Ответ на: комментарий от anonymous

Не надо самому писать реализации алгоритмов шифрования. Тут очень легко ошибится и написаться что-то, снижающее криптоскойкость алгоритма. Можно использовать реализацию в openssl

Я и не пишу, я использую готовую.

OpenSSL не подходит, так как программа Qt-only.

pat_minus
() автор топика

1. Выделяем первые 8 байт, XOR'им с инициализирующим вектором, шифруем

2. Выделяем следующие 8 байт, XOR'им с результатом шифрования предыдущего блока, шифруем тем же ключем.

Для расшифрования блока: расшифровываем его и xor'им с предыдущим зашифрованным блоком (или инициализирующим вектором если блок первый)

elverion
()
Ответ на: комментарий от elverion

http://ru.wikipedia.org/wiki/Режим_шифрования

Ага, все значит нормально, что-то я протупил. В исходнике используется Cipher Block Chaining (CBC). Я не сразу понял, зачем ключ перегенерируется, думал что просто для демонстрации.

pat_minus
() автор топика
Ответ на: комментарий от pat_minus

> OpenSSL не подходит, так как программа Qt-only.

OpenSSL не подходит

Огласите сразу название программы, чтобы я этим случайно не воспользовался.

bvvv
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.