Основной работой при создании утилиты cryptoarmpkcs было не разработка кода или графического интерфейса, а работа с ASN1-структурами. Именно в этих структурах хранятся сертификаты x509v3, электронные подписи документов (PKCS#7, CMS), запросы на сертификаты (PKCS#10, CSR), открытые и закрытые ключи, защищенные контейнеры PKCS#12/PFX, списки отозванных сертификатов CRL и штампы времени для электронной подписи, запросы и ответы OCSP и так далее и тому подобное. Постоянно приходилось просматривать уже имеющиеся структуры для понимания того как это делали другие, просматривать только что собранные самим AN1-структуры. Процесс понятен. Но поскольку я работаю на Linux (сейчас это Mageia, и код для Windows тоже готовлю на Linux), то под рукой из доступных средств разбора ASN1-структур были утилиты openssl и derdump из пакета NSS. Лично мои предпочтения были на стороне derdump. Именно она и стала прототипом рассматриваемой здесь утилиты derdump.tcl/tclderdump для просмотра ASN1-структур. И если вы сравните вывод утилиты derdump из пакета NSS и утилиты derdump.tcl, то вы практически не увидите различий:



Отличия касаются наименований oid-ов. Утилита имеет следующий синтаксис:

$dertcl.tcl <входной файл> <выходной файл | stdout> <1 | 0> <der | pem | hex>

где

  • <входной файл> — указывает путь к файлу с ASN1-структурой;
  • <выходной файл> — указывает на файл, где будет сохранен результат разбора: если в качестве выходого файла указано stdout, то результат будет отправлен в стандартный вывод;
  • третий параметр указывает на то, что надо выводить полную (1) информацию;
  • четвертый параметр задает формат входного файла, где der – это бинарный файл, pem указывает на то, что файл содержит данные в кодировке base64 с заголовком «-----BEGIN … — » и концевиком «-----END … — » как это принято в openssl, и, наконец, hex говорит, что файл содержит шестнадцатеричный код. При этом он может содержать и спецсимволы (\r, \n, \t), пробелы и символы «.» и «:». Откуда появились символы точка и двоеточие станет понятно ниже.

Формат hex был для меня просто жизненно необходим. Ведь для того, чтобы разобрать какой-нибудь кусок из распарсенного файла, приходилось переводить его в бинарный вид (der-кодировка) и сново пропускать через утилиту. Формат hex очень облегчил жизнь.

Конечно, пользоваться чистым кодом tcl (а впрочем как и любым другим скриптовым кодом, например, python) не совсем комфортно. Поэтому утилиты оформлена в дистрибутивы tclderdump для платформ Linux, Windows и OS X. Эти дистрибутивы самодостаточны: скачиваешь и запускаешь.

Однако вернемся к возможности просматривать ASN1-структуры, хранящиеся в шестнадцатеричном вид. Помимо выше упоминавшихся утилит для просмотра ASN1-структур есть еще хорошая утилита pyderasn, написанная на Python, которая в выводе использует символы точка и двоеточие, и было решено, что они тоже могут присутствовать в шестнадцатеричном коде. Ниже приводится результат распарсивания одного и того же сертификата x509 v.3 утилитами derdump.tcl и pederasn:



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

Для этих целей было решено переориентировать функциональную кнопку «Информация о токене». Мы именно переориентировали кнопку и закрепили за ней новый функционал «Просмотр ASN1-структуры», а информацию о подключенном токене по-прежнему можно получить, наведя курсор на имя токена справа от метки «Выберите токен/смарткарту»:



Здесь все просто. Выбираем файл с ASN1-структурой, указываем в каком он формате, решаем нужны ли нам дополнительные подробности и нажимаем кнопку «Просмотр ASN1-файла»:



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

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

  • копировать в буфер обмена;
  • просмотреть выделенный блок.

И если выбрать пункт «Просмотреть выделенный блок», то появится окно с распарсенным блоком:



Если же нажать кнопку «копировать в буфер обмена», то выделенный блок будет скопирован в буфер обмена. Буфер обмена можно будет просмотреть, нажав кнопку «ASN1-буфера обмена». Пользователь может сам положить данные в буфер обмена своими средствами, а потом здесь их просмотреть.

И поскольку утилита часто обновляется, то добавлена возможность получения новых версий утилиты непосредственно из нею. Для этого достаточно навести курсор мыши на поле «PKCS#11, x509v3, PKCS#10, PKCS#7, CMS, PKCS#12, ASN1», нажать правую кнопку мыши и выбрать в появившемся меню пункт «О программе». В появившемся окне достаточно выбрать платформу и нажать левую клавишу мыши:



При успешном получении дистрибутива вы получите соответствующее сообщение о том, где сохранен полученный архив:



P.S. Для тех кто в первый раз хочет получить утилиты, это по-прежнему можно сделать здесь:

Дистрибутивы для Linux, OS X и Windows

Комментарии (9)


  1. BugM
    30.10.2019 22:25

    А зачем все это? Смотрю на я на всю эту серию статей и не понимаю зачем и кому оно вообще нужно? Кто потенциальный пользователь всего этого?

    Серия курсовых с последующим превращением в диплом?
    Подготовка для выхода на госзакупки?
    Импортозамещение?


    1. saipr Автор
      30.10.2019 22:41
      +1

      А вы не в курсе, что везде внедряется электронная подпись? Что людям нужны средства, позволяющие подписывать документы, проверять сертификаты и теже подписи, да и просто посмотреть их. Не подскажете как это можно сделать? Речь идет, естественно, о российской криптографии.


      Импортозамещение?

      Да нет, конечно. О каком импортозамещении может идти речь с ГОСТ-ой подписью!


      Подготовка для выхода на госзакупки?

      А у нас что открытый код закупают? Если так, то подскажите Где!


      Серия курсовых с последующим превращением в диплом?

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


      1. BugM
        30.10.2019 22:51
        -1

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

        А реальным пользователям из этой группы показывать свой софт пробовали? Они добровольно ни в жизни не будут пользоваться софтом который им сразу показывает десяток непонятных слов и десяток непонятных кнопок. Куда жать непонятно, что делать непонятно. Нажмешь не туда и вообще какой-то ужас на экран вылазит.
        Пользователям такого софта нужно максимум 2 кнопки: Подписать и Проверить подпись. Желательно одна: Подписать. А проверка должна делаться автоматически для всего сама. И эти кнопки должны быть в их CRM, СЭД, почте итд. Отдельную программу запускать ради одной кнопки сложно и не нужно.

        А что опенсорс не закупают? В виде техподдержки, настройки, внедрения итд закупают еще как.

        Я делал подобные. Там же ничего сложного. А интерфейс как раз намекает на студенческую поделку.


        1. vin2809
          31.10.2019 07:53
          +1

          А интерфейс как раз намекает на студенческую поделку.

          У нас Хабр только для профессоров? Если нет, то почему нельзя выложить "изнанку", т.е. устройство чего-либо? Что здесь плохого?


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


          Я двумя руками поддерживаю автора статьи, уважаю и шлю "+"...


          1. BugM
            31.10.2019 10:29

            Можно и нужно. Только тут "изнанки" не видно. Да что там изнанки, ссылки на код с ходу не видно. Подозреваю что он вообще закрыт.
            Предлагать качать бинарник и при этом ратовать за безопасность и правильные стандарты такое себе.


            1. saipr Автор
              31.10.2019 10:39

              Подозреваю что он вообще закрыт.

              Зачем же подозревать. Ведь все ссылки даны (например эта ), возьмите и проверьте. Прочитайте еще раз внимательно.


              ссылки на код с ходу не видно

              А это что по-вашему:


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

              И вообще в данном конкретном материале речь идет об инструменте для разбора ASN1-структур**. Он ни от чего не защищает, он помогает.


              1. BugM
                31.10.2019 12:42

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


                Ага, то есть это уже не утилита для подписи реальными пользователями, а демонстратор технологии. Тогда исходники и код в статье просто напрашиваются. Демонстрировать кишки сертификатов без кода странно.


                1. saipr Автор
                  31.10.2019 13:15

                  Почитайте и посмотрите внимательно.


                  1. Nova_Logic
                    31.10.2019 17:18

                    Ну да, конечно-же вы не нарушали лицензии.
                    И, видимо, до сих пор не нарушаете MPL:
                    copyright-violation-1
                    copyright-violation-2