Рубрика #мюсли
Так как я теперь эксперт-криптограф, расскажу вам то, что мне было непонятно про elliptic curves или эллиптические кривые — и криптографию вокруг них. Везде объясняют все какими-то окольными путями и опускают крайне важные моменты реализации. Но я расскажу вам все четко и по пунктам.
1. Эллиптические кривые — это тип функции, которая выглядит похоже на ту, что на картинке. Эллипса тут нет — но эллиптическая кривая есть. Есть разные функции, в блохчейнах используются тоже разные. В Эфире и Бетховенах используется secp256k1 (это просто наименование y^2 = x^3 + 7. Да-да, вот такая простая.
2. На этих кривых можно выбрать любую точку и мгновенно подставить x и y этой точки под уравнение выше, тем самым, проверив, является ли эта точка валидной на кривой. Если уравнение складывается — то все ок. Если нет — то точка вне кривой, а значит, невалидна.
3. Есть две выдуманные математические операции с точками на эллиптических кривых: "сложение с собой" и "умножение на целое число". Выдуманные, потому что это не сложение, на самом деле, просто называется так для удобства. Есть и другие операции, но сосредоточимся на этих.
Сложение с собой — это мы просто берем тангенс с точкой (линия, которая пересекает график там, где точка, слегка "касаясь" этого графика), смотрим, где еще прямая пересеклась с графиком, зеркалим по отношению к горизонтальной оси вниз или вверх — и вот вам результат сложения точки самой с собой. Складываем один раз — получаем точку, умноженную на два. Еще раз — на три. Еще раз — на четыре. Вот вам и умножение на целое число.
Стоит заметить, что это операция достаточно быстрая и простая.
4. Мы можем очень быстро подтвердить, что какая-то точка является валидной точкой в функции. Мы достаточно быстро можем умножить эту точку на целое число и получить новую точку-результат. И этот результат мы тоже можем очень быстро проверить на валидность в функции.
Однако, имея точку результата и точку начала, мы не можем достаточно быстро определить, на какое число начальную точку умножили, чтобы получить результат. Но, имея это число, мы можем быстро подтвердить, что оно правильное (умножив начальную точку на это число и сверив с результатом).
5. Одно из самых главных свойств: предположим, что P — это наша начальная точка, а R — результатная точка; так же предположим, что nP — это P, умноженная на целое число n; это число n можно разложить на a * b; следовательно, можно записать уравнение, как (ab)P = R; но весь прикол в том, что это уравнение равноценно a(bP) = b(aP) = R.
Этому есть математическое формальное доказательство, которое можно почитать, но сейчас вам нужно просто поверить мне на слово.
6. Учитывая все вышесказанное, предположим, что у нас есть Алиса и Боб, которые хотят по незащищенному каналу связи обменяться секретным ключом, которым после будут шифровать свои сообщения. В этом время, Оскар слушает их — и слышит абсолютно все, что они говорят.
Алиса и Боб публично заявляют, что будут использовать общую точку P как начальную, Оскар это тоже слышит. Точка валидная для выбранной функции эллиптической кривой.
Теперь Алиса придумывает себе целое число a (любое) — и умножает точку P на это самое целое число, получая точку aP. Эту точку aP Алиса передает Бобу. Оскар знает точку aP, но не знает число a.
Боб тоже придумывает себе целое число b (любое) — и умножает точку P на это число, получая точку bP. Боб передает Алисе точку bP. Оскар знает точку bP, но не знает число b.
Теперь Оскар знает точки P, aP и bP; но не знает числа a и b — и не может их получить из начальной точки P и точек-результатов умножения aP и bP.
Помните, что (ab)P = a(bP) = b(aP) = R? Точка R — это и есть наш секретный ключ, который теперь известен Алисе и Бобу, но который не может получить Оскар. Чаще всего, используется только координата на оси x в качестве секретного ключа шифрования.