# Задания

### 1. 
Скачайте дистрибутив debian debian-11.4.0-amd64-netinst.iso c 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`. 

# Справка

### Хэш функция
```
hash(value: массив байт) -> массив байт фиксированной длины N 
```
Примеры: sha1, sha256

### Симметричная криптография
```
keygen() -> ключ  (this function is randomized)

encrypt(данные: массив байт, ключ) -> шифрованные данные
decrypt(шифрованные данные: массив байт, ключ) -> данные
```
Примеры: DES, AES-256

### Асимметричная криптография
```
keygen() -> (открытый ключ, закрытый ключ) (функция основана на генерации случайных чисел)

encrypt(данные, открытый ключ) -> шифрованные данные
decrypt(шифрованные данные, закрытый ключ) -> данные

sign(данные, закрытый ключ) -> массив<байт> (подпись)
verify(данные, подпись: массив<байт>, открытый ключ) -> bool (является ли подпись действительной или нет)
```
Примеры: RSA, ed25519