Coerența algoritmului de digest CMS
HotPDF diagnostichează identificatorii de algoritm CMS incoerenți înainte de a citi intervalele de document semnate, de a genera hash-uri de conținut, de a construi lanțuri de certificate sau de a invoca un furnizor de semnături
Verificări de coerență
SignerInfo.digestAlgorithm curent trebuie să fie prezent în setul SignedData.digestAlgorithms care îl conține, în timp ce algoritmii suplimentari necorelați rămân permisi pentru containere interoperabile cu mai mulți semnatari
OID-urile de semnătură RSA PKCS#1 v1.5 și ECDSA specifice digestului, precum și hash-ul explicit din parametrii RSA-PSS, trebuie să selecteze același digest ca SignerInfo.digestAlgorithm
Când atributul semnat CMSAlgorithmProtection din RFC 6211 este prezent, trebuie să apară o singură dată cu o singură valoare, iar valorile protejate AlgorithmIdentifier de digest și semnătură trebuie să corespundă câmpurilor reale din SignerInfo
Parametrii absenți și DER NULL se compară ca echivalenți pentru identificatorii de algoritm fără parametri; ceilalți parametri se compară exact, astfel încât mecanismele de semnătură parametrizate nu pot fi normalizate silențios
Rezultat interpretabil de mașină
HPDFParseCMSSignature păstrează metadatele analizate cu succes, dar setează THPDFSignatureInfo.Status la svDigestAlgorithmMismatch când o verificare de coerență eșuează
Verificarea returnează svDigestAlgorithmMismatch, rapoartele de validare folosesc vfcDigestAlgorithmMismatch, iar JSON emite digestAlgorithmMismatch fără a reduce condiția la CMS malformat, algoritm nesuportat sau nepotrivire a digestului de conținut
THPDFSignatureInfo.DigestAlgorithmOID înregistrează OID-ul digestului semnatarului, iar THPDFSignatureInfo.DigestConsistencyIssue selectează una dintre următoarele cauze
dciSignerDigestNotDeclared— digestul cunoscut al semnatarului lipsește din setul exterior de digestedciSignatureDigestMismatch— un mecanism de semnătură fix sau parametrizat selectează alt digestdciAlgorithmProtectionDigestMismatch— identificatorul protejat de digest diferă de identificatorul digestului semnataruluidciAlgorithmProtectionSignatureMismatch— identificatorul protejat de semnătură diferă de identificatorul semnăturii semnatarului
Obiectele JSON ale semnatarului expun aceleași informații ca digestAlgorithmOID și digestConsistencyIssue, cu valorile signerDigestNotDeclared, signatureDigestMismatch, algorithmProtectionDigestMismatch sau algorithmProtectionSignatureMismatch
Marcaje temporale și precedență
Marcajele temporale de document RFC 3161 și token-urile nesemnate de marcaj temporal al semnăturii folosesc aceleași verificări, iar valoarea lor THPDFTimestampInfo.DigestConsistencyIssue identifică un container CMS imbricat incoerent
Erorile structurale eșuează în continuare ca CMS malformat, digeste necunoscute ale semnatarului rămân nesuportate, iar prima problemă deterministă de coerență este reținută în ordinea container, protecție de algoritm, apoi mecanism de semnătură
Consultați furnizorii moderni de semnături și THotPDF.VerifyLoadedSignatureWithOptions pentru contractele de verificare ale furnizorului și ale documentului încărcat