Иногда ощущаю себя не котом, а жирафом - настолько медленно доходят некоторые вполне очевидные вещи.
Вот в этом
стареньком посте речь шла о том, почему криптографическое "кольцо всевластья" для опознования носителя - плохая идея. Потому что кольцо - а.) устройство, говорящее по радио, без прямого контакта, и б.) никакого фидбека носителю не сообщаюшее. Что означает, что носитель может своим кольцом логиниться куда ему не нужно, и не подозревать об этом.
И лишь недавно дошло до меня, о великий халиф, что и безконтактность, и "молчаливость" устройства - всего лишь факторы, усугубляющие проблему. Но корень её совсем в другом.
Вот рассмотрим ситуацию. Допустим, в офисном здании стоят на дверях умные электронные замки. Для того, чтобы такой замок открыть, надо физически вставить в него карточку. Карточка тоже умная, с экранчиком, и умеет владельцу показывать всякие данные - с кем именно она общается, кто заверил цифровые подписи и так далее. Криптопротокол между карточкой и замком ваще непробиваемый, секретные ключи защищены от кражи на все сто. Вроде бы не подкопаешься?
А хрен. Вот подходит к двери подсобки честный труженик Вася. Достаёт карточку, вставляет в замок. Только замок тот не простой, а малость хакнутый - любой сигнал с васиной карточки пересылает на другую, принадлежащей вражьему засланцу Пете. И обратно. А Петя свою карточку в это время вставляет в другую дверь, ведущую в местную chamber of secrets, куда Вася допущен, а он - отнюдь.
Что произойдёт? Васина карточка пообщается с замком chamber'а, они обменяются честь по чести нужными данными и разойдутся, довольные друг другом. Вася зайдёт в подсобку, Петя пойдёт красть секреты.
Теоретически, решение-то на поверхности - надо, чтобы замок посылал карточке криптозаверенное сообщение, в какой именно двери он стоит, а карточка показывала его владельцу. Это у нас в HTTPS и происходит - имя сайта в адресной строке сравнивается с именем Subject в сертификате, если совпало - всё ок.
Теоретически-то да, но как это будет выглядеть на практике? "Вы пытаетесь открыть дверь в комнату 613, находящуюся по адресу такому-то, в третьем здании, на шестом этаже"? А кто это будет читать?
Предположим, я хочу снять денег в банкомате. Но при этом надо обезопасить меня от ситуации, когда я невольно открою для воров банкомат, находящийся совсем в другом месте. И как это обеспечить - сделать так, чтобы карточка или там мой телефон сообщали мне "здравствуй, Муций, ты пытаешься залогиниться в банкомат на перекрёстке улиц Герцля и Арлозорова, подтвердить, да/нет"? А я это вообще прочту? А я что, знаю в любой момент, на какой улице я нахожусь? Если вместо этого я увижу сообщение от удалённого банкомата на перекрёстке улиц Давида и Голиафа, я осознаю, что что-то не так? Для меня эта информация осмыслена вообще?
Вот в этом и проблема. Физический трёхмерный объект в реальной жизни - не сайт, и уникально его идентифицировать осмысленным для юзера образом - куда сложнее. Что значит осмысленным? А таким, чтобы юзер мог его глазками опознать и от других отличить, на основе доступной реаллайфовой информации - не полагаясь на электронные сообщения, которые могут лгать.
И вот как это сделать - я не знаю. Можно предложить какие-то костыли - например, GPS. Пусть банкомат высылает свои координаты с заверенной цифровой подписью, а юзерское устройство - телефон, карта - их вычисляет самостоятельно и сравнивает. Если разница больше n метров - аларм, что-то не так. Ну а если между настоящим банкоматом и подсунутым расстояние метр, но настоящий заныкан за стенкой?
tilimilitram предлагал замерять время отклика - зная скорость света, мы можем определить расстояние между юзерским устройством и конечным терминалом (замком, скажем). В принципе, это помогает, конечно. Но опять же не во всех обстоятельствах, к тому же надо, чтобы отклик тот был заверен криптографически, а это вносит свои отдельные задержки. А если он заверен не будет, то его и ложный терминал выдаст за милую душу, и ничего плохого мы не обнаружим.
Вот такие пироги. Есть идеи?
P.S. Кстати, и недавняя
загадка к проблеме невольной аутентификации имеет прямое отношение.