Контрольная сумма MD5 / SHA1 - PullRequest
0 голосов
/ 10 марта 2010

Я отправляю объекты на сервер в java, однако хочу убедиться, что он не был подделан, в дополнение к уже предоставленной безопасности Я понимаю, как использовать действительно дайджест сообщения, однако, должна ли контрольная сумма в идеале быть помещена в объект? и если это не так, то измените контрольную сумму в конце. Как вы идете об этом? Как это работает с заголовками TCP и т. Д., Это начинает меня немного смущать.

Спасибо

Ответы [ 4 ]

1 голос
/ 10 марта 2010

Допустим, ваша контрольная сумма имеет длину 32 байта. Вы вычисляете свою контрольную сумму на основе ваших данных и добавляете контрольную сумму в конец. Когда вы получаете данные, вы знаете, что контрольная сумма занимает последние 32 байта, а фактические данные находятся перед контрольной суммой.

0 голосов
/ 10 марта 2010

При использовании tcp / ip вполне разумно убедиться, что поток не поврежден при передаче "случайно", поэтому не беспокойтесь об этом.

Если вы беспокоитесь о безопасности, обратите внимание, что Md5 не является безопасным, любой может вычислить контрольную сумму md5, вам нужен какой-то секретный ключ или pki-решение для подписи.

Обратите внимание, что «подписание» - это просто аутентификация, фактическое сообщение все равно может быть прочитано кем-то другим. Вам нужно шифрование + аутентификация, если вы также хотите, чтобы содержимое было секретным.

Простое решение - отправить ваши данные через ssl-сокет.

Я бы порекомендовал обратиться к bouncycastle для хорошей поддержки шифрования.

Если сообщения транспортируются другим способом (и, возможно, их придется обрабатывать другими системами, хранить в файлах, ftp: ed, mq: ed, xml-ed и т. Д. И т. Д.), Вы можете сериализовать сообщение в байт. [] и подписать их с помощью подписавшего в org.bouncycastle.crypto.signers, а также вычислить и добавить подпись в виде байта [] после фактического сообщения.

В этом случае вам потребуется использовать формат сообщения, чтобы вы могли отделить и извлечь как данные, так и подпись, а затем пересчитать подпись (используя открытый ключ отправителя) и убедиться, что полученные и Подсчет совпадений подписей.

Существует несколько стандартов для этого, S / MIME, pgp, PKCS # 7RFC 3369, и они, вероятно, лучше, чем все, что вы или я можете придумать, поэтому исследуйте их.

Если вы используете RMI, вы можете использовать google "secure rmi" - например, использовать фабрику сокетов SSL. Если вы просто хотите аутентификацию (открытый текст + подпись), вы можете написать фабрику сокетов для аутентификации ...

Если вы не имеете ни малейшего представления о безопасности, простейшим решением может быть создание защищенного туннеля с использованием VPN или ssh и отправка сообщений с использованием этого.

0 голосов
/ 10 марта 2010

Я считаю, что TCP & IP вычисляет свои контрольные суммы с полями контрольных сумм, заполненными нулями. Затем получатель вычисляет контрольные суммы, полагая, что поля являются нулями, и сравнивает их с фактической контрольной суммой.

Конечно, вы можете сделать что-то подобное, если вы не хотите принимать простое решение, просто добавив контрольную сумму в конце.

Однако обратите внимание, что это не обеспечивает достаточной защиты от взлома, поскольку злоумышленник может просто заменить контрольную сумму контрольной суммой измененных данных. Вам нужны подписи с открытым ключом (с соответствующими доверительными отношениями) для защиты от взлома.

0 голосов
/ 10 марта 2010

Контрольная сумма сообщения не может быть частью этого сообщения - почти невозможно вычислить контрольную сумму.

Контрольная сумма должна быть вычислена из сообщения + некоторый секретный ключ.(Без секретного ключа злоумышленник может изменить сообщение и легко вычислить его контрольную сумму.) Единственная проблема, которую я вижу здесь, состоит в том, что злоумышленник может повторить сообщение, поэтому, если вы получаете два одинаковых сообщения, вы не знаете, является ли последнее сообщениеот атакующего.

Рекламные заголовки TCP - почему вы беспокоитесь об этом?Просто отправьте сообщение и контрольную сумму.TCP это просто транспортный протокол;Контрольные суммы TCP или IP не для безопасности, они для обнаружения транспортных ошибок.

...