Ключ шифрования: Ключи шифрования, из-за которых блокируют сервисы. Объясняем, что это такое

Содержание

Ключи шифрования, из-за которых блокируют сервисы. Объясняем, что это такое

Саморазвитие

Ключи шифрования, из-за которых блокируют сервисы. Объясняем, что это такое

5 июня 2019 2 725 просмотров


Лиана Хазиахметова

На днях, по сообщению СМИ, «Яндекс» отказался выдавать ФСБ ключи шифрования. Ранее из-за такого шага заблокировали Telegram. В «Яндексе» считают, что им удастся найти решение: соблюсти закон, но при этом сохранить приватность пользователей. Чтобы понять, почему сервисы отказываются передавать ключи шифрования и как это может повлиять на пользователей, проведем небольшой ликбез. Что такое шифрование? Поищем ответ на вопрос в энциклопедии «Как объяснить ребенку информатику» (мы иногда заглядываем в учебники, если чего-то не знаем 😉 )

Важные понятия



Как объяснить ребенку информатику

  • Криптография: наука о создании и взломе шифров.
  • Шифр: алгоритм для кодирования и декодирования сообщений.
  • Ключ: дополнительные данные, используемые для шифрования или расшифровки.
  • Расшифровка: процесс использования шифра и ключа для раскрытия шифровки.
  • Открытый текст: незашифрованный текст.
  • Шифрованный текст: текст после шифрования.

Что такое шифрование?

Не одну тысячу лет люди посылают сообщения, понятные только конкретным адресатам, чтобы защитить свои тайны от перехвата. Создание таких сообщений называется шифрованием.

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

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

Простое шифрование

В перестановочном шифре позиции букв в сообщении меняются по некоему правилу, которое и является ключом. Адресат, тоже владеющий ключом, выполняет обратный процесс и получает оригинальный текст. Запись сообщения задом наперед — это тоже перестановочный шифр, но нестойкий, потому что его легко разгадать. Перестановочные шифры меняют буквы местами согласно правилу или набору правил.

Частотный анализ

Перестановочный шифр легко взломать методом частотного анализа. Выбрав наиболее часто встречающиеся буквы шифровки, можно соотнести их с наиболее частотными в словах языка. В английском языке чаще всего используется буква «e», а в русском — «о».

Шифр подстановки

Использовался Юлием Цезарем. Каждая исходная буква сдвигается по алфавиту на заданное число позиций. Ключом является величина сдвига.

Шифрование с открытым ключом

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

Открытый ключ шифрует текст так, что решений может быть бессчетное множество. Закрытый ключ содержит данные, сводящие решение к одному варианту.

SSL

Чтобы зашифровать интернет-соединение, к обычным процедурам связи добавляют протокол SSL. URL сайта, использующего SSL, начинается с «https» вместо «http». Любой сайт, который хочет работать с SSL-протоколом, должен получить сертификат у официального провайдера. В него входят открытый и закрытый ключи для шифрования трафика между сайтом и его посетителями. Также SSL используется для защиты почтовых сообщений.

Если сайт использует просроченный или не заверенный сертификат, браузер выдаст предупреждение. Некоторые браузеры блокируют просмотр таких сайтов.

Передача ключей шифрования означает, что третьи лица будут знать пароли пользователей, иметь возможность читать переписку, отслеживать нахождение пользователя на сайте. Однако закон предполагает, что ключи шифрования хотя и будут храниться на стороннем сервисе, но смогут использоваться только по решению суда. В «Яндексе» заявили, что можно соблюсти интересы безопасности без передачи ключей. Как это будет, скоро узнаем.

Энциклопедия «Как объяснить ребенку информатику» поможет разобраться в цифровой среде детям и взрослым.

Обложка поста: unsplash.com

НОУ ИНТУИТ | Лекция | Криптография с открытым ключом

Аннотация: Рассматриваются основные понятия, относящиеся к криптографии с открытым ключом, а также способы их использования: шифрование, создание и проверка цифровой подписи, обмен ключа. Рассмотрены алгоритмы RSA и Диффи-Хеллмана.

Основные требования к алгоритмам асимметричного шифрования

Создание алгоритмов асимметричного шифрования является величайшим и, возможно, единственным революционным достижением в истории криптографии.

Алгоритмы шифрования с открытым ключом разрабатывались для того, чтобы решить две наиболее трудные задачи, возникшие при использовании симметричного шифрования.

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

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

Диффи и Хеллман достигли значительных результатов, предложив способ решения обеих задач, который радикально отличается от всех предыдущих подходов к шифрованию.

Сначала рассмотрим общие черты алгоритмов шифрования с открытым ключом и требования к этим алгоритмам. Определим требования, которым должен соответствовать алгоритм, использующий один ключ для шифрования, другой ключ — для дешифрования, и при этом вычислительно невозможно определить дешифрующий ключ, зная только алгоритм шифрования и шифрующий ключ.

Кроме того, некоторые алгоритмы, например RSA, имеют следующую характеристику: каждый из двух ключей может использоваться как для шифрования, так и для дешифрования.

Сначала рассмотрим алгоритмы, обладающие обеими характеристиками, а затем перейдем к алгоритмам открытого ключа, которые не обладают вторым свойством.

При описании симметричного шифрования и шифрования с открытым ключом будем использовать следующую терминологию. Ключ, используемый в симметричном шифровании, будем называть секретным ключом. Два ключа, используемые при шифровании с открытым ключом, будем называть открытым ключом и закрытым ключом . Закрытый ключ держится в секрете, но называть его будем закрытым ключом, а не секретным, чтобы избежать путаницы с ключом, используемым в симметричном шифровании. Закрытый ключ будем обозначать KR, открытый ключ — KU.

Будем предполагать, что все участники имеют доступ к открытым ключам друг друга, а закрытые ключи создаются локально каждым участником и, следовательно, распределяться не должны.

В любое время участник может изменить свой закрытый ключ и опубликовать составляющий пару открытый ключ, заменив им старый открытый ключ.

Диффи и Хеллман описывают требования, которым должен удовлетворять алгоритм шифрования с открытым ключом.

  1. Вычислительно легко создавать пару ( открытый ключ KU, закрытый ключ KR ).
  2. Вычислительно легко, имея открытый ключ и незашифрованное сообщение М, создать соответствующее зашифрованное сообщение:
  3. Вычислительно легко дешифровать сообщение, используя закрытый ключ:
    М = DKR[C] = DKR[EKU[M]]
  4. Вычислительно невозможно, зная открытый ключ KU, определить закрытый ключ KR.
  5. Вычислительно невозможно, зная открытый ключ KU и зашифрованное сообщение С, восстановить исходное сообщение М.

    Можно добавить шестое требование, хотя оно не выполняется для всех алгоритмов с открытым ключом:

  6. Шифрующие и дешифрующие функции могут применяться в любом порядке:

Это достаточно сильные требования, которые вводят понятие односторонней функции с люком. Односторонней функцией называется такая функция, у которой каждый аргумент имеет единственное обратное значение, при этом вычислить саму функцию легко, а вычислить обратную функцию трудно.

Y = f(X) — легко
X = f-1(Y) — трудно

Обычно «легко» означает, что проблема может быть решена за полиномиальное время от длины входа. Таким образом, если длина входа имеет n битов, то время вычисления функции пропорционально n

a, где а — фиксированная константа. Таким образом, говорят, что алгоритм принадлежит классу полиномиальных алгоритмов Р. Термин «трудно» означает более сложное понятие. В общем случае будем считать, что проблему решить невозможно, если усилия для ее решения больше полиномиального времени от величины входа. Например, если длина входа n битов, и время вычисления функции пропорционально 2n, то это считается вычислительно невозможной задачей. К сожалению, тяжело определить, проявляет ли конкретный алгоритм такую сложность. Более того, традиционные представления о вычислительной сложности фокусируются на худшем случае или на среднем случае сложности алгоритма. Это неприемлемо для криптографии, где требуется невозможность инвертировать функцию для всех или почти всех значений входов.

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

Y = fk(X) — легко, если k и Х известны
X = fk-1(Y) — легко, если k и Y известны
Х = fk-1(Y) — трудно, если Y известно, но k неизвестно

Мы видим, что разработка конкретного алгоритма с открытым ключом зависит от открытия соответствующей односторонней функции с люком.

Криптоанализ алгоритмов с открытым ключом

Как и в случае симметричного шифрования, алгоритм шифрования с открытым ключом уязвим для лобовой атаки. Контрмера стандартная: использовать большие ключи.

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

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

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

Основные способы использования алгоритмов с открытым ключом

Основными способами использования алгоритмов с открытым ключом являются шифрование/дешифрование, создание и проверка подписи и обмен ключа.

Шифрование с открытым ключом состоит из следующих шагов:


Рис. 7.1. Шифрование с открытым ключом
  1. Пользователь В создает пару ключей KUb и KRb, используемых для шифрования и дешифрования передаваемых сообщений.
  2. Пользователь В делает доступным некоторым надежным способом свой ключ шифрования, т.е. открытый ключ KUb. Составляющий пару закрытый ключ KRb держится в секрете.
  3. Если А хочет послать сообщение В, он шифрует сообщение, используя открытый ключ В KUb.
  4. Когда В получает сообщение, он дешифрует его, используя свой закрытый ключ KRb. Никто другой не сможет дешифровать сообщение, так как этот закрытый ключ знает только В.

Если пользователь (конечная система) надежно хранит свой закрытый ключ, никто не сможет подсмотреть передаваемые сообщения.

Создание и проверка подписи состоит из следующих шагов:


Рис. 7.2. Создание и проверка подписи
  1. Пользователь А создает пару ключей KRA и KUA, используемых для создания и проверки подписи передаваемых сообщений.
  2. Пользователь А делает доступным некоторым надежным способом свой ключ проверки, т.е. открытый ключ KUA. Составляющий пару закрытый ключ KRA держится в секрете.
  3. Если А хочет послать подписанное сообщение В, он создает подпись EKRa[M] для этого сообщения, используя свой закрытый ключ KRA.
  4. Когда В получает подписанное сообщение, он проверяет подпись DKUa[M], используя открытый ключ А KUA. Никто другой не может подписать сообщение, так как этот закрытый ключ знает только А.

До тех пор, пока пользователь или прикладная система надежно хранит свой закрытый ключ, их подписи достоверны.

Кроме того, невозможно изменить сообщение, не имея доступа к закрытому ключу А ; тем самым обеспечивается аутентификация и целостность данных.

В этой схеме все сообщение подписывается, причем для подтверждения целостности сообщения требуется много памяти. Каждое сообщение должно храниться в незашифрованном виде для использования в практических целях. Кроме того, копия сообщения также должна храниться в зашифрованном виде, чтобы можно было проверить в случае необходимости подпись. Более эффективным способом является шифрование небольшого блока битов, который является функцией от сообщения. Такой блок, называемый аутентификатором, должен обладать свойством невозможности изменения сообщения без изменения аутентификатора. Если аутентификатор зашифрован закрытым ключом отправителя, он является цифровой подписью, с помощью которой можно проверить исходное сообщение. Далее эта технология будет рассматриваться в деталях.

Важно подчеркнуть, что описанный процесс создания подписи не обеспечивает конфиденциальность. Это означает, что сообщение, посланное таким способом, невозможно изменить, но можно подсмотреть. Это очевидно в том случае, если подпись основана на аутентификаторе, так как само сообщение передается в явном виде. Но даже если осуществляется шифрование всего сообщения, конфиденциальность не обеспечивается, так как любой может расшифровать сообщение, используя открытый ключ отправителя.

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

Некоторые алгоритмы можно задействовать тремя способами, в то время как другие могут использоваться одним или двумя способами.

Перечислим наиболее популярные алгоритмы с открытым ключом и возможные способы их применения.

Алгоритм Шифрование / дешифрование Цифровая подпись Обмен ключей
RSA Да; непригоден для больших блоков Да Да
DSS Нет Да Нет
Диффи-Хеллман Нет Нет Да

Аппаратный ключ шифрования за 3$ — возможно ли это? / Хабр


Итоговый результат — ключ размером с флешку

Повсеместное шифрование и, как следствие, обилие ключей заставляет задуматься об их надежном хранении. Хранение ключей на внешних устройствах, откуда они не могут быть скопированы, уже давно считается хорошей практикой. Я расскажу о том, как за 3$ и 2 часа сделать такой девайс.

Что значит картинка

Это из Гарри Поттера. На фото изображены крестражи. Цитата из фильма: «Крестраж — это предмет, в котором человек спрятал часть своей души… помещает её в предмет и он будет защищен, если на него нападут …». Личные данные, которые мы все пытаемся защитить, вполне заслуженно можно сравнить с частью души)


Кратко о принципах работы


Криптография дает нам возможность скрывать то, что мы хотим отправить, убедиться в том, что мы общаемся именно с тем, с кем мы думаем и много других интересных вещей. Обычно для того, чтобы все это хорошо работало от нас просят только одно — держать в секрете наши ключи шифрования. Звучит просто, не правда ли? Что ж, давайте посмотрим как же можно припрятать наши ключи:
  • Сохранить в файлике на рабочем столе — старый и проверенный годами способ записать что-то. Проблема в том, что помимо самого пользователя еще куча других программ имеет доступ к файлам на вашем рабочем столе. И если вы совершенно уверены в том, что все они делают то, для чего они предназначены, не собирают о вас никакие данные и попросту не сливают их в сеть — эта статья не для вас.
  • Менеджеры паролей — по-сути такое же хранение в файлике, просто он теперь зашифрован и чтобы получить доступ нужно знать пароль. Уже неплохо, но раз менеджер паролей запускается на вашем компьютере, то незашифрованные ключи попадают в оперативную память, откуда могут быть украдены из-за какой-нибудь уязвимости ОС
  • Записать на бумажку — удивительно, но этот способ выглядит немного более безопасным. Ключи не хранятся на вашем компьютере, кишащем вирусами. Каждый раз, когда вам нужно использовать ключ вы просто вводите его с клавиатуры. Однако, если ваши ключи довольно длинные(как например ssh-ключи) это может стать проблемой. Да и кейлоггеры не дремлют

Как видно, основная проблема состоит в том, что ключи либо непосредственно хранятся на вашем компьютере либо вводятся туда, посредством клавиатуры, флешки и т.п. Но, возразите вы, а как же тогда мой компьютер будет шифровать данные, если он не знает ключа? Правильный ответ — никак. Решение уже давно придумано. Главная идея в том, чтобы подключить к компьютеру специальное устройство, которое будет само шифровать данные. А компьютер будет только отправлять данные и получать результат. Так работают, например, многие смарт карты.

Необходимые компоненты


Итак, приступим. Собирать наш девайс мы будем на недорогом и достаточно популярном микроконтроллере серии STM32. Конечно, можно самому изготовить печатную плату но мы же хотим управиться за 2 часа? Так что возьмем уже готовое решение — программатор ST-Link v2. Выглядит этот девайс вот так.

Как ни странно, программатор для микроконтроллеров STM32 собран на микроконтроллере STM32. Этот девайс внешне очень напоминает флешку, что нам как нельзя на руку. К тому, же его корпус изготовлен из алюминия, так что можно не переживать что он повредится. Стоит это чудо на алиэкспресс 1.5-3 доллара. Нам потребуется две такие штуки. Одну мы переделаем под ключ, а вторую будем использовать чтобы залить прошивку на первую. Если у Вас уже есть программатор STM32 можно обойтись и одной штукой.

Итого, нам потребуется:

  • Программатор ST-Link v2 — 2 штуки
  • Паяльник
  • Немного проводов — как правило подходящие провода уже идут в комплекте с ST-Link
  • Linux, для того, чтобы скомпилировать и залить прошивку

Компилируем прошивку


Итак, начнем с софтварной части — сборке прошивки для нашего ключа. Исходные коды прошивки можно найти в этом репозитории. Я бы посоветовал скачать последнюю стабильную версию(её можно найти во вкладке tags). Можно склонировать репозиторий либо скачать в виде zip архива. Разминаем пальцы, запускаем терминал и переходим в папку с проектом. Переходим в папку src
$ cd src

Для того чтобы скомпилировать и загрузить прошивку нам нужно установить несколько пакетов:
  • arm-none-eabi-gcc
  • arm-none-eabi-newlib
  • openocd

Я использую пакетный менеджер pacman, в моем случае это выглядит вот так

$ sudo pacman -S arm-none-eabi-gcc
$ sudo pacman -S arm-none-eabi-newlib
$ sudo pacman -S openocd

Если Вы сидите на Ubuntu — используйте apt.

Напомню, что мы находимся в папке src проекта.
Запускаем configure скрипт


$ ./configure --vidpid=234b:0000

Запускаем утилиту make и наблюдаем как компилируется наша прошивка.
$ make

После компиляции появится папка build, а в ней файл gnuk.elf — он-то нам и нужен.

Загрузка прошивки на устройство


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

Итак, берем один из программаторов и стягиваем с него корпус. Выбранный программатор и будет нашим донором. Вот что мы найдем внутри

Обратите внимание на 4 контакта на плате. К ним нам нужно будет припаяться. Я рекомендую использовать для этого провода, которые идут в комплекте с ST-Link. Зачищаем провода с одного конца и припаиваем их к контактам. Если нам повезло, то на плате будут обозначения этих контактов.

«

Теперь, второй конец проводов подключаем к оставшемуся целым программатору. Если вам повезло, то просто подключаем провода в соответствии с надписями:

GND к GND
3.3V к 3.3V
SWDIO к SWDIO
SWCLK к SWCLK

Если надписей на плате не оказалось, то прийдется тыкать наугад воспользоваться тестером. С его помощью можно легко найти GND(он соединен с GND на выводах программатора-донора), аналогично 3.3V. Остальные два провода прийдется подключать наугад. Благо, вариантов всего 2. В итоге, получается что-то похожее на это

На этом фото синий девайс — программматор, который мы используем только как программатор. Пусть вас не смущает то, что на фото в начале статьи у итогового девайса синий цвет корпуса. Это не он. Будущий девайс находится справа.

Загружаем прошивку


Мы в шаге от успеха, осталось только загрузить прошивку. Открываем терминал, переходим в папку с нашей прошивкой(gnuk.elf).

Запускаем команду:

$ openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg -c 'program build/gnuk.elf verify reset exit'

Итак, теперь мы залили прошивку на наш девайс. Остался один шаг — запретить чтение памяти микроконтроллера. ВНИМАНИЕ! Это очень важный этап, который не позволит человеку, который украл ваш ключ, вытащить из него секретную информацию.

Для этого запускаем команду:

openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg -c init -c "reset halt" -c "stm32f1x lock 0" -c reset -c exit   

Теперь все готово.

Собираем все обратно


Теперь, когда все шаги позади, осталось позаботиться о внешнем виде нашего девайса. Отпаиваем провода. Оригинальная панель контактов нам тоже больше не нужна, так что можно смело выпаять её.

Разламываем крепление и выпаиваем контакты по одному.

Теперь надеваем обратно корпус, и заклеиваем заднюю стенку подходящим куском пластика.

Как можно использовать


То, что мы собрали — эмулятор OpenPGP смарт карты. Такая карта может хранить в себе GPG, SSH ключи. Область применения довольно большая, например:
  • Подписывание git коммитов — вопрос безопасности уже поднимался тут
  • Хранение SSH ключей
  • Шифрование и подписывание электронной почты по стандарту S/MIME — не проверял, но пишут что работает
  • Вход в ОС без пароля — хороший гайд уже есть на хабре

Как видим, можно сделать много чего интересного и полезного

Пример использования для ssh


И под конец, давайте посмотрим как можно использовать этот ключ для хранения ssh-ключей и подключения к удаленному серверу.

Есть два пути — сгенерировать новый ключ или импортировать уже имеющийся ключ на токен.

Посмотрим оба варианта. Вставляем токен в USB. В dmesg можно посмотреть информацию о подключенном устройстве.


$ dmesg
[11073.599862] usb 1-3: USB disconnect, device number 11
[11311.647551] usb 1-3: new full-speed USB device number 12 using xhci_hcd
[11311.796881] usb 1-3: New USB device found, idVendor=234b, idProduct=0000, bcdDevice= 2.00
[11311.796884] usb 1-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[11311.796885] usb 1-3: Product: Gnuk Token
[11311.796887] usb 1-3: Manufacturer: Free Software Initiative of Japan

Генерация нового ssh ключа

Важно понимать, что ключ генерируется на самом устройстве, а не на вашем компьютере. Так что, такой ключ вообще никогда не покидает пределы устройства.

Заходим в gpg:


$ gpg --card-edit

Открывается интерактивный режим gpg, включаем режим администратора командой admin:

gpg/card> admin

Далее запускаем команду генерации нового ключа:

gpg/card> generate

Далее идет стандартная процедура генерации ключа gpg. Во время которой вам будет предложено сохранить бекап ключа на диск. Разработчики рекомендуют делать бэкапы, но решать вам.
Единственно — аппаратно поддерживается генерация RSA ключей до 2048 бит. Если нужно 4096 — ключ прийдется генерировать на компьютере, а потом уже импортировать на само устройство.
Далее вам потребуются пин-коды. По умолчанию в прошивке зашиты следующие пин-коды:

CARD PIN — 123456
ADMIN PIN — 12345678

В будущем их обязательно нужно поменять.

Ключ может генерироваться немного дольше, чем если бы он генерировался непосредственно на компьютере, поэтому запасаемся терпением.

Импорт уже имеющегося ключа

Теперь посмотрим что делать, если у вас уже есть ssh-ключ, который вы хотели бы использовать.
Для этого импортируем ключ в gpg:

$ pem2openpgp temporary_id < id_rsa  | gpg --import

Теперь нам нужно узнать id ключа. Для этого выводим список всех доступных в gpg:

$ gpg -K

И находим импортированный ключ:

sec>  rsa2048 2020-02-05 [C]
      DFEFF02E226560B7F5A5F2CAB19534F88F8FE4EC
      Card serial no. = FFFE 87144751
uid           [ unknown] temporary_id


В моем случае id ключа — DFEFF02E226560B7F5A5F2CAB19534F88F8FE4EC

Заходим в интерактивный режим редактирования ключа gpg:


$ gpg --edit-key DFEFF02E226560B7F5A5F2CAB19534F88F8FE4EC

И даем команду на копирование ключа на смарт карту:

gpg> keytocard

Все, ключ записан.
Экспорт публичного ключа в ssh формате

Достаем нужный публичный ключ с токена для того, чтобы положить его на сервер:
$ pkcs15-tool --list-keys

В моем случае вывод выглядит так:

Using reader with a card: Free Software Initiative of Japan Gnuk (FSIJ-1.2.15-87144751) 00 00
Private RSA Key [Signature key]
	Object Flags   : [0x03], private, modifiable
	Usage          : [0x20C], sign, signRecover, nonRepudiation
	Access Flags   : [0x1D], sensitive, alwaysSensitive, neverExtract, local
	ModLength      : 2048
	Key ref        : 0 (0x00)
	Native         : yes
	Auth ID        : 01
	ID             : 01
	MD:guid        : f3de5f55-d100-4973-d572-40d67e20f033

Тут нас интересует ID-шник ключа, в моем случае 01. Теперь экспортируем публичный ключ:

$ pkcs15-tool --read-public-key 01

Копируем публичный ключ в файлик pub.key:

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyzHQIWEApliWYaf0T8jb
Vh3nc5+LklKXeuJFTN3BW2VqdrTw1rpKXiANWpi+qbtZhZ2nP3CJX6qoGobXyCOd
/iAiygFlyW4BwTQpnAm81IE9lPzfasOK7SBuKJ+ZbB4WpuYJRozgtt/gpWzmnWnW
84/CU9Lqbhz95v/C/DImSf6LiwVdmiEj4CUNInl5pY4trguDsSfkw1u8gGqSPEsD
ZXtlVRx8iBGi0JR02g9KTL4dDGocUtcTK8W0eY+BDbQSXfTGCy93v8sEyhdQjHs8
oDiwkvFQ86gYqwL5DJ7U/rFSO3A5X6zmkFFV8nJZjxB2qfE5aommtXxow4iPml3x
YwIDAQAB
-----END PUBLIC KEY-----

И конвертируем его в ssh-rsa формат:

$ ssh-keygen -f pub.key -i -mPKCS8 

Получается публичный ключ в нужном формате:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDLMdAhYQCmWJZhp/RPyNtWHadzn4uSUpd64kVM3cFbZWp2tPDWukpeIA1amL6pu1mFnac/cIlfqqgahtfII53+ICLKAWXJbgHBNCmcCbzUgT2U/N9qw4rtIG4on5lsHham5glGjOC23+ClbOadadbzj8JT0upuHP3m/8L8MiZJ/ouLBV2aISPgJQ0ieXmlji2uC4OxJ+TDW7yAapI8SwNle2VVHHyIEaLQlHTaD0pMvh0MahxS1xMrxbR5j4ENtBJd9MYLL3e/ywTKF1CMezygOLCS8VDzqBirAvkMntT+sVI7cDlfrOaQUVXyclmPEHap8Tlqiaa1fGjDiI+aXfFj

Дальше идет стандартная процедура настройки ssh для входа по заданному ключу — нужно добавить ключ в файлик ~/.ssh/authorized_keys на удаленном сервере.
Конфигурирование ssh

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

$ ssh -I /usr/lib/opensc-pkcs11.so [email protected]

Однако, удобнее будет воспользоваться config файлом (~/.ssh/config)
Добавляем в него следующие строки

Host digitalOceanServer
        HostName 192.168.0.1
        User root
        PKCS11Provider /usr/lib/opensc-pkcs11.so

Теперь вызов ssh стал еще проще:

$ ssh digitalOceanServer

Как поменять стандартные пин-коды

Не менее важным шагом будет установка собственных пин-кодов. Для начала нужно понять, что тут используется два разных пин-кода:
  • PIN-code — этот код используется при рутинных операциях со смарт картой — зашифровать что-то, подписать и т.д.
  • Admin Pin-code — этот код нужен для того, чтобы изменять/удалять ключи и делать всякие подобные «админские» вещи
  • Reset code — код, который позволит разблокировать токен, после трех неправильных попыток ввода PIN-кода. Его использование не обязательно, так что решать вам

У вас есть только 3 попытки для каждого из кодов. После чего токен блокируется.

Теперь приступим. Для этого опять заходим в интерактивный режим GPG:


$ gpg --card-edit

И вводим команду passwd:

gpg/card> passwd

Откроется окно, где можно будет сменить пин-код от токена.

Теперь нужно поменять пин-код администратора. Для этого переходим в режим администратора:


gpg/card> admin

Вводим команду passwd снова:

gpg/card> passwd

Однако теперь она работает в расширенном режиме и нам предложат несколько вариантов:

1 - change PIN
2 - unblock PIN
3 - change Admin PIN
4 - set the Reset Code
Q - quit

Your selection?

Выбираем change Admin PIN и по стандартной схеме устанавливаем пароль администратора. Напомню, default Admin PIN — 12345678.

О безопасности устройства


Разумеется, за 3$ нельзя достичь секьюрности уровня ключей за 200+ долларов. Однако, собранный девайс можно рассматривать как ключ начального уровня. Насколько мне известно, заводские ключи Nitrokey Start используют такую же прошивку. В любом случае, использование такого устройства поднимет безопасность как минимум на уровень выше. Так что это отличный способ начать использовать аппаратные ключи.

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

Так что, повторюсь еще раз, это отличный вариант начального уровня, и даже с ним безопасность выйдет на принципиально новый уровень.

Ссылки на полезные материалы


В процессе использования устройства наверняка возникнет потребность в дополнительной информации. Я собрал список хороших источников.
Устройство которое мы собрали разрабатывается опенсорсным проектом GNUK (собственно, так токен и называется), так что еще информации можно найти в гугле по запросу «GNUK».

Upd. В комментариях подсказали, что есть прошивки, которые позволяют использовать девайс для двухфакторной аутентификации. Код прошивки можно найти тут
Upd. 2 15.02.2020 В комментариях подсказали, что для конкретно этого чипа существует уязвимость, позволяющая слить содержимое памяти. Насколько я понял, пока он еще не опубликована, но о ней заявлено. Так что пока все не однозначно. Там же предложили хорошее решение — залить внутрь корпуса устройства эпоксидную смолу смешанную с порошком алюминия. Такой способ был описан в книге Кевина Митника «Исскуство обмана». Таким образом, для того чтобы получить доступ к чипу нужно будет расковырять клей, что при неосторожном обращении может необратимо повредить чип. Конечно, и этот способ можно обойти, на это повышает стоимость взлома еще больше. Конечно, если будет нужно Моссад сделает свои Моссадовские штучки и это его не остановит, а только задержит.
Upd. 3 В личку прилетело много сообщений о том, что у людей не получается прошить ST-Link. Разобравшись, выяснили, что сейчас китайские производители стали активно экономить на компонентах и использовать чипы с 64Кб памяти на борту. А для прошивки этого недостаточно, ищите с чипом 128Кб на борту. Поэтому, рекомендую при покупке проверять какой чип установлен (если есть возможность), либо уточнять у продавца/в отзывах.
Upd. 4 Оказывается, все-таки можно использовать китайские программаторы с 64 Кб чипом (правда при этом прийдется использовать не самую свежую версию прошивки) — на хабре появилась интересная статья об этом.

Шифрование с открытым ключом — CoderLessons.com

В отличие от криптографии с симметричным ключом, мы не находим исторического использования криптографии с открытым ключом. Это относительно новая концепция.

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

С распространением в последние несколько десятилетий более незащищенных компьютерных сетей возникла реальная потребность в использовании криптографии в более широком масштабе. Симметричный ключ оказался непрактичным из-за проблем, с которыми он столкнулся при управлении ключами. Это дало начало криптосистемам с открытым ключом.

Процесс шифрования и дешифрования изображен на следующей иллюстрации —

Наиболее важные свойства схемы шифрования с открытым ключом —

  • Различные ключи используются для шифрования и дешифрования. Это свойство, которое устанавливает эту схему отличной от симметричной схемы шифрования.

  • Каждый получатель обладает уникальным ключом дешифрования, обычно называемым его личным ключом.

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

  • В этой схеме требуется некоторая гарантия подлинности открытого ключа, чтобы избежать подмены противником в качестве получателя. Как правило, в этом типе криптосистемы задействована доверенная третья сторона, которая удостоверяет, что определенный открытый ключ принадлежит только конкретному человеку или объекту.

  • Алгоритм шифрования является достаточно сложным, чтобы запретить злоумышленнику выводить открытый текст из зашифрованного текста и ключа шифрования (открытого).

  • Хотя закрытый и открытый ключи связаны математически, вычислить закрытый ключ из открытого ключа не представляется возможным. Фактически, интеллектуальная часть любой криптосистемы с открытым ключом заключается в разработке отношений между двумя ключами.

Различные ключи используются для шифрования и дешифрования. Это свойство, которое устанавливает эту схему отличной от симметричной схемы шифрования.

Каждый получатель обладает уникальным ключом дешифрования, обычно называемым его личным ключом.

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

В этой схеме требуется некоторая гарантия подлинности открытого ключа, чтобы избежать подмены противником в качестве получателя. Как правило, в этом типе криптосистемы задействована доверенная третья сторона, которая удостоверяет, что определенный открытый ключ принадлежит только конкретному человеку или объекту.

Алгоритм шифрования является достаточно сложным, чтобы запретить злоумышленнику выводить открытый текст из зашифрованного текста и ключа шифрования (открытого).

Хотя закрытый и открытый ключи связаны математически, вычислить закрытый ключ из открытого ключа не представляется возможным. Фактически, интеллектуальная часть любой криптосистемы с открытым ключом заключается в разработке отношений между двумя ключами.

Существует три типа схем шифрования с открытым ключом. Мы обсудим их в следующих разделах —

Криптосистема RSA

Эта криптосистема является одной из исходных систем. Это остается наиболее используемой криптосистемой даже сегодня. Система была изобретена тремя учеными Роном Ривестом, Ади Шамиром и Леном Адлеманом, и, следовательно, она называется криптосистемой RSA.

Мы увидим два аспекта криптосистемы RSA: во-первых, создание пары ключей и, во-вторых, алгоритмы шифрования-дешифрования.

Генерация пары ключей RSA

Каждый человек или сторона, которая желает участвовать в общении с использованием шифрования, должна сгенерировать пару ключей, а именно открытый ключ и закрытый ключ. Процесс генерации ключей описан ниже —

  • Генерация модуля RSA (n)

    • Выберите два больших простых числа, p и q.

    • Рассчитайте n = p * q. Для надежного неразрушимого шифрования пусть n будет большим числом, обычно не менее 512 бит.

  • Найти производное число (е)

    • Число e должно быть больше 1 и меньше (p — 1) (q — 1).

    • Не должно быть общего множителя для e и (p — 1) (q — 1), за исключением 1. Другими словами, два числа e и (p — 1) (q — 1) взаимно просты.

  • Форма открытого ключа

    • Пара чисел (n, e) образует открытый ключ RSA и становится открытой.

    • Интересно, что хотя n является частью открытого ключа, сложность факторизации большого простого числа гарантирует, что злоумышленник не сможет найти за конечное время два простых числа (p & q), использованных для получения n. Это сила ОГА.

  • Генерация закрытого ключа

    • Закрытый ключ d рассчитывается из p, q и e. Для данных n и e существует уникальное число d.

    • Число d является обратной величиной e по модулю (p — 1) (q — 1). Это означает, что d является числом, меньшим (p — 1) (q — 1), так что при умножении на e оно равно 1 по модулю (p — 1) (q — 1).

    • Это соотношение записано математически следующим образом:

Генерация модуля RSA (n)

Выберите два больших простых числа, p и q.

Рассчитайте n = p * q. Для надежного неразрушимого шифрования пусть n будет большим числом, обычно не менее 512 бит.

Найти производное число (е)

Число e должно быть больше 1 и меньше (p — 1) (q — 1).

Не должно быть общего множителя для e и (p — 1) (q — 1), за исключением 1. Другими словами, два числа e и (p — 1) (q — 1) взаимно просты.

Форма открытого ключа

Пара чисел (n, e) образует открытый ключ RSA и становится открытой.

Интересно, что хотя n является частью открытого ключа, сложность факторизации большого простого числа гарантирует, что злоумышленник не сможет найти за конечное время два простых числа (p & q), использованных для получения n. Это сила ОГА.

Генерация закрытого ключа

Закрытый ключ d рассчитывается из p, q и e. Для данных n и e существует уникальное число d.

Число d является обратной величиной e по модулю (p — 1) (q — 1). Это означает, что d является числом, меньшим (p — 1) (q — 1), так что при умножении на e оно равно 1 по модулю (p — 1) (q — 1).

Это соотношение записано математически следующим образом:

ed = 1 mod (p − 1)(q − 1)

Расширенный Евклидов Алгоритм принимает p, q и e в качестве входных данных и дает d в качестве выходных данных.

пример

Пример генерации пары ключей RSA приведен ниже. (Для простоты понимания простые числа p & q, взятые здесь, являются небольшими значениями. На практике эти значения очень высоки).

  • Пусть два простых числа p = 7 и q = 13. Таким образом, модуль n = pq = 7 x 13 = 91.

  • Выберите e = 5, что является допустимым выбором, поскольку не существует числа с общим множителем 5 и (p — 1) (q — 1) = 6 × 12 = 72, кроме 1.

  • Пара чисел (n, e) = (91, 5) образует открытый ключ и может быть доступна любому, кому мы хотим отправлять нам зашифрованные сообщения.

  • Введите p = 7, q = 13 и e = 5 в расширенный евклидов алгоритм. Выход будет d = 29.

  • Проверьте правильность рассчитанного значения d, рассчитав:

Пусть два простых числа p = 7 и q = 13. Таким образом, модуль n = pq = 7 x 13 = 91.

Выберите e = 5, что является допустимым выбором, поскольку не существует числа с общим множителем 5 и (p — 1) (q — 1) = 6 × 12 = 72, кроме 1.

Пара чисел (n, e) = (91, 5) образует открытый ключ и может быть доступна любому, кому мы хотим отправлять нам зашифрованные сообщения.

Введите p = 7, q = 13 и e = 5 в расширенный евклидов алгоритм. Выход будет d = 29.

Проверьте правильность рассчитанного значения d, рассчитав:

de = 29 × 5 = 145 = 1 mod 72
  • Следовательно, открытый ключ (91, 5) и закрытый ключ (91, 29).

Следовательно, открытый ключ (91, 5) и закрытый ключ (91, 29).

Шифрование и дешифрование

Как только пара ключей была сгенерирована, процесс шифрования и дешифрования относительно прост и вычислительно прост.

Интересно, что RSA не работает напрямую со строками битов, как в случае шифрования с симметричным ключом. Он работает по номерам по модулю n. Следовательно, необходимо представлять открытый текст в виде последовательности чисел, меньшей n.

RSA шифрование

  • Предположим, отправитель хочет отправить текстовое сообщение тому, чей открытый ключ (n, e).

  • Затем отправитель представляет открытый текст в виде последовательности чисел, меньшей n.

  • Для шифрования первого открытого текста P, который является числом по модулю n. Процесс шифрования является простым математическим шагом, так как —

Предположим, отправитель хочет отправить текстовое сообщение тому, чей открытый ключ (n, e).

Затем отправитель представляет открытый текст в виде последовательности чисел, меньшей n.

Для шифрования первого открытого текста P, который является числом по модулю n. Процесс шифрования является простым математическим шагом, так как —

C = P e mod n
  • Другими словами, зашифрованный текст C равен открытому тексту P, умноженному на него e раз, а затем уменьшенному по модулю n. Это означает, что C также число меньше n.

  • Возвращаясь к нашему примеру генерации ключей с открытым текстом P = 10, мы получаем зашифрованный текст C —

Другими словами, зашифрованный текст C равен открытому тексту P, умноженному на него e раз, а затем уменьшенному по модулю n. Это означает, что C также число меньше n.

Возвращаясь к нашему примеру генерации ключей с открытым текстом P = 10, мы получаем зашифрованный текст C —

C = 10 5 mod 91

Расшифровка RSA

  • Процесс дешифрования для RSA также очень прост. Предположим, что получатель пары открытого ключа (n, e) получил зашифрованный текст C.

  • Получатель поднимает C до уровня своего личного ключа d. Результат по модулю n будет открытым текстом P.

Процесс дешифрования для RSA также очень прост. Предположим, что получатель пары открытого ключа (n, e) получил зашифрованный текст C.

Получатель поднимает C до уровня своего личного ключа d. Результат по модулю n будет открытым текстом P.

Plaintext = C d mod n
  • Возвращаясь снова к нашему числовому примеру, зашифрованный текст C = 82 расшифровывается до номера 10 с использованием закрытого ключа 29 —

Возвращаясь снова к нашему числовому примеру, зашифрованный текст C = 82 расшифровывается до номера 10 с использованием закрытого ключа 29 —

Plaintext = 82 29 mod 91 = 10

Анализ RSA

Безопасность RSA зависит от сильных сторон двух отдельных функций. Криптосистема RSA является самой популярной криптосистемой с открытым ключом, сила которой основана на практической сложности факторизации очень больших чисел.

  • Функция шифрования — рассматривается как односторонняя функция преобразования открытого текста в зашифрованный текст, и ее можно обратить только с помощью знания закрытого ключа d.

  • Генерация ключа . Сложность определения личного ключа из открытого ключа RSA эквивалентна факторизации модуля n. Таким образом, злоумышленник не может использовать знание открытого ключа RSA для определения закрытого ключа RSA, если он не может указать n. Это также односторонняя функция, переход от значений p & q к модулю n прост, но обратный процесс невозможен.

Функция шифрования — рассматривается как односторонняя функция преобразования открытого текста в зашифрованный текст, и ее можно обратить только с помощью знания закрытого ключа d.

Генерация ключа . Сложность определения личного ключа из открытого ключа RSA эквивалентна факторизации модуля n. Таким образом, злоумышленник не может использовать знание открытого ключа RSA для определения закрытого ключа RSA, если он не может указать n. Это также односторонняя функция, переход от значений p & q к модулю n прост, но обратный процесс невозможен.

Если любая из этих двух функций окажется не односторонней, RSA будет нарушен. Фактически, если будет разработана методика эффективного факторинга, RSA больше не будет безопасным.

Сила шифрования RSA резко снижается против атак, если числа p и q не являются большими простыми числами и / или выбранный открытый ключ e является небольшим числом.

Эль-Гамальская криптосистема

Наряду с RSA предлагаются и другие криптосистемы с открытым ключом. Многие из них основаны на разных версиях проблемы дискретного логарифма.

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

Давайте рассмотрим простую версию ElGamal, которая работает с числами по модулю p. В случае вариантов эллиптической кривой она основана на совершенно разных системах счисления.

Генерация пары ключей Эль-Гамаля

Каждый пользователь криптосистемы ElGamal генерирует пару ключей следующим образом:

  • Выбор большого простого числа p. Обычно выбирается простое число длиной от 1024 до 2048 бит.

  • Выбор элемента генератора g.

    • Это число должно быть от 1 до p — 1, но не может быть любым числом.

    • Это генератор мультипликативной группы целых чисел по модулю p. Это означает, что для любого целого числа m, взаимно простого с p, существует такое целое число k, что g k = a mod n.

      Например, 3 является генератором группы 5 (Z 5 = {1, 2, 3, 4}).

Выбор большого простого числа p. Обычно выбирается простое число длиной от 1024 до 2048 бит.

Выбор элемента генератора g.

Это число должно быть от 1 до p — 1, но не может быть любым числом.

Это генератор мультипликативной группы целых чисел по модулю p. Это означает, что для любого целого числа m, взаимно простого с p, существует такое целое число k, что g k = a mod n.

Например, 3 является генератором группы 5 (Z 5 = {1, 2, 3, 4}).

N 3 н 3 n мод 5
1 3 3
2 9 4
3 27 2
4 81 1
  • Выбор закрытого ключа. Закрытый ключ x — это любое число больше 1 и меньше p − 1.

  • Вычислительная часть открытого ключа. Значение y вычисляется из параметров p, g и закрытого ключа x следующим образом:

Выбор закрытого ключа. Закрытый ключ x — это любое число больше 1 и меньше p − 1.

Вычислительная часть открытого ключа. Значение y вычисляется из параметров p, g и закрытого ключа x следующим образом:

y = g x mod p
  • Получение открытого ключа. Открытый ключ Эль-Гамаля состоит из трех параметров (p, g, y).

    Например, предположим, что p = 17 и g = 6 (можно подтвердить, что 6 является генератором группы Z 17 ). Закрытый ключ x может быть любым числом больше 1 и меньше 71, поэтому мы выбираем x = 5. Затем значение y вычисляется следующим образом:

Получение открытого ключа. Открытый ключ Эль-Гамаля состоит из трех параметров (p, g, y).

Например, предположим, что p = 17 и g = 6 (можно подтвердить, что 6 является генератором группы Z 17 ). Закрытый ключ x может быть любым числом больше 1 и меньше 71, поэтому мы выбираем x = 5. Затем значение y вычисляется следующим образом:

y = 6 5 mod 17 = 7
  • Таким образом, закрытый ключ равен 62, а открытый ключ — (17, 6, 7).

Таким образом, закрытый ключ равен 62, а открытый ключ — (17, 6, 7).

Шифрование и дешифрование

Генерирование пары ключей Эль-Гамаля сравнительно проще, чем эквивалентный процесс для RSA. Но шифрование и дешифрование немного сложнее, чем RSA.

Эль-Гамаль Шифрование

Предположим, отправитель желает отправить открытый текст кому-то, чей открытый ключ ElGamal (p, g, y), затем —

  • Отправитель представляет собой открытый текст в виде последовательности чисел по модулю p.

  • Для шифрования первого открытого текста P, который представлен в виде числа по модулю p. Процесс шифрования для получения зашифрованного текста C выглядит следующим образом:

    • Произвольно сгенерировать число k;
    • Вычислить два значения С1 и С2, где —

Отправитель представляет собой открытый текст в виде последовательности чисел по модулю p.

Для шифрования первого открытого текста P, который представлен в виде числа по модулю p. Процесс шифрования для получения зашифрованного текста C выглядит следующим образом:

C1 = g k mod p
C2 = (P * y k ) mod p
  • Отправьте зашифрованный текст C, состоящий из двух отдельных значений (C1, C2), отправленных вместе.

  • Ссылаясь на наш пример генерации ключей Эль-Гамаля, приведенный выше, открытый текст P = 13 шифруется следующим образом:

    • Произведите случайное число, скажем, к = 10
    • Вычислить два значения С1 и С2, где —

Отправьте зашифрованный текст C, состоящий из двух отдельных значений (C1, C2), отправленных вместе.

Ссылаясь на наш пример генерации ключей Эль-Гамаля, приведенный выше, открытый текст P = 13 шифруется следующим образом:

C1 = 6 10 mod 17
C2 = (13 * 7 10 ) mod 17 = 9

Отправьте зашифрованный текст C = (C1, C2) = (15, 9).

Эль-Гамальская расшифровка

  • Чтобы расшифровать зашифрованный текст (C1, C2) с помощью закрытого ключа x, предпринимаются следующие два шага:

    • Вычислить модульную обратную величину (C1) x по модулю p, которая равна (C1) -x , обычно называемому коэффициентом дешифрования.

    • Получите открытый текст, используя следующую формулу —

Чтобы расшифровать зашифрованный текст (C1, C2) с помощью закрытого ключа x, предпринимаются следующие два шага:

Вычислить модульную обратную величину (C1) x по модулю p, которая равна (C1) -x , обычно называемому коэффициентом дешифрования.

Получите открытый текст, используя следующую формулу —

C2 × (C1) -x  mod p = Plaintext
  • В нашем примере для расшифровки зашифрованного текста C = (C1, C2) = (15, 9) с использованием закрытого ключа x = 5 коэффициент дешифрования равен

В нашем примере для расшифровки зашифрованного текста C = (C1, C2) = (15, 9) с использованием закрытого ключа x = 5 коэффициент дешифрования равен

15 -5  mod 17 = 9

Извлечь открытый текст P = (9 × 9) мод 17 = 13.

Эль-Гамаль Анализ

В системе ElGamal каждый пользователь имеет закрытый ключ x. и имеет три компонента открытого ключа — простой модуль p, генератор g и открытый Y = g x mod p . Сила Эль-Гамаля основана на сложности проблемы дискретного логарифма.

Размер безопасного ключа обычно> 1024 бит. Сегодня используется даже ключ длиной 2048 бит. Что касается скорости обработки, Elgamal довольно медленный, он используется в основном для протоколов аутентификации ключей. Из-за более высокой эффективности обработки варианты ElGamal с эллиптической кривой становятся все более популярными.

Криптография с эллиптической кривой (ECC)

Криптография с эллиптической кривой (ECC) — это термин, используемый для описания набора криптографических инструментов и протоколов, безопасность которых основана на специальных версиях проблемы дискретного логарифма. Он не использует числа по модулю p.

ECC основан на наборах чисел, которые связаны с математическими объектами, называемыми эллиптическими кривыми. Существуют правила сложения и вычисления кратных этих чисел, так же как и для чисел по модулю p.

ECC включает в себя варианты многих криптографических схем, которые изначально были разработаны для модульных номеров, таких как шифрование Эль-Гамаля и алгоритм цифровой подписи.

Считается, что проблема дискретного логарифма гораздо сложнее, когда она применяется к точкам на эллиптической кривой. Это побуждает переключаться с чисел по модулю p на точки на эллиптической кривой. Также эквивалентный уровень безопасности может быть получен с помощью более коротких ключей, если мы используем варианты на основе эллиптических кривых.

Более короткие ключи дают два преимущества:

  • Простота управления ключами
  • Эффективные вычисления

Эти преимущества делают варианты схемы шифрования на основе эллиптических кривых весьма привлекательными для приложений, где вычислительные ресурсы ограничены.

Схемы RSA и Эль-Гамаля — Сравнение

Давайте кратко сравним схемы RSA и Эль-Гамаля по различным аспектам.

Ключ шифрования — это… Что такое Ключ шифрования?


Ключ шифрования

«…1.3. Ключ шифрования — уникальные данные, используемые при зашифровании и расшифровании сообщения…»

Источник:

«Положение о порядке направления в банк решения налогового органа о приостановлении операций по счетам налогоплательщика-организации в банке или решения об отмене приостановления операций по счетам налогоплательщика-организации в банке в электронном виде через Банк России» (утв. Банком России 09.10.2008 N 322-П) (вместе с «Порядком использования средств криптографической защиты информации при направлении в банки (филиалы банков) решений в электронном виде», «Порядком обеспечения информационной безопасности при использовании средств криптографической защиты информации для целей направления в банки (филиалы банков) решений в электронном виде», «Требованиями к форматам зашифрованных пакетов, извещений, подтверждений, квитанций, уведомлений») (Зарегистрировано в Минюсте РФ 07.11.2008 N 12589)

Официальная терминология. Академик.ру. 2012.

  • Ключ проверки электронной подписи
  • Ключ электронной подписи

Смотреть что такое «Ключ шифрования» в других словарях:

  • ключ (шифрования) — Конкретное секретное состояние некоторых параметров алгоритма криптографического преобразования информации, обеспечивающее выбор одного преобразования из совокупности всевозможных для данного алгоритма преобразований. [Домарев В.В. Безопасность… …   Справочник технического переводчика

  • ключ шифрования — — [http://www.rfcmd.ru/glossword/1.8/index.php?a=index d=23] Тематики защита информации EN encryption key …   Справочник технического переводчика

  • ключ шифрования паролей — КШП Ключ шифрования паролей используется для дополнительного шифрования информации о пользовательских паролях в операционной системе Windows NT 4.0. [[http://www.rfcmd.ru/glossword/1.8/index.php?a=index d=23]] Тематики защита информации Синонимы… …   Справочник технического переводчика

  • ключ шифрования других ключей — КШК главный ключ — [[http://www.rfcmd.ru/glossword/1.8/index.php?a=index d=23]] Тематики защита информации Синонимы КШКглавный ключ EN key encrypting keyкек …   Справочник технического переводчика

  • ключ шифрования, определяемый пользователем — ключ пользователя — [Л.Г.Суменко. Англо русский словарь по информационным технологиям. М.: ГП ЦНИИС, 2003.] Тематики информационные технологии в целом Синонимы ключ пользователя EN user defined key …   Справочник технического переводчика

  • ключ шифрования MIKEY — (МСЭ Т Н.235.7). [http://www.iks media.ru/glossary/index.html?glossid=2400324] Тематики электросвязь, основные понятия EN MIKEY encryption keyMe …   Справочник технического переводчика

  • ключ шифрования данных — КШД — [http://www.rfcmd.ru/glossword/1.8/index.php?a=index d=23] Тематики защита информации Синонимы КШД EN data enciphering keyDEK …   Справочник технического переводчика

  • ключ шифрования содержимого — (МСЭ Т Н.235.8). [http://www.iks media.ru/glossary/index.html?glossid=2400324] Тематики электросвязь, основные понятия EN content encryption keyCEK …   Справочник технического переводчика

  • ключ шифрования трафика — (МСЭ Т J.125). [http://www.iks media.ru/glossary/index.html?glossid=2400324] Тематики электросвязь, основные понятия EN traffic encryption keyTEK …   Справочник технического переводчика

  • ключ шифрования-дешифрования для компьютера — — [http://www.rfcmd.ru/glossword/1.8/index.php?a=index d=23] Тематики защита информации EN computer key …   Справочник технического переводчика

определение, особенности и виды алгоритмов

Идея шифрования с открытым ключом впервые была представлена в Стэнфордском университете в 1976 году М. Хеллманом, Р. Меркле и У. Диффи.

Двумя типами алгоритмов PKC являются: RSA — аббревиатура, получившая название в честь изобретателей: Rivest, Shamir and Adelman и DSA (Digital Signature Algorithm). Шифрование PKC эволюционировало для удовлетворения растущих безопасных коммуникационных потребностей многих секторов и отраслей промышленности, особенно военного направления. В отличие от криптографии с симметричным ключом, шифрование с открытым ключом — это относительно новая концепция.

Этапы возникновения криптосистем

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

Этапы процесса создания:

  • 1977 год. Изобретен RSA группой программистов Р. Ривест, А. Шамир и Л. Адлеман.
  • 1978 год. Создан МакЭлис из-за проблем декодирования для кодов Goppa.
  • 1979 год. Вышел Рабин, основанный на проблеме факторинга и связанный с RSA.
  • 1984 год. Издан Chor-Rivest.
  • 1985 год. Вышел Elgamal на основе дискретного логарифма.

Другие асимметричные криптосистемы:

  1. Эллиптический метод на основе эллиптических кривых, напоминающий Elgamal.
  2. Merkle / Hellman — на основе задачи о рюкзаке LUC, как и RSA, образует последовательность Лукаса.
  3. MNLN — такой же, как RSA.

Принцип шифрования, преимущества и недостатки

Чтобы понять принцип асимметричного шифрования, нужно всегда помнить, что имеете дело не только с одним ключом, а с двумя. Шифрование с открытым ключом начинается с публикации открытого ключа. Публикацию можно сделать, например, через сервер, а также по почте. Пользователю не нужно передавать его по безопасному пути, каждый может завладеть открытым ключом. Часто даже желательно, чтобы он распространялся глобально, чтобы гарантировать, что никакой другой открытый ключ не распространяется под ложными именами.

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

Такие криптосистемы применяются для шифрования данных открытым ключом, аутентификации и целостности. Известными примерами, основанными на асимметричных методах, являются OpenPGP или S/MIME, а также криптографические протоколы, такие как SSH, SSL/TLS и даже https основаны на асимметричных криптосистемах.

Преимущества:

  1. Относительно высокая безопасность.
  2. Не требуется столько ключей, как в симметричном методе шифрования, тем самым меньше усилий для создания секретности.
  3. Отсутствие проблемы с передачей ключей.
  4. Возможность аутентификации с помощью цифровых подписей.

Недостатками систем шифрования с открытым ключом являются:

  1. Алгоритмы работают очень медленно: примерно в 10 000 раз медленнее симметричных.
  2. Большая требуемая длина ключа.
  3. Проблемы с несколькими получателями, когда сообщение должно быть дополнительно зашифровано.
  4. Средства защиты гибридных процедур.
  5. Риск безопасности, доступный для каждого открытого ключа, также является недостатком систем шифрования с открытым ключом.

Асимметричная криптография

PKC также известен как шифрование с открытым ключом, асимметричное шифрование, асимметричная криптография, асимметричный шифр, асимметричное шифрование ключей и шифрование Diffie-Hellman. PKC — это криптографический алгоритм и компонент криптосистемы, реализованный различными интернет-стандартами, включая безопасность транспортного уровня (TLS), Pretty Good Privacy (PGP), GNU Privacy Guard (GPG), Secure Socket Layer (SSL) и протокол передачи гипертекста (HTTP).

PKC обеспечивает безопасную связь через небезопасный канал, который позволяет считывать сообщение только предполагаемым получателем. Например, A использует открытый ключ B для шифрования сообщения, которое может быть расшифровано с использованием уникального частного ключа B.

PKC поддерживает конфиденциальность электронной почты и обеспечивает безопасность связи, когда сообщения находятся в пути или хранятся на почтовых серверах. PKC также является компонентом DSA, используемым для аутентификации секретного ключа, который может быть проверен любым лицом, имеющим разрешенный доступ к открытым ключам. Таким образом, PKC облегчает конфиденциальность, целостность данных и аутентификацию, которые формируют параметры ключевой информации (IA).

PKC медленнее, чем методы криптографии секретного ключа (или симметричной криптографии), из-за высоких вычислительных требований. Это явный недостаток систем шифрования с открытым ключом. В отличие от симметричной криптографии, PKC использует фиксированный размер буфера, в зависимости от конкретных и малых объемов данных, которые могут быть зашифрованы и не привязаны в потоках. Поскольку используется широкий диапазон возможных ключей шифрования, PKC является более надежным и менее восприимчивым к попыткам нарушения безопасности.

Метод открытого ключа

Для шифрования и дешифрования используются разные ключи. Это свойство, которое устанавливает схему, отличную от симметричного шифрования. Каждый приемник обладает уникальным ключом дешифрования, обычно называемым закрытым.

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

Алгоритм шифрования с открытым ключом RSA достаточно сложный, чтобы запретить злоумышленнику выводить открытый текст из зашифрованного текста и ключа шифрования общего доступа.

Генерация пары RSA

Каждый человек или сторона, желающая участвовать в общении с использованием криптографии, генерирует сразу пару вариантов, а именно открытый и закрытый ключ шифрования. Процесс описан ниже:

  1. Генерировать модуль RSA (n).
  2. Подбирают два простых числа p и q.
  3. Находят производный номер e. Число e должно быть больше 1 и меньше (p — 1) (q — 1). Для e и (p — 1) (q — 1) не должно быть общего фактора, кроме 1.
  4. Выполняют шифрование с помощью открытого ключа.
  5. Пара чисел (n, e) формирует открытый ключ RSA. Хотя n является частью открытого ключа, трудности с факторизацией такого числа обеспечивают, что злоумышленник не может найти за конечное время два простых числа (p & q), используемых для получения n. Это понимание является основой RSA.

Создание секретного ключа состоит в следующем. Частный ключ d вычисляется из p, q и e. Для заданных n и e существует единственное число d. Число d является инверсией e по модулю (p — 1) (q — 1). Это означает, что d — это число меньше (p — 1) (q — 1), но такое, что при умножении на e оно равно 1 по модулю (p — 1) (q — 1). Это соотношение написано математически следующим образом:

ed = 1 mod (p − 1)(q − 1).

Расширенный евклидовый алгоритм принимает p, q и e в качестве входных данных и дает d в качестве вывода. Ниже приведен пример создания пары RSA Key. Для удобства понимания простые числа p & q, взятые здесь, являются небольшими значениями. Практически эти значения должны быть очень значимыми.

Алгоритм вычисления:

  1. Пусть два простых числа равны p = 7 и q = 13. Таким образом, модуль n = pq = 7 x 13 = 91.
  2. Выбирают e = 5, что является допустимым выбором, так как нет числа, которое является общим фактором 5 и (p — 1) (q — 1) = 6 × 12 = 72, за исключением 1. Пара чисел (n, e) = (91, 5) формирует открытый ключ и может быть доступна всем, кому нужно отправить зашифрованные сообщения. Вход p = 7, q = 13 и e = 5. Выход будет равен d = 29.
  3. Убеждаются, что вычисленный d правильный — de = 29 × 5 = 145 = 1 mod 72.
  4. Следовательно, открытый ключ — это (91, 5) и закрытые ключи (91, 29).

Шифрование и дешифрование

Далее процесс шифрования и дешифрования является относительно простым и легко вычисляемым. Интересно, что RSA напрямую не работает со строками битов, как в случае симметричного метода. Он работает с числами по модулю n. Следовательно, необходимо представить открытый текст, как ряд чисел, меньших n.

Шифрование RSA:

  1. Предположим, что отправитель хочет отправить текстовое сообщение кому-то, открытый ключ которого (n, e).
  2. Затем отправитель представляет открытый текст как серию чисел меньше n.
  3. Зашифровать первый открытый текст P, который является номером по модулю n. Процесс шифрования — это простой математический шаг, C = Pe mod n.

Другими словами, зашифрованный текст C равен открытому тексту P, умноженному на него e раз, а затем уменьшенному по модулю n. Это означает, что C также меньше n. Возвращаясь к примеру генерации ключей с открытым текстом P = 10, получаем шифрованный текст: C = 105 mod 91.

Расшифровка RSA:

  1. Процесс дешифрования для RSA также очень прост. Предположим, что получатель пары ключей (n, e) получил текст C.
  2. Получатель поднимает значение C для ключа d. Результат по модулю n будет открытым текстом P: Plaintext = Cd mod n.
  3. Возвращаемся снова к численному примеру, шифрованный текст C = 82 будет дешифрован до числа 10 с использованием закрытого ключа 29: Plaintext = 8229 mod 91 = 10.

Безопасность RSA зависит от сильных сторон двух отдельных функций. Криптосистема RSA является самой популярной криптосистемой открытого ключа, основанной на практической сложности факторизации очень больших чисел.

Функция шифрования — считается однонаправленной функцией преобразования открытого текста в зашифрованный текст и может быть отменена только с помощью секретного ключа d. Трудность определения открытого и закрытого ключа шифрования RSA эквивалентна факторизации модуля n. Таким образом, злоумышленник не может использовать знание открытого ключа RSA для определения секретного ключа RSA, если только он не может определить n. Это также односторонняя функция, переход от значений p & q к модулю n легко, но обратное не представляется возможным.

Если любая из этих двух функций будет не односторонней, то RSA нарушается. Фактически, если технология факторинга эффективно разработана, то RSA больше не будет в безопасности. Сила шифрования RSA резко снижается против атак, если число p и q не являются простыми числами или выбранный открытый ключ e является небольшим числом.

Криптосистема ElGamal

Наряду с RSA, существуют и другие криптосистемы с открытым ключом. Многие из них основаны на разных версиях проблемы дискретного логарифма.

Криптосистема ElGamal, называемая вариантом эллиптической кривой, также основана на задаче дискретного логарифма. Она извлекает силу защиты из предположения, что дискретные логарифмы не могут быть найдены в практическом временном интервале для заданного числа, тогда как обратная операция мощности может быть рассчитана эффективно.

Например, простая версия ElGamal, которая работает с числами modulo p. В случае вариантов эллиптической кривой метод основан на совершенно разных системах исчисления. Каждый пользователь криптосистемы ElGamal генерирует пару ключей следующим образом:

  1. Выбор большого простого числа p. Обычно выбирается простое число от 1024 до 2048 бит.
  2. Выбор генераторного элемента g. Это число должно быть от 1 до p — 1.
  3. Он является генератором мультипликативной группы целых чисел по модулю р. Это означает, что для любого целого m co-prime с p существует целое число k такое, что g k = a mod n. Например, 3 является генератором группы 5 (Z 5 = {1, 2, 3, 4}).

N

3 n

3 n mod 5

1

3

3

2

9

4

3

27

2

4

81

1

Выбор секретного ключа. Частным ключом x является любое число, большее 1 и меньше, чем (p-1). Вычисление части открытого ключа. Значение y вычисляется по параметрам p, g и закрытому ключу x следующим образом:

y = gx mod p.

Получение открытого ключа. Открытый ключ ElGamal состоит из трех параметров (p, g, y).Предположим, например, что p = 17 и g = 6. Можно утверждать, что 6 является генератором группы Z 17. Закрытый ключ x может быть любым числом больше 1 и меньше 71, поэтому выбирают x = 5. Затем значение y вычисляется следующим образом:

y = 65 mod 17 = 7.

Таким образом, закрытый ключ равен 62, а открытый ключ — (17, 6, 7).

Эллиптическая кривая ECC

Эллиптическая кривая криптографии (ECC) — это термин, используемый для описания набора криптографических инструментов и протоколов, безопасность которых основана на специальных версиях проблемы дискретного логарифма. Он не использует числа modulo p. ECC основан на наборах чисел, связанных с математическими объектами, называемыми эллиптическими кривыми. Существуют правила для добавления и вычисления кратных этих чисел, как и для чисел по модулю p.

ECC включает в себя варианты многих криптографических схем, которые изначально были разработаны для модульных чисел, таких как шифрование ElGamal, алгоритмы шифрования с открытым ключом и цифровой подписи. Считается, что задача дискретного логарифма намного сложнее применительно к точкам на эллиптической кривой.

Это вызывает переход от чисел по модулю «p» к точкам на эллиптической кривой. Также эквивалентный уровень безопасности может быть получен с более короткими ключами, если используют варианты с эллиптической кривой. Более короткие клавиши приводят к двум преимуществам шифрования информации открытым ключом:

  1. Простота управления ключами.
  2. Эффективное вычисление.

Эти преимущества делают варианты схемы шифрования на основе эллиптической кривой очень привлекательными для приложений, где ограничены вычислительные ресурсы. Можно быстро сравнить схемы RSA и ElGamal по различным аспектам.

RSA

ElGamal

Более эффективный для шифрования.

Более эффективный для дешифрования.

Менее эффективный для дешифрования.

Более эффективный для дешифрования.

Для определенного уровня безопасности в RSA требуются длинные ключи.

Для того же уровня безопасности требуются очень короткие ключи.

Метод широко используется.

Новый метод и пока не очень популярный на рынке.

Протокол Secure Sockets Layer (SSL)

Интернет-трафик, который передает информацию через промежуточные компьютеры, может быть перехвачен третьей стороной:

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

Олицетворение может иметь две формы:

  1. Подмена. Человек может притворяться кем-то другим.
  2. Искажение. Человек или организация могут исказить себя. Например, названный сайт может претендовать на роль в онлайн-магазине мебели, когда он действительно получает платежи по кредитным картам, но никогда не отправляет какие-либо товары.

Криптография с открытым ключом обеспечивает защиту от интернет-атак.

Алгоритм шифрования и его преимущества безопасности

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

Поскольку открытые ключи должны быть разделены, но слишком велики, чтобы их легко запоминать, они хранятся в цифровых сертификатах для безопасной транспортировки и совместного использования. Частные ключи не используются совместно, они просто хранятся в программном обеспечении или операционной системе, которую используют, или на аппаратном обеспечении, например, токене USB, аппаратном обеспечении, содержащем драйверы, которые позволяют использовать его с программным обеспечением или операционной системой.

Цифровые сертификаты выдаются организациями, известными как центры сертификации (ЦС). Основными бизнес-приложениями для криптографии с открытым ключом являются:

  1. Цифровые подписи — контент цифровой подписи с закрытым ключом пользователя проверяется открытым ключом пользователя.
  2. Шифрование — содержимое зашифровывается с помощью открытого ключа и может быть расшифровано только с помощью частного ключа пользователя.

Предполагая, что частный ключ пользователя не был скомпрометирован, шифрование данных и сообщений обеспечивает следующие преимущества безопасности:

  1. Конфиденциальность — поскольку контент зашифрован открытым ключом пользователя, его можно дешифровать только с помощью частного ключа, гарантируя, что только предполагаемый получатель может расшифровать и просмотреть содержимое.
  2. Целостность — часть процесса дешифрования включает проверку того, что содержимое исходного зашифрованного сообщения и новое расшифрованное соответствие, поэтому даже малейшее изменение исходного содержимого приведет к сбою процесса.

Инфраструктура открытого инструмента

Инфраструктура открытого ключа (PKI) является фоновой кибербезопасностью и мерой, которая описывается как совокупность правил, политик и процедур, необходимых для создания, управления, распределения, использования, хранения и отзыва цифровых сертификатов.

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

Хотя можно легко шифровать сообщения без PKI, пользователь не можете легко проверить, с кем он общается. Другими словами, инфраструктура PKI помогает ему аутентифицировать или проверять личность, с которой он общается.

Типичная экосистема PKI включает следующие ключевые компоненты:

  1. Политика сертификации — это спецификация безопасности, которая определяет структуру и иерархию экосистемы PKI, а также политики, связанные с управлением ключами, безопасным хранением, обработкой, аннулированием.
  2. Корневой центр сертификации (CA) отвечает за аутентификацию идентичностей в системе.
  3. Промежуточный ЦС сертифицирован корневым ЦС для конкретных целей, определенных политикой сертификата.
  4. Цифровые сертификаты обычно выдаются и подписываются центрами сертификации.
  5. База данных сертификатов хранит их записи.
  6. Служба аннулирования — это серверы, на которых публикуются обновленные списки отзыва сертификатов (CRL) или Online Certificate Status Protocol (OCSP), которые используют CRL и отвечают на проверки отзыва для устройств, которые сами не могут обрабатывать CRL.

Таким образом, асимметричные криптосистемы используются для шифрования, аутентификации и целостности. Если у злоумышленника отсутствует сертификат открытого ключа шифрования, он никогда не сможет воспользоваться секретными данными. Известными примерами, основанными на асимметричных методах, являются OpenPGP или S/MIME. Но также криптографические протоколы, такие как SSH, SSL/TLS или даже https, основаны на асимметричных криптосистемах.

Шифрование с открытым ключом — это… Что такое Шифрование с открытым ключом?

Криптографическая система с открытым ключом (или Асимметричное шифрование, Асимметричный шифр) — система шифрования и/или электронной цифровой подписи (ЭЦП), при которой открытый ключ передаётся по открытому (то есть незащищённому, доступному для наблюдения) каналу, и используется для проверки ЭЦП и для шифрования сообщения. Для генерации ЭЦП и для расшифрования сообщения используется секретный ключ. [1] Криптографические системы с открытым ключом в настоящее время широко применяются в различных сетевых протоколах, в частности, в протоколах SSL (лежащих в основе SSH. Также используется в S/MIME.

Идея криптосистемы с открытым ключом

Идея криптографии с открытым ключом очень тесно связана с идеей односторонних функций, то есть таких функций f(x), что по известному x довольно просто найти значение f(x), тогда как определение x из f(x) сложно в смысле теории.

Но сама односторонняя функция бесполезна в применении: ею можно зашифровать сообщение, но расшифровать нельзя. Поэтому криптография с открытым ключом использует односторонние функции с лазейкой. Лазейка — это некий секрет, который помогает расшифровать. То есть существует такой y, что зная f(x), можно вычислить x. К примеру, если разобрать часы на множество составных частей, то очень сложно собрать вновь работающие часы. Но если есть инструкция по сборке (лазейка), то можно легко решить эту проблему.

Понять идеи и методы криптографии с открытым ключом помогает следующий пример — хранение паролей в компьютере. Каждый пользователь в сети имеет свой пароль. При входе, он указывает имя и вводит секретный пароль. Но если хранить пароль на диске компьютера, то кто-нибудь его может считать (особенно легко это сделать администратору этого компьютера) и получить доступ к секретной информации. Для решения задачи используется односторонняя функция. При создании секретного пароля в компьютере сохраняется не сам пароль, а результат вычисления функции от этого пароля и имени пользователя. Например, пользователь Алиса придумала пароль «Гладиолус». При сохранении этих данных вычисляется результат функции f(АЛИСАГЛАДИОЛУС), пусть результатом будет строка РОМАШКА, которая и будет сохранена в системе. В результате файл паролей примет следующий вид:

Имя f(имя_пароль)
АЛИСА РОМАШКА
БОБ НАРЦИСС

Вход в систему теперь выглядит так:

Имя: АЛИСА
Пароль: ГЛАДИОЛУС

Когда Алиса вводит «секретный» пароль, компьютер проверяет, даёт или нет функция, применяемая к АЛИСАГЛАДИОЛУС, правильный результат РОМАШКА, хранящийся на диске компьютера. Стоит изменить хотя бы одну букву в имени или в пароле, и результат функции будет совершенно другим. «Секретный» пароль не хранится в компьютере ни в каком виде. Файл паролей может быть теперь просмотрен другими пользователями без потери секретности, так как функция необратимая.

В предыдущем примере используется односторонняя функция без лазейки, поскольку не требуется по зашифрованному сообщению получить исходное. В следующем примере рассматривается схема с возможностью восстановить исходное сообщение с помощью «лазейки», то есть труднодоступной информации. Для шифрования текста можно взять большой абонентский справочник, состоящий из нескольких толстых томов (по нему очень легко найти номер любого жителя города, но почти невозможно по известному номеру найти абонента). Для каждой буквы из шифруемого сообщения выбирается имя, начинающееся на ту же букву. Таким образом букве ставится в соответствие номер телефона абонента. Отправляемое сообщение, например «КОРОБКА», будет зашифровано следующим образом:

Сообщение Выбранное имя Криптотекст
К Королёв 5643452
О Орехов 3572651
Р Рузаева 4673956
O Осипов 3517289
Б Батурин 7755628
К Кирсанова 1235267
А Арсеньева 8492746

Криптотекстом будет являться цепочка номеров, записанных в порядке их выбора в справочнике. Чтобы затруднить расшифровку, следует выбирать случайные имена, начинающиеся на нужную букву. Таким образом исходное сообщение может быть зашифровано множеством различных списков номеров (криптотекстов).

Примеры таких криптотекстов:

Криптотекст 1 Криптотекст 2 Криптотекст 3
1235267 5643452 1235267
3572651 3517289 3517289
4673956 4673956 4673956
3517289 3572651 3572651
7755628 7755628 7755628
5643452 1235267 5643452
8492746 8492746 8492746

Чтобы расшифровать текст, надо иметь справочник, составленный согласно возрастанию номеров. Этот справочник является лазейкой (секрет, который помогает получить начальный текст), известной только легальным пользователям. Не имея на руках копии справочника, криптоаналитик затратит очень много времени на расшифровку.[2]

Схема шифрования с открытым ключом

Пусть K — пространство ключей, а e и d — ключи шифрования и расшифрования соответственно. Ee — функция шифрования для произвольного ключа eK, такая что:

Ee(m) = c

Здесь cC, где C — пространство шифротекстов, а mM, где M — пространство сообщений.

Dd — функция расшифрования, с помощью которой можно найти исходное сообщение m, зная шифротекст c :

Dd(c) = m

{Ee: eK} — набор шифрования, а {Dd: dK} — соответствующий набор для расшифрования. Каждая пара (E,D) имеет свойство: зная Ee, невозможно решить уравнение Ee(m) = c, то есть для данного произвольного шифротекста cC, невозможно найти сообщение mM. Это значит, что по данному e невозможно определить соответствующий ключ расшифрования d. Ee является односторонней функцией, а d — лазейкой.[3]

Ниже показана схема передачи информации лицом А лицу В. Они могут быть как физическими лицами, так и организациями и так далее. Но для более лёгкого восприятия принято участников передачи отождествлять с людьми, чаще всего именуемых Алиса и Боб. Участника, который стремится перехватить и расшифровать сообщения Алисы и Боба, чаще всего называют Евой.

  1. Боб выбирает пару (e,d) и шлёт ключ шифрования e (открытый ключ) Алисе по открытому каналу, а ключ расшифрования d (закрытый ключ) защищён и секретен (он не должен передаваться по открытому каналу, либо его подлинность должна быть гарантирована некоторым сертифицирующим органом).
  2. Чтобы послать сообщение m Бобу, Алиса применяет функцию шифрования, определённую открытым ключом e: Ee(m) = c, c — полученный шифротекст.
  3. Боб расшифровывает шифротекст c, применяя обратное преобразование Dd, однозначно определённое значением d.

Научная основа

Начало асимметричным шифрам было положено в работе «Новые направления в современной криптографии» Уитфилда Диффи и Мартина Хеллмана, опубликованной в 1976 году. Находясь под влиянием работы Ральфа Меркле (Ralph Merkle) о распространении открытого ключа, они предложили метод получения секретных ключей, используя открытый канал. Этот метод экспоненциального обмена ключей, который стал известен как обмен ключами Диффи-Хеллмана, был первым опубликованным практичным методом для установления разделения секретного ключа между заверенными пользователями канала. В 2002 году Хеллман предложил называть данный алгоритм «Диффи — Хеллмана — Меркле», признавая вклад Меркле в изобретение криптографии с открытым ключом. Эта же схема была разработана Малькольмом Вильямсоном в 1970-х, но держалась в секрете до 1997 года. Метод Меркле по распространению открытого ключа был изобретён в 1974 году и опубликован в 1978, его также называют загадкой Меркле.

В 1977 году учёными Рональдом Райвестом (Ronald Linn Rivest), Ади Шамиром (Adi Shamir) и Леонардом Адлеманом (Leonard Adleman) из Массачусетского Технологического Института (MIT) был разработан алгоритм шифрования, основанный на проблеме о разложении на множители. Система была названа по первым буквам их фамилий. Эта же система была изобретена Клиффордом Коксом (Clifford Cocks) в 1973 году, работавшим в центре правительственной связи (GCHQ). Но эта работа хранилась лишь во внутренних документах центра, поэтому о её существовании было не известно до 1977 года.

Вообще, в основу известных асимметричных криптосистем кладётся одна из сложных математических проблем, которая позволяет строить односторонние функции и функции-лазейки. Например, криптосистемы Меркля — Хеллмана и Хора — Ривеста опираются на так называемую задачу об укладке рюкзака.

Основные принципы построения криптосистем с открытым ключом

  1. Начинаем с трудной задачи P. Она должна решаться сложно в смысле теории: нет алгоритма, с помощью которого можно было бы перебрать все варианты решения задачи P за полиномиальное время относительно размера задачи.
  2. Можно выделить легкую подзадачу P‘ из P. Она должна решаться за полиномиальное время, лучше, если за линейное.
  3. «Перетасовываем и взбалтываем» P‘, чтобы получить задачу P», совершенно не похожую на первоначальную. Задача P», по крайней мере, должна выглядеть как оригинальная труднорешаемая задача P.
  4. P» открывается с описанием, как она может быть использована в роли ключа зашифрования. Как из P» получить P‘, держится в секрете как секретная лазейка.
  5. Криптосистема организована так, что алгоритмы расшифрования для легального пользователя и криптоаналитика существенно различны. В то время как первый решает P» задачу, второй использует секретную лазейку и решает P‘ задачу.

Криптография с несколькими открытыми ключами

  • В следующем примере показана схема, в которой Алиса шифрует сообщение так, что только Боб может прочитать его, и наоборот, Боб шифрует сообщение так, что только Алиса может расшифровать его.

Пусть есть 3 ключа KA, KB, KC, распределенные так, как показано в таблице.

Лицо Ключ
Алиса KA
Боб KB
Кэрол KC
Дэйв KA, KB
Эллен KB, KC
Франк KA, KC

Тогда Алиса может зашифровать сообщение ключом KA, а Эллен расшифровать ключами KB, KC, Кэрол — ключом KC, а Дэйв расшифровать ключами KA, KB. Если Дэйв зашифрует сообщение ключом KA, то сообщение сможет прочитать Эллен, если ключом KB, то его сможет прочитать Франк, если же обоими ключами KA и KB, то сообщение прочитает Кэрол. По аналогии действуют и другие участники. Таким образом, если используется одно подмножество ключей для шифрования, то для расшифрования требуются оставшиеся ключи множества. Такую схему можно использовать для n ключей.

Шифруется ключом Расшифровывается ключом
KB и KC KA
KA и KC KB
KA и KB KC
KC KA, KB
KA KB, KC
KB KA, KC
  • Теперь можно посылать сообщения группам агентов, не зная заранее состав группы.

Рассмотрим для начала множество, состоящее из трех агентов: Алисы, Боба и Кэрол. Алисе выдаются ключи KA и KB, Бобу — KB и KC, Кэрол — KA и KC. Теперь, если отправляемое сообщение зашифровано ключом KC, то его сможет прочитать только Алиса, последовательно применяя ключи KA и KB. Если нужно отправить сообщение Бобу, сообщение шифруется ключом KA, Кэрол — ключом KB. Если нужно отправить сообщение и Алисе и Кэрол, то для шифрования используются ключи KB и KC.

Преимущество этой схемы заключается в том, что для её реализации нужно только одно сообщение и n ключей (в схеме с n агентами). Если передаются индивидуальные сообщения, то есть используются отдельные ключи для каждого агента (всего n ключей) и каждого сообщения, то для передачи сообщений всем различным подмножествам требуется 2n − 2 ключей.

Недостатком такой схемы является то, что необходимо также широковещательно передавать подмножество агентов (список имён может быть внушительным), которым нужно передать сообщение. Иначе каждому из них придется перебирать все комбинации ключей в поисках подходящей. Также агентам придется хранить немалый объём информации о ключах.[4]

Криптоанализ алгоритмов с открытым ключом

Казалось бы, что криптосистема с открытым ключом — идеальная система, не требующая безопасного канала для передачи ключа шифрования. Это подразумевало бы, что два легальных пользователя могли бы общаться по открытому каналу, не встречаясь, чтобы обменяться ключами. К сожалению, это не так. Рисунок иллюстрирует, как Ева, выполняющая роль активного перехватчика, может захватить систему (расшифровать сообщение, предназначенное Бобу) без взламывания системы шифрования.

В этой модели Ева перехватывает открытый ключ e, посланный Бобом Алисе. Затем создает пару ключей e’ и d’, «маскируется» под Боба, посылая Алисе открытый ключ e’, который, как думает Алиса, открытый ключ, посланный ей Бобом. Ева перехватывает зашифрованные сообщения от Алисы к Бобу, расшифровывает их с помощью секретного ключа d’, заново зашифровывает открытым ключом e Боба и отправляет сообщение Бобу. Таким образом, никто из участников не догадывается, что есть третье лицо, которое может как просто перехватить сообщение m, так и подменить его на ложное сообщение m‘. Это подчеркивает необходимость аутентификации открытых ключей. Для этого обычно используют сертификаты. Распределённое управление ключами в [5]

Еще одна форма атаки — вычисление закрытого ключа, зная открытый (рисунок ниже). Криптоаналитик знает алгоритм шифрования Ee, анализируя его, пытается найти Dd. Этот процесс упрощается, если криптоаналитик перехватил несколько криптотекстов с, посланных лицом A лицу B.

Большинство криптосистем с открытым ключом основаны на проблеме факторизации больших чисел. К примеру,

Год Число десятичных разрядов
в разложенном числе
Во сколько раз сложнее разложить
на множители 512-битовое число
1983 71 > 20 000 000
1985 80 > 2 000 000
1988 90 250 000
1989 100 30 000
1993 120 500
1994 129 100

Также задачу разложения потенциально можно решить с помощью Алгоритма Шора при использовании достаточно мощного квантового компьютера.

Для многих методов несимметричного шифрования криптостойкость, полученная в результате криптоанализа, существенно отличается от величин, заявляемых разработчиками алгоритмов на основании теоретических оценок. Поэтому во многих странах вопрос применения алгоритмов шифрования данных находится в поле законодательного регулирования. В частности, в России к использованию в государственных и коммерческих организациях разрешены только те программные средства шифрования данных, которые прошли государственную сертификацию в административных органах, в частности, в ФСБ, ФСТЭК.[6]

Особенности системы

Применение

Алгоритмы криптосистемы с открытым ключом можно использовать[7]

  • Как самостоятельные средства для защиты передаваемой и хранимой информации
  • Как средства распределения ключей. Обычно с помощью алгоритмов криптосистем с открытым ключом распределяют ключи, малые по объёму. А саму передачу больших информационных потоков осуществляют с помощью других алгоритмов.
  • Как средства аутентификации пользователей.

Преимущества

  • Преимущество асимметричных шифров перед симметричными шифрами состоит в отсутствии необходимости предварительной передачи секретного ключа по надёжному каналу.
  • В симметричной криптографии ключ держится в секрете для обеих сторон, а в асимметричной криптосистеме только один секретный.
  • При симметричном шифровании необходимо обновлять ключ после каждого факта передачи, тогда как в асимметричных криптосистемах пару (E,D) можно не менять значительное время.
  • В больших сетях число ключей в асимметричной криптосистеме значительно меньше, чем в симметричной.

Недостатки

  • Преимущество алгоритма симметричного шифрования над несимметричным заключается в том, что в первый относительно легко внести изменения.
  • Хотя сообщения надежно шифруются, но «засвечиваются» получатель и отправитель самим фактом пересылки шифрованного сообщения.[8]
  • Несимметричные алгоритмы используют более длинные ключи, чем симметричные. Ниже приведена таблица, сопоставляющая длину ключа симметричного алгоритма с длиной ключа несимметричного алгоритма с аналогичной криптостойкостью:
Длина симметричного ключа, бит Длина несимметричного ключа, бит
56 384
64 512
80 768
112 1792
128 2304
  • Процесс шифрования-расшифрования с использованием пары ключей проходит на два-три порядка медленнее, чем шифрование-расшифрование того же текста симметричным алгоритмом.
  • В чистом виде асимметричные криптосистемы требуют существенно больших вычислительных ресурсов, потому на практике используются в сочетании с другими алгоритмами.
    1. Для ЭЦП сообщение предварительно подвергается хешированию, а с помощью асимметричного ключа подписывается лишь относительно небольшой результат хеш-функции.
    2. Для шифрования они используются в форме гибридных криптосистем, где большие объёмы данных шифруются симметричным шифром на сеансовом ключе, а с помощью асимметричного шифра передаётся только сам сеансовый ключ.

Виды симметричных шифров

блочные шифры
потоковые шифры

Виды асимметричных шифров

Примечания

  1. Брюс Шнайер. Прикладная криптография. 2-е изд. Протоколы, алгоритмы и исходные тексты на языке Си. Глава 2.7 Цифровые подписи и шифрование.
  2. Саломаа А. Криптография с открытым ключом. с. 74-75
  3. Handbook of Applied Cryptography, Menezes A.J., Oorschot P.C., Vanstone S.A. С. 25—26
  4. Брюс Шнайер. Прикладная криптография. 2-е изд. Протоколы, алгоритмы и сиходные тексты на языке Си. Глава 3.5
  5. PGP. Распределение ключей..
  6. Принцип достаточной защиты.
  7. Баричев С. Криптография без секретов. с. 20
  8. См. например: Yoshiharu Maeno, Yukio Ohsawa. Discovering covert node in networked organization

См. также

Литература

  • Саломаа А. Криптография с открытым ключом. — М.: Мир, 1995. — 318 с. — ISBN 5-03-001991-X
  • A. J. Menezes, P. C. van Oorschot, S. A. Vanstone. Handbook of Applied Cryptography. — 1997. — ISBN 0-8493-8523-7
  • Шнайер Б. Прикладная криптография. Протоколы, алгоритмы, исходные тексты на языке Си = Applied Cryptography. Protocols, Algorithms and Source Code in C. — М.: Триумф, 2002. — 816 с. — 3000 экз. — ISBN 5-89392-055-4

Wikimedia Foundation. 2010.

Ключ шифрования

— это … Что такое ключ шифрования?

  • Ключ шифрования — [англ.], Schlüssel… Universal-Lexikon

  • ключ шифрования — Уникальный и секретный номер, используемый для шифрования данных с целью защиты от несанкционированного доступа … Сетевой словарь

  • ключ шифрования — raktų šifravimo raktas statusas T sritis informatika apibrėžtis ↑ Raktas (3), naudojamas kitiems raktams apsaugoti.Tai dažniausiai ↑ simetrinis raktas, kuriuo šifruojami ↑ Individualieji, ↑ grupiniai, ↑ seanso ar kt. рактай. atitikmenys: англ. ключ…… Enciklopedinis kompiuterijos žodynas

  • ключ шифрования — raktų šifravimo raktas statusas T sritis informatika apibrėžtis ↑ Raktas (3), naudojamas kitiems raktams apsaugoti. Tai dažniausiai ↑ simetrinis raktas, kuriuo šifruojami ↑ Individualieji, ↑ grupiniai, ↑ seanso ar kt. рактай. atitikmenys: англ. ключ…… Enciklopedinis kompiuterijos žodynas

  • Противоречие с ключом шифрования AACS — Спор вокруг криптографического ключа AACS возник в апреле 2007 года, когда Американская ассоциация кинематографистов и Администратор лицензирования системы расширенного доступа, LLC (AACS LA) начали рассылать письма с требованиями [1] веб-сайтам …… Википедия

  • Ключ шифрования данных — [dt.»Datenschlüssel«], Schlüssel, Datenverschlüsselung… Universal-Lexikon

  • Key Wrap — конструкции представляют собой класс симметричных алгоритмов шифрования, предназначенных для инкапсуляции (шифрования) материала криптографических ключей. Алгоритмы Key Wrap предназначены для таких приложений, как (а) защита ключей в ненадежном хранилище или (б)…… Wikipedia

  • Ключ (криптография) — В криптографии ключ — это часть информации (параметр), которая определяет функциональный результат криптографического алгоритма или шифра.Без ключа алгоритм не дал бы полезного результата. В шифровании ключ определяет…… Wikipedia

  • шифрование — Процесс кодирования информации с целью защитить ее от несанкционированного доступа, особенно во время передачи. Там стих этого процесса известен как дешифрование. Обычно используются две основные схемы шифрования: • Частный…… Сетевой словарь

  • шифрование — encrypt en‧crypt [ɪnˈkrɪpt] глагол [переходный] ВЫЧИСЛЕНИЕ для записи информации в форме кода, особенно для предотвращения использования ее некоторыми людьми: • Программа шифрует ваш пароль, когда вы используете программное обеспечение в первый раз.…… Финансовые и коммерческие условия

  • Генератор ключей — Генератор ключей используется во многих криптографических протоколах для генерации последовательности с множеством псевдослучайных характеристик. Эта последовательность используется как ключ шифрования на одном конце связи и как ключ дешифрования на другом. Примеры: линейный…… Wikipedia

  • .Криптография

    — Шифрование и дешифрование с закрытым ключом в Java

    Переполнение стека
    1. Около
    2. Продукты
    3. Для команд
    1. Переполнение стека Общественные вопросы и ответы
    2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
    3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
    4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
    5. Реклама Обратитесь к разработчикам и технологам со всего мира
    .

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *