Программа для сбора и шифрования блокчейна

Репозитарий: https://github.com/AplaProject/apla-pgp

Программа периодически обращается к базе данных к таблице block_chain и смотрит наличие новых блоков. Если имеются новые блоки, то она шифрует их публичным PGP ключом и сохраняет в определенную директорию в виде отдельных файлов с именем {номерблока}.block.

Программа хранит хэши сохраненных блоков, если она видит, что последний хэш не совпадает, то она ищет последний блок с одинаковым хешем и начинает скачивать блоки с того момента. Если старые файлы еще находятся в директории, то они будут перезаписаны.

Предварительно необходимо сгенерировать PGP ключи командой

$ gpg –gen-key

В процессе необходимо будет указать парольную фразу для приватного ключа - её нужно будет запомнить.

Для работы программы необходим файл настроек. Вот пример

LogFile = "apla.log"
StoreFile = "./store/apla-pgp.store"
OutPath = "./backup"

[Settings]
  Timeout = 2
  Compression = 1
  NodePrivateKey = "/home/ak/apla/apla-data/NodePrivateKey"

[PGP]
  Path = "/home/ak/.gnupg"
  Phrase = "1234"

[TCP]
  Host = "127.0.0.1:7078"
  • LogFile - имя (можно с путем) лог-файла.
  • StoreFile - имя файла, где будут хранится хэши обработанных блоков.
  • OutPath - директория куда будут складываться зашифрованные файлы.
  • Timeout - периодичность опроса в секундах.
  • Compression - 0 - не сжимать блоки, если указать 1, то данные блоков будут предварительно сжиматься по формату gzip, если они больше 1024 байт. В файле .block ставится соответствующая метка.
  • NodePrivateKey - приватный ключ , с помощью которого подписываются зашифрованные данные.
  • Path - директория с PGP ключом .pubring.gpg

Если в этой директории также находится файл secring.gpg, то программа будет работать в тестовом режиме. В этом случае должна быть указана секретная фраза для приватного ключа Phrase. В тестовом режиме программа после сохранения .block файла, читает его, расшифровывает приватным PGP ключом, в случае необходимости, распаковывает и затем сравнивает с оригинальным блоком.

В секции TCP необходимо указать ност для подключения по tcp.