sgcSign 기능 참조
sgcSign 디지털 서명 스위트의 완전한 기능 카탈로그 — Delphi 7부터 Delphi 13 Florence, C++Builder, .NET을 위한 서명 표준, 키 공급자, 국가 프로파일, 검증, EU 신뢰 목록 통합, ETSI 검증 보고서예요.
sgcSign 디지털 서명 스위트의 완전한 기능 카탈로그 — Delphi 7부터 Delphi 13 Florence, C++Builder, .NET을 위한 서명 표준, 키 공급자, 국가 프로파일, 검증, EU 신뢰 목록 통합, ETSI 검증 보고서예요.
sgcSign은 키 관리, 서명 작업, 출력 형식을 분리해요. 모든 키 공급자와 서명자를 혼합하고; 하나의 컴포넌트만 변경하여 로컬 PFX와 Cloud KMS 사이를 전환해요.
단일 인터페이스 뒤에 인증서 및 개인 키 액세스를 추상화해요. 로컬 파일, Windows 인증서 저장소, PKCS#11 하드웨어 토큰, Azure / AWS / Google Cloud KMS, HashiCorp Vault, Certum SimplySign, CSC v2 원격 QTSP예요.
각 ETSI 형식을 위한 특화된 서명자: TsgcXAdESSigner, TsgcPAdESSigner, TsgcCAdESSigner, TsgcAuthenticodeSigner. 또한 국가 프로파일에서 적절한 서명자를 선택하고 구성하는 통합 고수준 API인 TsgcDocumentSigner가 있어요. TsgcSAFTPTSigner는 포르투갈의 Portaria 363/2010 인보이스 서명을 생성해요.
TsgcTSAClient (RFC 3161 타임스탬프), TsgcOCSPClient (폐지), TsgcSignatureVerifier (검증), TsgcX509Certificate (인증서 디코더 + 발급자 검증), TsgcEUTrustList (LOTL/EUTL), TsgcASiCContainer (ASiC-S/ASiC-E ZIP 패키징)이에요.
모든 4가지 AdES 레벨(B-B, B-T, B-LT, B-LTA)에서 완전한 ETSI 서명 형식 지원, 코드 서명을 위한 Microsoft Authenticode 포함이에요.
XML 고급 전자 서명이에요. 봉투형, 분리형, 래핑형 모드예요. B-B / B-T / B-LT / B-LTA 레벨이에요. 서명 위치를 고정하는 봉투 형식을 위한 SignatureParentElement(KSeF /v2/auth/xades-signature). Delphi 7 이상에서 WideString 오버로드를 통한 폴란드어, 스페인어, 독일어 발음 기호 지원이에요.
PDF 고급 전자 서명이에요. PDF 안에 서명을 포함하고, 서명자 이름, 사유, 위치, 연락처, 설정 가능한 사각형 영역으로 눈에 보이는 서명 외관을 만들 수 있어요. Adobe Acrobat과 호환돼요. TSA + OCSP로 PAdES-T, -LT 레벨을 지원해요.
CMS/PKCS#7 바이너리 서명 over any file or data stream. Detached and attached forms. CAdES-BES, CAdES-T (timestamped), CAdES-XL (long-term with revocation values).
연관 서명 컨테이너. ZIP-format archive bundling one or more documents with a XAdES or CAdES signature. Simple (apASiCS, single document) or Extended (apASiCE, manifest + multiple documents). The first ZIP entry is an uncompressed mimetype marker so verifiers detect the container in the first ~50 bytes.
Windows PE 파일(.exe, .dll, .sys, .ocx, .cpl, .scr)용 Microsoft Authenticode예요. SHA-1, SHA-256(기본값), SHA-384, SHA-512 해시 알고리즘과 RFC 3161 타임스탬프 토큰을 지원해요. 구형과 최신 검증기 모두와 호환되도록 중첩(이중) 서명을 지원해요. sgcSign Server에서 사용할 수 있어요.
형식마다 ETSI 적합성 레벨 4가지를 모두 지원해요. B-B(기본), B-T(타임스탬프), B-LT(장기, 폐지 정보 포함), B-LTA(보관용, 보관 타임스탬프 포함)예요. TSA 클라이언트와 OCSP 응답기를 추가하면 서명을 B-B에서 B-LT로 올릴 수 있어요.
모든 제공자는 IsgcKeyProvider를 구현해요. 서명 코드를 바꾸지 않고도 이 키 소스들 사이를 자유롭게 전환할 수 있어요.
| Component | Type | Use Case |
|---|---|---|
TsgcPFXKeyProvider |
Local file (PKCS#12) | 비밀번호로 보호된 PFX/.p12 파일을 지원해요. Windows에서는 네이티브 Windows CNG를, 그 외 플랫폼에서는 순수 Pascal 파싱을 사용해요. |
TsgcPEMKeyProvider |
Local file (PEM) | 암호화된 PKCS#8 키가 포함된 PEM 인증서예요. PBES2 / PBKDF2 / AES-CBC 복호화를 네이티브로 처리하므로 OpenSSL DLL이 필요 없어요. |
TsgcWindowsCertStoreProvider |
Windows store | 로컬 컴퓨터 및 현재 사용자 저장소를 지원해요. Active Directory 및 그룹 정책과 통합돼요. |
TsgcPKCS11Provider |
Hardware token | PKCS#11 드라이버로 스마트 카드와 HSM을 지원해요. SafeNet, YubiKey, Nitrokey, Thales, Utimaco 등이 있어요. |
TsgcAzureTrustedSigningProvider |
Cloud (Microsoft) | Azure Trusted Signing은 Microsoft의 적격 서명 서비스예요. OAuth2 클라이언트 자격 증명을 사용하며 Azure Key Vault와는 별개예요. |
TsgcAWSKMSKeyProvider |
Cloud (AWS) | AWS Key Management Service예요. 키는 AWS 안에 머물고, 문서 해시만 네트워크로 전송돼요. |
TsgcGCloudKMSKeyProvider |
Cloud (Google) | Google Cloud Key Management예요. 서비스 계정 인증을 사용해요. |
TsgcHashiCorpVaultKeyProvider |
클라우드(자체 호스팅) | HashiCorp Vault transit 서명 엔진이에요. 키는 Vault 클러스터를 벗어나지 않아요. |
TsgcCertumSimplySignProvider |
Remote QTSP | Certum SimplySign은 폴란드의 적격 전자 서명 제공자예요. KSeF, ZUS, PUE와 호환돼요. |
TsgcCSCKeyProvider |
Remote QTSP (CSC v2) | 범용 Cloud Signature Consortium v2 클라이언트예요. Universign, D-Trust sign-me, A-Trust, FNMT Cl@ve Firma, Evrotrust, Intesi Group 등 CSC v2 API를 제공하는 모든 QTSP를 지원해요. |
각 프로파일은 대상 국가 규제 기관의 요구를 충족하도록 해시 알고리즘, 정규화, 서명 레벨, RFC 3161 타임스탬프 정책, OCSP 폐지 확인 기준을 미리 조정해 두었어요. 코드 한 줄로 관할 국가를 바꿀 수 있어요.
| Profile | Country | System | Format | Level |
|---|---|---|---|---|
spVeriFactu | Spain | VeriFactu (AEAT) | XAdES-EPES | B-B |
spTicketBAI | Spain (Basque) | TicketBAI | XAdES-EPES | B-B |
spFacturaeB2B | Spain | Facturae 3.x / FACe | XAdES-EPES | B-T |
spFatturaPA | Italy | FatturaPA (SDI) | XAdES-BES | B-B |
spSAFTPT | Portugal | SAF-T PT | RSA-SHA256 | B-B |
spKSeF | Poland | KSeF (Krajowy System e-Faktur) | XAdES | B-T |
spFacturX | France / Germany | Factur-X / ZUGFeRD | XAdES | B-B |
spEFactura | Romania | e-Factura (ANAF) | XAdES | B-T |
spNAVOnline | Hungary | NAV Online | XML-DSig | B-B |
spFiskalizacija | Croatia | Fiskalizacija | XML-DSig | B-B |
spPeppolBE | Belgium | Peppol UBL 2.0 | XAdES | B-T |
spPeppolBG | Bulgaria | Peppol UBL 2.1 | XAdES | B-T |
spMyDATA | Greece | myDATA (AADE) | XAdES | B-B |
포르투갈: SAF-T (PT) 파일 자체에 서명하는 것 외에도, 전용 TsgcSAFTPTSigner 컴포넌트가 Portaria 363/2010 인보이스별 서명을 생성해요. 이 RSA-SHA1 서명의 1, 11, 21 and 31 위치에 있는 네 개의 문자가 인보이스에 인쇄되고 QR-code field Q에 담겨요.
TicketBAI: 지방별 변형 spTicketBAIAraba, spTicketBAIBizkaia, spTicketBAIGipuzkoa는 각각 해당 지방 Hacienda의 공식 서명 정책 식별자와 SHA-256 다이제스트를 담고 있어요. spTicketBAI는 하위 호환성을 위해 Bizkaia 쌍에 매핑돼요.
체코 EET 2.0: 매출 등록(Elektronická evidence tržeb)은 서명 프로파일이 아니라 전용 컴포넌트 TsgcEETClient로 제공돼요. 등록된 각 매출에 WS-Security 서명을 적용해 세무 당국에 전송하고, 확인 코드인 pok을 받아 읽어요. 보고는 2027년 1월 1일부터 시작돼요. EET 2.0 자세히 보기.
회원국 노동법 요건(예: 독일의 § 126a BGB, 이탈리아의 FEQ)을 충족하는 eIDAS 준수 서명이에요. 관할 국가별로 미리 조정되어 있으며 Profile.LoadProfile(spEmploymentXX)로 TsgcXAdESSigner에 불러와요.
| Profile | Country | Level | Hash | Timestamp | OCSP | Notes |
|---|---|---|---|---|---|---|
spEmploymentDE | Germany | B-LT | SHA-256 | Yes | Yes | 서면 계약에는 § 126a BGB에 따라 QES가 필요해요. |
spEmploymentIT | Italy | B-LT | SHA-256 | Yes | Yes | FEQ 적격 서명이며, INPS 포털은 XAdES와 CAdES를 모두 처리해요. |
spEmploymentES | Spain | B-T | SHA-256 | Yes | No | AdES로 충분해요. SEPE / TGSS 포털은 FNMT 또는 DNIe가 필요해요. |
spEmploymentFR | France | B-T | SHA-256 | Yes | No | AdES도 괜찮지만, DSP2 / RGS 하의 원격 서명에는 QES를 권장해요. |
spEmploymentAT | Austria | B-LT | SHA-256 | Yes | Yes | Handy-Signatur / ID Austria를 통한 QES가 일반적이에요. |
spEmploymentBE | Belgium | B-LT | SHA-256 | Yes | Yes | eID 카드(BeID)를 통한 QES예요. |
spEmploymentPT | Portugal | B-LT | SHA-256 | Yes | Yes | Cartão do Cidadão / Chave Móvel Digital을 통한 QES예요. |
spEmploymentNL | Netherlands | B-T | SHA-256 | Yes | No | AdES가 일반적으로 허용되며, 일부 HR 포털(UWV)에는 QES가 필요해요. |
spEmploymentPL | Poland | B-T | SHA-256 | Yes | No | 계약이 ZUS / PUE로 제출되는 경우 Profil Zaufany 또는 적격 인증서를 통한 QES예요. |
전체 검증 파이프라인과 EU 신뢰 목록 통합, 표준화된 ETSI TS 119 102-2 XML 검증 보고서를 제공해요. EU 노동 법원과 공공 행정 검증기가 인정하는 서명 유효성의 법적 증거예요.
TsgcSignatureVerifier는 전체 파이프라인을 다뤄요. 다이제스트 검사, RSA / ECDSA 서명 검증, 인증서 체인 검증, OCSP 폐지 확인, 장기 검증(LTV)을 위한 내장 RevocationValues, SignedProperties의 Id 기반 조각 조회를 지원해요.
TsgcEUTrustList는 ETSI TS 119 612 신뢰 목록의 목록(List of Trusted Lists)과 회원국별 신뢰 목록 약 31개를 파싱해요. 실시간 EU 레지스트리와 대조해 모든 X.509 인증서가 eIDAS 적격인지 분류할 수 있어요. 망 분리 환경을 위한 오프라인 모드 캐싱도 지원해요.
검증할 때마다 표준화된 XML 검증 보고서(v1.2.1)를 생성해요. EU 노동 법원과 공공 행정 검증기가 서명 유효성의 법적 증거로 인정하는 형식이에요.
TsgcTSAClient는 모든 RFC 3161 타임스탬프 기관에 연결해요. 서명을 B-B에서 B-T, B-LT, B-LTA로 올려, 서명 인증서가 만료된 뒤에도 오랫동안 검증할 수 있어요.
TsgcOCSPClient는 RFC 6960 Online Certificate Status Protocol 확인을 수행해요. 실시간 폐지 확인을 하며, OCSP 응답을 B-LT 서명에 포함시켜 응답기가 나중에 오프라인이 되어도 문서를 계속 검증할 수 있어요.
TsgcX509Certificate는 온라인 디코더가 표시하는 모든 필드를 노출해요: 키 크기, 알고리즘 이름, 일련번호(콜론 및 십진수), RFC 2253 / LDAP 고유 이름, 인증서 정책, 키 식별자, SHA-1 / SHA-256 / MD5 지문, SubjectPublicKeyInfo SHA-256 핀이에요. 발급자 서명을 암호학적으로 검증하고(RSA 및 ECDSA), AIA caIssuers URL에서 CA를 확인하며, CheckCertificateAuto를 통해 자동 OCSP 확인을 실행해요.
일관된 XML 서명 처리를 위한 Inclusive C14N(xml-c14n11)과 Exclusive C14N(xml-exc-c14n)을 지원해요. 각 국가 프로파일은 해당 규제 기관이 요구하는 정규화 방식을 선택해요.
Windows에서는 Windows CNG / BCrypt 암호화를, Linux64, macOS, iOS, Android에서는 순수 Pascal 엔진을 사용해요. OpenSSL DLL이 필요 없어요. 암호화된 PKCS#8 PEM을 위해 PBES2 / PBKDF2 / AES-CBC를 네이티브로 지원해요. 네트워크 작업은 Windows에서 WinHTTP를, 그 외 플랫폼에서는 Delphi RTL HTTP 클라이언트를 사용해요.
Delphi 7부터 RAD Studio 13까지 모든 Delphi 컴파일러와 C++Builder를 지원해요. 최신 유닛은 구형 호환을 위해 보호돼 있어요(예: TsgcASiCContainer는 D2010 이상의 제네릭이 필요하며, D7에서는 빈 유닛으로 문제없이 컴파일돼요).
대응하는 C# 포트가 .NET Framework 2.0–4.8, .NET Core, .NET 5–9, .NET Standard를 지원해요. Tsgc* 클래스 이름과 API 구성이 Delphi 라이브러리와 같아요.
모든 라이선스에 전체 소스가 포함돼요. 직접 살펴보고, 맞춤 설정하고, 감사하고, 확장할 수 있어요. 컴포넌트 클래스 이름은 디자인 타임 IDE 통합을 위해 등록돼 있어요.
모든 X.509 / CRL / OCSP / TSA 타임스탬프는 RFC 5280, RFC 3161, RFC 6960에 맞춰 UTC TDateTime 값으로 저장돼요. 현지 시간 변환은 각 컴포넌트의 *Local 속성으로 할 수 있어요.
바이너리를 무료로 재배포할 수 있어요. 문서당 요금이나 배포당 라이선스 없이 원하는 만큼 문서에 서명할 수 있어요.
spFatturaPA, 폴란드는 spKSeF로 전환하세요
// Sign Spanish VeriFactu invoice
var
vKeyProvider: TsgcPFXKeyProvider;
vSigner: TsgcDocumentSigner;
begin
vKeyProvider := TsgcPFXKeyProvider.Create(nil);
try
vKeyProvider.FileName := 'certificate.pfx';
vKeyProvider.Password := 'secret';
vKeyProvider.LoadFromFile;
vSigner := TsgcDocumentSigner.Create(nil);
try
vSigner.KeyProvider := vKeyProvider;
vSigner.Profile := spVeriFactu;
memoSigned.Text := vSigner.SignXML(memoXML.Text);
finally
vSigner.Free;
end;
finally
vKeyProvider.Free;
end;
end;
// Authenticode-sign with Azure Trusted Signing
var
vKeyProvider: TsgcAzureTrustedSigningProvider;
vSigner: TsgcAuthenticodeSigner;
begin
vKeyProvider := TsgcAzureTrustedSigningProvider.Create(nil);
vSigner := TsgcAuthenticodeSigner.Create(nil);
try
vKeyProvider.TenantId := '00000000-0000-0000-0000-000000000000';
vKeyProvider.ClientId := '11111111-1111-1111-1111-111111111111';
vKeyProvider.ClientSecret := 'my-client-secret';
vKeyProvider.AccountName := 'my-trusted-signing-account';
vKeyProvider.CertificateProfileName := 'public-trust';
vKeyProvider.Endpoint := 'https://eus.codesigning.azure.net';
vKeyProvider.Connect;
vSigner.KeyProvider := vKeyProvider;
vSigner.Level := alBES; // alT additionally requires a TSAClient
vSigner.SignFile('myapp.exe', 'myapp-signed.exe');
finally
vSigner.Free;
vKeyProvider.Free;
end;
end;
// PAdES-T with visible signature appearance
var
vKeyProvider: TsgcWindowsCertStoreProvider;
vSigner: TsgcPAdESSigner;
vTSA: TsgcTSAClient;
begin
vKeyProvider := TsgcWindowsCertStoreProvider.Create(nil);
vSigner := TsgcPAdESSigner.Create(nil);
vTSA := TsgcTSAClient.Create(nil);
try
vKeyProvider.StoreName := 'MY';
vKeyProvider.StoreLocation := cslCurrentUser;
vKeyProvider.SelectCertificateBySubject('Acme Corp');
vTSA.URL := 'https://freetsa.org/tsr';
vSigner.KeyProvider := vKeyProvider;
vSigner.TSAClient := vTSA;
vSigner.Reason := 'Approved';
vSigner.Location := 'Madrid, Spain';
vSigner.VisibleSignature.Enabled := True;
vSigner.SignPDFFile('contract.pdf', 'contract-signed.pdf');
finally
vTSA.Free;
vSigner.Free;
vKeyProvider.Free;
end;
end;