Ответ
Цифровая подпись — это криптографический механизм, используемый для проверки подлинности и целостности цифровых данных. Она является аналогом рукописной подписи и обеспечивает три ключевых свойства безопасности:
- Аутентификация: Гарантирует, что сообщение было создано именно владельцем закрытого ключа.
- Целостность: Подтверждает, что данные не были изменены после подписания.
- Неотрекаемость (Non-repudiation): Отправитель не может впоследствии отказаться от факта подписания документа.
Как это работает?
- Создание подписи: Хеш сообщения шифруется с помощью закрытого ключа отправителя. Результат и есть цифровая подпись.
- Проверка подписи: Получатель расшифровывает подпись с помощью открытого ключа отправителя, получая исходный хеш. Затем он самостоятельно вычисляет хеш полученного сообщения. Если хеши совпадают, подпись считается действительной.
Пример на Python с библиотекой cryptography
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding, rsa
from cryptography.exceptions import InvalidSignature
# 1. Генерация пары ключей (в реальном приложении ключи хранятся)
private_key = rsa.generate_private_key(
public_exponent=65537,
key_size=2048
)
public_key = private_key.public_key()
message = b"This is a very important message that needs to be signed."
# 2. Создание подписи с использованием закрытого ключа
signature = private_key.sign(
message,
padding.PSS(
mgf=padding.MGF1(hashes.SHA256()),
salt_length=padding.PSS.MAX_LENGTH
),
hashes.SHA256()
)
# 3. Проверка подписи с использованием открытого ключа
try:
public_key.verify(
signature,
message,
padding.PSS(
mgf=padding.MGF1(hashes.SHA256()),
salt_length=padding.PSS.MAX_LENGTH
),
hashes.SHA256()
)
print("Подпись верна. Целостность и аутентичность подтверждены.")
except InvalidSignature:
print("Подпись недействительна! Данные были изменены или ключ неверный.")