Прикладная криптография

Рассматриваются распространенные в Internet способы защиты данных и их программные реализации.

Номинальный вклад этой работы в оценку — 10 единиц.

OpenPGP и GnuPG

  1. (1 ед.) Зашифруйте файл небольшого объема (10 ÷ 100 KiB) симметричным алгоритмом. Удостоверьтесь в возможности расшифровки по ключу.

    Пример: шифрование файла командой gpg -c.
    $ gpg -c -- okibris.text 
    Enter passphrase
    
    Passphrase: 
    Please re-enter this passphrase
    Passphrase: 
    $ 
    
    Пример: дешифрование файла и сравнение с исходным.
    $ gpg -d -- okibris.text.gpg \
          | cmp -- - okibris.text 
    gpg: AES256 encrypted data
    Enter passphrase
    
    Passphrase: 
    gpg: encrypted with 1 passphrase
    $ 
    
  2. (1 ед.) Создайте пару ключей и подключей (англ. subkeys) для формирования цифровых подписей и шифрования данных. Ограничьте срок действия пар несколькими месяцами. Опубликуйте открытый ключ на сервере ключей (англ. keyserver.)

    Пример: опубликование открытого ключа командой gpg --send-keys.
    $ gpg --keyserver pgp.mit.edu \
          --send-keys BA6A4G4058B9BF6F 
    
  3. (1 ед.) Найдите опубликованный где-либо (например, во Всемирной паутине) файл с цифровой подписью OpenPGP. Удостоверьтесь в действительности подписи.

    Пример: проверка цифровой подписи программой gpgv.
    $ gpgv --keyring=trusted-keys.gpg \
          -- gidriry.signed 
    gpgv: Signature made Tue 11 Feb 2020 20:20:20 UTC
    gpgv:                using RSA key 4B9752D83209BB7C888636FFBA6A4G4058B9BF6F
    gpgv: Good signature from “John R. Hacker <jrh@example.com>”
    $ 
    
  4. (3 ед.) Получите для своего открытого ключа подписи двух других пользователей OpenPGP и подпишите, в свою очередь, их открытые ключи. Удостоверьтесь в возможности проверки цифровых подписей и защищенного обмена данными с каждым из пользователей. Опубликуйте подписи на сервере ключей.

ITU-T X.509, S/MIME, XML-Sig, GnuTLS, OpenSSL

  1. (1 ед.) Установите защищенное соединение с каким-либо TLS-сервером используя «диагностический» TCP-клиент (например, gnutls-cli или socat.)

    Пример: установление защищенного TLS-соединения командой gnutls-cli.
    $ gnutls-cli -p https -- commons.wikimedia.org 
    Processed 128 CA certificate(s).
    Resolving 'commons.wikimedia.org:https'...
    Connecting to '2620:0:862:ed1a::1:443'...
    - Certificate type: X.509
    - Got a certificate list of 2 certificates.
    - Certificate[0] info:
     - subject `CN=*.wikipedia.org,O=Wikimedia Foundation\, Inc.. . .
    	Public Key ID:
    		sha1:2dd2c858d187f2f07daff6f9530c6d3a5b9c0f1d
    		sha256:c6cda20f59db428aebcca9cef81a9bad3c247fa3905a08c593e59da6d27d5f6a
    	Public Key PIN:
    		pin-sha256:xs2iD1nbQorrzKnO+BqbrTwkf6OQWgjFk+WdptJ9X2o=
    
    - Certificate[1] info:
     - subject `CN=DigiCert SHA2 High Assurance Server CA,. . .
    - Status: The certificate is trusted. 
    - Description: (TLS1.2)-(ECDHE-X25519)-(ECDSA-SHA256)-(CHACHA20-POLY1305)
    - Session ID: 7B:7B:E1:36:19:BD:78:FC:DC:3A:AA:82:A4:E9:29:58:75:D5:F2:1B:68:5A:ED:F6:97:69:8E:0D:C2:06:77:49
    - Options: extended master secret, safe renegotiation, OCSP status request,
    - Handshake was completed
    
    - Simple Client Mode:
    
    - Peer has closed the GnuTLS connection
    $ 
    
  2. (1 ед.) Найдите опубликованный где-либо (например, во Всемирной паутине) не являющийся сертификатом X.509 файл с цифровой подписью, открытый ключ которой заверен действительным сертификатом X.509. Удостоверьтесь в действительности подписи.

    Пример: проверка цифровой подписи S/MIME командой openssl smime.
    $ openssl smime -verify < skyrusi.rfc822 \
          | less -F 
    Verification successful
    Content-Type: text/plain^M
    ^M
    Hello, world!^M
    $ 
    
  3. (1 ед.) Создайте запрос на получение сертификата X.509 (certificate signing request, CSR.)

    (Воспользуйтесь, например, разделом X.509 Викиучебника «Сетевые средства Debian».)

  4. (2 ед.) Получите заверенный третьей стороной «серверный» сертификат X.509. Запустите какой-либо сервер с поддержкой TLS (HTTPS, ESMTPS, IRC/TLS, NNTP/TLS, etc.) Удостоверьтесь в возможности установления с ним защищенного соединения.

    (Здесь можно воспользоваться, например, http://cacert.org/ или http://letsencrypt.org/. Обратите внимание, что в обоих случаях потребуется подтвердить владение DNS-именем, на которое выписывается сертификат.)

  5. (1 ед.) Получите заверенный третьей стороной «клиентский» сертификат X.509. Удостоверьтесь в возможности его использования для аутентикации или формирования действительных цифровых подписей (openssl smime, xmlsec1, или иной программой.)

  6. (1 ед.) Создайте собственный удостоверяющий центр (англ. certificate authority, CA; используйте, например, Easy-RSA.) Заверьте запросы на получение сертификатов двум другим пользователям. Удостоверьтесь в действительности сформированных сертификатов.

Оформление отчета

  1. (1 ед.) Оформите отчет в виде документа HTML.

    Обратите внимание на то, что документ должен не только корректно воспроизводится соответствующим программным обеспечением, но и успешно проходить формальную проверку с использованием http://html5.validator.nu/ и (или) иных подобных средств. Элементы и атрибуты HTML должны быть использованы семантически-обоснованно — сообразно смыслу, которым их наделяет текущая практика и актуальные спецификации.

  2. (1 ед.) Заверьте отчет цифровой подписью (OpenPGP, S/MIME, XML-Sig — в зависимости от ситуации.)