Попытаюсь изложить свое понимание на уровне новичка простыми словами.
SHA-256 принадлежит к семейству алгоритмов SHA-2 (Secure Hash Algorithm Version 2). Я вот до этого дня не знала, что у алгоритмов есть семейства. По-моему это прикольно :)
SHA-256 однонаправленная хеш-функция. Заглянув в википедию, я выяснила, что однонаправленная (или односторонняя) функция легко принимает значение (input) и выдает результат вычисления (output), но трудно работает в обратную сторону - имея результат (output) и функцию, очень сложно выяснить вводное значение. По логике вещей, однонаправленную функцию, вообще-то можно называть трудно обратимой или необратимой.
Используется алгоритм SHA-256 Биткоином и другими криптовалютами для:
- верификации транзакций
- вычислении "доказательства выполнения работы" (proof-of-work)
- "подтверждения доли»" (proof-of-stake)
С этими proof-of-work и proof-of-stake мне еще только предстоит разобраться, но звучит солидно :)
Информации не так много как хотелось бы, иллюстраций тоже, поэтому я зарисовала схему из лекции курса курс Bitcoin and Cryptocurrency Technologies :)
Как работает SHA-256 (смотри рисунок):
- У вас есть сообщение с любой информацией в виде строки (input)
- SHA-256 разбивает это сообщение на блоки по 512 бит
- Чтобы все блоки были по 512 бит, в последний, который выходит частично незаполненным, потому что прямо четко и ровно на 512 бит обычно не делится, - алгоритм добавляет в блок недостающее до 512 количество нулевых бит (zero bits). Этот процесс называется - padding.
- Начиная работу с алгоритмом тебе необходимо в стандартной документации еще взять некое значение IV (initialization vector), который в данном алгоритме должен быть 256 бит
- Итак, алгоритм берет этот IV (256 бит) добавляет к нему первый блок (512 бит) и получившиеся 768 бит передает в функцию с
- Функция c делает свое магическое дело - шифрует и сжимает (молодец какая!), а потом выдает на выходе 256-битный кусочек, к которому добавляется следующий блок из твоего сообщения 512 бит и снова шифруется
- Этот процесс происходит столько раз, сколько у тебя блоков по 512 бит
- На выходе получаешь свой надежный Hash 256 бит
Теорема: если функция с collision-free, то и SHA-256 тоже collision-free
Все четенько получается, кроме этого паддинга, который есть местом потенциальной уязвимости, насколько я поняла. Когда узнаю больше про эту угрозу - напишу :)
Пока разбиралась, я посмотрела лекцию, английскую и русскую википедию, порылась в ютюбе, погуглила на русском и на английском, всякие форумы прочла, порылась на quora, но информации мало.
Интересность встретилась - кто-то в попытке объяснить надежность этого алгоритма прибегает к метафоре - что процесс шифрования похож на процесс смешивания красок, когда не видно и непонятно какие краски были в "сообщении" и какие добавились в процессе шифрования.
Еще абзац не по теме
Как-то мне довелось закончить курсы Фен-Шуй, кстати, очень понравилось мне это философское осмысление пространства. Так вот, негативная энергия в фен-шуй называется “ша” (прямо как наша функция). А места скопления негативной энергии, например накопившаяся грязная посуда в раковине, называются “блоки ша” (прямо как в нашей функции). Это все :)
Подписывайтесь на мой дневник!
пример: Bitcoin - генезис блок SHA256
Block 0: https://steemit.com/genesisblock/@magnebit/step-by-step-calculation-of-bitcoin-gensis-block
класс, спасбо!
Отличный пост, как обычно!
Спасибо, мне приятно :)