DSA

Digital Signature Algorithm

# 先瞭解的概念

1.

數位加密:用公鑰加密,只有用私鑰解開,因為私鑰只有你自己有,所以他保證了數據不能被別人看到
數位簽名:用私鑰加密,只能用公鑰解密,任何人都可以用公鑰驗證。因為私鑰只有你自己有,所以它可以保證數據只能是你發出的,不可能有別人發出,除非你得私鑰丟失或被第三方破解出來

2.

RSA 與 DSA 都是非對稱加密算法。其中RSA的安全性是基於極其困難的大整數的分解(兩個質數的乘積);DSA 的安全性是基於整數有限域離散對數難題。基本上可以認為相同密鑰長度的 RSA 算法與 DSA 算法安全性相當。

3.

DSA 只能用於數字簽名,而無法用於加密(某些擴展可以支持加密);RSA 即可作為數字簽名,也可以作為加密算法

#簽章過程:(使用Openssl)

查看相關指令

openssl gendsa
  1. 產生一個1024bits的參數檔案

openssl dsaparam -out dsa_param.pem 1024

2.從剛才的參數檔案產生一個private key 並且用AES-128之password protect 也可用aes-192或aes-256

PS:unable to write ''random state" 可參考此

https://stackoverflow.com/questions/94445/using-openssl-what-does-unable-to-write-random-state-mean

但其不影響

3.接著再從私鑰產生一把公鑰

4.之後我們新增一個我們要用來簽章的文件 ,並且在裡面寫一點字

然後用私鑰對文件簽章產生一個sig

5.最後用公鑰驗證

#使用Node.js

先參考此文,產生pem

https://adam.merrifield.ca/2012/01/20/generating-dsa-pem-key-pairs/

Last updated

Was this helpful?