Криптография с временными ключами

Криптография с временными ключами — разновидность криптографии с открытым ключом, в которой ключевые пары генерируются и привязываются к коротким промежуткам времени (интервалам), а не к отдельным лицам или организациям, а криптографические данные связываются между собой во времени. В такой системе приватные ключи используются лишь кратковременно и затем уничтожаются, поэтому иногда её называют «одноразовой криптографией». Данные, зашифрованные приватным ключом, ассоциированным с определённым временным интервалом, могут быть однозначно связаны с этим интервалом, что делает криптографию с временными ключами особенно полезной для цифрового доверенного временного штампования. Криптография с временными ключами была изобретена в 1997 году Майклом Дойлом (Michael Doyle) из компании Eolas и впоследствии вошла в стандарт ANSI ASC X9.95 для доверенного временного штампования.

Криптография с открытым ключом и с временными ключами

Обе системы, и с открытым ключом, и с временными ключами, могут использоваться для создания цифровых подписей, свидетельствующих о неизменности данных с момента их подписания. Но на этом сходства заканчиваются. В традиционной криптографии с открытым ключом ключевая пара обычно закрепляется за физическим лицом, сервером или организацией. Данные, подписанные приватным ключом, утверждают, что подпись создана указанным источником. Такие ключевые пары используются годами, поэтому приватный ключ должен тщательно защищаться от раскрытия; любой, кто получит к нему доступ, сможет подделать цифровую подпись владельца.

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

Обеспечение целостности данных

В системах с временными ключами источник времени должен быть единым стандартом, понятным всем отправителям и получателям. Поскольку локальные системные часы могут быть изменены пользователем, они не используются в качестве источника времени. Вместо этого данные подписываются с использованием значения времени, полученного из Universal Coordinated Time (UTC) с точностью до миллисекунды, в соответствии со стандартом ANSI ASC X9.95 для доверенного временного штампования[1]. Каждый раз, когда временной интервал завершается, создаётся новая пара открытого и приватного ключей, а приватный ключ предыдущего интервала используется для цифровой сертификации нового открытого ключа, после чего уничтожается. Такой механизм цепочечной передачи ключей является непосредственным предшественником технологии блокчейн.

Для нового интервала значения времени берутся из доверенного внешнего источника, а отдельные моменты могут быть интерполированы внутри интервала с помощью поправки на внутренний таймер системы. Если доверенный источник времени недоступен или выходит за пределы заданных допусков, временные приватные ключи не создаются; в этом случае цепочка интервалов прерывается, и формируется новая цепочка, а их связь обеспечивается через сетевые архивы. Это позволяет всем серверам проверять целостность защищённых данных во времени, независимо от количества перезапусков цепочки. Временные метки начала цепочки и каждого интервала можно связать между собой, формируя непрерывную последовательность открытых ключей, позволяющую:

  • Однозначно установить момент подписания данных.
  • Определить точное состояние данных на момент подписания.

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

Перекрёстная сертификация

undefined

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

Отдельная цепочка интервалов с временными ключами может быть перекрёстно сертифицирована с другими цепочками и экземплярами серверов. При перекрёстной сертификации сервер А подписывает цепочку интервалов сервера B, при этом подписываемыми данными выступают определения интервалов цепочки. Фактически приватные ключи B используются для подписи открытых ключей A. На иллюстрации экземпляр сервера сертифицируется двумя другими серверами (синим и оранжевым). Перекрёстная сертификация требует, чтобы временные метки совпадали в пределах заданных пользователем допусков, обычно это несколько сотен миллисекунд.

Сетевые архивы

Вместе с интервалами данные о перекрёстной сертификации хранятся в сетевом архиве. Внутри сети с временными ключами архив представляет собой логическую базу данных, которую можно хранить и дублировать на любом сервере, обеспечивая тем самым проверку данных, подписанных и проштампованных временными ключами. Карта доступных архивов вносится в каждую создаваемую в системе цифровую подпись. После завершения перекрёстных сертификаций в начале интервала карта архивов обновляется и публикуется для всех серверов в сети[2].

Проверка

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

Криптография с временными ключами была изобретена в 1997 году Майклом Д. Дойлом (Michael D. Doyle) из компании Eolas Technologies Inc. в рамках проекта «Видимый эмбрион» (Visible Embryo Project)[3][4][5] и затем приобрела практическое применение в продуктах ProofSpace, Inc. Позже она была стандартизирована в качестве национального стандарта в ANSI ASC X9.95 для доверенного временного штампования. Криптография с временными ключами считается предшественником свойств прямой секретности (forward secrecy) и составила основу для технологии цепочек подписей, используемых в блокчейн-системе Bitcoin.

Примечания