Keccak алгоритм: Алгоритм SHA-3 / Хабр

Содержание

Алгоритм SHA-3 / Хабр

Что такое хеш-функция?

В настоящее время информационная безопасность стала неотъемлемой частью любых цифровых операций. Ключевой роль в защите информации играет понятие криптографической функции. Криптографические хеш-функции — это выделенный класс хеш-функций, который имеет определённые свойства, делающие его пригодным для использования в криптографии.

Преобразование, производимое хеш-функцией, называется хешированием. Исходные данные называются входным массивом, «ключом» или «сообщением». Результат преобразования (выходные данные) называется «хешем», «хеш-кодом», «хеш-суммой».

Иными словами, хеш-функция — это вычислительный метод, который может отображать неопределенный размер данных в фиксированный размер данных. Или, проще говоря, преобразование выводит числовое значение, которое характеризуется входными данными. Криптографическая хэш-функция использует необратимые (односторонние) математические функции, чтобы сгенерировать хеш-значение из входных данных. Одним из распространенных способов генерации криптографических хешей является использование блочных шифров.

К надежным с точки зрения криптографии хеш-функциям должны быть предъявлены следующие основные требования:

  1. Хеш-функция должна представлять из себя одностороннюю функцию т.е. по образу (хешу) невозможно или почти невозможно найти исходный прообраз (сообщение).

  2. Функция хеширования должна быть устойчива к коллизиям. Коллизия – это пара исходных сообщений, имеющая одинаковое выходное значение. Считается, что относительно быстрое нахождение коллизии в алгоритме хеширования делает подобный алгоритм ненадёжным с точки зрения криптоанализа.

Перейдем к подробному рассмотрению одного из самых безопасных и эффективных алгоритмов хеширования на сегодняшний день.

Что из себя представляет SHA-3?

SHA-3 является важным криптографическим алгоритмом для обеспечения информационной безопасности, а также целостности данных в цифровых операциях. Недавние безопасные хеш-алгоритмы, включая MD5, RIPEMD, SHA-0, SHA-1 и SHA-2 устарели и были признаны восприимчивыми к атакам различного рода.

SHA-3 (Keccak) – алгоритм хеширования переменной разрядности, разработанный группой во главе с Йоаном Дайменом в 2012 году. 5 августа 2015 года алгоритм утверждён и опубликован в качестве стандарта FIPS 202. Keccak был выбран в качестве официального алгоритма для SHA-3 в 2012 году. [1] Keccak основан на конструкции Sponge (Губка), которая является новым способом проектирования хеш-функций, помимо стратегии итерационного метода Меркла — Дамгора, реализуемой в MD(x).

Алгоритмы MD(x) основаны на методе вычислений в цикле с использованием простых логических операций типа OR, XOR, AND, NOT. поэтому становится возможным построение коллизий с одинаковым, заранее выбранным префиксом. Однако, как показало время алгоритмы MD(x) перестали быть безопасными из-за программ, способных находить коллизии за сравнительно небольшое время.

Губка — это итеративная конструкция для создания функции с произвольной длиной на входе и произвольной длиной на выходе на основе преобразований перестановки.

Алгоритм получения выходного значения хеш-функции с помощью алгоритма SHA-3 можно разделить на несколько этапов:

1 этап: Дополнение

Этот начальный шаг аналогичен многим алгоритмам хеширования. Прежде чем мы сможем начать хешировать наше сообщение, мы должны убедиться, что оно имеет стандартную длину (добиваемся определенной кратности), и для этого мы выполняем процесс дополнения.

Прежде чем приступить, нужно узнать, каков стандартный размер, которому стоит соответствовать, и для этого рассмотрим, как Keccak вычисляет размер состояния.

Для SHA-3 значение l принимается равным 6. Чем больше размер, тем выше безопасность, которую он обеспечивает. Теперь, основываясь на значении «», мы также решаем, сколько вычислительных раундов необходимо выполнить для каждой части дополненного сообщения.



Теперь мы знаем, что для SHA-3 размер состояния будет равен 1600 битам, а количество раундов вычислений — 24.

Возвращаясь к дополнению, нам нужно добавить биты к сообщению в зависимости от длины хеша, который предстоит вычислить.

Дополнение должно быть сделано таким образом, чтобы длина дополненного сообщения была кратна «» для соответствующей хэш-функции.

Первый и последний бит заполнения будут ‘1″, а все биты между ними «0». После заполнения они делятся на » » частей, где эквивалентно длине дополненного сообщения. Математически это можно представить в следующем виде:




2 этап: Размер состояния

Сумма значений ‘ ‘ и ‘ ‘ всегда будет равна 1600, что продемонстрировано в таблице.

Теперь понятно, что длина дополненного сообщения точно кратна «» в зависимости от нужной длины хеша.( делится на блоков длины : )

Размер части состояния, который записывается и считывается, называется «скоростью» (англ. rate) и обозначается , а размер части, которая нетронута вводом / выводом, называется «емкостью» (англ. capacity) и обозначается .

Далее алгоритм можно условно разделить на две условные части: “впитывание” и “отжимание”.

3 этап: Функция впитывания

Каждый блок дополняется нулями до строки длины бит и суммируется по модулю 2 со строкой состояния аналогичной длины . Перед началом работы функции все элементы равны нулю. Для каждого следующего блока состояние — строка, полученная применением функции перестановок к результату предыдущего шага.

Рассмотрим более подробно функции перестановок. Функция перестановок, используемая в SHA-3, включает в себя исключающее «ИЛИ» (XOR), побитовое «И» (AND) и побитовое отрицание (NOT). Функция определена для строк длины-степени 2. Состояние можно представить в виде трёхмерного массива размером .

Тогда элемент массива будет размером строки состояния

Внутри функции мы выполняем один и тот же набор из пяти операций в течение двадцати четырех раз.

На каждом шаге обозначим входной массив выходной массив :

Шаг :

Для всех и таких, что , положим



Для всех таких что :

Шаг :

Для всех , таких, что
Пусть в начале . Для от 0 до 23:

  1. Для всех таких, что

Шаг :

Для всех , таких, что

Шаг :

Для всех , таких, что ,

Шаг :

Введем дополнительную функцию , где вход-целове число

Алгоритм :

  1. Если , то возвращается 1

  2. Пусть

  3. Для от 1 до 255:

  4. Возвращается

Алгоритм :

-номер раунда

  1. Для всех , таких, что

  2. Пусть — массив длинны , заполненный нулями

  3. Для от 0 до :

  4. Для массива в стороку длины

Алгоритм перестановок:
  1. Перевод строки в массив

  2. Для от до

  3. Перевод массива в строку длины

4 этап: Функция отжимания

Пока длина меньше ( — количество бит в результате хеш-функции), к длине добавляется первых бит состояния после каждого прибавления к применяется функция перестановок . Затем происходит обрезается до длины бит.

Строка длины бит возвращается в качестве результата

Криптоустойчивость SHA-3

Семейство хеш-функций Keccak было подвергнуто интенсивному криптоанализу с момента его представления на конкурс SHA-3 в 2008 [5]. В 2012 году Национальный институт стандартов и технологий США выбрал Keccak победителем конкурса SHA-3. Семейство SHA-3 состоит из четырех криптографических хэш-функций c фиксированным размером хеша и двух расширяемых выходных функций (XOFs) с именами SHAKE128 и SHAKE256, каждая из которых основана на экземпляре алгоритмов Keccak.

Подробно сосредоточимся на коллизиях семейства Keccak, то есть на поиске двух разных исходных сообщениях, дающих разное значение хеша. Лучшие предыдущие практические атаки столкновений на семейство Keccak-это Keccak -224 и KECCAK -256, уменьшенные до 4 раундов, найденных Dinur l.[3] в 2012 году и позже представлен в журнальной версии [4]. После этого теоретические результаты улучшились до 5-раундового KECCAK -256. 80 единичных вычислений для коллизий и прообразов соответственно. Здесь количество вычислений значительно ниже, чем у основных 4 экземпляров SHA-3, однако это количество остается вне досягаемости текущего вычислительного ресурса. Теоретические результаты были найдены Dinur l. против KECCAK -256 со сложностями с использованием обобщенных внутренних дифференциалов. Насколько известно, это остается единственным результатом атаки коллизиями против SHA-3, уменьшенным до 5 раундов на сегодняшний день.

Теоретическая оценка результатов по поиску коллизий на сервере с 32 ядрами процессоров AMD. Таблица взята из источника [2]

Теперь перейдем к рассмотрению алгебраических методов для установки атак прообразов на несколько вариантов Keccak, основанных на свойствах χ шага и линейных перестановок . Атаки прообраза на SHA-3 одинаковы, за исключением того, что временная сложность может быть на больше из-за двух дополнительных битов заполнения. В общем случае здесь мы находим прообразы сообщения длиной бита, устанавливая -й бит входного состояния равным 1, так что дополненное сообщение

представляет собой один блок, за исключением, когда степень свободы несоответствующая. Нужно выбрать сообщение таким образом, чтобы состояние первых нескольких раундов удовлетворяло линейным структурам, представленным в разделе 4, а последнего раунда инвертируется методами.

Для достижения наименьшей из возможных временных сложностей (время поиска) будем использовать различные линейные структуры и методы инвертирования для каждой вариации Keccak. Стоит обратить внимание, что первые биты входного сигнала Keccak-f могут быть выбраны произвольно (Выбрав соответствующие значения битов сообщения).

Однако последние биты не могут быть выбраны, так как не предусмотрено добавления битов сообщения, поэтому допускается выбирать только “переменные” линейных структуры из первых битов . Именно поэтому стоит использовать разные линейные структуры для различных примеров.

Основная идея атак состоит в том, чтобы установить и решить линейные уравнения. Сложность в этом разделе измеряется количеством решений для линейной системы уравнений.

Далее последует представление атак прообразов, в зависимости от выбора линейных структур и способы инвертирования Sbox с последующим анализом сложности. Основная идея подобных атак состоит в том, чтобы установить и решить соответствующие системы линейных уравнений.

SHAKE128 -это экземпляр стандарта SHA-3, определенного из Keccak , с неограниченной выходной длиной (SHA3-X в табл 1) Рассмотрим атаку прообраза на SHAKE128 , обозначаемой далее SHAKE128 для простоты.

Данные взяты из источника [7]

Устанавливаем с =0,2 и =0,1,2,3 в качестве переменных и накладываем некоторые условия на входные биты таким образом, чтобы все выходные биты после двух раундов были линейными, как показано на рис. 10. устанавливается на любую константу, такую что является исходным сообщением. Полосы серого и светло-серого цветов заданы только единицами и нулями. Чтобы убедиться, что все выходные биты после двух раундов являются линейными, потребуется:

Данные взяты из источника [7]

Все эти 6×64 линейных уравнения линейно независимы и, таким образом, имеют решений. Полагаем, что существует одно решение, соответствующее заданному 128-битному хеш-значению.

Поскольку мы имеем 64 вероятностных уравнения, общая вероятность этой системы равна . Вполне можно ожидать правильного решения от таких систем, которое может быть получено путем изменения значений . Таким образом, сложность этой атаки составляет

Заключение

В целом результаты по поиску коллизий и описанная атака прообраза показывают, что на сегодняшний день алгоритм SHA-3 / Keccak является одним из самых безопасных и эффективных алгоритмов хеширования. Некоторые утверждают, что он не будет взломан в ближайшие 20-30 лет. Развитие в мире квантовых вычислений может сократить эти временные рамки, но пока что данный алгоритм все еще один из лучших алгоритмов хеширования, который человечество имеет на данный момент.

Keccak (SHA-3) — Recbit info

С 2007 по 2012 год Национальный институт стандартов и технологий США провел тест ряда алгоритмов хеш-функций. Это было нужно для принятия нового стандарта SHA – Secure Hash Algorithm. После долгих тестов различных алгоритмов новый, третий, стандарт был принят в октябре 2012 году. Им стал алгоритм Keccak, который читается как «кечак».

Хеширование и алгоритм Keccak

Хеширование – это технология, которая позволяет сжимать массивы данных до одной строки, делая ее индивидуальной. Иными словами, если человек сжал свои данные через алгоритм хеширования, то он получит более сжатую версию исключительно своих данных. В самой IT-сфере хеширование используется для уменьшения времени сравнения двух массивов данных.

Такие алгоритмы используют в IT-сфере с 1995 года, и когда они устаревают, создают или ищут новые. Keccak – это третий алгоритм, который был официально утвержден Национальным институтом стандартов и технологий США. Первый алгоритм был принят в 1995 году, второй – в 2002 году, и третий победил в конкурсе тесов в 2012 году.

Keccak работает по принципу губки. Работа алгоритма может быть описана в двух процессах:

  • Абсорбация;
  • Отжатие.

Абсорбация – это процесс ввода и сжатия массива данных. При этом владелец данных должен выбрать для них формацию – 224, 256, 384 или 512 бит на выходе. Опираясь на выбранную формацию, алгоритм столько раз произведет замену функции в массиве данных, как бы сжимая их до указанного размера.

Отжатие – это получение хеш-значения базы данных. Хеш-значение соответствует выбранной формации.

Реализуются абсорбация и отжатие с помощью специальных кодов, которые можно приобрести на сайте разработчиков алгоритма.

Keccak и майнинг

Майнинг – сравнительно новый процесс в IT-сфере, и потому ему свойственно искать новые выходы среди программ новейшего типа. Одной из таких стал алгоритм Keccak. Оказалось, благодаря нему можно не только сжимать огромные массивы данных до одной строки, но также и вполне успешно заниматься майнингом.

Делать это можно, используя настраиваемые переменные: размер блока данных и хеш-значения, количество отсечений функции. Использовать кечак нужно в сочетании с графической видеокартой, потому что это делает процесс в разы эффективнее.

Для успешной совместной работы алгоритма майнинга и видеокарты нужно подобрать хорошую видеокарту. Идеально для майнинга на кечаке подойдут видеокарты GeForce GTX 1080, Gigabyte GTX 1080, MSI GTX 1080. Также отлично подойдут видеокарты из коллекционных изданий. Первые можно приобрести по доступным ценам в магазинах электроники, вторые – вряд ли возможно достать.

С помощью алгоритма Keccak можно майнить такие криптовалюты, как: Nexus (NXS), Quark (QRK), SmartCash (SMART), Maxcoin (MAX), CreativeChain (CREA).

В майнинге криптовалют на данном алгоритме успешно используются графические процессоры. Ниже мы приведем мощности некоторых актуальных моделей видеокарт для SHA-3 на Windows-64.

 

 

 

 

 

Keccak — отличный выбор для стандарта SHA-3.

Алгоритмы / Хэш-функция SHA-3. SHA-3 (Secure Hash Algorithm Version… | by Dtechlog | dtechlog

SHA-3 (Secure Hash Algorithm Version 3), также именуемый Keccak (Кечак), представляет собой однонаправленную функцию для создания цифровых отпечатков выбранной длины (в стандарте приняты 224, 256, 384 или 512 бит) из входных данных любого размера, разработанным группой авторов во главе с Йоаном Дайменом в 2008 году и принятым в 2015 в качестве нового стандарта FIPS. Алгоритм работает посредством функции перемешивания со сжатием до выбранного размера “криптографической губкой“.

Оригинальный алгоритм Keccak имеет множество настраиваемых параметров (размер блока данных, размер состояния алгоритма, количество раундов в функции f и другие)с целью обеспечения оптимального соотношения криптостойкости и быстродействия для применения на выбранной платформе.

Версия алгоритма SHA-3, имеет несколько отличий от оригинального алгоритма Keccak:

  • отброшены медленные режимы c=768 и c=1024
  • упрощён алгоритм заполнения
  • введены «функции с удлиняемым результатом» (XOF, Extendable Output Functions) SHAKE128 и SHAKE256, для чего хешируемое сообщение стало необходимо дополнять «суффиксом» из 2 или 4 бит, в зависимости от типа функции.

Основой функции сжатия алгоритма является функция f, выполняющая перемешивание внутреннего состояния алгоритма. Состояние A представляется в виде массива 5×5, элементами которого являются 64-битные слова, инициализированные нулевыми битами (размер состояния составляет 5*5*64=1600 битов), инициализируются временные массивы B (5*5*64 бит), C и D (5*64 бит). Функция f выполняет 24 раунда, в каждом из которых производятся следующие операции с индексами массива по модулю 5 и наложение операцией XOR раундовой константы на слово A[0, 0]:

C[x] = A[x, 0] + A[x, 1] + A[x, 2] + A[x, 3] + A[x, 4], x = 0…4;
D[x] = C[x — 1] + (С[x + 1] >>> 1), x = 0…4;
A[x, y] = A[x, y] + D[x], x = 0…4, y = 0…4;
B[y, 2x + 3y] = A[x, y] >>> r[x, y], x = 0…4, y = 0…4;
A[x, y] = B[x, y] + (~B[x + 1, y] & B[x + 2, y]), x = 0…4, y = 0…4.

Где:

r — массив, определяющий величину циклического сдвига для каждого слова состояния;
~x — поразрядное дополнение к x;

P — входные блоки, Z — выход алгоритма

Перед выполнением функции сжимания накладывается операция XOR фрагментов исходного сообщения с фрагментами исходного состояния. Результат обрабатывается функцией f. Данное наложение в совокупности с функцией сжимания, выполняемые для каждого блока входных данных, представляют собой «впитывающую» (absorbing) фазу криптографической губки. Результирующее хеш-значение вычисляется в процессе выполнения «выжимающей» (squeezing) фазы криптографической губки, основу которой также составляет описанная выше функция f.

Keccak принят в качестве нового стандарта шифрования SHA-3

Новая обучающая игра для мобильных устройств, выпущенная «Лабораторией Касперского» в рамках программы повышения осведомленности о проблемах ИБ, построена как квест. Главный персонаж — человек ближайшего будущего, который стремится сохранить здоровый баланс между работой и личной жизнью.

Недавний опрос, проведенный Kaspersky среди специалистов по ИТ и ИБ, показал, что тренинги по кибербезопасности проводят лишь 32% организаций, и две трети из них результатами недовольны. Сотрудники зачастую неохотно принимают участие в таких мероприятиях и после прохождения курса продолжают действовать так же, как и до обучения.

Квест [Dis]connected (PDF) призван доказать, что безопасное поведение влияет не только на трудовую деятельность, но и на повседневную жизнь. Продолжительность игры — один час, за это время геймер проживает один день (24 часа) в будущем, где есть супермены, подводные дома и смарт-помощники, умеющие готовить завтрак.

 

В ходе игры пользователю предлагают решить 24 кейса, затрагивающие такие темы, как пароли и учетные записи, электронная почта, просмотр веб-страниц, социальные сети и мессенджеры, безопасность ПК и мобильных устройств. История заканчивается по-разному в зависимости от принятых решений; пользователю выводится отчет об успехах в трудовой и личной жизни, а также оценка знаний и навыков, связанных с ИБ.

«Игра с увлекательным сюжетом посвящена выборам и дилеммам современного мира, — комментирует Денис Баринов, руководитель Академии Касперского. — Должны ли мы использовать новейшие технологии в своих интересах, даже если они создают дополнительные риски для безопасности? Или мы должны отказаться от них ради безопасности и снизить эффективность нашей работы? Принятие подобных решений в ходе игры не только поможет игрокам понять, как безопасно использовать технологии, но и лучше осознать, как кибербезопасность переплетается с их повседневными задачами и как она на самом деле влияет на их жизнь».

Разработчики надеются, что игра послужит хорошим дополнением к традиционным программам обучения. Ее можно использовать для закрепления знаний и навыков сотрудников, а также в городских и общенациональных проектах — для повышения осведомленности граждан.

На данный момент [Dis]connected доступна только корпоративным клиентам. Бесплатная демоверсия уже загружена в App Store и Google Play.

Разбор

: Алгоритм SHA-3. Заглядываем под капот и… | Адитья Ананд

Алгоритм SHA-3 можно условно разделить на две разные части: поглощающую часть и сжимающую часть. Функция поглощения — это первая часть двух основных шагов функции SHA-3.

Причина, по которой мы называем ее функцией поглощения, заключается в том, что в первой части алгоритма Кекчака мы принимаем все значения дополненного сообщения, которое мы уже разбили на n частей, и потребляем их одно за другим, чтобы получить вывод в конце.

Способ, которым мы это делаем, заключается в том, что мы передаем дополненные сообщения длиной «r» в функцию поглощения. Мы начинаем с операции по модулю между P₀ и «r», начальное значение «r» — все «0» бит. Как только операция по модулю выполнена, мы передаем значение функции, с которой начинается фактическая функция поглощения.

Внутри функции мы выполняем один и тот же набор из пяти операций снова и снова двадцать четыре раза. Когда все раунды завершены, мы разделяем биты «r» и «c», а затем снова выполняем операцию по модулю, и функция начинается снова.

Давайте посмотрим на псевдокод пяти функций: —

θ (тета): Псевдокод

 для x в 0…4 
C[x] = A[x,0 ] xor A[x,1] xor A[x,2] xor A[x,3] xor A[x,4], для x в диапазоне 0…4
D[x] = C[x-1] xor rot (C[x+1],1), для (x,y) в (0…4,0…4)
A[x,y] = A[x,y] xor D[x]

ρ (rho) и π (pi): Псевдокод

 для (x,y) в (0…4,0…4) 
B[y,2*x+3*y] = rot (A[x,y], r[x,y]),

χ (chi) : Псевдокод

 для (x,y) в (0…4,0…4) 
A [x,y] = B[x,y] xor ((не B[x+1,y]) и B[x+2,y])

ι (йота) : псевдокод

 A[0,0] = A[0,0] xor RC 

Мне было бы сложно объяснить эти функции словами, поэтому я привел псевдокод с сайта команды Keccak. Прочитайте их статьи, чтобы лучше понять всю концепцию.

Эти пять функций выполняются снова и снова 24 раза. После завершения 24 раундов вычислений мы получаем 1600 бит, которые затем разделяем в зависимости от длины битов «r» и «c», и процесс продолжается.

4. Функция сжатия

Функция сжатия начинается сразу после того, как мы достигли конца функции поглощения. Мы называем это функцией сжатия, так как на этом этапе мы извлекаем наше хеш-сообщение.Способ, которым мы его извлекаем, чрезвычайно прост и понятен.

Функция сжатия

При вычислении хэша мы уже знаем выходную длину хэш-значения, которая может быть 224, 256, 384 или 512. После завершения функции поглощения мы получаем окончательную длину вывода 1600 бит. Мы разделяем вывод на основе длины битов «r» и «c» в зависимости от хеш-значения, которое мы пытаемся вычислить, что приводит нас к нашему выводу.

Теперь, когда у нас есть значения для ‘r’ и ‘c’, мы затем извлекаем первые несколько битов из ‘r’ в зависимости от алгоритма хеширования, поэтому для алгоритма SHA3-256 мы извлечем первые 256 бит из 1088 битов ‘r’, а для SHA3–512 мы извлечем первые 512 битов из 576 битов ‘r’. Значение, извлекаемое из первых битов «r», является хэшем всего сообщения.

Алгоритм SHA-3 / Keccak является одним из самых безопасных и эффективных алгоритмов хеширования, и некоторые утверждают, что его не взломают в ближайшие 20-30 лет. Развитие в мире квантовых вычислений может сократить этот срок, но это по-прежнему один из лучших алгоритмов хеширования, которые у нас есть прямо сейчас.

Итак, давайте еще раз взглянем на всю работу алгоритма SHA-3 и позвольте мне объяснить все в одном длинном абзаце.

Нашим первым шагом, как всегда, является вычисление длины сообщения, а затем выполнение процесса заполнения, в зависимости от длины хеша, которую мы выбираем. Биты заполнения, которые мы добавляем к сообщению, начинаются и заканчиваются на «1». и все биты между ними равны «0». Как только заполнение завершено, мы разбиваем его на «n» блоков, каждый из которых имеет длину «r», значение «r» снова будет зависеть от длины хэша. Дополненные биты начинаются с P₀, затем с P₁ до Pₙ-₁. Мы начинаем с P₀, для которого мы сначала выполняем операцию по модулю с «r», который изначально равен «0».Как только операция по модулю завершена, мы начинаем 24 раунда, каждый раунд состоит из этих пяти функций θ , ρ , π , χ и ι . и после всех этих раундов у нас есть следующие 1600 битов, которые мы затем разделяем на биты «r» и «c» в зависимости от длины хэша. Это вычисление из 24 раундов происходит n раз в функции поглощения, а затем мы достичь функции сжатия. С самого начала мы знаем длину вывода при выполнении хеширования, поэтому мы извлекаем это точное количество битов из «r», и это наше полное хэш-значение.

Итак, это краткая версия всей операции, выполняемой в алгоритме SHA-3.

Если вам понравилось, хлопайте в ладоши и давайте сотрудничать. Получить, установить, взломать!

Веб-сайт : aditya12anand.com | Пожертвовать : paypal. me/aditya12anand
Telegram : https://t.me/aditya12anand
Twitter : twitter.com/aditya12anand
LinkedIn : linkedina2001an3/e10013/adity почта : [email protected]

Алгоритм NIST SHA-3 (Keccak) — IP-ядра

SHA-3, первоначально известная как Keccak [1], представляет собой криптографическую хэш-функцию, выбранную победителем

конкурса хеш-функций NIST [2]. Из-за успешных атак на MD5, SHA-0 и теоретических атак
на SHA-1 NIST почувствовал потребность в альтернативном, непохожем криптографическом хеше
, который стал SHA-3 [3].

NIST требует, чтобы алгоритмы-кандидаты поддерживали как минимум четыре различных длины вывода {224 256 384 512}
с соответствующими уровнями безопасности [4].«SHA-3 512», в котором длина вывода составляет 512 бит,
имеет самый высокий уровень безопасности среди всех вариантов SHA-3.

В этом проекте реализована хэш-функция «SHA-3 512».

В этом проекте реализовано два ядра, одно (высокопроизводительное) ядро, предназначенное для работы на высокой тактовой частоте
(150 МГц), предназначенное для ASIC или дорогих FPGA (Virtex 6),
другое (низкопроизводительное) ядро, предназначенное для работы на низкой тактовой частоте (100 МГц)
предназначен для дешевых FPGA (Spartan 3). Поскольку во многих системах тактовая частота
фиксирована для всего чипа, поэтому, даже если хеш-ядро может достигать высокой частоты, оно должно работать на
на более низкой частоте [5].

Код не зависит от производителя FPGA, он полностью оптимизирован, использует только один тактовый домен
, не использует защелки.

[1] Guido Bertoni, Joan Daemen, Michaël Peeters и Gilles Van Assche,
«Семейство губчатых функций Keccak: сводка спецификаций»,
http://keccak.noekeon.orgspecs_summary.html

[2] «NIST Selects Победитель конкурса алгоритмов безопасного хэширования (SHA-3)»,
NIST. Октябрь 2012 г.
http://www.nist.gov/itl/csdsha-100212.cfm

[3] «SHA-3»,
Википедия, бесплатная энциклопедия,
http://en.wikipedia.org/wikiSHA3

[4] «Объявление запроса на номинацию алгоритмов-кандидатов для нового семейства криптографических хеш-алгоритмов (SHA-3)»,
Уведомления Федерального реестра 72 (2007 г.), №. 212, 62212–62220.

http://csrc.nist.gov/groups/ST/hashindex.html

[5] Обзор реализации Keccak, версия 3.2,
http://keccak.noekeon.orgKeccak-implementation-3.2.pdf

Документ

Версия документа 0.1

Результат синтеза

 

Программное обеспечение для синтеза — Xilinx ISE версии 14.4.

Ядро с низкой пропускной способностью было синтезировано для очень дешевого Spartan 3 (XC3S5000-4FG900).

Количество ломтиков: 2 321
Количество срезных триггеров: 2 346
Количество 4 входных LUT: 4 499
Количество приклеенных IOB: 552
Количество GCLK: 1
Максимальная частота: 117. 3 МГц

,

Высокопроизводительное ядро ​​было синтезировано для дорогого Virtex 6 (XC6VLX240T-1FF1156).

Количество регистров слайсов: 2 220
Количество фрагментов LUT: 9 895
Количество полностью используемых пар LUT-FF: 1 673
Количество приклеенных IOB: 585
Количество BUFG/BUFGCTRL: 1
Максимальная частота: 188.9 МГц

,

Пропускная способность

 

Ядро с низкой пропускной способностью: 2,4 Гбит/с при тактовой частоте 100 МГц.

Высокопроизводительное ядро: 7,2 Гбит/с при тактовой частоте 150 МГц.

Лицензия

Этот проект находится под лицензией Apache License, версия 2.

SHA-3 (Keccak) уже сломан?


На днях мне нужно было добавить поддержку SHA-3 (Keccak) в проект в для обеспечения взаимодействия с некоторыми другими приложениями. я на самом деле хотел добавить поддержку SHA-3, когда он впервые вышел прежде чем я нашел для него конкретное применение, но в то время я посмотрел на некоторые образцы кода, и это выглядело слишком запутанным. Однако при поиске для примеров кода на днях я нашел несколько более простых реализации, которые были достаточно ясны, чтобы я мог понять, как это сработало, и я написал свою собственную реализацию.

я реализовал более дюжины алгоритмов хеширования, по причинам, которые я не буду здесь описывать. Один преимуществом этого является то, что я могу получить приличное понимание того, как он работает внутри, поэтому я могу быть знаком с его плюсами и минусами.В настоящее время понимание того, как работает SHA-3 (Keccak), и сравнение его с некоторыми другие хэш-алгоритмы, я на самом деле несколько потрясен тем, что я видеть.

Хэш-свойства Обзор

Алгоритмы криптографического хэширования (например, семейство алгоритмов безопасного хеширования) берут файл, документ или какой-либо другой набор данных и создать серию фиксированного размера байтов для описания данных. Обычно от 20 до 64 байт. Предполагается, что эти хэши резко изменятся, если хотя бы один бит изменяется во входных данных, которые хэшируются.Они также предполагается, что вычислительно сложно производить данные таргетинг на определенный хэш. 1) Так и должно быть слишком сложно создать два документа с одинаковым хешем. Этот гарантирует, что если сторона A покажет стороне B документ и доставит их утвердить хэш документа в каком-то белом списке или подписи, что сторона A не может использовать другой документ против белого списка B или подпись, которая теперь также утверждается без согласия Б.

2) Что если некий набор данных внесен в белый список или подписан стороной, что было бы слишком сложно создать другой набор данных, который соответствует хэшу из белого списка или подписанному хэшу.

Эти два свойства действительно похожи. Единственная разница заключается в том, таргетируете ли вы ранее существовавший хеш, который существует где-то, или генерирующий два разных наборы данных, которые могут иметь любой хеш, если они идентичны.

Если первый свойство неприменимо для алгоритма хеширования, оно все еще может быть можно использовать в случаях, когда вы не принимаете данные, сгенерированные третье лицо, но только подтверждающее ваше собственное. Если второе свойство неприменимо, могут быть некоторые случаи использования, когда хэш алгоритм может быть использован, особенно если только определенное подмножество хэшей могут иметь данные, сгенерированные против них, которые совпадают.Однако, если либо свойство не выполняется, вы обычно должны использовать какой-то другой хэш-алгоритм, а не полагаться на то, что сломано.

Классический Разработка алгоритма криптографического хеширования

Хэш на десятилетия алгоритмы в основном делали следующее:

  1. Инициализировать «состояние» определенного размера, как правило, выходного размера, с ряд фиксированных значений.
  2. Разбить данные в ряд блоков большего определенного размера.
  3. Возьмите каждый блок и использовать битовые операции и основные математические операции (сложение, вычитание, умножение) на свои данные, игнорируя переполнение, чтобы уменьшить размер блока до гораздо меньшего размера, как правило, выходного размера, слиться с «государством». Каждый блок обрабатывается с некоторым фиксированные данные.
  4. Объединить каждый из те государства. Это может быть сделано путем xoring или добавления их целиком, и отбросить любое переполнение.
  5. Добавить размер данных в последний блок, создавая дополнительный блок, если необходимо, выполняя шаги 3 и 4 над ним.
  6. Вернуть состояние в результате.

SHA-3 Конкурс

Все алгоритмы хеширования рано или поздно не оправдает их ожиданий.Несмотря на то что это не всегда проблема. Например, если алгоритм хеширования предполагается, что потребуется 1000 лет, чтобы подобрать спичку к существующему хэш, и кто-то придумает алгоритм, чтобы сделать это через 950 лет, это не обеспечивает безопасность, которую теоретически рекламирует, но запас прочности настолько высок, что это не имеет значения. Однако в некоторых последние годы реальные атаки, нарушающие один из двух ключевых криптографических хэш-свойства, которые могут быть выполнены за часы или даже минуты были обнаружены против популярных алгоритмов MD5 и SHA-1. Эти атаки не обязательно делают недействительными MD5 и SHA-1 от каждого потенциальное использование, но это достаточно плохо, что их следует избегать всякий раз, когда это возможно, и не следует полагаться на безопасность. Также есть проблема с этими классическими алгоритмами хеширования относительно того, как состояния связываются в цепочку и возвращаются в виде хэша. Это облегчает неправильное использование хэшей в некоторых случаях. Кто-то, кто не обязательно знает, какие данные соответствуют конкретному хешу, может еще вычислить хэш data + data2. Это может быть проблемой в некоторые наивные способы использования этих хеш-алгоритмов.Далее, все было показано, что классические алгоритмы не совсем соответствуют их ожидания, хотя они по-прежнему считаются достаточно безопасными на данный момент. Это привело к желанию создать новую серию хеш-алгоритмы, которые имеют структуру, отличную от классических те. Поэтому был проведен конкурс на создание новых и определение лучших кандидатов для дальнейшего использования и получения звания «ША-3».
БЛЕЙК и БЛЕЙК2
Один из ША-3 финалистами конкурса стал BLAKE.Этот хэш-алгоритм был составлен из несколько разных компонентов. Его авторы предложили изучить БЛЕЙК, опустив каждый из них, чтобы понять, насколько сильным был БЛЕЙК, основанный на большинство его компонентов. После того, как соревнование закончилось, и после многих исследования выяснилось, что один из компонентов BLAKE не необходимо, и что количество операций в целом может быть уменьшено чтобы улучшить его скорость, не нанося вреда его безопасности. Принимая это вместе с некоторыми интересными идеями представлен вместе со Скейном и Кекчаком, двумя другими финалистами, BLAKE2 был создан.BLAKE2 — один из самых быстрых криптографических хэшей алгоритмы, а также считается одним из самых сильных доступный.

BLAKE2 работает как следует:

  1. Инициализировать «состояние» определенного размера с рядом фиксированных значений, в основном нули.
  2. Разбить данные в ряд блоков большего определенного размера.
  3. Возьмите каждый блок, номер блока и флаг, а также использовать битовые операции и сложение, игнорируя переполнение, уменьшая их размер вдвое, чтобы объединить с «государством».Каждый блок+номер+флаг обрабатывается с некоторым фиксированные данные.
  4. Объединить каждый из те государства.
  5. Флаг, используемый рядом с последним блоком, отличается от всех предыдущих блоки.
  6. Вернуть состояние в результате.

Теоретически BLAKE2 сильнее, чем классические хэши, потому что данные добавляются к каждый обрабатываемый блок, на который нельзя просто воздействовать передача ему данных. Это заставляет вычислительные данные переходить из состояния A в состояние B сложнее, потому что вам понадобится другой набор данные для этого в зависимости от того, где находится блок, который вы пытаетесь заменить. является.Вычисление хэша из другого хэша для данных + данные2 больше сложно из-за смены флага. Состояние для данных будет отличается, если к данным было добавлено больше блоков.

Кекчак

Фактический победитель соревнованием SHA-3 был алгоритм Keccak. Он был выбран потому, что он действительно отличался от классических хэшей (не обязательно хороший вещь), и очень быстро в аппаратных реализациях.

Кекчак работает как следует:

  1. Инициализировать большое «состояние» определенного размера с нулями.
  2. Разбить данные на ряд блоков меньшего размера.
  3. Возьмите каждый блок, и использовать битовые операции для объединения с более крупным «состоянием». Каждый блок обрабатывается с некоторыми фиксированными разреженными данными.
  4. Объединить каждый из те государства.
  5. Последний блок имеет два перевернутых бита.
  6. Вернуть маленькую часть государства в результате.

Как BLAKE2, Keccak стремится быть сильнее, чем классические хэши, потому что есть данные о состоянии больше, чем размер блока, который не может быть сразу зависит от данных (но все еще может быть подвержен влиянию). Вычисление хеша на основе другого с помощью добавление данных также затруднено, потому что в результате получается усеченный государство. Перевороты битов в финальном блоке также могут помочь.

Мои мысли

После реализации Keccak и поняв его конструкцию, я встревожился, насколько отсутствует. Использование чисто битовых операций облегчает вычисления в наоборот, за исключением нескольких операций И. Расчет конечное состояние использует перестановку битов внутри блока, в отличие от снаружи за его пределами, облегчая вмешательство (хотя теоретически все еще сложно).Но самое главное полное отсутствие использования счетчика блоков или размера данных в любом месте.

Классический хэш алгоритмы затрудняют вставку блоков в любом месте середина данных и получить соответствующий хэш. Даже если бы вы смогли вычислить некоторые данные для перехода из состояния A обратно в состояние A, вы не могли бы вставьте это где-нибудь, потому что размер данных в конце должен быть отличается, что приводит к другому хэшу. То же самое касается BLAKE2 из-за счетчика блоков, добавленного к каждому блоку, который он обрабатывает. У Кекчака здесь абсолютно ничего нет.

инициал Кекчака state состоит из нулей, что должен использовать каждый хэш Keccak. Если вы можете вычислить данные, кратные размеру блока, который при обработке в Keccak переходил бы от состояния всех нулей к состоянию всех нули, вы только что сломали Keccak . Вы могли бы добавить это данные столько раз, сколько вы хотите в начале любого другого набора данные и создать точно такой же хэш. Это относится ко всем производится один хэш Keccak, он нацелен на все хэши Keccak в существование.

Теперь я не эксперт криптограф. Возможно, битовые операции Кекчака гарантируют, что состояние из всех нулей никогда не может быть произведено из него. Может быть, даже существует доказательство этому в документе или статье, которую я еще не видел. Однако если такого доказательства нет, то Кекчак может сильно поломаться хуже даже классических хеш-алгоритмов . С классическим алгоритмы, которые сломаны, вам обычно приходится ломать каждый хэш с очень большим количеством вычислений, специфичных для каждого результата хеширования ты хочешь сломаться.С Кекчаком здесь, как только префикс станет известен, вы можно просто добавить его, никаких вычислений не требуется .

Улучшение Кекчака

Конечно, если Кекчак действительно сломан таким образом, это не сложно исправить. Данные размер может быть обработан в конце или может быть использован счетчик блоков рядом с каждым блоком, таким как BLAKE2, состояние, безусловно, достаточно велико чтобы быть в состоянии справиться с этим. Если бы кто-то изменил Кекчака, я бы тоже переместите переключение битов в конце, чтобы оно выходило за пределы размера блока внутри государства, просто для того, чтобы было труднее вмешиваться в конечный результат.Между тем, — это Кекчак, и поэтому SHA-3 даже безопасно использовать?

Резюме

Для трех видов атак с увеличением длины которые могут существовать (предваряющие, вставляющие, добавляющие), кажется, что классические хэши побеждают первые два и имеют некоторые проблемы с третий. BLAKE2 побеждает их всех. Кекчак неплохо справляется с третье, но не обеспечивает защиты от первых двух. Известная атака существование против первого было бы катастрофическим.Это поправимо, если алгоритм улучшится.

Кекчак | Binance Academy

Keccak (произносится как «кетчак») — это универсальная криптографическая функция, разработанная Гвидо Бертони, Джоан Демен, Микаэлем Петерсом и Жилем Ван Аше. Хотя Keccak можно использовать и для других целей, он наиболее известен как хэш-функция, обеспечивающая повышенный уровень безопасности по сравнению со старыми алгоритмами хеширования, такими как SHA-1 и SHA-2.

SHA расшифровывается как Secure Hash Algorithm и относится к набору криптографических хеш-функций, опубликованных Национальным институтом стандартов и технологий США (NIST).И SHA-1, и SHA-2 были разработаны Агентством национальной безопасности США (АНБ) и поэтому имеют схожую структуру. Хотя Keccak поддерживает тот же размер вывода (длину хэша), что и SHA-2, его рабочий механизм совершенно другой. Тем не менее, Keccak является частью семейства SHA и часто упоминается как SHA-3.

Теоретические атаки на SHA-1 были проведены в 2004 году и стали общедоступными в 2005 году. Пару лет спустя, в 2011 году, NIST объявил SHA-2 новой стандартной хэш-функцией, которую следует использовать.Однако переход с SHA-1 на SHA-2 был довольно медленным, и только к началу 2017 года большой процент разработчиков и специалистов по информатике окончательно перешел на SHA-2. Вскоре после этого Google объявил об успешной коллизионной атаке SHA-1 в феврале 2017 года, и с тех пор SHA-1 больше не считается безопасным, и его использование не рекомендуется. Функция Keccak (SHA-3) начала разрабатываться примерно в 2007 году после NIST. объявил о публичном конкурсе и процессе проверки в поисках новой криптографической хеш-функции, которая могла бы преодолеть потенциальные недостатки предыдущих SHA-1 и SHA-2.

Хотя серьезных атак на SHA-2 еще не было продемонстрировано, ожидается, что хеш-функции со временем будут взломаны, и на разработку новой стандартной функции уйдут годы. Принимая это во внимание, а также успешные атаки на SHA-1 в 2004 и 2005 годах, NIST осознал необходимость создания нового криптографического хэш-алгоритма. В 2012 году NIST объявил Keccak алгоритмом-победителем конкурса, и он был стандартизирован как новейший член семейства SHA (отсюда SHA-3).

Одна из причин, по которой Keccak был выбран NIST, связана с его инновационной структурой, которая оказалась более безопасной и эффективной, чем другие алгоритмы. С технической точки зрения, алгоритм SHA-3 основан на так называемых функциях губки (или конструкции губки) — в отличие от конструкции Меркла Дамгарда, используемой SHA-1 и SHA-2.

На данный момент SHA-2 по-прежнему считается безопасным и широко используется. Например, SHA-256 используется биткойнами и другими криптовалютами и играет решающую роль в процессе майнинга.Мы могли бы увидеть растущее распространение SHA-3 в будущем, поскольку кажется, что он далек от успешной атаки. Тем не менее, мы увидим, что в ближайшие годы будет разработано больше криптографических хэш-алгоритмов по мере развития области криптографии и обнаружения новых недостатков.

SHA-3 (Keccak) с помощью Awesome Miner

SHA-3 (Keccak) майнинг с помощью Awesome Miner

Алгоритм майнинга SHA-3 (Keccak) поддерживается Awesome Miner.

ASIC моделей
FusionIilicon x2 X2
см. Полный список всех поддерживаемых ASIC Maining Hardware
Mining Software Версия Платформы Ссылка поддержки
CcMiner 2. 3,1 NVIDIA GPU Окна
CcMiner Alexis 1,0 NVIDIA GPU Окна
CcMiner KlausT 8,25 NVIDIA GPU Окна
CpuMiner-Opt 3.19.1 ЦП WindowsLinux
Экскаватор3 9.4 / 1. 5 NVIDIA GPU Windows
5.6.122 5.6.1 AMD GPU Windows Prace
SGMINER-GM 5.5.5.59 AMD GPU Windows
Srbminer-Multi 0.8.7 CPUAMD GPU Windows

SHA3 — NPM

Чистая реализация JavaScript семейства криптографических алгоритмов хеширования Keccak, в первую очередь включая Keccak и SHA3.

💡 Устаревшее примечание: В предыдущих версиях этой библиотеки объект SHA3Hash предоставлял хеш Keccak , , а не , что мы в настоящее время известен как хэш SHA-3. Для обратной совместимости этот объект по-прежнему экспортируется. Тем не менее, пользователям рекомендуется вместо этого переключитесь на использование объектов SHA3 или Keccak , которые обеспечивают алгоритмы хэширования SHA-3 и Keccak соответственно.

Установка

Через нпм :

Через пряжу :

Использование

Вы можете использовать эту библиотеку из Node.js, из веб-браузеров и/или с помощью импорта ES6.

Node.js (стиль CommonJS)

 

const { SHA3 } = require('sha3');

 

const { Keccak } = require('sha3');

ЭС6

 

импорт { SHA3 } из 'sha3';

 

import { Keccak } из 'sha3';

Что в коробке

FIPS-совместимые интерфейсы для следующих алгоритмов:

  • SHA3 : Алгоритм SHA3.
  • Кекчак : Алгоритм Кекчака.
  • SHAKE : Алгоритм SHAKE XOF.

💡 Устаревшее Примечание: Опытные инспекторы могут заметить, что также предоставляется SHA3Hash . До версии 2.0.0, эта библиотека реализовала только раннюю версию алгоритма SHA3. С тех пор SHA3 отличается от Keccak и использует другую схему заполнения, но для совместимости этот псевдоним остается немного дольше.

Примеры

Создание хэша SHA3-512
 

импорт { SHA3 } из 'sha3';

 

константный хеш = новый SHA3(512);

 

хэш.обновить('фу');

hash.digest('hex');

Создание хэша Keccak-256
 

import { Keccak } из 'sha3';

 

const hash = new Keccak(256);

 

hash.update('foo');

hash.digest('hex');

Создание хэша SHAKE128 с 2048 байтами
 

импорт { SHAKE } из 'sha3';

 

const hash = new SHAKE(128);

 

hash. update('foo');

хеш.дайджест({ buffer: Buffer.alloc(2048), format: 'hex' });

Справочник по API

Все реализации хэшей, предоставляемые этой библиотекой, соответствуют следующей спецификации API.

#конструктор([размер=512])

Конструктор для каждого хэша (например: Keccak , SHA3 ) ожидает следующие параметры:

  • размер (номер): необязательно. Размер создаваемого хеша в битах. Если указано, это должен быть один из 224 , 256 , 384 или 512 .По умолчанию 512 .
Пример
 

const hash = новый Keccak(256);

#update(данные, [encoding='utf8'])

Обновляет содержимое хэша с заданными данными. Возвращает сам хэш-объект.

  • данные (Буфер|строка): Обязательно. Данные для чтения в хэш.
  • кодировка (строка): Необязательно. Кодировка заданных данных , если тип строка .По умолчанию 'utf8' .

💡 Список разрешенных кодировок см. в разделе Буферы и кодировки символов.

Пример
 

const hash = новый Keccak(256);

 

hash.update('привет');

 

hash.update('мы также можем связать это').update('вместе');

#дайджест([кодировка='двоичный'])

Переваривает хэш и возвращает результат. После вызова этой функции хэш может продолжать получать ввод .

  • кодировка (строка): Необязательно. Кодировка для возвращаемого дайджеста. По умолчанию 'двоичный' .

Если предоставлена ​​кодировка и значение, отличное от 'binary' , эта функция возвращает строку . В противном случае возвращается Buffer .

💡 Список разрешенных кодировок см. в разделе Буферы и кодировки символов.

Пример
 

const hash = новый Keccak(256);

 

хэш.обновить('привет');

 

hash.digest('hex');

#дайджест([options={}])

Переваривает хэш и возвращает результат. После вызова этой функции хэш может продолжать получать ввод .

Возможные варианты:

  • буфер (буфер): Опционально. Предварительно выделенный буфер для заполнения выходными байтами. Вот как можно использовать алгоритмы XOF, такие как SHAKE, для получения произвольного количества хэш-байтов.
  • формат (строка): Необязательно. Кодировка для возвращаемого дайджеста. По умолчанию 'двоичный' . Если также предоставлен буфер , это значение будет передано непосредственно в Buffer#toString() в данном буфере.
  • заполнение (байт): Необязательно. Переопределить заполнение, используемое для заполнения входных байтов до размера блока алгоритма. Обычно это следует опускать, но может потребоваться при построении дополнительных криптографических алгоритмов поверх этой библиотеки.

Если предоставлен формат и значение отличается от 'binary' , эта функция возвращает строку . В противном случае возвращается Buffer .

Пример
 

const hash = новый Keccak(256);

 

hash.update('привет');

 

hash.digest({ buffer: Buffer.alloc(32), format: 'hex' });

#сброс()

Сбрасывает хэш в исходное состояние.

  • Все входные буферы удалены из памяти.
  • Хэш-объект можно безопасно повторно использовать для вычисления другого хэша.
Пример
 

const hash = новый Keccak(256);

 

hash. update('привет');

хэш.дайджест();

 

hash.reset();

 

hash.update('мир');

хэш.дайджест();

Тестирование

Запустите тест пряжи для полного набора тестов.

Отказ от ответственности

Криптографические хэши обеспечивают целостность , но не обеспечивают подлинность или конфиденциальность . Хеш-функции являются частью криптографической экосистемы наряду с другими примитивами, такими как шифры и МАК. Если вы рассматриваете эту библиотеку для защиты паролей, вы, возможно, ищете для функции получения ключа, которая может обеспечить гораздо лучшие гарантии безопасности для этого варианта использования.

Особая благодарность

Следующие ресурсы были неоценимы для этой реализации и заслуживают особой благодарности за хорошую работу:

  • Псевдокод Keccak: отличный псевдокод и технические описания команды Keccak.

  • mjosaarinen/tiny_sha3: Компактная, разборчивая и поддающаяся взлому реализация Маркку-Юхани О. Сааринена.

  • Phusion: за первоначальный выпуск и сопровождение этого проекта, а также любезную передачу Twuni для дальнейшей разработки и обслуживания.

Алгоритм Кеччака и его реализация — Требуется программист

Предисловие

В настоящее время применение хэш-алгоритма в обществе становится все более и более широким, потому что хэш-алгоритм может использоваться для защиты файлов от подделки, может гарантировать правильность и эффективность сообщения, а также может выполнять цифровые подписи.При разработке протокола http вы также можете проверить, был ли изменен определенный файл, чтобы передача могла быть возобновлена ​​в точке останова. Традиционная хеш-функция подвергается все большему количеству атак, а методы атаки становятся все более эффективными. Старый алгоритм становится небезопасным, поэтому необходимо внедрять новые стандарты. Keccak — абсолютный победитель алгоритма SHA-3. Конечно, у него есть свои преимущества, поэтому здесь будет обсуждаться принцип работы алгоритма keccak, при этом инкапсулируя функцию для вычисления хеш-значения файла.

Введение в алгоритм keccak

Полное описание алгоритма keccak более сложное, и здесь обсуждаются только характеристики этого алгоритма. Во-первых, он принял структуру губки,
Что такое структура губки? Во-первых, губка может впитывать воду. После впитывания воды его можно сжать, чтобы выжать воду, сохраняя структуру всей губки неизменной. Таким образом, принцип работы губчатой ​​структуры состоит в том, чтобы сначала ввести строку, которую мы хотим вычислить, а затем заполнить строку, заполнить входную строку обратимым правилом заполнения и разделить ее на блоки.После разделения блоков проводится этап водопоглощения. Когда все строки обработаны. После ввода структуры сообщения структура губки переключается в сжатое состояние, и количество блоков, выводимых после сжатия, может быть произвольно выбрано пользователем. |Мбит| + сумма для i=0.я*Мбит[я] P = Мбайт || д || 0x00 || … || 0x00 P = P xor (0x00 || … || 0x00 || 0x80) S[x,y] = 0, для (x,y) в (0…4,0…4) для каждого блока Pi в P S[x,y] = S[x,y] xor Pi[x+5*y] для (x,y) таких, что x+5*y < r/w S = Кекчак-f[r+c](S) Z = пустая строка пока запрашивается вывод Z = Z || S[x,y] для (x,y) таких, что x+5*y < r/w S = Кекчак-f[r+c](S) вернуть Z }

С помощью псевдокода можно построить всю функцию.Вот код из github: keccak

Далее следует выбрать файл для расчета хэша и расчета выходного хеш-значения:

  импортный кеччак  print("Введите путь к файлу:")
путь = ввод ()
keccak = Keccak.Keccak(1600)
мин = ''
массив = []
пытаться: 
 с open(path,"rb") в качестве входных данных:
 j = 0
 пока верно:
 j += 1
 второй_массив = []
 я = 0
 пока верно:
 ТБ = ввод.чтение(1)
 mIn += str(int("%X"%ord(tB),16))
 я += 8
 если len(tB) == 0 или i >= 64:
 ломать
 еще:
 второй_массив.
Обновлено: 02.02.2022 — 04:37

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *