Imza Formatlari (Signature Formats)¶
SDK Versiyon: 2.0 | Son Guncelleme: 2026-04-17
DigiMR SDK, Turkiye'deki nitelikli elektronik imza standartlarina uygun olarak dort temel imza formatini destekler: CAdES, PAdES, XAdES ve JAdES.
Not: Tum orneklerde
providerbirISigningProviderimplementasyonudur (SoftwareCertificateProvider, TokenSigningProvider, RemoteTokenSigningProvider, MobileSigningProvider).
CAdES (CMS Advanced Electronic Signatures)¶
- ETSI TS 319 122-1 / EN 319 122-1
- Binary format, her turlu dosya icin uygun
- Attached ve detached mod
CAdES Seviyeleri¶
| Seviye | Aciklama | Unsigned Attributes |
|---|---|---|
| B-B (BES) | Temel imza | - |
| B-T | Zaman damgali | signatureTimeStampToken |
| B-LT | Uzun sureli (LTV) | certValues, revocationValues |
| B-LTA | Arsiv | archiveTimestampV3 |
| ES-C | Sertifika referanslari | completeCertificateRefs, completeRevocationRefs |
| ES-X | Genisletilmis referanslar | sigAndRefsTimestamp |
CAdES Kullanim¶
// CAdES-BES (temel)
var parameters = new SignatureParameters
{
Format = SignatureFormat.CAdES,
Level = SignatureLevel.B_B
};
var result = await sdk.SignDataWithProviderAsync(data, provider, parameters);
// CAdES-T (zaman damgali)
parameters.Level = SignatureLevel.B_T;
parameters.TsaUrl = "http://tzd.kamusm.gov.tr";
CAdES Dogrulama¶
var verifier = new CAdESVerifier();
var result = verifier.Verify(cmsSignature);
// or detached:
var result = verifier.VerifyDetached(cmsSignature, originalContent);
CAdES Yukseltme (Upgrade)¶
var builder = new CAdESBuilder(timestampService, crlOcspService);
// B-B → B-T
var upgraded = await builder.AddTimestampAsync(cmsSignature, tsaUrl);
// B-T → B-LT
upgraded = await builder.AddValidationDataAsync(upgraded, chain);
// B-LT → B-LTA
upgraded = await builder.AddArchiveTimestampAsync(upgraded, tsaUrl);
Yukseltme siralamasi: B-B --> B-T --> B-LT --> B-LTA veya B-T --> ES-C --> ES-X
PAdES (PDF Advanced Electronic Signatures)¶
- ETSI TS 319 142 / EN 319 142
- PDF icine gomulu imza
- DSS (Document Security Store) destegi
- Gorunur ve gorunmez imza
PAdES Seviyeleri¶
| Seviye | Aciklama | Ek Ozellikler |
|---|---|---|
| B-B | Temel PDF imza | Imza alani + CMS |
| B-T | Zaman damgali | CMS icerisinde RFC 3161 |
| B-LT | Uzun sureli | DSS (sertifika, OCSP, CRL) |
| B-LTA | Arsiv | Belge zaman damgasi (ETSI.RFC3161) |
PAdES Kullanim¶
var parameters = new SignatureParameters
{
Format = SignatureFormat.PAdES,
Level = SignatureLevel.B_LT,
TsaUrl = "http://tzd.kamusm.gov.tr",
Reason = "Belge onayi",
Location = "Ankara"
};
var data = File.ReadAllBytes("document.pdf");
var result = await sdk.SignDataWithProviderAsync(data, provider, parameters);
Gorunur Imza (Visual Signature)¶
4 farkli mod desteklenir:
// Metin imza
parameters.VisualSignature = new VisualSignatureOptions
{
Mode = VisualSignatureMode.TextOnly,
Page = 1,
X = 100, Y = 100,
Width = 200, Height = 80,
Text = "Onaylayan: {signer}\nTarih: {date}"
};
// Resim imza
parameters.VisualSignature = new VisualSignatureOptions
{
Mode = VisualSignatureMode.ImageOnly,
SignatureImage = File.ReadAllBytes("signature.png"),
Page = 1,
X = 100, Y = 100, Width = 200, Height = 80
};
// Damga (Stamp)
parameters.VisualSignature = new VisualSignatureOptions
{
Mode = VisualSignatureMode.StampOnly,
StampText = "ONAYLANDI",
StampStyle = StampStyle.RoundedRectangle,
StampColor = "#2563eb"
};
Yer tutuculari: {signer} (imzaci CN), {date}, {reason}, {location}
PAdES Dogrulama¶
var pdfSigner = new PdfSigner(signatureService, timestampService, crlOcspService);
var result = pdfSigner.VerifyPdfSignatureDetailed(pdfData);
foreach (var sig in result.Signatures)
{
Console.WriteLine($"Alan: {sig.FieldName}");
Console.WriteLine($"Seviye: {sig.DetectedLevel}");
Console.WriteLine($"Gecerli: {sig.IntegrityValid}");
}
PAdES Yukseltme¶
var pdfSigner = new PdfSigner(signatureService, timestampService, crlOcspService);
var pars = new SignatureParameters { TsaUrl = tsaUrl };
// B-T --> B-LT (DSS ekleme)
var blt = await pdfSigner.UpgradeSignatureLevelAsync(signedPdfData, SignatureLevel.B_LT, pars);
// B-LT --> B-LTA (DocTimeStamp ekleme)
var blta = await pdfSigner.UpgradeSignatureLevelAsync(blt.SignedData!, SignatureLevel.B_LTA, pars);
XAdES (XML Advanced Electronic Signatures)¶
- ETSI EN 319 132
- XML belgeleri icin
- Enveloped ve detached mod
XAdES Seviyeleri¶
| Seviye | Aciklama | Ek Elementler |
|---|---|---|
| BES | Temel XML imza | SignedProperties (SigningTime, SigningCertificate) |
| T | Zaman damgali | SignatureTimeStamp |
| C | Tam referanslar | CompleteCertificateRefs, CompleteRevocationRefs |
| X (X_Type1 / X_Type2) | Referans zaman damgasi | SigAndRefsTimeStamp / RefsOnlyTimeStamp |
| XL | Uzun sureli | CertificateValues, RevocationValues |
| A | Arsiv | ArchiveTimeStamp (xades141 namespace) |
XAdES Kullanim¶
var builder = new XAdESBuilder(hashService, timestampService);
// Enveloped imza
var signedXml = await builder.SignEnvelopedAsync(xmlContent, provider);
// Detached imza
var signedXml = await builder.SignDetachedAsync(data, "document.pdf", provider);
XAdES Dogrulama¶
var verifier = new XAdESVerifier(hashService);
var result = verifier.Verify(signedXml);
Console.WriteLine($"Gecerli: {result.IsValid}");
Console.WriteLine($"Seviye: {result.DetectedLevel}");
XAdES Yukseltme¶
var upgradeService = new XAdESUpgradeService(hashService, timestampService, crlOcspService);
// Tek metod + hedef seviye (XAdESLevel); ara seviyeler otomatik uygulanir.
// BES --> T
signedXml = (await upgradeService.UpgradeAsync(signedXml, XAdESLevel.T, tsaUrl)).SignedXml;
// T --> XL (sertifika zinciri gerekir)
signedXml = (await upgradeService.UpgradeAsync(signedXml, XAdESLevel.XL, tsaUrl, chain)).SignedXml;
// XL --> A (arsiv zaman damgasi)
signedXml = (await upgradeService.UpgradeAsync(signedXml, XAdESLevel.A, tsaUrl, chain)).SignedXml;
JAdES (JSON Advanced Electronic Signatures)¶
- ETSI TS 119 182-1
- JSON/JWS tabanlI imza formati
- REST API ve web servisleri icin ideal
JAdES Seviyeleri¶
| Seviye | Aciklama |
|---|---|
| B-B | Temel JWS imza (JAdES Baseline) |
| B-T | Zaman damgali |
JAdES Kullanim¶
// JAdES imza olustur
var parameters = new SignatureParameters
{
Format = SignatureFormat.JAdES,
Level = SignatureLevel.B_B
};
var result = await sdk.SignJadesAsync(data, provider, parameters);
JAdES API¶
# JAdES imza olustur
curl -X POST http://localhost:7701/api/v1/jades/sign \
-H "Content-Type: application/json" \
-d '{
"dataBase64": "<base64 data>",
"level": "B_B",
"provider": { "type": "software", "certificateBase64": "...", "certificatePassword": "..." }
}'
# JAdES dogrulama
curl -X POST http://localhost:7701/api/v1/jades/verify \
-H "Content-Type: application/json" \
-d '{ "jwsBase64": "<base64 JWS>" }'
# JAdES yukseltme (B-B -> B-T)
curl -X POST http://localhost:7701/api/v1/jades/upgrade \
-H "Content-Type: application/json" \
-d '{ "jwsBase64": "<base64 JWS>", "tsaUrl": "http://tzd.kamusm.gov.tr" }'
ASiC Konteynerleri (ASiC Containers)¶
- ETSI TS 319 162
- ZIP tabanlI imza konteynerI
ASiC-S (Simple)¶
- Tek dosya + tek imza
- mimetype dosyasi ile baslar
var asicBuilder = new ASiCBuilder();
var container = await asicBuilder.CreateSimpleAsync(
documentBytes, "document.pdf", provider, parameters);
ASiC-E (Extended)¶
- Coklu dosya + manifest
- Manifest imzalanir
var files = new Dictionary<string, byte[]>
{
{ "contract.pdf", contractBytes },
{ "appendix.pdf", appendixBytes }
};
var container = await asicBuilder.CreateExtendedAsync(files, provider, parameters);
ASiC Dogrulama¶
var asicVerifier = new ASiCVerifier(cAdESVerifier);
var result = asicVerifier.Verify(containerBytes);
Console.WriteLine($"Tur: {result.ContainerType}"); // Simple veya Extended
Gelismis Ozellikler (Advanced Features)¶
Imzaci Rolu (Signer Role)¶
parameters.SignerRole = new SignerRoleAttribute
{
ClaimedRoles = new List<string> { "Mudir", "Onayci" }
};
Commitment Type¶
parameters.CommitmentType = new CommitmentTypeAttribute
{
Type = CommitmentTypeId.ProofOfApproval
};
Desteklenen turler: ProofOfApproval, ProofOfCreation, ProofOfDelivery
Signature Policy (EPES)¶
parameters.SignaturePolicy = new SignaturePolicy
{
PolicyId = "1.2.3.4.5",
PolicyUri = "http://policy.example.com",
PolicyDigestAlgorithm = "SHA256",
PolicyDigestValue = policyHash
};
Counter-Signature (Karsi Imza)¶
Mevcut bir imzanin uzerine ikinci bir imzacinin imzasi eklenir.
CMS yapisinda countersignature unsigned attribute olarak saklanir.
var counterSigner = new CounterSignatureBuilder();
var counterSigned = await counterSigner.AddCounterSignatureAsync(
originalCmsSignature, counterSignProvider, parameters);
Birlesik Dogrulama (Unified Validation)¶
Tum imza formatlarini otomatik algilayarak tek bir API ile dogrulama yapar.
var validationService = new UnifiedValidationService(
pdfSigner, cAdESVerifier, xAdESVerifier,
eypPackageService, eypV13PackageService);
var result = await validationService.ValidateAsync(fileBytes);
Console.WriteLine($"Format: {result.DocumentFormat}"); // PDF, CMS, XML, EYP, ASiC
Console.WriteLine($"Gecerli: {result.IsValid}");
foreach (var sig in result.Signatures)
{
Console.WriteLine($" Rol: {sig.Role}"); // Document, Timestamp, Seal
Console.WriteLine($" Seviye: {sig.Level}");
Console.WriteLine($" Gecerli: {sig.IsValid}");
}
Format Karsilastirmasi (Format Comparison)¶
| Ozellik | CAdES | PAdES | XAdES | JAdES |
|---|---|---|---|---|
| Dosya formati | Binary (DER) | XML | JSON (JWS) | |
| Uygun icerik | Her turlu dosya | Yalnizca PDF | XML belgeleri | REST API / Web |
| Gorunur imza | Hayir | Evet | Hayir | Hayir |
| Detached mod | Evet | Hayir (gomulu) | Evet | Evet |
| Arsiv destegi | B-LTA | B-LTA | A | - |
| DSS destegi | Hayir | Evet | Hayir | Hayir |
| ASiC uyumlulugu | Evet | Hayir | Evet | Hayir |
| E-fatura uygunlugu | Evet | Hayir | Evet | Hayir |
Hangi Formati Secmeliyim?¶
- PDF belgeleri --> PAdES (gorunur imza gerekiyorsa ozellikle)
- XML/e-fatura --> XAdES
- Genel dosyalar --> CAdES
- REST API / JSON veri --> JAdES
- Coklu dosya paketi --> ASiC-E (CAdES tabanli)
- Arsivleme --> B-LTA veya A seviyesi (tum formatlar)
- Uzun sureli dogrulama --> En az B-LT seviyesi
Algoritma Destegi¶
Hash Algoritmalari¶
| Algoritma | Boyut | Kullanim |
|---|---|---|
| SHA-256 | 256-bit | Varsayilan, tum formatlar |
| SHA-384 | 384-bit | EYP 2.0+ icin zorunlu, arsiv onerilen |
| SHA-512 | 512-bit | Yuksek guvenlik |
| SHA3-256 | 256-bit | Yeni nesil (Keccak tabanli) |
| SHA3-384 | 384-bit | Yeni nesil |
| SHA3-512 | 512-bit | Yeni nesil |
Not: SHA-1 imzalama icin yasaklidir (yalnizca eski belge dogrulamada kabul edilir).
Imza Algoritmalari¶
| Algoritma | Hash | Imza |
|---|---|---|
| RSA + SHA-256 | SHA-256 | RSA PKCS#1 v1.5 |
| RSA + SHA-384 | SHA-384 | RSA PKCS#1 v1.5 |
| RSA + SHA-512 | SHA-512 | RSA PKCS#1 v1.5 |
| ECDSA + SHA-256 | SHA-256 | ECDSA |
| ECDSA + SHA-384 | SHA-384 | ECDSA |
| ECDSA + SHA-512 | SHA-512 | ECDSA |
Oneri: Yeni imzalar icin en az SHA-256 kullanin. Arsiv amacli imzalarda SHA-384 veya SHA-512 tercih edilmelidir. SHA-3 ailesini gelecek-guvenli sistemlerde degerlendirin.