Korni3

Технология “личного информационного суверенитета”.

Технология для локального управления данными с поддержкой цифровых подписей.

Ключевые возможности

  1. korni3 — это утилита командной строки для локального хранения и управления данными с SQL-возможностями.

    • Данные всегда хранятся на устройстве пользователя. Локальный доступ не может быть удалённо заблокирован по определению локального хранения.
  2. korni3 работает как «журнал с добавлением» (append‑only log), спроектированный так, чтобы его частями было удобно обмениваться через различные системы передачи файлов.

  3. korni3 поддерживает создание и проверку цифровых подписей. Каждая запись содержит подпись автора, что позволяет установить происхождение данных.

  4. korni3 сохраняет историю всех изменений (ретроспектива).

  5. korni3 — это нативная (C++) утилита командной строки.

  6. Может использоваться как более быстрая альтернатива sqlite-utils с некоторыми расширениями.

  7. В некоторых сценариях может заменять kafka-sql, но не требует развёртывания серверов и работает с файлами локально, ближе к модели git.

  8. Подходит как основа для хранения данных в децентрализованных сервисах, для научных данных, для парсинга и анализа — везде, где требуется порядок в данных.

  9. Транспортно-нейтральный дизайн: в korni3 нет встроенных сетевых функций. Это сознательное архитектурное решение (Unix way): взаимодействие только через файловую систему.

  10. korni3 спроектирован так, чтобы поддерживать многопользовательское хранение, но сам не содержит сетевого транспорта — всё обмен данными остаётся на усмотрение пользователей и приложений, использующих korni3.

  11. Поскольку korni3 работает с обычными файлами, синхронизировать их можно любыми способами: флешки, облачные сервисы, mesh-сети, локальные сети, радио, модемы, факс и т.д. Разные способы имеют разную степень надёжности и приватности — выбор остаётся за пользователем.

  12. korni3 использует цифровые подписи для проверки подлинности. Опционально поверх может быть добавлено шифрование (например, приложением или отдельными инструментами). В обучающих материалах планируется курс по основам криптобезопасности.

Технические особенности совмещают:

  1. идею kafka storage (журнал + индексы) с добавлением сжатия gzip;
  2. концепцию kafka-sql (запись в журнал, чтение через SQL);
  3. файловую SQLite-базу с расширениями (в т.ч. для геоиндексов);
  4. цифровые подписи для проверки подлинности;
  5. хеширование (ipfs + torrent + sha) для идентификации файлов, дедупликации и удобства обмена.

Система не зависит от конкретных протоколов — обмен реализуется отдельными инструментами.

Планы развития

  • Создание приложений на базе korni3:
    • Интернет-площадка для объявлений (типа Avito, Kufar, Яндекс.Маркет) с расширенными категориями.
    • Система статей с обсуждениями (аналог Я.Дзена).
    • База знаний с медиаматериалами (тексты, видео, аудио), резервное копирование ценных сайтов.
    • Система управления знаниями и обучения.
    • Модули для управления предприятием (ERP, MES, PDM, планирование, склад).

Синопсис команд

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# genkey <nickname> [<bits; 4096 по умолчанию>]
$ korni3 genkey demo

# Вывести список доступных ключей
$ korni3 keys
testUser
demo

# korni3 login <nickname>
$ korni3 login demo
demo MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvCEIchAnnO5hIdiuFt/+op8uBbRdh67lPjkLU6Mj00Q+DoFuOWBb3pRfLXdd6xEg+VUa7liBunrm99a5og/DYp98p6+Lh68yCSzLzDm9bPkvVuRsjVjm4Fngc6/sKK+dC04KtnDDoQ5J+rIAHaX2WrgyTwu1Hc+M0ENeAazSXwCNJMc+Fgutj0ofaobRlelvx/FndZKQUFWkbVBf6LY08kSut7sPadBrKMbf1Oyg1k5FUTSbgOBvUmyIx+qOfINCv/TsJxLCSzyCZXRJFJ40EGz1bO2XbJRf8EIWwNYk6VnKZ70dJqClBBAWxVM1w7k5t8aDyBTsEic4uLZLyIN5t9ou9klWW467pTUwhkHJbD2xG9bB/YFLOQY9bQxOx6CRbw4ZegLhk+M3AjG3P20/ouv7psYz9o08pfgpvlkaICGklvWnCBAB4AC1FI/e83j6JVqrFTn+ZJCVxED5OaiKqioaK2bWu7QHgo/7UgQZpKwB7qRadzg1mQ7k1Vd0wy8iBnQajc1akH4RiK/IwMqsI+Z9JlP4vWLHWPdUQzPzghKsTj2HbBBzBhvrrMV5szYuxQj/vVYtEcNPapigWinhwdoZCFNGfXHDeKt/iph1GYqOD0krFz96K2glphFfa74CkaOjTXUnn2f4lI/Pz82GwnqFG1/8W0LXKO4RcgxZYvUCAwEAAQ==

# Создать или вставить запись
# create|insert <dbName> <tableName> [<jsonRecord>]
$ korni3 insert test testTable '{"id": 1, "name":"korni demo tutorial"}'

# Показать строки таблицы
$ korni3 rows test testTable --csv --table -c id -c zT -c name --where 'id = 1'

# Пересжать старые файлы (оптимизация места)
$ korni3 repack

# Добавить файл в хранилище
$ korni3 file test /home/mp/Qt/QtCreator-v8.0.1/bin/qt.conf
GFS-Qme6DcxwC2SABnttae5ndAPzNyk4G2KHmxFas7NqFHPFhy-T-bd3541672cd9a9c83d7ac8c6f74a7f6fe272f734-M-8a5ff4aeb511b1cfae11787da6e28a99-S256-7b3a3f93a63341651d7ef129ddca235f33cf061e434cd866e3d1695cb4cee402 "/home/mp/Qt/QtCreator-v8.0.1/bin/qt.conf"
{"id":"GFS-Qme6DcxwC2SABnttae5ndAPzNyk4G2KHmxFas7NqFHPFhy-T-bd3541672cd9a9c83d7ac8c6f74a7f6fe272f734-M-8a5ff4aeb511b1cfae11787da6e28a99-S256-7b3a3f93a63341651d7ef129ddca235f33cf061e434cd866e3d1695cb4cee402","path":"\/home\/mp\/Qt\/QtCreator-v8.0.1\/bin\/qt.conf","size":"84","creationTime":"Thu Aug 11 12:10:22 2022\n","lastModTime":"Thu Aug 11 12:10:22 2022\n","fileOut":"\/home\/mp\/Qt\/QtCreator-v8.0.1\/bin\/qt.conf: ASCII text\n"}

# Вставить группу файлов (например, изображения)
$ korni3 insert-files images *.gif

# Установить геопозицию пользователя (для приложений, использующих геофильтрацию)
$ korni3 setgeo 58.05139 38.83802

# Обновить SQL-базу из журнала (с фильтрацией по дате, пользователям, гео)
$ korni3 scan test

# Получить путь к SQLite-базе для прямого доступа
$ sqlite3 `korni3 db test` '.tables'