# Генерация цифровой подписи

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

![](https://848603364-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M8KXOaV6cnD0fWD-Iyl%2F-M8LJGYIikPsTJ0oUeLD%2F-M8LePmpHQCxVn7zaUMo%2Fimage.png?alt=media\&token=57e1f26f-7b35-4be7-b9cb-6b9e43374dcf)

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

![](https://848603364-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M8KXOaV6cnD0fWD-Iyl%2F-M8LJGYIikPsTJ0oUeLD%2F-M8LeZtMUFEdYslcDB31%2Fimage.png?alt=media\&token=2261f15f-ad79-4945-98c2-bbfa7fe55c1f)

Разделить ключи можно разными способами, самый простой и логичный — представить ключ в виде строки и разделить на равные части. Например, разделим ключ на две части: левую сохраним на компьютере, а правую на телефоне. В таком случае, имея удобный способ передачи части (без сохранения) в момент создания подписи, мы обеспечим базовый принцип разделения. Момент объединения компонентов — это слабая (уязвимая) точка, так как при этом происходит разглашение секрета. Очевидно, что если злоумышленник получит доступ к компонентам ключа в момент их объединения, то ему не составит труда заполучить полный ключ и дальше представиться для сети его владельцем.

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

![](https://848603364-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M8KXOaV6cnD0fWD-Iyl%2F-M8LJGYIikPsTJ0oUeLD%2F-M8Lek80ZmJgwFlCJutF%2Fimage.png?alt=media\&token=3135cc80-d9cf-444d-92fd-6bbc6a0fee27)

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