簡體   English   中英

如何解密和驗證使用SHA256withRSA標准簽名的簽名?

[英]How do I decrypt and verify a signature signed with SHA256withRSA standard?

所以我面臨的問題是我正在向服務器發出請求,而服務器正在通過webhooks進行響應->此通知可能需要一段時間才能返回。 這就是為什么每次收到響應時都需要驗證在響應身份驗證標頭中發送的簽名的原因。

他們說產生簽名的方式是:sign(apikey + nonce + timestamp + transactionid)

現在,顯然我有了apikey,但是我沒有時間戳,nonce和transactionId來驗證簽名是否正確。 我不明白,那可以解決嗎?

無論如何,他們說他們使用SHA256withRSA(OID:1.2.840.113549.1.1.11)標准對其進行簽名,因此我必須使用同一事物對其進行解密。 他們給了我他們的字符串公鑰,沒有別的(沒有證書)。 公用密鑰的格式為:

-----BEGIN PUBLIC KEY-----
<public key>
-----END PUBLIC KEY-----

我沒有在C#中找到任何針對此問題的開箱即用的解決方案,因為我不能僅使用RSA。 我該怎么做才能解密他們的簽名並驗證它是真的?

數據應包含您要查找的工件。 簽名不加密數據,而是通常將其附加(通常附加)到數據上。 盡管未對數據進行加密(通過簽名生成過程),但是當然可以對它進行編碼 ,這意味着您可能必須先對數據進行解碼(例如base 64)。 然后,簽名位於數據的規范二進制表示之上。

因此,一般而言,要驗證簽名:

  • 解碼和匯總數據
  • 解碼簽名
  • 對數據進行正確的二進制表示
  • 散列二進制表示形式(通常是簽名驗證功能的一部分,例如"SHA256withRSA" ),最后
  • 驗證簽名。

除了驗證簽名外,您可能還需要執行簽名驗證 通常,簽名驗證包括以下內容:

  • 驗證以前沒有使用過隨機數(防止重放攻擊);
  • 驗證時間戳是否在一定范圍內。

但是,如果可能的話,您應該讓圖書館來處理。 但是,請檢查是否確實進行了驗證,並且驗證檢查是否有用以及是否已執行。

如果使用PEM(就像顯示的公共密鑰一樣),則可能是使用CMS(加密消息語法)掩埋了數據和簽名。 這是二進制容器格式 如果是這樣,那么您肯定需要CMS庫,因為解析消息結構需要大量的知識和實踐。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM