Jurik-Phys.Net

~ Простота и ясность ~

Инструменты пользователя

Инструменты сайта


Боковая панель

Категории

Контакты

itechnology:crypto

Это старая версия документа!


Криптография

Предисловие

Я хочу добиться высокой степени безопасности своей системы. Как и какими средствами мне этого достичь?

Достижение любой цели не обходится без определённых жертв (переосмыслив которые в будущем, Вы можете даже принять их за благо), и важным шагом на таком пути будет отказ от MS Windows. Однако, это не означает что переход произойдёт моментально и без трудностей, но нужно понемногу работать в этом направлении и изучать Unix-системы, Linux или *BSD.

Зацикленность людей на Windows и поиск решений для укрепления этой ОС напоминает визит к врачу тяжело больного пациента, который просит быстродействующего и быстропомогающего лекарства. Врач понимает, что такое лекарство может ему временно помочь, однако оно не вылечит болезнь, не увеличит срок жизни, и больной всё равно продолжит идти к могиле. Вместо этого ему предлагаются кардинальные методы (*nix-система), которые могут помочь, но они не действуют моментально, требуют терпения и выдержки, требуют сменить привычный образ жизни, требуют регулировать своё питание, и ещё много в чём себя контролировать/исправлять. Но, как показывает практика, больные в большинстве тем не менее выбирают морфий Windows. [ источник ]

Основные понятия

Стандарной программой шифрования в линуксе является PGP - Pretty Good Privacy (бесплатна для некоммерческого использования) или открытый аналог этой GnuPG - Gnu Privacy Guard.

Симметричные шифры

  • Единый ключ для зашифровывания и расшифровывания данных.
  • Передача ключа по защищённому каналу.
  • Алгоритмы: 3DES, Blowfish, IDEA, ГОСТ.
  • Характерный размер ключа ~128 бит.

Шифры с открытым ключом

  • Открытый ключ (public key) - передаётся по открытому каналу, хранится, как правило, в системе хранения ключей. Служит для шифрования сообщения к владельцу парного секретного ключа (private key).
  • Секретный ключ (private key) - хранится локально и приватно (для сохранности в нескольких местах). Служит для расшифровки сообщений, зашифрованных парным открытым ключом.
  • Алгоритмы: RSA, DSA.
  • Характерный размер ключа ~2048 бит.

Смешанные шифры

Рас/шифровывание с использованием пары ключей проходит на два-три порядка медленнее, в сравнении с симметричным алгоритмом, требует бо́льших вычислительных ресурсов, поэтому на практике используются смешанные шифры:

  • Сообщение для получателя кодируется симметричным шифром, с использованием сеансового ключа, который в свою очередь кодируется открытым ключом получателя.
  • Получатель расшифровывает свом секретным ключом сеансовый ключ, который используется для расшифровки основного сообщения.

Цифровая подпись

Для реализации ЭЦП необходимо, чтобы шифр обладал тем свойством, что и открытый ключ, и секретный ключ может быть использован алгоритмом шифрования в качестве открытого ключа. RSA - является таким алгоритмом, а ElGamal нет.

  • Вычисляется хеш-функция сообщения.
  • Полученное значение шифруется с помощью секретного ключа. Документ отправляется получателю.
  • Получатель, используя открытый ключ отправителя (соответствующий секретному ключу, которым было зашифровано сообщение), расшифровывает хеш-функцию и сравнивает полученное значение с хешем полученного сообщения.

Источник

Работа с GnuPG

Управление ключами

  • Создание ключа
    gpg --gen-key
  • Генерация сертификата отзыва
    gpg --list-keys
    /home/user/.gnupg/pubring.gpg
    ---------------------------------
    pub  1024D/95447C14 2014-02-08 Name Family <user@nowhere.someplace.com>
    sub  2048g/96D6CDAD 2014-02-08
    gpg --output revoke.asc --gen-revoke 95447C14

    После создания ключа и сертификата отзыва необходимо сделать резервную копию полученных файлов (по-умолчанию распологаются в ~/.gpg/) в защищённом хранилище.

  • Редактирование ключа происходит в полуинтерактивном режиме:
    gpg --edit-key 4600813F

    или по данным пользователя

    gpg --edit-key user@nowhere.someplace.com
  • Просмотр списка известных ключей
    # публичные ключи
    gpg --list-keys
    # приватные ключи
    gpg --list-secret-keys
  • Распространение публичного ключа
    # запрос публичного ключа
    gpg --keyserver subkeys.pgp.net --recv-keys 5B20C7D2
    # отправка своего публичного ключа на сервер
    gpg --keyserver subkeys.pgp.net --send-keys 5B20C7D2
    # обновление ключей в локальном хранилище ключей
    gpg --refresh-keys --keyserver subkeys.pgp.net
    # экспорт публичного ключа в файл
    gpg --armor -output 4600813F.pub --export 4600813F
    # импортировать открытый ключ из файла
    gpg --fetch-keys http://example.com/4600813F.pub

(Рас)шифрование файлов

  • Шифрование file.txt открытым ключом, принадлежащим name@dei.uc.pt
    gpg --output file.txt.gpg --encrypt --recipient name@dei.uc.pt file.txt
  • Создать подпись документа в отдельном файле file.txt.sig
    gpg --recipient name@dei.uc.pt --detach-sign file.txt
  • Добавить подпись в конец документа
    gpg --sign --recipient name@dei.uc.pt file.txt
  • Зашифровать и подписать документ
    gpg --sign --encrypt --recipient name@dei.uc.pt file.txt
  • Расшифровать и проверить подпись документа, созданного личным открытым ключом
    gpg --output file.txt --decrypt file.txt.gpg
  • Проверка подписи
    gpg --verify file.txt.sig file.txt

Симметричное шифрование

  • Зашифровать файл
    gpg --output file.txt.gpg --symmetric file.txt
  • Расшифровать файл
    gpg --output file.txt --decrypt file.txt.gpg

Источники: раз, два

Хранение паролей: Vim + GnuPG

Общие положения

Дана машина, доступная из сети по ssh, на машине установлен криптографический пакет gpg, установлен vim с плагином vim-gnupg, а также дополнительно доступен git.
Задача обеспечить приватный доступ и хранение паролей на данной машине. Информация: тыц.

  1. Генерируем пару ключей на целевой машине, тыц
    Не забываем сделать копии секретного ключа и создать сертификат отзыва.
  2. Тестируем работоспособность шифрования на файле test.txt:
    Если всё сделано правильно, то будет создан шифрованный файл test.txt.gpg
    gpg --encrypt --recipient master@jurik-phys.net test.txt
  3. Устанавливаем Vim-GnuPG в систему:
    sudo apt-get install vim-scripts
  4. Подключаем плагин к vim'у:
    # создаём локальный каталог плагина
    mkdir ~/.vim/plugin
    # создаём символическую ссылку на плагин
    ln -s /usr/share/vim-scripts/plugin/gnupg.vim ~/.vim/plugin/gnupg.vim
  5. Открываем vim'ом ранее зашифрованный файл
    vim test.txt.gpg

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

  6. При создании новго зашифрованного файла, vim попросит указать получателя
    vim secret.gpg

Настройки в vimrc

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

" Tell the GnuPG plugin to armor new files.
let g:GPGPreferArmor=1
 
" Tell the GnuPG plugin to sign new files.
let g:GPGPreferSign=1
 
augroup GnuPGExtra
    " Set extra file options.
    autocmd BufReadCmd,FileReadCmd *.\(gpg\|asc\|pgp\) call SetGPGOptions()
    " Automatically close unmodified files after inactivity.
    autocmd CursorHold *.\(gpg\|asc\|pgp\) quit
augroup END
 
function SetGPGOptions()
    " Set updatetime to 1 minute.
    set updatetime=60000
    " Fold at markers.
    set foldmethod=marker
    " Remove comment symbols.
    set commentstring=%s
    " Automatically close all folds.
    set foldclose=all
    " Only open folds with insert commands.
    set foldopen=insert
endfunction 

Генерация паролей

Для генерации можно использовать утилиту pwgen прямо из vim'а

:r!pwgen -sy 12 1
itechnology/crypto.1402679257.txt.gz · Последнее изменение: 2014/06/13 21:07 — jurik_phys

Инструменты страницы