Ana içeriğe geç

İmza Formatları ve Doğrulama

Dosya imzalama sisteminde süreç tipine göre farklı imza formatları kullanılır. Bu bölüm her formatın ne olduğunu, ne zaman üretildiğini ve nasıl doğrulanacağını açıklar.


İmzalama Sistemi Hakkında

Üretilen çıktının ne olacağı (imzalı PDF, container, onay dosyası, yalnızca kimlik kanıtı vb.) iki şeye göre belirlenir: sürecin süreç tipi (processType) ve süreçteki imzacılara atanan imzalama türü (signatureType).

Süreç Tipi Ne yapar Kullanılabilen imzalama türleri Sonuç
BELGE_IMZALAMA (varsayılan) Tek bir PDF, imzacılar tarafından sırayla imzalanır Tümü (EIMZA, MOBILE_IMZA, TCKK_*, SMSOTP_TIMESTAMP, EMAIL_TIMESTAMP) aşağıya bakın
DIJITAL_ONAY Bir işlem/metin kullanıcıya onaylatılır — belge imzalanmaz, metin onaylanır OTP/e-posta/TCKK tabanlı onay yöntemleri Onay dosyası üretilir ve onaylanan metne bağlanır
DOSYA_IMZALAMA Birden fazla dosya tek bir container altında toplanıp tek imza ile imzalanır Yalnızca EIMZA, MOBILE_IMZA (PKI tabanlı) ETSI TS 102 918 uyumlu .asice container
DIJITAL_KIMLIK_DOGRULAMA Süreçte imzalama/onaylama yapılmaz — yalnızca imzacı bilgisi (TCKK NFC + yüz/video) doğrulanır TCKK tabanlı kimlik doğrulama akışları (TCKK_ONBOARDING vb.) Doğrulama kanıtı (evidence) üretilir; gerçek bir imza/onay dosyası oluşmaz

Detaylı processType alan açıklamaları için bkz. Süreç API – Süreç Tipleri.

BELGE_IMZALAMA içinde, imzacıya atanan signatureType'a göre PDF iki farklı şekilde işlenir:

  • PKI tabanlı (EIMZA, MOBILE_IMZA): PDF doğrudan PAdES formatında imzalanır — imza PDF'in içine gömülür, zaman damgalı ve arşiv (LTV) özelliklidir. Ayrı bir kanıt dosyası oluşmaz; PDF'in kendisi zaten imzalı halidir.
  • Kimlik/OTP tabanlı (TCKK_TIMESTAMP, TCKK_FACE_TIMESTAMP, TCKK_ONBOARDING, SMSOTP_TIMESTAMP, EMAIL_TIMESTAMP): Bu yöntemler nitelikli elektronik imza sertifikası kullanmaz. PDF yalnızca zaman damgası ile mühürlenir; kimlik doğrulama sürecinin kanıtı ise ayrı bir JAdES dosyası olarak (EVIDENCE tipinde) saklanır.

Formatlar

Format Uzantı Ne zaman üretilir Açıklama
PAdES .pdf BELGE_IMZALAMA, tek PDF'in E-İmza/Mobil İmza ile imzalanması İmza, PDF dosyasının içine gömülür (embedded). Dosyanın kendisi zaten imzalı halidir, ayrı bir imza dosyası yoktur.
CAdES .p7s PDF olmayan tek bir dosyanın (docx, xml vb.) imzalanması Ayrık (detached) imza — orijinal dosya değişmez, imza .p7s olarak ayrı kaydedilir. Doğrulamak için hem orijinal dosya hem .p7s gerekir.
ASiC-E .asice DOSYA_IMZALAMA — bir imzacının süreçteki tüm dosyaları tek seferde imzalaması ETSI TS 102 918 uyumlu ZIP container. İçinde: orijinal dosyalar + process-metadata.json + ASiCManifest.xml (her dosyanın SHA-256'sı) + META-INF/signature001.p7s (manifest'in CAdES imzası). Kendi kendine yeten kanıt paketi — dış bir doğrulayıcı (EU DSS, TÜBİTAK İmzager) sadece bu tek dosyayla hem dosya bütünlüğünü hem imzayı doğrulayabilir.
JAdES .jades OTP/SMS/Email doğrulama, TCKK NFC kanıtları Gerçek bir belge imzası değil — kimlik doğrulama kanıtını (evidence) mühürler. Task'ın signatureStoredFile'ına değil, ayrı EVIDENCE tipinde kaydedilir.

Önemli: DOSYA_IMZALAMA sürecinde her imzacı kendi ayrı .asice'ını üretir — 3 imzacı varsa 3 ayrı .asice dosyası oluşur, aynı içerik (belgeler) her birine ayrı ayrı paketlenip imzalanır. Tek bir container'da birden fazla imzacının imzası birleştirilmez.

DOSYA_IMZALAMA yalnızca E-İmza ve Mobil İmza ile çalışır — OTP/NFC gibi PKI tabanlı olmayan yöntemler bu süreç tipinde reddedilir, çünkü ASiC-E manifest imzası gerçek bir sertifika + ham imza gerektirir.

ASiC-E = Container Bazlı İmzalama

DOSYA_IMZALAMA sürecinde tekil dosyalar ayrı ayrı değil, tek bir container altında toplanıp birlikte imzalanır. Üretilen .asice dosyası aslında bir ZIP arşividir — uzantısını .zip olarak değiştirdiğinizde içeriğini (orijinal dosyalar, process-metadata.json, ASiCManifest.xml, META-INF/signature001.p7s) doğrudan görüntüleyebilirsiniz. Bütünlüğünü ve imzasını doğrulamak için ise dosyayı değiştirmeden Dijital Belge'nin doğrulama uç noktalarını (bkz. Doğrulama Endpoint'leri) kullanmanız gerekir.


Doğrulama Endpoint'leri

Endpoint Yetki Kapsam
POST /files/verify Yok (herkese açık) Herhangi bir yüklenen dosyayı (PDF/.asice) tür otomatik algılayarak doğrular
GET /external/process-instances/{processId}/document/{documentId}/tasks/{taskId}/signature/verify API-key, document:read Task bazlı doğrulama
GET /external/process-instances/{processId}/signers/{signerId}/signature/verify API-key, document:read İmzacı bazlı doğrulama (documentId/taskId bilmeye gerek yok)

Tüm doğrulama uç noktaları aynı yanıt şemasını (DocumentVerificationResultDto) kullanır — detectedType (PDF/ASICE), valid, message, ve türe göre pdfSignatures[] ya da asice{ signatures[], files[], allFilesMatch }.

Alan Tip Açıklama
detectedType string Algılanan dosya türü: PDF veya ASICE
valid boolean İmza(lar) geçerli mi
message string Doğrulama sonucunu özetleyen mesaj
pdfSignatures array detectedType: PDF iken doldurulur — PDF içindeki imza(lar)ın listesi
asice object detectedType: ASICE iken doldurulur — signatures[], files[], allFilesMatch alanlarını içerir

Task Bazlı Doğrulama

Belirli bir imzalama görevinin (task) imza dosyasını doğrular. taskId, dökümana imzacı eklerken dönen id alanıyla aynıdır.

Scope: document:read

İstek

GET {baseURL}/process-instances/{processId}/document/{documentId}/tasks/{taskId}/signature/verify

Path Parameters:

Parametre Tip Açıklama
processId number Sürecin ID'si
documentId number Dökümanın ID'si
taskId number İmzalama görevinin (imzacının) ID'si

Örnek cURL

curl -X GET https://app.dijitalbelge.com/api/external/process-instances/147/document/7203/tasks/5/signature/verify \
  -H "X-Client-Id: app_xxxxx" \
  -H "X-Client-Secret: secret_xxxxx"

İmzacı Bazlı Doğrulama

Task veya döküman ID'sini bilmeye gerek kalmadan, doğrudan imzacı ID'si üzerinden imza doğrulaması yapar.

Scope: document:read

İstek

GET {baseURL}/process-instances/{processId}/signers/{signerId}/signature/verify

Path Parameters:

Parametre Tip Açıklama
processId number Sürecin ID'si
signerId number İmzacının ID'si

Örnek cURL

curl -X GET https://app.dijitalbelge.com/api/external/process-instances/147/signers/138/signature/verify \
  -H "X-Client-Id: app_xxxxx" \
  -H "X-Client-Secret: secret_xxxxx"