博客 / 詳情

返回

搞懂數字簽名與證書

前言

在之前的文章中,我們介紹了什麼是對稱加密什麼是非對稱加密,同時我們在文章中我們留下了一個疑問,那就是如何確認公鑰和數據就是對方的而不是偽造的,今天這篇文章我們就聊聊相關的技術,簽名與證書,非常有用,注意聽講哈

簽名

平時我們説的簽名更多是籤個名字,比如有個文件需要經過我的確認,我再確認後需要拿起筆簽上名字,證明這個文件是我已經同意了的。這裏的關鍵點就是筆跡。

那麼在數字世界中,如果我需要對方發送一個文件給我,我如何確認我所接收到的文件就是對方發送給我的而不是有人惡意偽造的呢?或者我該如何確認對方發送給我的文件不是經過有人篡改後的呢?

答案就是數字簽名,數字簽名使用的核心技術是哈希算法和非對稱加密,如果大家對非對稱加密不瞭解可以參考之前的文章

哈希算法(HASH)

本篇文章不對哈希算法做詳細的説明,只做一個簡單的介紹,讓大家知道什麼是哈希算法

所謂的哈希算法也稱為“散列函數”或“哈希函數”,聽名字是不是被嚇到了,其實它就是一種能夠輸入任意長度的數據,通過計算,轉換為一個固定長度字符串,這個轉換出的字符串被稱為哈希值、散列值或信息摘要,可以把它想象為一個數據的數字指紋

一個優秀的哈希算法具有以下幾個特徵

  1. 輸入相同的數據,無論什麼時候計算出的哈希值都必須是完全相同的
  2. 輸入數據哪怕僅發生極其微小的變化,哪怕是1個bit,輸出的哈希值都會發生巨大變化,不可預測的改變
  3. 無法從哈希值反向推導出原始數據,也就是單向性
  4. 幾乎不可能找到兩個不同的輸入具有相同的哈希值

數字簽名

數字簽名的作用就是讓別人相信內容沒有被改過和確實是來自指定的人,同時簽名者也無法抵賴説不是自己籤的名

有了哈希算法和非對稱加密我們就能夠實現數字簽名了

其實數字簽名的流程很簡單,可以分為以下幾步

  1. 對需要簽名的數據進行哈希運算,計算數據的哈希值
  2. 使用私鑰對哈希值進行加密

使用數字簽名也很簡單,進行確認簽名的流程叫做驗籤,可以分為以下幾步

  1. 從數據中提取簽名數據和內容
  2. 使用公鑰對簽名數據進行解密得到哈希值
  3. 使用相同的哈希算法計算內容的哈希值
  4. 對比計算出的哈希值和解密出的哈希值是否一致,一致代表驗籤成功

數字證書

剛剛説了數字簽名,那就有一個問題,驗籤時使用了公鑰,我又如何知道我所獲得的公鑰是正確的呢?這就是所謂的CA體系

數字證書也稱為公鑰證書,是一個電子文檔,它遵循國際標準(X.509),這個問的那個就像是一個數字世界的身份證一樣。

它的核心作用就是將一個公鑰與一個特定的實體(個人、組織)的身份信息綁定在一起,並由一個可信的第三方機構對這個綁定關係進行擔保和簽名

比如用駕照來類比數字證書:

要素 駕照 數字證書
持有者信息 姓名、地址、身份證號 主題:持有者的名稱、組織信息等
核心憑證 駕照號碼 公鑰:證書持有者的公鑰
頒發機構 車管所 證書頒發機構
機構印章 車管所的官方蓋章 頒發者的數字簽名:CA用自己的私鑰對證書內容進行簽名
有效期 簽發日期和到期時間 證書生效和失效的時間

你相信駕照上的信息,是因為你信任車管所這個權威機構,並且駕照上有它的防偽簽名和印章。

同樣,你相信一個數字證書裏的公鑰屬於某個人或組織是因為你信任證書的頒發機構,並且證書上有頒發機構的數字簽名

總結來説就是:假如我要將我的公鑰發送給對方,那我就找證書頒發機構,提供我的公鑰,讓證書頒發機構幫我進行簽名並製作證書,然後我將製作好的證書發送給對方。

對方拿到我的證書後需要進行驗籤,確認證書的頒發機構,那我們憑什麼就要信任頒發機構呢?答案就是不相 信,頒發機構又會有它的證書,頒發機構的證書是由更上層的頒發機構頒發的,而更上層的頒發機構又有更更上層的頒發機構頒發,這套體系叫做CA體系,這套證書叫做證書鏈,一直到最上層是根證書,根證書僅有幾個企業可以辦法,這些跟證書已經早早的保存在我們的設備中了,只需要進行一下確認就可以了

安全問題

好了簽名和證書已經為大家介紹完了,大家是不是已經覺的我們的程序只要使用了這套簽名和證書體系就很安全了呢?哈哈哈,別太自信,你想想如果有人通過逆向的手段,直接修改我們的程序,繞過了驗籤流程,那再安全的方案也沒有用啊

那怎麼辦呢?

程序加殼保護

現在我們已經有了足夠安全的保障體系了,那要防止的也就是我們的程序被其他人逆向分析或篡改,這時可以使用Virbox Protector工具,對我們的程序進行加殼保護,加殼時會使用混淆,虛擬化,反調試等各種手段保護我們的程序,程序經過保護後我們就不需要在為此擔心啦

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.