Данные

Материал из Сервис Облачной Демократии
(Различия между версиями)
Перейти к: навигация, поиск
 
(не показаны 11 промежуточных версий 1 участника)
Строка 1: Строка 1:
Описание перечня данных хранимых на каждом узле в распределенной системе. Все данные хранятся в БД (предлагаю SQLite) - давайте обсуждать какую БД лучше использовать. Важно чтоб она была embedded, легковесная, многоплатформенная.
+
Описание перечня данных хранимых на каждом узле в распределенной системе. Для хранения рекомендуется использовать БД [http://ru.wikipedia.org/wiki/Berkeley_DB Berkeley DB].
  
 +
== Перечень данных пользователя ==
 
Каждый узел должен хранить данные для каждого пользователя который пользуется узлом. Т.е. каждый пользователь имеет свой набор данных. Набор данных пользователя включает в себя:
 
Каждый узел должен хранить данные для каждого пользователя который пользуется узлом. Т.е. каждый пользователь имеет свой набор данных. Набор данных пользователя включает в себя:
* ЭЦП
+
=== Мастер ключ ===
...
+
???
 +
=== Идентифицирующий хэш ===
 +
???
 +
Для идентификации пользователя и его ключа будет служить специальное значение - идентифицирующий хэш. В одном из идентификаторов публичного ключа должно ставиться значение вида (пример укорочен):
 +
IDHASH:3C65C65D4F8166C21823F253CE6F14037128DD614B43390535667AAE2CC518E2
 +
Хэш формируется по алгоритму SHA512 в рекурсивном цикле уровня 128 по символьному его представлению в 16-ричном виде в верхнем регистре.
 +
Идентифицирующий хэш должен формироваться из соединения нескольких строк:
 +
# Дата рождения в формате YYYYMMDD (Y - год, M - месяц, D - день. Считается с начала Нашей Эры).
 +
# Номер свидетельства о рождении. Серия и номер пишутся вместе. Все незначащие разделительные знаки опускаются. Если присутствуют буквы - вводятся в кодировке UTF-8 в верхнем регистре.
 +
# Идентификационный социальный номер в стране гражданства (страна рождения или первая по алфавиту в написании латиницей страна гражданства). Все незначащие разделительные знаки опускаются. Если присутствуют буквы - вводятся в кодировке UTF-8 в верхнем регистре. Номер СНИЛС в России или SSN в США.
 +
Данный хэш будет легко проверятся подписывающим ключ, т.к. он имеет четкие правила формирования.
 +
Помощник по формированию идентифицирующего хэша: http://test.cdemocracy.ru/register/gpghelp_idhash
  
 +
== Перечень данных узла ==
 
Кроме того каждый узел имеет общий набор данных для всех пользователей. Набор данных узла включает в себя:
 
Кроме того каждый узел имеет общий набор данных для всех пользователей. Набор данных узла включает в себя:
* Список соседних узлов (ip-адрес, ключи субъектов голосования используемых на узле, ...)
+
=== Транспортный ключ ===
...
+
???
 +
=== Список соседних узлов ===
 +
???
 +
IP-адрес, ключи субъектов голосования используемых на узле
  
 +
== Перечень транзитных данных ==
  
 +
== Протоколы ==
 +
=== Структура пакетов ===
 +
Предлагаю следующую структуру пакетов:
 +
* <type> - 1 байт - Тип пакета. Т.к. у многих пакетов их размер может быть жестко фиксированным в зависимости от типа, тип лучше размещать в первом байте;
 +
* <packet> - пакет;
 +
Если тип пакета подразумевает его идентификацию, то в начале <packet> следует
 +
* <id> - 16 байт - идентификатор пакета (UUID);
 +
Если тип данных подразумевает определенный размер этих данных, то далее в <packet> для таких типов содержатся данные.
 +
Если тип данных переменного размера, то далее следует:
 +
* <size> - 2 байта - общий размер данных пакета;
 +
* <data> - данные пакета;
 +
Данные пакеты представляют из себя набор записей вида:
 +
* <field type> - 1 или 2 байта - [[Коды данных|тип поля]];
 +
* <field record> - Данные поля;
 +
Если данные поля не фиксированного размера, то в <field record> сохраняются данные с указанием размера:
 +
* <field size> - 2 байта - размер данных поля;
 +
* <field data> - данные поля;
  
 +
=== Типы пакетов ===
 +
Требует согласования с разработчиками. Возможно, не актуально.
  
 +
{| border="1" cellpadding="2" cellspacing="0" style="text-align: center;"
 +
!Код типа пакета
 +
!Размер данных
 +
!Идентифицируемый
 +
!Описание типа
 +
|-
 +
|0x00
 +
|0
 +
| -
 +
|align="left" |Пинг
 +
|-
 +
|0x01
 +
|0
 +
| -
 +
|align="left" |Понг
 +
|-
 +
|0x02
 +
| ~
 +
| +
 +
|align="left" |Запрос на данные
 +
|-
 +
|0x03
 +
| ~
 +
| +
 +
|align="left" |Публичный ключ
 +
|-
 +
|0x04
 +
| ~
 +
| +
 +
|align="left" |Голосование
 +
|}
 +
=== Коды данных ===
 +
Требует согласования с разработчиками. Возможно, не актуально.
  
 +
На этой странице собраны коды для различных данных в системе.
 +
 +
{| border="1" cellpadding="2" cellspacing="0" style="text-align: center;"
 +
!Мнемокод
 +
!Числовой код
 +
!Назначение данных
 +
|-
 +
|NULL
 +
|0x00
 +
|align="left" |Пустые данные
 +
|-
 +
|U.PKEY.FP
 +
|0x01
 +
|align="left" |Отпечаток персонального ключа пользователя
 +
|-
 +
|U.PTKEY.FP
 +
|0x02
 +
|align="left" |Отпечаток транспортного ключа пользователя
 +
|-
 +
|U.BD
 +
|0x03
 +
|align="left" |Дата рождения пользователя из программы
 +
|-
 +
|U.TR
 +
|0x04
 +
|align="left" |Основная территория пользователя из программы
 +
|-
 +
|U.ATR
 +
|0x05
 +
|align="left" |Дополнительная территория пользователя из программы
 +
|-
 +
|U.TID
 +
|0x06
 +
|align="left" |Налоговый идентификатор пользователя из программы
 +
|-
 +
|U.SID
 +
|0x07
 +
|align="left" |Социальный идентификатор пользователя из программы
 +
|-
 +
|U.PKEY
 +
|0x08
 +
|align="left" |Публичный персональный ключ пользователя
 +
|-
 +
|U.PTKEY
 +
|0x09
 +
|align="left" |Публичный транспортный ключ пользователя
 +
|-
 +
|S.TYPE
 +
|0x10
 +
|align="left" |Тип голосования
 +
|}
 +
=== Коды типов голосований ===
 +
Требует согласования с разработчиками. Возможно, не актуально.
 +
 +
{| border="1" cellpadding="2" cellspacing="0" style="text-align: center;"
 +
!Код
 +
!Описание
 +
|-
 +
|0x00
 +
|align="left" |Открытое голосование в субъекте
 +
|-
 +
|0x01
 +
|align="left" |Тайное голосование в субъекте
 +
|-
 +
|0x02
 +
|align="left" |Голосование по субъекту (создание, изменение параметров)
 +
|-
 +
|0x03
 +
|align="left" |Вотум недоверия
 +
|}
 +
 +
== Конфигурационные файлы ==
 +
=== Конфиг. файл back-end ===
 +
???
  
 
[[Category:Распределенная система]]
 
[[Category:Распределенная система]]

Текущая версия на 11:23, 14 марта 2012

Описание перечня данных хранимых на каждом узле в распределенной системе. Для хранения рекомендуется использовать БД Berkeley DB.

Содержание

Перечень данных пользователя

Каждый узел должен хранить данные для каждого пользователя который пользуется узлом. Т.е. каждый пользователь имеет свой набор данных. Набор данных пользователя включает в себя:

Мастер ключ

???

Идентифицирующий хэш

??? Для идентификации пользователя и его ключа будет служить специальное значение - идентифицирующий хэш. В одном из идентификаторов публичного ключа должно ставиться значение вида (пример укорочен):

IDHASH:3C65C65D4F8166C21823F253CE6F14037128DD614B43390535667AAE2CC518E2

Хэш формируется по алгоритму SHA512 в рекурсивном цикле уровня 128 по символьному его представлению в 16-ричном виде в верхнем регистре. Идентифицирующий хэш должен формироваться из соединения нескольких строк:

  1. Дата рождения в формате YYYYMMDD (Y - год, M - месяц, D - день. Считается с начала Нашей Эры).
  2. Номер свидетельства о рождении. Серия и номер пишутся вместе. Все незначащие разделительные знаки опускаются. Если присутствуют буквы - вводятся в кодировке UTF-8 в верхнем регистре.
  3. Идентификационный социальный номер в стране гражданства (страна рождения или первая по алфавиту в написании латиницей страна гражданства). Все незначащие разделительные знаки опускаются. Если присутствуют буквы - вводятся в кодировке UTF-8 в верхнем регистре. Номер СНИЛС в России или SSN в США.

Данный хэш будет легко проверятся подписывающим ключ, т.к. он имеет четкие правила формирования. Помощник по формированию идентифицирующего хэша: http://test.cdemocracy.ru/register/gpghelp_idhash

Перечень данных узла

Кроме того каждый узел имеет общий набор данных для всех пользователей. Набор данных узла включает в себя:

Транспортный ключ

???

Список соседних узлов

??? IP-адрес, ключи субъектов голосования используемых на узле

Перечень транзитных данных

Протоколы

Структура пакетов

Предлагаю следующую структуру пакетов:

Если тип пакета подразумевает его идентификацию, то в начале <packet> следует

Если тип данных подразумевает определенный размер этих данных, то далее в <packet> для таких типов содержатся данные. Если тип данных переменного размера, то далее следует:

Данные пакеты представляют из себя набор записей вида:

Если данные поля не фиксированного размера, то в <field record> сохраняются данные с указанием размера:

Типы пакетов

Требует согласования с разработчиками. Возможно, не актуально.
Код типа пакета Размер данных Идентифицируемый Описание типа
0x00 0 - Пинг
0x01 0 - Понг
0x02 ~ + Запрос на данные
0x03 ~ + Публичный ключ
0x04 ~ + Голосование

Коды данных

Требует согласования с разработчиками. Возможно, не актуально.

На этой странице собраны коды для различных данных в системе.

Мнемокод Числовой код Назначение данных
NULL 0x00 Пустые данные
U.PKEY.FP 0x01 Отпечаток персонального ключа пользователя
U.PTKEY.FP 0x02 Отпечаток транспортного ключа пользователя
U.BD 0x03 Дата рождения пользователя из программы
U.TR 0x04 Основная территория пользователя из программы
U.ATR 0x05 Дополнительная территория пользователя из программы
U.TID 0x06 Налоговый идентификатор пользователя из программы
U.SID 0x07 Социальный идентификатор пользователя из программы
U.PKEY 0x08 Публичный персональный ключ пользователя
U.PTKEY 0x09 Публичный транспортный ключ пользователя
S.TYPE 0x10 Тип голосования

Коды типов голосований

Требует согласования с разработчиками. Возможно, не актуально.
Код Описание
0x00 Открытое голосование в субъекте
0x01 Тайное голосование в субъекте
0x02 Голосование по субъекту (создание, изменение параметров)
0x03 Вотум недоверия

Конфигурационные файлы

Конфиг. файл back-end

???

Личные инструменты
Пространства имён
Варианты
Действия
Навигация
Инструменты