Какой это лучше? Предварительно генерировать асимметричные ключи или генерировать их в режиме реального времени? - PullRequest
2 голосов
/ 30 июля 2010

Предполагая, что хранилище ключей безопасно и нужно обслуживать около миллиона ключей, лучше генерировать асимметричные ключи в режиме реального времени или лучше генерировать связку ключей и хранить их для использования по мере необходимости?

Редактировать 1: Под реальным временем я подразумеваю генерацию пары ключей, когда пользователь регистрируется впервые, с тех пор эта пара ключей используется для всей связи с пользователем.

1 Ответ

1 голос
/ 30 июля 2010

Асимметричные ключи имеют открытую и закрытую части; открытая часть используется для выполнения операции, которая дополняет ту, которая выполняется с закрытой частью (например, вы подписываете с помощью закрытого ключа и проверяете подпись с помощью открытого ключа; или вы шифруете данные с помощью открытого ключа, и расшифровываете его с закрытым ключом). Смысл асимметричных ключей заключается в том, что частная и открытая части могут быть известны различным объектам; а именно, что публичная часть, ну, в общем, публичная (все это знают), а приватная часть остается приватной.

Следовательно, генерация асимметричного ключа «в режиме реального времени» в большинстве ситуаций не имеет смысла: что придает частному ключу некоторую ценность, так это то, что открытый ключ уже известен какой-либо другой стороне.

Можно все еще представить себе некоторые ситуации, в которых генерация асимметричных ключей в режиме реального времени может быть полезной. Например, соединения SSL, использующие один из наборов шифров «эфемерный Диффи-Хеллман»: ключи DH, которые можно назвать «асимметричными», генерируются для каждого соединения, тогда как открытая часть подписывается сервер (с другим асимметричным ключом, который не генерируется на лету: открытый ключ - это тот, который указан в сертификате сервера), а затем отправляется подключающемуся клиенту. В такой ситуации предварительная генерация пар ключей DH и их хранение могут рассматриваться как своего рода оптимизация, но плохая, поскольку генерация пар ключей DH является очень быстрой, а хранение закрытых ключей - сложная и деликатная проблема.

Редактировать: если ваша проблема связана с генерацией ключей при регистрации пользователя, а не с генерацией и хранением ключей заранее: если предположить, что генерация ключей на стороне сервера действительно то, что вам нужно, то стоит заранее сгенерировать и хранить ключи только в качестве оптимизации, если генерация на лету оказывается слишком дорогой для обработки пиков (иногда многие пользователи пытаются зарегистрироваться одновременно). Я предлагаю вам попробовать и убедиться, что проблема действительно существует, прежде чем внедрять «решение», потому что безопасное хранение с закрытым ключом несколько сложно. Генерация ключей RSA довольно быстрая (на базовом ПК вы можете легко генерировать дюжину ключей RSA в секунду), а с помощью криптосистем на основе дискретного журнала (DSA, Diffie-Hellman, El-Gamal) или на основе эллиптической кривой - даже значительно быстрее (например, десять тысяч новых пар ключей EC в секунду, с ПК).

...