Так что, может быть, лучше объяснить это немного.
При использовании криптографии с эллиптической кривой закрытый ключ - это просто число (большой).
открытый ключ на самом деле является точкой на кривой (как на самом деле x, y).
Вы должны сгенерировать закрытый ключ first , чтобы получить соответствующий открытый ключкоордината, как вы, возможно, знаете, функция люка в ECC основывается на том, что не может выводить закрытый ключ из точки открытого ключа.
Открытый ключ получается путем скалярного умножениязакрытого ключа с помощью специальной точки на кривой, называемой точкой генератора.
Итак ... при этом единственный способ начать с открытого ключа, который вы знаете, - это иметь (в какой-то моментпредыдущий), сгенерировал и сохранил закрытый ключ, вычислил соответствующий открытый ключ с использованием стандартных методов (который, к вашему сведению, на самом деле представляет собой процесс, в котором один скаляр умножает число закрытого ключа на известный генератор (специальная общеизвестная точка x, y) на кривой, а затем сохраните открытый ключ для будущего использования.
И последнее, что вы делаете здесь (вы, возможно, уже знаете), это ECDH (Эллиптическая кривая Диффи-Хеллмана), генерирующая общий секрет с использованием протокола Диффи-Хеллмана.
В этом протоколе обычно каждый раз используются пары эфемерных (временных) ключей. Таким образом, у каждого сеанса есть новый ключ сеанса, что означает, что прямая секретность не основана на одном частном ключе.
Кроме того, помните, что производный секрет ECDH не готов к использованию в качестве симметричного ключа. Он должен быть передан через HKDF (функция вывода ключа) как случайный секрет! = Единообразный секрет, подходящий для криптографического использования.
Любые вопросы, пожалуйста, задавайте ниже, хорошее объяснение того, почему важно использовать эфемерные ключи в ECDH здесь от @ Maarten.
Пожалуйста, дайте мне знать, если это не ясно.