Comments 10
> В свете всех ограничений, было решено выбрать алгоритм AES с режимом ECB
Есть же CTR хотя бы.
Есть же CTR хотя бы.
Спасибо, будем иметь в виду. Действительно, CTR будет предпочтительнее в данном случае.
Последовал совету и заменил режим ECB на CTR. Спасибо.
> В ходе реализации класса пришла идея сделать некий заголовок для зашифрованного файла и хранить так некоторые нужные вещи, например, хеш от пароля и соли, чтобы контролировать их правильность при открытии файла. Естественно, в любом случае, с неправильным паролем и солью нормально прочитать файл пользователь не сможет, но мы решили это проконтролировать в момент открытия файла, чтобы пользователь был уверен, если он открыл корректно зашифрованный файл, он будет работать в итоге с правильными исходными данными.
Рядом на тостере: toster.ru/q/31759 (Проверка правильности ключа для расшифровки AES'ом) и ответ:
> Хранение любых magic number's которые расшифровываются и сравниваются — существенное снижение криптостойкости. Хорошее решение — хранения crc блока. Шифруется весь блок данных + crc. Для проверки происходит полная расшифровка предоставленным ключом, снятие crc и сравнение его. Если crc совпадают — ключ был верным.
Почему решили сделать не так? Насколько я понял, у вас нет проблем с небольшим overhead'ом + тогда можно было бы контролировать целостность блоков, на случай мелких (и не очень) нарушений.
Каюсь, сорцы не смотрел, поэтому возникают вопросы: как организовано чтение/запись данных, размером меньше блока AES?
Если вопрос о том, как формируется блок данных, то для ECB режима используется PKCS#5
Если вопрос в том, как читает/пишет сам девайс, то тут все просто: для чтения — QIODevice имеет внутренний буфер в который считываются данные, для записи — есть буфер в самом классе, который содержит данные, размер которых не дотягивает до размера блока. Этот буфер записывается либо при flush(), либо при close().
Если вопрос в том, как читает/пишет сам девайс, то тут все просто: для чтения — QIODevice имеет внутренний буфер в который считываются данные, для записи — есть буфер в самом классе, который содержит данные, размер которых не дотягивает до размера блока. Этот буфер записывается либо при flush(), либо при close().
Если пишите для кого-то то лучше использовать какую-то стандартную (обязательно с открытыми исходниками) библиотеку шифрования. Если для себя, лучше самому написать свой метод, пусть он возможно будет хуже, чем стандартный, зато его вскрытие будет настолько дорого, что ради вас некто заморачиватся не будет и «закладок» тоже не будет. Только не используйте стандартные генераторы случайных чисел. Ну и главное, нужно просто элементарно беречь пароли. Не забывайте самое слабое звено человек и это вы.
habrahabr.ru/post/240097/
habrahabr.ru/post/240097/
Sign up to leave a comment.
Простая реализация шифрования и расшифровывания файлов в Qt