Редров Иван @digit4lsh4d0w
Начинающий разработчик на языках Python, Go, Rust
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
Точно! Совсем не подумал, что в Rust можно перегрузить операторы да еще и просто псевдоним сделать для типа [u8; 64]! В следующий раз постараюсь об этом не забывать. Спасибо!
Есть всего две причины:
Мои навыки программирования на Rust и в целом не находятся на высоком уровне - я не знаю как применить SIMD.
Не хочется уводить пример реализации Стрибог в направлении безудержной оптимизации. Моей целью было максимально доступно и просто пояснить шаги алгоритма. Оптимизировать я хотел только те моменты, где я явно делаю странные вещи, например, копирую кучу данных, хотя цели можно добиться передавая ссылку.
Я понимаю, что данные копировать нужды нет, однако я не нашел способа как можно переводить u8 в u64 иным образом. Буду благодарен, если приведете пример.
Немного не понял что вы имели в виду.
В графическом редакторе Gimp есть фильтр "Искажения/Ухудшение видео". У него есть параметр "Узор", который можно выставить в положение "Large 3x3".
Забыл добавить про тесты. Они есть в репозитории, здесь их приводить не стал. Поскольку я реализовал по сути всего две функции: sha256 и sha512, то тестирование выполняется только для них.
Тестирование выполнено максимально просто: с помощью утилит из coreutils я посчитал эталонный хэш для текстов и для видео и просто сравниваю с результатом моей функции.
Упоминание в комментарии выше про утечку времени я так и не понял, однако в этом сценарии использования сравнение хэшей работает.
Спасибо за подробный комментарий и разъяснения. Внесу изменения в код, а потом и в статью.
Большое спасибо за ваш подробный комментарий! Я постараюсь учесть все замечания, чтобы внести правки в этот пост и в следующий по Стрибог. Опыта в Rust мне пока не достает, но такие комментарии как ваш, помогают разобраться в некоторых местах. Спасибо!
Спасибо за ваш комментарий! На самом деле я наделся, что кто-то более компетентный оставит пару замечаний к моему коду. Не могли бы вы оставить немного более подробное замечание - я хотел бы разобраться в очевидных глупостях.
Про название переменной в
.map(|byte| format!("{:08x}", byte))
вы ловко подметили. Исправлю.Мне кажется тут стоит внести ясность. Реализовать свою криптографическую библиотеку можно, но желательно, чтобы были следующие вещи:
Причина. Например, это какой-то специфический язык, на котором еще не написаны нужные вам алгоритмы. Brainfuck если хотите.
Основательные знания в криптографии. Вы понимаете причину использования каждой функции, что такое коллизии, что такое прообраз, как их найти и противодействовать этому.
Основательные знания в программировании. Вы понимаете как ваша программа утилизирует память, где могут быть опасные места.
Я, конечно не специалист ни в криптографии, ни в программировании, но мне кажется такого набора достаточно для того, чтобы реализовать криптографическую библиотеку.
Разумеется желательно, чтобы был квалифицированный человек, который сможет провести аудит. Проверка в этой области чрезвычайно важна.
Благодарю за совет ?
Я с вами полностью согласен, подобные проекты не должны оказаться в прикладном ПО. Это указано в первых строчках в репозитории, здесь решил об этом не упоминать, поскольку код приводился в качестве дополнительного пояснения.
В последнее время Яндекс стал более активным. Много покупается, но мало что пока появилось. Жду больше всего их банковскую составляющую, как в свое время были Яндекс.деньги