iText & Blockchain

Avec iText & Blockchain, vous pouvez intégrer la technologie blockchain dans iText, ce qui vous permet de stocker des signatures numériques dans une blockchain plutôt que dans le document PDF.

Caractéristiques et avantages

Cliquez sur la flèche pour révéler les fonctionnalités et les avantages.

Tutoriel vidéo iText & Blockchain

Capacités principales

Les données dans un blockchain

  • Peut être signé en utilisant l'infrastructure PKI connue.
  • Est automatiquement validé et horodaté.
  • Peut être vu par tout le monde.
  • Peut vivre séparément des données physiques (du monde réel) auxquelles il fait référence.

Relation au PDF:

  • Les documents PDF peuvent être signés numériquement.
    • Nécessite une autorité de certification (centralisée).
    • Nécessite un serveur de temps (centralisé).
    • Ne peut être signé en parallèle.
    • Les signatures vivent dans le document.
  • Web de confiance
  • Intégrité: "Le document a ce contenu exact."
  • Authentification: «J'ai créé ce document. Et je peux le prouver."
  • Non-répudiation: «Il a créé ce document. Et je peux le prouver.”
  • Horodatage.

Blockchain

Pourquoi vous devriez utiliser iText & Blockchain

Une blockchain contient des données. Elle recueille ces données dans des unités appelées « blocs ». Il existe un mécanisme pour prouver qu'un bloc n'a pas été falsifié. Et avec le temps, les blocs sont enchaînés ensemble. Ce chaînage permet organiquement une sorte « d'histoire ».

Technologie Blockchain

Une blockchain remplace la technologie plus ancienne qui traite l'authentification et la non-répudiation. Tout d'abord, vous pouvez signer numériquement un document de plusieurs façons. En « signant », nous souhaitons créer le hachage d'un document, créer une signature à partir de ce hachage avec une clé privée et stocker la signature. Cela a deux effets :

  1. la signature identifie la personne qui a signé le document.
  2. la signature, lorsqu'elle est déchiffrée, identifie le fichier à partir duquel elle a été calculée.

    Une fois qu'une telle signature est stockée dans une blockchain, elle ne peut pas être modifiée ou supprimée. Cela vous donne un avantage supplémentaire :

  3. le fait que votre signature soit dans la blockchain vous donne un point dans le temps lorsque l'opération a été effectuée.

Plus tard, vous pouvez dire : « J'ai créé ce hachage le 10 octobre 2016 : voici la transaction dans la blockchain qui contient le hachage. Je l'ai créé selon cette formule à partir de ce fichier. » N'importe qui peut prendre votre fichier et calculer le hachage à nouveau et vérifier qu'il correspond à celui stocké dans la blockchain. Tout cela fonctionne pour les raisons suivantes :

  1. il est très facile de calculer le hachage à partir d'un fichier mais très difficile de créer un fichier similaire qui produira exactement le même hachage.
  2. il est pratiquement impossible de modifier les données stockées dans la blockchain.
  3. chaque transaction dans la blockchain est horodatée ; nous savons ainsi exactement quand cela a été fait.

Cas d'utilisation théorique - niveau élevé

À un niveau élevé, l'idée est de séparer la fonctionnalité de signature et d'intégrité d'un pdf, et de les intégrer à la blockchain. Imaginons un exemple de cas d'utilisation.

  1. Le document est créé. L'identifiant du document (avec son hachage et le nom de l'algorithme de hachage) est placé dans une blockchain publique. Cela ne pose aucun problème car le hachage ne vous permet généralement pas de reconcevoir le document entier. Nous mettons également l'algorithme de hachage sur la chaîne pour assurer une validation à long terme.
  2. Imaginons que ce document est une facture. Bob a fait quelques travaux sur sa maison et l'entreprise de rénovation lui envoie une facture.
  3. Bob veut signer la facture pour indiquer qu'il est d'accord avec le prix et qu'il paiera. La clé privée de Bob est ensuite utilisée pour chiffrer la valeur de hachage du document. Cette signature (comprenant l'ID du document, la valeur de hachage d'origine, la valeur de hachage signée, ainsi que les noms de l'algorithme de hachage et de l'algorithme de signature) est stockée dans la blockchain.
  4. Alice, qui travaille pour l'entreprise de rénovation, veut vérifier si Bob a déjà signé. Elle peut facilement rechercher tous les enregistrements de la blockchain pour un ID donné (l'ID du document). Un de ces enregistrements devrait être celui que Bob a créé plus tôt. Puisque l'enregistrement contient le hachage d'origine et les noms de tous les algorithmes impliqués, Alice peut vérifier 2 choses :
    • c'est Bob qui a signé, en utilisant le hachage, le hachage signé et la clé publique de Bob.
    • Bob a signé le document exact qu'elle lui a envoyé, avec l'identifiant du document et le hachage.

Blockchain - idée de haut niveau

Cas d'utilisation théorique - faible niveau

Mise en œuvre

Les interfaces que nous imposons aux mises en œuvre de blockchain sont minimes mais elles nous fournissent l'abstraction nécessaire pour nous permettre de concevoir en outre des applications et des flux de travail complexes. Nous considérons une blockchain sous forme de carte multiple, permettant aux utilisateurs finaux de stocker un objet (représenté par Record, qui est HashMap <string, object> ) et en le liant à une clé (chaîne).

public interface IBlockChain {
 
    /**
     * Mettez des données sur la blockchain
     *
     * Clé @param key : la clé utilisée pour mettre les données sur la blockchain
     * Données @param : les données mises sur la blockchain
     */
    public boolean put(String key, Record data);
 
    /**
     * Obtenez des données de la blockchain
     *
     * Clé @param : la clé en cours d'interrogation
     * @return
     */
    public List<Record> get(String key);
 
    /**
     * Obtenez toutes les données de la blockchain
     * @return
     */
    public List<Record> all();
}


Mise en œuvre concrète à l'aide de JSON-RPC et MultiChain

Nous avons fourni comme preuve de concept la mise en œuvre de l'interface IBlockchain à l'aide de JSON-RPC (appel de procédure à distance) et MultiChain.

Si vous souhaitez en savoir plus sur la configuration d'une instance de blockchain avec MultiChain, consultez leur site Web pour plus de ressources, en particulier le guide de démarrage ici.


Un exemple d'iText & Blockchain

Dans cet exemple, nous allons vous montrer comment mettre un document sur la blockchain, avec la signature :

       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();


Vous pouvez récupérer des informations sur un document de la blockchain :

  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("");
        }