Насколько я могу доверять компьютерной системе? Как я могу измерить доверие? - PullRequest
1 голос
/ 09 апреля 2009

Насколько я могу доверять стандартному компьютеру под управлением Windows? Насколько точно я могу быть уверен, что мой код будет работать так, как я его написал? Как я могу быть уверен, что если я объявлю что-то вроде "int j = 5;", j всегда будет 5? Есть ли способ измерить доверие в стандартной компьютерной системе x86? Какие существуют виды защиты, чтобы убедиться, что j = 5?

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

Ответы [ 4 ]

4 голосов
/ 09 апреля 2009

Если «ничто не может быть отключено даже одним битом», единственный способ сделать это - три компьютера:

  • все должны использовать различное оборудование
  • все должны использовать разные ОС; s
  • прикладное программное обеспечение должно быть написано разными людьми
  • приложение должно быть скомпилировано с использованием разных компиляторов

Все три компьютера получают одинаковые входные данные и рассчитывают выходные данные. Если два или более выходов совпадают, это принимается, в противном случае помечается условие ошибки.

Вы, вероятно, видите, что эта полная система никогда не используется на практике, хотя варианты используются в авионике и аналогичных критических системах.

2 голосов
/ 09 апреля 2009

Речь идет о том, что кто-то злонамеренно может изменить ваш код, чтобы сделать что-то, что вы не запрограммировали? Или речь идет о возможности случайных ошибок, которые могут испортить ваши вычисления? В последнем случае вам, вероятно, не нужно беспокоиться, потому что на современных компьютерах частота ошибок примерно равна 1 на 10 ^ 17 - это меньше, чем один на процессор в год, и если даже это недопустимо, вы можете использовать исправление ошибок алгоритмы, позволяющие снизить эффективную частоту ошибок настолько близко к нулю, насколько вам нужно (ценой необходимости уделять больше времени выполнению заданного вычисления).

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

Возможно, вы захотите взглянуть на книгу Росса Андерсона "Проектирование безопасности", в которой описаны некоторые из этих аппаратных средств, защищенных от несанкционированного доступа, и вообще о том, как люди, которым действительно необходимо защитить свой код. может сделать это.

1 голос
/ 09 апреля 2009

Нельзя полностью доверять чему-то так простому, как «j = 5».

Существует так много причин, по которым вы можете получить ошибку в один бит:

  • CPU имеют ошибки.
  • Жесткие диски могут возвращать ошибки по мере старения
  • Память может быть повреждена космическими лучами
  • Свободный / грязный / и т.д.. соединения в любом месте системы.
  • Драйверы повреждают память (включая кодовые страницы).
1 голос
/ 09 апреля 2009

По сути, нет. Вам следует прочитать эту статью и подумать о переоценке вашей концепции доверия. : -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...