From 141226d7baefb3636dc11ea1bc77dee3b1dc79e4 Mon Sep 17 00:00:00 2001 From: Dmitry Zuikov Date: Sat, 11 Feb 2023 10:04:34 +0300 Subject: [PATCH] PEP-02 wip --- docs/drafts/pep-02-acb.txt | 65 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 docs/drafts/pep-02-acb.txt diff --git a/docs/drafts/pep-02-acb.txt b/docs/drafts/pep-02-acb.txt new file mode 100644 index 00000000..9c71a863 --- /dev/null +++ b/docs/drafts/pep-02-acb.txt @@ -0,0 +1,65 @@ +PEP-02: acb-and-initial-encrypting-scheme + + +Задача: шифровать контент таким образом, что бы его +могло получать несколько [1..n], n ~ в перспективе сотни? +получателей. + +Предлагаемое решение: + +Вводим ACB, Access Control Block. + +ACB представляет собой ключ шифрования, зашифрованный публичными +ключами предполагаемых получателей. + +Схемы могу быть разные, так что какой конкретно этот ключ определяется +из самого ACB. + +На первоначальном этапе предлагается использовать пару ключей +Curve25519 (?), т.е ключевую пару асимметричного шифрования libsodium +(haskell: saltine), так как тесты показали заметно более высокую +скорость по сравнению с шифрованием симметричным ключом (AES). + +В любом случае, предполагается в будущем использовать и другие схемы +контроля доступа к контенту, таким образом, возможность расширения +должна быть заложена в структуры данных. + + +``` + +-- PubKey 'Sign e ;;; ключ подписи Ed25519 + +data family ACB e schema :: Type + +data ACBSchema = NaClAsymm + +data instance ACB e NaClAsymm = + ACBNaClAsymm + { acbParent :: HashRef -- указатель на предыдущий ACB + , acbRoot :: PubKey 'Sign e -- корневой владелец + , acbOwners :: [PubKey 'Sign e] -- ключи владельцев + , acbRead :: [PubKey 'Encrypt e] -- ключи шифрования подписчиков + , acbWrite :: [PubKey 'Sign e] -- ключи подписи + } + + +``` + +Что бы подписчик мог что-то публиковать (write), мы должны знать его +публичный ключ подписи, что бы её проверять и принимать, или +отвергать данные. + +Что бы подписчик мог что-то читать, мы должны знать его публичный ключ +шифрования, что бы он мог расшифровать публикуемый контент. + + +Операции: + + - Добавить право на чтение + - Добавить право на публикацию + - Удалить право на чтение + - Удалить право на публикацию + - Добавить владельца + - Удалить владельца + +