klink0v (klink0v) wrote,
klink0v
klink0v

Популярно о криптографии, часть 5

По задумке, это последняя заметка цикла. Чётвертая часть была здесь. Осталось только вкратце упомянуть о криптографических Token-ах.

Всем хороша криптография. Удобно, надёжно, практично. Есть только одна ма-а-а-аленькая проблема: где и как хранить закрытые (секретные) ключи. Что из себя представляют эти самые "ключи", применительно к IT? Очевидно, некий файл. Например, в случае шифрования по алгоритму RSA он будет содержать два каких-то больших числа.

Допустим, мы взяли и сохранили файл на жёсткий диск компьютера. Или на флешку. Но кто сказал, что он будет вечно пребывать там в безопасности? Компьютер могут заразить трояном и утащить файл с ключом; флешку могут украсть, её можно потерять. Можно по ошибке загрузить свой ключ на какой-либо ресурс с открытым доступом и т.д. и т.п.

Поэтому грамотный ответственный человек свой закрытый ключ обязательно зашифрует каким-либо обратимым алгоритмом с паролем. Таким образом, файл будет лежать на жестком диске в криптованном виде, непригодном для использования по своему прямому назначению. Перед началом работы пользователь должен будет ввести пароль, расшифровать им закрытый ключ, после чего уже приступать к решению своих зачач. Но у такого подхода тоже есть ряд недостатков.

  • Для того чтобы пароль был устойчивым к BruteForce-взлому (взлом методом последовательного перебора), он должен иметь длину не менее 20-ти символов.
  • Для того чтобы пароль был устойчивым к атаке по словарю (перебору по словарю), он не должен содержать в себе осмысленные "человеческие" слова, фразы и их фрагменты.
  • Вышесказанное ведёт к тому, что пароль будет труднозапоминаемым. А записывать его куда-либо, мягко говоря, не рекомендуется.
  • Пароль или его фрагмент также вполне реально "утащить" (скомпрометировать) в момент его ввода с клавиатуры каким-нибудь keylogger-ом, подглядеть и т.п. После этого, каким-либо образом украв криптованный ключ, можно будет его расшифровать и воспользоваться им без ведома законного владельца.
  • И самое главное. Если у тебя стырили ключи-пароли, то ты сам об этом либо вообще не узнаешь, либо узнаешь слишком поздно. Например, когда с твоего счета в банке уведут круглую сумму.

И я не зря упомянул про "грамотного ответственного" человека. В моей практике, стоит обычному пользователю выдать закрытый ключ, так он(а) сразу положит его на "Рабочий стол", а пароль от него либо сохранит тут же рядом в текстовом файле, либо запишет авторучкой на стикере и прилепит на монитор. "Штоб не забыть". Понятно, что в таком случае криптографическая защита в целом будет выглядеть примерно вот так:

Поэтому умные люди придумали специальные устройства для хранения закрытых ключей (и не только), которые называются по-русски жетонами, а по-буржуйски токенами (Token).

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

Дальше мысль инженеров пошла в направлении вопроса "а что будет, если украдут сам токен". Так появилась "двухфакторная аутентификация". Суть в том, что в момент запроса к токену от той или иной программы на проведение какой-либо операции с участием закрытого ключа, токен требует от пользователя "разблокировать" его вводом пароля. Таким образом, для доступа к криптографическим функциям требуется одновременное соблюдение двух условий: обладание самим токеном и знание пароля. Отсюда и происходит прилагательное "двухфакторная" в названии.

Потом мысль пошла ещё дальше. Раз уж токен — это почти что полноценный компьютер, то почему бы не обучить его вычислять N раз в цикле какую-нибудь криптографическую хеш-функцию (да хоть бы и всё тот же MD5) от некоторого наперед заданного зашитого в него секретного числа. А результат выводить на маленьком ЖК-экранчике. Так появились генераторы одноразовых паролей (OTP Generator). Они нашли широкое применение в разнообразных интернет-банкингах для подтверждения транзакции пользователя.

И немного о конкретных марках и производителях токенов. Не очень в курсе как обстоят дела в мире, но в России сейчас распространены в основном две с половиной марки токенов: eTokenruToken и Bifit. "Две с половиной" — потому что Bifit есть суть перекрашенный ruToken на чипе Magistra со своим собственным софтом.

В глобальном плане все эти токены мало чем отличаются друг от друга. Задачи они решают одни и те же. Различия заключаются только в степени кривизны поставляемого вместе с ними софта, драйверов и тупизны техподдержки. На мой субъективный взгляд, они все г...но. Для работы под Windows наименьшим злом является всё же аладдиновский eToken: для него сделана более приятная консоль и у меня с ним было минимальное количество проблем. Под Linux библиотеки PKCS#11 (OpenSC и иже с ними) лучше поддерживаются ruToken-ом, да и документации в мире OpenSource для него побольше будет. А во всём остальном — что одно творение представляет собой глюкавую недоделку, что другое. Так что со спокойной совестью можете пользоваться любым из них.

Tags: it, безопасность, криптография, ликбез
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 0 comments