Created
March 6, 2015 08:42
-
-
Save frankyueh/3d5d45236339ff0097a7 to your computer and use it in GitHub Desktop.
Code Sign - 程式碼數位簽章
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Code Sign - 程式碼數位簽章 | |
##數位簽章基本架構 | |
1. 產生數位簽章 | |
>`數位簽章 = 簽章( SHA1(程式), 私鑰 )` | |
2. 簽章過的程式格式 | |
> `簽章的程式 = 程式 + 憑證[公鑰] + 數位簽章` | |
3. 使用者驗證,程式是否被修改過? | |
> `SHA1(程式)` 是否等於? `認證( 數位簽章, 憑證[公鑰] )` | |
4. 使用者驗證,程式的憑證是信任與否? | |
> 驗證`憑證[公鑰]`的發行者CA是否為信任發行者及有效時間確認 | |
> | |
> 註: | |
> 也就是發行者申請憑證的機構,若發行者自行產生,則將不會被信任。 | |
但問題來了,一般申請機構申請的憑證通常只有1~3年那使用者安裝了某個被簽屬的程式,是否在到期後憑證就不合法了? | |
因此數位簽章通常會有一個簽屬時間戳記簽章(Time Stamping Sign),一旦有時間戳記簽章,使用者就會判斷時間戳記是否在程式簽章憑證時效內只要在時效內,此簽章就永久有效(除非時間戳記簽章的憑證也過期了) | |
## 加上時間戳記簽章的數位簽章架構 | |
1. 產生數位簽章 | |
`數位簽章 = 簽章( SHA1(程式), 私鑰 )` | |
2. 產生時間戳記簽章 | |
將**數位簽章**傳送給時間戳記機構(以下簡寫TSS - Time Stamping Service): | |
> 時間戳記簽章 = 簽章( SHA1(數位簽章 + 時間戳記), TSS私鑰 ) | |
> 時間戳記CA機構將回傳: | |
> 時間戳記 + TSS憑證[公鑰] + 時間戳記簽章 | |
3. 簽章過的程式格式 | |
> 簽章的程式 = 程式 + 憑證[公鑰] + 數位簽章 + { 時間戳記 + TSS憑證[公鑰] + 時間戳記簽章 } | |
4. 使用者驗證,驗證簽屬時間戳記是否被修改過? | |
> `SHA1(數位簽章 + 時間戳記)` 是否等於? `認證( 時間戳記簽章, TSS憑證[公鑰] )` | |
5. 使用者驗證,驗證簽屬時間戳記的憑證是信任與否? | |
> 驗證`TSS憑證[公鑰]`的發行者CA是否為信任發行者及有效時間確認 | |
> | |
> 註:通常時間戳計憑證的有效時間都是10年左右,因此有效時間會較長 | |
6. 使用者驗證,程式是否被修改過? | |
> `SHA1(程式)` 是否等於? `認證( 數位簽章, 憑證[公鑰] )` | |
7. 使用者驗證,程式的憑證是信任與否? | |
> 驗證`憑證[公鑰]`的發行者CA是否為信任發行者及有效時間確認 (由簽屬時間) | |
> | |
> 註:也就是發行者申請憑證的機構,若發行者自行產生,則將不會被信任 | |
## 驗證的工具及機構服務 | |
工具有很多種,例如是Visual Studio就有提供的SignTool就可以做程式簽屬 | |
提供的憑證服務機構也有很多,像我們網站使用的Go Daddy,他們也有提供程式簽章的憑證申請。 | |
不過其憑證用途與網站有些不同,要提供的資訊及工作天數也比較多,價錢也比較貴,而這也是選擇信任度較高的憑證機構,會提升發佈程式比較多信任度的主因之一。 | |
另外,時間戳記簽屬的機構,這些憑證網站甚至是工具本身的發行者也會提供。 | |
## 參考資訊 | |
- http://blogs.msdn.com/b/ieinternals/archive/2011/03/22/authenticode-code-signing-for-developers-for-file-downloads-building-smartscreen-application-reputation.aspx | |
- http://stackoverflow.com/questions/4417410/why-should-we-set-a-timestamp-when-we-do-a-codesigning | |
- https://casecurity.org/wp-content/uploads/2013/10/CASC-Code-Signing.pdf | |
- https://support.comodo.com/index.php?/Knowledgebase/Article/View/68/0/time-stamping-server |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment