Данные
Oleg (обсуждение | вклад) |
Oleg (обсуждение | вклад) |
||
(не показаны 10 промежуточных версий 1 участника) | |||
Строка 1: | Строка 1: | ||
− | Описание перечня данных хранимых на каждом узле в распределенной системе. | + | Описание перечня данных хранимых на каждом узле в распределенной системе. Для хранения рекомендуется использовать БД [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-адрес, ключи субъектов голосования используемых на узле | ||
+ | |||
+ | == Перечень транзитных данных == | ||
+ | |||
+ | == Протоколы == | ||
+ | === Структура пакетов === | ||
+ | Предлагаю следующую структуру пакетов: | ||
+ | * <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-ричном виде в верхнем регистре. Идентифицирующий хэш должен формироваться из соединения нескольких строк:
- Дата рождения в формате YYYYMMDD (Y - год, M - месяц, D - день. Считается с начала Нашей Эры).
- Номер свидетельства о рождении. Серия и номер пишутся вместе. Все незначащие разделительные знаки опускаются. Если присутствуют буквы - вводятся в кодировке UTF-8 в верхнем регистре.
- Идентификационный социальный номер в стране гражданства (страна рождения или первая по алфавиту в написании латиницей страна гражданства). Все незначащие разделительные знаки опускаются. Если присутствуют буквы - вводятся в кодировке UTF-8 в верхнем регистре. Номер СНИЛС в России или SSN в США.
Данный хэш будет легко проверятся подписывающим ключ, т.к. он имеет четкие правила формирования. Помощник по формированию идентифицирующего хэша: http://test.cdemocracy.ru/register/gpghelp_idhash
Перечень данных узла
Кроме того каждый узел имеет общий набор данных для всех пользователей. Набор данных узла включает в себя:
Транспортный ключ
???
Список соседних узлов
??? 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> - данные поля;
Типы пакетов
Требует согласования с разработчиками. Возможно, не актуально.
Код типа пакета | Размер данных | Идентифицируемый | Описание типа |
---|---|---|---|
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
???