Один общий секрет против пары ключей
В симметричном шифровании отправитель и получатель используют один и тот же ключ: им шифруют и им же расшифровывают. Это быстро и эффективно, но возникает вопрос, как безопасно передать ключ собеседнику, не рискуя, что его перехватят.
Асимметричное шифрование использует пару ключей. Открытый ключ можно свободно раздавать, им шифруют сообщение или проверяют подпись. Закрытый ключ хранится у владельца и нужен для расшифровки или создания подписи. Знание открытого ключа не позволяет вычислить закрытый.
Скорость и область применения
Симметричные шифры, такие как AES и ChaCha20, работают на порядки быстрее и подходят для больших объёмов данных: файлов, дисков, потоков в сетевых соединениях. Асимметричные алгоритмы, например RSA и схемы на эллиптических кривых, медленнее и применяются для небольших данных: обмена ключами, цифровых подписей, сертификатов.
Поэтому шифровать гигабайтный файл открытым ключом напрямую не имеет смысла: слишком медленно и неудобно.
Ещё одна причина такого разделения: асимметричные операции ограничивают размер данных, которые можно обработать за один раз, а симметричные шифры спокойно работают с потоком любой длины без потери скорости.
Как их сочетают на практике
В защищённых соединениях, например в HTTPS, используется гибридная схема. Сначала стороны с помощью асимметричных методов договариваются о секрете и проверяют подлинность сервера по сертификату. Затем этот общий секрет превращается в симметричный ключ сеанса, которым и шифруются все данные.
Так используются достоинства обоих подходов: удобство распределения ключей от асимметричного и скорость от симметричного. То же самое делают почтовые системы шифрования и защищённые мессенджеры с разными вариациями.
Ограничения каждого подхода
Слабое место симметричного шифрования: распределение и хранение ключа. Если ключ попал не в те руки, защита исчезает, а при большом числе участников число ключей растёт. Слабое место асимметричного: скорость и зависимость от доверия к открытым ключам. Если подменить открытый ключ собеседника, можно оказаться в разговоре с посторонним, поэтому нужны сертификаты и проверка отпечатков.
Общее для обоих: стойкость зависит от правильных реализаций, длины ключа и защиты закрытых данных на устройстве.
Примеры из повседневных программ
Когда вы открываете сайт по защищённому соединению, браузер и сервер за доли секунды договариваются об общем ключе с помощью асимметричных методов, а затем страницы, изображения и формы передаются с симметричным шифрованием. Вы этого не замечаете, но именно так устроена защита большинства современных сервисов.
Шифрованные архивы и диски используют симметричный подход: вы вводите пароль, из него получают ключ, и тот же ключ нужен и для записи, и для чтения. Если пароль забыт, данные восстановить нельзя, что одновременно преимущество и риск.
Подпись документов и проверка подлинности программ работают на асимметричных парах. Автор подписывает отпечаток закрытым ключом, а любой желающий проверяет подпись открытым. Так можно убедиться, что файл не менялся после подписи и исходит от владельца ключа.
Если вы пользуетесь защищённой почтой или мессенджером с шифрованием между участниками, приложения сами создают пары ключей и обмениваются открытыми. Важно сверять отпечатки ключей при особо важных разговорах, чтобы исключить подмену, и хранить закрытые ключи на защищённом устройстве.
Как запомнить и выбрать
Простое правило: для данных, которые вы защищаете сами и храните у себя, например для диска или архива, подходит симметричное шифрование с сильным паролем. Для общения с людьми, с которыми нет общего секрета, и для подтверждения подлинности нужна асимметричная схема.
В большинстве приложений выбирать не приходится: готовые протоколы уже совмещают оба подхода. Ваша задача сводится к защите закрытых ключей и паролей и к проверке, что вы обмениваетесь ключами с нужным человеком.
Резюме: симметричное шифрование быстро и подходит для данных, асимметричное решает задачу обмена ключами и подписи, а вместе они образуют основу защищённых соединений. Вам достаточно беречь закрытые ключи и пароли и убеждаться, что открытый ключ принадлежит нужному собеседнику.
На практике это объясняет, почему при потере закрытого ключа теряется доступ к зашифрованным данным и подписям, поэтому создавайте защищённые резервные копии ключей и храните их отдельно от основного устройства.