===== Age шифрование =====
==== Тестируем утилиту шифрования Age 1.0 ====
[[https://age-encryption.org/|Age]] – новейшая утилита, написанная на Go, которая по заверениям выполняет прекрасное потоковове ассиметричное шифрование и не только. Шифрует входной поток в выходной, просто и понятно. Из отличительных особенностей, можно зашифровать для //группы получателей, так чтобы каждый мог расшифровать//.
Данные нужно шифровать. Раздел, допустим, **300 GiB** и грузить его одним куском, да и хранить в целом, очень не интересно. [[https://man7.org/linux/man-pages/man1/split.1.html|Split]] поможет раздробить файл на куски.
===== Генерируем ключ =====
Утверждается, что можно просто SSH public key использовать, кроме ключа age. Попробуем и то, и то.
ssh-keygen -t ed25519 -o -a 150 -qN '' -f id_ed25519
age-keygen -o age.key
age-keygen -y age.key> recipients.txt
cat id_ed25519.pub>> recipients.txt
Получаем вот такие ключи.
age1qrcn5glms66thfv9cj5pzdwl3z87t9evzaqlxdj9ksravmw3mypswawuag
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIObk2OuhYlrr3ezvf5gAWXgUdcLn4XQFa8B8GCRpBr9q user@host
Шифрование
Для простоты, просто сгенерим 10 MiB со случайными данными и сразу сделаем копию, чтобы потом сравнить хеш-суммы.
dd if=/dev/urandom of=data bs=1M count=10
cp data data.orig
Теперь можно шифровать. Использую и архивацию, и разделение.
tar -cz data | age -R recipients.txt | split -b 1MiB -d - chunk-
Получаем 10 файлов от chunk-00 до chunk-10.
===== Расшифровка =====
Расшифруем используя SSH ключ.
cat chunk-* | age -d -i id_ed25519 | tar xz
mv data data.ssh
Расшифруем используя Age ключ.
cat chunk-* | age -d -i age.key | tar xz
mv data data.age
===== Проверка =====
Сверим Hash суммы.
# sha256sum data*
5ebc271a22cfb9af0430253c2d8f3b83d1c3f5fdd062dd0ecc6c1f2d7925b828 data.age
5ebc271a22cfb9af0430253c2d8f3b83d1c3f5fdd062dd0ecc6c1f2d7925b828 data.orig
5ebc271a22cfb9af0430253c2d8f3b83d1c3f5fdd062dd0ecc6c1f2d7925b828 data.ssh
Вроде работает. Как и всегда, позже найдут какие-то уязвимости, но использовать можно. Множественные адресаты это интересная особенность.