PEP-02 wip

This commit is contained in:
Dmitry Zuikov 2023-02-11 10:04:34 +03:00
parent b44f83e6f7
commit 141226d7ba
1 changed files with 65 additions and 0 deletions

View File

@ -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), мы должны знать его
публичный ключ подписи, что бы её проверять и принимать, или
отвергать данные.
Что бы подписчик мог что-то читать, мы должны знать его публичный ключ
шифрования, что бы он мог расшифровать публикуемый контент.
Операции:
- Добавить право на чтение
- Добавить право на публикацию
- Удалить право на чтение
- Удалить право на публикацию
- Добавить владельца
- Удалить владельца