2010-03-10 3 views
0

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

Thanks

ответ

1

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

0

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

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

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

0

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

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

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

0

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

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

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

Простым решением является отправка ваших данных через ssl-socket.

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

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

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

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

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

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

+0

О, я забыл, WS-Security делает это только для веб-сервисов/мыла, если это то, что вы используете. – KarlP