iText와 디지털 서명

Clone of PDF 문서의 전자 서명

부인 방지, 무결성 및 원본 보호를 위해 PDF 문서에 디지털 서명을 사용하세요.

제품 소개

디지털 서명

디지털 서명은 디지털 문서를 사용할 때 잉크를 사용한 서명을 대체하는 솔루션입니다. 이 개념은 널리 적용되고 있으며, PDF 규격에도 잘 통합되어 있습니다. 서명이 적법하고 문서가 수정되지 않았음을 보장하기 위해 문서에 공증인을 찍는 것과 유사합니다.

기본적으로 전자 서명은 계약을 체결하는 개인의 의도를 캡처하며, 디지털 서명을 사용하여 정보를 암호화하고 서명된 문서의 유효성을 확인합니다.

디지털 서명을 사용할 때의 중요한 장점은 디지털 문서 워크플로를 자동화하고 보안을 유지해서 시간과 예산을 절약하고, 고충을 줄여준다는 것에 있습니다.

iText와 디지털 서명을 사용하는 이유는 무엇인가요?

법적 가치가 있는 문서가 있다고 생각해보십시오. 이런 문서에는 권리와 의무에 대한 중요한 정보가 포함되어 있을 수 있고, 이 경우 문서의 진위를 확인해야 합니다. 사람들이 서면으로 약속한 것을 모른 체하기를 바라지는 않기 때문입니다.

게다가 이 문서는 다른 사람들이 우편으로 받고, 확인하고, 보관해야 합니다. 워크플로의 각 지점과 순간마다 문서는 변경될 수 있습니다. 이는 자발적이거나(예를 들어, 다른 서명 추가), 비자발적이거나(예를 들어, 전송 오류 발생), 의도적인(원본 문서에서 위조문서를 작성하고자 하는 경우) 변경일 수 있습니다. 

수백 년 전부터 우리는 문서에 이른바 '잉크 서명'을 넣어서 이러한 문제를 해결하려고 했습니다.

지금은 디지털 서명으로 다음과 같은 목적을 달성할 수 있습니다.

  • 문서의 무결성— 문서가 워크플로 어딘가에서 변경되지 않았다는 보증이 필요합니다. 
  • 문서의 진위— 문서의 저자가 (다른 사람이 아니라) 우리가 생각하는 그 사람이 맞는지 보증이 필요합니다.
  • 부인 방지— 저자가 저작 사실을 부인할 수 없게 하는 보증이 필요합니다.
  • 서명 시기– 문서에 서명된 날짜와 시간에 대한 보증이 필요합니다.

ISO-32000-2에서는 PAdES-4에서 처음 공개된 다음과 같은 개념을 도입했습니다.

  • 장기적 검증(LTV): 무결성, 진위, 부인 방지, 서명 시기를 장기적으로 검증할 수 있다는 보증이 필요합니다.

이 다섯 가지 개념을 모두 충족할 때 워크플로를 처음부터 끝까지 거치는 동안 문서가 안전하고 올바르게 유지되었다는 확신을 가질 수 있습니다. 

디지털 서명: PDF는 매우 오래전부터 내장된 전자 서명과 명시적으로 호환되었습니다. 디지털 서명은 조작 방지, 인증, 철회 등의 다양한 중요 기능을 제공할 수 있습니다. 

빠른 승인 프로세스 및 보안: 거의 모든 국가가 특정 조건에서 디지털 증거에 종이 문서와 동등한 가치를 부여하는 법적 프레임워크로 옮겨가고 있습니다. 모든 정부가 같은 속도로 움직이는 것은 아니지만, 많은 법적 시스템에서 PDF 형식을 권장합니다.

PDF의 디지털 서명

디지털 서명의 개념은 무엇인가요?

일반적으로 디지털 서명은 PDF 문서에서 개인과 조직이 특정 날짜/시간에 누가 문서를 확인하였고, 서명된 이후로 문서가 업데이트되지 않았음을 나타내는 데 사용됩니다.

계약 서명과 관련된 규격과 프로세스에 따라 하나의 PDF 문서에 하나 이상의 서명이 들어갈 수 있습니다. 실제 디지털 서명은 파일에 인증서와 함께 포함된 암호화 및 해시 처리된 숨겨진 메타데이터의 일부입니다.

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 PDF 전문가가 되어보세요.

지금 구독하기