Открытая библиотека украинского стандарта ЭЦП (приглашаются разработчики)

    Примерно 2 года назад у меня возникла идея создания открытой библиотеки украинского стандарта электронно-цифровой подписи ДСТУ 4145-2002. Украинский стандарт, как и российский, основан на эллиптических кривых, но отличается в деталях.

    С большим трудом был найден текст стандарта (странно, текст российского стандарта в свободном доступе) и вроде как дело осталось за малым…

    За последние два года, к сожалению, удалось сделать очень мало: задача сложная, готовых открытых библиотек или примеров нет, времени мало. По этому было принято решение попытать счастья, вдруг кто-то захочет принять участие в проекте. Более подробно о проекте — читайте под катом.



    Далее, по пунктам:

    1. Каков смысл делать библиотеку? Что дальше?

    Творческий интерес, расширение опыта в криптографии. Какой-либо коммерческой выгоды проект не предполагает (хотя не исключено).

    В идеале код можно будет включить в открытые библиотеки OpenSSL и bouncycastle.org.

    2. На каком языке будет написана библиотека?

    На C, Java, C#. Меня этот вопрос беспокоит менее всего — т.к. переделать с Java/C# на C или обратно — как правило сложности не представляет.

    Первичная разработка начата на C# (так сложилось исторически). Цель на данный момент — повторить пример приведенный в стандарте (грубо говоря, чтобы все вычисления сошлись).

    3. Что нужно, чтобы принять участие в разработке?

    Все что есть (а пока почти ничего нет :) ) выложено в репозиторий.

    Там указаны разработчики, текущие задания и e-mail для связи.

    Все авторы разработчики заносятся в список в порядке добавления в проект (с указанием роли).

    UPDATE



    29 октября 2010 года, спустя 8 лет после принятия стандарта, Украина, наконец, обрела первую версию работающей библиотеки для генерации ключей, генерации и проверки цифровой подписи по стандарту ДСТУ 4145-2002! Ура товарищи!

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

    Пока сенсации не делаем, т.к. библиотека еще не достигла и Beta-версии.

    UPDATE 2



    22 ноября опубликовали альфа-версию библиотеки. Работает как с кривыми в полиномиальном базисе, так и с кривыми в оптимальном нормальном базисе.
    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 58

      0
      поговорите с разработчиками BouncyCastle, возможно они согласятся добавить ваш код в их проект
        0
        Пока еще рано, добавлять особо нечего… Можно сказать только начали.
        0
        интересненько…
          0
          Что-то я не понял где можно прочитать стандарт…
            0
            Его запрещено распространять. Можно купить (под подпись, нужна копия паспорта). Распространяют в бумажном виде с уникальным номером и голографической наклейкой.

            Может кто-то конечно вылил в паблик, но я когда 2 года назад искал — не нашел. Пришлось покупать у lindex.net.ua/

            Для желающих разрабатывать — как-то эту проблему решим.
              +4
              Паспорт у вас взяли только для бухотчетности. ДСТУ никогда не были секретным документом, просто рубят бабло себе на нычку.
                0
                В самой брошюре написано: «право собственности на документ принадлежит государству. Копировать и распространять этот документ полностью или частично без официального разрешения… запрещено». Не знаю, может просто прикалываются?
                  +3
                  Согласно закона о стандартизации, запрещено тиражировать ДСТУ через официальное издание. А просто так — можно.
                  Разница, стоит на вашей копии голограммка или нет, в том, что в первом случае орган, издавший стандарт, несет ответственность за его содержание а во втором — нет.
            0
            А ее (ЦП) у нас уже где-то можно применять? Есть ли соотв. законы? Или возможно есть какие-то планы по внедрению? :)
              +1
              Клиент-банки у многих банкой её применяют. А вообще по законодательству, если на бумаге составить договор в котором оговорить легитимность цифровых копий документов (скажем eMail'ов), подписанных согласно данному стандарту, то можно дальше переводить весь документооборот между данными предприятиями в электронную форму. Это так по законодательству, но IRL всё равно все страхуются и дублируют бумагой, скажем, одним махом в конце месяца.
                +1
                Ее уже 1.5. лет применяют для сдачи отчетов в налоговую и другие органы. Даже есть центры сертификации (выдают сертификаты). Для физ. лица сертификат стоит около 100 грн. К примеру, сертификат можно получить здесь: ivk.org.ua/

                Сила ЭЦП приравнивается к собственноручной подписи. Теоретически с помощью ЭЦИ уже сейчас можно было бы, к примеру, свергнуть власть или устроить импичмент :) Но пока врядли наберем достаточно людей, которые имеют сертификат. А чтобы открыть свой центры сертификации — нужна библиотека. А существующие коммерческие обойдутся в несколько сотен тысяч у.е.
                0
                У самого валяется eToken с аппаратной реализацией ЕЦП ДСТУ 4145-2002, шифрования ГОСТ 28147-89 и хэша ГОСТ 34.311-95. Думал куда-то себе прикрутить и искал либы, но не нашёл. Думал что плохо искал, а оно вот как.

                Удачи вам!
                  0
                  eToken вроде не реализует ДСТУ 4145-2002? Или уже добавили?
                  0
                  Вы бредите, никогда не было на eToken аппаратной реализации ДСТУ. Есть варианты хранения ключевого контейнера программного криптопровайдера, но никак не внутренней реализации.
                    0
                    Под eToken я имел ввиду не конкретный бренд, а тип устройства. Сейчас специально посмотрел, называется он Secure Token
                    Технические характеристики:
                    · обеспечивает генерацию открытых и личных ключей абонента в соответствии со стандартом ДСТУ 4145-2002;
                    · обеспечивает формирование и проверку ЭЦП в соответствии с ДСТУ 4145 2002;
                    · обеспечивает шифрование/расшифрование в соответствии с ГОСТ 28147-89;
                    · обеспечивает вычисления хэш-функции в соответствии с ГОСТ 34.311-95;
                    · обеспечивает генерацию случайной битовой последовательности;
                    · поддерживает многократные операции чтения/записи информации (не менее чем 100 000 раз);
                    · поддерживает долговременное хранение информации (не менее 10 лет);
                    · ресурс USB-соединителя обеспечивает минимум 5000 соединений;
                    · транспортный уровень отвечает стандарту USB v 1.1.
                  0
                  Из С в С# и обратно не такая уж и простая задача как вам кажется.
                  Библлиотека шифрования на С# не очень эфективно, достичь нормальной производительности вам вряд-ли удасться.
                    +1
                    Да, тут голый С был-бы лучшим выбором и из соображений портируемости.
                      0
                      Из С в C# переводил подобные вещи. Смотря как писать — если с ассемблерными вставками — сложновато, если на голом C и поменьше указателей — совсем просто.
                        +1
                        Без указателей и ассемблерных вставок качественную и быструю реализацию не получится это раз. А два задача предстоит обратная из С# в С. Я не говорю что это невозможно, но я не согласен с утверждением «переделать с Java/C# на C или обратно — как правило сложности не представляет.». Как правило этот процес не прост, хотя бы потому что имеем неуправлямый язык и ООП нету, о соответственно сложных структур данных, иссключений и много чего ещё. Кроме того порт который тупо скопирует архитектуру из C# скорее всего будет неэфективен и монстроидален, хотя бы потому что ручное расспределение памяти позволяет эфективнее её исспользовать и можно задействовать разные оптимизации вроде Duff's device, разворачивания цыклов.
                      0
                      А вот мне интересно, как эти 2 факта между собой уживаются?
                      За последние два года, к сожалению, удалось сделать очень мало: задача сложная, готовых открытых библиотек или примеров нет, времени мало.

                      1. Каков смысл делать библиотеку? Что дальше?
                      Творческий интерес, расширение опыта в криптографии. Какой-либо коммерческой выгоды проект не предполагает (хотя не исключено).


                      Буду рад ошибиться, но мне кажется, что вы решили чужими руками сделать работу, которую делать не хочется / нет времени / нет понимания.
                        +1
                        Посмотрел исходиники и подкрепился в этой мысли. За 2 года вы смогли унести чужую библиотеку BigInteger и написать один метод для умножения полиномов. Это все, чего удалось достичь за это время?
                          0
                          Делается в свободное время, эпизодически. Так что удивительного ничего нет. Собственно для этого и пригласил желающих принять участие в проекте.
                          +1
                          Сделать желание есть, интерес есть, а вот времени и достаточной теоретической базы маловато.

                          Чужими руками — было бы уместно, если бы я затем эту библиотеку продавал или объявил себя единственным автором — чего я делать не намерен.
                        • UFO just landed and posted this here
                            +1
                            А что им и мне? Пусть делают… У нас свой творческий интерес, у них свой…

                            Она же не на продажу делается, верно? О какой конкуренции речь?
                            • UFO just landed and posted this here
                                +1
                                А где же их OpenSource-разработку можно посмотреть, если она конечно OpenSource? А если она пока не OpenSource и доступна только для определенных лиц — то где гарантии что она вообще когда-нибудь станет OpenSource? Кто-то приберет к рукам, как обычно у нас бывает…
                                • UFO just landed and posted this here
                                    +1
                                    Ну так раз оно сейчас засекречено — где гарантия что оно потом будет рассекречено? Сделают коммерческий продукт и будут продавать для пополнения фонда универа (а то и для пополнения чьего-либо кармана).

                                    Если кто-то из студентов читает эту тему и не пожадничает поделиться разработками — буду благодарен.
                                    • UFO just landed and posted this here
                            0
                            Предполагаю что больше народу на гитхабе найдете, чем на svn хостинге.
                              0
                              Стандартная проблема
                              задача сложная, готовых открытых библиотек или примеров нет, времени мало.

                              и денег никто не даст :)

                              имхо так к делу (такому делу) не подходят. чего-то должно быть в достатке, дабы не вышло тяп-ляп
                                –1
                                Украинская ЭЦП — это Неуловимый Джо. Потому и нет ни одной библиотеки в открытом доступе, что этот стандарт, да и весь ДСТЗИ, нужен только для попила баблища. Для разработки говнософта для налоговой под распиленный тендер, для выкачивания бабла из Microsoft'а с целью пустить их на рынок, для выкачивания бабла с тех, кто хочет сертифицировать другие средства (и у OpenSSL нет ни малейших шансов) и так далее.

                                Лучше сделайте отдельную библиотечку, реализующую ECC. И опыта наберетесь и хоть какая-то польза для мира будет. :-)
                                  0
                                  Вы не правы. Если с гос органами можно общаться только по такому протоколу ЦП, значит библиотека по факту нужна очень многим. Другой вопрос — зачем нужно было делать свой уникальный стандарт, который отличается лишь «в мелочах». Но это вопрос риторический.
                                    0
                                    Не, вы не поняли главного. Не нужна она никому. По такому протоколу ЦП общаться будут только те разработчики, где уже прошли многомиллионные откаты. Там вопрос библиотеки не стоит. Обычным разработчикам открытая либа не нужна, потому что их не пустят туда, где она может применяться.

                                    Иными словами, вся эта кухня в Украине — прогнила насквозь.
                                      0
                                      Комментатор понятия не имеет о чём говорит. Есть закон и есть стандарт.

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

                                      Закон говорит следующее: каждый, кто присылает в гос. орган документ, подписанный по стандарту — может быть уверен в его принятии. Т.е. гос. орган вообще не знает, чем вы и как подписывали свой документ. Если он расшифруется и пройдет подтверждение подлинности (а он пройдет, если корректно подписан) — документ принимается. Да, возможно где-то там есть проплаченные и попиленные госзаказы на какие-то программы, но математику-то никто не отменял. Корректно подписанный файл будет принят, главное чтобы реализация была верно написана.

                                      Так что автору — респект, а паникёрам, не разобравшимся в ситуации — нет.
                                        0
                                        Вам, теоретику, привет от практиков:)
                                          0
                                          Прошло, конечно, уж 2 года с того поста, но я смотрю на то, что есть сегодня: имеется штук 5 разных программ для подачи отчетности, все работают. Есть открытые стандарты — тоже работают. Куча людей пользуется цифровыми подписями (сам недавно получал и начал юзать — при этом никому не копейки не заплатил). Так что да, привет.
                                  –1
                                  Не захочет. Пусть планку налогов поднимут выше и затянут IT-шников и будет им стандарт
                                    +2
                                    Ура товарищи!!!

                                    Наконец удалось реализовать 100% герерации ключей, наложения подписи и проверки подписи.

                                    Никто новый пока не присоединился (но мы все еще ждем), работали вдвоем. Ларчик открывался просто: известная библиотека BouncyCastle реализует всю математику (вначале не получалось).

                                    P.S. Нужно обновить тему
                                    • UFO just landed and posted this here
                                        +1
                                        Автор, хочу пожелать Вам удачи и несколько замечаний, которые, надеюсь, Вам помогут.

                                        Стандарт ДСТУ-4145 — это модифицированный в одной операции при вычислении/проверке ЭЦП стандарт ECDSA. Модификация состоит в инверсии одного значения в процессе вычислений.

                                        С ГОСТ Р 34.10-2001 (Российская ЭЦП) ДСТУ не имеет ничего общего, кроме основы на эллиптических кривых. Там даже применяются кривые на разных полях. в ГОСТ применяются поля простых чисел (ECP — elliptic curves prime), в ДСТУ-4145 — полиномиальные (EC F2M — elliptic curves F2M).

                                        Соответсвенно, если у Вас есть библиотеки работы с EC F2M, то реализовать ДСТУ — дело 30 минут. В тексте стандарта определены все необходимые начальные величины (порядки полей, базовые точки и пр.) Нужно только реализовать алгоритм — несколько простых операций.

                                        Возьмите модуль ECC из OpenSSL и с помощью примитивов составьте алгоритм. Для примера можете взять ECDSA. Это совсем нетрудоемкая задача.
                                          0
                                          Вроде бы обновил тему — на полиномиальном базисе реализовать удалось 100% генерацию ключей, подпись, проверку. Есть еще оптимальный нормальный базис (это второй способ подписи по стандарту). Вы случайно не знаете что это и где взять формулы для работы с ним?
                                            0
                                            насколько мне известно, российский гост тоже от ECDSA отличается почти в одну операцию.
                                            Вообще я не понимаю сложность описанной автором задачи. Если не учитывать сложность получения стандарта, то это уровень одной лабы по крипте из универа.
                                              0
                                              Так может вы нам сможете подсказать что такое «оптимальный нормальный базис»? Чем отличается от «полиномиального» и какие библиотеки его математику (оптимальный нормальный) реализуют?

                                              ЗЫ
                                              Теоретически все такие умные. А когда дело коснулось практики — то 2 человека знакомых с математикой и криптографией не один год — вообще нифига не смогли толком сказать. Консультант наш (NeverWalkAloner) — редкий человек, и он не знает что такое «оптимальный нормальный базис».
                                                0
                                                Уточню, с алгоритмом с «полиномиальным базисом» — смог разобраться и помочь только NeverWalkAloner (один из участников проекта). Больше никто и в этом не разобрался.

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

                                                  citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.12.6172&rep=rep1&type=pdf

                                                  в статье советую вам обратить внимание на референс 2. eref.uqu.edu.sa/files/Others/Elliptic%20Curves/Normal%20Basis/An%20implementation%20of%20elliptic%20curve.pdf
                                                  поскольку в нем описывается как раз концепт норм базиса по отношению к элл кривым.

                                                  Если появятся вопросы, задавайте.
                                                    0
                                                    Вопрос мой был в том: существуют ли открытые библиотеки, которые реализуют математику на основе оптимального нормального базиса?
                                                      0
                                                      честно говоря — сильно сомневаюсь. Я думаю, что единственный путь получить их — это попробовать связаться с авторами работ по этой теме.

                                                      И зачем они вам нужны? все что вы получите от использования этого базиса — это просто незначительный прирост в скорости.
                                                        0
                                                        Зачем нужны?

                                                        В украинском штандарте 2 способа подписи: (1) алгоритм с полиномиальным базисом, (2) алгоритм с оптимальным нормальным базисом.

                                                        Первый получился. Второй не знаем как делать.

                                                        Или вы хотите сказать, что подпись будет идентичной и не важно какой базис использовать?
                                                          +1
                                                          Черт, конечно же нет. Я бы вам посоветовал искать в сторону конвертации базисов. То есть вы конвертируете базис из одной формы в другую, затем выполняете операции, а потом обратно. поищити в сторону finite field basis conversion
                                                            0
                                                            Вот! Это уже ближе к делу. Хоть кто-то понимает о чем речь :)

                                                            Да, в стандарте есть раздел «изменение базиса». Но ведь базис можно не изменять а сделать все операции в нормальном базисе:

                                                            1. Сложение не отличается (побитовый XOR).
                                                            2. Квадрат — это побитовый сдвиг на 1 бит
                                                            3. Нахождение обратного — уже написал — там легко.
                                                            4. А вот УМНОЖЕНИЕ — чего-то никак не можем понять как делать… И мне кажется умножение сделать не проще и не сложнее, чем изменить базис?

                                                            Т.е., если я правильно понял, нам осталось сделать только УМНОЖЕНИЕ. Альтернативный вариант — тот что вы предложили: изменить базис.

                                                            Исправьте меня, пожалуйста, если я ошибаюсь.

                                                            И еще. Операции в полиномиальном базисе выполняются над «двоичными строками длины m», а в оптимальном над «изображением элементов поля в виде двоичных векторов». Будет ли это влиять на нашу математику? Нужно ли что-то изменять в функциях сложения элементов основного поля, или оставить как для полиномиального?
                                                              0
                                                              Не очень вас понял, вы говорите «Но ведь базис можно не изменять а сделать все операции в нормальном базисе». Что тогда вам мешает делать все операции в уже реализованном полиномиальном?

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

                                                              Насчет последнего вопроса — нет не будет.
                                                                0
                                                                >>Что тогда вам мешает делать все операции в уже реализованном полиномиальном?

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

                                                                >> А умножение методом Месси-Омуры, которое применяется в нормальном базисе — это относительно тривиальная штука.

                                                                Это которое с составлением 4 шт. матриц? Пока никто даже не может понять как эти матрицы составить.
                                                0
                                                Еще вопрос. Возможно вы знаете что такое «оптимальный нормальный базис»? Чем отличается от «полиномиального» и какие библиотеки его математику (оптимальный нормальный) реализуют?
                                                  0
                                                  Сделали оба базиса. Ура!

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

                                                Only users with full accounts can post comments. Log in, please.