2011-12-01 131 views
3

我需要創建一個登錄令牌,我可以在查詢字符串中將站點1傳遞給站點2。我並不需要轉移的用戶名或ID,我只需要知道在現場2,用戶對網站的有效登錄1.使用sha256登錄令牌

我目前創建這樣

timestamp|sha256(timestamp+secret) 

在令牌站點2我創建了給定時間戳+祕密的sha256,並將其與給定的哈希匹配。我也檢查時間戳,並且不驗證它是否大於5分鐘。

這是一個合理安全的方式嗎?

破解sha256並獲得祕密會很容易嗎?

+1

我想指出[Crypto.SE](http://crypto.stackexchange.com/)的可用性。你會發現那裏的專家可以回答關於這個問題的密碼方面的問題。 – derobert

+0

+1本能。 – rook

回答

3

您可以使用HMAC在已有共享密鑰的雙方之間提供已認證的消息。你所描述的與HMAC非常相似,因爲它是一種消息認證碼。雖然我實際上會使用HMAC功能來做到這一點。

爲了破解hmac,你必須使用認證碼(消息的散列部分)暴力破解密碼。攻擊者知道時間戳,所以他們可以繼續猜測祕密。只要將密碼設置得非常大而且非常隨機,就像/ dev/random的某些輸出是一個不錯的選擇。

+0

這不一樣; HMAC可以防止散列擴展攻擊,簡單的連接不會。 – derobert

+0

這並不意味着這是一種壓制,我很遺憾,它就是這樣。我想確保它看起來與HMAC非常相似,但安全性方面則與其非常不同。加密是不幸的,就像那樣。 OP應該遵循您的建議來使用HMAC。 (而且SHA256很容易受到長度擴展攻擊的影響,幾乎所有常見的哈希都是,它不是他們設計標準的一部分)。另請參閱http://crypto.stackexchange.com/questions/1186/is-hklengthx-a-secure-mac-construction – derobert

+0

@derobert讓我問你,這是一個長度延長攻擊sha256一個捷徑與暴力強制祕密?我可能會說不。如果他使用md5或更糟糕的md4,那麼我會更關心。無論我們是否同意他應該使用hmac。 – rook

1

正如@Rook所說,您應該使用HMAC來驗證您的令牌。

此外,您需要確保您的代幣不會被盜。例如,如果您以明文形式發送該令牌(無論是從站點1到用戶還是從用戶到站點2),任何聽取(認爲Firesheep)的人都可以「證明」他們有帳戶。您可以做的最好的做法是防止使用SSL/TLS。