iTextとデジタル署名

Clone of PDFドキュメントのための電子署名

否認防止、完全性、信頼性保護のためにPDFドキュメントにデジタル署名します。

はじめに

デジタル署名

デジタル署名は、デジタルドキュメントを使用する際に手書き署名の代わりとなりました。このコンセプトは広く受け入れられており、PDFの要件に統合されています。これは、その署名が正当であり、ドキュメントに変更が加えられていないということを確認する、ドキュメントに公証人のスタンプを付けるのと類似しています。

電子署名は基本的に、個人が契約を結ぶという意向を捉えており、デジタル署名は情報を暗号化して、署名されたドキュメントの有効性を確認するために使われます。

デジタル署名を使用する主な利点は 自動化とデジタルドキュメントワークフローを安全にし、時間や労力を節約する点にあります。

なぜiTextとデジタル署名を使うのでしょうか?

法的に価値のあるドキュメントを想像してみてください。そのようなドキュメントは権威を確約しなければならない場合に、権利や義務に関する重要な情報を含んでいる可能性があります。その時、誰かによって書いてあるコミットメントを否定されたくないはずです。

その上、このドキュメントはおそらく違う関係者へ送信され、閲覧及び保管されます。ワークフローの色々な場所やタイミングで、ドキュメントを変更することが可能です。自発的な場合 (たとえば、追加の署名を追加するため)や、非自発的 (たとえば、送信エラーが原因)な場合、もしくは故意に、元のドキュメントから偽造したい場合が考えられます。 

100年以上、当社はこの問題を解決するために、手書きサインを行なってきました。

現在では、デジタル署名を使用することによって、下記のことが可能になりました。

  • ドキュメントの完全性—ドキュメントがワークフローのどこかで変更されていないということを保証しなければなりません。 
  • ドキュメントの権威—ドキュメントの作者が、想定の人物であるということを保証する必要があります。
  • 否認防止— 作成者自身であるということを否定不可能であるということを保証します。
  • 署名のタイミング – ドキュメントがサインされた日付と時間を保証します。

ISO-32000-2 はPAdES-4ではじめに発行された、コンセプトを紹介します。

  • 長期間の有効性(LTV): 完全性、信頼性、否認防止、そして署名の時間を長期的に検証できるということを保証しなければなりません。

これらの5つのコンセプトを組み合わせることによって、ワークフロー全体を通じてドキュメントが安全かつ正しいということを確信できます。 

デジタル署名: PDFは長い間、埋め込まれた電子署名と明示的な互換性を保持しています。デジタル署名は、改ざんの防止措置から認証と失効まで、様々な価値をもつ機能を提供することが可能です 

より早い承認プロセスとセキュリティ: ほぼすべての国が、特定の条件のもとで紙のドキュメントと同じ価値をもつデジタル証拠に認めるリーガルフレームワークに向かって動いています。あらゆる政府が同じペースで取り組んでいるということないですが、PDF形式は多数の法制度によって奨励されています。

PDFでのデジタル署名

デジタル署名のコンセプトは何でしょうか?

通常、デジタル署名は個人または組織がPDFドキュメントにおいて、誰が、特定の日にちまたは日程に、該当のドキメントが署名されてからアップデートされていないことを証明するために使用されます。

契約の署名についての仕様とプロセスによっては、1つのPDFドキュメントに1つ以上の署名が含まれるケースもあります。実際の署名は見えない状態で、ハッシュされ、暗号化されためたデータにファイルの証明とともに組み込まれています。

実際のデジタル署名に加えて、PDFファイルは署名のオプションの可視表現が含まれるケースもあります。署名の写真とサインされる証明の要約は、署名の可視比率を含むケースもあります。

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. 

Universal Benefits of PDF/UA

While the biggest stakeholders for accessibility are the over 1 billion people with disabilities worldwide, PDF/UA can benefit both users with and without disabilities. Just think about how frustrating it can be to read an inaccessible PDF on your mobile phone. The structural requirements of PDF/UA allow for better machine reading capabilities, that can allow for efficient reflow of a document on diverging screen sizes, but can also improve your PDF to HTML conversion, SEO (Search Engine Optimization), and everyday text-to-speech applications. You can read more about the benefits for all users in our blog.

Image
Responsive PDF

Accessibility Regulations

Does anybody still need convincing? Well, providing accessible documents is not just a moral consideration, but one often mandated by law. One such law addressing the accessibility of all publicly available content, is the Americans with Disabilities Act (ADA). In 2020 alone, approximately 11,000 ADA lawsuits related to accessibility of private businesses were filed, of which 3,500 relate to digital accessibility. With settlements for individual plaintiffs often adding up to thousands of dollars, inaccessible documents can become a major liability for your organization, and not just in the USA (ADA and Section 508).

The EU has the EU Web Accessibility Directive and the European Accessibility Act (EAA), The UK has the Disability Discrimination Act and Canada has several such as AODA. And the list goes on, so be sure to check for your local regulations in our free ebook “PDF/UA: the inclusive document format”.

Image
pdfua regulations

Make PDF/UA compliance scalable with iText

Text offers you solutions to achieve PDF/UA compliance in a scalable way, both within the open-source iText 7 Core library and the visual designer iText DITO.

iText 7 Library/SDK

iText 7 Core provides developers with the necessary tools to automate the creation of accessible PDFs in both Java and .NET (C#). With just a few lines of code you can meet the following PDF/UA requirements in your workflows:

  • Create and manipulate Tagged PDF
  • Add a language specifier
  • Set the title of the document to display in the title bar
  • Embed fonts
  • Set alt text

Code example for creating a PDF/UA compliant document

package com.itextpdf.samples.sandbox.pdfua; import com.itextpdf.io.font.PdfEncodings; import com.itextpdf.io.image.ImageDataFactory; import com.itextpdf.kernel.font.PdfFont; import com.itextpdf.kernel.font.PdfFontFactory; import com.itextpdf.kernel.font.PdfFontFactory.EmbeddingStrategy; import com.itextpdf.kernel.geom.PageSize; import com.itextpdf.kernel.pdf.PdfDocument; import com.itextpdf.kernel.pdf.PdfDocumentInfo; import com.itextpdf.kernel.pdf.PdfString; import com.itextpdf.kernel.pdf.PdfVersion; import com.itextpdf.kernel.pdf.PdfViewerPreferences; import com.itextpdf.kernel.pdf.PdfWriter; import com.itextpdf.kernel.pdf.WriterProperties; import com.itextpdf.kernel.xmp.XMPException; import com.itextpdf.layout.Document; import com.itextpdf.layout.element.Image; import com.itextpdf.layout.element.List; import com.itextpdf.layout.element.ListItem; import com.itextpdf.layout.element.Paragraph; import java.io.File; import java.io.FileInputStream; import java.io.IOException; public class PdfUA { public static final String DEST = "./target/sandbox/pdfua/pdf_ua.pdf"; public static final String DOG = "./src/main/resources/img/dog.bmp"; public static final String FONT = "./src/main/resources/font/FreeSans.ttf"; public static final String FOX = "./src/main/resources/img/fox.bmp"; public static void main(String[] args) throws Exception { File file = new File(DEST); file.getParentFile().mkdirs(); new PdfUA().manipulatePdf(DEST); } public void manipulatePdf(String dest) throws IOException { PdfDocument pdfDoc = new PdfDocument(new PdfWriter(dest, new WriterProperties().addUAXmpMetadata().setPdfVersion(PdfVersion.PDF_1_7))); Document document = new Document(pdfDoc, PageSize.A4.rotate()); //TAGGED PDF //Make document tagged pdfDoc.setTagged(); //PDF/UA //Set document metadata pdfDoc.getCatalog().setViewerPreferences(new PdfViewerPreferences().setDisplayDocTitle(true)); pdfDoc.getCatalog().setLang(new PdfString("en-US")); PdfDocumentInfo info = pdfDoc.getDocumentInfo(); info.setTitle("English pangram"); Paragraph p = new Paragraph(); //PDF/UA //Embed font PdfFont font = PdfFontFactory.createFont(FONT, PdfEncodings.WINANSI, EmbeddingStrategy.PREFER_EMBEDDED); p.setFont(font); p.add("The quick brown "); Image img = new Image(ImageDataFactory.create(FOX)); //PDF/UA //Set alt text img.getAccessibilityProperties().setAlternateDescription("Fox"); p.add(img); p.add(" jumps over the lazy "); img = new Image(ImageDataFactory.create(DOG)); //PDF/UA //Set alt text img.getAccessibilityProperties().setAlternateDescription("Dog"); p.add(img); document.add(p); p = new Paragraph("\n\n\n\n\n\n\n\n\n\n\n\n").setFont(font).setFontSize(20); document.add(p); List list = new List().setFont(font).setFontSize(20); list.add(new ListItem("quick")); list.add(new ListItem("brown")); list.add(new ListItem("fox")); list.add(new ListItem("jumps")); list.add(new ListItem("over")); list.add(new ListItem("the")); list.add(new ListItem("lazy")); list.add(new ListItem("dog")); document.add(list); document.close(); } }
using System; using System.IO; using iText.IO.Font; using iText.IO.Image; using iText.Kernel.Font; using iText.Kernel.Geom; using iText.Kernel.Pdf; using iText.Layout; using iText.Layout.Element; namespace iText.Samples.Sandbox.Pdfua { public class PdfUA { public static readonly string DEST = "results/sandbox/pdfua/pdf_ua.pdf"; public static readonly String DOG = "../../../resources/img/dog.bmp"; public static readonly String FONT = "../../../resources/font/FreeSans.ttf"; public static readonly String FOX = "../../../resources/img/fox.bmp"; public static void Main(String[] args) { FileInfo file = new FileInfo(DEST); file.Directory.Create(); new PdfUA().ManipulatePdf(DEST); } private void ManipulatePdf(String dest) { PdfDocument pdfDoc = new PdfDocument(new PdfWriter(dest, new WriterProperties().AddUAXmpMetadata().SetPdfVersion (PdfVersion.PDF_1_7))); Document document = new Document(pdfDoc, PageSize.A4.Rotate()); //TAGGED PDF //Make document tagged pdfDoc.SetTagged(); //PDF/UA //Set document metadata pdfDoc.GetCatalog().SetViewerPreferences(new PdfViewerPreferences().SetDisplayDocTitle(true)); pdfDoc.GetCatalog().SetLang(new PdfString("en-US")); PdfDocumentInfo info = pdfDoc.GetDocumentInfo(); info.SetTitle("English pangram"); Paragraph p = new Paragraph(); //PDF/UA //Embed font PdfFont font = PdfFontFactory.CreateFont(FONT, PdfEncodings.WINANSI, PdfFontFactory.EmbeddingStrategy.PREFER_EMBEDDED); p.SetFont(font); p.Add("The quick brown "); Image img = new Image(ImageDataFactory.Create(FOX)); //PDF/UA //Set alt text img.GetAccessibilityProperties().SetAlternateDescription("Fox"); p.Add(img); p.Add(" jumps over the lazy "); img = new Image(ImageDataFactory.Create(DOG)); //PDF/UA //Set alt text img.GetAccessibilityProperties().SetAlternateDescription("Dog"); p.Add(img); document.Add(p); p = new Paragraph("\n\n\n\n\n\n\n\n\n\n\n\n").SetFont(font).SetFontSize(20); document.Add(p); List list = new List().SetFont(font).SetFontSize(20); list.Add(new ListItem("quick")); list.Add(new ListItem("brown")); list.Add(new ListItem("fox")); list.Add(new ListItem("jumps")); list.Add(new ListItem("over")); list.Add(new ListItem("the")); list.Add(new ListItem("lazy")); list.Add(new ListItem("dog")); document.Add(list); document.Close(); } } }

iText DITO

With iText DITO you can visually design PDF templates and bind them with your data to simplify the process of creating and maintaining your documents. iText DITO will automatically validate your template against PDF/UA requirements where possible and suggest actions to make your template suitable for generating compliant documents.

itext dito pdfua wizard

お問い合わせ

それでも問題が解決しませんか? 

お寄せいただいたご質問には、喜んでお答えいたします。当社へご連絡ください。内容を確認次第、追ってご連絡いたします。

問い合わせる
常に最新情報を得る

11,000人以上の購読者に加わって、iTextの新しい製品、アップデート、ヒント、記述的な解決策や出来事に関する最新情報を得ることでiText PDF専門家になりましょう。

今すぐ購読