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

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

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

Я расскажу о том, как сохранить конфиденциальность своей информации с помощью инструмента GPG.

GnuPG (Gnu Privacy Guard) — свободная программа для шифрования информации и создания электронных цифровых подписей. Разработана как альтернатива коммерческой программе PGP. GnuPG полностью совместима со стандартом IETF OpenPGP.

Инструмент командной строки для GnuPG называется GPG. Им я и буду пользоваться. В данной публикации все манипуляции будут выполняться в операционной системе Linux. В ней уже установлено программное обеспечение GnuPG.

Если вы используете macOS, то вам нужно установить GPG-Suite, или воспользоваться командой brew install gnupg2. Если вы пользователь Windows, то советую вам установить GPG4Win.

Шифрование файла с помощью пароля

Далее речь пойдёт о симметричном шифровании. Методе шифрования, при котором для шифрования и дешифрования применяется один и тот криптографический ключ.

1. Создание текстового файла для шифрования

Создать пустой файл через терминал можно с помощью команды: cat > имя_файла.

Файл будет создан в вашей домашней папке.

В данном случае:

Запишем в файл стихотворение Евгения Евтушенко.

2. Шифрование файла

Вводим следующую команду: gpg -c message.txt.

Опция (или --symmetric) означает шифрование только симметричным шифром. Далее нужно будет ввести фразу-пароль, которая станет ключом.

В итоге в директории с исходным файлом появится файл с расширением gpg. Это зашифрованный файл.

Если попытаетесь его открыть как обычный файл, то увидите примерно следующее:

3. Дешифрование

Для расшифровки этого файла следует ввести в терминале следующую команду: gpg --decrypt message.txt.gpg. Утилита запросит фразу-пароль. Если был введён верный пароль, то на экране отобразится исходный текст.

Для записи дешифрованной информации в отдельный файл добавьте опцию --output и после укажите название файла.

Шифрование файла с помощью ключей

Шифрование с помощью пары ключей – это уже ассиметричное шифрование. Данный метод является более надёжным. Шифрование осуществляется с помощью публичного ключа, а дешифровка - с использованием приватного ключа. Без приватного ключа вы не сможете выяснить что содержалось в исходном файле.

1. Создание ключей

Для создания пары ключей наберите следующую команду в терминале: gpg --full-generate-key.

Необходимо будет ввести тип ключа, размер ключа (по умолчанию 3072 бит), срок действия ключа, идентификатор пользователя (полное имя, адрес электронной почты) и примечание ключа (если нужно).

Идентификатор пользователя будет использован в качестве идентификатора ключа.

В конце нужно будет подтвердить корректность введённой информации и придумать фразу-пароль для защиты нового ключа.

В документации также указана команда gpg –gen-key, но при её использовании ряд параметров такие, как тип, размер ключа будут взяты по умолчанию. Срок действия ключа будет 2 года.

В скрытой директории ~./gnupg появятся файлы с ключами. В файле pubring.gpg публичный ключ, а в secring.gpg - приватный.

Также все свои доступные ключи можно увидеть с помощью команды: gpg –list-keys.

На скриншоте два ключа: первый был создан с помощью команды gpg –gen-key, второй – с помощью gpg –full-generate-key с параметрами, указанными ранее.

3. Шифрование

Для шифрования введите следующую команду: gpg -e -r идентификатор_пользователя имя_файла.

В качестве идентификатора пользователя я указал просто Dmitry, поэтому утилита выбрала первый по порядку ключ. Чтобы зашифровать информацию с помощью второго ключа, нужно было ввести идентификатор однозначно определяющий второй ключ. Например, ‘Dmitry Alekseev (best key)’.

Опять же в директории с исходным файлом будет создан файл с расширением gpg.

3. Дешифрование

Команда для дешифровки: gpg -d имя_файла.gpg.

Необходимо ввести фразу-пароль.

После в терминале отобразится дешифрованная информация.

Использование цифровой подписи для файла

Цифровая подпись позволяет подтвердить авторство электронного документа. На основе файла и ключа создаётся отпечаток, который записывается в файл. Если файл будет изменён, то отпечаток уже не совпадёт.

1. Создание цифровой подписи

Вы можете подписать файл с помощью команды: gpg -sign имя_файла.

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

Опять же в директории с исходным файлом появится файл с расширением gpg.

Также вы можете создать подпись в отдельном файле: gpg -b имя_файла.

В директории появится файл с расширением sig.

2. Проверка подлинности файла

Введите следующую команду: gpg --verify имя_файла.sig имя_файла.

Если файл не был изменён, то вы увидите следующее.

Если файл был изменён, то при проверке на экране появится следующее сообщение.

Вывод:

Мы с вами познакомились с таким популярным инструментом шифрования как GPG. Эта утилита обладает большими возможностями по защите информации, мы с вами рассмотрели только часть. Посмотреть документацию по ней можно с помощью команды gpg - h.

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


  1. 13werwolf13
    11.04.2022 08:26
    +2

    Создать пустой файл через терминал можно с помощью команды: cat > имя_файла

    интересно почему так часто юзают cat и echo для создания пустых файлов если есть touch..


    1. hogstaberg
      11.04.2022 08:43
      +4

      Ну, для начала, первичным функционалом touch тоже является далеко не создание файла, так что с этой позиции он ничем не отличается от cat/echo.
      Я лично использую именно cat > filename когда мне нужно быть уверенным в том, что файл точно окажется пустым независимо от его изначального наличия и/или содержимого до этого момента. В случае touch нужно будет ещё и truncate делать.


      1. 13werwolf13
        11.04.2022 09:02

        @DirectoriXотвечу сразу и тебе

        но в таком случае есть возможность затереть существующий файл что как по мне хуже

        в таком случае независимо от того используется `cat > file` или `touch file` лучше делать проверку на его существование ДО выполнения cat/touch чем потом матерится осознавая что затёр то что не следовало затирать


    1. DirectoriX
      11.04.2022 08:43
      +1

      Предположу, что для получения пустого файла, даже в том случае если файл с таким именем уже существует. Если "потрогать" существующий файл, он от этого пустым не станет, а touch + truncate или rm + touch - две команды вместо одной.


    1. Pinkbyte
      11.04.2022 11:00
      +1

      Вот именно, ведь достаточно просто:
      > имя_файла


    1. tarekd
      12.04.2022 05:55
      +1

      можно обойтись одной командой используя Here document

      $ cat > message.txt <<EOF
      Людей неинтересных в мире нет.
      Их судьбы - как истории планет.
      ...
      EOF


  1. saipr
    11.04.2022 09:00
    +2

    Для хранения приватных ключей сертификатов в GnuPG можно использовать и криптографические токены PKCS#11. Для доступа к токенам PKCS#11 в GnuPG используется утилита gnupg_pkcs11_scd.
    image
    Говоря о GnuPG нужно вспомнить о Клеопатре и почтовых клиентах, использующих его.


    1. 13werwolf13
      11.04.2022 09:04

      выбор почтового клиента с gpg это на самом деле нетривиальная задача, в случае десктопа есть два варианта thunderbird и kmail. первый плох тем что не использует системное хранилище ключей а делает своё, второй достаточно НЕинтуитивен. для смартфона похоже что нету ничего кроме k9 mail который конечно хорошо работает но выглядит как привет из далёкого прошлого..


      1. saipr
        11.04.2022 09:29

        есть два варианта thunderbird и kmail. первый плох тем что не использует системное хранилище ключей а делает своё,

        Конечно, вы можете использовать системное хранилище NSS (Network Security Services). Но я говорю об аппаратных криптографических токенах PKCS#11, которые являются вашим личным хранилищем и вы его храните у себя, например, в кармане


        1. 13werwolf13
          11.04.2022 09:30
          +1

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


          1. saipr
            11.04.2022 09:33

            Рано или поздно ломается всё -). А невовремя — это проблема.


    1. astenix
      11.04.2022 14:53
      +1

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

      А потом обнаружил, что с ключами (что gpg, что ssh) мне всяко удобнее в консоли.


      1. saipr
        11.04.2022 15:12
        -1

        Я тоже сижу в консоле, когда программирую.


  1. randomsimplenumber
    11.04.2022 09:21
    +2

    Кстати, в openssl всё это тоже есть. Только длина ключей отличается.


    1. saipr
      11.04.2022 09:31
      -2

      Кстати, в openssl всё это тоже есть.

      Что есть? Поддержка различных криптографических алгоритмов или что? Длина ключа у каждого криптографического алгоритмов своя.


      1. randomsimplenumber
        11.04.2022 10:20
        +2

        Что есть?

        Шифрование файлов с помощью симметричной и асимметричной криптографии. Цифровые подписи. Ключи.


        1. saipr
          11.04.2022 10:31
          -1

          Как говорится


          OpenSSL и Network Security Services (NSS) — две стороны одной медали

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


          1. randomsimplenumber
            11.04.2022 10:43
            +2

            Да. Это я не к тому, что gpg не нужен, если есть openssl. Просто упомянул, что способов шифрования под Linux много.


            1. saipr
              11.04.2022 10:53
              -1

              способов шифрования под Linux много

              Способы стандартные, а реализаций МНОГО и не только под Linux. Можно назвать ещё GnuTLS, GCrypt и т.д и т.п.


  1. agent_0007
    11.04.2022 10:05
    +2

    Чуть чуть дополню вашу статью, если зашифрованный фаил потом закодировать в base64, то его можно будет пересылать plain text через мессанджер если он маленького размера, если размер большой(в пределах разумного), то можно порезать на чанки и передать несколькими сообщениями. Обычно делают однострочную комманду и прописывают на алиас, и шифрованный фаил сразу шифруется и бейсится и результат выводится на экран для копи-пасты. Удобно передавать маленькие конфиги)


    1. andreishe
      11.04.2022 11:20
      -1

      То же самое можно делать с любым файлом. Причем тут шифрование?


      1. randomsimplenumber
        11.04.2022 11:41

        Более того, через мессенджер можно и бинарные файлы передавать, не особо смотря на размер.


    1. masai
      11.04.2022 11:44

      У GPG есть параметр --armor. С ним зашифрованный файл будет содержать текст, который можно безопасно вставить в переписку.


  1. veritywindrider
    11.04.2022 10:36
    +1

    Хорошая и нужная статья