Кристин Бачиу, Parser
Цифровую подпись можно сравнить с традиционной подписью, и она используется аналогичным образом. Когда мы хотим убедиться, что сообщение или документ были отправлены определенным объектом, для этого можно использовать цифровую подпись. Это гарантирует, что:
- Целостность: сообщение или документ были изменены с момента отправки.
- Подлинность: лицо, предоставившее сообщение или документ, действительно является тем, за кого себя выдает.
- Неотказуемость: организация, подписавшая сообщение, не может отрицать тот факт, что они это сделали.
Хотя цифровая подпись может быть получена с помощью симметричной криптографии, в основном она основана на асимметричной криптографии,известной как криптография с открытым ключом.
Прежде чем что-либо делать, нам нужно сгенерировать пару ключей. Подписавшая сторона создаст эту пару ключей и будет хранить закрытый ключ в секрете, не сообщая его никому другому, а также предоставит открытый ключ верификатор.
Подписание документа
Когда подписывающая сторона хочет отправить документ верификатору, она должна сгенерировать хэш (используя выбранный алгоритм) из сообщения, которое они намереваются отправить, которое будет зашифровано с использованием личного ключ. Цифровая подпись будет состоять из документа, зашифрованного хэша, соответствующего открытого ключа и алгоритма хеширования. Причина шифрования хеша, а не самого документа, заключается в том, что полученный хэш намного короче всего сообщения, что сэкономит время и ресурсы.
Проверка документа
Чтобы проверить подлинность документа, получателю необходимо сгенерировать хэш сообщения по тому же алгоритму, расшифровать полученный хеш с помощью открытого ключа и сравнить его хэш с тем, который был включен в цифровую подпись. Если они совпадают, то цифровая подпись проверена и мы уверены, что только владелец закрытого ключа сможет отправить этот документ.
Пример реализации с использованием Java
В этом простом примере мы будем использовать стандартные функции безопасности Java, но для реальных сценариев рекомендуется использовать библиотеку, которая реализует более широкий набор функций и лучше реализованные алгоритмы, например, Bouncy Castle.
- Прежде всего, нам нужно сгенерировать пару ключей.
public static KeyPair generateKeyPair() выдает Exception {
SecureRandom secureRandom = новый SecureRandom();
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(RSA);
keyPairGenerator.initialize(2048, secureRandom);
вернуть keyPairGenerator.generateKeyPair();
}
Он использует класс secureRandom и алгоритм RSA для генерации открытого и закрытого ключа.
- Затем мы можем использовать закрытый ключ для подписи ввода и создания цифрового сертификата.
public static byte[] createDigitalSignature(byte[] document, PrivateKey privateKey) выдает Exception {
Подпись подписи = Signature.getInstance («SHA256withRSA»);
подпись.initSign (закрытый ключ);
подпись.обновление(документ);
вернуть подпись.знак();
}
- В конце концов, мы можем использовать открытый ключ, который был предоставлен, чтобы проверить, действительно ли документ отправлен ожидаемым объектом.
общедоступная статическая логическая проверка (байт [] документ, байт [] подписьToVerify, ключ PublicKey) выдает исключение {
Подпись подписи = Signature.getInstance («SHA256withRSA»);
подпись.initVerify(ключ);
подпись.обновление(документ);
вернуть подпись.проверить(signatureToVerify);
}
Использование цифрового сертификата для подписи документов
Цифровой сертификат выдается Центром сертификации (ЦС) для проверки личности владельца сертификата. Он содержит открытый ключ, используемый для цифровой подписи, и гарантирует идентичность, связанную с ключом. В частности, это означает, что в процессе цифровой подписи, когда кто-то предоставляет открытый ключ, чтобы проверить, был ли документ подписан первоначальным лицом, он также подтверждает, что открытый ключ принадлежит конкретной организации. CA действует как гарантия.
Мы можем рассматривать цифровую подпись как метод безопасной отправки данных, поскольку они зашифрованы и не могут быть изменены, а цифровой сертификат — это способ проверка и подтверждение личности лица, отправившего данные.