Учитывая закрытый ключ, действительно ли возможно получить свой открытый ключ?

Тип получателя метода должен быть указателем, если вы хотите, чтобы этот метод изменил состояние получателя.

То есть так же, как вы объявили метод growOld, метод tellDogToGrowOld также должен иметь приемник указателей:

func (owner *Owner) tellDogToGrowOld() {
    owner.dog.growOld()
}

В качестве альтернативы, вы можете сделать поле, хотите изменить указатель, например:

type Owner struct {
    dog *Dog
}

func newOwner(dog *Dog) Owner {
    var owner Owner
    owner.dog = dog

    return owner
}

func (owner Owner) tellDogToGrowOld() {
    owner.dog.growOld()
}
51
задан John 10 January 2011 в 12:48
поделиться

6 ответов

Это зависит от crypto системы.

В RSA мы имеем (цитирование Википедии):

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

Теперь, если у нас есть n и d (закрытый ключ), мы только пропускаем e для открытого ключа. Но e является часто довольно маленьким (меньше чем три цифры), или даже зафиксированный (общая ценность 65537). В этих случаях, получающих открытый ключ, тривиально.

Для Эллиптической кривой Diffie-Hellman закрытый ключ является d и открытым ключом dG (с G также общественность), таким образом, это тривиально также.

34
ответ дан sleske 7 November 2019 в 10:07
поделиться

В ЛЮБОМ открытом ключе crypto система открытый ключ математически связан с закрытым ключом. Это очень просто.

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

Не выполнимо пойти другим путем. Учитывая открытый ключ не легко получить закрытый ключ. Вот почему мы можем безопасно совместно использовать открытые ключи с другими людьми. Если у Вас есть циклы достаточного количества времени/ЦП, Вы могли скот вызывать его, но, вероятно, легче ожидать математического нападения на ключ.

3
ответ дан Adam Hawes 7 November 2019 в 10:07
поделиться

Да с доступом к закрытому ключу открытый ключ может быть сгенерирован

0
ответ дан AnthonyWJones 7 November 2019 в 10:07
поделиться

Это теоретически возможно, но для больших ключей, в вычислительном отношении неосуществимых.

-3
ответ дан Mark Probst 7 November 2019 в 10:07
поделиться

Это зависит от алгоритма, и что Вы подразумеваете под "закрытым ключом".

Закрытые ключи RSA часто хранятся в их "китайской форме" Теоремы Остатка. Например, RSAPrivateKey структура, определенная в № 1 PKCS и снова использованная многими другими crypto стандартами, принимает эту форму. Эта форма включает два секретных числа, часто обозначаемые p и q, из которого вычисляется тотиент. С тотиентом и частной экспонентой, быстро вычисляется общедоступная экспонента.

В любом случае большинство пар ключей RSA использует 65537 в качестве общедоступной экспоненты, и модуль всегда несут как часть закрытого ключа.

9
ответ дан erickson 7 November 2019 в 10:07
поделиться

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

Например, в RSA вы можете создать открытый ключ из закрытого ключа с помощью:

openssl rsa -in private.pem -pubout -out public.pem

Что вводит в заблуждение, так это терминология: "закрытый" key "относится к двум различным концепциям, говорите ли вы о теории или о практической реализации:

  • Теоретический закрытый ключ - это пара (d, n) , который разделяет идеальную симметричную (математическую) связь с (e, n) . Если вы сравниваете их, одно невозможно вычислить из другого.
  • Практический закрытый ключ (например, в реализации openssl) относится к файлу, содержащему (d, n) , но также несколько важных промежуточных значений для скорости декодирования. В дополнение к этому, теоретически «неизвестная» часть открытого ключа e часто фиксируется на общих значениях по соглашению (которым по умолчанию в openssl является 0x10001 , хотя его можно изменить , настоятельно рекомендуется придерживаться только очень конкретных значений ). Таким образом, получение открытого ключа (e, n) из закрытого ключа тривиально по нескольким причинам.
48
ответ дан 7 November 2019 в 10:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: