Если вы хотите узнать больше о технологии блокчейн и следить за прогрессом Komodo, подпишитесь на нашу рассылку. Начните свое путешествие по блокчейну с Komodo уже сегодня.
Алгоритм хеширования SHA-256 — что это такое простыми словами и как работает, функции и примеры?
SHA-256 — это алгоритм шифрования с хэш-функцией из семейства SHA-2 (Secure Hash Algorithm). Префикс 256 означает выходной размер 256 бит. Доступны и другие форматы: 224, 384 и 512.
Он был разработан в 2001 году для Агентства национальной безопасности США (АНБ). Он запатентован под патентом США № 6829355 и свободно распространяется под лицензией свободного программного обеспечения (RF).
Метод хэширования SHA-256 используется правительством США и гражданскими агентствами в рамках федеральных стандартов обработки данных для обеспечения их безопасности. Он также используется для генерации хэшей в сети Bitcoin.
Его предшественник (SHA-1) был успешно атакован. В 2011 году Марк Стивенс продемонстрировал возможность атаки с помощью коллизии, а в 2017 году Google опубликовал отчет о ее успешности. Браузеры с тех пор отказались от SSL-сертификатов в пользу SHA-1, а Windows с 2020 года больше не поддерживает зашифрованные подписи этого алгоритма.
В SHA-256 атака с поиском шаблона может вычислить 52 раунда, в то время как атака с коллизией до сих пор смогла взломать 46 из 64 раундов.
Что такое алгоритм хэширования и шифрования sha256 (sha 256 algorithm) ?
Цель хеширования — преобразовать информацию в строку. Функция может принимать данные неограниченного размера, даже 10 мегабайт текста из 1000 книг. Процесс хеширования выполняется в раундах (циклах) — в строку может поместиться любой размер. Однако его нельзя расшифровать снова. Если это удается, то алгоритм автоматически теряет смысл.
Задача шифрования — преобразовать информацию в условно хаотичный набор символов, который может быть расшифрован только с помощью ключа. Зашифрованный 10-мегабайтный файл занимает как минимум столько же места, и в этом заключается главное отличие хэширования: оно преобразует произвольный объем данных в строку символов одинаковой длины.
Биткойн не использует шифрование. Префикс «крипто» в названии «криптовалюта» был присвоен ей только потому, что в алгоритме ее цифровой подписи используются методы, основанные на эллиптических кривых, применяемых в криптографии.
Вместо этого пользователь создает пару ключей — открытый и закрытый ключ. Они математически связаны, и можно утверждать, что невозможно отделить закрытый ключ от открытого ключа, который подтверждает право собственности на BTC.
В блокчейне все транзакции имеют неиспользованные оттоки (UTXO), или, проще говоря, кредиты. Они связаны с адресами Bitcoin и могут быть открыто просмотрены в сети. Если у вас на балансе 1 BTC, у вас есть приватный ключ с открытым ключом этого UTXO, что означает, что вы можете подписать транзакцию, и новый UTXO создается путем передачи права на открытый ключ получателя.
SHA-256 создает строки с наивысшим уровнем безопасности, доступным на сегодняшний день. Достаточно, чтобы они не могли быть расшифрованы путем извлечения закрытых данных из открытого ключа.
Алгоритм отвечает 4 основным требованиям:
- Детерминированный (для каждого входа выход будет одинаковым).
- Уникальный (ни один вход не может привести к такому же выходу).
- (скорость протокола Bitcoin составляет около 140 Мбит/с)
- Необратимый (исходное значение не может быть получено из хэша).
Как работает майнинг на кодировке SHA-256 ?
В Интернете есть сайты, которые преобразуют любой текст с помощью SHA-256. Вы можете попробовать сделать это самостоятельно.
Например, слово «Hello»: 185f8db32271fe25f561a. a518007d1764826381969.
Выходная строка остается неизменной, что отличает хеширование от шифрования. Если другой человек наберет «hello» с другого устройства, он получит ту же строку.
Биткойн использует двойное хеширование. Полученный хэш повторно обрабатывается с использованием SHA-256. Это делается для предотвращения атаки «день рождения», хотя это маловероятно.
Например, вставим хэш, полученный из «Hello»: 185f8db32271fe25f561a. da518007d1764826381969 = 52c87cd40ccfbd78. d4c3684ed60f6513e8d16077e5b8e.
В соответствии с этим принципом осуществляется сбор и обработка ряда данных. Результатом является блокчейн. Цепочка блоков, которые метафорически растут вверх. К нижним блокам нельзя получить доступ или изменить их без разрушения всей структуры сети.
Древо Меркла
Каждая транзакция имеет хэш. Это та же самая строка, извлеченная с помощью функции SHA-256. Иерархические отношения транзакций образуют дерево «родитель-ребенок». Подобно семейному дереву, дерево Меркле хранит данные обо всех предыдущих сделках. Эти данные хранятся тысячами узлов, и если кто-то пытается ввести в сеть поддельный баланс счета или перевод, несоответствие между историческими данными обнаруживается и отбрасывается сетью.
Корень Меркла добавляется к функции в обратном порядке. Например: b7a0c5014ae6ecb. 707a42516e94899073 вместо 37099849e61524. 019efbce6ea4105c0a7b.
Версия клиента
Текущая версия, одобренная сетью. Например: 02000000.
Некоторые строки принимаются в 4-байтовом «little-endian» формате, и это одна из них.
Хэш предыдущего блока
Он связывает блокчейн и гарантирует, что следующий блок будет ссылаться на ранее подтвержденный блок.
Он вставляется в обратном порядке. Например: 05c2ddc616d1b90. 0000000000000000 вместо исходного 000000000000000. 346f13a009b1d616cdd2c50.
Благодаря зеркальному отображению строки алгоритм не теряет ни одной детали. Чем выше значение, тем меньше вероятность того, что сложность будет слишком сложной или слишком простой.
Метка времени (Timestamp)
В формате системы Unix — количество секунд с начала времени (1 января 1970 года, 00:00).
Он принимается сетью, только если число больше медианы временных меток последних 11 блоков и меньше медианы временных меток, возвращенных соединенными узлами (время с поправкой на сеть) + 2 часа.
Биткойн использует беззнаковое целое число для временных меток, поэтому «проблема 2038 года» откладывается еще на 68 лет.
Таргет (Target)
Сложность следующей цели. Пересчет всех блоков 2016 года (около 2 недель). По мере увеличения хэшрейта в сети количество нулей в целевом хэше также увеличивается, поэтому при добыче криптовалюты необходимо перечислить больше хэшей. И наоборот, меньшая готовность участвовать в добыче BTC и проверке блоков снижает сложность и «опускает» цели. Его нельзя менять более 4 раз за цикл.
По количеству нулей можно легко заметить увеличение сложности.
Кроме того, функция вписывается в компактную 4-байтовую форму, например: f2c9749a.
Важно отметить, что алгоритм хэширования SHA-256 никогда не предназначался для защиты от мощных компьютеров. Дискуссия о стойкости ASIC в сетях блокчейн возникла задолго после появления Биткойна.
Криптографические особенности
Поскольку SHA-256 является криптографическим, он предоставляет некоторые криптографические функции и функции безопасности.
- Сгенерированные или вычисленные данные SHA-256 являются односторонними. Это означает, что вернуться к исходным данным через функцию невозможно. Существует исключение, когда можно использовать радужные таблицы или брутфорсинг.
- SHA-256 — это член семейства SHA-2 криптографических хэш-функций, разработанных АНБ.
- SHA-256 является функцией, защищенной от взлома, что означает, что вычисление хэш-значения для одних и тех же данных в разное время приводит к одному и тому же хэш-значению. Если изменится только один бит в данных, хэш-значение будет совсем другим.
- SHA-256 можно использовать при аутентификации по квитированию, поскольку пароль не передается открытым текстом.
- SHA-256 может использоваться в электронных подписях для проверки достоверности и целостности данных.
Создать SHA-256 для заданного текста в Python
В языке программирования Python SHA-256 обеспечивается модулем hashlib.
Мы будем использовать функцию sha256().
Чтобы предоставить буквенно-цифровое число для вычисления хэш-значения, нам нужно закодировать буквенно-цифровое число с помощью функции encode(), как показано ниже.
Вычисленное хэш-значение выводится в шестнадцатеричном формате с помощью функции hexdigest().
Мы видим, что вычислили два хэш-значения для данных.
Эти данные очень похожи друг на друга, так как первый — mysecretpassword, а второй — mysecretpasswrt, причем отличается только последняя буква.
Это полностью меняет вычисленное хэш-значение.
Создать SHA-256 для заданного текста в PowerShell
PowerShell предоставляет библиотеку HashAlgorithms для реализации SHA256.
Мы используем функцию Create() и указываем имя хэш-алгоритма SHA256.
Система. Безопасность Криптография. HashAlgorithm :: Создать (SHA256). ComputeHash ( System. Текст UTF8. GetBytes («mysecretpassword» ) | % .