Как работает цифровая подпись и почему её невозможно подделать
Подпись на бумаге легко скопировать, а цифровую — нет, даже если у вас есть само сообщение и подпись к нему. Разбираемся, как математика гарантирует, что документ подписали именно вы и его никто не менял.
Это перевёрнутая криптография: здесь запирает закрытый ключ, а отпирает — открытый, и именно поэтому подпись доказывает авторство.
Цифровая подпись отвечает сразу на два вопроса: «это точно ты?» и «текст не подменили?». Бумажная подпись — только на первый, да и то плохо.
Когда вы устанавливаете обновление на телефон, он проверяет цифровую подпись — иначе любой мог бы подсунуть вредонос под видом апдейта. Когда подписываете договор онлайн, подпись юридически значима. Как несколько чисел заменяют автограф и оказываются надёжнее его?
Два ключа, но наоборот
В шифровании с открытым ключом любой шифрует вашим открытым ключом, а расшифровываете только вы закрытым. Цифровая подпись переворачивает схему: подписываете вы своим закрытым ключом, а проверить подпись может кто угодно с помощью вашего открытого ключа.
Логика безупречна: открытый ключ известен всем, поэтому проверить подпись способен любой. А создать её способен лишь владелец закрытого ключа — то есть вы. Это и есть доказательство авторства.
Сначала — отпечаток сообщения
Подписывать целый документ накладно, поэтому сначала из него вычисляют хеш — короткий «отпечаток» фиксированной длины. Хорошая хеш-функция обладает двумя ключевыми свойствами:
- изменишь хоть один символ в тексте — отпечаток меняется до неузнаваемости;
- по отпечатку невозможно восстановить исходный текст или подобрать другой текст с тем же отпечатком.
Этот отпечаток и подписывается закрытым ключом. Схематично:
$$\text{подпись} = \text{знак}_{\text{закрытый}}(\text{hash}(\text{сообщение}))$$
Почему хеш так важен
Хеш связывает подпись с конкретным содержанием. Если злоумышленник изменит хоть запятую, отпечаток станет другим, и подпись к новому тексту не подойдёт. Проверка мгновенно покажет подделку.
Как проверяют подпись
Получатель делает две вещи. Во-первых, сам вычисляет хеш полученного документа. Во-вторых, открытым ключом «разворачивает» подпись и достаёт хеш, который заложил отправитель. Если оба хеша совпали — подпись подлинная и текст цел:
| Сравнение хешей | Вывод |
| Совпали | Подпись верна, текст не менялся |
| Не совпали | Текст подменён или подпись чужая |
Почему подделка обречена
Чтобы подделать подпись, нужен ваш закрытый ключ — а он есть только у вас. Подобрать его из открытого ключа невозможно по тем же причинам, что и в RSA: вычислительная задача неподъёмна. А подменить текст без переподписания нельзя, потому что хеш сразу выдаст несоответствие. Подделка требует одновременно угадать ключ и найти коллизию хеша — двойная невозможность.
Сертификаты: а как доверять самому ключу
Тут возникает тонкий вопрос. Подпись доказывает, что её поставил владелец конкретного открытого ключа. Но откуда вам знать, что этот ключ действительно принадлежит вашему банку, а не самозванцу? Эту брешь закрывают сертификаты. Доверенный центр сертификации сам подписывает открытый ключ банка своей подписью, ручаясь: «да, этот ключ настоящий». Получается цепочка доверия — ваш браузер верит центру, центр ручается за банк. Так одна и та же математика подписи выстраивается в многоэтажную систему, где каждый уровень подтверждает подлинность следующего, и в основании лежат несколько ключей, которым доверяют по умолчанию.
Где вы доверяете подписям
Обновления операционных систем, защищённые сайты, банковские документы, блокчейн-транзакции — везде цифровые подписи молча подтверждают: «это действительно от того, кто заявлен, и ничего не тронуто». Бумажный автограф рядом с этим выглядит наивно: его копируют за минуту, а математическую подпись — никогда. Подпись из чисел оказалась честнее подписи из чернил.