Pull to refresh
6
0
Редров Иван @digit4lsh4d0w

Начинающий разработчик на языках Python, Go, Rust

Send message

Точно! Совсем не подумал, что в Rust можно перегрузить операторы да еще и просто псевдоним сделать для типа [u8; 64]! В следующий раз постараюсь об этом не забывать. Спасибо!

Есть всего две причины:

  1. Мои навыки программирования на Rust и в целом не находятся на высоком уровне - я не знаю как применить SIMD.

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

Я понимаю, что данные копировать нужды нет, однако я не нашел способа как можно переводить u8 в u64 иным образом. Буду благодарен, если приведете пример.

Вам нужно применять индексацию с шагом чтобы убрать копии.

Немного не понял что вы имели в виду.

В графическом редакторе Gimp есть фильтр "Искажения/Ухудшение видео". У него есть параметр "Узор", который можно выставить в положение "Large 3x3".

Забыл добавить про тесты. Они есть в репозитории, здесь их приводить не стал. Поскольку я реализовал по сути всего две функции: sha256 и sha512, то тестирование выполняется только для них.

Тестирование выполнено максимально просто: с помощью утилит из coreutils я посчитал эталонный хэш для текстов и для видео и просто сравниваю с результатом моей функции.

Упоминание в комментарии выше про утечку времени я так и не понял, однако в этом сценарии использования сравнение хэшей работает.

Спасибо за подробный комментарий и разъяснения. Внесу изменения в код, а потом и в статью.

Большое спасибо за ваш подробный комментарий! Я постараюсь учесть все замечания, чтобы внести правки в этот пост и в следующий по Стрибог. Опыта в Rust мне пока не достает, но такие комментарии как ваш, помогают разобраться в некоторых местах. Спасибо!

Спасибо за ваш комментарий! На самом деле я наделся, что кто-то более компетентный оставит пару замечаний к моему коду. Не могли бы вы оставить немного более подробное замечание - я хотел бы разобраться в очевидных глупостях.

Про название переменной в .map(|byte| format!("{:08x}", byte)) вы ловко подметили. Исправлю.

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

  1. Причина. Например, это какой-то специфический язык, на котором еще не написаны нужные вам алгоритмы. Brainfuck если хотите.

  2. Основательные знания в криптографии. Вы понимаете причину использования каждой функции, что такое коллизии, что такое прообраз, как их найти и противодействовать этому.

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

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

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

Благодарю за совет ?

Я с вами полностью согласен, подобные проекты не должны оказаться в прикладном ПО. Это указано в первых строчках в репозитории, здесь решил об этом не упоминать, поскольку код приводился в качестве дополнительного пояснения.

В последнее время Яндекс стал более активным. Много покупается, но мало что пока появилось. Жду больше всего их банковскую составляющую, как в свое время были Яндекс.деньги

Information

Rating
Does not participate
Location
Владивосток, Приморский край, Россия
Date of birth
Registered
Activity

Specialization

Pentester, Reverse Engineer
Intern
From 30,000 ₽
Linux
Git
Python
Bash
Nginx
C++
Visual Studio