Что Это? Как работает? Список монет
Если у вас есть Bitmain Antminer или любой другой Биткойн Асик и вы хотите добывать монеты, отличные от Биткойна, то далее в статье мы расскажем Вам о самых выгодных монетах алгоритма SHA-256.
Биткойн — не единственная монета, использующая алгоритм SHA256. Есть сотни монет на этом алгоритме, которые вы можете добывать с помощью Асиков заточенных под Биткоин. Здесь, в этой статье, мы перечислим самые популярные монеты на основе алгоритма SHA 256.
Список всех монет алгоритма SHA-256
Bitcoin (BTC), Bitcoin Cash (BCH) и Bitcoin SV (BSV) — три известные монеты, использующие алгоритм хеширования SHA-256.
Помимо этого, есть сотни альткойнов, которые вы можете добывать с помощью своего Асика. Однако учтите, что большинство проектов заброшено.
Добывать такие монеты совершенно бессмысленно. Потому что их сложно продать, так как они редко торгуются на биржах. Поэтому мы решили перечислить только известные монеты и те, у которых есть разумный объем торгов.
Прибыльность будет одинаковой для всех монет. Предлагаем вам воспользоваться калькуляторами майнинга, чтобы узнать, какой из них более прибыльный на данный момент.
Монеты SHA256
Вот список популярных криптовалют для майнинга SHA256. Мы оценили их по популярности и хешрейту сети.
Другие монеты на основе SHA-256
Примечание: монеты ниже имеют очень низкий 24-часовой объем торгов. Они редко торгуются на биржах и их сложно продать.
- Litecoin Cash (LCC)
- Bitcoin Classic (BXC)
- Elastos (ELA)
- Auroracoin (AUR)
- Bitcoin Vault (BTCV)
- Super Bitcoin (SBTC)
- Pyrk (PYRK)
- EmerCoin (EMC)
- HTMLCOIN (HTML)
- Terracoin (TRC)
- Myriad (XMY) – Multi Algo
Алгоритм SHA-256
SHA расшифровывается как безопасный хэш-алгоритм. Это одна из многих криптографических хэш-функций. SHA-256 является членом семейства SHA-2 (Secure Hash Algorithm 2).
SHA 2 — это набор криптографической хеш-функции, которая является преемником SHA-1. Он был разработан Агентством национальной безопасности США и впервые опубликован Национальным институтом стандартов и технологий (NIST) в качестве федерального стандарта США (FIPS).
SHA256 или Secure Hash Algorithm 256 — это алгоритм хеширования. Как и любые другие криптографические хеш-функции, SHA256 используется для преобразования любого входного сигнала случайного размера в строку фиксированного размера.
То есть он принимает любой вход и производит выход (хэш) фиксированной длины. Не имеет значения, является ли ввод одной буквой, словом, предложением или целой книгой. Выходные данные алгоритма хэширования SHA256 всегда будут одинаковой длины.
Выходы SHA-256 представляют собой 256-битный (32 байта) хэш, который отображается как 64 буквенно-цифровых символов. Этот сгенерированный 256-битный хэш почти уникален.
Кроме того, это односторонняя хэш-функция, которую нельзя расшифровать до исходного состояния. То есть хеш может быть сгенерирован из любого фрагмента данных. Но данные из хеша получить нельзя. Это делает SHA-256 одним из самых надежных доступных алгоритмов хеширования.
Другой важной характеристикой SHA 256 является его детерминированность. То есть сгенерированный хеш-вывод всегда будет одинаковым, если заданный вход такой же. Эта функция делает SHA256 идеальным для применения в протоколе Биткойн.
Где используется SHA256?
Алгоритм хеширования SHA256 генерирует уникальный 256-битный хэш фиксированного размера. Эта функция позволяет проверять целостность данных.
Он используется в различных приложениях, таких как: цифровые подписи, проверка пароля, проверка подлинности хеш-кода, защита от взлома и блокчейн.
По этому алгоритму можно определить целостность данных. То есть пользователь может убедиться, что загруженные данные не изменяются и находятся в исходном состоянии.
Например:
Допустим, вы скачали Биткойн-кошелек. Вы хотите убедиться в его оригинальности. Для этого вы можете просто сравнить хэши своего кошелька с исходным, предоставленным разработчиком.
Алгоритм также реализован в некоторых популярных приложениях безопасности и протоколах шифрования. Одно из широко используемых приложений — это сертификаты TLS и SSL для веб-сайтов. Кроме этого, он используется в SSH, PGP, IPsec и S / MIME.
SHA-256 в Биткоине
Биткойн — это первая криптовалюта, которая внедрила SHA-256 в технологию блокчейн. Этот алгоритм является неотъемлемой частью протокола Биткойн.
Биткойн использует алгоритм хеширования SHA-256 в основном для проверки транзакций через механизм консенсуса Proof of Work. Кроме того, он используется для создания адресов Биткойна.
Сейчас есть ряд криптовалют и блокчейн-проектов, которые приняли этот алгоритм. Три самых популярных монеты, использующие SHA-256 это:
- Bitcoin (BTC)
- Bitcoin Cash (BCH)
- Bitcoin Satoshi Vision (BSV)
Все эти монеты используют SHA-256 в качестве алгоритма Proof of Work для майнинга.
Алгоритм майнинга SHA-256
Биткойн использует SHA-256 в качестве алгоритма майнинга Proof of Work с момента его запуска в 2009 году. Первоначально алгоритм майнился только с использованием CPU и GPU.
Но постепенно оборудование для майнинга эволюционировало, делая процессоры и GPU менее жизнеспособными для майнинга BTC. Сегодня в сети Биткойн доминируют только ASIC (специализированные интегральные схемы).
Есть много ASIC, которые добывают алгоритм SHA-256, но большинство из них устарели и больше не приносят прибыли. Каждое новое поколение ASIC способно производить более высокую хеш-мощность, делая предыдущие слабыми и ненужными. Вот почему разумно инвестировать в монеты напрямую, а затем покупать эти ASIC.
В настоящее время существует только несколько популярных майнеров, и, согласно Asicminervalue.com, это единственные майнеры, которые приносят прибыль при добыче BTC и монет SHA256.
С остальными актуальными Асиками Вы можете ознакомиться на нашем сайте.
Если у вас есть какой-либо из этих Асиков, присоединитесь к любому майнинг пулу и начните добычу BTC. Вы также можете направить свои Асики SHA256 на NiceHash.
Что такое алгоритм шифрования SHA-256 и как работает хеширование
Каждый, кто пробовал майнить цифровую валюту рано или поздно сталкивался с таким термином как SHA256. Что же обозначают эта аббревиатура, какими особенностями обладает, как работает? Обо всем этом мы расскажем в данном материале.
Эмиссию денежной массы во многих криптопроектах обеспечивают майнеры, при этом криптодобыча не только обеспечивает генерацию новых монет, но и является основным элементом защиты пиринговой сети. Цифровой печатный станок, работает строго по заданному алгоритму шифрования, изменить который можно только путем всеобщего голосования участников сети (форка).
Алгоритм sha256, на котором базируется майнинг патриарха криптовалют — Bitcoin (BTC), был создан вовсе не на ровном месте. В его основе лежит алгоритм хеширования SHA-2, используемый для создания протоколов передачи данных в Глобальной сети (TCP/IP).
Алгоритм sha256, является одной из хеш-функций SHA-2. В этом обзоре мы расскажем вам, как работает майнинг sha-256 и в чем плюсы и минусы данного криптопротокола.
Навигация по материалу:
Что такое алгоритм шифрования SHA-256?
Аббревиатуру SHA расшифровывают как «безопасный расчет хеша».
Алгоритм SHA-2, подвидом которого является SHA-256, был разработан в начале третьего тысячелетия Агентством Национальной Безопасности США. Число 256 обозначает количество фрагментов, из которых состоит данный криптографический код.
Через несколько лет после выхода Агентство запатентовало второй выпуск алгоритма SHA-2 под лицензией Royalty-free, благодаря чему технологию можно было направить в мирное русло.
Особенности протокола SHA-256
Нет ни одного метода оптимизации подбора хеш-суммы. Протокол SHA-256 принимая определенные, выдает абсолютно непредсказуемый результат. Поиск нужного варианта выполняется путем банального перебора всех возможных комбинаций. Подбор правильного хеша дело случая, но чем больше мощность вычислительного оборудования, тем выше шансы, что вы найдете его быстрее остальных участников процесса.
Для полноты рассказа добавим немного сложной технической информации. В протокол SHA-256 данные фрагментируются на 256 долей, в каждом из которых содержится 512 бит (64 байта). Доли перемешивают по определенной криптографической схеме, которая заложена в алгоритме, и в результате образуется специальный хеш-код, объемом 256 бит. Смешивание информации повторяется 64 раза. Нужно сказать, что это не так уж много, по сравнению с новыми криптоалгоримами.
Технические параметры SHA-256:
- Объем блока информации: 64 байт;
- Допустимая длина одного сообщения: 33 байт;
- Размер хеш-подписи блока: 32 байт;
- Число смешиваний в раунде: 64;
- Скорость передачи данных по сети: около 140 MiB/s.
Алгоритм основан на методике Меркла-Дамгарда, массив информации делится на отдельные блоки, в каждом из которых 16 частей. Выполнив 64 перемешивания, система выводит корректную хеш-сумму, которая служит отправной точкой для обработки следующего блока. Процесс непрерывен и взаимосвязан получить код отдельно взятого криптоблока, не имея данных о его предшественнике абсолютно невозможно.
Как работает хеширование?
Хеширование — это преобразование по заранее определенной схеме какого-либо объема входящей информации в цифровой код. Исходящее значение уникально, с его помощью всегда можно идентифицировать именно этот массив информации. Алгоритм создания зашифрованной строки (хеш-кода) называется хеш-функцией.
Валидное число в строке шифрованной подписи криптоблока биткоина должно содержать энное количество нулей. На момент составления обзора количество нулей в хеш-коде цифрового золота уже перевалило число 17. Поэтому расшифровка sha256 сложнее, чем поиск некой определенной песчинки, которая находится в произвольной точке земного шара.
Важно! В принципе зашифровать можно все что угодно хоть поэму Лермонтова «Кавказский пленник» и в результате получится шестнадцатеричный код типа: c8ba7865a9x924590dcc54a6f227859z.
Шифрование не имеет обратной силы, сделать с цифробуквенного набора текст не получится, но если в самой поэме изменить хотя бы одну точку или пробел, то хеш-код произведения будет совершено иным. Вы можете убедиться в этом сами, посетив сайт для автоматической шифровки http://crypt-online.ru/crypts/sha256/.
Зависимость блоков в сети биткион
В сети каждой криптовалюты, в том числе и биткоин, блоки представляют собой массив информации о переводах средств за определенный период. Каждый из них имеет уникальный хеш-код (подпись).
Как уже было сказано криптографическая подпись последующего вытекает из хеш-кода предыдущего, образуя целостную систему, в которой нельзя что-либо изменить или подделать. Майнеры постоянно заняты вычислением подписи нового блока, и получают награду только за результат.
Список криптовалют на SHA-256
SHA-256 представляет собой классику криптоалгоритма. Помимо первой криптовалюты Bitcoin (BTC) на нем базируются еще 43 блокчейн-проекта.
Самые популярные из них:
- Bitcoin Cash;
- Bitcoin SV;
- Litecoin Cash;
- Peercoin;
- DigiByte.
Полный список доступен на сайте https://miningpoolstats.stream/.
Плюсы и минусы алгоримта
SHA256 имеет некие преимущества перед другими алгоритмами. Это наиболее востребованный алгоритм майнинга среди всех существующих. Он показал себя как надежный к взламыванию (случается не часто) и результативный алгоритм как для задач майнинга, так и для прочих целей.
Имеются и недостатки:
- Главным минусом SHA256 валюты является контролирование майнерами.
- Те, у кого имеются огромные вычислительные мощности, получают основную часть крипто, что исключает один из основных принципов виртуальных денег – децентрализованность.
- Как только пошли инвестиции в вычислительные мощности для промышленного майнинга Биткоина, сложность добычи значительно возросла и стала требовать исключительных вычислительных мощностей. Этот минус исправлен в прочих протоколах, наиболее инновационных и «заточенных» под применение в добыче цифровых валют, таких как Script (для криптовалюты Litecoin).
Криптовалюты SHA256, как и SHA512 наиболее защищены от данного отрицательного момента, но вероятность развития риска все-таки есть. Miner на SHA256, как и на любом ином хешировании – это процесс разрешения какой-то сложнейшей криптографической задачи, которую генерирует программа для майнинге на основе информации полученной с блоков.
Майнинг при помощи хэш-функции SHA256 можно осуществлять 3 методами:
В майнинге хеш–сумма применяется как идентификатор уже присутствующих блоков, и создания новых на основе тех, что имеются. Процесс майнинга отражен в интерфейсе в виде «accepted f33ae3bc9…». Где f33ae3bc9 – это хешированная сумма, часть данных, которая требуется для дешифровывания. Главный блок включает в себя огромное число такого рода хеш-сумм.
То есть, добыча с алгоритмом SHA256 – это подбор правильного значения хешированной суммы без остановки, перебор чисел для того, чтобы создать очередной блок. Чем мощнее оборудование, тем больше шансов стать владельцем того самого правильного блока: скорость перебирания разного рода сумм зависит от мощностей. Потому как Биткоин построен на алгоритме SHA256, для конкурентоспособного майнинга на нём требуются крайне большие вычислительные мощности.
Это связывается с тем, что для добычи криптовалюты хватает производства «асиков», а именно специальной схемы особенного назначения. Асики дают возможность добывать Биткоины и прочие криптовалюты на хэш-функции SHA–256 оперативнее, результативнее и недорого.
Заключение
В конце статьи нужно извиниться перед читателем за чересчур сложное объяснение темы, но, увы, рассказ об основах криптографии нельзя отнести к разряду повседневного чтива. Что же касается перспектив SHA-256, то пока биткоин занимает львиную долю рынка данный алгоритм будет очень востребованным.
Но если патриарха цифровых активов потеснят альтернативные проекты, работающие на других алгоритмах, то SHA-256 станет достоянием историков. И такой поворот только оживит блокчейн-индустрию.
Дата публикации 16.05.2020
Подписывайтесь на новости криптовалютного рынка в Яндекс Мессенджер.
Поделитесь этим материалом в социальных сетях и оставьте свое мнение в комментариях ниже.
Самые последние новости криптовалютного рынка и майнинга:The following two tabs change content below.
Материал подготовлен редакцией сайта «Майнинг Криптовалюты», в составе: Главный редактор — Антон Сизов, Журналисты — Игорь Лосев, Виталий Воронов, Дмитрий Марков, Елена Карпина. Мы предоставляем самую актуальную информацию о рынке криптовалют, майнинге и технологии блокчейн.
256 — алгоритм хеширования и его возможности
С ростом популярности криптовалюты все больше и больше людей начинают воспринимать ее как перспективный финансовый инструмент. Однако, мало кто задумывается какую ценность она представляет для научно-технического прогресса. Ведь чтобы вникнуть в суть данного явления необходимо пробраться сквозь настоящие дебри криптографических понятий, а также непривычных и таинственных аббревиатур вроде SHA-256. О ней и пойдет речь в сегодняшней статье.
Что такое майнинг?
Майнинг — главная составляющая защитного механизма любой цифровой валюты. Принцип действия состоит в группировании майнерами совершенной операции в 1 блок, который уже преобразовали огромное количество раз для установления исключительного редкого хеш-кода, отвечающего особым требованиям. Если подобное значение отыскивается, блок майнится и добавляется в блокчейн монеты. Такая вычислительная деятельность не дает какой-либо пользы кроме повышения сложности генерации необходимого блока. С другой стороны, только благодаря ей пользователи электронной валюты могут быть уверены, что их площадка не будет взята под контроль и централизована.
Стандартная хеш-функция принимает на вход блок с определенной информацией, выдавая на выходе случайное и непредсказуемое значение. Она разработана таким образом, что не существует оптимального метода найти требуемый показатель, вам нужно снова и снова продолжать перебор до тех пор, пока не отыщите подходящий хеш-код.
Одним из самых популярных протоколов вычисления является SHA-256. Именно его использует первая криптовалюта в мире — Биткоин. Причем для повышения уровня безопасности алгоритм задействуется 2 раза и именуется уже двойным.
В Bitcoin критерием пригодности хеша считается необходимое количество «0» в его начале. Обнаружить подобное значение также невероятно трудно, как, например, отыскать номер автомобиля или сотового, кончающегося на пару 0. Разумеется, сделать такое для хеш-функции в много раз сложнее. В настоящее время, правильное значение должно включать приблизительно 17 начальных нулей, чему соответствует лишь одно из 1,4 умноженное на 10 в 20 степени. Проводя сравнение, отыскать подобный хеш значительно сложнее, нежели отыскать определенную песчинку среди всей нескончаемой массы песка на планете.
Особенности протокола SHA-256
Первоначальная версия алгоритма SHA-256 была создана Агентством национальной безопасности США весной 2002 года. Спустя несколько месяцев Национальный метрологический университет опубликовал новоявленный протокол шифрования в принятом на федеральном уровне стандарте безопасной обработки данных FIPS PUB 180-2. Зимой 2004 года он пополнился второй версией алгоритма.
В течение следующих 3 лет АНБ выпустила патент на SHA второго поколения под лицензией Royalty-free. Именно это дало старт применению технологии в гражданских сферах.
Обратите внимание! Довольно интересный факт: каждый пользователь Всемирной паутины, сам того не зная, во время своих путешествий по интернету пользуется данным протоколом. Посещение любого веб-ресурса, защищенного сертификатом безопасности SSL, автоматически запускает выполнение алгоритма SHA-256.
Данный протокол работает с информацией, раздробленный на части по 512 бит (или другими словами 64 байта). Он производит ее криптографическое «смешивание», а затем выдаёт 256-битный хеш-код. В состав алгоритма входит сравнительно простой раунд, который повторяется 64 раза.
Кроме того, SHA-256 имеет довольно неплохие технические параметры:
- Показатель размера блока (байт) – 64.
- Предельно допустимая длина сообщения (байт) – 33.
- Характеристика размера дайджеста сообщения (байт) – 32.
- Стандартный размер слова (байт) – 4.
- Параметр длины внутреннего положения (байт) – 32.
- Число итераций в одном цикле – всего 64.
- Достигаемая протоколом скорость (MiB/s) – примерно 140.
Работа алгоритма SHA-256 базируется на методе построения Меркла-Дамгарда, в соответствии с которым начальный показатель сразу после внесенного изменения разделяется на блоки, а те, в свою очередь, на 16 слов.
Набор данных проходит сквозь цикл, насчитывающий 80 или 64 итерации. Каждый этап характеризуется запуском хеширования из составляющих блок слов. Пара из них обрабатываются инструментарием функции. Далее результаты преобразования складываются, выдав в итоге верный показатель хеш-кода. Для генерации очередного блока используется значение предыдущего. Преобразовывать их отдельно друг от друга не получится.
Также стоит упомянуть 6 битовых операций, на основе которых функционирует протокол:
- «and» — побитовая операция «И»;
- «shr» — перемещает значение на требуемое количество бит вправо;
- «rots» — команда аналогичная по действию предыдущий, с той лишь разницей, что осуществляется циклический сдвиг;
- «||» или конкатенация — операция соединения частей линейной структуры, чаще всего строк;
- «xor» — команда, убирающая «ИЛИ»;
- «+» — обыкновенная операция сложения.
Как можно заметить, довольно типичный для любого алгоритма шифрования набор операций.
Криптографический смысл SHA-256
Дабы определить ценность данного алгоритма, необходимо обратиться к криптоанализу. Это дисциплина находит методы расшифровки информации без применения специализированного ключа.
Первые исследования SHA-256 на присутствие уязвимостей начали осуществляться специалистами с 2003 года. На тот момент ошибок в протоколе обнаружено не было.
Однако, уже в середине 2008 года группа экспертов из Индии смогла отыскать коллизии для 22 итераций архитектур семейства SHA. Через несколько месяцев был предложен способ разработки коллизий для усеченного варианта протокола, а затем и для 31 итерации хеширования непосредственного самого SHA-256.
Во время анализа функции свертки осуществляется тестирование ее сопротивляемости к 2 разновидностям атак:
- Наличие прообраза — дешифрование начального сообщения по его хеш-коду. Сопротивляемость подобному типу воздействия гарантирует надежную защиту результатам преобразования.
- Нахождение коллизий — схожие выходные данные при различных входных характеристиках. От устойчивости к такой разновидности атак находится в прямой зависимости защищенность электронной подписи с использованием актуального протокола.
Создатели второго поколения алгоритма SHA решили, что новый механизм шифрования будет функционировать на основе совершенно других принципов. Так, осенью 2012 года на свет появился протокол третьей серии — Keccak.
Практическое применение и сертификация технологии
Законодательством Соединенных Штатов Америки разрешается использование SHA-256 и прочих аналогичных методов хеширования в определенных государственных программах для защиты сведений. Кроме того, допускается применение алгоритма коммерческими компаниями.
Важно! Поэтому нет ничего удивительного в том, что данный протокол был использован в первой цифровой валюте. Выпуск новых монет Биткоина совершается путем нахождения строк по их указанной архитектуре SHA-256.
Как это сказывается на специализированных устройствах для добычи криптовалюты? Каждый шаг в этом алгоритме имеет довольно простой вид — примитивная битовая операция и 32-битное сложение (любой, кто знаком с основами схемотехники, сможет без труда представить, как подобное выглядит в железе). А потому для эффективной работы асик-майнеров нужно лишь располагать десятком блоков выполнения этапов алгоритма.
В противовес Bitcoin, Лайткоин, Догикоин и прочие схожие «коины» используют протокол шифрования Scrypt, который оснащен функцией повышения сложности. Данный алгоритм в ходе деятельности сохраняет 1024 различных значения хеш-функций, а уже на выходе соединяет их и получает преобразованный результат. Благодаря этому для реализации протокола нужны несравнимо большие вычислительные мощности.
Вывод
Подводя итог, можно сказать, что протокол SHA-256 оказался чересчур легким и сегодня имеется целое множество специализированных девайсов (так называемые майнеры), которые успешно обходят его. С их появлением отпала необходимость майнить на процессоре или собирать фермы из видеокарт, поскольку ASIC-устройства позволяют своим владельцам заработать намного больше. Однако, у этого есть и обратная сторона. Использование майнеров слишком сильно централизует криптовалюту, а значит, необходимо внедрение новых протоколов хеширования. Таким алгоритмом стал Scrypt — куда более продвинутый защитный механизм, который требует значительной производительности и поэтому теоретически лишает специальные приборы особого преимущества.
С позиции рядового пользователя нет никакой разницы между протоколами SHA-256 и Scrypt. Можно майнить цифровую валюту своим компьютером или фермой на любом из данных протоколов.
Алгоритм SHA-256 на сегодняшний день занимает более 40% всего рынка, однако, вне всякого сомнения, имеются и другие. И в скором времени они потеснят прославленного предшественника. Так, из сравнительно свежих необходимо упомянуть об особенно «майнероустойчивом» протоколе Dagger, который собираются использовать в децентрализованной площадке Эфириум. Возможно, именно он примет эстафету лидера в области хеширования и займет место SHA-256.
В чем разница между “SHA-2” и » SHA-256”
Семейство SHA-2 состоит из множества тесно связанных функций hash. По сути, это единый алгоритм, в котором несколько незначительных параметров различаются между вариантами.
Первоначальная спецификация охватывала только 224, 256, 384 и 512-битные варианты.
Наиболее существенная разница между вариантами заключается в том, что некоторые из них являются 32-битными вариантами, а некоторые-64 bit вариантами. С точки зрения производительности это единственное различие, которое имеет значение.
На 32-битном CPU SHA-224 и SHA-256 будут намного быстрее, чем другие варианты, потому что они являются единственными 32-битными вариантами в семействе SHA-2. Выполнение вариантов 64 bit на 32-битном CPU будет медленным из-за дополнительной сложности выполнения операций 64 bit на 32-битном CPU.
На 64 bit CPU SHA-224 и SHA-256 будут немного медленнее, чем на других вариантах. Это происходит потому, что из-за обработки только 32 бит за раз им придется выполнять больше операций, чтобы пройти через то же самое количество байтов. Вы не получите достаточно удвоения скорости от переключения на вариант 64 bit, потому что варианты 64 bit имеют большее количество раундов, чем 32-битные варианты.
Внутреннее состояние имеет размер 256 бит для двух 32-битных вариантов и 512 бит для всех четырех вариантов 64 bit. Таким образом, число возможных размеров для внутреннего состояния меньше, чем число возможных размеров для конечного выхода. Переход от большого внутреннего состояния к меньшему выходу может быть хорошим или плохим в зависимости от вашей точки зрения.
Если вы сохраняете фиксированный размер вывода, то в целом можно ожидать, что увеличение размера внутреннего состояния улучшит безопасность. Если вы сохраняете размер внутреннего состояния фиксированным и уменьшаете размер выходных данных, столкновения становятся более вероятными, но атаки с расширением длины могут стать проще. Делать выходной размер больше внутреннего состояния было бы бессмысленно.
Из-за того, что варианты 64 bit были одновременно более быстрыми (на 64 bit CPUs) и, вероятно, более безопасными (из-за большего внутреннего состояния), были введены два новых варианта с использованием слов 64 bit, но более коротких выходных данных. Это те, которые известны как 512/224 и 512/256.
Причины, по которым требуются варианты с выходом, который намного короче внутреннего состояния, обычно заключаются либо в том, что для некоторых применений нецелесообразно использовать такой длинный выход, либо в том, что выход должен использоваться в качестве ключа для некоторого алгоритма, который принимает вход определенного размера.
Также возможно простое усечение конечного вывода до желаемой длины. Например, конструкция HMAC указывает усечение конечного вывода hash до желаемой длины MAC. Из-за того, что HMAC подает выход одного вызова hash в качестве входного сигнала другому вызову, это означает, что использование hash с более коротким выходом приводит к HMAC с меньшим внутренним состоянием. По этой причине, вероятно, будет немного безопаснее использовать HMAC-SHA-512 и усечь выходной сигнал до 384 бит, чем использовать HMAC-SHA-384.
Конечный выход SHA-2 — это просто внутреннее состояние (после обработки длины расширенного входа), усеченное до нужного количества выходных битов. Причина, по которой SHA-384 и SHA-512 на одном и том же входе выглядят так по-разному, заключается в том, что для каждого из вариантов задан другой IV.
Алгоритм SHA-256 и / или алгоритм де-хэширования
Недавно я попытался изучить криптографию и узнал о SHA-2 (в частности, SHA-256), но не смог найти реальный алгоритм, который проходит через этапы хеширования, в частности. Если у кого-то есть работающий алгоритм для JavaScript, чтобы поместить строку через хэширование SHA-256, это было бы полезно.
Я знаю, что это может быть невозможно, но я пытаюсь узнать, как SHA-256 хэширует строки, чтобы попытаться изменить SHA-256.
NOTE: я понимаю, что это самая распространенная форма хеширования безопасности, и ни в коем случае не пытаюсь совершать вредные действия с этим знанием (если мне это удастся).
Edit1: если это возможно, я бы хотел, чтобы алгоритм SHA-256 поместился в одном файле .js. Я внедряю SHA-256 в сценарий Tampermonkey для себя и хочу также попытаться научиться обращать его вспять.
javascript algorithm hash sha256Поделиться Источник Eric Oleen 30 марта 2016 в 23:33
3 ответа
- В чем разница между “SHA-2” и » SHA-256”
Я немного запутался в разнице между SHA-2 и SHA-256 и часто слышу, как они используются взаимозаменяемо. Я думаю, что SHA-2 — это family из hash алгоритмов и SHA-256-специфический алгоритм в этом семействе. Может ли кто-нибудь прояснить эту путаницу?
- Использует ли сертификат SSL, созданный с помощью rsa:2048, криптографический алгоритм SHA-2 hash?
Google пытается постепенно отказаться от использования сертификатов SSL с помощью алгоритма хэширования SHA1. В результате я хочу создать совместимый с SHA2 самозаверяющий сертификат. Я понимаю, что SHA-это алгоритм хеширования, в то время как RSA-это алгоритм шифрования. Я нашел следующую команду…
4
Вот реализация SHA-256 в JS. Дай мне знать, когда раскроешь его.
Sha-256-это односторонняя функция хеширования, означающая, что она использует ваш ввод в качестве начального значения и возвращает вывод фиксированной длины (в данном случае 256 бит). Алгоритм является детерминированным и, казалось бы, случайным. Это означает, что для любого заданного входа он будет возвращать один и тот же выход, но когда он подвергается статистическому тестированию, корреляции между входом и выходом нет.
Таким образом, нет никакого способа обратить sha256 hash без использования метода грубой силы хэширования случайных входов. При нынешних вычислительных мощностях это не совсем осуществимый вариант.
Поделиться joemillervi 30 марта 2016 в 23:50
1
(По подсказке @Spectre, я опубликую свой первоначальный комментарий, а также дополнительную соответствующую информацию (при условии, что мой @Spectre, а также сам OP) в качестве ответа)
Реверсирование фактического
алгоритма SHA-256 : неосуществимо, и это не тот способ обойти его при попытке взломать данный хэшированный парольЭто (почти) невозможно для вас, чтобы обратить вспять hash; hash треск вместо этого сосредоточен на
- поиск алгоритма hash, включая соли,
- затем следует метод грубой силы хэширования вероятных паролей и попытки сопоставить полученные хэши с некоторыми hash, которые вы намереваетесь «crack».
Если мы для обсуждения предположим, что все алгоритмы hash необратимы и мгновенно идентифицируемы, то сила hash будет примерно зависеть от сложности алгоритма хеширования; в том смысле, что повторное хеширование (выполняемое при попытке атак по словарю и т. д.) С помощью более сложного метода hash, такого как SHA-256, будет на порядки медленнее, чем при повторном хешировании с использованием наивного несоленого алгоритма хеширования, скажем, несоленого MD5.
Нет ничего плохого в том, чтобы примерно изучить «как», и я предлагаю прочитать эту превосходную статью Ars Technica на эту тему:
А также Этот превосходный security.SE Q&A
Дополнительная ссылка
Сбор соответствующей дополнительной информации из комментариев к вашему вопросу (поскольку они могут не сохраняться в течение долгого времени):
Как указывает @Specte, релевантная нить, заслуживающая внимания, — это:
Что касается вопроса о том, почему реверсирование алгоритмов hash неосуществимо, то вы сами указали на соответствующий поток security.SE:
Поделиться dfri 01 апреля 2016 в 16:14
-1
Недавно я использую crypto-js/sha256
.
Вы можете установить его с помощью nodejs с помощью этой команды:
npm install --save crypto-js
Поделиться user12231721 17 октября 2019 в 09:14
Похожие вопросы:
Алгоритм хэширования ASPNET Identity 2.0
Какой алгоритм хэширования aspnet identity 2.0 использует для hash пароля. Это SHA1 или SHA256 ? Можно ли перейти на SHA2, если он использует SHA1 ?
Алгоритм SHA 256 в Power Builder 6.5
Я пытаюсь хранить данные как можно более защищенным способом в базе данных. Для этого я пытаюсь реализовать алгоритм SHA-256 в Powerbuilder версии 6.5. Это звучит старо, что я имплементирую SHA 256…
Мой веб-хост не поддерживает SHA-3 или SHA-2 с PHP. Что же мне делать?
Таким образом, мой веб-хост поддерживает только SHA-1 и MD5, которые оба довольно сломаны и устарели. Что я могу сделать в этой ситуации? Придется ли мне использовать внешний сайт для hash моего…
В чем разница между “SHA-2” и » SHA-256”
Я немного запутался в разнице между SHA-2 и SHA-256 и часто слышу, как они используются взаимозаменяемо. Я думаю, что SHA-2 — это family из hash алгоритмов и SHA-256-специфический алгоритм в этом…
Использует ли сертификат SSL, созданный с помощью rsa:2048, криптографический алгоритм SHA-2 hash?
Google пытается постепенно отказаться от использования сертификатов SSL с помощью алгоритма хэширования SHA1. В результате я хочу создать совместимый с SHA2 самозаверяющий сертификат. Я понимаю, что…
Является ли алгоритм шифрования дешифрования AES/ CBC/ PKCS5Padding и алгоритм хэширования SHA-1 доступными во всех типах устройств Android
Я попытался запустить следующий код шифрования и дешифрования AES/ CBC/ PKCS5Padding с SHA-1 в качестве генерации ключей в Nexus 5. Пока это работает очень хорошо. Однако меня беспокоит только то,…
Android алгоритм подписи SHA256 с сертификатом, имеющим алгоритм SHA1
Мой вопрос в некотором роде является продолжением этого: Могу ли я указать алгоритм дайджеста, который использует apksigner? Я подписываю APK с apksigner и, следуя рекомендациям на вышеприведенном…
Git переходит на новый алгоритм хэширования SHA-256, но почему сообщество git остановилось на SHA-256
Я только что узнал из этого сообщения HN, что git переходит на новый алгоритм хэширования ( с SHA-1 на SHA-256 ) Я хотел знать, что делает SHA-256 наилучшим образом подходящим для использования git….
Хеширование SHA-256 с секретным ключом swift
Я новичок в алгоритмах шифрования и хэширования. Мне нужно Hash строку с секретным ключом, используя алгоритм SHA-256. Я попробовал несколько ссылок из stack overflow и некоторых других учебников, а…
PBKDF2 с использованием SHA 256 in . NET
Мне нужно обновить некоторый код, который использует реализацию PBKDF2 в .Net, Rfc2898DeriveBytes -hash учетных данных пользователя. Насколько я понимаю, эта функция использует SHA-1 под капотом….
Разница между алгоритмами хэширования SHA-1, SHA-2, SHA-256
Разница между алгоритмами хэширования SHA-1, SHA-2, SHA-256
Давайте начнем с объяснения сокращенного алгоритма.
Алгоритм хеширования — это математическая функция, которая сжимает данные до фиксированного размера, например, если мы возьмем какое-либо предложение «У Олы есть кот» и пропустим его через специальный алгоритм CRC32, мы получим сокращение «b165e001». Существует множество алгоритмов, и все они имеют определенные цели, некоторые улучшены для типа данных, другие — для безопасности.
Для нас наиболее важными являются алгоритмы SHA.
SHA — означает алгоритм безопасного хеширования — используется для криптографической безопасности. Самая важная предпосылка этого алгоритма — необратимость и уникальность хэша. Необратимость — исходные данные останутся в безопасности и неизвестны. Уникальность — два разных фрагмента данных не могут генерировать один и тот же ключ.
Цифровая подпись чрезвычайно чувствительна — любое изменение в документе приведет к изменению подписи. Если мы возьмем ранее упомянутое предложение «OLA MA KOTA» и напишем заглавными буквами, мы получим совершенно другое сокращение «baa875a6». Другая аббревиатура означает, что подпись недействительна.
SHA-1 и SHA-2 — две версии алгоритма. Они разные по конструкции и длине долота. SHA-2 — улучшенная версия SHA-1.
SHA-1 длиной 160 бит
SHA-2 встречается различной длины, чаще всего в 256 битах
Большее значение хеш-функции обеспечивает большую безопасность. Количество уникальных сокращений может быть выражено как число, например, для SHA-256 их 2 256 возможные комбинации. 2 256 это огромное количество превышает количество песчинок на земле.
Если сертификат пользователя основан на SHA-1 (и действителен, поскольку был выпущен до 1 июля), то созданная (после 1 июля) подпись, проверенная с помощью этого сертификата, должна содержать сокращение подписанного содержимого, рассчитанное с помощью алгоритма SHA-2 (не SHA-1). Таким образом, приложения и ИТ-системы должны иметь дело не только с новыми сертификатами, но, прежде всего, создавать подписи и печати при использовании хэша в соответствии с SHA-2.
Установленные нами программы уже сегодня позволяют выполнять операции по отправке и проверке электронных подписей с использованием хеш-функции SHA-2.
Это займет всего несколько минут, позвоните или напишите, чтобы узнать больше о квалифицированных электронных подписях.
телефон доверия 58 333 1000 или адрес электронной почты: @ Е-офисный центр
Ниже предлагаются наборы для электронной подписи:
Может ли машинное обучение расшифровать хэши SHA256?
Пока нельзя доказать отрицание на примере. Тем не менее, я чувствую, что пример был бы наводящим на размышления; и, возможно, полезно. И это показывает, как можно (пытаться) решить подобные проблемы.
В случае, когда я хочу делать двоичные предсказания, используя функции, которые являются двоичными векторами , случайный лес является хорошим выбором. Я думаю, что такого рода ответы на вторую часть вашего вопроса: что такое хороший алгоритм.
Мы хотим предварительно обработать строки SHA256 в двоичные (булевы) векторы, поскольку каждый бит статистически независим, поэтому каждый бит является хорошей особенностью. Так что это сделает наши входные данные 256-элементными логическими векторами.
демонстрация
Вот демонстрация того, как все это можно сделать с помощью библиотеки Julia DecisionTree.jl .
Вы можете скопировать вставить ниже в подсказку Джулии.
using SHA
using DecisionTree
using Statistics: mean
using Random: randstring
const maxlen=10_000 # longest string (document) to be hashed.
gen_plaintext(x) = gen_plaintext(Val{x}())
gen_plaintext(::Val{true}) = "1" * randstring(rand(0:maxlen-1))
gen_plaintext(::Val{false}) = randstring(rand(1:maxlen))
bitvector(x) = BitVector(digits(x, base=2, pad=8sizeof(x)))
bitvector(x::AbstractVector) = reduce(vcat, bitvector.(x))
function gen_observation(class)
plaintext = gen_plaintext(class)
obs = bitvector(sha256(plaintext))
obs
end
function feature_mat(obs)
convert(Array, reduce(hcat, obs)')
end
########################################
const train_labels = rand(Bool, 100_000)
const train_obs = gen_observation.(train_labels)
const train_feature_mat = feature_mat(train_obs)
const test_labels = rand(Bool, 100_000)
const test_obs = gen_observation.(test_labels)
const test_feature_mat = feature_mat(test_obs)
# Train the model
const model = build_forest(train_labels, train_feature_mat)
@show model
#Training Set accuracy:
@show mean(apply_forest(model, train_feature_mat) .== train_labels)
#Test Set accuracy:
@show mean(apply_forest(model, test_feature_mat) .== test_labels)
Полученные результаты
Когда я это сделал, тренировался на 100 000 случайных ASCII-строк длиной до 10000. Вот результаты, которые я видел:
Тренируй модель
julia> const model = build_forest(train_labels, train_feature_mat)
Ensemble of Decision Trees
Trees: 10
Avg Leaves: 16124.7
Avg Depth: 17.9
Точность тренировочного набора:
julia> mean(apply_forest(model, train_feature_mat) .== train_labels)
0.95162
Точность тестового набора:
julia> mean(apply_forest(model, test_feature_mat) .== test_labels)
0.5016
обсуждение
Так что это в принципе ничего. Мы прошли с 95% на тренировочном наборе до чуть более 50% на тестовом наборе. Кто-то может применить надлежащие проверки гипотез, чтобы увидеть, можем ли мы отвергнуть нулевую
гипотезу, но я почти уверен, что мы не сможем. Это небольшое улучшение по сравнению с вероятностью угадывания.
Это говорит о том, что этому нельзя научиться. Если Случайный Лес, может перейти от хорошо приспособленного к поражению только вероятности. Случайные леса довольно способны к изучению сложных входных данных. Если бы было чему поучиться, я бы ожидал как минимум несколько процентов.
Вы можете поиграть с различными хэш-функциями, изменив код. Что может быть интересно Я получил в основном те же результаты при использовании встроенной hash
функции julia (которая не является криптографически защищенной hsah, но все же является хорошим хэшем, поэтому действительно должна посылать подобные строки отдельно). Я также получил в основном те же результаты для CRC32c
.
SHA-256 Алгоритм | SolarWinds MSP
Шифрование — важная часть современной компьютерной безопасности. Алгоритмы шифрования, такие как AES 256 и PGP, используются для шифрования данных во время передачи и их дешифрования, когда они достигают законного пункта назначения. Но что происходит, когда вам нужно зашифровать данные так, чтобы их невозможно расшифровать? Вот тут-то и пригодится хеширование. В этой статье мы рассмотрим SHA-256, широко используемую хеш-функцию, и ее роль в современной кибербезопасности.
Что такое SHA-256?Алгоритм SHA-256 является разновидностью SHA-2 (алгоритм безопасного хеширования 2), который был создан Агентством национальной безопасности в 2001 году в качестве преемника SHA-1.SHA-256 — это запатентованная криптографическая хеш-функция, которая выводит значение длиной 256 бит.
Что такое хеширование? При шифровании данные преобразуются в безопасный формат, который невозможно прочитать, если у получателя нет ключа. В зашифрованном виде данные могут иметь неограниченный размер, часто такой же длинный, как и в незашифрованном виде. Напротив, при хешировании данные произвольного размера отображаются в данные фиксированного размера. Например, 512-битная строка данных будет преобразована в 256-битную строку с помощью хеширования SHA-256.
При криптографическом хешировании хешированные данные изменяются таким образом, что они становятся полностью нечитаемыми. Было бы практически невозможно преобразовать упомянутый выше 256-битный хэш обратно в его исходную 512-битную форму. Так зачем вам создавать зашифрованное сообщение, которое невозможно восстановить? Наиболее частая причина — проверка содержимого данных, которые должны храниться в секрете. Например, хеширование используется для проверки целостности защищенных сообщений и файлов. Хэш-код защищенного файла может быть опубликован публично, чтобы пользователи, скачивающие файл, могли подтвердить, что у них есть подлинная версия, без раскрытия содержимого файла.Аналогичным образом хеши используются для проверки цифровых подписей.
Проверка пароля — особенно важное приложение для криптографического хеширования. Хранение паролей пользователей в текстовом документе — верный путь к катастрофе; любой хакер, которому удастся получить доступ к документу, обнаружит кладезь незащищенных паролей. Вот почему безопаснее хранить хеш-значения паролей. Когда пользователь вводит пароль, вычисляется хеш-значение, которое затем сравнивается с таблицей.Если он соответствует одному из сохраненных хэшей, это действительный пароль, и пользователю может быть разрешен доступ.
Какую роль играет хеширование SHA-256 в кибербезопасности? SHA-256 используется в некоторых из самых популярных протоколов аутентификации и шифрования, включая SSL, TLS, IPsec, SSH и PGP. В Unix и Linux SHA-256 используется для безопасного хеширования паролей. Криптовалюты, такие как Биткойн, используют SHA-256 для проверки транзакций.
Разница между хэш-алгоритмами SHA-1, SHA-2 и SHA-256
SHA-1, SHA-2, SHA-256, SHA-384 — Что все это значит !!Если вы слышали о «SHA» во многих его формах, но не совсем уверены, что это за аббревиатура или почему это важно, мы постараемся пролить свет на это сегодня.
Прежде чем мы перейдем к самому SHA, нам нужно изучить, что такое хэш, а затем мы разберемся, как сертификаты SSL используют хэши для формирования цифровых подписей. Это важные концепции, которые необходимо понять, прежде чем вы сможете понять, что такое SHA-1 и SHA-2.
Начнем.
Что такое хеш?Алгоритм хеширования — это математическая функция, которая сжимает данные до фиксированного размера. Так, например, если взять предложение…
«Быстрая коричневая лисица перепрыгивает через ленивую собаку»
… и прогнав его через специальный алгоритм хеширования, известный как CRC32 , мы получим:
«07606bb6»
Этот результат известен как хеш-значение или хеш-значение.Иногда хеширование называют односторонним шифрованием.
Хэши удобны в ситуациях, когда компьютеры могут захотеть идентифицировать, сравнивать или иным образом выполнять вычисления с файлами и строками данных. Компьютеру проще сначала вычислить хэш, а затем сравнить значения, чем сравнивать исходные файлы.
Одним из ключевых свойств алгоритмов хеширования является детерминизм . Любой компьютер в мире, который понимает выбранный вами алгоритм хеширования, может локально вычислить хэш нашего примера предложения и получить тот же ответ.
Алгоритмы хеширования используются всевозможными способами — они используются для хранения паролей, в компьютерных системах, в базах данных и т. Д.
Существуют сотни алгоритмов хеширования, и все они имеют определенные цели — некоторые оптимизированы для определенных типов данных, другие — для скорости, безопасности и т. Д.
Для сегодняшнего обсуждения все, что нас волнует, — это алгоритмы SHA. SHA расшифровывается как Secure Hash Algorithm — его название раскрывает его цель — он предназначен для криптографической безопасности.
Если вы уберете только одну вещь из этого раздела, она должна быть такой: криптографические алгоритмы хеширования создают необратимых и уникальных хешей . Необратимое означает, что если бы у вас был только хэш, вы не могли бы использовать его, чтобы выяснить, что это за исходный фрагмент данных, что позволяет исходным данным оставаться безопасными и неизвестными. Уникальное значение, заключающееся в том, что два разных фрагмента данных никогда не могут создать один и тот же хэш — в следующем разделе объясняется, почему это так важно.
Примечание : Чтобы упростить чтение и понимание этой статьи, я использую пример строки данных и алгоритма хеширования, который значительно короче, чем то, что фактически используется на практике.Хэши, которые вы видели до сих пор, НЕ являются хешами SHA любого типа.
Цифровая подписьТеперь, когда мы знаем, что такое хэши, мы можем объяснить, как они используются в сертификатах SSL.
Протокол SSL / TLS используется для обеспечения безопасной передачи данных от одного устройства к другому через Интернет. Для краткости кажется, что SSL часто называют «шифрованием». Но не забывайте, что SSL также обеспечивает аутентификацию . Файл сертификата SSL должен предоставить информацию, необходимую для аутентификации.Или, другими словами, сертификаты SSL привязывают определенный открытый ключ к личности.
Помните, что протокол SSL / TLS упрощает соединение с использованием асимметричного шифрования. Это означает, что существует два ключа шифрования, каждый из которых обрабатывает половину процесса: открытый ключ для шифрования и закрытый ключ для дешифрования. Каждый сертификат SSL содержит открытый ключ, который может использоваться клиентом для шифрования данных, и владелец указанного сертификата SSL надежно хранит закрытый ключ на своем сервере, который они используют для расшифровки этих данных и обеспечения их читабельности.
В конечном счете, основной целью этого асимметричного шифрования является безопасный обмен ключами. Из-за того, что асимметричные ключи требуют вычислительной мощности, более практично (и все же безопасно) использовать симметричные ключи меньшего размера для фактической коммуникационной части соединения. Таким образом, клиент генерирует сеансовый ключ, затем шифрует его копию и отправляет ее на сервер, где ее можно расшифровать и использовать для связи на протяжении всего соединения (или до тех пор, пока он не будет заменен).
Вот почему аутентификация невероятно важна для обеспечения реальной безопасности SSL / TLS.Представьте, что на вашем компьютере нет надежного способа узнать, кому принадлежит ключ шифрования, который вы используете? Шифрование вашего сеансового ключа этим открытым ключом не будет полезно, потому что вы не будете знать, кому принадлежит соответствующий закрытый ключ, который его расшифровывает. В конце концов, от шифрования данных мало пользы, если вы отправляете их напрямую злоумышленнику-посреднику или злоумышленнику на другом конце соединения.
Цифровые подписи — важная часть того, как сертификаты SSL обеспечивают аутентификацию.Когда сертификат выдается, он подписывается цифровой подписью Центром сертификации (ЦС), который вы выбрали в качестве поставщика сертификатов (например, Sectigo, DigiCert и т. Д.). Эта подпись предоставляет криптографическое доказательство того, что CA подписал сертификат SSL и что сертификат не был изменен или воспроизведен. Что еще более важно, подлинная подпись является криптографическим доказательством того, что информация, содержащаяся в сертификате, была проверена доверенной третьей стороной.
Теперь давайте поговорим о том, как делается, применяется, прикрепляется цифровая подпись — вы выбираете терминологию.Асимметричные ключи, о которых мы упоминали ранее, используются снова, но для подписи, а не для шифрования. Математически подписание включает в себя изменение способа комбинирования данных и ключей (мы не будем слишком углубляться в детали того, как создаются подписи, потому что это быстро усложняется. отличный пост о том, как работают цифровые подписи). Чтобы компьютерам было проще быстро, но при этом безопасно создавать и проверять эти подписи, ЦС сначала хэширует файл сертификата и подписывает полученный хэш.Это более эффективно, чем подписание всего сертификата.
Эта цифровая подпись затем предоставляет необходимое доказательство того, что выданный вам сертификат является точным сертификатом, выданным доверенным центром сертификации данному веб-сайту. Никаких уловок. Никакого спуфинга. Никаких манипуляций посредником с файлом сертификата SSL / TLS.
Цифровые подписи невероятно чувствительны — любое изменение файла приведет к изменению подписи. Если мы возьмем наш пример предложения из предыдущего раздела и сделаем его полностью строчными («быстрая коричневая лиса перепрыгивает через ленивую собаку»), полученный хеш будет совершенно другим.Это означает, что результирующая подпись этого хэша также будет другой. Даже изменение одного бита документа размером в несколько тысяч гигабайт приведет к совершенно другому хешу.
Это делает невозможным для злоумышленника изменение легитимного сертификата или создание поддельного сертификата, который выглядит легитимным. Другой хэш означает, что подпись больше не будет действительной, и ваш компьютер узнает об этом при аутентификации сертификата SSL. Если ваш компьютер обнаружит недействительную подпись, это вызовет ошибку и полностью предотвратит безопасное соединение.
SHA-1 и SHA-2Теперь, когда мы заложили фундамент, мы можем перейти к звезде шоу.
Как я сказал ранее, SHA означает алгоритм безопасного хеширования. SHA-1 и SHA-2 — две разные версии этого алгоритма. Они различаются как по конструкции (как полученный хеш создается из исходных данных), так и по разрядности подписи. Вы должны думать о SHA-2 как о преемнике SHA-1, поскольку это общее улучшение.
В первую очередь люди обращают внимание на длину в битах как на важное различие. SHA-1 — это 160-битный хеш. SHA-2 на самом деле представляет собой «семейство» хэшей различной длины, самая популярная из которых — 256-битная.
Разнообразие хэшей SHA-2 может привести к некоторой путанице, поскольку веб-сайты и авторы выражают их по-разному. Если вы видите «SHA-2», «SHA-256» или «SHA-256 бит», эти имена относятся к одному и тому же. Если вы видите «SHA-224», «SHA-384» или «SHA-512», это относится к альтернативной битовой длине SHA-2.Вы также можете увидеть, что некоторые сайты являются более явными и записывают как алгоритм, так и битовую длину, например «SHA-2 384». Но это все равно, что заставлять людей включать ваш инициал в середине, когда вы произносите свое имя.
Индустрия SSL выбрала SHA в качестве алгоритма хеширования для цифровых подписей
С 2011 по 2015 год основным алгоритмом был SHA-1. Растущее количество исследований, показывающих слабые стороны SHA-1, вызвало переоценку. Фактически, Google даже зашел так далеко, что создал коллизию SHA-1 (когда две части разрозненных данных создают одно и то же хеш-значение) просто для обеспечения.Итак, с 2016 года SHA-2 является новым стандартом. Если вы получаете сертификат SSL / TLS сегодня, должен, как минимум, использовать эту подпись.
Иногда вы будете видеть сертификаты, использующие 384-битный SHA-2. Вы редко встретите 224-битный вариант, который не одобрен для использования с общедоступными сертификатами, или 512-битный вариант, который менее широко поддерживается программным обеспечением.
SHA-2, вероятно, будет использоваться не менее пяти лет. Однако может быть обнаружена некоторая неожиданная атака на алгоритм, которая вызовет более ранний переход.
Вот как выглядит хэш SHA-1 и SHA-2 SSL-сертификата нашего веб-сайта:
Расчет изображения и хэша с MD5File.comИтак, да. В этом вся суета. Может показаться, что это не так уж и много, но цифровые подписи невероятно важны для обеспечения безопасности SSL / TLS.
Более крупный битовый хэш может обеспечить большую безопасность, поскольку существует больше возможных комбинаций. Помните, что одна из важных функций алгоритма криптографического хеширования — это создание уникальных хэшей.Опять же, если два разных значения или файла могут создавать один и тот же хэш, вы создаете то, что мы называем коллизией .
Безопасность цифровых подписей может быть гарантирована только до тех пор, пока не произойдет коллизий. Коллизии чрезвычайно опасны, потому что они позволяют двум файлам создавать одну и ту же подпись, поэтому, когда компьютер проверяет подпись, она может оказаться действительной, даже если этот файл никогда не подписывался.
Сколько хешей?Если предполагается, что алгоритм хеширования генерирует уникальные хэши для каждого возможного ввода, сколько всего возможных хешей существует?
Бит имеет два возможных значения: 0 и 1.Возможное количество уникальных хэшей может быть выражено как количество возможных значений, возведенных в число битов. Для SHA-256 существует 2 256 возможных комбинаций.
Итак, 2 256 комбинаций. Сколько это? Ну это огромное количество. Серьезно. Это посрамляет такие числа, как триллион и септиллион. Это намного превышает количество песчинок в мире.
Чем больше количество возможных хешей, тем меньше вероятность того, что два значения создадут один и тот же хеш.
Существует (технически) бесконечное количество возможных входов [1], но ограниченное количество выходов. Таким образом, в конце концов, каждый алгоритм хеширования, в том числе и безопасный, вызывает коллизию. Но нас больше всего беспокоит, насколько легко это будет сделать. SHA-1 был признан небезопасным, поскольку из-за его размера и конструкции было возможно вызвать столкновение.
Обратите внимание, что большая битовая длина , а не автоматически означает, что алгоритм хеширования создает более безопасные хеш-коды.Построение алгоритма также невероятно важно, поэтому в индустрии SSL используются алгоритмы хеширования, специально разработанные для криптографической безопасности.
Переход к SHA-2В 2015 году отрасль SSL пережила «переход на SHA-2». Это включало повторную выдачу тысяч существующих сертификатов, чтобы можно было создавать новые файлы и подписывать их с помощью SHA-2. Это также включало серьезные обновления программного обеспечения для выдачи сертификатов, которые работают в общедоступных центрах сертификации (их десятки).Как и ожидалось, была небольшая икота.
Крайний срок для выпуска новых SSL-сертификатов с хешами SHA-1 — 31 декабря st , 2015. По большей части отрасль придерживается этого срока. С тех пор было сделано несколько ошибок, и было разрешено несколько особых случаев.
Но за последние три года сертификаты SHA-1 практически исчезли. Сегодня, если вы столкнетесь с сертификатом SHA-1, вы увидите безошибочное предупреждение. Это нарастает.В Google Chrome для всех сертификатов SHA-1, срок действия которых истекает в 2016 году, не отображался зеленый замок в защищенных соединениях, а вместо этого отображался тот же значок, что и при незащищенном HTTP-соединении. Вы можете щелкнуть значок, чтобы получить более конкретную информацию о том, почему он отображается, если есть другие причины, не связанные с подписью.
Если вы сегодня видели сертификат SHA-1 в своем браузере, вот как он будет выглядеть (в Google Chrome). Чтобы увидеть, как эта страница выглядит в вашем браузере, посетите https: // sha1-2016.badssl.comБраузеры обрабатывали подписанные сертификаты SHA-1, срок действия которых истекает в 2017 году, с более строгим предупреждением. Это связано с тем, что безопасность подписи напрямую зависит от того, как долго она действительна.
Теперь, в 2018 году, Google просто казнит владельца сайта и оставляет его труп в качестве предупреждения для других, которые могут осмелиться совершить те же грехи.
Обеспечение безопасности подписейСо временем атаки на криптографию будут улучшаться, а вычислительная мощность компьютеров станет дешевле.Это делает действительную подпись SHA-2 менее безопасной в 2020 году, чем в 2016 году. По этой причине выбор алгоритма будет гораздо более сложным, чем это необходимо немедленно, чтобы краткосрочные улучшения не привели к снижению безопасности. Нет ничего невозможного в том, чтобы конкретный алгоритм хеширования оставался безопасным в течение десяти лет.
Отраслевые эксперты и исследователи безопасности по всему миру постоянно анализируют SHA-2 и другие алгоритмы криптографического хеширования, поэтому будьте уверены, что текущие сертификаты SSL будут иметь надежные и безопасные цифровые подписи на какое-то время.
Это не означает, что криптографы будут просто сидеть и ждать, пока не возникнет проблема. Преемник SHA-2, получивший удобное название SHA-3, уже доработан. Когда пришло время сделать еще один переход, отрасль SSL может использовать SHA-3 в качестве следующего выбора или может обратиться к совершенно другому алгоритму.
Требуются годы, чтобы должным образом исследовать и протестировать новые криптографические стандарты, а затем разработать программное обеспечение, которое их поддерживает. Надеюсь, это обнадеживает, знать, что отрасль всегда как минимум на шаг впереди.
Время от времени нам нравится повторно хешировать наш лучший старый контент в надежде, что он понравится нашим новым читателям. Эта статья, изначально написанная Винсентом Линчем 29 июня 2016 года, была обновлена и отредактирована Патриком Ноэ за 2018 год.
Пошаговое описание работы SHA-256 — Qvault
SHA-2 (алгоритм безопасного хеширования 2), частью которого является SHA-256, является одним из самых популярных алгоритмов хеширования. В этой статье мы разберем каждый шаг алгоритма настолько просто, насколько это возможно, и проработаем реальный пример вручную.SHA-2 известен своей безопасностью (он не ломается, как SHA-1) и своей скоростью. В случаях, когда ключи не генерируются, например, при майнинге биткойнов, часто преобладает быстрый алгоритм хеширования, такой как SHA-2.
Прежде чем мы углубимся, если вы пришли сюда, потому что заинтересованы в более полном и структурированном изучении криптографии, я недавно выпустил бесплатный практический курс программирования «Практическая криптография», где вы можете это сделать. Тем не менее, давайте перейдем к нашему глубокому погружению с SHA-2!
Что такое хеш-функция?
Три из основных целей хеш-функции:
- Для детерминированного шифрования данных
- Для приема ввода любой длины и вывода результата фиксированной длины
- Для необратимого манипулирования данными.Входные данные не могут быть получены из выходных данных.
SHA-2 — очень известное и сильное семейство хэш-функций, поскольку, как и следовало ожидать, оно выполняет все вышеперечисленные цели. Взгляните на нашу статью о хэш-функциях, если вам нужно освежить их свойства.
SHA-2 против SHA-256
SHA-2 — это алгоритм , обобщенное представление о том, как хешировать данные. SHA-256 устанавливает дополнительные константы, которые определяют поведение алгоритма SHA-2. Одна из таких констант — размер вывода.«256» и «512» относятся к их соответствующим размерам выходного дайджеста в битах.
Давайте рассмотрим пример SHA-256.
SHA-256 «привет, мир»; Шаг 1 — Предварительная обработка
- Преобразование «привет, мир» в двоичный:
01101000 01100101 01101100 01101100 01101111 00100000 01110111 01101111
01110010 01101100 01100100
01101000 01100101 01101100 01101100 01101111 00100000 01110111 01101111
01110010 01101100 01100100 1
- Заполняйте нулями, пока данные не станут кратными 512, минус 64 бит (в нашем случае 448 бит):
01101000 01100101 01101100 01101100 01101111 00100000 01110111 01101111
01110010 01101100 01100100 10000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
- Добавьте 64 бита в конец, где 64 бита представляют собой целое число с прямым порядком байтов, представляющее длину исходного ввода в двоичном формате.В нашем случае 88 или в двоичном формате «1011000».
01101000 01100101 01101100 01101100 01101111 00100000 01110111 01101111
01110010 01101100 01100100 10000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 01011000
Теперь у нас есть ввод, который всегда будет делиться на 512 без остатка.
Шаг 2 — Инициализация значений хэша (ч)
Теперь мы создаем 8 хеш-значений. Это жестко запрограммированные константы, которые представляют первые 32 бита дробных частей квадратных корней из первых 8 простых чисел: 2, 3, 5, 7, 11, 13, 17, 19
h0: = 0x6a09e667
h2: = 0xbb67ae85
h3: = 0x3c6ef372
h4: = 0xa54ff53a
h5: = 0x510e527f
h5: = 0x9b05688c
h6: = 0x1f83d9ab
h7: = 0x5be0cd19
Шаг 3 — Инициализация круглых констант (k)
Подобно шагу 2, мы создаем некоторые константы ( Подробнее о константах и о том, когда их использовать, можно узнать здесь, ).На этот раз их 64. Каждое значение (0-63) представляет собой первые 32 бита дробных частей кубических корней первых 64 простых чисел (2 — 311).
0x428a2f98 0x71374491 0xb5c0fbcf 0xe9b5dba5 0x3956c25b 0x59f111f1 0x923f82a4 0xab1c5ed5
0xd807aa98 0x12835b01 0x243185be 0x550c7dc3 0x72be5d74 0x80deb1fe 0x9bdc06a7 0xc19bf174
0xe49b69c1 0xefbe4786 0x0fc19dc6 0x240ca1cc 0x2de92c6f 0x4a7484aa 0x5cb0a9dc 0x76f988da
0x983e5152 0xa831c66d 0xb00327c8 0xbf597fc7 0xc6e00bf3 0xd5a79147 0x06ca6351 0x14292967
0x27b70a85 0x2e1b2138 0x4d2c6dfc 0x53380d13 0x650a7354 0x766a0abb 0x81c2c92e 0x92722c85
0xa2bfe8a1 0xa81a664b 0xc24b8b70 0xc76c51a3 0xd192e819 0xd69 0xf40e3585 0x106aa070
0x19a4c116 0x1e376c08 0x2748774c 0x34b0bcb5 0x391c0cb3 0x4ed8aa4a 0x5b9cca4f 0x682e6ff3
0x748f82ee 0x78a5636f 0x84c87814 0x8cc70208 0x90befffa 0xa4506ceb 0xbef9a3f7 0xc67178f2
Шаг 4 — Цикл фрагментов
Следующие шаги будут выполняться для каждого 512-битного «фрагмента» данных из нашего ввода.В нашем случае, поскольку «hello world» очень короткое, у нас есть только один фрагмент. На каждой итерации цикла мы будем изменять хеш-значения h0-h7, что и будет окончательным результатом.
Шаг 5 — Создание расписания сообщений (w)
- Скопируйте входные данные с шага 1 в новый массив, где каждая запись представляет собой 32-битное слово:
01101000011001010110110001101100 01101111001000000111011101101111
01110010011011000110010010000000 00000000000000000000000000000000
00000000000000000000000000000000 00000000000000000000000000000000
00000000000000000000000000000000 00000000000000000000000000000000
00000000000000000000000000000000 00000000000000000000000000000000
00000000000000000000000000000000 00000000000000000000000000000000
00000000000000000000000000000000 00000000000000000000000000000000
00000000000000000000000000000000 00000000000000000000000001011000
- Добавьте еще 48 слов, инициализированных нулем, так что у нас есть массив w [0… 63]
01101000011001010110110001101100 01101111001000000111011101101111
01110010011011000110010010000000 00000000000000000000000000000000
00000000000000000000000000000000 00000000000000000000000000000000
00000000000000000000000000000000 00000000000000000000000000000000
00000000000000000000000000000000 00000000000000000000000000000000
00000000000000000000000000000000 00000000000000000000000000000000
00000000000000000000000000000000 00000000000000000000000000000000
00000000000000000000000000000000 00000000000000000000000001011000
00000000000000000000000000000000 00000000000000000000000000000000
00000000000000000000000000000000 00000000000000000000000000000000
00000000000000000000000000000000 00000000000000000000000000000000
00000000000000000000000000000000 00000000000000000000000000000000
...
...
00000000000000000000000000000000 00000000000000000000000000000000
- Измените обнуленные индексы в конце массива, используя следующий алгоритм:
- Для i из w [16… 63]:
- s0 = (w [i-15] повернуть вправо 7) xor (w [i-15] rightrotate 18) xor (w [i-15] righthift 3)
- s1 = (w [i- 2] rightrotate 17) xor (w [i- 2] rightrotate 19) xor (w [i- 2] righthift 10)
- w [i] = w [i-16] + s0 + w [i-7] + s1
Давайте сделаем w [16], чтобы увидеть, как это работает:
w [1] повернуть вправо 7:
01101111001000000111011101101111 -> 11011110110111100100000011101110
w [1] повернуть вправо 18:
01101111001000000111011101101111 -> 00011101110110111101101111001000
w [1] сдвиг вправо 3:
01101111001000000111011101101111 -> 00001101111001000000111011101101
s0 = 11011110110111100100000011101110 XOR 00011101110110111101101111001000 XOR 00001101111001000000111011101101
s0 = 11001110111000011001010111001011
w [14] повернуть вправо 17:
00000000000000000000000000000000 -> 00000000000000000000000000000000
w [14] rightrotate19:
00000000000000000000000000000000 -> 00000000000000000000000000000000
w [14] сдвиг вправо 10:
00000000000000000000000000000000 -> 00000000000000000000000000000000
s1 = 00000000000000000000000000000000 XOR 00000000000000000000000000000000 XOR 00000000000000000000000000000000
s1 = 00000000000000000000000000000000
w [16] = w [0] + s0 + w [9] + s1
w [16] = 01101000011001010110110001101100 + 11001110111000011001010111001011 + 00000000000000000000000000000000 + 00000000000000000000000000000000
// сложение вычисляется по модулю 2 ^ 32
w [16] = 00110111010001110000001000110111
Это оставляет нам 64 слова в нашем расписании сообщений (w):
01101000011001010110110001101100 01101111001000000111011101101111
01110010011011000110010010000000 00000000000000000000000000000000
00000000000000000000000000000000 00000000000000000000000000000000
00000000000000000000000000000000 00000000000000000000000000000000
00000000000000000000000000000000 00000000000000000000000000000000
00000000000000000000000000000000 00000000000000000000000000000000
00000000000000000000000000000000 00000000000000000000000000000000
00000000000000000000000000000000 00000000000000000000000001011000
00110111010001110000001000110111 10000110110100001100000000110001
11010011101111010001000100001011 01111000001111110100011110000010
00101010100100000111110011101101 01001011001011110111110011001001
00110001111000011001010001011101 10001001001101100100100101100100
01111111011110100000011011011010 11000001011110011010100100111010
10111011111010001111011001010101 00001100000110101110001111100110
10110000111111100000110101111101 01011111011011100101010110010011
00000000100010011001101101010010 00000111111100011100101010010100
00111011010111111110010111010110 01101000011001010110001011100110
11001000010011100000101010011110 00000110101011111001101100100101
10010010111011110110010011010111 01100011111110010101111001011010
11100011000101100110011111010111 10000100001110111101111000010110
11101110111011001010100001011011 10100000010011111111001000100001
11111001000110001010110110111000 00010100101010001001001000011001
00010000100001000101001100011101 01100000100100111110000011001101
10000011000000110101111111101001 11010101101011100111100100111000
00111001001111110000010110101101 11111011010010110001101111101111
11101011011101011111111100101001 01101010001101101001010100110100
00100010111111001001110011011000 10101001011101000000110100101011
01100000110011110011100010000101 11000100101011001001100000111010
00010001010000101111110110101101 10110000101100000001110111011001
10011000111100001100001101101111 01110010000101111011100000011110
10100010110101000110011110011010 00000001000011111001100101111011
11111100000101110100111100001010 11000010110000101110101100010110
Шаг 6 — Сжатие
- Инициализировать переменные a, b, c, d, e, f, g, h и установить их равными текущим значениям хеш-функции соответственно. 32:
a = 0x6a09e667 = 01101010000010011110011001100111 б = 0xbb67ae85 = 10111011011001111010111010000101 c = 0x3c6ef372 = 00111100011011101111001101110010 d = 0xa54ff53a = 10100101010011111111010100111010 е = 0x510e527f = 01010001000011100101001001111111 f = 0x9b05688c = 10011011000001010110100010001100 г = 0x1f83d9ab = 00011111100000111101100110101011 h = 0x5be0cd19 = 01011011111000001100110100011001 e повернуть вправо 6: 01010001000011100101001001111111 -> 11111101010001000011100101001001 e повернуть вправо 11: 01010001000011100101001001111111 -> 01001111111010100010000111001010 e повернуть вправо 25: 01010001000011100101001001111111 -> 10000111001010010011111110101000 S1 = 11111101010001000011100101001001 XOR 01001111111010100010000111001010 XOR 10000111001010010011111110101000 S1 = 00110101100001110010011100101011 е и е: 01010001000011100101001001111111 & 10011011000001010110100010001100 = 00010001000001000100000000001100 Примечание: 01010001000011100101001001111111 -> 10101110111100011010110110000000 (не е) и г: 10101110111100011010110110000000 & 00011111100000111101100110101011 = 00001110100000011000100110000000 ch = (e и f) xor ((не e) и g) = 00010001000001000100000000001100 xor 00001110100000011000100110000000 = 00011111100001011100100110001100 // k [i] - постоянная округления // w [i] - партия temp1 = h + S1 + ch + k [i] + w [i] temp1 = 01011011111000001100110100011001 + 00110101100001110010011100101011 + 00011111100001011100100110001100 + 1000010100010100010111110011000 + 01101000011001010110110001101100 temp1 = 01011011110111010101100111010100 поворот вправо 2: 01101010000010011110011001100111 -> 11011010100000100111100110011001 поворот вправо 13: 01101010000010011110011001100111 -> 00110011001110110101000001001111 поворот вправо 22: 01101010000010011110011001100111 -> 00100111100110011001110110101000 S0 = 11011010100000100111100110011001 XOR 00110011001110110101000001001111 XOR 00100111100110011001110110101000 S0 = 11001110001000001011010001111110 а и б: 01101010000010011110011001100111 & 10111011011001111010111010000101 = 00101010000000011010011000000101 а и в: 01101010000010011110011001100111 & 00111100011011101111001101110010 = 00101000000010001110001001100010 б и в: 10111011011001111010111010000101 & 00111100011011101111001101110010 = 00111000011001101010001000000000 maj = (a и b) xor (a и c) xor (b и c) = 00101010000000011010011000000101 xor 00101000000010001110001001100010 xor 00111000011001101010001000000000 = 00111010011011111110011001100111 temp2 = S0 + maj = 11001110001000001011010001111110 + 00111010011011111110011001100111 = 00001000100100001001101011100101 h = 00011111100000111101100110101011 г = 10011011000001010110100010001100 f = 01010001000011100101001001111111 e = 10100101010011111111010100111010 + 01011011110111010101100111010100 = 00000001001011010100111100001110 d = 00111100011011101111001101110010 c = 10111011011001111010111010000101 б = 01101010000010011110011001100111 а = 01011011110111010101100111010100 + 00001000100100001001101011100101 = 01100100011011011111010010111001
Все вычисления выполняются еще 63 раза с изменением переменных a-h.Мы не будем делать это вручную, но мы бы закончили с:
h0 = 6A09E667 = 01101010000010011110011001100111 h2 = BB67AE85 = 10111011011001111010111010000101 h3 = 3C6EF372 = 00111100011011101111001101110010 h4 = A54FF53A = 10100101010011111111010100111010 h5 = 510E527F = 01010001000011100101001001111111 h5 = 9B05688C = 10011011000001010110100010001100 h6 = 1F83D9AB = 00011111100000111101100110101011 h7 = 5BE0CD19 = 01011011111000001100110100011001 а = 4F434152 = 001001111010000110100000101010010 б = D7E58F83 = 011010111111001011000111110000011 c = 68BF5F65 = 001101000101111110101111101100101 d = 352DB6C0 = 000110101001011011011011011000000 е = 73769D64 = 001110011011101101001110101100100 f = DF4E1862 = 011011111010011100001100001100010 г = 71051E01 = 001110001000001010001111000000001 ч = 870F00D0 = 010000111000011110000000011010000
Шаг 7 — Измените окончательные значения
После цикла сжатия, но все же внутри цикла chunk , мы изменяем хеш-значения, добавляя к ним соответствующие переменные, a-h.32.
h0 = h0 + a = 10111001010011010010011110111001 h2 = h2 + b = 10010011010011010011111000001000 h3 = h3 + c = 10100101001011100101001011010111 h4 = h4 + d = 11011010011111011010101111111010 h5 = h5 + e = 11000100100001001110111111100011 h5 = h5 + f = 01111010010100111000000011101110 h6 = h6 + g = 10010000100010001111011110101100 h7 = h7 + h = 11100010111011111100110111101001
Шаг 8 — Конкатенация окончательного хэша
И последнее, но не менее важное: пощечину их всех вместе!
дайджест = h0 добавить h2 добавить h3 добавить h4 добавить h5 добавить h5 добавить h6 добавить h7 = B94D27B9934D3E08A52E52D7DA7DABFAC484EFE37A5380EE9088F7ACE2EFCDE9
Готово! Мы прошли каждый шаг (за исключением нескольких итераций) SHA-256 с мельчайшими подробностями 🙂
Я рад, что вы дошли так далеко! Пошаговое выполнение алгоритма SHA-256 — это не совсем прогулка по парку.Однако изучение основ, лежащих в основе веб-безопасности, может стать огромным благом для вашей карьеры компьютерного ученого, так что продолжайте в том же духе!
Псевдокод
Если вы хотите увидеть все шаги, которые мы только что сделали выше, в форме псевдокода, то вот они, прямо из WikiPedia:
Примечание 1. Все переменные представляют собой 32-битные целые числа без знака, а сложение вычисляется по модулю 232. Примечание 2: для каждого раунда существует одна константа раунда k [i] и одна запись в массиве расписания сообщений w [i], 0 ≤ i ≤ 63. Примечание 3: функция сжатия использует 8 рабочих переменных, от a до h Примечание 4: при выражении констант в этом псевдокоде используется правило обратного порядка байтов, и при разборе данных блока сообщений от байтов до слов, например, первое слово входящего сообщения «abc» после заполнения - 0x61626380 Инициализировать хеш-значения: (первые 32 бита дробных частей квадратных корней первых 8 простых чисел 2..19): h0: = 0x6a09e667 h2: = 0xbb67ae85 h3: = 0x3c6ef372 h4: = 0xa54ff53a h5: = 0x510e527f h5: = 0x9b05688c h6: = 0x1f83d9ab h7: = 0x5be0cd19 Инициализировать массив круглых констант: (первые 32 бита дробных частей кубических корней первых 64 простых чисел 2..311): k [0..63]: = 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd69, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 Предварительная обработка (Padding): начать с исходного сообщения длиной L бит добавить один бит '1' добавить K '0' битов, где K - минимальное число> = 0, такое, что L + 1 + K + 64 кратно 512 добавить L как 64-битное целое число с прямым порядком байтов, сделав общую длину постобработки кратной 512 битам Обработайте сообщение последовательными 512-битными блоками: разбить сообщение на 512-битные куски за каждый кусок создать массив расписания сообщений из 64 записей w [0..63] 32-битных слов (Начальные значения в w [0..63] не имеют значения, поэтому многие реализации обнуляют их здесь) скопировать блок в первые 16 слов w [0..15] массива расписания сообщений Расширьте первые 16 слов до оставшихся 48 слов w [16..63] массива расписания сообщений: для меня от 16 до 63 s0: = (w [i-15] правый поворот 7) xor (w [i-15] правый поворот 18) xor (w [i-15] правый сдвиг 3) s1: = (w [i- 2] правый поворот 17) xor (w [i- 2] правый поворот 19) xor (w [i- 2] правый сдвиг 10) w [i]: = w [i-16] + s0 + w [i-7] + s1 Инициализировать рабочие переменные текущим значением хеш-функции: а: = h0 б: = h2 c: = h3 d: = h4 e: = h5 f: = h5 г: = h6 h: = h7 Основной цикл функции сжатия: для я от 0 до 63 S1: = (e правый поворот 6) xor (e правый поворот 11) xor (e правый поворот 25) ch: = (e и f) xor ((не e) и g) temp1: = h + S1 + ch + k [i] + w [i] S0: = (поворот вправо 2) xor (поворот вправо 13) xor (поворот вправо 22) maj: = (a и b) xor (a и c) xor (b и c) temp2: = S0 + maj ч: = г g: = f f: = e e: = d + temp1 d: = c c: = b б: = а a: = temp1 + temp2 Добавьте сжатый фрагмент к текущему хеш-значению: h0: = h0 + a h2: = h2 + b h3: = h3 + c h4: = h4 + d h5: = h5 + e h5: = h5 + f h6: = h6 + g h7: = h7 + h Произвести окончательное хеш-значение (с прямым порядком байтов): дайджест: = хэш: = h0 добавить h2 добавить h3 добавить h4 добавить h5 добавить h5 добавить h6 добавить h7
Другие пояснители хэш-функций
Если вы ищете объяснение другой хеш-функции, мы можем предложить вам
Спасибо за чтение!
Если вы хотите продолжить свою карьеру в сфере ИТ, пройдите наши курсы по информатике
Подпишитесь и напишите нам в Twitter @q_vault, если у вас есть какие-либо вопросы или комментарии, и если мы допустили ошибку, обязательно сообщите нам, чтобы мы могли исправить ее!
Подпишитесь на нашу рассылку, чтобы получить больше статей по программированию
Нравится:
Нравится Загрузка…
Разрушение: алгоритм SHA-256 | Адитья Ананд
Теперь давайте перейдем к той части, где мы используем эти значения для вычисления хэша.
4. Функция сжатия
Итак, основная часть алгоритма хеширования заключается в этом шаге. Весь блок сообщения, который у нас имеет длину nx 512 бит, делится на n блоков по 512 бит, и каждый из этих 512 бит затем проходит через 64 раунда операций, и полученный результат подается в качестве входных данных для следующего раунда. операции.
На изображении выше мы ясно видим 64 раунда операции, выполняемой над 512-битным сообщением. Мы можем заметить, что два входа, которые мы отправляем, — это W (i) и K (i), для первых 16 раундов мы дополнительно разбиваем 512-битное сообщение на 16 частей по 32 бит каждая, но после этого нам нужно вычислить значение для W (i) на каждом шаге.
W (i) = Wⁱ⁻¹⁶ + σ⁰ + Wⁱ⁻⁷ + σ¹ где,
σ⁰ = (Wⁱ⁻¹⁵ ROTR⁷ (x)) XOR (Wⁱ⁻¹⁵ ROTR¹⁸ (x)) XOR (Wⁱ⁻ ¹⁵ SHR³ (x))
σ¹ = (Wⁱ⁻² ROTR¹⁷ (x)) XOR (Wⁱ⁻² ROTR¹⁹ (x)) XOR (Wⁱ⁻² SHR¹⁰ (x))
ROTRⁿ (x) = Круглый правый вращение 'x' на 'n' битов
SHRⁿ (x) = Круговой сдвиг вправо 'x' на 'n' битовЧто ж, теперь у нас есть хорошо зарекомендовавший себя метод создания W (i) для любого Учитывая 64 раунда, давайте погрузимся в то, что происходит в каждом из этих раундов.
Изображение одного «раунда»На изображении выше мы можем точно увидеть, что происходит в каждом раунде, и теперь, когда у нас есть значения и формулы для каждой из выполняемых функций, мы можем выполнить весь процесс хеширования.
Ch (E, F, G) = (E AND F) XOR ((NOT E) AND G)
Ma (A, B, C) = (A AND B) XOR (A AND C) XOR (B AND C)
∑ (A) = (A >>> 2) XOR (A >>> 13) XOR (A >>> 22)
∑ (E) = (E >>> 6) XOR (E >>> 11) XOR (E >>> 25)
+ = сложение по модулю 2³²Это функции, которые выполняются в каждом из 64 раундов, которые выполняются снова и снова n раз
Результат каждого round действует как ввод для следующего раунда, и этот процесс продолжается до тех пор, пока не останутся последние биты сообщения, и результат последнего раунда для nᵗʰ части блока сообщения даст нам результат i.е. хеш для всего сообщения. Длина вывода составляет 256 бит.
Алгоритм хеширования SHA-256 в настоящее время является одним из наиболее широко используемых алгоритмов хеширования, поскольку он еще не был взломан, и хеши вычисляются быстро по сравнению с другими безопасными хэшами, такими как SHA-512. Это очень хорошо известно, но отрасль пытается постепенно перейти к более безопасному протоколу SHA-512, поскольку эксперты утверждают, что SHA-256 может стать уязвимым очень скоро.
Итак, давайте еще раз взглянем на все функционирование алгоритма SHA-256 и позвольте мне объяснить все это в одном длинном абзаце.
Мы вычисляем длину сообщения, которое необходимо хешировать, затем добавляем несколько битов к сообщению, начиная с «1», а остальные равны «0» до тех пор, пока длина сообщения не станет ровно на 64 бита меньше, чем длина сообщения. кратно 512. Мы складываем оставшиеся 64 бита, вычисляя по модулю исходного сообщения 2³². После того, как мы добавим оставшиеся биты, весь блок сообщения может быть представлен как «n x 512» бит. Теперь мы передаем каждый из этих 512 бит в функцию сжатия, т.е.набор из 64 раундов операций, где мы далее делим их на 16 частей по 32 бита каждая. Эти 16 частей по 32 бита каждая действуют как входные данные для каждого раунда операции для первых 16 раундов, а для остальных 48 раундов у нас есть метод расчета W (i). У нас также есть значения по умолчанию для буферов и значения «k» для всех 64 раундов. Теперь мы можем начать вычисление хэшей, поскольку у нас есть все необходимые значения и формулы. Затем процесс хеширования выполняется снова и снова в течение 64 раундов, а затем выход i раунда работает как вход для раунда i + 1.Таким образом, результат операции 64ᵗʰ раунда nᵗʰ представит нам результат, то есть хэш всего сообщения.
Итак, это краткая версия всей операции, выполняемой в алгоритме SHA-256.
Если вам понравилось, пожалуйста, хлопайте в ладоши и давайте сотрудничать. Получить, установить, взломать!
Веб-сайт : aditya12anand.com | Пожертвовать : paypal.me/aditya12anand
Telegram : https://t.me/aditya12anand
Twitter : twitter.com / aditya12anand
LinkedIn : linkedin.com/in/aditya12anand/
Электронная почта : [email protected]Примеры использования хэш-функций или что такое SHA-256? | Махмуд Исламов Суннатович
SHA-256 — хеш-функция. Если вы забыли, что такое хеш-функция:
Хеш-функция принимает данные любой длины в качестве входных и выводит данные фиксированной длины
SHA-256 является членом семейства криптографических хеш-функций SHA-2.Он был разработан NSA (Агентство национальной безопасности. Да, я слышу ваши скептические комментарии, но NSA придумали алгоритмы SHA, когда им действительно нужны были супербезопасные хэш-функции для защиты ваших данных). Красиво звучащее название «SHA» означает алгоритм безопасного хеширования, а 256 означает «256-битный вывод».
SHA-256 — математическая функция, работающая с цифровыми данными. Вычисленный хэш сравнивается с ожидаемым значением хеш-функции для проверки целостности данных. Хеш-функции в общем являются односторонними для Лабиринт Минотавра .Любая часть данных может быть хеширована, но хеш не может привести к входным данным. Есть только один способ.
Несмотря на то, что все члены семейства SHA-2 используют одинаковый подход и алгоритм, основное различие заключается в ограничениях и размерах входных и выходных данных. Это упростит вам жизнь при выборе SHA-2. Например, поскольку SHA-256 работает с 32-битными словами, было бы неплохо реализовать SHA-256 вместо SHA-512.
На высоком уровне SHA-256 работает следующим образом:
- Возьмите входное сообщение и убедитесь, что его длина (в битах) кратна 512 битам.Это делается путем добавления отступа.
- Возьмите переданное сообщение и проанализируйте его на
N
512-битных блоков. - Итерация по всем блокам с шага 2:
- Инициализация расписания сообщений, последовательность из 64 32-битных слов
- Инициализация восьми рабочих переменных
a ... h
с хеш-значениямиH0 ... H7
из предыдущей итерации (для первой итерацииH0 ... H7
инициализируются константами). - Выполните 64 итерации, где рабочие переменные
a... h
повернуты определенным образом. Это сердце хеш-функции. На этом шаге сообщение вставляется в хэш с помощью побитового перемешивания. - Вычислить новые промежуточные хеш-значения
H0 ... H7
какH0 = H0 + a
,h2 = h2 + b
и так далее.
4. Объедините
H0 ... H7
как дайджест сообщения и верните его.Каждая буква имеет значение своей позиции в алфавите. А = 1; B = 2 и т. Д.
для i = 0 до len (word):
h = h + (i + letter_value)И мое имя ed «SHA-256» выглядит так:
Ввод: Махмуд
Хеширование Вывод: 65b0368e0548b37f9dd1b5b2a31529269f554326f9bb330e97b2ce258a6b1794Мне нравится мое имя SHA-256.Может, я поменяю на него свое имя. Посмотрим, какое у вас хешированное имя. Вы можете проверить здесь.
Блокчейн
Каждый блок содержит часть хешированных данных. Сможете угадать, какая хеш-функция используется? ДА, SHA-256 (также используется RIPEMD, но эта статья хвалит SHA-256, пожалуйста, без обид).
Как видите, хеш-значение предыдущего блока используется для вычисления хеш-значения текущего блока. Попытка изменения вызовет цепную реакцию, которую увидят все.Поскольку одна из прелестей хэш-функции — это уникальная функция с односторонним выводом . Удачи в выяснении входных данных или внесении незаметных изменений в блокчейн.
Криптовалюта (Биткойн)
Нет. Блокчейн и биткойн — это не одно и то же. Если вы хотите узнать разницу, пожалуйста.
Итак, как SHA-256 работает с биткойнами? SHA-256 реализован в нескольких аспектах протокола Биткойн: майнинг биткойнов, деревья Меркла и создание адресов биткойнов.Обратимся к майнингу и адресам:
Mining . SHA-256 необходим, когда майнер должен произвести предыдущий параметр хэша блока . Для этого майнер должен следовать формуле:
Хэш предыдущего блока = SHA-256 (SHA-256 (заголовок блока))
Да, верно. Это должно быть «SHA-256», номер , дважды . Вы еще не сошли с ума от его важности?
Создание биткойн-адреса. Ядро биткойн-адреса — это открытый ключ.Открытый ключ должен быть хеширован как RIPEMD160, так и SHA-256. Другими словами:
A = RIPEMD160 (SHA-256 (K))
Длина открытого ключа составляет 256 бит. Хешированная версия открытого ключа, то есть биткойн-адреса, имеет длину 160 бит. Это делает его намного более удобным для пользователей из-за более короткой длины символа или более коротких адресов.
Где A для адреса и K для открытого ключа. Другие варианты использования и подробности можно найти в этой статье.
SSL (Secure Sockets Layer) Сертификаты
Безопасная связь для веб-сайтов и веб-служб основана на файлах, известных как сертификаты. Они используются для установления и аутентификации безопасных соединений. Эти сертификаты содержат криптографические элементы, которые генерируются с использованием таких алгоритмов, как SHA-256. На момент написания этой статьи сгенерированный ключ SHA-256 ни разу не был скомпрометирован, в отличие от его предшественника — SHA-1 (любезно предоставлено Питером Тоддом, который его взломал).
С 31 декабря 2016 года SHA-256 является отраслевым стандартом хэш-функций подписи для веб-сайтов.
Зашифрованное соединение между сервером и веб-браузером также называется «рукопожатие SSL». Благодаря этому подключению информация о кредитной карте, учетные данные и другие конфиденциальные данные защищены. Насколько это безопасно? Во время сеанса все пользовательские данные хешируются с помощью SHA-256. Но что-то мне подсказывает, что вы уже в этом разобрались.
Какое будущее у SHA-256? Где это можно использовать? Оставлю это на ваше усмотрение 😉. Дайте мне знать, когда найдете новый вариант использования этого красивого алгоритма хеширования.
Быстрое ядро хеширования SHA-256 | Microsemi
Описание: Быстрое ядро хеширования SHA-256
Алгоритм безопасного хеширования SHA-256 был разработан Национальным институтом стандартов и технологий (NIST) и описан в FIPS PUB 180-3. Это 32-битный алгоритм, который может использоваться для генерации уникального 256-битного «дайджеста» из входного сообщения произвольной длины, где дайджест представляет собой сжатое, но необратимое представление исходного сообщения, которое может использоваться для определения того, является ли сообщение был изменен в пути.Алгоритм SHA-256 был первоначально разработан для обеспечения согласованной аутентификации для шифрования на основе AES с использованием 128-битного размера ключа. Он предназначен для использования в таких приложениях, как создание и проверка цифровой подписи, а также везде, где требуется проверка целостности данных и аутентификация источника. В частности, SHA-256 определен как компонент набора криптографических алгоритмов Suite B, определенных Агентством национальной безопасности США.
Ядро Helion Fast SHA-256 предназначено для обеспечения функции хеширования сообщений при высоких скоростях передачи данных, занимая при этом лишь умеренную логическую область.Он может обрабатывать как простое хеширование, так и HMAC с ключами (с дополнительной оболочкой HMAC), а также может дополнительно поддерживать выгрузку и перезагрузку состояния на части сообщения, что может быть полезно при работе с фрагментированными данными. Другие ядра в семействе поддерживают хэш-алгоритмы SHA-1 и MD5, а также доступно двухрежимное ядро SHA-1 / SHA-256, где полезна поддержка мульти-хеширования.
Чтобы получить дополнительную информацию или получить это ядро, свяжитесь с Helion Technology Ltd.
- Реализует алгоритм безопасного хеширования SHA-256 в соответствии с публикацией NIST FIPS 180-3
- Быстрая работа — каждый 512-битный блок требует только 66 основных часов цикла
- Поддерживает все текущие семейства устройств Actel Flash и Antifuse
- Использование на 19% в устройстве RTAX1000S / SL
- Использование на 15% в устройстве ProASIC3E A3PE1500
Документы
Fast SHA-256 хэширование 21 Лист данных ядра
21
Fo r дополнительная информация / Чтобы зарегистрировать интерес, нажмите здесь
Что такое SHA-256
Что такое SHA-256
SHA-256 означает алгоритм безопасного хеширования — 256 бит и является разновидностью хеш-функции обычно используется в блокчейне.Этот алгоритм используется в Биткойне и является ключевым компонентом, который заставляет его работать.
Биткойн — это система, состоящая из сетевого протокола, некоторых основных криптографических функций и набора систем теоретического равновесия, которые динамически регулируются. Как и многие технологии, Биткойн не является полностью новым, на самом деле основная идея Биткойна состоит в том, чтобы взять несколько уже существующих технологий и сопоставить их вместе, чтобы создать что-то совершенно новое. Все компоненты, из которых состоит биткойн, существовали примерно за 15 лет до изобретения биткойна.В этой статье мы сосредоточимся на SHA-256.
Чтобы понять, что такое SHA-256, нам нужно понять, что такое хеш-функция. Это довольно сложный предмет, особенно для новичков без образования в области информатики. Но по сути, принципы просты.
Отпечаток для данных
Хэш-функция — это тип математической функции, которая превращает данные в отпечаток этих данных, называемый хешем. Проще говоря, каждый раз, когда вы вводите что-то (это могут быть любые данные, любого размера), SHA-256 смешивает это и будет всегда выводить те же результаты.Но у вас нет возможности предсказать, что выйдет на выходе.
SHA-256 детерминирован
Очевидно, что результат выглядит случайным. Если вы запустите какой-либо статистический анализ на выходе, он будет выглядеть случайным, но это не так. SHA-256 детерминирован. Это означает, что если вы поместите одно и то же сверху, вы всегда получите тот же результат внизу. Всегда.
Это означает, что если у вас есть этот отпечаток пальца, и кто-то дает вам фрагмент данных. Вы можете ввести данные в качестве входных, проверить отпечаток пальца, и вы узнаете, применили ли к нему ша-256.Таким образом, его можно использовать для подтверждения определенного набора данных.
echo -n привет | shasum -a 256 сгенерировать отпечаток пальца 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 — Вы можете попробовать сами! Откройте свой терминал и введите: всегда строка «привет»Роль SHA-256 в биткойнах
В биткойн-транзакции в заголовке транзакции есть случайное число, которое называется Nonce . Майнеры в сети должны найти это Nonce, используя его отпечаток пальца, и единственный способ найти Nonce — это произвести квадриллионы операций хеширования.И для выполнения этих операций они должны использовать очень важный драгоценный ресурс: энергию.
Этот алгоритм лежит в основе биткойна, он используется для защиты сети с помощью proof-of-work . Итак, просто взглянув на отпечаток пальца, я точно знаю, что майнеру пришлось потратить много электроэнергии. Это означает, что у майнеров были финансовые затраты, и это действительно важно для безопасности сети биткойнов.