---
# System prepended metadata

title: Code signing報告
tags: [作業系統]

---

###### tags: `作業系統`

# Code signing報告
## Code signing
**什麼是程式碼簽章？**
- 程式碼簽章，就是一個虛擬的印章，在編譯好的軟體（.dll、.exe、...）上蓋章。軟體一旦被重新編譯、竄改，所蓋的章也就會消失。就只是這樣，所以簽章並不具有保證軟體無毒無害等功能。

- 程式碼簽章 ( Code Signing ) 是一種虛擬的數位簽章，主要用來驗證軟體程式碼和內容來源是可信任的。當一個軟體程式開發完成後，會開放給大眾下載、安裝、使用，而程式撰寫者無法時時刻刻確保在外流通的程式碼，不會遭到有心人士重新編譯、竄改，因此，當軟體程式碼開發完成要公開給大眾使用前，將軟體程式碼蓋上受驗證的程式碼簽章 ( Code Signing )，以此宣告其程式是正版，沒被別人竄改過，一旦軟體程式遭到異動，程式碼簽章將立即失效。

**Standard Code Signing v.s EV Code Signing，該如何選擇？**
Standard Code Signing 及 EV Code Signing 均能做到驗證程式可信度，做為程式數位身份證明的效用，而二者除了憑證顯示的資訊會有些許差異外，最大的差異是由於 Windows 8.1 以上版本（包含現行主流的Windows 10）有內建防護工具 Microsoft SmartScreen，Microsoft SmartScreen 會針對使用者下載的檔案進行安全風險提示，唯有檔案經過 EV Code Signing 認證才可避免使用者電腦顯示該風險提示。

如果是EV代碼簽名憑證的話，還支援Win8和Win10的SmartScreen，提高SmartScree信譽度，從而移除用戶收到的提示軟體可能為惡意軟體的警告訊息，EV代碼簽名憑證除了驗證企業名稱之外還需要對企業營業地址、營業類型進行驗證，大大提高了品牌的辨識度。此外還支援Windows10內核軟體簽名，因微軟自2015年10月31日起Windows10內核軟簽名都要提交EV代碼簽名憑證。

**如何檢視軟體上的簽章？**
以 Windows10 來說，在檔案上點擊右鍵 -> 內容，若有看到「數位簽章」的分頁表示該軟體具有簽章。而進一步點擊「詳細資料」 -> 「檢視憑證」，可以看到更詳細的簽章資訊。
![](https://i.imgur.com/VbGns1v.png)

 
**如何取得簽章？**
這個簽章必須要向微軟認可的發行商購買，且具有使用期限的限制。官方說法是避免被暴力破解，也就是時間一久，簽章可能被偽造。想像一下你有一顆獨特的印章，此印章只能被複製，但沒有辦法被修改。而被有心人士複製的時間需要七天。若將印章都加上一個小於七天的使用期限，且每七天就換一顆印章使用，如此一來便不用太擔心印章被偽造，即使被複製出來，因為連同使用期限都一併複製了，所以也以無法使用。

市面上常見的簽章發行商大概有：GlobalTrust、Thawte、GeoTrust、GlobalSign、Symantic 等

**有無取得簽章差別**
若您是一位程式設計師，開發程式提供使用者下載安裝，那麼您就會需要 Code Signing 程式碼簽章來做為程式可信度之驗證，保障您的程式在使用者執行安裝過程時，不會跳出「不明發行者」或「Microsoft SmartScreen」安全警告視窗。GlobalSign Code Signing 程式碼簽章服務是通過微軟認證的安全機制服務，能解決於 Windows 系統上執行程式出現不安全的問題。

```當客戶執行程式安裝檔時，若程式沒有使用程式代碼簽章，會跳出警告訊息，提醒使用者需注意此程式安全性，並且在執行程式的視窗上（如下左圖），執行視窗除了有警告文字外，在程式的出版者部份，會標示為未知；而當程式有加上簽章時，則會如下右圖，原本的警示文字不見了，並且在出版者的地方會標示上出版者資訊，客戶看到此資訊可安心安裝程式。```
- 可信的程式安裝檔
已受認證的程式安裝檔在用戶安裝執行時，會於程式執行界面上顯示出已受認證的程式開發者資訊，以宣告此程式是安全可信任的，這除了讓用戶可順利完成程式安裝之外，也可提升用戶對程式開發商的信賴感及企業品牌印象。



![](https://i.imgur.com/kumkAmA.png)

- 未受到認證的程式安裝檔
未經過認證的程式安裝檔，當用戶在執行程式時，除了在發佈者資訊的地方會呈現不知名發佈者的狀態外，依程式版本不同也會出現此程式是未受認證的警示視窗，以此來警告使用者此程式安全性有問題，如此將會降低使用者繼續安裝及使用此程式的意願。
![](https://i.imgur.com/s4ujJHy.png)

**為什麼程式碼簽章很重要？**
根據 DigiCert網路威脅安全研究報告指出，2012 年全球全球有 5.56 億人遭到了某種形式的網路犯罪。每起網路犯罪造成的平均損失是 $197 美元，因此從網際網路下載可執行檔時，人們都得小心翼翼也就不足為怪了。

也就是說，您值得採取一切措施來取得人們的信任，包括：線上發佈意味著您可以更快地發佈軟體更新、拓展您的潛在客戶群，並且由於無需實體郵件或生產光碟與包裝，您將可大幅降低成本。身為程式碼的作者，提供 可驗證的證明 表明自己的身分，以及您的程式碼未被損壞或帶有惡意程式是一件很簡單的事。事實上，許多第三方發行者和行動網路供應商 現在都會堅持 進行程式碼簽章，以保護他們的使用者。

## 數位簽章
### 資料一
:::info
https://zh.wikipedia.org/wiki/%E6%95%B8%E4%BD%8D%E7%B0%BD%E7%AB%A0
:::
數位簽章（英語：Digital Signature，又稱公鑰數位簽章）是一種功能類似寫在紙上的普通簽名、但是使用了公鑰加密領域的技術，以用於鑑別數位訊息的方法。一套數位簽章通常會定義兩種互補的運算，一個用於簽名，另一個用於驗證。法律用語中的電子簽章與數位簽章代表之意義並不相同。電子簽章指的是依附於電子文件並與其相關連，用以辨識及確認電子文件簽署人身分、資格及電子文件真偽者；數位簽章則是以數學演算法或其他方式運算對其加密而形成的電子簽章。意即並非所有的電子簽章都是數位簽章。

通常我們使用公鑰加密，用私鑰解密。而在數位簽章中，我們使用私鑰加密（相當於生成簽名），公鑰解密（相當於驗證簽名）。

**實現**
數位簽章算法是依靠公鑰加密技術來實現的。在公鑰加密技術里，每一個使用者有一對密鑰：一把公鑰和一把私鑰。公鑰可以自由發布，但私鑰則秘密保存；還有一個要求就是要讓通過公鑰推算出私鑰的做法不可能實現。
RSA、ECDSA等算法可以實現數位簽章。
常用的密碼雜湊函數有SHA家族。

### 資料二
:::info
http://www.tsnien.idv.tw/Security_WebBook/%E7%AC%AC%E4%B8%83%E7%AB%A0%20%E6%95%B8%E4%BD%8D%E7%B0%BD%E7%AB%A0%E8%88%87%E6%95%B8%E4%BD%8D%E6%86%91%E8%AD%89.html
:::

『數位簽章』（Digital Signature, DS）是公開鑰匙系統中最重要的應用之一。它具有確定傳送訊息內容的『完整性』與傳送端的『不可否認性』功能；乍看之下似乎與『訊息確認碼』（MAC）的功能非常類似，的確如此，只不過數位簽章的應用較MAC廣泛。MAC 主要以雙方共享的秘密鑰匙來確認彼此身份，所以通訊雙方事先已經約定好一把秘密鑰匙、或已協議完成一把共享鑰匙；至於數位簽章則應用在『陌生環境』之下與『陌生人』之間的通訊，除了期望能表明自己的身份之外，並且可以保證所攜帶的訊息確實是自己所傳送的。在與陌生人通訊的情況之下，雙方未能確定對方身份之前，是不可以貿然建立共享鑰匙的，因此，如何確定對方身份可說是數位簽章最主要的功能。

**(這邊有解釋為甚麼跟一般加密方法相反)**
數位簽章是一連串的二進位數字，它的功能如傳統的『簽章』一般。傳統式的簽章，是在文件上加蓋『印章』或『簽名』並作為發文者對該文件負責之用。然而，以目前的科技而言，要仿冒印章或簽名似乎沒也什麼困難，因此，許多單位（如銀行）都會要求申請人親自辦理，及當面簽名蓋章以確保其真實性（並且錄影存證）。但在虛擬網路上交易，親自辦理似乎不太可行，為了確定交易不至遭他人冒用，則必須仰賴數位簽章的輔助。首先，欲在網路上從事交易的人（或組織單位），必須擁有一對公開鑰匙系統所建構的公開鑰匙與私有鑰匙配對；對內而言，使用私有鑰匙的功能如同印章一樣，可在文件上簽署以證明它的合法性；對外而言，使用公開鑰匙則代表自己的身份，可用來證實自己所簽署文件的真偽。既然私有鑰匙如同印章一樣，則必須將它妥善收藏，免得被他人拿去盜印文件；至於公開鑰匙則儘量公佈讓眾人知曉，以便他人來驗證簽章（私有鑰匙所簽署的）。也就是說，他人可利用發行者的公開鑰匙，來驗證發行者利用私有鑰匙所簽署的文件。

### 數位簽章架構
從技術層面來看，數位簽章必須達到『完整性』與『不可否認性』的功能。圖為數位簽章範例（RSA 簽章），其運作程序說明如下：首先傳送端將訊息經過雜湊演算法計算後得到一個雜湊值，再利用它的私有鑰匙向雜湊值加密成為一個數位簽章（DS），接著，再將數位簽章附加在訊息後面一併傳送出去；接收端收到訊息之後，以同樣的雜湊演算計算出雜湊值（H’），並利用傳送端的公開鑰匙將 DS 解密，得到另一端的雜湊值（H）。接著，比較兩個雜湊值，如果相同的話，則可以確定該訊息的『完整性』（雜湊值相同），此外也可以確定其『不可否認性』（私有鑰匙與公開鑰匙配對）。

![](https://i.imgur.com/hfiqIfl.png)

由圖可以看出數位簽章系統主要是由公開鑰匙系統與雜湊演算法兩者所構成，目前使用較普遍的有 RSA 數位簽章與 DSS 數位簽章


## 數位憑證
### 資料一
:::info
https://zh.wikipedia.org/wiki/%E5%85%AC%E9%96%8B%E9%87%91%E9%91%B0%E8%AA%8D%E8%AD%89
:::
公開金鑰認證（英語：Public key certificate），又稱數位憑證（digital certificate）。是用於公開金鑰基礎建設的電子檔案，用來證明公開金鑰擁有者的身分。此檔案包含了公鑰資訊、擁有者身分資訊（主體）、以及數位憑證認證機構（發行者）對這份檔案的數位簽章，以保證這個檔案的整體內容正確無誤。擁有者憑著此檔案，可向電腦系統或其他使用者表明身分，從而對方獲得信任並授權存取或使用某些敏感的電腦服務。
簡而言之，認證機構用自己的私鑰對需要認證的人（或組織機構）的公鑰施加數位簽章並生成憑證，即憑證的本質就是對公鑰施加數位簽章。

### 公開金鑰基礎建設

:::info
參考資料
https://www.informationsecurity.com.tw/article/article_detail.aspx?aid=46
:::

**PKI的運作方式與原理**
PKI（Public Key Infrastructure，公開金鑰基礎建設架構）是以公鑰密碼學為基礎衍生出來的架構，其基礎建置包含憑證機構（Certification Authority ,CA）、註冊中心（Register Authority, RA）、目錄服務（Directory Service ,DS）伺服器。由RA統籌、審核用戶的憑證申請，將憑證申請送至CA處理後發出憑證，並將憑證公告至DS中。在使用憑證的過程中，除了對憑證的信任關係與憑證本身的正確性做檢查外，並透過憑證廢止清冊（Certificate Revocation List ,CRL）對憑證的狀態做確認檢查，了解憑證是否因某種原因而遭廢棄。憑證就像是個人的身分證，其內容包括憑證序號、用戶名稱、公開金鑰（Public Key）、憑證有效期限等。
CA必須同時為傳送者與接收者所信任，而由具公信力的第三者來擔任；由CA經過認證，簽發公開金鑰憑證，以作為檢驗私密金鑰的憑證。PKI包含一支公開金鑰（Public Key）與一支私密金鑰（Private Key），前者公開給大眾知道，後者由持有者保管。這一組金鑰為一組電子密碼，可作為檢驗身分之用，且具有相對應的關係，其中一支金鑰將訊息進行加密，另一支金鑰則可進行解密而得到原來的訊息。

**以公鑰與私鑰進行加解密有何好處？**
例如A君（傳送者）要傳送資料給B君（接收者）時，A君先到CA取得B君的公開金鑰以進行資料加密，再將資料傳送給B君，由B君用自己的私鑰進行解密；如此一來，除了A君與B君，不會有第三者看到資料的內容。至於A君送資料給B君時，如何讓B君在收到資料時，確認是A君寄出的呢？ A君可先用自己的私鑰對所傳送的資料進行加簽，再傳送給B君，B君到CA取得A君的公開金鑰，確認這一組公鑰/私鑰是否可以比對，若比對無誤，即可確定資料的傳送者的確是A君。至於資料是否被竄改就要經過訊息摘要（Message Digest）的比對。
從以上B君確認A君是資料傳送者、資料加密、資料未被竄改，再加上只有A君知道自己的私鑰，當B君收到的資料含有A君的私鑰，A君就無法否認傳送的事實，再加上CA具有舉證的義務，當交易糾紛發生時，其必須提供相關證據資料，以協助仲裁單位處理糾紛；如此一來，也就達到了交易之保密、身分認證、交易資料完整、交易的不可否認性四大需求。

#### PKI的應用
**在公共領域方面**
包括報稅、環保通報系統、健保、軍方行政相關應用、Smart Card（例如捷運悠遊卡、高速公路收費自動化）相關領域等皆是PKI可應用的範圍

**在私人企業方面**
例如企業流程（Work Flow）管理、ERP、 SCM 等相關應用、B2B/B2C應用程式等

### 資料二
:::info
http://www.tsnien.idv.tw/Security_WebBook/%E7%AC%AC%E4%B8%83%E7%AB%A0%20%E6%95%B8%E4%BD%8D%E7%B0%BD%E7%AB%A0%E8%88%87%E6%95%B8%E4%BD%8D%E6%86%91%E8%AD%89.html
:::

『數位憑證』就是讓個人（或組織單位）在網路的虛擬環境下，可以表示個人身分的依據。當個人需要在網路上進行任何交易，只需秀出個人的數位憑證，足以表明自己的身份；至於此數位憑證是真是假？如警察人員一樣，可向有關單位詢問是否有發出此數位憑證。由此可見，CA 中心除了負責發行數位憑證外，也需隨時提供使用者查詢數位憑證真偽的責任；並且每一張數位憑證都有期限的限制，如何去判斷已過期或註銷的憑證，CA 中心有需要提供一套完整的系統來處理。
另一方面，數位憑證可以達到直接仲裁與第三者仲裁的功能；當接收者收到憑證之後，可自行或透過其它管道確認這張憑證的真偽；當對方否認交易行為時，接收者亦可將他的憑證及傳送訊息，呈送給法院當作證物使用（目前已具有法律地位）。因此，數位憑證是時下電子商務或電子化管理環境，不可或缺的主要工具。