четверг, 20 февраля 2020 г.

Криптография Биткоина


Многие считают, что криптография это шифрование, но на самом деле криптография это далеко не только шифрование. И особенно это актуально для Биткоина и вообще крипты. Ни Биткоин, ни подавляющее большинство других криптопроектов не используют шифрование (Лайтнинг использует, кстати).
С криптографией в Биткоине все просто. Вот полный список криптографических алгоритмов, которые в нем используются:
1. SHA-256
2. RIPEMD-160
3. ECDSA
SHA-256 — это часть стандарта хэширующих функций SHA-2. В него также входят SHA-224, 384 и 512. Хэш-функции это однонаправленные функции, которые проецируют входящие данные на последовательность случайных байт фиксированной длинны. Если другими словами: хэш-функции позволяют создавать уникальный «отпечаток», идентифицирующий какие-то данные. Такие «отпечатки» называются хэшами.
Число в названии алгоритма указывает на длину хэша в битах. Биткоин использует 256 бит как наиболее оптимальное значение по соотношению безопасность/длина/скорость.
К криптографическим хэш-функциям предъявляют следующие требования:
1. Хэши должны быть случайными и должны браться из равномерного распределения.
2. Не должно быть возможности восстановить исходные данные по хэшу.
3. Нельзя найти разные входящие данные, у которых будут одинаковые хэши.
4. Данные, отличающиеся даже совсем незначительно, должны производить совершенно непохожие и несвязанные хэши.
Хэш-функции удобно использовать для идентификации каких либо произвольных данных. В Биткоине SHA-256 используется для:
1. Создания ID блока, который просто является хэшем заголовка блока (в котором содержатся: версия ноды, хэш предыдущего блока, корень дерева транзакций, время добычи блока, сложность майнинга, nonce).
2. Создания ID транзакции — точно так же берётся хэш от параметров транзакции.
3. Создания хэша публичного ключа (но только как один из этапов алгоритма генерации адреса).
Последнее, что тут стоит сказать: для большей надежности Биткоин делает двойное хэширование всех данных. Сначала берётся хэш от исходных данных (блок, транзакция, публичный ключ), а котом берётся хэш от этого хэша. Это позволяет защититься от одной уязвимости, от которой страдают все SHA-2 функции.
RIPEMD160 — это тоже хэш-функция, но попроще. Она производит хэши длиной 160 бит или 20 байт. Единственное, для чего этот алгоритм используется в Биткоине, это создание адреса:
1. Сначала публичный ключ дважды хэшируется SHA-256.
2. Затем один раз — RIPEMD-160.
3. К получившемуся хэшу добавляют версию и чексумму и пропускают через алгоритм Base58, который является копией Base64, но с удаленными символами, которые похожи друг на друга (l, I и т. д.).
Третий шаг нужен только для создания визуально читаемых адресов, в P2PKH-транзакциях он не выполняется, в выход транзакции записывается RIPEMD-160(SHA-256(SHA-256(pubKey))).
ECDSA. Если вы никогда не сталкивались с криптографией, тот этот алгоритм будет для вас настоящим открытием. Как я уже сказал, криптография это далеко не только шифрование — очень важную роль в криптографии играют ещё и алгоритмы аутентификации.
(Аутентификация в широком смысле это проверка подлинности чего-либо. Аутентификация требует предварительного этапа регистрации или идентификации — это справедливо как для веб-приложений, так и для криптотранзакций.)
Криптография делится на две области:
1. Симметричная криптография, в которой все алгоритмы используют только один секретный ключ. Шифрование относится как раз к этой области, но существуют также и симметричные алгоритмы аутентификации.
2. Криптография с открытым ключом, в которой используется пара ключей: приватного (секретного) и публичного. Именно этой области обязаны своим существованием криптовалюты. Именно об этой области криптографии мы будем говорить всегда, когда будем обсуждать криптографические механики.
Криптография с открытым ключом базируется на уравнении вида: a * b = c, где b и c публичны и открыты, но a восстановить очень-очень сложно и дорого.

Комментариев нет:

ad