Можем ли мы после создания пары ключей выбрать, какой ключ будет закрытым или открытым?
Нет, в общем, не можем. Для большинства асимметричные криптосистемы закрытый и открытый ключи — это совершенно разные типы объектов (например, один может быть числом, а другой — точкой на эллиптической кривой), и нет возможности использовать один вместо другого.
Однако есть одно заметное квазиисключение: Криптосистема RSA имеет открытый и закрытый ключи, которые возможно представлен как объект того же типа (модуль и показатель степени) и используется в одной и той же математической операции (модульное возведение в степень) для шифрования и расшифровки сообщений. Так, в теории, можно сгенерировать "симметричную" пару ключей RSA (как описано в этом вопросе), а затем выберите, какую половину опубликовать, а какую оставить в тайне.
На практике, однако, даже генерация ключей RSA не работает таким образом по нескольким причинам:
Более эффективно выбрать открытый показатель как фиксированное небольшое число с простой двоичной формой. (Обычный выбор: 3 и 65537 = 2.16 + 1.) Это безопасно для открытого ключа, но, очевидно, было бы катастрофически небезопасным для закрытого ключа (поскольку показатель степени — единственная секретная часть закрытого ключа — модуль одинаков для обеих половин ключа). ключевая пара).
Существуют способы ускорить операции с закрытым ключом RSA (например, расшифровку или подписание), используя дополнительные математические приемы, такие как Китайская теорема об остатках, но для этого требуется дополнительная информация о том, как были сгенерированы ключи (например, секретные простые множители модуля). Хранение этой дополнительной информации вместе с закрытым ключом не является проблемой, и наиболее часто используемые форматы закрытого ключа RSA действительно делают это. Но его публикация позволит любому взломать пару ключей и расшифровать и/или подделать сообщения.
Результатом всего этого является то, что на практике можно вычислить открытый ключ RSA из закрытого ключа, но не наоборот. Как говорится в связанном ответе (который я написал) на security.SE, теоретически возможно сгенерировать безопасный закрытый ключ RSA, из которого нельзя вычислить открытый ключ, но для этого потребуется использовать как нестандартный алгоритм генерации ключа, так и нестандартный формат хранения закрытого ключа. И даже если бы проблемы с форматом были решены, не все реализации RSA работали бы с такими приватными ключами (из-за отсутствия упомянутой выше дополнительной информации).
Шифруем или расшифровываем шифротекст с заданным ключом? Это технически правильно так говорить?
Типа, да. Но что мы как правило сделать это сгенерировать случайный ключ для симметричный шифр такие как АЕС, зашифруйте с его помощью открытый текст, а затем зашифруйте ключ AES, используя алгоритм асимметричного шифрования и открытый ключ предполагаемого получателя. А затем мы отправляем и зашифрованный текст AES, и асимметрично зашифрованный ключ AES получателю, который может сначала расшифровать ключ AES, а затем зашифрованный текст.
Основная причина использования таких гибридное шифрование заключается в том, что симметричные шифры, такие как AES, предназначены для быстрого шифрования большого количества данных, а асимметричные системы — нет:
Асимметричное шифрование имеет тенденцию быть относительно медленным — часто в десятки, сотни или тысячи раз медленнее, чем шифрование того же объема данных с помощью быстрого симметричного шифра, такого как AES. Асимметричное дешифрование часто даже медленнее (тогда как дешифрование AES обычно так же быстро, как и шифрование).
Все схемы безопасного асимметричного шифрования создают зашифрованный текст, который длиннее открытого текста, из-за необходимости внесения некоторой случайности в процесс шифрования для предотвращения атак с угадыванием. Некоторые (например, Эль-Гамаль-подобные схемы) удвоит длину открытого текста (после его заполнения до размера блока сообщения). Другие, такие как RSA, требуют заполнения открытого текста в десятки раз по сравнению с исходной длиной. Очевидно, что это нежелательно при шифровании больших объемов данных. В то же время симметричные шифры, такие как AES, обычно добавляют к зашифрованному тексту всего несколько десятков байтов дополнительных данных независимо от его длины (в зависимости от режима работы).
В более общем плане схемы асимметричного шифрования просто не предназначены для шифрования сообщений длиннее нескольких десятков байт или около того (в зависимости от размера ключа и других параметров схемы). Ключ AES подойдет, но не подойдет даже одно сообщение чата — и целая веб-страница, или изображение, или видеопоток. определенно не будет.
(технически то же самое вроде верно для симметричного блочные шифры как и AES: они тоже шифруют данные порциями по несколько десятков байт, а для шифрования длинных сообщений их нужно использовать с подходящим режим работы который применяет шифр к данным блок за блоком. Но существует множество быстрых и доказуемо безопасных режимов работы блочного шифра, которые большинство криптографических программ и аппаратных средств поддерживает «из коробки», тогда как для схем асимметричного шифрования их практически нет. И если вы попытаетесь спроектировать и реализовать его самостоятельно, скорее всего, он не будет ни эффективным, ни безопасным.)
Правильно ли говорить, что:
Имея эту пару ключей, я могу зашифровать сообщение своим закрытым ключом, а затем опубликовать его.То, что любой может расшифровать сообщение с помощью моего открытого ключа, означает, что я зашифровал его своим закрытым ключом, а это значит, что сообщение должно быть создано мной, поскольку только у меня есть свой закрытый ключ. Шифрование данных закрытым ключом отправителя мы называем открытым форматом сообщения, потому что любой, у кого есть копия соответствующего открытого ключа, может расшифровать сообщение.
Нет, не совсем. Закрытый ключ в схеме асимметричного шифрования предназначен для расшифровки, а открытый ключ — для шифрования. Как правило, вы не можете ничего зашифровать с помощью закрытого ключа, так же как вы не можете расшифровать с помощью открытого ключа.
Однако существуют и асимметричные схемы цифровой подписи которые позволяют вам подписать данные с закрытым ключом и проверять подпись открытым ключом, доказывающая, что данные действительно были подписаны закрытой половиной той же пары ключей.
Некоторые схемы цифровой подписи действительно основаны на схемах асимметричного шифрования. На самом деле цифровую подпись можно в некотором общем смысле рассматривать как доказательство с нулевым разглашением того факта, что подписывающая сторона могла расшифровать конкретный зашифрованный текст (обычно полученный из хэш подписываемого сообщения) своим закрытым ключом, используя некоторую асимметричную схему шифрования, тем самым доказывая, что они имели доступ как к сообщению (или, по крайней мере, к его хешу), так и к закрытому ключу.
В частности, криптосистема RSA также может использоваться как часть схемы подписи (например, РСА-ПСС), используя те же открытые и закрытые ключи и те же математические операции (модульное возведение в степень), что и для шифрования RSA. Это (и ранние популярные объяснения криптографии с открытым ключом) является источником распространенного, но вводящего в заблуждение описания подписи (RSA) как «шифрование с помощью закрытого ключа». Технически это не полностью неправильно, по крайней мере, если вы игнорируете все Другие части схемы (хеширование, заполнение и т. д.), за исключением модульного возведения в степень в основе алгоритма RSA.
Но если вы готовы все упростить до такой степени, вы могли бы также отметить, что обе Шифрование и дешифрование RSA (а также проверка подписи и подписи) — это просто модульные возведения в степень, так что с тем же успехом можно сказать, что они все то же самое, и что подпись RSA на самом деле просто расшифровка RSA, примененная к специальному зашифрованному тексту. Что также было бы технически верным в некотором роде и, вероятно, не более (или менее) вводящим в заблуждение, чем описание этого как «шифрование с закрытым ключом».