Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/21: Рейтинг темы: голосов - 21, средняя оценка - 4.57
24 / 24 / 8
Регистрация: 02.02.2016
Сообщений: 135

CRC32 с кодом CRC внутри данных

02.06.2016, 17:35. Показов 4191. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток форумчане!
Могу получить CRC32 (со стандартным полиномом 0xEDB88320), но как получить CRC32, контрольная сумма которого должна храниться внутри данных от которых эта контрольная сумма.

Не по теме:

Т.е. имею проблему курица <-> яйцо.


Рассчитав CRC32 и поместив ее во внутрь данных автоматически изменяю CRC32 всего этого блока. И так до бесконечности.
Как, например, имея блок данных в N байт ( > M), рассчитать и разместить контрольную сумму CRC32 с позиции M внутри этого блока данных в N байт?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.06.2016, 17:35
Ответы с готовыми решениями:

Ошибка данных CRC
Доброго время суток! Проблема с внешним HDD WD elements. При просмотре файла, который я просматривал неоднократно, произошло зависание...

Ошибка данных CRC
Здравствуйте. Дали мне дохлый ноутбук,там при включении вылетает голубой экран с надписью &quot;На вашем ПК возникла проблема, и его...

Как сделать клик внутри фрейма с JS кодом?
Всем привет! Можно ли js кодом сделать клик внутри фрейма? Например: Я зашел на страницу где стоит этот фрейм и js начал кликать по...

15
 Аватар для ProgJ
90 / 87 / 11
Регистрация: 20.11.2008
Сообщений: 724
03.06.2016, 08:47
В том то и дело, что при проверке контрольной суммы её рассчитывают без учёта самой суммы. Т.е. при проверке сначала извлекают сохранённую контрольную сумму, данные теряют её, и тогда уже пересчитывают и сверяют
0
Эксперт .NET
 Аватар для Rius
13081 / 7642 / 1669
Регистрация: 25.05.2015
Сообщений: 23,245
Записей в блоге: 14
03.06.2016, 09:05
Лучший ответ Сообщение было отмечено Petrolion как решение

Решение

Цитата Сообщение от Petrolion Посмотреть сообщение
Т.е. имею проблему курица <-> яйцо.
Я эту проблему решил.
См. CRC32: Дополнить файл для получения контрольной суммы FFFFFFFF
0
24 / 24 / 8
Регистрация: 02.02.2016
Сообщений: 135
03.06.2016, 11:43  [ТС]
Rius, Видел эту тему - заинтересовала. Эдакая имитовставка. Смысл вставки контрольной суммы теряется, т.к. она всегда одна и та же. Если в своих изысканиях ничего не добьюсь - именно этот вариант и рассматриваю. (Правда с осложнениями которые у меня возникнут при добавлении "лишних" данных) Но что делать, если в данные нельзя вставить ничего дополнительного?
Цитата Сообщение от ProgJ Посмотреть сообщение
В том то и дело, что при проверке контрольной суммы её рассчитывают без учёта самой суммы. Т.е. при проверке сначала извлекают сохранённую контрольную сумму, данные теряют её, и тогда уже пересчитывают и сверяют
в обычной ситуации да, так и есть. При этом полный блок данных получается незащищенным. Т.е. можно изменить весь блок данных, пересчитать crc32 и вписать. И вот уже блок данных "правильный".
0
Эксперт .NET
 Аватар для Rius
13081 / 7642 / 1669
Регистрация: 25.05.2015
Сообщений: 23,245
Записей в блоге: 14
03.06.2016, 11:56
Цитата Сообщение от Petrolion Посмотреть сообщение
Смысл вставки контрольной суммы теряется, т.к. она всегда одна и та же.
Вы не внимательно вчитались в тему. Повторяю, именно озвученную проблему я и решил.

Всегда можно что-то добавить, раз внутрь данных добавляется CRC. Иначе это какие-то несуразные условия.

Добавлено через 32 секунды
Но если совсем сдаётесь, поясню...
0
 Аватар для ProgJ
90 / 87 / 11
Регистрация: 20.11.2008
Сообщений: 724
03.06.2016, 11:57
Цитата Сообщение от Petrolion Посмотреть сообщение
При этом полный блок данных получается незащищенным
Чтоб защитить данные проще всего использовать архивирование с паролем. И защита, и место экономим
0
Эксперт .NET
 Аватар для Rius
13081 / 7642 / 1669
Регистрация: 25.05.2015
Сообщений: 23,245
Записей в блоге: 14
03.06.2016, 11:59
Поясните, где это понадобилось.
Файл на ПК или что?
0
485 / 411 / 126
Регистрация: 23.05.2016
Сообщений: 1,653
03.06.2016, 12:02
Цитата Сообщение от Petrolion Посмотреть сообщение
Rius
в обычной ситуации да, так и есть. При этом полный блок данных получается незащищенным. Т.е. можно изменить весь блок данных, пересчитать crc32 и вписать. И вот уже блок данных "правильный".
Вот что бы сразу проблему не описать?
crc32 не является криптостойкой, поэтому не её основе "защищенный" блок не сделать.
Велосипед давно изобретен, используйте какой-нибудь современный алгоритм вычисления хеш-суммы https://ru.wikipedia.org/wiki/... 0%BC%D0%B0

Для защиты посылки нужно иметь секретный документ (блок данных) известный и отправителю и получателю, но неизвестный тому кто перехватывает посылку (он должен быть согласован отправителем и получателем по надежному каналу связи). Перед отправкой посылки её содержимое приписывается к блоку данных и вычисляется хеш-сумма для этого совместного блока, она и передается вместе с посылкой. Получатель вычисляет хеш-сумму приписав посылку к этому же блоку и проверяет её совпадение с полученной.
1
Эксперт .NET
 Аватар для Rius
13081 / 7642 / 1669
Регистрация: 25.05.2015
Сообщений: 23,245
Записей в блоге: 14
03.06.2016, 12:04
Цитата Сообщение от Sindbad_M Посмотреть сообщение
crc32 не является криптостойкой, поэтому не её основе "защищенный" блок не сделать.
Вам большой привет из мира Embedded, где CRC вполне себе живёт и здравствует. И защищает, т.е. контролирует целостность, прошивки встроенного ПО и данных.
0
485 / 411 / 126
Регистрация: 23.05.2016
Сообщений: 1,653
03.06.2016, 12:10
Цитата Сообщение от Rius Посмотреть сообщение
Вам большой привет из мира Embedded, где CRC вполне себе живёт и здравствует. И защищает, т.е. контролирует целостность, прошивки встроенного ПО и данных.
CRC живет и здравствует много где. И именно для контроля целостности блоков данных. Но это не отменяет сказанного выше, в условиях когда злоумышленник может изменить и данные и значение CRC, эта защита бесполезна.
0
Эксперт .NET
 Аватар для Rius
13081 / 7642 / 1669
Регистрация: 25.05.2015
Сообщений: 23,245
Записей в блоге: 14
03.06.2016, 12:14
Sindbad_M, ТС ничего не утверждал о применении, это домыслы. На этот вопрос он ещё не ответил.

Добавлено через 2 минуты
Цитата Сообщение от Petrolion Посмотреть сообщение
Т.е. можно изменить весь блок данных, пересчитать crc32 и вписать. И вот уже блок данных "правильный".
Хотя вот это можно понять по вашему. Согласен.
0
24 / 24 / 8
Регистрация: 02.02.2016
Сообщений: 135
03.06.2016, 13:29  [ТС]
Rius, Вроде вашу тему понял (кстати, код действительно красиво написан), можно сделать ЛЮБОЙ CRC, т.е. зачем его записывать, если можно принять его в софте за константу (я не собираюсь искать коллизий к чужим данным, мне свои защитить). Мне неохота реализовывать криптоалгоритмы - большая и тратная по времени тема.
ProgJ, архивирование не годится - из-за изменения размера упакованных данных в зависимости от содержимого. (вектора не использую из-за дополнительных накладных расходов по памяти, динамические массивы размерами в гигабайты в памяти передвигать слишком затратно по куче параметров)
У меня есть данные которые могут храниться в виде файлов или передаваться в виде пакетов от программ клиентов. Данные - результат больших и ответственных расчетов. У этих данных определенная структура (где есть место под CRC32) и она неизменна. Мне нужно защитить блоки данных от: утечек (ошибок) памяти; сбоях при считывании с носителей; и самое главное подмене при передачи блоков от программ-клиентов. Потому как подмененные данные (если у них сохраняется правильная структура) могут порушить весь результат огромного времени расчетов.
Сами данные могут быть перехвачены. Главное не было бы подмены и сохранялась бы целостность. Лучше пересчитать один блок данных, чем получить неверный общий результат, основываясь на одном или нескольких "левых" блоках.
Данных много, расчеты "тяжелые", поэтому отнимать мощность процессоров и видеокарт на тяжелые криптоалгоритмы шифрования-дешифрования жалко. (Скорость доступа к "чистым" данным тоже немаловажна)
Потому думал разместить внутри данных КС с зависимостью от собственного значения. Если бы это уравнение можно было решить...
(Могу реализовать AES, но "быстрого" доступа к данным уже не получить)
Сейчас задумался, чтобы поле CRC32 использовать под ту самую 4 байтовую вставку для формирования постоянной КС. Но это также не защитит от подмены данных :-( (достаточно будет проанализировать 3-5 пакетов данных)
0
Эксперт .NET
 Аватар для Rius
13081 / 7642 / 1669
Регистрация: 25.05.2015
Сообщений: 23,245
Записей в блоге: 14
03.06.2016, 13:35
Цитата Сообщение от Petrolion Посмотреть сообщение
можно сделать ЛЮБОЙ CRC, т.е. зачем его записывать, если можно принять его в софте за константу
Неееее, там не так. Это возможно, конечно, эффект только внешний в постоянном CRC.
Алгоритм был такой:
  • получить исходный файл;
  • подсчитать его оригинальную CRC;
  • сохранить её внутри файла;
  • восстановить файлу ту самую его оригинальную CRC.

В Вашем случае, раз стоит вопрос о подмене, выход, как заметил Sindbad_M, только в нормальной криптографии и подписях.
1
24 / 24 / 8
Регистрация: 02.02.2016
Сообщений: 135
03.06.2016, 14:07  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
Алгоритм был такой:
получить исходный файл;
подсчитать его оригинальную CRC;
сохранить её внутри файла;
восстановить файлу ту самую его оригинальную CRC.
Верно, но это потребует дополнительных 4 байта в фиксированной структуре данных. А их нет. Можно их получить только используя само поле CRC32 (т.е. вместо него).
Цитата Сообщение от Rius Посмотреть сообщение
В Вашем случае, раз стоит вопрос о подмене, выход, как заметил Sindbad_M, только в нормальной криптографии и подписях.
Боюсь придется разделить данные (со всеми вытекающими последствиями) на внутренние (доверенные) и внешние (недоверенные). Внешним делать инкапсуляцию в крипто (опять же - теряю производительность) и по получении их разворачивать.
0
485 / 411 / 126
Регистрация: 23.05.2016
Сообщений: 1,653
03.06.2016, 14:12
Petrolion, Задача защиты от подмены передаваемого пакета - криптографическая задача, корректно решить её можно только криптографическими методами. Все что основано на crc порождает уравнения, сложность которых для вас и для злоумышленника одинакова.
Но, если беспокоитесь только об отдельных посылках, можно также считать контрольную сумму для нескольких посылок и при приеме проверять не только сумму посылки, но и дополнительные суммы блока посылок.

Любые вычисления требуют ресурсов, безусловно. Но проблемы реализации криптографии, как правило, сводятся к подключению в проект соответствующей библиотеки. Для популярных средств разработки все давно реализовано.
0
24 / 24 / 8
Регистрация: 02.02.2016
Сообщений: 135
03.06.2016, 14:27  [ТС]
Цитата Сообщение от Sindbad_M Посмотреть сообщение
Но, если беспокоитесь только об отдельных посылках, можно также считать контрольную сумму для нескольких посылок и при приеме проверять не только сумму посылки, но и дополнительные суммы блока посылок.
Думал об этом. Даже была мысль брать только КС нескольких блоков (плюс добавлять по желанию доп. хэши) отдельно делать шифрование в один пакет (для одного мелкого пакета затраты не так критичны). Но это потребует идентификации каждого блока данных. Этого сейчас нет. Они практически независимы (поэтому легко распараллеливаются).
Rius, пока обсуждали придумал куда можно применить ваш метод. Определенная часть данных "длительного" пользования (и не столь быстрого обращения) должна храниться в виде файлов на BD-ROM носителях. В структуре этих файлов предусмотрены тэги-затычки (для выравнивания по границам) вот в них то я и смогу затолкать эти "компенсаторы" КС. Так что спасибо еще раз!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.06.2016, 14:27
Помогаю со студенческими работами здесь

Как создать файл с php кодом внутри?
Нужно создать файл в котором будет код php, ну например &lt;?php echo &quot;Hello World&quot;; ?&gt; .

Ошибка данных CRC, попутно RAW
Добрый день, есть жесткий WDC WD5000BPVT-00HXZT1. В один прекрасный момент комп перестал его открывать, висит просто как диск F, при...

Отсутствует определение процеруды. Все инфа внутри с кодом
Суть проблемы вот в чем. То что нам для задания необходимо создать 2 модуля и использовать процедуры. Я решил создать 1 модуль на описание...

Ошибка в данных (CRC) при установке игры
У меня такая вот проблема, купил игру, начил устанавливать, потом выходит ошибка вот с такой надписью &quot;Произошла ошибка при попытке...

Ошибка в данных crc при инициализации HDD
Всем привет! Достался мне поношенный жесткий диск от samsung 2011 года на 1tb. Система стоит на ssd, добавил этот жесткий диск, винда стала...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru