Пусть: есть POS-терминал, на котором крутится какое-либо ПО. Оно показывает интерфейс. Есть исходники этого ПО, опубликованные, скажем, на гитхабе. Если ПО компилируемое, то там же есть бинарники с проверяемой сборкой (доверенный компилятор, выдающий побайтово один и тот же код).
Требуется: чтобы любой подошедший к терминалу мог надёжно убедиться, что на терминале крутится именно то ПО, которое находится на гитхабе. При этом у пользователя есть доступ только к интерфейсу ПО. Он не может посмотреть файлы и т.п.
Такая проверка направлена в первую очередь не против мошенников, которые подменили терминал, а против владельцев самого терминала, которые внесли в ПО правки, либо полностью его заменили.
Естественно, выдача любого фиксированного сообщения на терминал не подходит. Допустим, выводить контрольную сумму ПО смысла нет. Я могу выдачу такого сообщения просто включить в правки, чтобы всегда выдавало то, что надо (т.е. ту сумму, что есть на гитхабе). Значит, требуется выдача какого-то динамического кода по типу TOTP.
Проблема в том, что любой секретный ключ или алгоритм, на основании которого будет генерироваться код, должен быть известен пользователю, а значит, он будет известен и злоумышленнику.
Можно привлечь доверенного посредника, но: а) с какой стати ему доверять б) а что посредник сможет сделать? Любое общение по сети может быть подделано так, будто запросы посылает настоящая программа. Можно даже держать её запущенной параллельно, чтобы она выдавала правильные запросы. Если же посредник будет крутиться на той же машине, то это даёт больше возможностей, но его тоже можно заменить.
Если даже метод проверки найдётся, можно будет фальшивую программу запускать поверх настоящей, перекрывая её интерфейс, а проверочный код показывать от настоящей через прозрачную дырку в интерфейсе фальшивой программы. Все кнопки перенаправлять на фальшивую.
В общем, не уверен я, что у этой задачи есть решение.