iText и блокчейн

С использованием технологии iText и блокчейн вы сможете интегрировать технологию блокчейн в iText, что позволит вам сохранять цифровые подписи в блокчейне вместо документа PDF.

Особенности и преимущества

Нажмите стрелку, чтобы развернуть особенности и преимущества.

Обучающее видео iText и блокчейн

Основные возможности

Данные в блокчейне

  • Возможность подписания с использованием известной инфраструктуры PKI.
  • Автоматическая проверка и наличие временной метки.
  • Возможность просмотра для всех пользователей
  • Возможность отделения от физических (реальных) данных, на которые они ссылаются.

Связь с PDF:

  • Возможность подписания документов PDF цифровой подписью.
    • Требуется сервер сертификации (централизованный).
    • Требуется сервер времени (централизованный).
    • Невозможность параллельного подписания.
    • Хранение подписей в документе.
  • Сеть доверия
  • Целостность: «Документ имеет именно это содержание».
  • Проверка подлинности: «Я создал этот документ. И я могу это доказать.»
  • Неопровержение: «Он создал этот документ. И я могу это доказать.»
  • Временная метка

pdfChain

Почему стоит использовать iText и блокчейн

Блокчейн содержит данные. Он собирает эти данные в единицы, именуемые «блоки». Существует механизм, позволяющий доказать, что блок не был подделан. И со временем блоки соединяются в цепочки. Эти цепочки органично составляют своего рода «историю».

Технология блокчейн

Блокчейн заменяет предыдущие технологии, связанные с проверкой подлинности и неопровержением. Во-первых, есть много способов цифровой подписи документа. Обычно под «подписью» подразумевается создание хеша документа, создание подписи из этого хеша с частным ключом и сохранение подписи. Это имеет два следствия:

  1. Подпись идентифицирует лицо, подписавшее документ.
  2. Подпись при расшифровке идентифицирует файл, из которого она была вычислена.

    При хранении подписи в блокчейне ее нельзя изменить или удалить. Это предоставляет вам дополнительное преимущество:

  3. факт наличия подписи в блокчейне позволяет определить время выполнения операции.

Позже вы можете сказать: «Я создал этот хеш 10 октября 2016 года: вот транзакция в блокчейне, которая содержит хеш. Я создал его в соответствии с этой формулой из этого файла. » При этом любой человек может взять ваш файл и повторно вычислить хеш, чтобы проверить его соответствие сохраненной записи в блокчейне. Все это работает по следующим причинам:

  1. Очень легко вычислить хеш из файла, но очень сложно создать аналогичный файл, который будет производить точно такой же хеш.
  2. Практически невозможно изменить данные, сохраненные в блокчейне.
  3. Каждая транзакция в блокчейне имеет временную метку, в связи с чем нам точно известен момент совершения каждой транзакции.

Теоретический сценарий использования – высокий уровень

На высоком уровне основная идея заключается в отделении функционала подписания и целостности от pdf и его включение в блокчейн. Представим типовой сценарий использования.

  1. Создается документ, и идентификатор документа (с его хешем и именем алгоритма хеширования) вводится в публичный блокчейн. Это не вызывает никаких проблем, поскольку хеш обычно не позволяет вам восстановить весь документ. Мы также вводим в цепочку алгоритм хеширования, чтобы обеспечить возможность долгосрочной проверки подлинности.
  2. Теперь представьте, что этот документ является счетом-фактурой. Боб заказывал проведение каких-то работ по дому, и отделочная компания отправила ему счет-фактуру.
  3. Боб хочет подписать счет-фактуру, чтобы указать, что он согласен с ценой и оплатит ее. При этом частный ключ Боба используется для шифрования хеш-значения документа. Эта подпись (включающая идентификатор документа, исходное хеш-значение, подписанное хеш-значение, а также имена алгоритма хеширования и алгоритма подписания) сохраняется в блокчейне.
  4. Алиса, которая работает в отделочной компании, хочет проверить, подписал ли Боб документ. Она может легко просмотреть все записи в блокчейне для поиска заданного идентификатора (идентификатора документа). Одна из этих записей будет записью Боба, созданной ранее. Поскольку запись содержит исходный хеш и имена всех задействованных алгоритмов, Алиса может проверить 2 вещи:
    • Боб ли подписал документ с использованием хеша, подписанного хеша и открытого ключа Боба.
    • Подписал ли Боб точный документ, который она ему отправила, с использованием идентификатора документа и хеша.

Блокчейн – идея высокого уровня

Теоретический сценарий использования – низкий уровень

Реализация

Интерфейсы, предлагаемые нами для реализации блокчейна, минимальны, однако они обеспечивают необходимое абстрагирование для создания комплексных приложений и рабочих процессов на их основе. Мы абстрагируем блокчейн как мультиотображение, позволяющее конечным пользователям сохранять объект (как запись, которая представляет собой карту хешей <string, object> ) и привязывать его к ключу (строке).

public interface IBlockChain {
 
    /**
     * Введение данных в блокчейн
     *
     * @param key – ключ, используемый для ввода данных в блокчейн
     * @param data – данные, вводимые в блокчейн
     */
    public boolean put (ключ строки, данные записи);
 
    /**
     * Получение данных из блокчейна
     *
     * @param key – запрашиваемый ключ
     * @return
     */
    public List<Record> get(String key);
 
    /**
     * Получение всех данных из блокчейна
     * @return
     */
    public List<Record> all();
}


Конкретная реализация с использованием JSON-RPC и MultiChain

В качестве проверки обоснованности концепции представляем реализацию интерфейса IBlockchain с использованием JSON-RPC (удаленный вызов процедур) и MultiChain.

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


Пример iText и блокчейн

В этом примере мы покажем, как ввести документ в блокчейн с подписью:

       IBlockChain mc = new MultiChain(
                "http://127.0.0.1",
                4352,
                "chain1",
                "stream1",
                "multichainrpc",
                "BHcXLKwR218R883P6pjiWdBffdMx398im4R8BEwfAxMm");
 
        InputStream keystoreInputStream = BasicFunctionalityTest.class.getClassLoader().getResourceAsStream("ks");
        InputStream inputFileStream = BasicFunctionalityTest.class.getClassLoader().getResourceAsStream("input.pdf");
 
        AbstractExternalSignature sgn = new DefaultExternalSignature(keystoreInputStream, "demo", "password");
 
        PdfChain chain = new PdfChain(mc, sgn);
 
        // put a document on the chain
        boolean wasAdded = chain.put(inputFileStream);
        Assert.assertTrue(wasAdded);
 
        // check whether the chain now contains this value
        boolean isEmpty = chain.get("z�L{�Wd=��\u007F\u0010��G�").isEmpty();


Вы можете получить информацию о документе из блокчейна следующим образом:

  IBlockChain mc = new MultiChain(
                "http://127.0.0.1",
                4352,
                "chain1",
                "stream1",
                "multichainrpc",
                "BHcXLKwR218R883P6pjiWdBffdMx398im4R8BEwfAxMm");
 
        PdfChain chain = new PdfChain(mc);
 
        for(Record record : chain.get(new File("example_file.pdf")))
        {
            for(Map.Entry<String,Object> en : record.entrySet())
            {
                System.out.println(en.getKey() + "\t" + en.getValue().toString());
            }
            System.out.println("");
        }