1. 程式人生 > >PDF格式分析(四十六)Interactive Forms 互動式表單—— Signature Fields 簽名

PDF格式分析(四十六)Interactive Forms 互動式表單—— Signature Fields 簽名

簽名欄位(PDF 1.3)是包含數字簽名的表單欄位(請參見“數字簽名”)。 表示簽名欄位的欄位字典在表1中列出的附加條目。欄位型別(FT)應為Sig,欄位值(V)(如果存在)是簽名字典,是包含簽名和相關的各種屬性。

填寫(簽名)簽名欄位需要至少更新V條目,並且通常還更新相關聯的 widget 註釋的AP條目。 匯出簽名欄位通常會匯出T,V和AP條目。

與其他欄位一樣,簽名欄位可以由widget註釋字典來描述。 這種字典中的註釋矩形(Rect)給出了其頁面上的位置。 如果不打算顯示的簽名欄位,可以將註釋矩形的高度和寬度設定為零。 如果F條目的Hidden位或NoView位為真,則簽名為不可見。

簽名欄位的widget註釋的外觀字典(AP),定義了簽名欄位在頁面上的可視外觀。

表1 簽名欄位的特定條目

Key Type Value
Lock dictionary (可選;應為間接引用; PDF 1.5)簽名欄位鎖定字典,指定在簽名此簽名欄位時,應鎖定的一組表單欄位。 表2 列出了此詞典中的條目。
SV dictionary (可選;應為間接引用; PDF 1.5)種子值字典(參見表3),包含約束應用於此欄位的簽名屬性的資訊。

表2 簽名欄位鎖定字典中的條目

Key Type Value
Type name (可選)如果存在,則應為SigFieldLock。
Action name (必需)與Fields一起表示應鎖定的欄位集的名稱。 值應為以下之一:All:文件中的所有欄位;Include:Fields中指定的所有欄位;Exclude:除“Fields”中指定的欄位外的所有欄位。
Fields array (如果Action的值為Include或Exclude,則為必需)包含欄位名稱的文字字串陣列。

簽名欄位字典中的SV條目的值是種子值字典,提供將在應用簽名時使用的約束資訊。 其Ff條目指定是否應尊重字典中的其他條目或僅僅是推薦。

表3 簽名欄位種子值字典中的條目

Key Type Value
Type name (可選)如果存在,則應為SV。
Ff integer (可選)一組位標誌,指定此字典中特定條目的解釋。 標誌的值為1表示關聯的條目是必需的約束。 值0表示關聯的條目是可選約束。 bit 位置為1(Filter); 2(SubFilter); 3(V); 4(Reasons); 5(LegalAttestation); 6(AddRevInfo);和7(DigestMethod)。 預設值:0。
Filter name (可選)用於簽名的簽名處理程式。 從PDF 1.7開始,如果指定了Filter,並且Ff條目指示此條目是必需的約束,則在簽名時應使用此條目指定的簽名處理程式; 否則,不得簽名。 如果Ff指示這是可選約束,則可以使用此處理程式(如果可用)。 如果它不可用,則可以使用不同的處理程式。
SubFilter array (可選)一個名稱陣列,指示簽名時要使用的編碼。陣列中與簽名處理程式支援的編碼匹配的第一個名稱應該是實際用於簽名的編碼。如果指定了SubFilter並且Ff條目指示此條目是必需的約束,則在簽名時應使用第一個匹配的編碼; 否則,不得簽字。 如果Ff表明這是一個可選約束,那麼如果可用,則應使用第一個匹配編碼。 如果沒有,則可以使用不同的編碼。
DigestMethod array (可選; PDF 1.7)一個名稱陣列,表示簽名時可使用的摘要演算法。 該值應為SHA1,SHA256,SHA384,SHA512和RIPEMD160之一。 預設值是implementation-specific。此屬性僅在數字憑證簽名包含RSA公鑰/私鑰時適用。 如果它包含DSA公鑰/私鑰,則摘要演算法始終為SHA1,並且應忽略此屬性。
V real (可選)簽名欄位種子值字典解析器所需的最低能力。 值為1表示:解析器應能夠識別PDF 1.5檔案中的所有種子值字典條目。 值為2表示:應能夠識別指定的所有種子值字典條目.Ff條目指示是否將其視為必需約束。
Cert dictionary (可選)證書種子值字典(參見表4),其中包含有關簽名時,應使用的證書特徵的資訊。
Reasons array (可選)一個文字字串陣列,用於指定簽署文件的可能原因。 如果指定,則此條目中提供的原因將替換合格產品使用的原因。如果提供了Reasons陣列,並且Ff條目指示Reasons是必需的約束,則陣列中的一個原因應該用於簽名字典; 否則,不得簽字。 如果Ff條目指示Reasons是可選約束,則可以選擇陣列中的一個原因或者可以提供自定義原因。如果省略Reasons陣列或陣列中只有一個句號(2Eh)字串,並且Ff條目指示Reasons是必需約束,則應簽名字典中的Reason條目應該被忽略。
MDP dictionary (可選; PDF 1.6)只包含單個條目的字典,其鍵為P,其值為0到3之間的整數。值 0 將簽名定義為作者簽名(請參見“數字簽名”)。 值1到3應用於認證簽名,並對應於DocMDP轉換引數字典中的P值。如果此MDP金鑰不存在,或MDP字典不包含P條目,則不應定義關於簽名型別或其許可權的規則。
TimeStamp dictionary (可選; PDF 1.6)包含兩個條目的時間戳字典:URL:一個ASCII字串,指定時間戳伺服器的URL,提供符合RFC 3161,Internet X.509公鑰基礎結構時間戳協議的時間戳。Ff:一個整數,其值為1(簽名應具有時間戳)或0(簽名不需要時間戳)。 預設值:0。
LegalAttestation array (可選; PDF 1.6)一個法律證明的文字字串陣列(參見“法律內容證明”)。 Ff條目中相應標誌的值指示這是否是必需約束。
AddRevInfo boolean (可選; PDF 1.7)表示是否應進行撤銷檢查的標誌。預設值:false

對於不存在的可選鍵,在簽名時不應對該屬性的簽名處理程式施加約束。

表4 證書種子值字典中的條目

Key Type Value
SubjectDN array of dictionaries (可選; PDF 1.7)一個字典陣列,每個字典都指定一個主題專有名稱(DN),該名稱應出現在證書中,以便籤名可以接受。Ff條目中相應標誌的值指示此條目是否是必需約束。
KeyUsage array of ASCII strings (可選; PDF 1.7)ASCII字串陣列,其中每個字串指定一個可接受的金鑰用法擴充套件,該擴充套件應出現在簽名證書中。多個字串指定一系列可接受的金鑰用法擴充套件。 RFC 3280中描述了金鑰用法擴充套件。詳情下面有描述。
Issuer array (可選)一個位元組字串陣列,包含可接受發行者證書(DER-encoded X.509v3)。 如果簽名者的證書指定任意的發行人(直接或間接),則該證書應被視為可接受簽字。 Ff條目中相應標誌的值指示這是否是必需約束。 此陣列可能包含自簽名證書。
OID array (可選)一個包含證書策略的物件識別符號(OID)的位元組字串陣列,該證書策略應出現在簽名證書中。例:(2.16.840.1.113733.1.7.1.1)。僅當Issuer的值不為空時才使用此欄位。 RFC 3280中描述了證書策略擴充套件。 Ff條目中相應標誌的值指示這是否是必需約束。
URL ASCII string (可選)URL,其用途應由URLType條目定義。
URLType name (可選; PDF 1.7)表示URL條目用法的名稱。以下值指定有效的標準用法:1、Browser - URL引用應在Web瀏覽器中顯示的內容,以便在未找到匹配的憑據時註冊新憑據。 對於此用法,應忽略Ff屬性的URL位;2、第三方可以使用自己的屬性值擴充套件此屬性。預設值為Browser。

KeyUsage

(可選; PDF 1.7)ASCII字串陣列,其中每個字串指定一個可接受的金鑰用法擴充套件,該擴充套件應出現在簽名證書中。多個字串指定一系列可接受的金鑰用法擴充套件。 RFC 3280中描述了金鑰用法擴充套件。 字串中的每個字元表示金鑰用法型別,其中字元的順序表示它表示的金鑰用法擴充套件。以下字串中的第一個到第九個字元(從左到右)表示“鍵 - 用法擴充套件”所需的值: 1- digitalSignature 2- non-Repudiation 3- keyEncipherment 4- dataEncipherment 5- keyAgreement 6- keyCertSign 7- cRLSign 8- encipherOnly 9- decipherOnly 任何缺少或非下列值之一的字元都應視為“X”: 0-不應設定相應的金鑰用法。 1-應設定相應的金鑰用法。 X-相應金鑰用法的狀態無關緊要。 示例1:字串值“1”和“1XXXXXXXX”表示設定金鑰用法型別digitalSignature,並且所有其他金鑰用法型別的狀態無關緊要的設定。 Ff條目中相應標誌的值指示這是否是必需約束。