# Задания ### 1. Скачайте дистрибутив `debian-11.4.0-amd64-netinst.iso` по ссылке http://mirror.corbina.net/debian-cd/current/amd64/iso-cd/. Рассчитайте хэш sha256 командой sha256sum для дистрибутива debian и проверьте целостность данных, сравнив значение с значением в файле SHA256SUMS. ### 2. Зашифруйте и расшифруйте данные с помощью openssl enc. Используйте команды: ``` openssl enc -in infile.txt -out encrypted.data -e -aes256 -k symmetrickey openssl enc -d -aes-256-cbc -in encrypted.data -out un_encrypted.data ``` Для вывода информации о возможных шифрах используйте одну из команд: ``` openssl help openssl enc -list ``` Выведите содержимое encrypted.data в консоль. ### 3. Зашифруйте и расшифруйте данные с помощью gpg. Используйте команды: ``` gpg --output encrypted.data --symmetric --cipher-algo AES256 un_encrypted.data gpg --output un_encrypted.data --decrypt encrypted.data ``` Выведите содержимое encrypted.data в консоль. ### 4. Сгенерируйте ed25519 пару ключей `ssh-keygen -o -a 100 -t ed25519`. Перейдите в `~/.ssh/` и проверьте, появилась ли пара SSH-ключей. Настройте возможность беспарольного входа в систему по ssh, добавить содержимое публичного ключа (.pub) в `authorized_keys` в той же директории (создайте файл, если его не существует). ### 5. Используйте `ssh-copy-id имя-удаленной-машины`, чтобы скопировать ваш ssh-ключ на сервер. Перед установкой попробуйте команду в тестовом режиме с ключом `-n`. ### 6. Отредактируйте `.ssh/config` на локальной машине, чтобы запись выглядела следующим образом ``` Host псевдоним User имя пользователя HostName имя хоста или ip адрес хоста IdentityFile ~/.ssh/id_ed25519 ``` Страница документации конфигурационного файла sshd `man ssh_config`. ### 7. Отредактируйте конфигурацию вашего SSH-сервера, выполнив `sudo vi /etc/ssh/sshd_config`. Отключите проверку по паролю, отредактировав значение `PasswordAuthentication`. Отключите вход с правами суперпользователя, отредактировав значение `PermitRootLogin`. Перезапустите службу ssh с помощью `sudo systemctl restart sshd`. ! Перед перезапуском сервера, установите в отдельном окне резервное соединение с удалённой машиной, на случай если вход по ключу не работает или присутствует ошибка конфигурации. Страница документации конфигурационного файла sshd `man sshd_config`. Попробуйте подключиться ещё раз. Попробуйте подключиться ещё раз по паролю (добавьте флаг `-o PubkeyAuthentication=no` к ssh команде). ### 8. Сгенерируйте самоподписанный сертификат x.509 и ключ с помощью `openssl`. Посмотрите содержимое сертификата командой `openssl x509`. ### 9. Получите сертификат с помощью утилиты `certbot` https://certbot.eff.org/ или скрипта `acme.sh` https://github.com/acmesh-official/acme.sh от центра сертификации https://letsencrypt.org/. Изучите его содержимое командой `openssl`. # Справка ### Хэш функция ``` hash(value: массив байт) -> массив байт фиксированной длины N ``` Примеры: sha1, sha256 ### Симметричная криптография ``` keygen() -> ключ (this function is randomized) encrypt(данные: массив байт, ключ) -> шифрованные данные decrypt(шифрованные данные: массив байт, ключ) -> данные ``` Примеры: DES, AES-256 ### Асимметричная криптография ``` keygen() -> (открытый ключ, закрытый ключ) (функция основана на генерации случайных чисел) encrypt(данные, открытый ключ) -> шифрованные данные decrypt(шифрованные данные, закрытый ключ) -> данные sign(данные, закрытый ключ) -> массив<байт> (подпись) verify(данные, подпись: массив<байт>, открытый ключ) -> bool (является ли подпись действительной или нет) ``` Примеры: RSA, ed25519 Релевантные ссылки: - https://missing.csail.mit.edu/2020/security/ - https://letsencrypt.org/how-it-works/ TODO https://www.golinuxcloud.com/generate-ssh-key-linux/