24 / 24 / 8
Регистрация: 02.02.2016
Сообщений: 135

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

02.06.2016, 17:35. Показов 4307. Ответов 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
13205 / 7733 / 1681
Регистрация: 25.05.2015
Сообщений: 23,576
Записей в блоге: 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
13205 / 7733 / 1681
Регистрация: 25.05.2015
Сообщений: 23,576
Записей в блоге: 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
13205 / 7733 / 1681
Регистрация: 25.05.2015
Сообщений: 23,576
Записей в блоге: 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
13205 / 7733 / 1681
Регистрация: 25.05.2015
Сообщений: 23,576
Записей в блоге: 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
13205 / 7733 / 1681
Регистрация: 25.05.2015
Сообщений: 23,576
Записей в блоге: 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
13205 / 7733 / 1681
Регистрация: 25.05.2015
Сообщений: 23,576
Записей в блоге: 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru