iText et signatures numériques

Signatures électroniques pour les documents PDF

Signez numériquement vos documents PDF afin de garantir le non-reniement, l’intégrité et l’authenticité.

Introduction

Signatures numériques

Les signatures numériques sont la solution pour remplacer les signatures à l’encre humide lors de l’utilisation de documents numériques. Ce concept a été largement adopté et s’intègre bien dans la spécification PDF. C’est l’équivalent de l’apposition d’un cachet de notaire sur un document, qui garantit que les signatures sont légitimes et que le document n’a pas été modifié.

La signature électronique capture essentiellement l’intention de la personne de conclure le contrat, et est utilisée pour chiffrer les informations et confirmer la validité du document signé.

Les principaux avantages de l’utilisation de signatures numériques sont l’automatisation et la sécurisation de votre flux de travail de documents numériques, ce qui vous permet de gagner du temps, d’économiser de l’argent et d’éviter les maux de tête.

Signatures numériques dans les PDF

Quels sont les concepts des signatures numériques ?

En général, les signatures numériques sont utilisées dans les documents PDF par les personnes et les organisations pour indiquer qui a vérifié le document à une date/heure précise et pour montrer que le document n’a pas été modifié depuis sa signature.

Il peut y avoir une ou plusieurs signatures dans un document PDF en fonction des spécifications et du processus associé à la signature d’un contrat. La signature numérique proprement dite fait partie des métadonnées invisibles, hachées et chiffrées, intégrées dans le fichier avec un certificat.

En plus de la signature numérique en soi, le fichier PDF peut également comprendre une représentation visible facultative de la signature. Une photo de la signature ou un résumé du certificat de signature peuvent être inclus dans la partie visible de la signature.

Digital signatures icon
Hashing

Using a Cryptographic hash function to turn an arbitrary block of data into a fixed-size block of data.  

Digital signatures icon
Encryption

  • Central Idea
    • Transform message before sending
    • Transformed message is not readable
    • Receiver transforms message back to readable format
  • Transforms are done using mathematical functions
  • Symmetric Encryption
    • Depends on shared key
  • Asymmetric Encryption
    • Participants have a Private and a Public Key
    • Only Public Key is shared

Digital signatures icon
Certificate Authorities

  • A certificate authority (CA) is an entity maintaining and issuing security certificates and public keys that are used in a public network for protected communication. Together with the registration authority (RA), the CA is part of the public key infrastructure (PKI), which verifies the information provided by an electronic certificate requester. If the information is correct, the certificate is verified.

  • Before you use the public key of someone to verify a signature, you need proof that it truly belongs to them. The role of the CA is to issue digital certificates to individuals within a PKI program that shows that a particular public key belongs to a specific individual–so you can claim that digital certificates bind the identity of the individual to their public key. This bond is secured by the CA using the CA's own private key with a digital signature.

  • There are many CAs worldwide, and they can be either enterprise-based, industry-based, national (e.g. linked to e-ID card schemes), or publicly available online. In the case of PDF documents, a list of default CAs is distributed with PDF applications which support digital signatures. 

Pourquoi utiliser iText et les signatures numériques ?

Imaginez un document ayant une valeur juridique. Un tel document peut contenir des informations importantes sur des droits et des obligations, auquel cas vous devez vous assurer de son authenticité. Vous ne voulez pas que les gens nient les engagements qu’ils ont pris par écrit.

En outre, ce document doit probablement être envoyé à différentes parties pour qu’elles le consultent et le conservent. À différentes étapes du flux de travail et à différents moments, le document peut être modifié, que ce soit volontairement (par exemple, pour ajouter une signature supplémentaire), involontairement (par exemple, en raison d’une erreur de transmission) ou délibérément si quelqu’un souhaite falsifier le document original. 

Pendant des siècles, nous avons tenté de résoudre ce problème à l’aide d’une signature dite « à l’encre humide » sur le papier.

Aujourd’hui, nous pouvons utiliser les signatures numériques pour garantir :

  • l’intégrité du document : nous voulons être sûrs que le document n’a pas été modifié à une étape du flux de travail ;
  • l’authenticité du document : nous voulons être sûrs que l’auteur du document est bien celui que nous pensons (et non pas quelqu’un d’autre) ;
  • le non-reniement : nous voulons être sûrs que l’auteur ne peut pas nier sa qualité d’auteur ;
  • le moment de la signature : nous voulons être sûrs de la date et de l’heure auxquelles un document a été signé.

La norme ISO-32000-2 introduit également un concept publié pour la première fois dans la norme PAdES-4 :

  • la validation à long terme (long-term validation, LTV) : nous voulons être sûrs que l’intégrité, l’authenticité, le non-reniement et le moment de la signature peuvent toujours être validés à long terme.

La combinaison de ces cinq concepts vous permet d’avoir la certitude que vos documents sont sécurisés et corrects tout au long de votre flux de travail. 

SIGNATURE NUMÉRIQUE : le format PDF est clairement compatible avec les signatures électroniques intégrées depuis très longtemps. Les signatures numériques peuvent offrir une série de capacités utiles, allant de la protection contre la falsification à l’authentification en passant par la révocation. 

PROCESSUS D’APPROBATION PLUS RAPIDES ET SÉCURITÉ : presque tous les pays évoluent vers un cadre juridique qui reconnaît, dans certaines conditions, la même valeur aux preuves numériques qu’aux documents papier. Bien que les gouvernements n’avancent pas tous au même rythme, de nombreux systèmes juridiques recommandent le format PDF.

Architecture

Quels sont les architectures des signatures numériques ?

iText a toujours été à l’avant-garde des signatures numériques dans les documents PDF en prenant en charge PAdES et en étant l’un des premiers à prendre en charge les signatures dans la toute dernière version PDF 2.0.

Notre API mature et facile à utiliser a été minutieusement testée par l’industrie et a fait ses preuves dans plusieurs cas d’utilisation.

Digital signatures icon
Server-side signing

Use Case: 

  • Company signature: Invoice, Contracts
  • Signing services in the Cloud: DocuSign, Adobe Sign
  • Security management responsibilities

Digital signatures icon
Client-side signing

Use Case:

  • Desktop applications: Adobe Acrobat Pro, Adobe Reader (for Reader-enabled documents, Home-made, e.g. using iText)
  • In a web context: The PDF software runs to the client, e.g. using Java Web Start
  • Access to the token or smart card through MSCAPI, PKCS#11, Custom smart card library (1 Signature / Second)
  • Security: User has smart card and PIN, or USB token and passphrase

Digital signatures icon
Deferred signing

Use Case:

  • Signing on an iPad/Tablet: Easy to integrate into a document management system
  • ISAE 3000: The standard for assurance over non-financial information

Ajout d’un exemple de signature numérique

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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
/*
    Ce fichier fait partie du projet iText (R).
    Copyright (c) 1998-2019 iText Group NV
    Auteurs : iText Software.
 
    Pour en savoir plus, veuillez contacter iText Software à l’adresse suivante :
    sales@itextpdf.com
 */
/*
 * Cette classe fait partie du livre blanc intitulé
 * « Digital Signatures for PDF Documents » (Signatures numériques pour les documents PDF)
 * écrit par Bruno Lowagie
 *
 * Pour en savoir plus, consultez le site : http://itextpdf.com/learn
 */
package com.itextpdf.samples.signatures.chapter02;
 
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.StampingProperties;
import com.itextpdf.signatures.BouncyCastleDigest;
import com.itextpdf.signatures.DigestAlgorithms;
import com.itextpdf.signatures.IExternalDigest;
import com.itextpdf.signatures.IExternalSignature;
import com.itextpdf.signatures.PdfSignatureAppearance;
import com.itextpdf.signatures.PdfSigner;
import com.itextpdf.signatures.PrivateKeySignature;
 
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.Security;
import java.security.cert.Certificate;
 
import org.bouncycastle.jce.provider.BouncyCastleProvider;
 
public class C2_01_SignHelloWorld {
    public static final String DEST = "./target/signatures/chapter02/";
 
    public static final String KEYSTORE = "./src/test/resources/encryption/ks";
    public static final String SRC = "./src/test/resources/pdfs/hello.pdf";
 
    public static final char[] PASSWORD = "password".toCharArray();
 
    public static final String[] RESULT_FILES = new String[] {
            "hello_signed1.pdf",
            "hello_signed2.pdf",
            "hello_signed3.pdf",
            "hello_signed4.pdf"
    };
 
    public void sign(String src, String dest, Certificate[] chain, PrivateKey pk, String digestAlgorithm,
            String provider, PdfSigner.CryptoStandard signatureType, String reason, String location)
            throws GeneralSecurityException, IOException {
        PdfReader reader = new PdfReader(src);
        PdfSigner signer = new PdfSigner(reader, new FileOutputStream(dest), new StampingProperties());
 
        // Créez l’aspect de la signature.
        Rectangle rect = new Rectangle(36, 648, 200, 100);
        PdfSignatureAppearance appearance = signer.getSignatureAppearance();
        appearance
                .setReason(reason)
                .setLocation(location)
 
                // Indiquez si l’aspect avant la signature du champ sera utilisé
                //comme arrière-plan pour le champ signé. La valeur « false » est la valeur par défaut.
                .setReuseAppearance(false)
                .setPageRect(rect)
                .setPageNumber(1);
        signer.setFieldName("sig");
 
        IExternalSignature pks = new PrivateKeySignature(pk, digestAlgorithm, provider);
        IExternalDigest digest = new BouncyCastleDigest();
 
        // Signez le document en utilisant le mode détaché, CMS ou équivalent à CAdES.
        signer.signDetached(digest, pks, chain, null, null, null, 0, signatureType);
    }
 
    public static void main(String[] args) throws GeneralSecurityException, IOException {
        File file = new File(DEST);
        file.mkdirs();
 
        BouncyCastleProvider provider = new BouncyCastleProvider();
        Security.addProvider(provider);
        KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
        ks.load(new FileInputStream(KEYSTORE), PASSWORD);
        String alias = ks.aliases().nextElement();
        PrivateKey pk = (PrivateKey) ks.getKey(alias, PASSWORD);
        Certificate[] chain = ks.getCertificateChain(alias);
 
        C2_01_SignHelloWorld app = new C2_01_SignHelloWorld();
        app.sign(SRC, DEST + RESULT_FILES[0], chain, pk, DigestAlgorithms.SHA256, provider.getName(),
                PdfSigner.CryptoStandard.CMS, "Test 1", "Ghent");
        app.sign(SRC, DEST + RESULT_FILES[1], chain, pk, DigestAlgorithms.SHA512, provider.getName(),
                PdfSigner.CryptoStandard.CMS, "Test 2", "Ghent");
        app.sign(SRC, DEST + RESULT_FILES[2], chain, pk, DigestAlgorithms.SHA256, provider.getName(),
                PdfSigner.CryptoStandard.CADES, "Test 3", "Ghent");
        app.sign(SRC, DEST + RESULT_FILES[3], chain, pk, DigestAlgorithms.RIPEMD160, provider.getName(),
                PdfSigner.CryptoStandard.CADES, "Test 4", "Ghent");
    }
}
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
/*
 
Ce fichier fait partie du projet iText (R).
Copyright (c) 1998-2019 iText Group NV
 
*/
/*
* Cette classe fait partie du livre blanc intitulé
* « Digital Signatures for PDF Documents » (Signatures numériques pour les documents PDF)
* écrit par Bruno Lowagie
*
* Pour en savoir plus, consultez le site : http://itextpdf.com/learn
*/
 
using System;
using System.IO;
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.X509;
using iText.Kernel.Geom;
using iText.Kernel.Pdf;
using iText.Signatures;
using Org.BouncyCastle.Pkcs;
 
namespace iText.Samples.Signatures.Chapter02
{
    public class C2_01_SignHelloWorld
    {
        public static readonly string DEST = "../../results/signatures/chapter02/";
 
        public static readonly string KEYSTORE = "../../resources/encryption/ks";
        public static readonly string SRC = "../../resources/pdfs/hello.pdf";
 
        public static readonly char[] PASSWORD = "password".ToCharArray();
 
        public static readonly String[] RESULT_FILES =
        {
            "hello_signed1.pdf",
            "hello_signed2.pdf",
            "hello_signed3.pdf",
            "hello_signed4.pdf"
        };
 
        public void Sign(String src, String dest, X509Certificate[] chain, ICipherParameters pk,
            String digestAlgorithm, PdfSigner.CryptoStandard subfilter, String reason, String location)
        {
            PdfReader reader = new PdfReader(src);
            PdfSigner signer = new PdfSigner(reader, new FileStream(dest, FileMode.Create), new StampingProperties());
 
            // Créez l’aspect de la signature.
            Rectangle rect = new Rectangle(36, 648, 200, 100);
            PdfSignatureAppearance appearance = signer.GetSignatureAppearance();
            appearance
                .SetReason(reason)
                .SetLocation(location)
 
                // Indiquez si l’aspect avant la signature du champ sera utilisé
                // comme arrière-plan pour le champ signé. La valeur « false » est la valeur par défaut.
                .SetReuseAppearance(false)
                .SetPageRect(rect)
                .SetPageNumber(1);
            signer.SetFieldName("sig");
 
            IExternalSignature pks = new PrivateKeySignature(pk, digestAlgorithm);
 
            // Signez le document en utilisant le mode détaché, CMS ou équivalent à CAdES.            signer.SignDetached(pks, chain, null, null, null, 0, subfilter);
        }
 
        public static void Main(String[] args)
        {
            DirectoryInfo directory = new DirectoryInfo(DEST);
            directory.Create();
 
            Pkcs12Store pk12 = new Pkcs12Store(new FileStream(KEYSTORE, FileMode.Open, FileAccess.Read), PASSWORD);
            string alias = null;
            foreach (var a in pk12.Aliases)
            {
                alias = ((string) a);
                if (pk12.IsKeyEntry(alias))
                    break;
            }
 
            ICipherParameters pk = pk12.GetKey(alias).Key;
            X509CertificateEntry[] ce = pk12.GetCertificateChain(alias);
            X509Certificate[] chain = new X509Certificate[ce.Length];
            for (int k = 0; k < ce.Length; ++k)
            {
                chain[k] = ce[k].Certificate;
            }
 
            C2_01_SignHelloWorld app = new C2_01_SignHelloWorld();
            app.Sign(SRC, DEST + RESULT_FILES[0], chain, pk, DigestAlgorithms.SHA256,
                PdfSigner.CryptoStandard.CMS, "Test 1", "Ghent");
            app.Sign(SRC, DEST + RESULT_FILES[1], chain, pk, DigestAlgorithms.SHA512,
                PdfSigner.CryptoStandard.CMS, "Test 2", "Ghent");
            app.Sign(SRC, DEST + RESULT_FILES[2], chain, pk, DigestAlgorithms.SHA256,
                PdfSigner.CryptoStandard.CADES, "Test 3", "Ghent");
            app.Sign(SRC, DEST + RESULT_FILES[3], chain, pk, DigestAlgorithms.RIPEMD160,
                PdfSigner.CryptoStandard.CADES, "Test 4", "Ghent");
        }
    }
}

Cas d’utilisation : Smart Certificate 2.0 : émission et partage de documents numériques certifiés et fiables

CVTrust a développé sa plate-forme Smart Certificate qui permet aux institutions d’émettre et de partager numériquement des documents certifiés et fiables, qui sont vérifiables en un clic. 

  • Smart Certificate 2.0 offre de nombreuses améliorations telles qu’une expérience utilisateur et une IU optimisées ainsi que des fonctionnalités supplémentaires. En outre, elle est conçue pour être disponible sous forme de logiciel en tant que service (Software as a Service, SaaS) qui peut être utilisé par toutes les organisations pour émettre des documents certifiés et vérifiables, quel qu’en soit l’objectif. Elle offre également un niveau de chiffrement des données extrêmement avancé et conforme aux exigences du RGPD et en matière de vie privée.
  • Smart Certificate 2.0 garantit également la validité des documents émis à l’aide de la plate-forme. Toute qualification ou autre accréditation peut être vérifiée à tout moment en cliquant sur un lien ou en scannant un code QR. Ainsi, toute personne prétendant avoir obtenu une qualification est en mesure de le démontrer.
  • Pour l’un de ses plus gros clients belges, CVTrust a dû utiliser l’API GlobalSign pour créer les certificats nécessaires pour les signatures numériques. À cette fin, il était nécessaire d’intégrer iText 7 dans le back-end de Smart Certificate. La nouvelle solution utilisant iText 7 et l’API GlobalSign devait étendre les capacités de la plate-forme Smart Certificate, tout s’intégrant facilement dans l’infrastructure existante.
  • iText 7 permet la création en masse des documents PDF nécessaires, et gère également l’ajout et l’aspect des signatures numériques dans le PDF. Lorsqu’un document Smart Certificate est accordé, la plate-forme Smart Certificate crée un PDF unique fondé sur un modèle de PDF préexistant. Ensuite, grâce à l’API GlobalSign, une signature numérique vérifiée est ajoutée au document.

  • En même temps, un hachage unique du PDF est également créé et envoyé aux serveurs de Woleet afin que les hachages soient stockés de façon sécurisée dans la blockchain. CVTrust utilise la technologie de la blockchain pour renforcer la sécurité des documents et les rendre pratiquement impossibles à falsifier, car toute modification du hachage devrait être reproduite sur tous les nœuds de la blockchain.

Cela signifie que les documents sont :

  • accessibles en un clic (y compris le hachage/la vérification de leur blockchain) ;
  • téléchargeables en un clic ;
  • partageables en un clic, par exemple sur LinkedIn ;
  • vérifiables en un clic (par un lien/code QR) pour garantir l’intégrité, l’authenticité et la validité de chaque document.
Image
A key benefit of Smart Certificates are the secure validation options

Cas d’utilisation : Signatures numériques simplifiées pour les consommateurs et les entreprises grâce à eaZySign

  • Zetes, qui fournit des solutions d’identification d’utilisateurs et des cartes d’identité électroniques belges (e-ID), a lancé une plate-forme de signature numérique dans le cloud qui simplifie la manière dont les entreprises et les consommateurs peuvent remplacer les signatures manuscrites par des versions électroniques. La plate-forme dans le cloud offre un accès depuis n’importe quel appareil – internet, ordinateur ou portable – et permet aux entreprises de générer plus rapidement des revenus, de faire davantage d’économies et d’obtenir une meilleure expérience client.
  • En partenariat avec iText, le fournisseur de la bibliothèque de développement PDF la plus utilisée au monde, et GlobalSign, un des principaux fournisseurs de services d’identité et de sécurité, Zetes a développé la solution eaZySign. La nouvelle plateforme eaZySign résout deux des problèmes les plus courants liés à l’adoption de la signature numérique en facilitant la gestion et l’application des signatures numériques tout en garantissant que celles-ci conservent le niveau de confiance et de légalité approprié.
  • EaZySign est personnalisable pour prendre en charge un large éventail de besoins des applications. Elle est indépendante de la plate-forme et du système d’exploitation, ce qui permet de réaliser le processus de signature via des portails Web, des ordinateurs de bureau et les plates-formes mobiles les plus utilisés (iOS et Android) offrant un accès facile aux utilisateurs finaux.
  • Les signatures reposent sur les cartes d’identité électroniques belges (e-ID) ou sur les identifiants PKI de GlobalSign et sont conformes aux normes PAdES (PDF Advanced Electronic Signatures) établies par l’Institut européen des normes de télécommunications (European Telecommunications Standards Institute, ETSI).

Adoption massive par les consommateurs : les connaissances approfondies d’iText en matière de chiffrement ont permis de conjuguer la facilité d’utilisation et la sécurité pour rendre la plate-forme eaZySign plus puissante et plus acceptable pour la consommation de masse..  


Flux de travail de signature numérique PDF autour des processus d’entreprise : les flux de travail de signature numérique intégrés dans la solution eaZySign ont été créés avec iText.. Les utilisateurs peuvent simplement télécharger des documents vers la plate-forme afin de permettre aux utilisateurs finaux de les signer.


Certificat de signature numérique et conformité à PAdES : GlobalSign est une autorité d’horodatage de confiance (TSA) qui fournit les services d’horodatage nécessaires pour que les signatures numériques créées dans eaZySign respectent tous les niveaux de conformité à PAdES. Un horodatage tiers est également inclus pour vérifier la date de création du document, et le non-reniement est pris en charge.

Contact

Vous avez d'autres questions ?

Nous y répondrons avec plaisir. Contactez-nous et nous reviendrons vers vous sous peu.

Contactez-nous
Restez à jour

Rejoignez plus de 11 000 abonnés et devenez un expert iText PDF en vous tenant au courant de nos nouveaux produits, mises à jour, conseils, solutions techniques et événements.

Abonnez-vous