回覆列表
  • 1 # 使用者4110771833081

    如果把密碼學裡的數字簽名看成有兩個輸入一個輸出的函式,那麼私鑰是x,被簽名的訊息是y, 得出來的簽名z是跟x,y同時繫結的,注意是“同時”。所以,用同樣的私鑰給不同的檔案/訊息簽名,得出來的簽名是不同的。如果f()內部在每次執行簽名的時候還會產生一個隨機數的話,那麼這個隨機數通常也會直接或者間接成為z的一部分,這樣的話,即使檔案相同,在不同時間進行的簽名也會不同。否則,簽名就很容易被偽造到另一份檔案上了。不僅僅是實用的橢圓曲線簽名演算法有這個性質,其他的簽名演算法,比如實用的RSA或者ElGamal簽名,也有這個性質。放在人的身上,就可以理解為,即使是你自己用同一支筆給檔案簽名,簽在兩份檔案上的簽名也並不是完完全全相同。(當然,人簽名的情況其實更復雜)=============分割線===============下面補充回答怎麼驗籤 拿“教科書式RSA簽名”來做個例子吧。(評論裡不能用latex公式,我就搬到答案裡了)簽名用的是一對鑰匙(d,e)。N是兩個大素數的乘積。其中d是私鑰,簽名者用d來簽名。e是接收方用來驗證簽名的鑰匙,也就是公鑰。e、d兩者滿足產生簽名 Sign(m, d):對於訊息m (任意正整數), 簽名是 驗證簽名 Verify(m, )計算如果簽名的確是用d簽在m上的,則有 (第二個等號來自尤拉定理 (數論) 和 上面提到的d*e性質)滿足這個條件就是合法的簽名了。否則,簽名無效。這個簽名的(有限的)安全性來自於當N足夠大的時候,並且e和d差不多大的時候,無法在多項式時間內,從公開的資訊e和N算出沒公開的簽名金鑰d。實際應用中,m可能和一組隨機量組合,並且hash(比如使用SHA-3),然後再簽名簽在這個hash值上。安全性基於從公鑰計算私鑰的複雜性,以及hash對碰撞的抵抗性。橢圓曲線主要是提供了更難計算離散對數問題的群和對Bilinear Map的支援,這個比較複雜,沒法幾百個字就說清楚。原則上來說,驗證一個簽名,就是用一個函式把公鑰、訊息、簽名當輸入(注意,私鑰在這裡沒有直接出現),計算一個特定的“等於”關係。

  • 中秋節和大豐收的關聯?
  • 小米10系列和華為Mate30 5G系列哪個好?