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