數字簽名系列一
- 寫在前面
- 數字簽名作用
- 數字簽名發展史
- 帶屬性的數字簽名
- RSA數字簽名方案
寫在前面
學了一年的數字簽名方案,一直都在一個點進行專研,雖然還是有所識訓,總感徑訓差點感覺,上了一年研究生,還沒有對數字簽名有整體了解,導師建議我從點到面,本來想寫一篇綜述之類的,看了看大佬寫的綜述,數字簽名真的種類繁多,而且自己能力有限,寫綜述實在不知道從哪里下手,因此就想在自己博客上寫寫簽名那些事,爭取一周更一個數字簽名演算法,希望通過這樣子方式,可以對數字簽名有較深了解,也希望可以結交志趣相投的朋友一起探討(本人菜鳥,求抱大腿),
數字簽名作用
數字簽名,本質上就是一種簽名方式,古代人以手寫或者印章,指模等方式進行簽名,表示自己對簽名的內容了解且負有責任,當出現矛盾紛爭的時候可以作為證據起到法律責任(不知為啥想到了賣身契),隨著計算機發展,要求我們對數字檔案進行簽名認證,如何讓我們的簽名如同手寫印章那樣合法有效?數字簽名技術便應運而生,
數字簽名技術大多使用公鑰密碼機制,最簡單的構造即簽名者用自己私鑰進行簽名,任意驗證者使用簽名者的公鑰進行驗證,根據公鑰密碼體制可知,已知公鑰求私鑰是困難的,因此只要驗證通過,就可以認為簽名有效,因此數字簽名具有保證簽名者身份的真實性,簽名內容完整性以及一旦驗證通過,簽名不可抵賴性(概括為數字簽名的三個特性:真實性,完整性與不可抵賴性),
數字簽名發展史
1976年,Whitfield與Martin Hellman發表歷史性文章[1],提出數字簽名的概念,
1978年,發表RSA數字簽名方案,RSA是一種很經典的數字簽名方案,在現實生活中仍有很大的應用,迄今為止,對RSA的攻擊已經很多,但都沒有對它構成真正的威脅,
1978年,Rabin發表了一次性簽名方案(OTS)[2]一次性簽名方案實作簡單,甚至可以直接用部分密鑰(與身份有關)作為簽名,每個密鑰對僅加密1bit,安全性高,缺點是成本高,效率慢,為了提高效率,提出Merkle數字簽名方案,
1984年,Elgamal發表基于離散對數問題的Elgamal數字簽名演算法[3]
1984年,Adi Shamir提出基于身份的密碼技術(IBC),且給出了第一個基于身份的數字簽名方案.基于身份的密碼也稱為基于標識的密碼,
1986年Amos Fiat和Adi Shamir提出Fiat-Shamir變換[4],該變換可以將一大類身份認證轉化為數字簽名演算法,(主要應用之一,可以把互動式零知識證明轉化為非互動式,化簡演算法,提高效率,在數字簽名演算法中應用廣泛)
1991年NIST發表數字簽名演算法DSA,是對Elgamal數字簽名演算法的變形
2002年ChoonCha,JungHee Cheon等利用雙線性對構造短簽名演算法,
2017年NIST征集后量子公鑰演算法標準化作業,后量子數字簽名方案不斷得到重視
2008年Gentry,Peikert等人提出了第一個高效安全的格簽名方案[5]
2001年,曾貴華教授提出了第一個仲裁量子簽名協議(AQS)[6]
帶屬性的數字簽名
簡單功能的數字簽名方案已經不能滿足一些特殊需求,比如電子現金,電子選取,交通等領域應用,使得數字簽名功能不斷得到完善,現介紹幾個帶屬性的數字簽名技術,
(1)盲簽名:1982年David Chaum提出盲簽名概念,盲簽名是相對于一般的數字簽名而言的概念,是指簽名人員雖然對某個訊息簽了名,但他并不知道所簽訊息的具體內容,也就是說對簽名人而言,訊息被盲化處理過,簽名的有效性是指可以在訊息去盲以后公開驗證,
(2)多重簽名:多重數字簽名即為多人同時對一份數字分檔進行簽名,多重數字簽名技術有很多應用場景,比如,夫妻共同財產的支配問題,只有兩者均同意才可以進行財產支配,多重機制可用于對于簽名有需求且對長度有敏感的應用,與多重簽名類似的簽名機制為聚合簽名,聚合簽名分為通用聚合簽名與順序聚合簽名兩種,
(3)門限簽名:提到門限簽名,不得不提秘密共享技術,很多門限簽名都是有秘密共享機制轉化而成,門限簽名是普通數字簽名的一個重要分支,是門限秘密共享技術和數字簽名的一種結合,1991年,Desmedt-Frankel首次提出了(t,n)門限簽名方案,(t,n)門限簽名方案是指由n個成員組成一個簽名群體,該群體有一對公鑰和私鑰,群體內大于等于t個合法、誠實的成員組合可以代表群體用群私鑰進行簽名,任何人可利用該群體的公鑰進行簽名驗證,這里t是門限值,只有大于等于t個合法成員才能代表群體進行簽名,群體中任何個或更少的成員不能代表該群體進行簽名,同時任何成員不能假冒其他成員進行簽名,采用門限簽名方式可以實作權力分配,避免濫用職權,
…未完待續
RSA數字簽名方案
第一個數字簽名方案,我選擇了比較經典的RSA數字簽名,在介紹這個簽名之前,首先想先介紹一下RSA加解密演算法:
RSA公鑰演算法(基于大整數分解難題)
(1)選取兩個不同大素數p,q
(2)計算n=pq,
φ
(
n
)
=
(
p
?
1
)
(
q
?
1
)
\varphi (n)=\left ( p-1 \right )\left ( q-1 \right )
φ(n)=(p?1)(q?1),其中
φ
(
n
)
\varphi (n)
φ(n)是歐拉函式,
(3)隨機選取整數e<Z,1
φ
(
n
)
\varphi (n)
φ(n)作為公鑰,要求滿足
(
e
,
φ
(
n
)
)
=
1
\left ( e,\varphi \left ( n \right ) \right )=1
(e,φ(n))=1
(4)采用歐幾里得演算法計算私鑰d,使得ed=1mod
φ
(
n
)
\varphi (n)
φ(n),
e,n是公鑰,d是私鑰,p,q,
φ
(
n
)
\varphi (n)
φ(n)可銷毀不可公開
RSA簽名演算法
最簡單的RSA簽名演算法即私鑰簽名,公鑰驗證,具體流程如下:
(1)密鑰對的產生(e,d),把d傳輸給驗證者,
(2)對訊息M進行處理,求其摘要,公開摘要演算法,
(3)用戶用自己私鑰對摘要進行加密處理后,把摘要以及原文發送給驗證者
(4)驗證者用對方公鑰進行解密,得到摘要,計算M的摘要,看看兩個摘要是否一致,一致簽名成功,否則失敗,
這次就先介紹到這里,如有錯誤望指正!
參考文獻
[1] Diffie W., Hellman M. (1976) New Directions in
Cryptography. IEEE Transactions on Information Theory.
22 (6): 644.
[2]Rivest R., Shamir A., Adleman L. (1978) A Method
for Obtaining Digital Signatures and Public-Key
Cryptosystems. Communications of the ACM. 21 (2):
120–126
[3]ElGamal T. (1985) A Public Key Cryptosystem and
a Signature Scheme Based on Discrete Logarithms.
Advances in Cryptology. CRYPTO 1984. Lecture Notes in Computer Science, vol 196. Springer, Berlin,
Heidelberg.
[4]Fiat A., Shamir A. (1987) How To Prove Yourself:
Practical Solutions to Identification and Signature
Problems. Advances in Cryptology — CRYPTO’ 86.
CRYPTO 1986. Lecture Notes in Computer Science, vol
263. Springer, Berlin, Heidelberg.
[5] Craig Gentry, Chris Peikert, Vinod Vaikuntanathan. Trapdoors for hard lattices and new cryptographic constructions. In the 40th Annual ACM Symposium on Theory of Computing. ACM, 2008, 197-206.
[6]Zeng G, Keitel C H. Arbitrated quantum-signature scheme[J]. Physical Review A, 2002, 65(4): 042312.
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/300791.html
標籤:其他
