- Обзор
- Быстрая настройка
- Принципы работы
- Ручная настройка
- Списки разрешённых операций
- Производительность шифрования
Обзор
Начиная с версии 3.1.0, Vitastor предоставляет полную защиту данных: защиту слоя управления (etcd), защиту слоя данных (OSD) и сквозное шифрование данных.
- Защита слоя управления:
- Шифрование соединений с etcd (TLS)
- Аутентификация по клиентским TLS (X.509) сертификатам
- Контроль доступа клиентов к данным etcd
- Защита слоя данных:
- Либо полное AES-GCM шифрование соединений с OSD (аналогично TLS, но быстрее)
- Либо шифрование AES-GCM только заголовков команд с контрольными суммами данных с секретной “солью”
- Аутентификация по клиентским TLS (X.509) сертификатам
- Контроль доступа клиентов на стороне OSD
- Сквозное шифрование:
- Данные шифруются AES-XTS на стороне клиента, кластер Vitastor не имеет доступа к открытым данным
- Ключи AES-XTS могут храниться в etcd или во внешнем Vault/OpenBao
Все функции опциональны и в простейшем варианте настройки выключены. По умолчанию включены только контрольные суммы данных на транспортном уровне (proto_checksums=payload) для поддерживающих их клиентов (>= 3.1.0). Для более старых клиентов по умолчанию разрешены соединения без контрольных сумм данных (force_proto_checksums пусто).
Для быстрой настройки перейдите к разделу Быстрая настройка.
Описания всех параметров, связанных с безопасностью, читайте здесь.
Быстрая настройка
Для быстрой настройки используйте скрипт /usr/lib/vitastor/mon/make-etcd:
- Зайдите на узел, на котором будет располагаться первый монитор и etcd.
- Создайте там минимальный
/etc/vitastor/vitastor.confс параметрами etcd_address, osd_network и, если хотите включить привилегии - use_perms (обратите внимание наhttps://в адресах etcd):{ "etcd_address": ["https://10.0.0.10:2379","https://10.0.0.11:2379","https://10.0.0.12:2379"], "osd_network": "10.0.0.0/24", "use_perms": true } - Запустите
/usr/lib/vitastor/mon/make-etcdбез параметров или с параметром--antietcd-only, если хотите инициализировать кластер только с Antietcd без etcd. - Скрипт сгенерирует все необходимые сертификаты и предложит скопировать их на остальные узлы мониторов. Для этого нужен root ssh доступ к этим узлам. Если он есть - соглашайтесь, скрипт автоматически скопирует конфигурацию и инициализирует все etcd и мониторы.
- Если root ssh доступа с первого узла на остальные узлы мониторов нет - скопируйте на них конфигурацию
вручную (vitastor.conf и все сертификаты и ключи, кроме ключей CA
*_ca.key) и повторите на каждом узле вызов/usr/lib/vitastor/mon/make-etcd.
После этого можете переходить к инициализации OSD.
Если хотите разобраться в настройке подробнее, читайте далее разделы Принципы работы и Ручная настройка.
Принципы работы
Шифрование соединений с etcd (TLS)
Варианты настройки:
- Без шифрования (http)
- С шифрованием (https)
- С шифрованием и аутентификацией по клиентским сертификатам. Используется либо тот
же сертификат, что используется для аутентификации на стороне OSD (
cert+pkey/osd_cert+osd_pkey), либо отдельно указанный сертификат (etcd_client_cert+etcd_client_key)
Шифрование соединений с OSD (AES-GCM)
Варианты настройки:
- Без шифрования и без контрольных сумм:
proto_checksums=none. - Без шифрования, с контрольными суммами данных:
proto_checksums=payload(можно не указывать, т.к. это значение по умолчанию). При этом контрольные суммы можно отключить на стороне клиента и можно использовать более старые версии клиента, не поддерживающие контрольные суммы. Если нужно запретить подключение клиентов без контрольных сумм, можно использовать опциюforce_proto_checksums=payload. - С шифрованием заголовков и контрольными суммами данных: активируется при установленных опциях
cert,pkey,osd_caна стороне клиента иosd_cert,osd_pkey,osd_ca,client_caна стороне OSD, приproto_checksums=payload. При этом по умолчанию запрещается отключение контрольных сумм на уровне клиента, то есть используетсяforce_proto_checksums=payload. - С полным шифрованием всего трафика: аналогично прошлому варианту, но с
proto_checksums=gcm. Клиенту при этом по умолчанию разрешается понизить уровень защиты до контрольных сумм, но это тоже можно запретить черезforce_proto_checksums=gcm. Данный вариант самый медленный и рекомендуется только для небезопасных (публичных) сетей. В том числе потому, что при использовании и полного шифрования трафика, и сквозного шифрования образов AES-XTS, данные шифруются дважды.
Для шифрования используется алгоритм AES-256-GCM и собственный упрощённый протокол согласования ключей, полностью аналогичный TLS 1.3 ECDHE.
Сквозное шифрование данных образов (AES-XTS)
Клиент Vitastor поддерживает шифрование данных каждого образа своим ключом. В этом случае на OSD уходят уже зашифрованные данные и сами OSD не видят исходные данные клиента. При этом ключ можно менять при клонировании/создании снимков образов. Например, можно сделать базовый образ ВМ (условный Debian Linux) нешифрованным, но наследовать от него шифрованные образы клиентских ВМ.
Ключи шифрования образов могут храниться либо в etcd, либо во внешнем Vault. Во втором случае
в etcd хранятся только ID ключей, а Vitastor вообще не имеет доступа к данным образов. Для
использования Vault нужно создать образ с опцией --enc_key vault:ID, в конфигурации указать
опции vault_url и vault_ca, создать всем клиентам учётные записи в Vault и дать им доступ
к требуемым секретам v1.
Ещё раз повторимся, что если AES-XTS используется с полным шифрованием трафика (proto_checksums=gcm),
то данные образов шифруются дважды - сначала AES-XTS, а потом AES-GCM. Можете использовать,
только если вы совсем параноик :-).
Аутентификация по сертификатам
При включённом шифровании клиенты, OSD и мониторы Vitastor аутентифицируются по сертификатам как при соединениях с etcd (Antietcd), так и с OSD.
Для OSD и мониторов должны использоваться отдельные сертификаты - либо самоподписанные, либо
подписанные отдельными CA (osd_ca и mon_ca). При этом все OSD могут использовать один и
тот же сертификат и все мониторы тоже могут использовать один и тот же сертификат, так как
привилегии разных OSD или разных мониторов ничем не отличаются (теоретически можно было бы
сделать разграничение сертификатов OSD по пулам, но пока что такой необходимости не было).
Также сертификат монитора может быть вообще не нужен, если Antietcd встраивается в сам монитор. В этом случае монитор и так имеет доступ ко всем данным etcd прямо в памяти.
Пользователи и права доступа
При отключённом шифровании трафика Vitastor работает без контроля доступа, то есть, любой клиент кластера имеет полный доступ как к слою управлению, так и к слою данных. Такой вариант подходит для выделенных доверенных сетей хранения.
При включённом шифровании трафика OSD (хотя бы заголовков) есть возможность задействовать
контроль доступа, включив опцию use_perms=true. При включённой опции каждый пользователь
(и даже OSD и монитор) может выполнять только те операции, которые ему разрешены.
Каждый обычный пользователь, администратор, OSD или монитор должен иметь свой сертификат, подписанный отдельным корневым сертификатом:
- Для обычных пользователей -
client_ca. Common Name сертификата при этом должен быть равен имени пользователя. Обычные пользователи могут только читать и модифицировать явным образом разрешённые им образы и не могут менять общее состояние кластера. - Для администраторов -
admin_ca. Администраторы могут читать и модифицировать все образы, а также администрировать кластер: смотреть общую статистику и состояние, создавать и удалять OSD и так далее. - Для OSD -
osd_ca, для мониторов -mon_ca(если Antietcd запускаются отдельно от мониторов). OSD и мониторы тоже имеют свои наборы разрешённых операций.
Настройки привилегий для обычных пользователей хранятся в etcd и на данный момент состоят
всего из одного свойства в ключах /vitastor/config/user/<имя>:
groups- Список имён групп, членом которых пользователь является.
У образов есть следующие свойства:
- Владелец (
owner) - имя пользователя, которому разрешено и читать, и менять образ - Группа владельцев (
owner_group) - имя группы владельцев - Группа читателей (
reader_group) - имя группы пользователей, которым разрешено читать образ
И также есть свойство у пула:
- Группа создателей (
creator_group) - имя группы пользователей, которым разрешено создавать образы в пуле
Перечень разрешённых операций с данными образов на стороне OSD смотрите в разделе Права доступа к данным OSD.
Привилегии etcd
Привилегии etcd реализуются через Antietcd во всех режимах работы.
Встроенные привилегии etcd не поддерживаются по причине их многочисленных неудобств:
- Аутентификация по сертификатам вообще не работает в REST интерфейсе etcd,
- Привилегии хранятся отдельно от k/v данных и не могут участвовать в транзакциях,
- Менять привилегии может только администратор (root),
- Нет поддержки фильтрации диапазонных ответов чтения по привилегиям.
Если используется etcd, то Antietcd выступает в роли фильтрующего прокси, при этом он может быть встроен в монитор Vitastor или запущен отдельно. В этом случае etcd должен разрешать входящие подключения только от Antietcd, а все остальные компоненты должны соединяться с Antietcd.
Если Antietcd запускается в составе монитора Vitastor, то достаточно включить опцию
use_perms=true и задать нужные сертификаты. Если Antietcd запускается отдельно, то
привилегии нужно включать отдельно опциями Antietcd. Подробнее о настройке смотрите
раздел Варианты настройки etcd/Antietcd.
Перечень разрешённых операций с данными etcd смотрите в разделе Права доступа к данным etcd.
Ручная настройка
Настройка шифрования соединений OSD
Вам нужно 3 сертификата: один для OSD и по одному для подписи сертификатов клиентов и администраторов. Для OSD можно использовать самоподписанный сертификат (osd_ca.crt) или отдельный сертификат (osd.crt), подписанный доверенным сертификатом osd_ca.crt. Для клиентов нужно использовать отдельные сертификаты, подписанные общим доверенным (client_ca.crt), для администраторов - отдельным доверенным (admin_ca.crt).
В конфигурацию Vitastor на серверах OSD нужно добавить:
- use_perms: true
- osd_ca: osd_ca.crt
- client_ca: client_ca.crt
- admin_ca: admin_ca.crt
- osd_cert: osd_ca.crt
- osd_pkey: osd_ca.key
На стороне клиентов:
- use_perms: true
- osd_ca: osd_ca.crt
- cert: client.crt
- pkey: client.key
Варианты настройки etcd/Antietcd
Доступны следующие варианты настройки:
Mon со встроенным Antietcd
Самый простой вариант. Кроме сертификатов OSD вам нужен всего 1 сертификат для Antietcd (antietcd.crt).
Настройки Vitastor (/etc/vitastor/vitastor.conf):
- etcd_address: [ “http://mon1:2379”, … ] (адреса ваших мониторов с портом 2379)
- use_perms: true
- use_antietcd: true
- antietcd_cert: antietcd.crt
- antietcd_key: antietcd.key
- etcd_ca: antietcd.crt
- osd_ca: osd_ca.crt
- client_ca: client_ca.crt
- admin_ca: admin_ca.crt
Mon в роли Etcd proxy
Если вы хотите включить привилегии, но остаться на etcd, можно задействовать режим etcd proxy.
Вам понадобится 2 отдельных сертификата: один для etcd (etcd.crt) и один для antietcd (antietcd.crt). Клиентский порт etcd должен отличаться от стандартного 2379, например, можно выбрать 2381.
Настройки Vitastor:
- etcd_address: [ “http://mon1:2379”, … ] (адреса ваших мониторов с портом 2379)
- use_perms: true
- use_antietcd: true
- etcd_proxy:
{ "urls": [ "http://mon1:2381", ... ], // адреса ваших etcd с портом 2381 "cert": "antietcd.crt", "key": "antietcd.key", "ca": "etcd.crt" } - antietcd_cert: antietcd.crt
- antietcd_key: antietcd.key
- etcd_ca: antietcd.crt
- osd_ca: osd_ca.crt
- client_ca: client_ca.crt
- admin_ca: admin_ca.crt
Опции командной строки etcd:
--advertise-client-urls=https://<АДРЕС>:2381 --listen-client-urls=https://<АДРЕС>:2381 \
--client-cert-auth --cert-file=etcd.crt --key-file=etcd.key --trusted-ca-file=antietcd.crt \
--peer-client-cert-auth --peer-cert-file=etcd.crt --peer-key-file=etcd.key --peer-trusted-ca-file=etcd.crt
Mon с отдельным Antietcd Proxy
Если в дополнение к предыдущему варианту вы хотите разгрузить Antietcd от задач монитора Vitastor, можно запустить его отдельно.
Аналогично предыдущему варианту нужно 2 сертификата: один для etcd и один для antietcd, плюс понадобится отдельный сертификат для монитора.
Настройки Vitastor:
- etcd_address: [ “http://mon1:2379”, … ] (адреса ваших мониторов с портом 2379)
- use_perms: true
- use_antietcd: false
- etcd_ca: antietcd.crt
- osd_ca: osd_ca.crt
- client_ca: client_ca.crt
- admin_ca: admin_ca.crt
- mon_etcd_client_cert: mon_ca.crt
- mon_etcd_client_key: mon_ca.key
Опции командной строки Antietcd:
--port 2379 --cert /etc/vitastor/antietcd.crt --key /etc/vitastor/antietcd.key \
--client_cert_auth 1 --auth_filter /usr/lib/vitastor/mon/vitastor_auth_filter.js \
--ca /etc/vitastor/client_ca.crt --admin_ca /etc/vitastor/admin_ca.crt \
--osd_ca /etc/vitastor/osd_ca.crt --mon_ca /etc/vitastor/mon_ca.crt \
--etcd_proxy url1,url2,... --etcd_ca /etc/vitastor/etcd.crt \
--etcd_cert /etc/vitastor/antietcd.crt --etcd_key /etc/vitastor/antietcd.key
Опции командной строки etcd (не отличаются от предыдущего варианта):
--advertise-client-urls=https://<АДРЕС>:2381 --listen-client-urls=https://<АДРЕС>:2381 \
--client-cert-auth --cert-file=etcd.crt --key-file=etcd.key --trusted-ca-file=antietcd.crt \
--peer-client-cert-auth --peer-cert-file=etcd.crt --peer-key-file=etcd.key --peer-trusted-ca-file=etcd.crt
Отдельный Antietcd без etcd
Аналогично предыдущему варианту, но etcd и его сертификат не нужны:
Настройки Vitastor (не отличаются от предыдущего варианта):
- etcd_address: [ “http://mon1:2379”, … ] (адреса ваших мониторов с портом 2379)
- use_perms: true
- use_antietcd: false
- etcd_ca: antietcd.crt
- osd_ca: osd_ca.crt
- client_ca: client_ca.crt
- admin_ca: admin_ca.crt
- mon_etcd_client_cert: mon_ca.crt
- mon_etcd_client_key: mon_ca.key
Опции командной строки Antietcd:
--port 2379 --cert /etc/vitastor/antietcd.crt --key /etc/vitastor/antietcd.key \
--client_cert_auth 1 --auth_filter /usr/lib/vitastor/mon/vitastor_auth_filter.js \
--ca /etc/vitastor/client_ca.crt --admin_ca /etc/vitastor/admin_ca.crt \
--osd_ca /etc/vitastor/osd_ca.crt --mon_ca /etc/vitastor/mon_ca.crt \
--persist_filter /usr/lib/vitastor/mon/vitastor_persist_filter.js
Настройка Vault/OpenBao
Для использования Vault каждому клиенту, который будет получать из Vault ключи
образов, нужна учётная запись в Vault. Vitastor поддерживает только аутентификацию
по клиентским сертификатам, так что все сертификаты клиентов (cert+pkey) должны
быть зарегистрированы в Vault и им должен быть дан доступ к соответствующим секретам
(поддерживается API секретов v1).
Требуемый формат секрета Vault - одно поле key в формате шестнадцатеричной строки.
Используется алгоритм AES-256-XTS, так что длина ключа - 64 байта, то есть строка
должна состоять из 128 шестнадцатеричных цифр.
Для подключения Vault включите следующие настройки в Vitastor.conf:
vault_url- адрес Vault (например,https://vault:8200)vault_ca- сертификат самого Vault
После этого, если создать образ (vitastor-cli create) с опцией --enc_key vault:<ID>,
то для получения ключа клиенты Vitastor сначала обратятся к Vault для получения токена
по адресу /v1/auth/cert/login, а потом запросят из Vault сам секрет по адресу /v1/secret/<ID>.
Пример настройки Vault
Пошаговая инструкция для настройки тестового Vault на примере OpenBao:
- Если ещё не настроен TLS, генерируем самоподписанный TLS сертификат для Vault:
Настраиваем его вopenssl req -days 3650 -x509 -addext basicConstraints=critical,CA:TRUE,pathlen:1 --addext subjectAltName=DNS:vault \ -new -newkey rsa:4096 -nodes -keyout /etc/openbao/vault.key -out /etc/openbao/vault.crt/etc/openbao/openbao.hcl:
И перезапускаем OpenBao (listener "tcp" { address = "0.0.0.0:8200" tls_cert_file = "/etc/openbao/vault.crt" tls_key_file = "/etc/openbao/vault.key" }systemctl restart openbao). - Копируем TLS сертификат Vault для Vitastor:
Переносим его на все клиентские ноды и прописываем вcp /etc/openbao/vault.crt /etc/vitastor/vault.crt/etc/vitastor/vitastor.conf:{ ... "vault_url": "http://vault:8200", "vault_ca": "/etc/vitastor/vault.crt" } - Проверяем статус Vault:
bao status -ca-cert /etc/openbao/vault.crt -address=https://vault:8200 - Инициализируем Vault в тестовом режиме из 1 ноды (с 1 частью ключа):
bao operator init -n 1 -t 1 -ca-cert /etc/openbao/vault.crt -address=https://vault:8200 - Разблокируем Vault:
bao operator unseal -ca-cert /etc/openbao/vault.crt -address=https://vault:8200 - Включаем аутентификацию по сертификатам:
bao auth enable -ca-cert /etc/openbao/vault.crt -address=https://vault:8200 cert - Включаем секреты v1:
bao secrets enable -ca-cert /etc/openbao/vault.crt -address=https://vault:8200 -path=secret kv-v1 - Создаём тестовый секрет:
bao kv put -ca-cert /etc/openbao/vault.crt -address=https://vault:8200 secret/vitastor/testimg3 key=$(openssl rand -hex 64) - Генерируем подписанный сертификат для пользователя Vitastor (там, где у вас есть
client_ca.crtиclient_ca.key):openssl req -subj '/CN=testimg3' -nodes -new -keyout testimg3.key -out testimg3.csr openssl x509 -req -days 3650 -CA client_ca.crt -CAkey client_ca.key -CAcreateserial -in testimg3.csr -out testimg3.crt rm testimg3.csr - Создаём пользователя в Vault и даём ему доступ к секрету:
cat >testimg3.policy <<EOF path "/secret/vitastor/testimg3" { capabilities = ["read"] } EOF bao policy write -ca-cert /etc/openbao/vault.crt -address=https://vault:8200 testimg3 testimg3.policy bao write -ca-cert /etc/openbao/vault.crt -address=https://vault:8200 auth/cert/certs/testimg3 \ certificate=@testimg3.crt display_name=testimg3 token_ttl=24h token_policies=testimg3 - Тестируем доступ к секрету:
Будет выведен токен, подставляем его в следующий запрос:curl --cacert /etc/vitastor/vault.crt --cert testimg3.crt --key testimg3.key \ --json '{}' https://vault:8200/v1/auth/cert/logincurl --cacert /etc/vitastor/vault.crt --cert testimg3.crt --key testimg3.key \ -H 'X-Vault-Token: <ПОЛУЧЕННЫЙ ТОКЕН>' https://vault:8200/v1/secret/vitastor/testimg3 - Создаём образ в Vitastor с заданным секретом (от имени администратора или того, кто имеет
право создавать образы в вашем пуле):
vitastor-cli create -s 100G --enc_key vault:vitastor/testimg3 --owner testimg3 testimg3 - Тестируем доступ к образу от имени пользователя testimg3:
vitastor-cli --cert testimg3.crt --pkey testimg3.key dd if=/dev/urandom oimg=testimg3 bs=1M count=100
Списки разрешённых операций
Права доступа к данным etcd
Ниже все названия ключей приведены без общего префикса /vitastor.
Разрешённые операции с ключами в Antietcd для обычных пользователей:
- Только чтение:
- Разрешено всегда:
/config/global/config/node_placement/config/pools/pg/config/osd/state/*/pg/state/*/index/maxid/*
- Для образов, которые может читать пользователь:
/config/inode/*/index/image/*/inode/stats/*
- Разрешено всегда:
- Чтение и запись:
- Для пулов, в которых может создавать образы пользователь:
/index/maxid/*
- Для образов, которыми владеет пользователь:
/config/inode/*/index/image/*
- Для пулов, в которых может создавать образы пользователь:
Разрешённые операции с ключами в Antietcd для администраторов:
- Чтение:
/stats/mon/*/pg/*/pgstats/*/inode/stats/*/pool/stats/*
- Чтение и запись:
/config/*/osd/*/index/*/pg/config/pg/history/*/stats/history/last_clean_pgs
Разрешённые операции с ключами в etcd для OSD:
- Чтение:
/pg/config/config/*
- Чтение и запись:
/osd/*/pg/state/*/pg/history/*/pgstats/*
Разрешённые операции с ключами в etcd для мониторов:
- Чтение:
/config/*/osd/*/pgstats/*
- Чтение и запись:
/pg/config/stats/history/last_clean_pgs/mon/*/pg/history/*/pg/stats/*/pgstats/*/inode/stats/*/pool/stats/*
Права доступа к данным OSD
При включённой опции use_perms и шифровании OSD аутентифицирует клиентов по сертификатам
и разрешает каждому клиенту только то, что ему разрешено согласно модели прав доступа.
Клиентские операции:
- READ - разрешено для образов, доступных пользователю на чтение.
- WRITE, DELETE, SCRUB - разрешены для образов, доступных пользователю на запись.
- SYNC - операция не связана с образом и разрешена всегда.
- DESCRIBE - операция разрешена только для администраторов (используются командами
vitastor-cli describeиfix). - PING - операция разрешена всегда.
- SHOW_CONFIG - операция разрешена всегда, однако если в ней клиент представляется
как OSD, то проверяется, что он использует сертификат, подписанный
osd_ca. - SEC_LIST (листинг) - разрешена другим OSD и администраторам с любыми параметрами, а обычным клиентам разрешена только для запросов, ограниченных образом, доступным пользователю на чтение.
Кластерные операции - разрешаются только другим OSD:
- SEC_READ
- SEC_WRITE
- SEC_WRITE_STABLE
- SEC_SYNC
- SEC_STABILIZE
- SEC_ROLLBACK
- SEC_DELETE
- SEC_READ_BMP
- SEC_LOCK
Права доступа к API
vitastor-cli serve также поддерживает клиентскую
аутентификацию по сертификатам. Принимаются только сертификаты, подписанные
client_ca. В качестве серверного сертификата используется отдельный сертификат
api_cert с ключом api_pkey.
При этом для корректной работы vitastor-cli serve он сам должен использовать
для доступа в Vitastor сертификат администратора (cert+pkey, подписанный admin_ca),
чтобы корректно обрабатывать любые запросы.
Обычным пользователям (с сертификатами, подписанными client_ca) при доступе к API
разрешаются только API-операции с образами, доступными им либо на чтение (для чтения),
либо на запись (для модификации):
- image/list - для образов, которые пользователь может читать.
- image/create - для пулов, в которых пользователю разрешено создавать образы, либо для создания снимков образов, которыми пользователь владеет.
- image/delete, image/flatten, image/modify - для образов, которыми пользователь владеет.
Все остальные операции разрешаются только администраторам.
Производительность шифрования
У вас может возникнуть вопрос - а как быстро всё это прекрасное шифрование работает?
Ответ - сильно зависит от процессора. На современных процессорах (при наличии AVX512 с VAES) очень быстро - скорость шифрования AES может составлять 10-20 Гбайт/с и выше. В первую очередь подразумевается CPU клиентских машин, потому что сквозное шифрование выполняется целиком на клиенте, а транспортное хоть также и затрагивает OSD, но у клиента поток один, а OSD на стороне сервера много и добавить там ресурсов легче.
На более старых процессорах скорость заметно хуже, например, на Xeon E5 v4 она составляет буквально 3 Гбайт/с.
Вы можете оценить производительность своих процессоров с помощью команды vitastor-cli cpubench.
Пример вывода (💪 AMD EPYC 9575F):
$ vitastor-cli cpubench
Vitastor transport encryption benchmark (AES-256-GCM, AES-256-XTS and xxhash3)
Warmup...
No transport encryption, data checksums enabled, e2e unencrypted image
xxhash3 1 M block... 209000 iterations in 2001 ms = 104447.78 MB/s
xxhash3 4 K block... 37000000 iterations in 2022 ms = 71479.35 MB/s
Header encryption with payload checksums, e2e unencrypted image
AES-256-GCM encrypt header + xxhash3 1 M block... 210000 iterations in 2015 ms = 104218.36 MB/s
AES-256-GCM encrypt header + xxhash3 4 K block... 26000000 iterations in 2073 ms = 48993.01 MB/s
Full transport encryption, e2e unencrypted image
AES-256-GCM encrypt header and 1 M block... 54000 iterations in 2000 ms = 27000.00 MB/s
AES-256-GCM encrypt header and 4 K block... 11700000 iterations in 2014 ms = 22692.71 MB/s
No transport encryption, no checksums, e2e encrypted image
AES-256-XTS encrypt 1 M block... 50000 iterations in 2039 ms = 24521.82 MB/s
AES-256-XTS encrypt 4 K block... 12600000 iterations in 2009 ms = 24499.13 MB/s
No transport encryption, e2e encrypted image, data checksums enabled
AES-256-XTS encrypt + xxhash3 1 M block... 40000 iterations in 2013 ms = 19870.84 MB/s
AES-256-XTS encrypt + xxhash3 4 K block... 10200000 iterations in 2011 ms = 19812.90 MB/s
Header encryption with payload checksums, e2e encrypted image
AES-256-GCM encrypt header + AES-256-XTS encrypt + xxhash3 1 M block... 40000 iterations in 2014 ms = 19860.97 MB/s
AES-256-GCM encrypt header + AES-256-XTS encrypt + xxhash3 4 K block... 8700000 iterations in 2011 ms = 16899.24 MB/s
Full transport encryption, e2e encrypted image
AES-256-XTS + AES-256-GCM encrypt 1 M block... 26000 iterations in 2062 ms = 12609.12 MB/s
AES-256-XTS + AES-256-GCM encrypt 4 K block... 6300000 iterations in 2006 ms = 12267.88 MB/s
А вот Xeon E5-2680v4:
$ vitastor-cli cpubench
Vitastor transport encryption benchmark (AES-256-GCM, AES-256-XTS and xxhash3)
Warmup...
No transport encryption, data checksums enabled, e2e unencrypted image
xxhash3 1 M block... 62000 iterations in 2021 ms = 30677.88 MB/s
xxhash3 4 K block... 12400000 iterations in 2006 ms = 24146.31 MB/s
Header encryption with payload checksums, e2e unencrypted image
AES-256-GCM encrypt header + xxhash3 1 M block... 62000 iterations in 2027 ms = 30587.07 MB/s
AES-256-GCM encrypt header + xxhash3 4 K block... 6800000 iterations in 2011 ms = 13208.60 MB/s
Full transport encryption, e2e unencrypted image
AES-256-GCM encrypt header and 1 M block... 7000 iterations in 2317 ms = 3021.15 MB/s
AES-256-GCM encrypt header and 4 K block... 1500000 iterations in 2102 ms = 2787.52 MB/s
No transport encryption, no checksums, e2e encrypted image
AES-256-XTS encrypt 1 M block... 7000 iterations in 2317 ms = 3021.15 MB/s
AES-256-XTS encrypt 4 K block... 1600000 iterations in 2088 ms = 2993.30 MB/s
No transport encryption, e2e encrypted image, data checksums enabled
AES-256-XTS encrypt + xxhash3 1 M block... 6000 iterations in 2188 ms = 2742.23 MB/s
AES-256-XTS encrypt + xxhash3 4 K block... 1400000 iterations in 2053 ms = 2663.78 MB/s
Header encryption with payload checksums, e2e encrypted image
AES-256-GCM encrypt header + AES-256-XTS encrypt + xxhash3 1 M block... 6000 iterations in 2190 ms = 2739.73 MB/s
AES-256-GCM encrypt header + AES-256-XTS encrypt + xxhash3 4 K block... 1300000 iterations in 2101 ms = 2417.00 MB/s
Full transport encryption, e2e encrypted image
AES-256-XTS + AES-256-GCM encrypt 1 M block... 4000 iterations in 2666 ms = 1500.38 MB/s
AES-256-XTS + AES-256-GCM encrypt 4 K block... 800000 iterations in 2113 ms = 1478.94 MB/s