數位簽章(digital signature)大致上可分三個操作:生成金鑰(key generation)、簽章(signing)、驗證(signature verification)。
金鑰生成演算法(key generation),沒 input。而他的 output 是一對公鑰(public key)和私鑰(private key)。一把公鑰一定是對一把私鑰。成對的概念。
簽章(signing),簽章演算法 function 拿的 input 有兩個,一個是剛才產生的私鑰(private key),另一個是即將要進行操作簽章的訊息(message)。他的 output 是簽章(signature),長的樣子也是一大串看似亂數的東西。因此,想到簽章(sign)這個操作一定會想到需要使用者的私鑰(private key)。只有使用者有私鑰,有私鑰的使用者才能簽出簽章。想到簽章這個操作,還一定會想到要簽的訊息(message)是什麼,所以除了私鑰還需要訊息(message)。
驗證(Signature Verification),驗證演算法拿的 input 是剛才第一步產生的公鑰(public key)、剛才第二步產生的簽章(signature),以及剛簽名完的訊息(message)。他的 output 是一個布林值(boolean),通過驗證是 true,驗證通過(valid);沒有通過驗證是 flase,驗證未通過(invalid)。
這裡談數位簽章的三個操作,整體來看想強調的重點只有一個:用私鑰(private key)對訊息(message)做簽章(sign);用公鑰(public key)對訊息(message)做驗證(verify)。