TGViewer
Из Solidity в AI и дальше Из Solidity в AI и дальше @solidityset · 2.49K subscribers
Post #1279 1.16K
RSA алгоритмы. Часть 2

Алгоритм RSA

Если мы хотим существенно превзойти ECDSA, нам нужно найти другой криптографический алгоритм, позволяющий доказать принадлежность к членству. ECDSA - это фактически новая, более "клевая" версия оригинального алгоритма цифровой подписи RSA. ECDSA опирается на то, что дискретные логарифмы над эллиптическими кривыми являются жесткими (отсюда и название - алгоритм цифровой подписи на эллиптических кривых). RSA (названный по имени его авторов - Ривеста, Шамира и Адлемана) основан на том, что большие целые числа трудно считать. По возрасту RSA был опубликован в 1970-х годах, а ECDSA стал общепринятым в начале 2000-х.

Мы не будем супер подробно разбирать RSA, но некоторые предварительные условия необходимы. Подписывающий выбирает два больших простых числа p и q и перемножает их вместе, чтобы получить n. Этот n - первая часть открытого ключа. Во-вторых, подписывающий выбирает небольшое простое число e (для нашего случая можно зафиксировать 3) и публикует пару (n, e) в качестве открытого ключа. За кулисами подписывающий вычисляет

t = (p - 1) * (q - 1)
d = t^(-1) % n


Число d является закрытым ключом. Если бы кто-то мог разложить n на p и q, то вычисление d было бы простым делом. Но известно, что целочисленная факторизация сложна. Чтобы подписать сообщение, подписывающий хэширует сообщение m, получая h, и возводит h в степень d. То есть,

s = h(m) ^ d % n


Подписант публикует (m, s) как сообщение и подпись. Верификатор хэширует m и возводит его в степень e mod n. Помните, что e и n - это открытый ключ. Если и только если

s == s ^ e % n


то подпись действительна для открытого ключа (n, e). Обратите внимание, что если n очень велико, то вероятность того, что s == s ^ e % n по случайному стечению обстоятельств исчезающе мала. Если равенство подтверждается, то мы знаем, что подпись действительна для открытого ключа. Чтобы сделать это в Ethereum, мы просто подпишем адрес как

s = buyerAddress ^ d % n


и смарт-контракт будет проверять

msg.sender == s ^ e % n


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

На следующей неделе поговорим уже с меньшим количеством математики в постах.

#rsa
  • 👍 6
  • 🤯 1
More from @solidityset
  1. Sep 22, 2026Какой язык программирования учить сейчас? На днях в Твиттере увидел небольшой пост о разви…
  2. Sep 18, 2026Интересная модель Jev Буквально пару дней назад в Твиттере многие начали обсуждение новой…
  3. Sep 14, 2026Графы повсюду Если вы также следите за новостями в мире ИИ, то наверняка уже все чаще встр…
  4. Sep 10, 2026GTA6, Cyberleek, блокчейн и безопасность Увидел несколько постов (тут и тут) про Cyberleek…
  5. Sep 9, 2026Работа с чистой энергией Дисклеймер Сегодня ава и название канала, наконец, поменялись. Я…
  6. Sep 9, 2026Channel name was changed to «Из Solidity в AI и дальше»
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →