Реальность - это хуже, чем можно было бы себе представить
БЕСЕДЫ О ПРОГРАММИРОВАНИИ
Самая большая ошибка, возможная при создании сложной системы, - это предположить, что мир будет жить по вашим правилам.
О нас, разработчиках программного обеспечения, распространено нелестное мнение, что реакция пользователя нам представляется очевидной, и мы создаем системы, которые не в состоянии сообщить ему, что же от него требуется. Следующая наша общая ошибка - мы предполагаем, что пользователи всегда делают все так, как говорят.
Нас редко прощают за пустые поля ввода, когда нет даже намека на то, что требуется внести. Такие значения, как имя пользователя, нужно предлагать по умолчанию из переменных среды; названия городов даются в каталогах почтовых индексов; дату, время, номер раздела - все это можно проверить в соответствии с установленными правилами.
Безопасность - еще одна область, в которой необходимо очень внимательно проверять наши предположения. Если вы сделали замо’к, хитроумный механизм которого практически исключает подбор ключа, можете быть уверены, что с успехом выполнили свою работу по обеспечению безопасности. Но не исключено, что кто-нибудь все равно сломает дверь, даже не предполагая, что этим совершает несанкционированный доступ.
Немного о психологии
Важнее всего представить возможные мотивы тех, кто может угрожать безопасности вашей системы, а не разрабатывать ее таким образом, чтобы она отражала атаки людей, думающих так же, как и вы. В этом есть определенная проблема, поскольку стоящие перед разработчиками задачи переходят в область сетевых и мобильных решений. Большинство прежних понятий в этих условиях теряют силу.
Например, мы располагаем обширными знаниями в области создания ПО для изолированных систем и полагаем, что пользователи не станут лезть с осциллографом в недра компьютера для определения протоколов, используемых для ограничения доступа. Деятельность такого рода требует специальных знаний и больших затрат.
Однако в сетевых системах наш опыт более ограничен, а в них происходит обмен данными по каналам, к которым можно добраться, просто запустив программу. Аппаратные "средства" стоят на каждом столе, специальных знаний для их использования не требуется, и нарушение режима секретности, благодаря сетевой инфраструктуре, будет скрытым.
Еще более опасно предполагать, что аппаратура или работает правильно, или не работает вообще. Подробное исследование механической и электронной частей наших информационных устройств для определения пороговых значений, при превышении которых могут возникать сбои, - это сложнейшая задача.
Например, исследователи из фирмы Bellcore обнаружили, что шифрование с использованием смарт-карточек может быть нейтрализовано в случае, если устройство работает в экстремальных режимах с точки зрения температуры или электропитания или на предельной тактовой частоте. При этом могут возникать ошибки при вычислениях, дающие информацию о параметрах шифрования (см. http://www.bellcore.com/PRESS/ADVSRY96/medadv.html).
Это еще один пример того, как мы из года в год сталкиваемся с необходимостью расширения своих знаний. Если вы не продолжаете учиться, считайте, что вы уже без работы, - ваше начальство просто забыло вам об этом сообщить.
Питер Коффи
Вы знаете, какими новыми способами мир стремится подобраться к вашей системе? Сообщите мне по адресу: peter_coffee@zd.com.