簽名的壹個目的是:防止簽名雙方抵賴。
如果先加密的話,到時候他有可能不認賬。
而且,特別是針對RSA簽名算法,有壹種專門針對先加密後簽名的攻擊。為了防止這種攻擊,推薦采用先簽名後加密。
這種攻擊方法為:
假設簽名者A用先加密後簽名的方法把消息x發給B,他是先用B的公鑰eb對x加密,然後用自己的私鑰da簽名,設A的模數為na,B的為nb,那麽,A發給B的密文為: (x^eb mod nb)^da mod na
如果B不誠實,那麽B可能偽造A的簽名。謊稱收到的是x1.因為nb是B的模數,所以B知道nb的分解,於是可以計算模nb的離散對數。 (x1)^k=x mod nb
之後,B再公布他的新公鑰。然後宣布收到的是x1不是x。