mirror of https://github.com/voidlizard/hbs2
PEP-02 wip
This commit is contained in:
parent
b44f83e6f7
commit
141226d7ba
|
@ -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), мы должны знать его
|
||||||
|
публичный ключ подписи, что бы её проверять и принимать, или
|
||||||
|
отвергать данные.
|
||||||
|
|
||||||
|
Что бы подписчик мог что-то читать, мы должны знать его публичный ключ
|
||||||
|
шифрования, что бы он мог расшифровать публикуемый контент.
|
||||||
|
|
||||||
|
|
||||||
|
Операции:
|
||||||
|
|
||||||
|
- Добавить право на чтение
|
||||||
|
- Добавить право на публикацию
|
||||||
|
- Удалить право на чтение
|
||||||
|
- Удалить право на публикацию
|
||||||
|
- Добавить владельца
|
||||||
|
- Удалить владельца
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue