Я убежден, что каждое приложение, которое заботится о целостности данных, должно использовать безопасный хеш. Большинство, однако, нет. Люди просто игнорируют проблему.
Несмотря на то, что на протяжении многих лет я часто видел искажение данных - даже то, что получалось по контрольным суммам - наиболее запоминающимся на самом деле была система торговли акциями. Плохой маршрутизатор искажал данные так, что он обычно проходил контрольную сумму TCP. Это щелкало то же самое время от времени. И, конечно же, никто не предупрежден о пакетах, которые фактически не прошли контрольную сумму TCP. В приложении не было дополнительных проверок целостности данных.
Сообщения были такими вещами, как заказы на акции и сделки. Последствия повреждения данных настолько серьезны, насколько это звучит.
К счастью, повреждение привело к тому, что сообщения стали недействительными, что привело к полному сбою торговой системы. Последствия какого-то потерянного бизнеса были далеко не такими серьезными, как потенциальные последствия совершения фиктивных сделок.
Мы определили проблему с удачей - чей-то сеанс SSH между двумя задействованными серверами закончился странным сообщением об ошибке. Очевидно, SSH должен обеспечивать целостность данных.
После этого инцидента компания ничего не сделала для снижения риска повреждения данных во время полета или в хранилище. Тот же код остается в производстве, и фактически в производство был добавлен дополнительный код, который предполагает, что среда вокруг него никогда не повредит данные.
Это действительно правильное решение для всех вовлеченных лиц. Разработчик, который предотвращает проблему, вызванную какой-либо другой частью системы (например, плохой памятью, плохим контроллером жесткого диска, плохим маршрутизатором), вряд ли что-либо получит. Дополнительный код создает риск добавления ошибки или обвинения в ошибке, которая на самом деле не связана. Если проблема возникнет позже, это будет чья-то вина.
Для менеджмента это все равно что тратить время на безопасность. Шансы на инцидент невелики, но «потраченные впустую» усилия видны. Например, обратите внимание, что сквозная проверка целостности данных по сравнению с преждевременной оптимизацией уже здесь.
Что касается изменений, произошедших с момента написания этой статьи, - все, что изменилось, - это увеличение скорости передачи данных, усложнение систем и ускорение процессоров, что делает криптографический хэш менее затратным. Больше шансов на коррупцию и меньше затрат на ее предотвращение.
Реальная проблема заключается в том, лучше ли в вашей среде обнаруживать / предотвращать проблемы или игнорировать их. Помните, что, обнаружив проблему, она может стать вашей ответственностью. И если вы тратите время на предотвращение проблем, которые руководство не признает, это проблема, это может заставить вас выглядеть так, будто вы тратите время.