2010-09-03 42 views
2

有一個包含有以下隱[0]標籤的一組數據的X.509證書:DER編碼 - 我如何隱含的標籤轉換爲明確的標籤

A0 81 C6 (value)... 

而且我從這個摘錄標準文件:

隱式[0]標籤不用於 DER編碼,而使用顯式 SET標籤。也就是說,EXPLICIT SET OF標記的編碼 而不是IMPLICIT [0]標記, 務必與長度 和值的內容八位字節一起包含。

我已經做了很多四處搜尋,但我無法弄清楚標準究竟是在呼喚什麼。我正在尋找一些澄清。

編輯: 這裏是我以下的標準:http://tools.ietf.org/html/rfc3852

我想驗證X.509簽名,我需要計算的消息摘要來做到這一點。此證書包含SignerInfo類型中的可選SignedAttributes。我散列了已簽名的內容並驗證了SignedAttributes中的消息摘要是否正確。該標準指出,如果SignedAttributes存在,則應對其進行散列和加密以創建證書的簽名。該標準還指出,應如原始問題中所討論的那樣更改SignedAttributes的標籤。

這裏是ASN.1語法爲個SignerInfo:

SignerInfo ::= SEQUENCE { 
     version CMSVersion, 
     sid SignerIdentifier, 
     digestAlgorithm DigestAlgorithmIdentifier, 
     signedAttrs [0] IMPLICIT SignedAttributes OPTIONAL, 
     signatureAlgorithm SignatureAlgorithmIdentifier, 
     signature SignatureValue, 
     unsignedAttrs [1] IMPLICIT UnsignedAttributes OPTIONAL } 

SignerIdentifier ::= CHOICE { 
     issuerAndSerialNumber IssuerAndSerialNumber, 
     subjectKeyIdentifier [0] SubjectKeyIdentifier } 

SignedAttributes ::= SET SIZE (1..MAX) OF Attribute 

UnsignedAttributes ::= SET SIZE (1..MAX) OF Attribute 

Attribute ::= SEQUENCE { 
     attrType OBJECT IDENTIFIER, 
     attrValues SET OF AttributeValue } 

AttributeValue ::= ANY 

SignatureValue ::= OCTET STRING 
+0

它是否在特定的擴展名中? – Bruno 2010-09-03 18:33:05

+0

SignerInfo的SignedAttributes字段。 這是我遵循的標準 - http://tools.ietf.org/html/rfc3852#section-5。4 所以我試圖驗證這個X.509證書上的簽名,我需要獲得從證書籤名的數據。此證書包含可選的SignedAttributes字段,根據標準,對整個字段(標記,長度和值)進行散列和加密以創建簽名。但是,當我嘗試使用此值驗證簽名時,它失敗。我想我需要以某種方式更改標籤。 – Ben 2010-09-03 18:54:41

回答

5

我不知道如何解釋這一評論。你在閱讀什麼標準?你有結構的ASN.1語法嗎?

顯式標籤就像是一些基礎類型的包裝。例如,基礎類型可能是一個SEQUENCE。它使用通用SEQUENCE標籤0x30進行編碼。但是爲了避免在封閉結構中解釋SEQUENCE的含義,它被包裝在一個具有上下文特定標籤的EXPLICIT結構中。從上面的代碼片斷中不清楚標籤是什麼。

我猜他們的意思是什麼樣的[0] EXPLICIT SET OF foo,這(使用原來的問題作爲值爲例)語法會被編碼爲(十六進制)A0 81 C9 31 81 C6 (value) ...

注意,被標記的原始值與上下文相關的零(A0)已被重新標記爲通用SET OF(31)。


好了,在這種情況下,我認爲他們的意思是,當你簽署的屬性,而不是使用隱式標籤的簽名,就是標籤的設定。如果這就是他們的意思,投入「顯而易見」確實會淹沒水域,但無論如何。如果是這種情況,那麼編碼將簡單地爲31 81 C6 (value) ...(用通用SET OF 0x31替換上下文特定的0xA0)。

+0

編輯回答你的一些問題。我會嘗試你的建議,謝謝。 – Ben 2010-09-03 19:09:28

+0

@Ben - 查看我的更新。我想我的第一個猜測是基地外。 – erickson 2010-09-03 19:27:03

+0

將A0更改爲31是我的第一個想法。我試過了,無法通過驗證。我認爲將A0更改爲31是正確的,因爲它具有邏輯意義,所以我可能會遇到不同的問題。 – Ben 2010-09-03 19:45:09