По задумке, это последняя заметка цикла. Чётвертая часть была здесь. Осталось только вкратце упомянуть о криптографических Token-ах.
Всем хороша криптография. Удобно, надёжно, практично. Есть только одна ма-а-а-аленькая проблема: где и как хранить закрытые (секретные) ключи. Что из себя представляют эти самые "ключи", применительно к IT? Очевидно, некий файл. Например, в случае шифрования по алгоритму RSA он будет содержать два каких-то больших числа.
Допустим, мы взяли и сохранили файл на жёсткий диск компьютера. Или на флешку. Но кто сказал, что он будет вечно пребывать там в безопасности? Компьютер могут заразить трояном и утащить файл с ключом; флешку могут украсть, её можно потерять. Можно по ошибке загрузить свой ключ на какой-либо ресурс с открытым доступом и т.д. и т.п.
Поэтому грамотный ответственный человек свой закрытый ключ обязательно зашифрует каким-либо обратимым алгоритмом с паролем. Таким образом, файл будет лежать на жестком диске в криптованном виде, непригодном для использования по своему прямому назначению. Перед началом работы пользователь должен будет ввести пароль, расшифровать им закрытый ключ, после чего уже приступать к решению своих зачач. Но у такого подхода тоже есть ряд недостатков.
- Для того чтобы пароль был устойчивым к BruteForce-взлому (взлом методом последовательного перебора), он должен иметь длину не менее 20-ти символов.
- Для того чтобы пароль был устойчивым к атаке по словарю (перебору по словарю), он не должен содержать в себе осмысленные "человеческие" слова, фразы и их фрагменты.
- Вышесказанное ведёт к тому, что пароль будет труднозапоминаемым. А записывать его куда-либо, мягко говоря, не рекомендуется.
- Пароль или его фрагмент также вполне реально "утащить" (скомпрометировать) в момент его ввода с клавиатуры каким-нибудь keylogger-ом, подглядеть и т.п. После этого, каким-либо образом украв криптованный ключ, можно будет его расшифровать и воспользоваться им без ведома законного владельца.
- И самое главное. Если у тебя стырили ключи-пароли, то ты сам об этом либо вообще не узнаешь, либо узнаешь слишком поздно. Например, когда с твоего счета в банке уведут круглую сумму.
И я не зря упомянул про "грамотного ответственного" человека. В моей практике, стоит обычному пользователю выдать закрытый ключ, так он(а) сразу положит его на "Рабочий стол", а пароль от него либо сохранит тут же рядом в текстовом файле, либо запишет авторучкой на стикере и прилепит на монитор. "Штоб не забыть". Понятно, что в таком случае криптографическая защита в целом будет выглядеть примерно вот так:
Поэтому умные люди придумали специальные устройства для хранения закрытых ключей (и не только), которые называются по-русски жетонами, а по-буржуйски токенами (Token).
Смысл токена очень прост. Это микросхема с флешкой и собственной операционной системой (наподобие SIM-карты), которая может хранить внутри себя некоторую информацию, но при этом ни при каких обстоятельствах не отдаёт её наружу. Чисто внешне токен выглядит как самая обыкновенная USB-флешка. Есть варианты исполнения в виде пластиковой карты с чипом (картинка в эпиграфе кликабельна). Но если с флешки можно вытащить (скопировать) какой-либо файл, то с токена — нельзя. Ключ с токена можно украсть только вместе с самим токеном. Таким образом, если у нас и сопрут ключ, то мы об этом сразу же узнаем. Вот и вся принципиальная разница между хранением ключа на токене и на обычной флешке.
Дальше мысль инженеров пошла в направлении вопроса "а что будет, если украдут сам токен". Так появилась "двухфакторная аутентификация". Суть в том, что в момент запроса к токену от той или иной программы на проведение какой-либо операции с участием закрытого ключа, токен требует от пользователя "разблокировать" его вводом пароля. Таким образом, для доступа к криптографическим функциям требуется одновременное соблюдение двух условий: обладание самим токеном и знание пароля. Отсюда и происходит прилагательное "двухфакторная" в названии.
Потом мысль пошла ещё дальше. Раз уж токен — это почти что полноценный компьютер, то почему бы не обучить его вычислять N раз в цикле какую-нибудь криптографическую хеш-функцию (да хоть бы и всё тот же MD5) от некоторого наперед заданного зашитого в него секретного числа. А результат выводить на маленьком ЖК-экранчике. Так появились генераторы одноразовых паролей (OTP Generator). Они нашли широкое применение в разнообразных интернет-банкингах для подтверждения транзакции пользователя.
И немного о конкретных марках и производителях токенов. Не очень в курсе как обстоят дела в мире, но в России сейчас распространены в основном две с половиной марки токенов: eToken, ruToken и Bifit. "Две с половиной" — потому что Bifit есть суть перекрашенный ruToken на чипе Magistra со своим собственным софтом.
В глобальном плане все эти токены мало чем отличаются друг от друга. Задачи они решают одни и те же. Различия заключаются только в степени кривизны поставляемого вместе с ними софта, драйверов и тупизны техподдержки. На мой субъективный взгляд, они все г...но. Для работы под Windows наименьшим злом является всё же аладдиновский eToken: для него сделана более приятная консоль и у меня с ним было минимальное количество проблем. Под Linux библиотеки PKCS#11 (OpenSC и иже с ними) лучше поддерживаются ruToken-ом, да и документации в мире OpenSource для него побольше будет. А во всём остальном — что одно творение представляет собой глюкавую недоделку, что другое. Так что со спокойной совестью можете пользоваться любым из них.