密码编码学之数字签名
生活随笔
收集整理的這篇文章主要介紹了
密码编码学之数字签名
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
- 一、數字簽名
- 1、 數字簽名關鍵部分的描述
- 2、 數字簽名的要求
- 3、 DSA數字簽名算法
- 4、 橢圓曲線數字簽名算法(ECDSA)
- 5、 RSA-PSS數字簽名算法
原創不易,轉載請幫注明出處: https://blog.csdn.net/jackone12347/article/details/122882686
一、數字簽名
1、 數字簽名關鍵部分的描述
數字簽名具有認證功能,下面是數字簽名關鍵部分的描述:
Bob: 對消息M使用Hash函數計算得到hash值h; 使用Bob的私鑰,對h使用數字簽名生成算法生成簽名S; 將S附在消息M的后面。Alice: 使用Hash函數,計算消息M的hash值h,hash函數對通訊雙方是已知的; 使用Bob提供的公鑰,對簽名進行解密,如果計算出來的hash值,與h相同,則簽名驗證通過。2、 數字簽名的要求
數據簽名需要滿足一些條件和基本特征:
1、簽名必須是與消息相關的二進制位串 (一般簽名文件直接打開是亂碼) 2、簽名必須使用發送方獨有的信息,以防止偽造和否認 (一般添加公司或者企業的獨有信息 如公司的名稱、地址、郵箱等) 3、產生數據簽名要非常容易 4、識別和驗證簽名也要非常容易 5、偽造數據簽名在計算上不可行3、 DSA數字簽名算法
下面是歸納的DSA算法:
下面是RSA和DSA方法的比較:
DSA的簽名和驗簽函數如下:
DSA算法特點:
DSA與RSA不同,DSA只能提供數字簽名,但不能用于加密。
DSA算法產生簽名,不依賴于被簽名的消息,所以可以預先計算。
4、 橢圓曲線數字簽名算法(ECDSA)
橢圓曲線密碼有效率方面的優勢,尤其是在需在短密鑰長度的應用中,RSA密碼的位數越來越長。
ECDSA的處理過程簡述:
1. 參與數字簽名的雙方都使用相同的全局域參數,用于定義橢圓曲線及曲線上的基點。 2. 簽名方需要生成私鑰和公鑰。 對于私鑰,簽名方選擇使用隨機數或者偽隨機數。使用隨機數和基點,簽名方計算出橢圓曲線上的另一個解點,作為簽名的公鑰。 3. 對待簽名的消息進行hash計算。使用私鑰、全局域參數、hash值,來產生簽名。簽名包括兩個整數:r和s 4. 驗證簽名:使用簽名方提供的公鑰、全局域參數、整數s作為輸入,并將計算得到的v,與r進行比較。如果v=r,則簽名通過驗證。下面是ECDSA簽名和驗簽流程:
5、 RSA-PSS數字簽名算法
RSA-PSS(RSA概率簽名)方案,被RSA實驗室推薦為RSA方案中最安全的一種。被廣泛應用于包括金融等領域,安全性足以說明。
MGF掩碼函數
基于SHA安全hash構建,輸入長度不固定的任意消息或者hash值,輸出為固定長度的值。簽名操作
對以上的簽名過程說明:
驗簽操作
對以上的驗簽過程說明:
注:
sLen為鹽的長度,emBits為輸入參數(比RSA模數n位長度小的值),emLen=emBits/8 padding1,十六進制00 00 00 00 00 00 00 00,即64位的0 padding2,十六進制若干位00后跟著01,其長度為(emLen-sLen-hLen-2)字節總結
以上是生活随笔為你收集整理的密码编码学之数字签名的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Activity与Thread之间的通讯
- 下一篇: Android深入浅出之Binder机制