2014-12-04 80 views
3

我正在爲橢圓曲線加密(針對學校和感興趣的問題)編寫一個Python程序。我目前正在研究數字簽名算法。我目前正在尋找一個好的和安全的散列函數,它在Python中是標準的或者可以很容易地下載和導入。我想過SHA256,因爲這是我知道的唯一一個尚未破解的(據我所知)。但是,我也讀過SHA不應該用於密碼學。 SHA256適合數字簽名算法嗎?或者應該使用不同的哈希函數?如果是這樣,哪一個將是一個不錯的選擇?Python中的加密哈希函數

+0

如果我需要項目中的消息簽名,我會使用http://pythonhosted.org/itsdangerous/,他們使用HMAC和SHA1顯然 – Anentropic 2014-12-04 17:46:31

+0

是不是SHA1過期?我認爲它被證明是非常脆弱的?無論如何,我正在尋找儘可能多的自己編程。這意味着我想爲ECDSA編寫幾乎所有的東西,除了散列函數外,因爲我對這個主題的知識還不夠。 – Dasherman 2014-12-04 17:48:30

+1

@Antropic這是一個MAC,而不是簽名。 MAC是對稱的。 – CodesInChaos 2014-12-05 08:44:07

回答

0

我使用SHA-512來達到類似的目的,我想你會很難獲得比這更安全的。 SHA-512是python的hashlib可用的,並且可以像這樣使用:

import hashlib 
hashGen = hashlib.sha512() 
hashGen.update("What you want to hash") 
hash = hashGen.hexdigest() 
print "your hash is: ", hash 
+0

1)是否有可能從所有更新中「清除」對象,以便它從頭開始,就像它一樣? 2)如果我的橢圓曲線只使用256位的素數和秩序,SHA512是否值得使用? – Dasherman 2014-12-04 18:41:52

+0

1)並非如此,但可以通過重複hashGen = hashlib.sha512()行來實現相同的效果。 2)它仍然值得使用,但你不會有它的全部潛力(我不是這個100%)。 – 2014-12-04 18:51:01

0

最好的標準算法,目前市面上仍然是SHA-2。 SHA-2現在由6個散列函數組成:首先定義了SHA-256,SHA-384和SHA-512。稍後增加SHA-224以允許較小的輸出尺寸。之後,引入了可用性較差的SHA-512/224和SHA-512/256。

SHA-2主要由面向32位的SHA-256變體(SHA-256和SHA-224)以及64位SHA-512變體組成。在64位機器上,SHA-512變體的性能可能實際上更高,因此引入了SHA-512/224和SHA-512/256。基本上,SHA-256/SHA-512的變體只在內部使用的常量和用作輸出大小的位數上有所不同。

在SHA-3競賽期間,即使SHA-1受到攻擊,SHA-2仍然非常強大。如果SHA-2受到攻擊或更好的散列算法標準化,我建議只查看其他散列。

維基百科:

在2005年,安全漏洞是在SHA-1中確定,即數學弱點可能存在,這表明強散列函數將是可取[6]雖然SHA-2與SHA-1算法有某些相似之處,但這些攻擊尚未成功擴展到SHA-2。

請注意,與SHA-1相比,SHA-2使用的輪次要複雜得多。

+0

1)將數字簽名的消息散列一次就足夠了嗎?或者我應該在簽名前多次散列? 2)SHA-2是否足以導出對稱加密密鑰,例如來自用戶輸入或來自橢圓曲線點或x座標?或者我應該使用不同的算法? – Dasherman 2014-12-05 10:28:57

+0

1)只需一次。2)您應該使用PBKDF,例如PBKDF2或bcrypt/scrypt作爲密碼,*正式*您應該使用KBFDF,例如HKDF作爲第二個。對於第二種,您可以作弊一點,並將其中一個SHA-2算法的輸出(最左邊的位)用作KDF。請注意,PBKDF2建立在HMAC之上,而HMAC又建立在諸如SHA-2之類的散列函數之上。 – 2014-12-05 10:33:03

+0

您的「作弊」比使用HKDF更容易受到攻擊嗎? – Dasherman 2014-12-05 10:43:53