Pull to refresh

Comments 4

Всегда было очень интересно как можно формально верифицировать код на с/с++

Много на прошлой работе теоретизировали насчёт это верификации, но до дела так и не добрались.

ИМХО, метод формальной верификации языка с UB тянет на несколько нобелевских премий

Берется SAST, сертифицированный ФСТЭК. И его отчёт может служить основанием для заключения. То, что SAST всё делает формально - не важно, главное, что у него есть сертификат ФСТЭК.

Как с помощью Event-B доказать корректность Bogosort?

Event-B и подобные — это формальная верификация модели, а не кода. С точки зрения продукта это проверка требований, выраженных в терминах модели, а не того, как они реализованы. Очевиден разрыв между тем, что смоделировано, и кодом, который будет реально пытаться это сделать.

Полнота модели — это не только не включить лишнее, но и не упустить важное (если мы хотим, чтобы модель была реально полезной). Например, что пользователь не должен быть способен сделать то, на что у него нет прав — очевидный инвариант безопасности в модели контроля доступа. Но вот в системе есть механизм повышения прав (как UAC в Windows). Можно сделать модель как положено: с эффективными и допустимыми правами, с действием повышения прав; инвариант будет, что эффективные права не могут выходить за рамки допустимых. А можно ограничиться текущим набором прав и не выдвигать инварианта, что текущий набор не может стать шире начального, потому что может же легальным образом. Даже если модель все учитывает, можно просто забыть проверит все нужные свойства. В результате к формальному доказательству нужно неформальное пояснение, что мы доказываем и почему (и как — бывают неочевидные преобразования).

Я делал модель безопасности на Event-B для сертификации ФСТЭК. Делал на совесть и это было очень интересно, но это не помогло найти ошибок и описание не получилось строже и понятнее документации.

Sign up to leave a comment.

Articles