Быстрый алгоритм шифрования AES ECB 128/192/256

0. 68 30.10.20 13:00 Сейчас в теме
Реализация существенно оптимизированного алгоритма симметричного шифрования AES (Advanced Encryption Standard) в режиме ECB (Electronic codebook) с различной длиной ключа 128/192/256 без использования внешних компонент, zip-файлов, обращения к диску или БД и без привязки к ОС.

Перейти к публикации

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. malikov_pro 641 30.10.20 13:14 Сейчас в теме
Плюс за развите темы криптографии на синтаксисе 1С.
Если можете опубликовать на github, то будет отлично, в идеале организовать библиотеку по аналогии с crypto-js в npm. Если нужны sm без проблем скачаю.

Сам для JWT использую HMAC и RSA256, первый в паблике есть, второй только в обработке на IS.
10. 1div0 68 01.11.20 09:48 Сейчас в теме
(1) Спасибо за Ваш отзыв.
Пост появился именно для того, чтобы нажить неисчислимые богатства (и больше не работать, шутка). На самом деле периодически бывает интересно что-то скачать, а местной валюты нет.
В данном случае вообще интересно получилось, так как эта статья состоялась благодаря вот этой:
https://infostart.ru/public/952753/
Мой коллега скачал обработку для меня за свои sm.

По поводу JWT - у меня та же самая задача. Ради этого и занялся. HMAC и RSA256 - это очень хорошо, и есть готовый инструмент через МенеджерКриптографии. И не надо велосипед изобретать. Но мне как-то накладно показалось в дальнейшем обслуживании. Я имею ввиду возню с сертификатами. Поэтому я начал искать симметричный алгоритм с одним закрытым ключом.
Впрочем я об этом вчера написал статью, она ещё на модерации:
https://infostart.ru/public/1319502/
nsirotkin@mail.ru; +1 Ответить
2. Pawlick 10 31.10.20 16:10 Сейчас в теме
Лично мне вот прям сейчас ничего шифровать не нужно, но я точно знаю, что когда понадобиться - цены не будет обработине.
Плюс однозначно.
3. d_neon 31.10.20 17:14 Сейчас в теме
В чем смысл переписывания алгоритма шифрования с плюсов на 1С? Прирост производительности мы вряд ли получим, придется много кода писать вручную. На плюсах сдвиг битов, XOR, сложение по модулю 2^32 и много чего еще, используемое в шифровании делается одной командой.
Или речь только про то, чтобы отказаться от внешних компонент?
9. 1div0 68 01.11.20 09:30 Сейчас в теме
(3) Вкратце ответ - да.
Я с Вами полностью согласен. Тратить своё время, вместо того, чтобы использовать готовое - крайне сомнительная вещь.
Однако, с другой стороны, я тут недавно переезжал большой системой с Windows на Linux, и внешние компоненты доставили, мягко говоря, хлопот.
И я пока вздрагиваю, когда читаю про внешние компоненты. Уверен это временно и скоро снова начну их применять.
Также согласен с тем, что чтобы обогнать плюсы, надо использовать не 1С, а, скажем CUDA (https://ru.wikipedia.org/wiki/CUDA). Но тут речь не про обогнать плюсы, а про приемлемое использование в 1С.
19. papami 42 01.11.20 17:09 Сейчас в теме
(9)
Также согласен с тем, что чтобы обогнать плюсы

А в CUDA код будет на чем написан?)
20. 1div0 68 02.11.20 05:09 Сейчас в теме
(19)
На специальном упрощённом диалекте языков C, C++, Фортран... Для успешной трансляции кода на этом языке в состав CUDA SDK входит собственный Си-компилятор командной строки nvcc компании Nvidia.


Нативный язык изначально не имеет возможностей, предоставляемых CUDA, поэтому я допустил их сравнение друг с другом.
4. ILM 238 31.10.20 18:41 Сейчас в теме
Любое изобретение и разработка может быть использовано в разных целях. Наличие быстрого алгоритма шифрования, реализованного на 1С позволит злоумышленникам написать обработки шифрования работающие внутри платформы. Предлагаю удалить эту обработку из открытого доступа сайта Инфостарт.
5. PerlAmutor 124 31.10.20 20:21 Сейчас в теме
(0) Спасибо за публикацию. Алгоритм Deflate/Inflate осилите? Я на днях почитал много про него, реализация на 1С должна быть крайне увлекательной несмотря на кажущуюся простоту и доступность информации.
6. 1div0 68 01.11.20 09:16 Сейчас в теме
(5) Пожалуйста:

ХЗ = Новый ХранилищеЗначения(ВашиДанные, Новый СжатиеДанных(9));
СтрокаBase64 = СериализаторXDTO.XMLСтрока(ХЗ);
ДвоичныеДанные = Base64Значение(СтрокаBase64);


Назад - всё то же самое в обратном порядке:
СтрокаBase64	= Base64Строка(ДвоичныеДанные);
ХЗ				= СериализаторXDTO.XMLЗначение(Тип("ХранилищеЗначения"), СтрокаBase64);
ВашиДанные		= ХЗ.Получить();


Отблагодарить можете скачав обработку.
8. PerlAmutor 124 01.11.20 09:19 Сейчас в теме
(6) Я не про это, а про реализацию LZ77 + деревьев Хаффмана, с каноническим построением деревьев, их хранение в потоке, их восстановление, использование при декодировании и т.д.
11. 1div0 68 01.11.20 09:59 Сейчас в теме
(8) Если я правильно понимаю, хранилище значения для сжатия как раз Deflate использует. Ну то есть это уже есть на уровне платформы. Я просто не вижу сценария, при котором потребуется своя самодельная обработка.
12. PerlAmutor 124 01.11.20 10:11 Сейчас в теме
(11) Те примеры, что вы привели относятся к разряду собственного формата входящих данных, т.к. само по себе ХранилищеЗначения сериалузется вместе с deflate потоком. Но если взять deflate данные из внешнего потока (без заголовков типа zip, gzip), то вы ничего не сможете раскодировать, т.к. внешние системы ничего не знают о типе данных ХранилищеЗначения и о том, что Deflate поток надо для нужд 1С предварять заголовком из ХЗ.

Ну вот пример в base64, закодированный Deflate:

PY3JDQJRDENbSQtcqW6G7YIQV25oOvhIBL5mbeG5IzwIcXEUx8/hxsSLtKaa­YGEONRTeX30wa0dPBjV0oVfryKA9xX7RieqDZdLB0YbxZ84unHTWMUxUtU4n­Y9gt65Nh5f9IxoZuy91L8mTxrLoaqeQH

Внутри закодирован текст в формате UTF-8.

Попробуйте распаковать методом, который вы предложили.
21. 1div0 68 02.11.20 05:49 Сейчас в теме
(12) Получается - да. Для связи с внешними системами нужно что-то мудрить. Потому что 1С сначала пишет данные в своём формате, а затем пакует.
P.S.: В примере вызывает подозрение два "<wbr>­".
23. SerVer1C 369 02.11.20 12:12 Сейчас в теме
(12)
PY3JDQJRDENbSQtcqW6G7YIQV25oOvhIBL5mbeG5IzwIcXEUx8/hxsSLtKaa­YGEONRTeX30wa0dPBjV0oVfryKA9xX7RieqDZdLB0YbxZ84unHTWMUxUtU4n­Y9gt65Nh5f9IxoZuy91L8mTxrLoaqeQH


Если 2 раза откинуть <wbr>, которые добавлены механизмом расцветки ИС, то получим:
Инженер по разработке и эксплуатации информационных систем на платформе 1С:Предприятие

см. мою обработку
24. PerlAmutor 124 02.11.20 18:36 Сейчас в теме
(23) Но это же тоже не то. Вы просто обрезаете/добавляете заголовки и используете zip. В Вашей публикации есть ремарка:

Как оказалось, на ИС уже есть похожие публикации, но там либо применяется внешний EXE-шник, либо внешняя компонента, либо работа с бинарными данными идет через европу.


Меня заинтересовал момент про "европу". Неужели кто-то на 1С уже реализовал работу с Deflate через работу с двоичными данными (алгоритмы LZ77 (через функцию кольцевого-хэша по примеру Рабина-Карпа, как в Zlib), кодирование Хаффмана)?
25. SerVer1C 369 02.11.20 20:52 Сейчас в теме
(24) Прямого алгоритма "в лоб" на 1с не встречал. Да и если таковой и появится, то он будет очень уныло работать, т. к. эска не предназначена для алгоритмических задач. А в кодировании Хаффмана там вообще используются биты...
7. 1div0 68 01.11.20 09:18 Сейчас в теме
(4) Это возможно. Только приведите пожалуйста конкретный сценарий, в котором использование именно этой (и никакой другой) обработки может навредить.
17. mrsmrv 78 01.11.20 16:02 Сейчас в теме
(4)А если это произойдёт во вторник - давайте запретим вторники.
"Предлагаю удалить эту обработку из открытого доступа сайта Инфостарт." спасибо, поржал.
22. SerVer1C 369 02.11.20 11:57 Сейчас в теме
(4) Срочно запретить во всех магазинах продажу ножей и топоров!!!
13. malikov_pro 641 01.11.20 11:34 Сейчас в теме
"На самом деле периодически бывает интересно что-то скачать, а местной валюты нет." - поддержал скачиванием.

"По поводу JWT - у меня та же самая задача" - делаете серверную часть? В официальном каталоге https://jwt.io/ присутствует https://github.com/pintov/1c-jwt, если сможете расширить

"МенеджерКриптографии" - у меня не взлетело на PEM формате, RS256 использую для гугл, HS256 для пары сервисов.

"Впрочем я об этом вчера написал статью" - поддержал плюсом и скачиванием, не увидел как подготовить ключ для использования, Google выдает p12 или PEM обернутый в JSON, проблема распаковки описана в комментариях к статье https://infostart.ru/public/805071/
16. 1div0 68 01.11.20 15:38 Сейчас в теме
(13)
не увидел как подготовить ключ для использования

Либо подаёте произвольные ДвоичныеДанные длиной 32 байта, либо можно SHA-256 получить от произвольной строки - пароля. В примере использован второй вариант.

По поводу остального - спасибо за информацию. Изучаю.
14. malikov_pro 641 01.11.20 11:38 Сейчас в теме
(3) "Или речь только про то, чтобы отказаться от внешних компонент?" - именно так, к linux не факт что компоненты есть, при использовании в HTTP сервисе может просадку по производительности давать.
15. malikov_pro 641 01.11.20 11:57 Сейчас в теме
(10) "Поэтому я начал искать симметричный алгоритм с одним закрытым ключом." - если про универсальность, то HS256 используется в https://infostart.ru/public/709325/ (https://github.com/vbondarevsky/Connector) как "AWS4-HMAC-SHA256 аутентификация".
По теме нативной реализации, в одном из API столкнулся с "PKCS 1", который для Java программистов "включил и работает", нас стороне 1С не смог запустить, решили изменением формата.
18. mrsmrv 78 01.11.20 16:07 Сейчас в теме
Качнул. йоу. Развиваем экосистему.
26. al.gerasimov 03.11.20 19:08 Сейчас в теме
А я Des-3Des написал для одного проекта и еще разбор ASN1. Надо кому-нибудь?
27. 1div0 68 04.11.20 08:46 Сейчас в теме
(26)
и еще разбор ASN1

ASN.1 - мне надо. Есть одна идея.
33. al.gerasimov 12.11.20 03:36 Сейчас в теме
(27) похоже я не могу писать личные сообщения. Скинь сне свою почту в привате. Правда у меня код на англ. синтаксисе, пойдет?
34. 1div0 68 12.11.20 05:37 Сейчас в теме
(33) Английский или русский синтаксис - не важно.

Хм.. а я Вам тоже не могу отправить - пишет "Сообщение не отправлено, отложенная группа". Не знаю, что это значит..

a.a.klenov*ya.ru
28. vsesam80 07.11.20 16:16 Сейчас в теме
Здравствуйте. Я параноик и социопат, а по этому задам вам тот же вопрос что и Никите по поводу его разработки - можно ли вашей обработкой шифровать реально серьезные вещи, пинкоды карт в базе, пароли от почты и пр.?
P.S. Обработку уже купил, она действительно быстрая. Кстати с Никитиной обработкой прикол был - на компе у меня медленней в шифровалось и дешифровалось чем на смартфоне под Андроидом.
30. mrsmrv 78 07.11.20 19:51 Сейчас в теме
(28) учитывая что AES активно и широко используется много кем и где, то думается что Да, можно использовать для перечисленных вами целей.
31. 1div0 68 10.11.20 05:30 Сейчас в теме
(28)
Я параноик и социопат, а по этому задам вам тот же вопрос что и Никите по поводу его разработки - можно ли вашей обработкой шифровать реально серьезные вещи, пинкоды карт в базе, пароли от почты и пр.?


Кратко - да.

Подробности:
Я гарантирую, что код модуля обработки в точности выполняет алгоритм AES. Это можно быстро проверить, зашифровав что-нибудь обработкой, а расшифровать сторонней программой. Можете вот на этом сайте попробовать - он поддерживает HEX-ключи. Либо выберите любой другой сайт.

По поводу надёжности самого алгоритма - вам стоит обратиться к его авторам. Но вообще считается, что это наиболее безопасный алгоритм шифрования среди симметричных алгоритмов. 26 ноября 2001 года AES был принят как федеральный стандарт (правительство США) обработки информации FIPS 197.

Также следует учесть, что данная обработка - это всего лишь инструмент. Многое зависит от того, как его применять. Например, в обработке (в форме) для наглядности используется пароль в виде фразы, который преобразуется в ключ путём получения хэша SHA-256. Это делает доступным перебор по словарю. Намного лучше, если ключ будет набором случайных байт (длинной 32 байта, разумеется).
vsesam80; +1 Ответить
32. 1div0 68 10.11.20 05:37 Сейчас в теме
(28) И ещё - будете тестить, выбирайте формат "Zero" - значит без заголовков, просто данные (настройки получатся ECB, Zero, 256, и ключ).
29. vsesam80 07.11.20 16:31 Сейчас в теме
Проверил сейчас на мобильном 1С, работает быстро, шифровал на 256 + много текста
kare; mrsmrv; +2 Ответить
35. RomanVolgograd 12 16.02.21 21:50 Сейчас в теме
Однозначно плюс. Была бы возможность, поставил бы два плюса.

Для обмена с мобильной платформой просто шикарная вещь. Ибо возиться с сертификатами на адроиде это тот еще мазохизм. Кидать не зашифрованные пакеты по открытым каналам не айс. А так можно шифровать без всяких лишних проблем и багов.

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

Даже недочетов то никаких не нашел. Ну разве уж совсем мелкие. Как то:

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

Но это уж совсем мелочи. А так - респект.
36. 1div0 68 17.02.21 06:40 Сейчас в теме
(35) Спасибо за отзыв. Очень приятно, что оценили оформление.
На счёт нулей - тут уж пардоньте - по стандарту дополняется нулями. Я от себя ничего не добавлял/убавлял.
С другой стороны при желании несложно же дополнить чем то другим.
37. RomanVolgograd 12 17.02.21 11:02 Сейчас в теме
при желании несложно же дополнить чем то другим.

Абсолютно согласен. Собственно это была не претензия, это было мнение. Вообще есть разные стандарты дополнения, но это не суть важно. Работа проделана огромная, остальное поправить при необходимости не представляет особого труда. Еще раз респект.
Оставьте свое сообщение
Вопросы с вознаграждением