Age – новейшая утилита, написанная на Go, которая по заверениям выполняет прекрасное потоковове ассиметричное шифрование и не только. Шифрует входной поток в выходной, просто и понятно. Из отличительных особенностей, можно зашифровать для группы получателей, так чтобы каждый мог расшифровать.

Данные нужно шифровать. Раздел, допустим, 300 GiB и грузить его одним куском, да и хранить в целом, очень не интересно. 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

Вроде работает. Как и всегда, позже найдут какие-то уязвимости, но использовать можно. Множественные адресаты это интересная особенность.