logo
Коды и шифры

Проверка подлинности сообщения и удостоверение подлинности подписи

Как уже говорилось ранее, эти задачи можно решить с помощью систем с открытым ключом. DES-алгоритм к ним не относится, но алгоритм RSA именно таков. Вспомним, что в системе с открытым ключом у каждого пользователя есть открытый ключ E (для зашифрования), и секретный ключ D (для расшифрования). Допустим, пользователь X хочет послать сообщение M пользователю Y, а EX,DX,EY и DY - это ключи зашифрования и расшифрования пользователей X и Y соответственно.

Как может

  1. Y удостовериться в том, что сообщение действительно прислано пользователем X?

  2. X быть уверен в том, что Y не сможет утверждать, что получил от него другое сообщение (например, M')?

  3. Y быть уверен в том, что X не сможет утверждать, что посылал ему другое сообщение (например, M'')?

Есть несколько путей решения этих проблем, каждый из которых подразумевает использование некоторых (или всех) ключей зашифрования и расшифрования. Один из возможных способов следующий:

  1. X записывает перед сообщением M данные, содержащие дату и время, а также информацию о самом себе. При этом из M получается сообщение большей длины (например, M1), которое выглядит приблизительно так:

M1: "Меня зовут X, сегодня 13.06.2001, время 18:27. M",

где M - текст исходного сообщения.

  1. X расшифровывает M1 на своем секретном ключе DX и получает шифрованное сообщение DX(M1), которое он посылает пользователю Y.

  2. Y применяет к шифрованному сообщению открытый ключ зашифрования EX пользователя X и, таким образом, восстанавливает расширенное сообщение M1, поскольку

EX(DX(M1))= M1.

Теперь

  1. Y может быть уверен, что именно X послал сообщение M1, поскольку только X может получить текст DX(M1).

  2. Если Y будет утверждать, что получил другое сообщение, M', то пользователь X предложит пользователю Y предъявить шифрованный текст DX(M'). Y не сможет это сделать, так как ему неизвестен секретный ключ DX пользователя X.

  3. Если X будет утверждать, что посылал пользователю Y другое сообщение, M'', то последний может предъявить шифрованный текст DX(M1) судье, который затем затребует у X его секретный ключ, чтобы удостовериться, действительно ли было послано именно сообщение M1. Так как Y не знает секретного ключа пользователя X, то он не мог сфабриковать шифрованный текст DX(M1). Если X откажется предоставить судье свой секретный ключ, то проиграет дело.

Важно, чтобы расширенное сообщение M1 включало дату и время, иначе оно может быть подменено более ранним сообщением, и проверка пункта (2) в этом случае будет несостоятельной.